From c96adbd366e8c7014db45ff9c25b82ac2eed6787 Mon Sep 17 00:00:00 2001
From: Ray <sympatheticfire@gmail.com>
Date: Wed, 21 Jul 2021 17:12:36 +0100
Subject: [PATCH 1/7] Changed: purge

---
 .gitignore                                    |   8 -
 FizzyLauncher.UI/FizzyLauncher.UI.csproj      | 272 -----
 FizzyLauncher.UI/FizzyLauncher.UI.csproj.user |   6 -
 FizzyLauncher.UI/Properties/AssemblyInfo.cs   |  36 -
 .../Properties/Resources.Designer.cs          | 263 -----
 FizzyLauncher.UI/Properties/Resources.resx    | 181 ----
 .../Properties/Resources16.Designer.cs        | 223 -----
 FizzyLauncher.UI/Properties/Resources16.resx  | 169 ----
 FizzyLauncher.UI/Resources/16/arrow_down.png  | Bin 601 -> 0 bytes
 FizzyLauncher.UI/Resources/16/arrow_down2.png | Bin 417 -> 0 bytes
 FizzyLauncher.UI/Resources/16/arrow_up.png    | Bin 590 -> 0 bytes
 FizzyLauncher.UI/Resources/16/arrow_up2.png   | Bin 410 -> 0 bytes
 FizzyLauncher.UI/Resources/16/close.png       | Bin 367 -> 0 bytes
 FizzyLauncher.UI/Resources/16/close2.png      | Bin 468 -> 0 bytes
 FizzyLauncher.UI/Resources/16/edit.png        | Bin 612 -> 0 bytes
 FizzyLauncher.UI/Resources/16/edit2.png       | Bin 419 -> 0 bytes
 FizzyLauncher.UI/Resources/16/file.png        | Bin 372 -> 0 bytes
 FizzyLauncher.UI/Resources/16/file2.png       | Bin 323 -> 0 bytes
 FizzyLauncher.UI/Resources/16/folder.png      | Bin 352 -> 0 bytes
 FizzyLauncher.UI/Resources/16/folder2.png     | Bin 288 -> 0 bytes
 FizzyLauncher.UI/Resources/16/minus.png       | Bin 532 -> 0 bytes
 FizzyLauncher.UI/Resources/16/minus2.png      | Bin 380 -> 0 bytes
 FizzyLauncher.UI/Resources/16/plus.png        | Bin 559 -> 0 bytes
 FizzyLauncher.UI/Resources/16/plus2.png       | Bin 398 -> 0 bytes
 FizzyLauncher.UI/Resources/titlebar_blank.png | Bin 255 -> 0 bytes
 .../Resources/titlebar_blank2.png             | Bin 260 -> 0 bytes
 .../Resources/titlebar_blank3.png             | Bin 259 -> 0 bytes
 .../Resources/titlebar_blank4.png             | Bin 260 -> 0 bytes
 .../Resources/titlebar_blank5.png             | Bin 261 -> 0 bytes
 FizzyLauncher.UI/Resources/titlebar_close.png | Bin 429 -> 0 bytes
 .../Resources/titlebar_close2.png             | Bin 478 -> 0 bytes
 .../Resources/titlebar_close3.png             | Bin 473 -> 0 bytes
 .../Resources/titlebar_close4.png             | Bin 441 -> 0 bytes
 .../Resources/titlebar_close5.png             | Bin 478 -> 0 bytes
 .../Resources/titlebar_maximise.png           | Bin 302 -> 0 bytes
 .../Resources/titlebar_maximise2.png          | Bin 307 -> 0 bytes
 .../Resources/titlebar_maximise3.png          | Bin 308 -> 0 bytes
 .../Resources/titlebar_maximise4.png          | Bin 303 -> 0 bytes
 .../Resources/titlebar_maximise5.png          | Bin 311 -> 0 bytes
 .../Resources/titlebar_minimise.png           | Bin 303 -> 0 bytes
 .../Resources/titlebar_minimise2.png          | Bin 307 -> 0 bytes
 .../Resources/titlebar_minimise3.png          | Bin 309 -> 0 bytes
 .../Resources/titlebar_minimise4.png          | Bin 304 -> 0 bytes
 .../Resources/titlebar_minimise5.png          | Bin 313 -> 0 bytes
 .../RyzStudio/Data/SQLite/SQLiteDatabase.cs   | 444 ---------
 .../RyzStudio/Drawing/Rectangoid.cs           | 124 ---
 FizzyLauncher.UI/RyzStudio/IO/FileType.cs     |  56 --
 .../RyzStudio/IO/SessionFileFormatBase.cs     | 290 ------
 FizzyLauncher.UI/RyzStudio/IO/SharpZipLib.cs  |  76 --
 FizzyLauncher.UI/RyzStudio/Net/HttpWeb.cs     | 168 ----
 .../RyzStudio/Windows/Forms/PanelBook.cs      | 258 -----
 .../Windows/Forms/StackLayoutPanel.cs         |  69 --
 .../RyzStudio/Windows/Forms/TFlatButton.cs    | 115 ---
 .../RyzStudio/Windows/Forms/TForm.cs          | 433 --------
 .../RyzStudio/Windows/Forms/TForm.resx        | 424 --------
 .../Forms/THorizontalSeparator.Designer.cs    |  37 -
 .../Windows/Forms/THorizontalSeparator.cs     |  26 -
 .../RyzStudio/Windows/Forms/TImageBox.cs      |  84 --
 .../RyzStudio/Windows/Forms/TUserControl.cs   |  73 --
 .../RyzStudio/Windows/Forms/ThreadControl.cs  | 526 ----------
 .../ThemedForms/BorderlessForm.Designer.cs    | 191 ----
 .../Windows/ThemedForms/BorderlessForm.cs     | 410 --------
 .../Windows/ThemedForms/BorderlessForm.resx   | 158 ---
 .../BorderlessToolForm.Designer.cs            | 191 ----
 .../Windows/ThemedForms/BorderlessToolForm.cs | 394 --------
 .../ThemedForms/BorderlessToolForm.resx       | 138 ---
 .../RyzStudio/Windows/ThemedForms/TButton.cs  | 140 ---
 .../Windows/ThemedForms/TButton.designer.cs   |  61 --
 .../Windows/ThemedForms/TButton.resx          | 120 ---
 .../Windows/ThemedForms/TButtonTextBox.cs     | 127 ---
 .../ThemedForms/TButtonTextBox.designer.cs    |  81 --
 .../Windows/ThemedForms/TButtonTextBox.resx   | 120 ---
 .../ThemedForms/TDialogForm.Designer.cs       |  96 --
 .../Windows/ThemedForms/TDialogForm.cs        | 136 ---
 .../Windows/ThemedForms/TDialogForm.resx      | 126 ---
 .../Windows/ThemedForms/TFolderTextBox.cs     |  42 -
 .../RyzStudio/Windows/ThemedForms/TListBox.cs | 232 -----
 .../Windows/ThemedForms/TListBox.designer.cs  | 182 ----
 .../Windows/ThemedForms/TListBox.resx         | 120 ---
 .../Windows/ThemedForms/TOpenFileTextBox.cs   |  43 -
 .../Windows/ThemedForms/TPickerBox.cs         |  98 --
 .../ThemedForms/TPickerBox.designer.cs        |  59 --
 .../Windows/ThemedForms/TPickerBox.resx       | 120 ---
 .../RyzStudio/Windows/ThemedForms/TTextBox.cs |  96 --
 .../Windows/ThemedForms/TTextBox.designer.cs  |  60 --
 .../Windows/ThemedForms/TTextBox.resx         | 120 ---
 .../Windows/ThemedForms/TUserControl.cs       | 106 --
 .../ThemedForms/TUserControl.designer.cs      |  37 -
 .../Windows/ThemedForms/TYesNoPickerBox.cs    |  17 -
 FizzyLauncher.csproj                          | 171 ----
 FizzyLauncher.csproj.user                     |   6 -
 MainForm.Designer.cs                          | 336 -------
 MainForm.cs                                   | 595 -----------
 MainForm.resx                                 | 730 --------------
 Models/LauncherSession.cs                     |  41 -
 Models/TileGroupModel.cs                      |  14 -
 Models/TileModel.cs                           | 100 --
 Program.cs                                    |  31 -
 Properties/AssemblyInfo.cs                    |  36 -
 Properties/Resources.Designer.cs              | 103 --
 Properties/Resources.resx                     | 133 ---
 Properties/Settings.Designer.cs               |  26 -
 Properties/Settings.settings                  |   7 -
 Resources/app_icon.png                        | Bin 1344 -> 0 bytes
 Resources/app_icon_32.png                     | Bin 1728 -> 0 bytes
 Resources/folder_32.png                       | Bin 601 -> 0 bytes
 Resources/raw/icon-set.svg                    | 942 ------------------
 Resources/toggle-left-ea-16.png               | Bin 506 -> 0 bytes
 Resources/toggle-right-ea-16.png              | Bin 502 -> 0 bytes
 Windows/Forms/OptionsForm.cs                  | 446 ---------
 Windows/Forms/OptionsForm.resx                | 131 ---
 Windows/Forms/Tile/AddListTileForm.cs         | 294 ------
 Windows/Forms/Tile/AddListTileForm.resx       | 131 ---
 Windows/Forms/Tile/AddTileForm.cs             | 375 -------
 Windows/Forms/Tile/AddTileForm.resx           | 167 ----
 Windows/Forms/Tile/EditGroupForm.cs           | 187 ----
 Windows/Forms/Tile/EditGroupForm.resx         | 131 ---
 Windows/Forms/Tile/EditListTileForm.cs        | 302 ------
 Windows/Forms/Tile/EditListTileForm.resx      | 131 ---
 Windows/Forms/Tile/EditTileForm.cs            | 408 --------
 Windows/Forms/Tile/EditTileForm.resx          | 167 ----
 Windows/Forms/Tile/TTilePanel.Designer.cs     | 124 ---
 Windows/Forms/Tile/TTilePanel.cs              | 429 --------
 Windows/Forms/Tile/TTilePanel.resx            | 126 ---
 .../Forms/Tile/TTilePanelLayout.Designer.cs   | 222 -----
 Windows/Forms/Tile/TTilePanelLayout.cs        | 855 ----------------
 Windows/Forms/Tile/TTilePanelLayout.resx      | 126 ---
 build-release.bat                             |   2 -
 favicon.ico                                   | Bin 17542 -> 0 bytes
 installer.iss                                 |  52 -
 packages.config                               |   4 -
 skye.sln                                      |  31 -
 132 files changed, 16294 deletions(-)
 delete mode 100644 .gitignore
 delete mode 100644 FizzyLauncher.UI/FizzyLauncher.UI.csproj
 delete mode 100644 FizzyLauncher.UI/FizzyLauncher.UI.csproj.user
 delete mode 100644 FizzyLauncher.UI/Properties/AssemblyInfo.cs
 delete mode 100644 FizzyLauncher.UI/Properties/Resources.Designer.cs
 delete mode 100644 FizzyLauncher.UI/Properties/Resources.resx
 delete mode 100644 FizzyLauncher.UI/Properties/Resources16.Designer.cs
 delete mode 100644 FizzyLauncher.UI/Properties/Resources16.resx
 delete mode 100644 FizzyLauncher.UI/Resources/16/arrow_down.png
 delete mode 100644 FizzyLauncher.UI/Resources/16/arrow_down2.png
 delete mode 100644 FizzyLauncher.UI/Resources/16/arrow_up.png
 delete mode 100644 FizzyLauncher.UI/Resources/16/arrow_up2.png
 delete mode 100644 FizzyLauncher.UI/Resources/16/close.png
 delete mode 100644 FizzyLauncher.UI/Resources/16/close2.png
 delete mode 100644 FizzyLauncher.UI/Resources/16/edit.png
 delete mode 100644 FizzyLauncher.UI/Resources/16/edit2.png
 delete mode 100644 FizzyLauncher.UI/Resources/16/file.png
 delete mode 100644 FizzyLauncher.UI/Resources/16/file2.png
 delete mode 100644 FizzyLauncher.UI/Resources/16/folder.png
 delete mode 100644 FizzyLauncher.UI/Resources/16/folder2.png
 delete mode 100644 FizzyLauncher.UI/Resources/16/minus.png
 delete mode 100644 FizzyLauncher.UI/Resources/16/minus2.png
 delete mode 100644 FizzyLauncher.UI/Resources/16/plus.png
 delete mode 100644 FizzyLauncher.UI/Resources/16/plus2.png
 delete mode 100644 FizzyLauncher.UI/Resources/titlebar_blank.png
 delete mode 100644 FizzyLauncher.UI/Resources/titlebar_blank2.png
 delete mode 100644 FizzyLauncher.UI/Resources/titlebar_blank3.png
 delete mode 100644 FizzyLauncher.UI/Resources/titlebar_blank4.png
 delete mode 100644 FizzyLauncher.UI/Resources/titlebar_blank5.png
 delete mode 100644 FizzyLauncher.UI/Resources/titlebar_close.png
 delete mode 100644 FizzyLauncher.UI/Resources/titlebar_close2.png
 delete mode 100644 FizzyLauncher.UI/Resources/titlebar_close3.png
 delete mode 100644 FizzyLauncher.UI/Resources/titlebar_close4.png
 delete mode 100644 FizzyLauncher.UI/Resources/titlebar_close5.png
 delete mode 100644 FizzyLauncher.UI/Resources/titlebar_maximise.png
 delete mode 100644 FizzyLauncher.UI/Resources/titlebar_maximise2.png
 delete mode 100644 FizzyLauncher.UI/Resources/titlebar_maximise3.png
 delete mode 100644 FizzyLauncher.UI/Resources/titlebar_maximise4.png
 delete mode 100644 FizzyLauncher.UI/Resources/titlebar_maximise5.png
 delete mode 100644 FizzyLauncher.UI/Resources/titlebar_minimise.png
 delete mode 100644 FizzyLauncher.UI/Resources/titlebar_minimise2.png
 delete mode 100644 FizzyLauncher.UI/Resources/titlebar_minimise3.png
 delete mode 100644 FizzyLauncher.UI/Resources/titlebar_minimise4.png
 delete mode 100644 FizzyLauncher.UI/Resources/titlebar_minimise5.png
 delete mode 100644 FizzyLauncher.UI/RyzStudio/Data/SQLite/SQLiteDatabase.cs
 delete mode 100644 FizzyLauncher.UI/RyzStudio/Drawing/Rectangoid.cs
 delete mode 100644 FizzyLauncher.UI/RyzStudio/IO/FileType.cs
 delete mode 100644 FizzyLauncher.UI/RyzStudio/IO/SessionFileFormatBase.cs
 delete mode 100644 FizzyLauncher.UI/RyzStudio/IO/SharpZipLib.cs
 delete mode 100644 FizzyLauncher.UI/RyzStudio/Net/HttpWeb.cs
 delete mode 100644 FizzyLauncher.UI/RyzStudio/Windows/Forms/PanelBook.cs
 delete mode 100644 FizzyLauncher.UI/RyzStudio/Windows/Forms/StackLayoutPanel.cs
 delete mode 100644 FizzyLauncher.UI/RyzStudio/Windows/Forms/TFlatButton.cs
 delete mode 100644 FizzyLauncher.UI/RyzStudio/Windows/Forms/TForm.cs
 delete mode 100644 FizzyLauncher.UI/RyzStudio/Windows/Forms/TForm.resx
 delete mode 100644 FizzyLauncher.UI/RyzStudio/Windows/Forms/THorizontalSeparator.Designer.cs
 delete mode 100644 FizzyLauncher.UI/RyzStudio/Windows/Forms/THorizontalSeparator.cs
 delete mode 100644 FizzyLauncher.UI/RyzStudio/Windows/Forms/TImageBox.cs
 delete mode 100644 FizzyLauncher.UI/RyzStudio/Windows/Forms/TUserControl.cs
 delete mode 100644 FizzyLauncher.UI/RyzStudio/Windows/Forms/ThreadControl.cs
 delete mode 100644 FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/BorderlessForm.Designer.cs
 delete mode 100644 FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/BorderlessForm.cs
 delete mode 100644 FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/BorderlessForm.resx
 delete mode 100644 FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/BorderlessToolForm.Designer.cs
 delete mode 100644 FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/BorderlessToolForm.cs
 delete mode 100644 FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/BorderlessToolForm.resx
 delete mode 100644 FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TButton.cs
 delete mode 100644 FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TButton.designer.cs
 delete mode 100644 FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TButton.resx
 delete mode 100644 FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TButtonTextBox.cs
 delete mode 100644 FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TButtonTextBox.designer.cs
 delete mode 100644 FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TButtonTextBox.resx
 delete mode 100644 FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TDialogForm.Designer.cs
 delete mode 100644 FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TDialogForm.cs
 delete mode 100644 FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TDialogForm.resx
 delete mode 100644 FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TFolderTextBox.cs
 delete mode 100644 FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TListBox.cs
 delete mode 100644 FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TListBox.designer.cs
 delete mode 100644 FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TListBox.resx
 delete mode 100644 FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TOpenFileTextBox.cs
 delete mode 100644 FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TPickerBox.cs
 delete mode 100644 FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TPickerBox.designer.cs
 delete mode 100644 FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TPickerBox.resx
 delete mode 100644 FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TTextBox.cs
 delete mode 100644 FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TTextBox.designer.cs
 delete mode 100644 FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TTextBox.resx
 delete mode 100644 FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TUserControl.cs
 delete mode 100644 FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TUserControl.designer.cs
 delete mode 100644 FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TYesNoPickerBox.cs
 delete mode 100644 FizzyLauncher.csproj
 delete mode 100644 FizzyLauncher.csproj.user
 delete mode 100644 MainForm.Designer.cs
 delete mode 100644 MainForm.cs
 delete mode 100644 MainForm.resx
 delete mode 100644 Models/LauncherSession.cs
 delete mode 100644 Models/TileGroupModel.cs
 delete mode 100644 Models/TileModel.cs
 delete mode 100644 Program.cs
 delete mode 100644 Properties/AssemblyInfo.cs
 delete mode 100644 Properties/Resources.Designer.cs
 delete mode 100644 Properties/Resources.resx
 delete mode 100644 Properties/Settings.Designer.cs
 delete mode 100644 Properties/Settings.settings
 delete mode 100644 Resources/app_icon.png
 delete mode 100644 Resources/app_icon_32.png
 delete mode 100644 Resources/folder_32.png
 delete mode 100644 Resources/raw/icon-set.svg
 delete mode 100644 Resources/toggle-left-ea-16.png
 delete mode 100644 Resources/toggle-right-ea-16.png
 delete mode 100644 Windows/Forms/OptionsForm.cs
 delete mode 100644 Windows/Forms/OptionsForm.resx
 delete mode 100644 Windows/Forms/Tile/AddListTileForm.cs
 delete mode 100644 Windows/Forms/Tile/AddListTileForm.resx
 delete mode 100644 Windows/Forms/Tile/AddTileForm.cs
 delete mode 100644 Windows/Forms/Tile/AddTileForm.resx
 delete mode 100644 Windows/Forms/Tile/EditGroupForm.cs
 delete mode 100644 Windows/Forms/Tile/EditGroupForm.resx
 delete mode 100644 Windows/Forms/Tile/EditListTileForm.cs
 delete mode 100644 Windows/Forms/Tile/EditListTileForm.resx
 delete mode 100644 Windows/Forms/Tile/EditTileForm.cs
 delete mode 100644 Windows/Forms/Tile/EditTileForm.resx
 delete mode 100644 Windows/Forms/Tile/TTilePanel.Designer.cs
 delete mode 100644 Windows/Forms/Tile/TTilePanel.cs
 delete mode 100644 Windows/Forms/Tile/TTilePanel.resx
 delete mode 100644 Windows/Forms/Tile/TTilePanelLayout.Designer.cs
 delete mode 100644 Windows/Forms/Tile/TTilePanelLayout.cs
 delete mode 100644 Windows/Forms/Tile/TTilePanelLayout.resx
 delete mode 100644 build-release.bat
 delete mode 100644 favicon.ico
 delete mode 100644 installer.iss
 delete mode 100644 packages.config
 delete mode 100644 skye.sln

diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index fb85c11..0000000
--- a/.gitignore
+++ /dev/null
@@ -1,8 +0,0 @@
-/.vs
-/bin
-/obj
-/packages
-/Installer/Debug
-/Installer/Release
-/FizzyLauncher.UI/bin
-/FizzyLauncher.UI/obj
diff --git a/FizzyLauncher.UI/FizzyLauncher.UI.csproj b/FizzyLauncher.UI/FizzyLauncher.UI.csproj
deleted file mode 100644
index ddfdb4a..0000000
--- a/FizzyLauncher.UI/FizzyLauncher.UI.csproj
+++ /dev/null
@@ -1,272 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
-  <PropertyGroup>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProjectGuid>{D9A49347-583F-41B4-AFE1-63EC80BBDB38}</ProjectGuid>
-    <OutputType>Library</OutputType>
-    <AppDesignerFolder>Properties</AppDesignerFolder>
-    <RootNamespace>AppLauncher</RootNamespace>
-    <AssemblyName>fizzylauncher.ui</AssemblyName>
-    <TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
-    <FileAlignment>512</FileAlignment>
-    <Deterministic>true</Deterministic>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
-    <DebugSymbols>true</DebugSymbols>
-    <DebugType>full</DebugType>
-    <Optimize>false</Optimize>
-    <OutputPath>bin\Debug\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
-    <DebugType>pdbonly</DebugType>
-    <Optimize>true</Optimize>
-    <OutputPath>bin\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-  </PropertyGroup>
-  <PropertyGroup>
-    <AutoGenerateBindingRedirects>false</AutoGenerateBindingRedirects>
-  </PropertyGroup>
-  <ItemGroup>
-    <Reference Include="System" />
-    <Reference Include="System.Core" />
-    <Reference Include="System.Drawing" />
-    <Reference Include="System.Windows.Forms" />
-    <Reference Include="System.Xml.Linq" />
-    <Reference Include="System.Data.DataSetExtensions" />
-    <Reference Include="Microsoft.CSharp" />
-    <Reference Include="System.Data" />
-    <Reference Include="System.Net.Http" />
-    <Reference Include="System.Xml" />
-  </ItemGroup>
-  <ItemGroup>
-    <Compile Include="Properties\AssemblyInfo.cs" />
-    <Compile Include="Properties\Resources16.Designer.cs">
-      <AutoGen>True</AutoGen>
-      <DesignTime>True</DesignTime>
-      <DependentUpon>Resources16.resx</DependentUpon>
-    </Compile>
-    <Compile Include="Properties\Resources.Designer.cs">
-      <AutoGen>True</AutoGen>
-      <DesignTime>True</DesignTime>
-      <DependentUpon>Resources.resx</DependentUpon>
-    </Compile>
-    <Compile Include="RyzStudio\Drawing\Rectangoid.cs" />
-    <Compile Include="RyzStudio\Windows\Forms\TForm.cs">
-      <SubType>Form</SubType>
-    </Compile>
-    <Compile Include="RyzStudio\Windows\Forms\TUserControl.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="RyzStudio\Windows\Forms\TFlatButton.cs">
-      <SubType>Component</SubType>
-    </Compile>
-    <Compile Include="RyzStudio\Windows\Forms\THorizontalSeparator.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="RyzStudio\Windows\Forms\THorizontalSeparator.Designer.cs">
-      <DependentUpon>THorizontalSeparator.cs</DependentUpon>
-    </Compile>
-    <Compile Include="RyzStudio\Windows\Forms\ThreadControl.cs" />
-    <Compile Include="RyzStudio\Windows\Forms\TImageBox.cs">
-      <SubType>Component</SubType>
-    </Compile>
-    <Compile Include="RyzStudio\Windows\ThemedForms\TButton.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="RyzStudio\Windows\ThemedForms\TButton.designer.cs">
-      <DependentUpon>TButton.cs</DependentUpon>
-    </Compile>
-    <Compile Include="RyzStudio\Windows\ThemedForms\TButtonTextBox.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="RyzStudio\Windows\ThemedForms\TButtonTextBox.designer.cs">
-      <DependentUpon>TButtonTextBox.cs</DependentUpon>
-    </Compile>
-    <Compile Include="RyzStudio\Windows\ThemedForms\TDialogForm.cs">
-      <SubType>Form</SubType>
-    </Compile>
-    <Compile Include="RyzStudio\Windows\ThemedForms\TDialogForm.Designer.cs">
-      <DependentUpon>TDialogForm.cs</DependentUpon>
-    </Compile>
-    <Compile Include="RyzStudio\Windows\ThemedForms\TFolderTextBox.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="RyzStudio\Windows\ThemedForms\TListBox.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="RyzStudio\Windows\ThemedForms\TListBox.designer.cs">
-      <DependentUpon>TListBox.cs</DependentUpon>
-    </Compile>
-    <Compile Include="RyzStudio\Windows\ThemedForms\TOpenFileTextBox.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="RyzStudio\Windows\ThemedForms\TPickerBox.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="RyzStudio\Windows\ThemedForms\TPickerBox.designer.cs">
-      <DependentUpon>TPickerBox.cs</DependentUpon>
-    </Compile>
-    <Compile Include="RyzStudio\Windows\ThemedForms\TTextBox.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="RyzStudio\Windows\ThemedForms\TTextBox.designer.cs">
-      <DependentUpon>TTextBox.cs</DependentUpon>
-    </Compile>
-    <Compile Include="RyzStudio\Windows\ThemedForms\TUserControl.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="RyzStudio\Windows\ThemedForms\TUserControl.designer.cs">
-      <DependentUpon>TUserControl.cs</DependentUpon>
-    </Compile>
-    <Compile Include="RyzStudio\Windows\ThemedForms\TYesNoPickerBox.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-  </ItemGroup>
-  <ItemGroup>
-    <EmbeddedResource Include="Properties\Resources16.resx">
-      <Generator>ResXFileCodeGenerator</Generator>
-      <LastGenOutput>Resources16.Designer.cs</LastGenOutput>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Properties\Resources.resx">
-      <Generator>ResXFileCodeGenerator</Generator>
-      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
-    </EmbeddedResource>
-    <EmbeddedResource Include="RyzStudio\Windows\Forms\TForm.resx">
-      <DependentUpon>TForm.cs</DependentUpon>
-    </EmbeddedResource>
-    <EmbeddedResource Include="RyzStudio\Windows\ThemedForms\TButton.resx">
-      <DependentUpon>TButton.cs</DependentUpon>
-    </EmbeddedResource>
-    <EmbeddedResource Include="RyzStudio\Windows\ThemedForms\TButtonTextBox.resx">
-      <DependentUpon>TButtonTextBox.cs</DependentUpon>
-    </EmbeddedResource>
-    <EmbeddedResource Include="RyzStudio\Windows\ThemedForms\TDialogForm.resx">
-      <DependentUpon>TDialogForm.cs</DependentUpon>
-    </EmbeddedResource>
-    <EmbeddedResource Include="RyzStudio\Windows\ThemedForms\TListBox.resx">
-      <DependentUpon>TListBox.cs</DependentUpon>
-    </EmbeddedResource>
-    <EmbeddedResource Include="RyzStudio\Windows\ThemedForms\TPickerBox.resx">
-      <DependentUpon>TPickerBox.cs</DependentUpon>
-    </EmbeddedResource>
-    <EmbeddedResource Include="RyzStudio\Windows\ThemedForms\TTextBox.resx">
-      <DependentUpon>TTextBox.cs</DependentUpon>
-    </EmbeddedResource>
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="Resources\16\arrow_down.png" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="Resources\16\arrow_down2.png" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="Resources\16\arrow_up.png" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="Resources\16\arrow_up2.png" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="Resources\16\close.png" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="Resources\16\close2.png" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="Resources\16\edit.png" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="Resources\16\edit2.png" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="Resources\16\file.png" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="Resources\16\file2.png" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="Resources\16\folder.png" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="Resources\16\folder2.png" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="Resources\16\minus.png" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="Resources\16\minus2.png" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="Resources\16\plus.png" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="Resources\16\plus2.png" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="Resources\titlebar_blank.png" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="Resources\titlebar_blank2.png" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="Resources\titlebar_blank3.png" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="Resources\titlebar_blank4.png" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="Resources\titlebar_blank5.png" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="Resources\titlebar_close.png" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="Resources\titlebar_close2.png" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="Resources\titlebar_close3.png" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="Resources\titlebar_close4.png" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="Resources\titlebar_close5.png" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="Resources\titlebar_maximise.png" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="Resources\titlebar_maximise2.png" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="Resources\titlebar_maximise3.png" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="Resources\titlebar_maximise4.png" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="Resources\titlebar_maximise5.png" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="Resources\titlebar_minimise.png" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="Resources\titlebar_minimise2.png" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="Resources\titlebar_minimise3.png" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="Resources\titlebar_minimise4.png" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="Resources\titlebar_minimise5.png" />
-  </ItemGroup>
-  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
-</Project>
\ No newline at end of file
diff --git a/FizzyLauncher.UI/FizzyLauncher.UI.csproj.user b/FizzyLauncher.UI/FizzyLauncher.UI.csproj.user
deleted file mode 100644
index c10e84b..0000000
--- a/FizzyLauncher.UI/FizzyLauncher.UI.csproj.user
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <PropertyGroup>
-    <ProjectView>ProjectFiles</ProjectView>
-  </PropertyGroup>
-</Project>
\ No newline at end of file
diff --git a/FizzyLauncher.UI/Properties/AssemblyInfo.cs b/FizzyLauncher.UI/Properties/AssemblyInfo.cs
deleted file mode 100644
index 0ec23d9..0000000
--- a/FizzyLauncher.UI/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-using System.Reflection;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("FizzyLauncher.UI")]
-[assembly: AssemblyDescription("UI")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("FizzyLauncher.UI")]
-[assembly: AssemblyCopyright("Copyright © Ray Lam 2020")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components.  If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("d9a49347-583f-41b4-afe1-63ec80bbdb38")]
-
-// Version information for an assembly consists of the following four values:
-//
-//      Major Version
-//      Minor Version
-//      Build Number
-//      Revision
-//
-// You can specify all the values or you can default the Build and Revision Numbers
-// by using the '*' as shown below:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/FizzyLauncher.UI/Properties/Resources.Designer.cs b/FizzyLauncher.UI/Properties/Resources.Designer.cs
deleted file mode 100644
index 64c08bd..0000000
--- a/FizzyLauncher.UI/Properties/Resources.Designer.cs
+++ /dev/null
@@ -1,263 +0,0 @@
-//------------------------------------------------------------------------------
-// <auto-generated>
-//     This code was generated by a tool.
-//     Runtime Version:4.0.30319.42000
-//
-//     Changes to this file may cause incorrect behavior and will be lost if
-//     the code is regenerated.
-// </auto-generated>
-//------------------------------------------------------------------------------
-
-namespace AppLauncher.Properties {
-    using System;
-    
-    
-    /// <summary>
-    ///   A strongly-typed resource class, for looking up localized strings, etc.
-    /// </summary>
-    // This class was auto-generated by the StronglyTypedResourceBuilder
-    // class via a tool like ResGen or Visual Studio.
-    // To add or remove a member, edit your .ResX file then rerun ResGen
-    // with the /str option, or rebuild your VS project.
-    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-    internal class Resources {
-        
-        private static global::System.Resources.ResourceManager resourceMan;
-        
-        private static global::System.Globalization.CultureInfo resourceCulture;
-        
-        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
-        internal Resources() {
-        }
-        
-        /// <summary>
-        ///   Returns the cached ResourceManager instance used by this class.
-        /// </summary>
-        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
-        internal static global::System.Resources.ResourceManager ResourceManager {
-            get {
-                if (object.ReferenceEquals(resourceMan, null)) {
-                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("AppLauncher.Properties.Resources", typeof(Resources).Assembly);
-                    resourceMan = temp;
-                }
-                return resourceMan;
-            }
-        }
-        
-        /// <summary>
-        ///   Overrides the current thread's CurrentUICulture property for all
-        ///   resource lookups using this strongly typed resource class.
-        /// </summary>
-        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
-        internal static global::System.Globalization.CultureInfo Culture {
-            get {
-                return resourceCulture;
-            }
-            set {
-                resourceCulture = value;
-            }
-        }
-        
-        /// <summary>
-        ///   Looks up a localized resource of type System.Drawing.Bitmap.
-        /// </summary>
-        internal static System.Drawing.Bitmap titlebar_blank {
-            get {
-                object obj = ResourceManager.GetObject("titlebar_blank", resourceCulture);
-                return ((System.Drawing.Bitmap)(obj));
-            }
-        }
-        
-        /// <summary>
-        ///   Looks up a localized resource of type System.Drawing.Bitmap.
-        /// </summary>
-        internal static System.Drawing.Bitmap titlebar_blank2 {
-            get {
-                object obj = ResourceManager.GetObject("titlebar_blank2", resourceCulture);
-                return ((System.Drawing.Bitmap)(obj));
-            }
-        }
-        
-        /// <summary>
-        ///   Looks up a localized resource of type System.Drawing.Bitmap.
-        /// </summary>
-        internal static System.Drawing.Bitmap titlebar_blank3 {
-            get {
-                object obj = ResourceManager.GetObject("titlebar_blank3", resourceCulture);
-                return ((System.Drawing.Bitmap)(obj));
-            }
-        }
-        
-        /// <summary>
-        ///   Looks up a localized resource of type System.Drawing.Bitmap.
-        /// </summary>
-        internal static System.Drawing.Bitmap titlebar_blank4 {
-            get {
-                object obj = ResourceManager.GetObject("titlebar_blank4", resourceCulture);
-                return ((System.Drawing.Bitmap)(obj));
-            }
-        }
-        
-        /// <summary>
-        ///   Looks up a localized resource of type System.Drawing.Bitmap.
-        /// </summary>
-        internal static System.Drawing.Bitmap titlebar_blank5 {
-            get {
-                object obj = ResourceManager.GetObject("titlebar_blank5", resourceCulture);
-                return ((System.Drawing.Bitmap)(obj));
-            }
-        }
-        
-        /// <summary>
-        ///   Looks up a localized resource of type System.Drawing.Bitmap.
-        /// </summary>
-        internal static System.Drawing.Bitmap titlebar_close {
-            get {
-                object obj = ResourceManager.GetObject("titlebar_close", resourceCulture);
-                return ((System.Drawing.Bitmap)(obj));
-            }
-        }
-        
-        /// <summary>
-        ///   Looks up a localized resource of type System.Drawing.Bitmap.
-        /// </summary>
-        internal static System.Drawing.Bitmap titlebar_close2 {
-            get {
-                object obj = ResourceManager.GetObject("titlebar_close2", resourceCulture);
-                return ((System.Drawing.Bitmap)(obj));
-            }
-        }
-        
-        /// <summary>
-        ///   Looks up a localized resource of type System.Drawing.Bitmap.
-        /// </summary>
-        internal static System.Drawing.Bitmap titlebar_close3 {
-            get {
-                object obj = ResourceManager.GetObject("titlebar_close3", resourceCulture);
-                return ((System.Drawing.Bitmap)(obj));
-            }
-        }
-        
-        /// <summary>
-        ///   Looks up a localized resource of type System.Drawing.Bitmap.
-        /// </summary>
-        internal static System.Drawing.Bitmap titlebar_close4 {
-            get {
-                object obj = ResourceManager.GetObject("titlebar_close4", resourceCulture);
-                return ((System.Drawing.Bitmap)(obj));
-            }
-        }
-        
-        /// <summary>
-        ///   Looks up a localized resource of type System.Drawing.Bitmap.
-        /// </summary>
-        internal static System.Drawing.Bitmap titlebar_close5 {
-            get {
-                object obj = ResourceManager.GetObject("titlebar_close5", resourceCulture);
-                return ((System.Drawing.Bitmap)(obj));
-            }
-        }
-        
-        /// <summary>
-        ///   Looks up a localized resource of type System.Drawing.Bitmap.
-        /// </summary>
-        internal static System.Drawing.Bitmap titlebar_maximise {
-            get {
-                object obj = ResourceManager.GetObject("titlebar_maximise", resourceCulture);
-                return ((System.Drawing.Bitmap)(obj));
-            }
-        }
-        
-        /// <summary>
-        ///   Looks up a localized resource of type System.Drawing.Bitmap.
-        /// </summary>
-        internal static System.Drawing.Bitmap titlebar_maximise2 {
-            get {
-                object obj = ResourceManager.GetObject("titlebar_maximise2", resourceCulture);
-                return ((System.Drawing.Bitmap)(obj));
-            }
-        }
-        
-        /// <summary>
-        ///   Looks up a localized resource of type System.Drawing.Bitmap.
-        /// </summary>
-        internal static System.Drawing.Bitmap titlebar_maximise3 {
-            get {
-                object obj = ResourceManager.GetObject("titlebar_maximise3", resourceCulture);
-                return ((System.Drawing.Bitmap)(obj));
-            }
-        }
-        
-        /// <summary>
-        ///   Looks up a localized resource of type System.Drawing.Bitmap.
-        /// </summary>
-        internal static System.Drawing.Bitmap titlebar_maximise4 {
-            get {
-                object obj = ResourceManager.GetObject("titlebar_maximise4", resourceCulture);
-                return ((System.Drawing.Bitmap)(obj));
-            }
-        }
-        
-        /// <summary>
-        ///   Looks up a localized resource of type System.Drawing.Bitmap.
-        /// </summary>
-        internal static System.Drawing.Bitmap titlebar_maximise5 {
-            get {
-                object obj = ResourceManager.GetObject("titlebar_maximise5", resourceCulture);
-                return ((System.Drawing.Bitmap)(obj));
-            }
-        }
-        
-        /// <summary>
-        ///   Looks up a localized resource of type System.Drawing.Bitmap.
-        /// </summary>
-        internal static System.Drawing.Bitmap titlebar_minimise {
-            get {
-                object obj = ResourceManager.GetObject("titlebar_minimise", resourceCulture);
-                return ((System.Drawing.Bitmap)(obj));
-            }
-        }
-        
-        /// <summary>
-        ///   Looks up a localized resource of type System.Drawing.Bitmap.
-        /// </summary>
-        internal static System.Drawing.Bitmap titlebar_minimise2 {
-            get {
-                object obj = ResourceManager.GetObject("titlebar_minimise2", resourceCulture);
-                return ((System.Drawing.Bitmap)(obj));
-            }
-        }
-        
-        /// <summary>
-        ///   Looks up a localized resource of type System.Drawing.Bitmap.
-        /// </summary>
-        internal static System.Drawing.Bitmap titlebar_minimise3 {
-            get {
-                object obj = ResourceManager.GetObject("titlebar_minimise3", resourceCulture);
-                return ((System.Drawing.Bitmap)(obj));
-            }
-        }
-        
-        /// <summary>
-        ///   Looks up a localized resource of type System.Drawing.Bitmap.
-        /// </summary>
-        internal static System.Drawing.Bitmap titlebar_minimise4 {
-            get {
-                object obj = ResourceManager.GetObject("titlebar_minimise4", resourceCulture);
-                return ((System.Drawing.Bitmap)(obj));
-            }
-        }
-        
-        /// <summary>
-        ///   Looks up a localized resource of type System.Drawing.Bitmap.
-        /// </summary>
-        internal static System.Drawing.Bitmap titlebar_minimise5 {
-            get {
-                object obj = ResourceManager.GetObject("titlebar_minimise5", resourceCulture);
-                return ((System.Drawing.Bitmap)(obj));
-            }
-        }
-    }
-}
diff --git a/FizzyLauncher.UI/Properties/Resources.resx b/FizzyLauncher.UI/Properties/Resources.resx
deleted file mode 100644
index 5f47cda..0000000
--- a/FizzyLauncher.UI/Properties/Resources.resx
+++ /dev/null
@@ -1,181 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!-- 
-    Microsoft ResX Schema 
-    
-    Version 2.0
-    
-    The primary goals of this format is to allow a simple XML format 
-    that is mostly human readable. The generation and parsing of the 
-    various data types are done through the TypeConverter classes 
-    associated with the data types.
-    
-    Example:
-    
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-                
-    There are any number of "resheader" rows that contain simple 
-    name/value pairs.
-    
-    Each data row contains a name, and value. The row also contains a 
-    type or mimetype. Type corresponds to a .NET class that support 
-    text/value conversion through the TypeConverter architecture. 
-    Classes that don't support this are serialized and stored with the 
-    mimetype set.
-    
-    The mimetype is used for serialized objects, and tells the 
-    ResXResourceReader how to depersist the object. This is currently not 
-    extensible. For a given mimetype the value must be set accordingly:
-    
-    Note - application/x-microsoft.net.object.binary.base64 is the format 
-    that the ResXResourceWriter will generate, however the reader can 
-    read any of the formats listed below.
-    
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-    
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array 
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
-  <data name="titlebar_blank" type="System.Resources.ResXFileRef, System.Windows.Forms">
-    <value>..\Resources\titlebar_blank.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
-  </data>
-  <data name="titlebar_blank2" type="System.Resources.ResXFileRef, System.Windows.Forms">
-    <value>..\Resources\titlebar_blank2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
-  </data>
-  <data name="titlebar_blank3" type="System.Resources.ResXFileRef, System.Windows.Forms">
-    <value>..\Resources\titlebar_blank3.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
-  </data>
-  <data name="titlebar_blank4" type="System.Resources.ResXFileRef, System.Windows.Forms">
-    <value>..\Resources\titlebar_blank4.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
-  </data>
-  <data name="titlebar_blank5" type="System.Resources.ResXFileRef, System.Windows.Forms">
-    <value>..\Resources\titlebar_blank5.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
-  </data>
-  <data name="titlebar_close" type="System.Resources.ResXFileRef, System.Windows.Forms">
-    <value>..\Resources\titlebar_close.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
-  </data>
-  <data name="titlebar_close2" type="System.Resources.ResXFileRef, System.Windows.Forms">
-    <value>..\Resources\titlebar_close2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
-  </data>
-  <data name="titlebar_close3" type="System.Resources.ResXFileRef, System.Windows.Forms">
-    <value>..\Resources\titlebar_close3.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
-  </data>
-  <data name="titlebar_close4" type="System.Resources.ResXFileRef, System.Windows.Forms">
-    <value>..\Resources\titlebar_close4.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
-  </data>
-  <data name="titlebar_close5" type="System.Resources.ResXFileRef, System.Windows.Forms">
-    <value>..\Resources\titlebar_close5.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
-  </data>
-  <data name="titlebar_maximise" type="System.Resources.ResXFileRef, System.Windows.Forms">
-    <value>..\Resources\titlebar_maximise.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
-  </data>
-  <data name="titlebar_maximise2" type="System.Resources.ResXFileRef, System.Windows.Forms">
-    <value>..\Resources\titlebar_maximise2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
-  </data>
-  <data name="titlebar_maximise3" type="System.Resources.ResXFileRef, System.Windows.Forms">
-    <value>..\Resources\titlebar_maximise3.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
-  </data>
-  <data name="titlebar_maximise4" type="System.Resources.ResXFileRef, System.Windows.Forms">
-    <value>..\Resources\titlebar_maximise4.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
-  </data>
-  <data name="titlebar_maximise5" type="System.Resources.ResXFileRef, System.Windows.Forms">
-    <value>..\Resources\titlebar_maximise5.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
-  </data>
-  <data name="titlebar_minimise" type="System.Resources.ResXFileRef, System.Windows.Forms">
-    <value>..\Resources\titlebar_minimise.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
-  </data>
-  <data name="titlebar_minimise2" type="System.Resources.ResXFileRef, System.Windows.Forms">
-    <value>..\Resources\titlebar_minimise2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
-  </data>
-  <data name="titlebar_minimise3" type="System.Resources.ResXFileRef, System.Windows.Forms">
-    <value>..\Resources\titlebar_minimise3.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
-  </data>
-  <data name="titlebar_minimise4" type="System.Resources.ResXFileRef, System.Windows.Forms">
-    <value>..\Resources\titlebar_minimise4.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
-  </data>
-  <data name="titlebar_minimise5" type="System.Resources.ResXFileRef, System.Windows.Forms">
-    <value>..\Resources\titlebar_minimise5.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
-  </data>
-</root>
\ No newline at end of file
diff --git a/FizzyLauncher.UI/Properties/Resources16.Designer.cs b/FizzyLauncher.UI/Properties/Resources16.Designer.cs
deleted file mode 100644
index a48b080..0000000
--- a/FizzyLauncher.UI/Properties/Resources16.Designer.cs
+++ /dev/null
@@ -1,223 +0,0 @@
-//------------------------------------------------------------------------------
-// <auto-generated>
-//     This code was generated by a tool.
-//     Runtime Version:4.0.30319.42000
-//
-//     Changes to this file may cause incorrect behavior and will be lost if
-//     the code is regenerated.
-// </auto-generated>
-//------------------------------------------------------------------------------
-
-namespace AppLauncher.Properties {
-    using System;
-    
-    
-    /// <summary>
-    ///   A strongly-typed resource class, for looking up localized strings, etc.
-    /// </summary>
-    // This class was auto-generated by the StronglyTypedResourceBuilder
-    // class via a tool like ResGen or Visual Studio.
-    // To add or remove a member, edit your .ResX file then rerun ResGen
-    // with the /str option, or rebuild your VS project.
-    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-    internal class Resources16 {
-        
-        private static global::System.Resources.ResourceManager resourceMan;
-        
-        private static global::System.Globalization.CultureInfo resourceCulture;
-        
-        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
-        internal Resources16() {
-        }
-        
-        /// <summary>
-        ///   Returns the cached ResourceManager instance used by this class.
-        /// </summary>
-        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
-        internal static global::System.Resources.ResourceManager ResourceManager {
-            get {
-                if (object.ReferenceEquals(resourceMan, null)) {
-                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("AppLauncher.Properties.Resources16", typeof(Resources16).Assembly);
-                    resourceMan = temp;
-                }
-                return resourceMan;
-            }
-        }
-        
-        /// <summary>
-        ///   Overrides the current thread's CurrentUICulture property for all
-        ///   resource lookups using this strongly typed resource class.
-        /// </summary>
-        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
-        internal static global::System.Globalization.CultureInfo Culture {
-            get {
-                return resourceCulture;
-            }
-            set {
-                resourceCulture = value;
-            }
-        }
-        
-        /// <summary>
-        ///   Looks up a localized resource of type System.Drawing.Bitmap.
-        /// </summary>
-        internal static System.Drawing.Bitmap arrow_down {
-            get {
-                object obj = ResourceManager.GetObject("arrow_down", resourceCulture);
-                return ((System.Drawing.Bitmap)(obj));
-            }
-        }
-        
-        /// <summary>
-        ///   Looks up a localized resource of type System.Drawing.Bitmap.
-        /// </summary>
-        internal static System.Drawing.Bitmap arrow_down2 {
-            get {
-                object obj = ResourceManager.GetObject("arrow_down2", resourceCulture);
-                return ((System.Drawing.Bitmap)(obj));
-            }
-        }
-        
-        /// <summary>
-        ///   Looks up a localized resource of type System.Drawing.Bitmap.
-        /// </summary>
-        internal static System.Drawing.Bitmap arrow_up {
-            get {
-                object obj = ResourceManager.GetObject("arrow_up", resourceCulture);
-                return ((System.Drawing.Bitmap)(obj));
-            }
-        }
-        
-        /// <summary>
-        ///   Looks up a localized resource of type System.Drawing.Bitmap.
-        /// </summary>
-        internal static System.Drawing.Bitmap arrow_up2 {
-            get {
-                object obj = ResourceManager.GetObject("arrow_up2", resourceCulture);
-                return ((System.Drawing.Bitmap)(obj));
-            }
-        }
-        
-        /// <summary>
-        ///   Looks up a localized resource of type System.Drawing.Bitmap.
-        /// </summary>
-        internal static System.Drawing.Bitmap close {
-            get {
-                object obj = ResourceManager.GetObject("close", resourceCulture);
-                return ((System.Drawing.Bitmap)(obj));
-            }
-        }
-        
-        /// <summary>
-        ///   Looks up a localized resource of type System.Drawing.Bitmap.
-        /// </summary>
-        internal static System.Drawing.Bitmap close2 {
-            get {
-                object obj = ResourceManager.GetObject("close2", resourceCulture);
-                return ((System.Drawing.Bitmap)(obj));
-            }
-        }
-        
-        /// <summary>
-        ///   Looks up a localized resource of type System.Drawing.Bitmap.
-        /// </summary>
-        internal static System.Drawing.Bitmap edit {
-            get {
-                object obj = ResourceManager.GetObject("edit", resourceCulture);
-                return ((System.Drawing.Bitmap)(obj));
-            }
-        }
-        
-        /// <summary>
-        ///   Looks up a localized resource of type System.Drawing.Bitmap.
-        /// </summary>
-        internal static System.Drawing.Bitmap edit2 {
-            get {
-                object obj = ResourceManager.GetObject("edit2", resourceCulture);
-                return ((System.Drawing.Bitmap)(obj));
-            }
-        }
-        
-        /// <summary>
-        ///   Looks up a localized resource of type System.Drawing.Bitmap.
-        /// </summary>
-        internal static System.Drawing.Bitmap file {
-            get {
-                object obj = ResourceManager.GetObject("file", resourceCulture);
-                return ((System.Drawing.Bitmap)(obj));
-            }
-        }
-        
-        /// <summary>
-        ///   Looks up a localized resource of type System.Drawing.Bitmap.
-        /// </summary>
-        internal static System.Drawing.Bitmap file2 {
-            get {
-                object obj = ResourceManager.GetObject("file2", resourceCulture);
-                return ((System.Drawing.Bitmap)(obj));
-            }
-        }
-        
-        /// <summary>
-        ///   Looks up a localized resource of type System.Drawing.Bitmap.
-        /// </summary>
-        internal static System.Drawing.Bitmap folder {
-            get {
-                object obj = ResourceManager.GetObject("folder", resourceCulture);
-                return ((System.Drawing.Bitmap)(obj));
-            }
-        }
-        
-        /// <summary>
-        ///   Looks up a localized resource of type System.Drawing.Bitmap.
-        /// </summary>
-        internal static System.Drawing.Bitmap folder2 {
-            get {
-                object obj = ResourceManager.GetObject("folder2", resourceCulture);
-                return ((System.Drawing.Bitmap)(obj));
-            }
-        }
-        
-        /// <summary>
-        ///   Looks up a localized resource of type System.Drawing.Bitmap.
-        /// </summary>
-        internal static System.Drawing.Bitmap minus {
-            get {
-                object obj = ResourceManager.GetObject("minus", resourceCulture);
-                return ((System.Drawing.Bitmap)(obj));
-            }
-        }
-        
-        /// <summary>
-        ///   Looks up a localized resource of type System.Drawing.Bitmap.
-        /// </summary>
-        internal static System.Drawing.Bitmap minus2 {
-            get {
-                object obj = ResourceManager.GetObject("minus2", resourceCulture);
-                return ((System.Drawing.Bitmap)(obj));
-            }
-        }
-        
-        /// <summary>
-        ///   Looks up a localized resource of type System.Drawing.Bitmap.
-        /// </summary>
-        internal static System.Drawing.Bitmap plus {
-            get {
-                object obj = ResourceManager.GetObject("plus", resourceCulture);
-                return ((System.Drawing.Bitmap)(obj));
-            }
-        }
-        
-        /// <summary>
-        ///   Looks up a localized resource of type System.Drawing.Bitmap.
-        /// </summary>
-        internal static System.Drawing.Bitmap plus2 {
-            get {
-                object obj = ResourceManager.GetObject("plus2", resourceCulture);
-                return ((System.Drawing.Bitmap)(obj));
-            }
-        }
-    }
-}
diff --git a/FizzyLauncher.UI/Properties/Resources16.resx b/FizzyLauncher.UI/Properties/Resources16.resx
deleted file mode 100644
index 78ba89b..0000000
--- a/FizzyLauncher.UI/Properties/Resources16.resx
+++ /dev/null
@@ -1,169 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!-- 
-    Microsoft ResX Schema 
-    
-    Version 2.0
-    
-    The primary goals of this format is to allow a simple XML format 
-    that is mostly human readable. The generation and parsing of the 
-    various data types are done through the TypeConverter classes 
-    associated with the data types.
-    
-    Example:
-    
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-                
-    There are any number of "resheader" rows that contain simple 
-    name/value pairs.
-    
-    Each data row contains a name, and value. The row also contains a 
-    type or mimetype. Type corresponds to a .NET class that support 
-    text/value conversion through the TypeConverter architecture. 
-    Classes that don't support this are serialized and stored with the 
-    mimetype set.
-    
-    The mimetype is used for serialized objects, and tells the 
-    ResXResourceReader how to depersist the object. This is currently not 
-    extensible. For a given mimetype the value must be set accordingly:
-    
-    Note - application/x-microsoft.net.object.binary.base64 is the format 
-    that the ResXResourceWriter will generate, however the reader can 
-    read any of the formats listed below.
-    
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-    
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array 
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
-  <data name="arrow_down" type="System.Resources.ResXFileRef, System.Windows.Forms">
-    <value>..\Resources\16\arrow_down.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
-  </data>
-  <data name="arrow_down2" type="System.Resources.ResXFileRef, System.Windows.Forms">
-    <value>..\Resources\16\arrow_down2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
-  </data>
-  <data name="arrow_up" type="System.Resources.ResXFileRef, System.Windows.Forms">
-    <value>..\Resources\16\arrow_up.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
-  </data>
-  <data name="arrow_up2" type="System.Resources.ResXFileRef, System.Windows.Forms">
-    <value>..\Resources\16\arrow_up2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
-  </data>
-  <data name="close" type="System.Resources.ResXFileRef, System.Windows.Forms">
-    <value>..\Resources\16\close.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
-  </data>
-  <data name="close2" type="System.Resources.ResXFileRef, System.Windows.Forms">
-    <value>..\Resources\16\close2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
-  </data>
-  <data name="edit" type="System.Resources.ResXFileRef, System.Windows.Forms">
-    <value>..\Resources\16\edit.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
-  </data>
-  <data name="edit2" type="System.Resources.ResXFileRef, System.Windows.Forms">
-    <value>..\Resources\16\edit2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
-  </data>
-  <data name="file" type="System.Resources.ResXFileRef, System.Windows.Forms">
-    <value>..\Resources\16\file.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
-  </data>
-  <data name="file2" type="System.Resources.ResXFileRef, System.Windows.Forms">
-    <value>..\Resources\16\file2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
-  </data>
-  <data name="folder" type="System.Resources.ResXFileRef, System.Windows.Forms">
-    <value>..\Resources\16\folder.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
-  </data>
-  <data name="folder2" type="System.Resources.ResXFileRef, System.Windows.Forms">
-    <value>..\Resources\16\folder2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
-  </data>
-  <data name="minus" type="System.Resources.ResXFileRef, System.Windows.Forms">
-    <value>..\Resources\16\minus.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
-  </data>
-  <data name="minus2" type="System.Resources.ResXFileRef, System.Windows.Forms">
-    <value>..\Resources\16\minus2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
-  </data>
-  <data name="plus" type="System.Resources.ResXFileRef, System.Windows.Forms">
-    <value>..\Resources\16\plus.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
-  </data>
-  <data name="plus2" type="System.Resources.ResXFileRef, System.Windows.Forms">
-    <value>..\Resources\16\plus2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
-  </data>
-</root>
\ No newline at end of file
diff --git a/FizzyLauncher.UI/Resources/16/arrow_down.png b/FizzyLauncher.UI/Resources/16/arrow_down.png
deleted file mode 100644
index cccf233e96a5deccc73a84bdfff320ebbdfafc31..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 601
zcmV-f0;c_mP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10p>|W
zK~y-6eN#PaR6!Iy=Mro-30PSKiIpPraGR~|R%2l*e}HHL+OCNp+H6D%i7rT@MYhmh
z(i)A;{sSL-=OJm7fImQkE@*a-h4bX)1w7SoKjxlu?hH{wQ52b^B}r`n^C|oVz%I#t
z2q9MMSsr4HCnWU%+yd|oz>cIn03dl5zyirxNiRv>2_gLYcR^}?3*aKjhojMGz13>{
ztWL`FykTamX7)hRfaI0(61e-OyZ?6gt940r#26Q2jEBSF@Hqf5Y5oXcErhUEE4~H*
zA%r*8xVv{r-Uo2Ol40LRqtSYOnxth(%k}tpJbohSK+=*Ww|DBA|A%I?`2&AVZX1Bp
zrQ0R#;c)m^l2w>kjPX$^DPfP~{1hsyOqeEluPBOBBnbdTQEW-N0pNO_%@lzBv}XW7
z2;r5xpOo~B<k!TY4WN@{+3T{7<T*+E2H-t_g*?w2WirdM9)OOdIZ1P=xmS@nE$K3V
zT_f2iIcsLCRcfhW!^}3T&56-nk~1Xx004L2h%p|<7#ELweiZeGWJym)(g47=yLYQ{
zO5}OoaQ7~NZAk+&TLF%Lrl%xtOFAI=ZZesCO6l_?FOi&?OeQbPY~{#js!<G*Zc1vC
nJOhA|K9l@Faw~*TRO|l$hQb)jyjdwG00000NkvXXu0mjf^)LpI

diff --git a/FizzyLauncher.UI/Resources/16/arrow_down2.png b/FizzyLauncher.UI/Resources/16/arrow_down2.png
deleted file mode 100644
index 5b0b11556cd01e9e14cfc44d5acb34d204a173a1..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 417
zcmV;S0bc%zP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10WL{I
zK~y-6jnlm@#8D6h@SlxrVbQ8YCt<w?(b&oZh>B8ZG=hYV6`zG(JOYKMKq6{25g!Gc
zP~6$wzw0k?l1XmP%$dxcdoI5*fj!*fHR1+M)brw=!nqnn3wXu_?jtvfX$;~7%lMFq
zukeXA^p#9j!#Y|~TP-G!LOfF<%+ZJ@`)y((h_#a9*@zq)p&2JF?D3DWFC%i)@Pyq8
zCZ&bF|6}|%-a<23!LaVO+hcE|Qs64s^7A_P80q!%DWM;$7%JpWF^{>jac*&zaZC8Z
zL&R5bMVw0p)0CE2`=d#jxL;aglVs19WRe^QI4t2eL({SLVGxay;vBz>MAynK$t3x8
z1lKlD$IAI<+QA}TBm><=ZVXcxz%f>2pQ(sCc5xkzUgO*p)-B>2nOsV+E0#r300000
LNkvXXu0mjf{w}h~

diff --git a/FizzyLauncher.UI/Resources/16/arrow_up.png b/FizzyLauncher.UI/Resources/16/arrow_up.png
deleted file mode 100644
index a08438ba358ad09ba06ed091b453a749822880e9..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 590
zcmV-U0<ryxP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10ozGL
zK~y-6jZ?d7R8bUNYa=#e@&^(t#e2kQrnVc6h4}>q6HrW}CN{B|2nrHM@L9~@7lgD%
zV>5r?W%d~)jS|QQXp9#$bC=DTaC22~Rhxa*eynxQA!-<nM&~5WOKJm{N$D>Dwn+9v
z2(ilNB#1E{m-H0C4FF#OY)aY&0FtKx%#xgz^qS<|5W>&H2C4WhfD0ra6h*PtYPEh;
zC*^tGFtcSdyDw=#^75n!-2J7y|8n;$bxC!^80TV)2gBj;82~V8{s>?-gs@sAyZdu9
zW0qx$wS0%<3V`#L4Et6T#afMY8^B^&mbX%Ti1B#*Skj)Pc}s3@RyC)BF3DYzy8yb?
zCe3DZKbhP%04FDICym!q@f!dm0HYLl-Ti81k!_MQhRRhYe3$en%d!O}WLdUA@*&Cn
zx~azi?4)}J0E7_M0jwt}005FDfR$<?$up9648VH;vw5C3>fQf^7~=^^mjG-T$v(+x
zGh40`N%lzg>Ul}`NKTRLBdz)(#&{58ocoXIM;?-;Np~a-0BpE>=WlZIJa4#r2f&7;
zftf7<e}1MXByUREBl)f@%TMX}EXj)`r^>Q?WoAo9K2vSQAnCfKHpx=}DCslF4<vgb
cgi)3M8%|0O&HO-)KL7v#07*qoM6N<$g0V#Ue*gdg

diff --git a/FizzyLauncher.UI/Resources/16/arrow_up2.png b/FizzyLauncher.UI/Resources/16/arrow_up2.png
deleted file mode 100644
index 07c1797bf4de4fbe3e64cb44f2e1ebf9e1a99805..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 410
zcmV;L0cHM)P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10VhdB
zK~y-6jnlm@#6c7V@E?&aEFMGR<2l&IR(cu<rBI5XQL*B)+7@r%E1m+0s1+(=t%gk~
z<}T}RBu;XZ$-Vd7nK^TY-x$RfZqSUlMhzpy=B|!)DVk>Sj8oi2Z4ea<-~bDFQy^dB
z9n0v=oUDu$w4%4vS=<ZqM21*IHHK`r6Qhw>&NS~}H<Mot&M--^$IP+k@ewg!sFm@A
zO_JJ&e~|AZazl=A1r14@Hl~A6$9Y6Oa#MwCG<y7eO47TpV+kjbo52HKWsti<8)p$Y
z9OJq>j#!a|`7in~jti1KTYl=$#$-ehYr*-l_HHDq|JePPk@&W9OHwy?ow9EOeObBq
znKm$o7fHO^s10EZ{n*E%!e{Elh~%)V7}Sh)O<1=RpF<x|X2`42&;S4c07*qoM6N<$
Ef({U`lK=n!

diff --git a/FizzyLauncher.UI/Resources/16/close.png b/FizzyLauncher.UI/Resources/16/close.png
deleted file mode 100644
index 25fc63244c4ebb4d67ac4fe0f893e9c281eb1584..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 367
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9F5he4R}c>anMprB-l
zYeY$Kep*R+Vo@qXd3m{BW?pu2a$-TMUVc&f>~}U&Kt+E%T^vI!dZ$iy^gC=I;CkO>
z<pYUO)l+@9r|7QmxU;gGZPQb!fX;Uo4xydF3KLiLyUM0`WE_sKwE6b=dqq#x%5_(c
zJ<PfyUMls9YX{T32HC?QOxF)ccW#r}@i97UshR5{UR%p><|#+zzjR7P%Dh^VpUb|W
zuaP%kWos0J=myW7@><mk-aGK#VOrZQ{lM^PAG4BEDPIlK_sm^v@01Qr4$rVW5Ggi4
zJ+IH&<7l+n?b5PV{?dDe6Rol*9!)M?Z@0zO=W%VEOX<Q}j7y%JOwVDgUGLzMQ-74{
z_P(vG?Rqj_RsAzq-gqVOo(Zwo^8CVC;|HRpv-Ul!-~V}Y)kju8Rng2BAC$fT!-2um
L)z4*}Q$iB}b%d0U

diff --git a/FizzyLauncher.UI/Resources/16/close2.png b/FizzyLauncher.UI/Resources/16/close2.png
deleted file mode 100644
index c02cdf0e09c2d9a8c5c6283505b31c941f7b7f5d..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 468
zcmV;_0W1EAP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10bxl*
zK~y-6jgwDG!(b4_e=m)Hj-UilO2wT^H#X2qR7$H<KEZS3B9>OD^ccms&;z)#hy{b*
zK+rVfq7iFbYTj;U-kW(de4moz(*yIY0~`T9#gGCISjqXh_|U|)P+CN7m@nf5Wmi6M
zWa4_~wtrD@IsmU>Q^1)A_(doGfxIuk_m<Vh)n?g1zn0Os+AJ^QE;M+nHTFu<C<$8~
zBl3*MOTt#CB#qu`jlFsP!qvBigK-kJdcb)SjsynK2D)3r!T8?>0<*a9lIrOvvdcW(
z3*!BYpKdExm?9FgjTzb|^+zpZE;uky5<Xq!wtLfCX6@vC{lmb`yI64WUTf^;;%*S{
zyCAMOpbNC~+Ugayhl7`iStW@3PDGiAvLNoeiCJZPIC%MY1%TbVo9EeBV9e!a9i&*c
zwyd}kQ%&jv51{&M*!+2(1;wg^?tQG}(4+%8!>r(URtmZ|W$qhAV}!e^5dtj$0000<
KMNUMnLSTZlBh&@}

diff --git a/FizzyLauncher.UI/Resources/16/edit.png b/FizzyLauncher.UI/Resources/16/edit.png
deleted file mode 100644
index 031e3f604221f0e7d68be875e68412c8b19e089e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 612
zcmV-q0-ODbP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00009a7bBm000ip
z000ip0UQ`76951J8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10r5#h
zK~y-6b(6nqR6!8OKi}oBiAg2tBvuhw&!o6IU=fXlsRgYxg|;yfK@k%>N&JP;!hkk{
zRVu+~Z1NxY$nNDxqXYy=r$G<AyB(YN<mG%$wd~GkX1+5!qR*Pm=1DV~F|$cvB)|Rw
zY)D%5-p8`PibIU?keNLMt^(hIbu-%mkTeQRNg6V<=aQ~_?|=Udki+kQ2}$?b?e<cm
z(fC!)lx5j~b8g-_ciYT1C7mmR5JFf9A#_3r=ldn~Ta0l!#@OB3+Ij+@T=OSj(R;sG
z1+`kO)16M|Qm@y$Gd@24HH5Gr=@xLx<qiAMZnu~IlksA=+kGSHa;;W-4AATK?wi@Z
zna#Mo+w1+B3pl0p02l`L%<L7w*x1<5yvdUeI9hbO3YIhs>`A&=uh-v}Ty`Xl)F_Rz
z44c^_Nk<CUd;hXZq62pGIRmi0y*-*zS_TSuwhESX9N2Zh2Vg48vH^gU(uKV2Z#n$B
zqQb*wb{5!hl2#=RIp^l{0DF?|I_D;;U;s0_A!$(3DgYsbr!mHEjB&aO=*xcKBe`79
zteI^BYaxV%LQdJTEE@<REC6d}w&|RkgMXK4S<*E#+n4k{rPRuwPe?i=X)vYq%sDrA
yV43<#^k#O&%qArr17v2OC4H3i!h7E=`~Ly1e;M$j$(1+&0000<MNUMnLSTX}h8gJq

diff --git a/FizzyLauncher.UI/Resources/16/edit2.png b/FizzyLauncher.UI/Resources/16/edit2.png
deleted file mode 100644
index b9e93ab30d4ed2c5793f4eab9ad7689ab26568fc..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 419
zcmV;U0bKrxP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00009a7bBm000ip
z000ip0UQ`76951J8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10We8K
zK~y-6jnlg>L{SvR@t;JdFsO8D5|@|IhypJ#m5!Q1H8FZd#HA7)3J*ZxDUgU4a4Co}
z6%!PDjXBPkVI?QoXRZBTXYKENoA#K*7Oqi`=L%I!<Tv+Z)`i%#h!>pUHfp1o!65dr
zj5j&>0`DlJ@0ZDnSVJTB7P7_NfaiVz^D!SywwsB`NR+!kQ#inIyjOx5Ckgh{VQeVj
z0iQU{9OoIEB(;zJ0Y6|iQ#-~b)Fg5Kf){f23TnN6{>m)8g&{m*6^9+BY&*gz?lWI5
zb>L1UgQ-d)7Nbzc2kyGS{gQ}Pl06$*IxI$$kxnCHJ(zE6??ht03)GA@Bhj*QLsGZc
z&M9gc=-bNq%d~+dyy6@;Q5(ZF2C#<}xyzJ|3CUrX(WoBls<3W0z5w(WQ9cjxl3D-&
N002ovPDHLkV1gdCtIYra

diff --git a/FizzyLauncher.UI/Resources/16/file.png b/FizzyLauncher.UI/Resources/16/file.png
deleted file mode 100644
index d0c9e5830ade13c518f1a0a7fb5c4e4f20407e41..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 372
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl
z_H+M9WCij$3p^r=85sBufiR<}hF1en1E;5pV~B-+@}K|z?GJx_eO>q8-{0o#jg5}n
z9g>X_tOiC#_t=80Zr!@IUqOk7N1;}M!R*1StE;a!<V<){v_V7b1hbR^XUKL*kM=`6
zj^+>K12(Z}++-JXWeQ&xW63z>H+#w~#;bXZn+`j)9pFh|njA5wmragwuLSFoy^UXf
z-QJ$R*||lK?E$O9ZJ!1+Yvz}S9d3O--Y>s=VUUaD2I&<qnFXYc4GljszMSq5#jeH9
z$+N)zKl9;*99k{nG5czEvaI;0?;+2zcn5=82X`{FODm(DK^DUyhBuBq%nX;AVr+}j
zesLbrKCtMAqsRpYH(gy_TLE@U>+{T?OdXq84umfFr?P-?xdad}WKNiL#_{XZGGItC
Nc)I$ztaD0e0s!%Bg1i6#

diff --git a/FizzyLauncher.UI/Resources/16/file2.png b/FizzyLauncher.UI/Resources/16/file2.png
deleted file mode 100644
index f3e9f6d2179af7121d2314669151bada83185afe..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 323
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl
z_H+M9WCij$3p^r=85sBufiR<}hF1en@P?<0V~B<S+shmI4hD!E`xwWpw!2(_TX47M
z88QAuf%iw;l1#i@l0=&?rfn9w@_){^u)ANf<PS{$bL-yiZ(A(i@*Xna@epU<qaeIa
z_>_mzch1Gq$$e+;8eZOfUvhDuXxoI>Z<;4FSAKHgGum`mj9+JAe$xE~D$Gfb_Ufni
z7#v^{&B$rov*qGpw%RufHG>j*wWC%%Y+_q<#CAgOdiK0!6}xON-0+;gM&xay`G2PQ
zOt+G*wXB{cw|r8~q%TRk64!0sue^WDo$FTu|J0^hdJ9TEnV5RN^Ixw)1@p4T61G!!
S%?<<o$l&Sf=d#Wzp$Pyn#DaSO

diff --git a/FizzyLauncher.UI/Resources/16/folder.png b/FizzyLauncher.UI/Resources/16/folder.png
deleted file mode 100644
index a97c4e0107de391e61dc628ff9a964c9e5063a99..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 352
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl
z_H+M9WCij$3p^r=85sDEfH31!Z9ZwB;8#x<#}Etux0CJp4?0L3dq1HsY2pXTU+zg8
zeyX+A@gyEQlqb~EpQNOkX??@6Wb^B}&)-g+64E8{canPf`^)>z-+dbOt}?FI(5&63
z!&xxsRAc6>xjSk&zt`3`Z)|F7-J~QH5X=#{UFURYn3YI@<L3(oJ!NkUj~AYrwd}2-
zt>fwwJ_jttCAK*V_`Ki{a*MzIbzRjOhYh_C1ebkJR#jNvvd?fa!=5|A|9&sX=bBqw
z_}4JvZ^yzP0u8$9uV$_<FL*5fp_}1OddKUN!Ht#6@)j&_uv+3@+3P8KY*Niv3t_J;
wNA`ES*0nZBa{XF+dEal7jD>TjT-wL<<V0!oL$}2<fC0eZ>FVdQ&MBb@0I8Ogm;e9(

diff --git a/FizzyLauncher.UI/Resources/16/folder2.png b/FizzyLauncher.UI/Resources/16/folder2.png
deleted file mode 100644
index d21178aa8cafb22ebfe50bf0379772d84075e671..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 288
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl
z_H+M9WCij$3p^r=85sDEfH31!Z9ZwB;8sr;#}Etux0m<wF*=I0J(Rp+#c94#sP)`j
zjhHs+1(#mC99+7BLvX5`?4s?*ey`Ov+iWj1W#1FeXLH`nnUiANX0q`pvtDAy_Kgt>
z`({cN-g>d1b*@z9#RhA)7pn!Ax7qqdta#{pJI^3+VJW*+#mk31-fh|?`8{_S-y0oW
z`^Bn$it?(JjOTVb)$O~faH{@5KU<52yXeMiVqQy{0_Lhp%~1Zkc=O`wSeX!(3x_|<
hFBYubZFY>sKU2UnWXUOwlRytJc)I$ztaD0e0suaOZf^hp

diff --git a/FizzyLauncher.UI/Resources/16/minus.png b/FizzyLauncher.UI/Resources/16/minus.png
deleted file mode 100644
index 6b396d43dcd620706ec9a4eb0662e997b8117f02..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 532
zcmV+v0_**WP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10ij7m
zK~y-6om0JPltC0d=Mrqz<PAhCMMm6aYrEBmn94UWpthQ%(Pm>O5kdSx+&3_!H6}Lu
z1`a!Sku(W;0}b&5&CapNM814RT|CwN+<VTPd*>1jj7FnNlIA6K0h}$zI{-FG_Cp9>
zkLS_C-A_q+2H-A$F96mhZ2<tu^8jW^&PaMq@<9mU`!9l${2ss+l8>vZTIqB;-|9*+
z#+I2an%N^s1CrN|NRU!`nNs?ZQo7l+)P%dwx%<IzID8HOES^6BSPmg9|BIjq_DDVi
zaM?=1zE)MWGD$K3jK||AlJ+FcTdDSX)AQfZZnyVwSmf>$fHRWb)jZzHIo~-c(ahe2
z5LU}}i{uSMt(E_SDFC~r&j5g;u=?keLy){6Y1aU30GN$2wkB0|_tTQD0oXK>eUdX~
zwm2z)q$QHmB>Mn>l+p`#KXCWC3Dl2$BrAUIOBw)JODXkEvJ+!$rIdOA)+7zgYytRv
zn4XfnCuxu5hn(~0a($8HRg%*==T~O7aBP?wPYjZ7OX`w52Y`~cNq!{xHiR&$$NvNo
W{^Fg|2zLko0000<MNUMnLSTaH$>?$b

diff --git a/FizzyLauncher.UI/Resources/16/minus2.png b/FizzyLauncher.UI/Resources/16/minus2.png
deleted file mode 100644
index 9bb41283a7f3e8d7bdf81467b5391984bea3e424..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 380
zcmV-?0fYXDP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10SQS&
zK~y-6ozqP&Ltzxg@gI>6wCuoCLc0!;h?>{~#$wuF&J`hI14vi^39BfHbP+^!L<a`%
zDc5ap()LMia&pf3zaQs5FN12}1TW~u_lyknV)Ilku0+!|K5&mt)E2Rdd0b!@UkdOO
zzR|+$kdsxhk6!dv^2PIj*N1>bHDi&}exebH)(CK42f-|p2KH8R>@rpHj$_iauf~A;
zx<-2j3%Jb{HnCL#UE(g{4%Vjq|CJMI(kt9Z29rrctd0TKq#<S`d-f!gjH<(6eyx2L
ziRK9KhJum!vvN-|$*}9xayvf;Gw_&>u!B!L;5BMXSiziR`#punlviDHSUVQ#Mw|)j
a=Jf+%ay>&=(wun!0000<MNUMnLSTY9jGv<b

diff --git a/FizzyLauncher.UI/Resources/16/plus.png b/FizzyLauncher.UI/Resources/16/plus.png
deleted file mode 100644
index f63ace902d9e993fbf04de2688e18f9c4648530e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 559
zcmV+~0?_@5P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10lY~>
zK~y-6om0zdR6!6urwDGw<PStwinQY(%-Y?Uh?tdsV1l~U#Eoty?j$0J4`k*K4A~}e
z+{_<%xz&SYqvQ`X=mkygabYLiv_XQk>ONgnr%qKDk=bN2xg=>pQV+n{1b+cAA~_5p
z#HK$F4l%}4lAZ&&3*ak&O-b7TK=M3*Ig&Gy-jI9{Lil-@AO&v#xJvR#RaL9qZudu%
zsVIt;nJt^yV@YF@*AJ4w-Cw!;FL%G0OUf<AI3Hu&E6ef)05EC(2w)|Iu#!370)P<0
zS`&BoKFLP_E?a8Yx2mdEb2dqfk`{A(e}Dg}q+Ll1mb$%}YyOvYI-T$M)8yV1fHRWb
zHOsE+`cArD0f4eBM*v`EZyR#9N!~CtM)^NB1z;!58Ngw~)&RiWw*a8sZqMd{BrizX
zF#zuY%oRn^Iw@<6@wB8_03#zgBspVd%g3+`NDgvb(nFHdB!@_)zKk*M#Te&Lz<%T-
zSz@{`X$)Z9-TTMMDT<=y?tK93lE!AX1pK{B&q&^rv`ccUuIo?f`69_{B&X}Ter;w;
xN0uooF-W>CsYmi00808y@&n012w~Fn{|yw|_65H@(}Ms2002ovPDHLkV1jc+^1c87

diff --git a/FizzyLauncher.UI/Resources/16/plus2.png b/FizzyLauncher.UI/Resources/16/plus2.png
deleted file mode 100644
index 0c29081e25aa7911ea1e9793e66094cb06efb9df..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 398
zcmV;90df9`P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10UJp~
zK~y-6ozp!|LQxO};7<w)QFmbMOcXlTfZ9mqBDB_;puJ#>KRYlk!JoJaAu%jMV?+z3
zuy_MJAMYjTNhY~>X3o7cbI)ZOHJqY{L0A_ZRI|x*sdYJ$_V9*V^dq*4Z7ksm2l$d9
zKjIrr%;!{AK?}pkEvJJQLEgzBX3>a4&PI+}IGQ=hyJ1-z1!tXPU@rw_--TsS!7JJ&
z)FlJ^oT2;?K7vy(VcBHbqp}~uHo`{xbUS^ll>C0mf1!u#f>_ZE;0E0i?j<6r{Nd6C
zY)RTul{`r+C$Z=mkApLo_IWrOGu%EUBqmZGN<@;^PQ^q(V<~4p(+T$RE*ai)#MZEh
sMO@-g<};;HMH^3X&>+?wA>A~70F4SmZKJ&MYXATM07*qoM6N<$f>mIi`~Uy|

diff --git a/FizzyLauncher.UI/Resources/titlebar_blank.png b/FizzyLauncher.UI/Resources/titlebar_blank.png
deleted file mode 100644
index 1f31a9989a0337f799e1ae3bb94b3b9aa85fd8d4..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 255
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9F5he4R}c>anMprB-l
zYeY$Kep*R+Vo@qXd3m{BW?pu2a$-TMUVc&f>~}U&Kt(;CE{-7<y>BNQ3LP@wVF};%
zNz96?zkPm-UT>wi=BHUpKDK{2Au>bq(#$J6>%Om>pmMCjaI@qNMz46UwWY?Jm+<am
z;tsH4)lw>d|2H`L^Q7Xsl0ytF0xUCPX5YR2XSVo)cMLmDYg(|zJ2JL0zhMwryERYA
ys7>HO@w~ksIM!sPowPLXK5<0;J<po7Y4^5i>KJlM$wmX+#o+1c=d#Wzp$Pzav|R}R

diff --git a/FizzyLauncher.UI/Resources/titlebar_blank2.png b/FizzyLauncher.UI/Resources/titlebar_blank2.png
deleted file mode 100644
index a04ab4daabc3ee9eb5e1210ef61f643990fbf5ee..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 260
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9F5he4R}c>anMprB-l
zYeY$Kep*R+Vo@qXd3m{BW?pu2a$-TMUVc&f>~}U&Kt&ThT^vI!df!e~6gp%e;2J;4
z)#!5cg9$PX)*|7;H9NWIb;+sh+RHmHSA6n0gB3@<|NcJjX6bQvE7oKNy@mj@qlWss
z+)jRwl#tEf%vF%sF7U^@sIta>{r5vw48HSaE>t>ro!(#kf$_-orvJBDcP9w1IJi*k
zOb=I|<l@|4Tjr)~-eH=ov+I~b-GLWtp3O~+;{3?n7pU1BdL`#N&~Xf&u6{1-oD!M<
D`9Wd4

diff --git a/FizzyLauncher.UI/Resources/titlebar_blank3.png b/FizzyLauncher.UI/Resources/titlebar_blank3.png
deleted file mode 100644
index 7f2bae3e397beab70123ba737fb109555b3c24c7..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 259
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9F5he4R}c>anMprB-l
zYeY$Kep*R+Vo@qXd3m{BW?pu2a$-TMUVc&f>~}U&Kt&TgT^vI!df!f7D0;|2fc3e&
zw`7KlQQLH*Ca*Jr;(`l>LoT_mXsX`M(ZNvqQPTeN*>&@te|uqFwScL|NXTHK^Op5B
zMJ62ns@s%>>l}ZkIXum<uz7d=P$|Q+U80M)8>Z_0SBPt9z4}N#I)PiKv1N07Zrz-e
z11%ZPcEz6C>?6i|F5`&+=T7&MDf>2iSS;2)ZqENkhs`;?YX;D544$rjF6*2UngBay
BUXK6(

diff --git a/FizzyLauncher.UI/Resources/titlebar_blank4.png b/FizzyLauncher.UI/Resources/titlebar_blank4.png
deleted file mode 100644
index af1f6005bc3b2aca3159f9f12559afa7578b72ab..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 260
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9F5he4R}c>anMprB-l
zYeY$Kep*R+Vo@qXd3m{BW?pu2a$-TMUVc&f>~}U&Kt&ThT^vI!df#5Q&SMG`V7++x
zu=736l$JDAftf7txjW+@)hak1E0Qq0pmJkV$Gs<a_N<!pZbwe9@|q8wi}GTNiZ=I@
zJ#XNwGb%MLX=$olR$MvFTt0rE_Ui?AyAv)hxH9d({`++rzVRPQ^AARU(0;MV@C~=!
z%ylZuJvNv9FP~RhFe}ySSZZ!cf~e2e%I76lBJ3CnRP>7Hd^(*8bR2`HtDnm{r-UW|
DlaObQ

diff --git a/FizzyLauncher.UI/Resources/titlebar_blank5.png b/FizzyLauncher.UI/Resources/titlebar_blank5.png
deleted file mode 100644
index 32fc5d27fac5313c92c774b25f2ac016d891f7b9..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 261
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9F5he4R}c>anMprB-l
zYeY$Kep*R+Vo@qXd3m{BW?pu2a$-TMUVc&f>~}U&Kt+>0T^vI!df!e~6lw}!aJgS+
zpT1F2a~`uaYr4mo3aQD;jjIzHjDM!;iuley_wD<(H?OYk>3jJgZUu`{rRRa1J4ZzA
zBzc82+qZQdn%*!kaD|D~yZ+Cnn`Il;$)>L6b2yXx&$oivFo*rW$?gR4HBBtu8)aj;
z6kHRIt=d(VGB;f=C$vdZ%G}8|jQ8B0&65&>ewf6s6gRLGxTO0U=sE^ZS3j3^P6<r_
DJ+xjr

diff --git a/FizzyLauncher.UI/Resources/titlebar_close.png b/FizzyLauncher.UI/Resources/titlebar_close.png
deleted file mode 100644
index 2ee40792a3a22302b44829177b27a086e9251172..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 429
zcmV;e0aE^nP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10Xj)U
zK~y-6m6Ksg12GVVzuBzlEi5AVPqstrP1b)>iQug)*3&43BnPlkPa$YG;}4@qyV&*p
z%X^ub_l86!lgU}mc@A6vHN&tmv!|T1uS@Yc@BnNEHmF79(m8imm&p$ygqwlI0H~?}
zS5>h+bn<U}0Cm-;OsCTmKz>nDxE<^?Xqsl!b=|Y7&Wm2D>b&c^=cZ{!+xK_2o>F>M
z)dg@p9*@6W%z*op((B#^fQ1mes=kZJEr6LVVvIL{?Tt_%W_I{<5IJhwR{AdXIS^I7
z17>EnC=F(-)#?rK+b;T+cudJ0WArgb58MN@qWv8qrL=a=orVxRkbxXR@Xoo@l+t=g
z1eVL?%NAul+>e6|aL_02!2z(T&Fo1;T2+Ow=Q*^v1s?01v#+XZE+SX_<2wV7IcNU~
XhR}V(^jRxG00000NkvXXu0mjfrop_S

diff --git a/FizzyLauncher.UI/Resources/titlebar_close2.png b/FizzyLauncher.UI/Resources/titlebar_close2.png
deleted file mode 100644
index f497ea768b78b7b6eb4373753494b78dbd005dbe..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 478
zcmV<40U`d0P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10c%M_
zK~y-6m6O3P15p%)zjNmb8|lT)hBOk1g{75+;uY96Bh$UMZ$Lai%TiKN&%uze-~sHU
z>IJx6S(whTFcNga_>;T1=luUU|G7C=ChPHHpqv0JfTb7`gu7vqMm7^K17`wB5w(Iv
z*$x8Jv03Lcf3#jJ*c|}38w*f1fGyhjD+JyEYx0t%=6M-ZzL=Je*eFIG%{4CP8R~<p
z$6Y_QR|9Y_afhJ^UE{Ls+m-&W1$=w$$<^a7Dm(6ZHFF^$qNl!HdHTuE89~$^u17+8
z3?}?Ibp6zI4MYnR0QUApG2@?C)pUaUCCQ`aERKqMi90|DX%|4mgl=}`)uYi*7b6Z_
z<7y7gW}d!@{PazP=qW0pYh2C!>A<%u{ZjLMVbI!mgbfAoXjE!m91L2U{Q@Jvptafi
z9uXb1=;d(@kSL7hC4WPvNi4!0%9h)WKi9LUcni3-!z7IYYfezA`k(I%w<$sN4i+DT
U^sBg}XaE2J07*qoM6N<$g1ltVNB{r;

diff --git a/FizzyLauncher.UI/Resources/titlebar_close3.png b/FizzyLauncher.UI/Resources/titlebar_close3.png
deleted file mode 100644
index 9813d70e8aa0c3b08e2d73560ac4083588392779..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 473
zcmV;~0Ve*5P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10cJ@=
zK~y-6jgw1G0znvrzrPtDN5G&$2*jOBH}bj!E_j5=ka!Lf&mkEwdJZ5g@BpqP>KG;v
zFJPjR`CR}JfymUZyQ}K2>U4{LSv%7hZQug1h=u@oBs7k-5T7g36*P#VR>TtY3JGs5
z;6jn^$>6RTaXJ8#d`%GQ2C$+|{sZ9~u*|kIFIPz`$ZurC%T?0bxElu3lAVefGxm$s
zw$d_6%lO4=J7&yyTC!8?{Eb_W_gv2}Ry(NJeqk)2pwd9pjrUw{r-6WK|K9Nn^)Jxt
zc@ym<`q}2(ZAXPUS^|2oLOZ1VB-@x92^7RHKHs9!0PQRiH2jbKPX%W^#YTcz$xbdi
zCk9z3F~~TGx~Mc}B|Et@!BNkB^KzBU>G0uoIZgXG@43p&@xXoCX#kKMKD?~11(dbD
z)d~U1-nPSkG1mkZ@Q6^J<ZH|48BHvdQAQS_aWG*Up-$BAECeVcmC*SCEQ5yVC;%J(
P00000NkvXXu0mjfBi+i9

diff --git a/FizzyLauncher.UI/Resources/titlebar_close4.png b/FizzyLauncher.UI/Resources/titlebar_close4.png
deleted file mode 100644
index ee5d5ddd392763cf2c67f527f3af42f64a5106a8..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 441
zcmV;q0Y?6bP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10Y*tg
zK~y-6jgn7J!cY*#e^aZ#DI`cVap6)=f&tNBO5!;np2Nl}Pl)$0ft?3Hgj3KyE91gi
z6e{%F&71Gf%;ZV<$dL#>a0<BOL##036HlTZFTe@#tV*0mErJW2tMck5$q$7~+Bwq!
zhzufd<p6Hp<loQ*AAsv*HA6#16-mj8goa8Mcg<klr!30Y8hq{GXa~m{d{M^pKIK*Z
z+SQA7X4Vh@*Y+Ttq6OR+>&$3uF%Usj@uD79gq!3!*c;OpLAR~|Ko=3Akk$)|94~LO
zaRODu8t#A=N|3~~tYxl>w>rg|K{#OFNp{|Q`~DlYiUO^0Ko^*9G$=KghK6e4g7=>^
zRlMkl+fw7NIMV>2*knR;Stmx5EUp8@;;@_5+=N6Ey9y&wYLQ95XFjn~Q)MV&z#%*M
j0%!lNlz~{4Ar9UbWG8$xXqI)700000NkvXXu0mjfnGm@z

diff --git a/FizzyLauncher.UI/Resources/titlebar_close5.png b/FizzyLauncher.UI/Resources/titlebar_close5.png
deleted file mode 100644
index dc57050a810219d71ce2ab91ac77a8f7300e7dfb..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 478
zcmV<40U`d0P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10c%M_
zK~y-6jg!wV17Q@!e`k!aw5bIWA`&}GA;V*^laa3>ZAkPHBwnBk(niyX+Iozds0Xl<
zV!@^lU}4&8;cv}g&hq{{=iKjpI&hbZ$%sWl%YaWlB*3*{&VO%SGITDH<mooU7q;o4
zrZ2Q?==`J+6mzlzu)o`unYKK@&&xav?*;I^tW?>x=fU(%wBBNAq?T4GUCkx^{_WmQ
z+$v045uo=NH-*AV>1w`OU%mfxK()T|u(uPp1lzr*SPVcSG&rl)R~}ME(xPN1jlh|7
zDkGE#&1e;-gCfXs41mK!q=Ainj)d`>n+s*tW*m;G_ZT-nnDIamPEJfcgSnq7QVJ@i
z&a8OzT$l-5VJdJ2XM(U&>dgMDpjuzOFT3_aEn2(#Vl!8Emq*8q;TQPD0@R}Q?r=m_
zi|A(6dO!k$(X8a(7>ojm4_sr~*xzmQexCW7O&fxaZ<rH`Fl~Y5{LV@Q9eI8C3JM{K
U+)}<oxBvhE07*qoM6N<$f+fM#&Hw-a

diff --git a/FizzyLauncher.UI/Resources/titlebar_maximise.png b/FizzyLauncher.UI/Resources/titlebar_maximise.png
deleted file mode 100644
index b17fa340e84917156d5271400b38c19f4ef5d8cc..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 302
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9F5he4R}c>anMprB-l
zYeY$Kep*R+Vo@qXd3m{BW?pu2a$-TMUVc&f>~}U&Kt;PfT^vI!df!eq%wsYXaJ~P1
z)?x*x$w^yI`7T&|Gp1eJ;b7*1i0z$I7H^ofFoF9>Q;O2k)B5gp@2gd!b8qY2spYR>
zn7NBbu(0U6UjGN{0){p($7x&gW~EI({>)kP>1H9e17}!rE>*m}_3ZYXMw^>A&+Kd1
zu706hGquus28YU9rKEoy)4mkj&*u2G@4j7T{fsZC9@Za}=VD9v#$Cq7W2xjfDJ+fc
w`twNc^$p2o-}RPmnZD&=>w6xVyL)#td|GdD>Koe&PyjG^y85}Sb4q9e07ry-@Bjb+

diff --git a/FizzyLauncher.UI/Resources/titlebar_maximise2.png b/FizzyLauncher.UI/Resources/titlebar_maximise2.png
deleted file mode 100644
index 6f9820192a29c8ff7c9f6ebfa35826c1849fe7a2..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 307
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9F5he4R}c>anMprB-l
zYeY$Kep*R+Vo@qXd3m{BW?pu2a$-TMUVc&f>~}U&Kt%^UT^vI!df!go$a~0v$8~=3
zGM5c3Oj2HK9L5gr!oN0fgjNNmOt_N5G$Dd1t8a#y2S-zh=8GRopMKw8Yvo-Z-8Xk4
zbFl;GWcL;C_W5mTOm|Rx;GDsHG{RE+?N(1cy~sVBKI{oIrZKHic5t2?uUf$TCHc8y
zlpL#CyqkUO=89iY*_9@@xs9^SH+-&sd-%aD-Lm-Sd4X4!{>=a2%$$GWHJ4dWcnepu
zrO)Z--+5Z6A8>rX&u@;K<*{44<`~Ol#e8D;m1$N!!J$7H=obc0S3j3^P6<r_4n%W(

diff --git a/FizzyLauncher.UI/Resources/titlebar_maximise3.png b/FizzyLauncher.UI/Resources/titlebar_maximise3.png
deleted file mode 100644
index c9b0e18b5bfe20947ff0d3ffdef19aa415617294..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 308
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9F5he4R}c>anMprB-l
zYeY$Kep*R+Vo@qXd3m{BW?pu2a$-TMUVc&f>~}U&Kt%^VT^vI!df!go$a~0v$8~;x
zGS>nZ2WQXbLt+cPW^Lfpo}gslsWpQ^<(2{Ka${BnM$aXS7d)Om?f(C5DW_BC^=xtG
zJHy~TL#E)s>@#)`Rw}hF&}#`h!nMog&oL%r*DlAMv8>CO16(^5mauJDcrssTUBlY9
zF}jzOU+ieL`g;29ldVC<0ws$La`>)(PG6gLLA(6*wT;p#`!fGY|G98rVaa~A_dS~r
zFe<KF^rUiL;s$}mZ*=daNX%DW(z0*!gMe>ZcDotbW?O8{3U{~z^bCWitDnm{r-UW|
DOaXf3

diff --git a/FizzyLauncher.UI/Resources/titlebar_maximise4.png b/FizzyLauncher.UI/Resources/titlebar_maximise4.png
deleted file mode 100644
index 613d94de170693842481f56d0c054334cee2b7f6..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 303
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9F5he4R}c>anMprB-l
zYeY$Kep*R+Vo@qXd3m{BW?pu2a$-TMUVc&f>~}U&Kt+2zT^vI!df#5Q^<pj*X#047
zO?{{M$JHCJOg?h##*x<*tjt-Lp2#^}x~W+)QD>dxY=wiRiOtjYJw5Pw56_t+uPzq0
zaGneN;yqcXR>Ix(Ym4z2W7FCf9IVr4&O5#AXQDyT<;}8Jj0I!DHEL&XpPc<(W9{76
zE5+xO6s&Kac=@fP_k@S%ZawU;c>4DD3RR08MYk{Bd-x~yA8Wlz#-dI8wRa@Wnxv!5
z`}*ef%5Tk=4K6E%eeZiSlSRC&^7)nk$$BOy4s%vf#v40;{$TKQ^>bP0l+XkKdt8DJ

diff --git a/FizzyLauncher.UI/Resources/titlebar_maximise5.png b/FizzyLauncher.UI/Resources/titlebar_maximise5.png
deleted file mode 100644
index f655957158adbe7f38aedf8180438acd468fbe0e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 311
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9F5he4R}c>anMprB-l
zYeY$Kep*R+Vo@qXd3m{BW?pu2a$-TMUVc&f>~}U&Kt)G9T^vI!df!eq%sUhy;Bx;@
zO<&U_6V1B^Og-EmYlKWI67*W3qp^ca<Qu0@=i(2Cmn`JC;W59dPc!^?+LqO^wNrOL
z|MFyO0He#NDGk?l^r-(ho1r|hC}Xz9AGr%!T%vBXQ*D2p@L^vtD>pS;s$s_Lnso&X
zN$JmC6@Ta56SJ^R?CX!O^$YVewU;F7=e^hWmTh*mofq%<K6J;@pNR$T%`C?czI{>1
zu!Lhv#N@1PPfO-iZZH)zxwu0lD%tno%=c?lGDPZ5+ppYib@|4-gRg=9VeoYIb6Mw<
G&;$V4Sb*&S

diff --git a/FizzyLauncher.UI/Resources/titlebar_minimise.png b/FizzyLauncher.UI/Resources/titlebar_minimise.png
deleted file mode 100644
index 19c19ae3e6e688838e7a849d3dac930fe63416a0..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 303
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9F5he4R}c>anMprB-l
zYeY$Kep*R+Vo@qXd3m{BW?pu2a$-TMUVc&f>~}U&Kt+2zT^vI!df!go$a~0v$92B`
zaSe_P4L!lxEqcBYjfN48A~V^#VtS8gxR|*HH8@;s)TrG0e{*-fW>?a}RlFM*Z8E>4
zm4#is)&J1+0#ogx1KlUgPH$Q)Z@%5|SZtC+gFq9*RO$16cmJH={qU~)fpGmneir?+
zr$5)^r+qFztW@-N*E<7EgUzxVYSaxja~tS(7_M8^Uw6!KOTjnKj1;yn_s*PC3ThKb
vSdpH!gT*f{H2ZmsvXZF$9^-<btH1ahx7uy4zgXJ<^aq2dtDnm{r-UW|S<ZC6

diff --git a/FizzyLauncher.UI/Resources/titlebar_minimise2.png b/FizzyLauncher.UI/Resources/titlebar_minimise2.png
deleted file mode 100644
index 2f6a976f3a76d2865a5acd20acd33740ed518943..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 307
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9F5he4R}c>anMprB-l
zYeY$Kep*R+Vo@qXd3m{BW?pu2a$-TMUVc&f>~}U&Kt%^UT^vI!df!eq<YNpJXxm?z
zKjn}rOYbE{3+B0LUso6MT>U2UF7b6KbEkJeb(x8_V9IB+z+bO_?yK*T%v}FzpLy8<
ziGW8!0)5{D)S?b5C+G_#WiTI|QT={fl<9l@n<<hv`5es8vPM`qB+rglE?~Z5%6k8^
z_#cN4g_U!^Y$)@1f4iV_?)sZ0!P*RwQat;<pX6L29<%x6hP221777wuW;rm33X44K
zFnqo2=VzPbhmrv=Y^QXFZ$BInF}b{L(Ghiip97}pJZCt}fqr4|boFyt=akR{0L(CU
AjsO4v

diff --git a/FizzyLauncher.UI/Resources/titlebar_minimise3.png b/FizzyLauncher.UI/Resources/titlebar_minimise3.png
deleted file mode 100644
index 78fe59e493ea854fecd2974d7bb504b34406cac9..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 309
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9F5he4R}c>anMprB-l
zYeY$Kep*R+Vo@qXd3m{BW?pu2a$-TMUVc&f>~}U&Kt+c<T^vI!df!gA6=HN0aJz4Q
zOjAHh#i=uDyF%2-T}{b5m>B&w37Q9}#x6H7)m8iu+@rNn|K0a}e7j1ep2@D>$i&v5
zuFH5sIQHTCg8LVuB0LuIRwfFIOqY|8h}wSYtj<Q+2CdVrGpr6QH@ojThw=SBHu+ED
ze;huPR4xy+GtbyBB_<>NwCrP8LI&HlT2+G*hI`zzo-X^I_<Fa6Lc*2(jq6@tX?)OV
zn-r7!^R3P01jA!DDi>)N6t>Qo^y{2b!W*BBI~e9(wphaArd<v64TGnvpUXO@geCyy
C$92>I

diff --git a/FizzyLauncher.UI/Resources/titlebar_minimise4.png b/FizzyLauncher.UI/Resources/titlebar_minimise4.png
deleted file mode 100644
index fb55d84fda7bd161b3b402526400942bf9d39427..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 304
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9F5he4R}c>anMprB-l
zYeY$Kep*R+Vo@qXd3m{BW?pu2a$-TMUVc&f>~}U&Kt+2!T^vI!df#5&?aQ1f;QBCs
zn*2<+3e}c?PEUi*yG*G8&8l*<FR)LVE2wnw#JUI@6)`7?GwWPVoIStOd`9Q9bBQgM
zet}=Sr|ayU=~n$-P`%>Bm9GnxMdqYeX}x}S`{I!`>DC$9f-zwlwX^Nj!{Y*1EqrkO
z5BEQZ4TY7yZ%>{2$6u;nExv9$m(tmm#rdo+XU4NE?tHv<wz=Cy*VJ+jmh5HPCyg%c
ySZjZ7v;3T6GsQ06vDlC-H%Ic*xy*$|wd{q==3ll&e6<F8gu&C*&t;ucLK6Uz4|xax

diff --git a/FizzyLauncher.UI/Resources/titlebar_minimise5.png b/FizzyLauncher.UI/Resources/titlebar_minimise5.png
deleted file mode 100644
index 05136906c4c095b9aa7be2bc8fec9b3a9eeaaceb..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 313
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9F5he4R}c>anMprB-l
zYeY$Kep*R+Vo@qXd3m{BW?pu2a$-TMUVc&f>~}U&Kt;zqT^vI!df!eq%sb>D;ClbQ
zj=Q6$l-H~R-WM4?PN|)3$pMp2H8rii(Yn)diHxdrUDpK`gDCCXI@|YuHPg0e%{u<&
z!QKlJ9Zysl-5)E>dpPl;qteq0W`PxA7xcJ#d-?LOo>tl{+fWpF`kD=c;r5^9htvg}
z>pwVs*8j2l!K+WFuBY{y?6J(P&slx)**b=Z1p88veazokZ)bhFv-RCt7KMYE7ubKD
z%w$-?A+vGW(@oE6=2dPm72R@ihrq4mvj=CsU!#&Cy00tW^{>r=O%D^l0DZ*Z>FVdQ
I&MBb@0ANFd2><{9

diff --git a/FizzyLauncher.UI/RyzStudio/Data/SQLite/SQLiteDatabase.cs b/FizzyLauncher.UI/RyzStudio/Data/SQLite/SQLiteDatabase.cs
deleted file mode 100644
index 2ebab58..0000000
--- a/FizzyLauncher.UI/RyzStudio/Data/SQLite/SQLiteDatabase.cs
+++ /dev/null
@@ -1,444 +0,0 @@
-using System;
-using System.ComponentModel;
-using System.Data;
-using System.IO;
-
-namespace RyzStudio.Data.SQLite
-{
-    public class SQLiteDatabase
-    {
-        #region static methods
-
-        public static string escapeSQL(string query)
-        {
-            return query.Replace("'", "''").Trim();
-        }
-
-        public static string escapeValue(string text)
-        {
-            return text.Replace("\"", "\\\"").Replace("\t", "\\t").Replace("\r", " \\r").Replace("\n", "\\n");
-        }
-
-        public static string PrepareQuery(string query, params string[] arguments)
-        {
-            string rv = query;
-
-            if (string.IsNullOrEmpty(rv))
-            {
-                return string.Empty;
-            }
-            
-            for (int i = 0; i < arguments.Length; i++)
-            {
-                rv = rv.Replace("[^" + (i + 1).ToString() + "]", escapeSQL(arguments[i]));
-            }
-            
-            return rv;
-        }
-        
-        #endregion
-        
-        protected SQLiteWrapper.SQLiteBase database = null;
-        protected string databaseLocation = ":memory:";
-        protected string lastError = "";
-        
-        protected string[] requiredTableList = new string[0];
-        
-        protected const string tableNameConfig = "ryz_app_xxxx_config";
-
-        #region public properties
-
-        [Browsable(false)]
-        public SQLiteWrapper.SQLiteBase Database
-        {
-            get { return database; }
-            set { database = value; }
-        }
-
-        [Browsable(false)]
-        public string DatabaseLocation
-        {
-            get { return databaseLocation; }
-            set { databaseLocation = value; }
-        }
-
-        [Browsable(false)]
-        public string LastError
-        {
-            get { return lastError; }
-        }
-
-        [Browsable(false)]
-        public int LastInsertID
-        {
-            get
-            {
-                if (database == null)
-                {
-                    return 0;
-                }
-                
-                DataTable dt = this.DoQuery("SELECT last_insert_rowid() AS ccc;");
-                if (dt == null)
-                {
-                    return 0;
-                }
-
-                if (dt.Rows.Count <= 0)
-                {
-                    return 0;
-                }
-                
-                return int.Parse(dt.Rows[0]["ccc"].ToString());
-            }
-        }
-        
-        #endregion
-
-        #region public methods
-
-        public bool Create(bool use_memory = true)
-        {
-            lastError = string.Empty;
-
-            if (string.IsNullOrEmpty(databaseLocation))
-            {
-                return false;
-            }
-            
-            try
-            {
-                if (database != null)
-                {
-                    database.CloseDatabase();
-                }
-
-                database = new SQLiteWrapper.SQLiteBase(((use_memory) ? ":memory:" : databaseLocation));
-            }
-            catch (Exception exc)
-            {
-                lastError = exc.Message;
-                return false;
-            }
-            
-            bool rv = Prepare();
-            if (!rv)
-            {
-                return false;
-            }
-            
-            return CheckRequiredTables();
-        }
-
-        public bool Create(string filename, bool override_file = false)
-        {
-            lastError = string.Empty;
-            databaseLocation = filename;
-
-            if (string.IsNullOrEmpty(databaseLocation))
-            {
-                return false;
-            }
-
-            if (File.Exists(databaseLocation) && override_file)
-            {
-                try
-                {
-                    File.Delete(databaseLocation);
-                }
-                catch (Exception xc)
-                {
-                    lastError = xc.Message;
-                    return false;
-                }
-            }
-            
-            try
-            {
-                if (database != null)
-                {
-                    database.CloseDatabase();
-                }
-
-                database = new SQLiteWrapper.SQLiteBase(databaseLocation);
-            }
-            catch (Exception exc)
-            {
-                lastError = exc.Message;
-                return false;
-            }
-            
-            bool rv = CheckRequiredTables();
-            if (!rv)
-            {
-                Prepare();
-            }
-            
-            return CheckRequiredTables();
-        }
-
-        public bool Load(string filename)
-        {
-            if (!File.Exists(filename))
-            {
-                return false;
-            }
-            
-            lastError = string.Empty;
-            databaseLocation = filename;
-            
-            try
-            {
-                if (database != null)
-                {
-                    database.CloseDatabase();
-                }
-
-                database = new SQLiteWrapper.SQLiteBase(databaseLocation);
-            }
-            catch (Exception exc)
-            {
-                lastError = exc.Message;
-                return false;
-            }
-            
-            return CheckRequiredTables();
-        }
-
-        public void Close()
-        {
-            if (database != null)
-            {
-                database.CloseDatabase();
-            }
-        }
-
-
-        public DataTable DoQuery(string query)
-        {
-            lastError = string.Empty;
-            if (database == null)
-            {
-                return null;
-            }
-            
-            try
-            {
-                return database.ExecuteQuery(query);
-            }
-            catch (Exception exc)
-            {
-                lastError = exc.Message;
-                return null;
-            }
-        }
-
-        public DataTable DoQuery(string query, params string[] args)
-        {
-            string sql = SQLiteDatabase.PrepareQuery(query, args);
-            
-            return DoQuery(sql);
-        }
-
-        public bool DoNonQuery(string query)
-        {
-            lastError = string.Empty;
-            if (database == null)
-            {
-                return false;
-            }
-            
-            try
-            {
-                database.ExecuteNonQuery(query);
-                return true;
-            }
-            catch (Exception exc)
-            {
-                lastError = exc.Message;
-                return false;
-            }
-        }
-
-        public bool DoNonQuery(string query, params string[] args)
-        {
-            string sql = SQLiteDatabase.PrepareQuery(query, args);
-            
-            return DoNonQuery(sql);
-        }
-
-        public string DoQuerySingle(string query)
-        {
-            lastError = string.Empty;
-            if (database == null)
-            {
-                return string.Empty;
-            }
-            
-            DataTable tbl = DoQuery(query);
-
-            if (tbl == null)
-            {
-                return string.Empty;
-            }
-
-            if (tbl.Columns.Count <= 0)
-            {
-                return string.Empty;
-            }
-
-            if (tbl.Rows.Count <= 0)
-            {
-                return string.Empty;
-            }
-            
-            return tbl.Rows[0][0].ToString();
-        }
-
-        public string DoQuerySingle(string query, params string[] args)
-        {
-            string sql = SQLiteDatabase.PrepareQuery(query, args);
-            
-            return DoQuerySingle(sql);
-        }
-
-        public int DoQueryCount(string query)
-        {
-            if (database == null)
-            {
-                return -1;
-            }
-            
-            DataTable tbl = DoQuery(query);
-
-            if (tbl == null)
-            {
-                return -1;
-            }
-
-            if (tbl.Rows.Count <= 0)
-            {
-                return 0;
-            }
-            
-            return tbl.Rows.Count;
-        }
-
-        public int DoQueryCount(string query, params string[] args)
-        {
-            string sql = SQLiteDatabase.PrepareQuery(query, args);
-            
-            return DoQueryCount(sql);
-        }
-
-        public bool DoQueryExist(string query)
-        {
-            int rv = DoQueryCount(query);
-            
-            return (rv > 0);
-        }
-
-        public bool DoQueryExist(string query, params string[] args)
-        {
-            string sql = SQLiteDatabase.PrepareQuery(query, args);
-            
-            return DoQueryExist(sql);
-        }
-
-        public bool HasTable(string table_name)
-        {
-            lastError = string.Empty;
-            if (database == null)
-            {
-                return false;
-            }
-            
-            int rv = this.DoQueryCount("SELECT 1 FROM sqlite_master WHERE type='table' AND name='" + escapeSQL(table_name) + "'");            
-
-            return (rv > 0);
-        }
-
-        public bool CheckRequiredTables()
-        {
-            bool rv = true;
-            foreach (string tbl in requiredTableList)
-            {
-                if (string.IsNullOrEmpty(tbl))
-                {
-                    continue;
-                }
-                
-                if (!this.HasTable(tbl))
-                {
-                    rv = false;
-                    break;
-                }
-            }
-            
-            return rv;
-        }
-
-
-        protected bool PrepareConfig()
-        {
-            if (HasTable(tableNameConfig))
-            {
-                return true;
-            }
-            
-            bool rv = this.DoNonQuery(@"
-                BEGIN TRANSACTION;
-                CREATE TABLE " + tableNameConfig + @" (cfg_name TEXT, cfg_value TEXT);
-                COMMIT;
-            ");
-
-            return rv;
-        }
-
-        public bool SetConfig(string name, string value)
-        {
-            if (!PrepareConfig())
-            {
-                return false;
-            }
-            
-            string sql = string.Empty;
-            int rv = this.DoQueryCount("SELECT 1 FROM " + tableNameConfig + " WHERE cfg_name='" + escapeSQL(name) + "'");
-            if (rv <= 0)
-            {
-                sql = "INSERT INTO " + tableNameConfig + " (cfg_name, cfg_value) VALUES ('[^1]', '[^2]');";
-            }
-            else
-            {
-                sql = "UPDATE " + tableNameConfig + " SET cfg_value='[^2]' WHERE cfg_name='[^1]';";
-            }
-
-            sql = PrepareQuery(sql, new string[] { name, value });
-            
-            return this.DoNonQuery(sql);
-        }
-
-        public string GetConfig(string name, string default_value = "")
-        {
-            if (!PrepareConfig())
-            {
-                return default_value;
-            }
-            
-            bool rv = this.DoQueryExist("SELECT 1 FROM " + tableNameConfig + " WHERE cfg_name='" + escapeSQL(name) + "'");
-            if (!rv)
-            {
-                return default_value;
-            }
-            
-            return this.DoQuerySingle("SELECT cfg_value FROM " + tableNameConfig + " WHERE cfg_name='" + escapeSQL(name) + "'");
-        }
-
-        #endregion
-
-        protected virtual bool Prepare()
-        {
-            return true;
-        }
-    }
-}
\ No newline at end of file
diff --git a/FizzyLauncher.UI/RyzStudio/Drawing/Rectangoid.cs b/FizzyLauncher.UI/RyzStudio/Drawing/Rectangoid.cs
deleted file mode 100644
index 59a24d8..0000000
--- a/FizzyLauncher.UI/RyzStudio/Drawing/Rectangoid.cs
+++ /dev/null
@@ -1,124 +0,0 @@
-using System.Drawing;
-using System.Drawing.Drawing2D;
-
-namespace RyzStudio.Drawing
-{
-	public struct Rectangoid
-	{
-		private int X;
-		private int Y;
-		private int Width;
-		private int Height;
-		private int Radius;
-
-		public Rectangoid(Rectangle rect, int radius)
-		{
-			X = rect.X;
-			Y = rect.Y;
-			Width = rect.Width;
-			Height = rect.Height;
-			Radius = radius;
-		}
-
-		public Rectangoid(Rectangle rect, int radius, int borderWidth)
-		{
-			rect.Inflate((-1 * borderWidth), (-1 * borderWidth));
-
-			X = rect.X;
-			Y = rect.Y;
-			Width = rect.Width;
-			Height = rect.Height;
-			Radius = radius;
-		}
-
-		public Rectangoid(int x, int y, int width, int height, int radius)
-		{
-			X = x;
-			Y = y;
-			Width = width;
-			Height = height;
-			Radius = radius;
-		}
-
-		public Rectangoid(int x, int y, int width, int height)
-		{
-			X = x;
-			Y = y;
-			Width = width;
-			Height = height;
-			Radius = 0;
-		}
-
-		public Rectangoid(int width, int height, int radius)
-		{
-			X = 0;
-			Y = 0;
-			Width = width;
-			Height = height;
-			Radius = radius;
-		}
-
-		public Rectangoid(int width, int height)
-		{
-			X = 0;
-			Y = 0;
-			Width = width;
-			Height = height;
-			Radius = 0;
-		}
-
-		public Rectangoid(int width)
-		{
-			X = 0;
-			Y = 0;
-			Width = width;
-			Height = width;
-			Radius = 0;
-		}
-
-		public GraphicsPath ToGraphicsPath()
-		{
-			GraphicsPath rv = new GraphicsPath();
-			rv.AddLine(X + this.Radius, Y, X + Width - (this.Radius * 2), Y);
-
-			if (this.Radius > 0)
-			{
-				rv.AddArc(X + Width - (this.Radius * 2), Y, this.Radius * 2, this.Radius * 2, 270, 90);
-			}
-
-			rv.AddLine(X + Width, Y + this.Radius, X + Width, Y + Height - (this.Radius * 2));
-
-			if (this.Radius > 0)
-			{
-				rv.AddArc(X + Width - (this.Radius * 2), Y + Height - (this.Radius * 2), this.Radius * 2, this.Radius * 2, 0, 90);
-			}
-
-			rv.AddLine(X + Width - (this.Radius * 2), Y + Height, X + this.Radius, Y + Height);
-
-			if (this.Radius > 0)
-			{
-				rv.AddArc(X, Y + Height - (this.Radius * 2), this.Radius * 2, this.Radius * 2, 90, 90);
-			}
-
-			rv.AddLine(X, Y + Height - (this.Radius * 2), X, Y + this.Radius);
-
-			if (this.Radius > 0)
-			{
-				rv.AddArc(X, Y, this.Radius * 2, this.Radius * 2, 180, 90);
-			}
-
-			rv.CloseFigure();
-
-			return rv;
-		}
-
-		public PointF GetOrigin()
-		{
-			PointF rv = new PointF();
-			rv.X = ((float)Width / 2) + X;
-			rv.Y = ((float)Height / 2) + Y;
-
-			return rv;
-		}
-	}
-}
\ No newline at end of file
diff --git a/FizzyLauncher.UI/RyzStudio/IO/FileType.cs b/FizzyLauncher.UI/RyzStudio/IO/FileType.cs
deleted file mode 100644
index 3c8b616..0000000
--- a/FizzyLauncher.UI/RyzStudio/IO/FileType.cs
+++ /dev/null
@@ -1,56 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-namespace RyzStudio.IO
-{
-    public class FileType
-    {
-        protected static readonly byte[] BMP = { 66, 77 };
-        protected static readonly byte[] GIF = { 71, 73, 70, 56 };
-        protected static readonly byte[] ICO = { 0, 0, 1, 0 };
-        protected static readonly byte[] JPG = { 255, 216, 255 };
-        protected static readonly byte[] PNG = { 137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82 };
-
-        public static bool IsImage(byte[] byteArray)
-        {
-            if (byteArray == null)
-            {
-                return false;
-            }
-
-            if (byteArray.Length <= 0)
-            {
-                return false;
-            }
-
-            if (byteArray.Take(2).SequenceEqual(BMP))
-            {
-                return true;
-            }
-
-            if (byteArray.Take(4).SequenceEqual(GIF))
-            {
-                return true;
-            }
-
-            if (byteArray.Take(4).SequenceEqual(ICO))
-            {
-                return true;
-            }
-
-            if (byteArray.Take(3).SequenceEqual(JPG))
-            {
-                return true;
-            }
-
-            if (byteArray.Take(16).SequenceEqual(PNG))
-            {
-                return true;
-            }
-
-            return false;
-        }
-    }
-}
diff --git a/FizzyLauncher.UI/RyzStudio/IO/SessionFileFormatBase.cs b/FizzyLauncher.UI/RyzStudio/IO/SessionFileFormatBase.cs
deleted file mode 100644
index 3ae2887..0000000
--- a/FizzyLauncher.UI/RyzStudio/IO/SessionFileFormatBase.cs
+++ /dev/null
@@ -1,290 +0,0 @@
-using System;
-using System.IO;
-using System.Text;
-using System.Xml;
-using System.Windows.Forms;
-using ICSharpCode.SharpZipLib.Zip;
-
-namespace RyzStudio.IO
-{
-    public abstract class SessionFileFormatBase
-    {
-        protected string CONST_KEYPASS = "";
-        protected string CONST_PRODUCT = "";
-        protected string CONST_STREAM_FILE_NAME = "";
-
-        protected bool enableErrorReporting = false;
-        protected string lastUsedFileName = "";
-
-        #region public properties
-
-        public string passkey
-        {
-            get { return CONST_KEYPASS; }
-            set { CONST_KEYPASS = value; }
-        }
-
-        /*public string LastFilename
-        {
-            get { return lastUsedFileName; }
-            set { lastUsedFileName = value; }
-        }*/
-        
-        #endregion
-
-        #region public methods
-
-/*        public bool loadFromRyz()
-        {
-            return loadFromRyz(lastUsedFileName);
-        }*/
-
-        public bool loadFromRyz(string file_name)
-        {
-            lastUsedFileName = file_name;
-            if (!File.Exists(file_name))
-            {
-                return false;
-            }
-            
-            bool rv = false;
-            
-            try
-            {
-                ZipInputStream zipIn = new ZipInputStream(File.OpenRead(file_name));
-                zipIn.Password = CONST_KEYPASS;
-                ZipEntry theEntry = null;
-                
-                while ((theEntry = zipIn.GetNextEntry()) != null)
-                {
-                    string streamFileName = Path.GetFileName(theEntry.Name);
-                    if (streamFileName.Equals(CONST_STREAM_FILE_NAME))
-                    {
-                        MemoryStream oxStream = new MemoryStream();
-                        StreamWriter streamWriter = new StreamWriter(oxStream);
-                        int size = 2048;
-                        byte[] data = new byte[size];
-                        while (true)
-                        {
-                            size = zipIn.Read(data, 0, data.Length);
-                            if (size <= 0) break;
-                            streamWriter.BaseStream.Write(data, 0, size);
-                        }
-
-                        oxStream.Position = 0;
-
-                        StreamReader sr2 = new StreamReader(oxStream, Encoding.UTF8);
-                        XmlDocument xDoc = new XmlDocument();
-                        xDoc.LoadXml(sr2.ReadToEnd());
-                        
-                        loadFromXmlDocument(ref xDoc);
-                    }
-                }
-
-                zipIn.Close();
-                
-                rv = true;
-            }
-            catch (Exception exc)
-            {
-                if (enableErrorReporting)
-                {
-                    MessageBox.Show(exc.Message);
-                }
-            }
-            
-            return rv;
-        }
-
-        public bool loadFromXml()
-        {
-            return loadFromXml(lastUsedFileName);
-        }
-
-        public bool loadFromXml(string file_name)
-        {
-            lastUsedFileName = file_name;
-            if (!File.Exists(file_name))
-            {
-                return false;
-            }
-            
-            bool rv = false;
-            
-            try
-            {
-                StreamReader sr2 = new StreamReader(file_name, Encoding.UTF8);
-                XmlDocument xDoc = new XmlDocument();
-                xDoc.LoadXml(sr2.ReadToEnd());
-                
-                loadFromXmlDocument(ref xDoc);
-                sr2.Close();
-                
-                rv = true;
-            }
-            catch (Exception exc)
-            {
-                if (enableErrorReporting)
-                {
-                    MessageBox.Show(exc.Message);
-                }
-            }
-            
-            return rv;
-        }
-
-/*        public bool saveToRyz()
-        {
-            return saveToRyz(lastUsedFileName);
-        }
-*/
-
-        public bool saveToRyz(string file_name)
-        {
-            bool rv = false;
-            lastUsedFileName = file_name;
-            byte[] buffer = new byte[4096];
-
-            try
-            {
-                File.Delete(file_name);
-                FileInfo fileinfo1 = new FileInfo(file_name);
-                if (!Directory.Exists(fileinfo1.DirectoryName))
-                {
-                    Directory.CreateDirectory(fileinfo1.DirectoryName);
-                }
-            }
-            catch (Exception exc)
-            {
-                if (enableErrorReporting)
-                {
-                    MessageBox.Show(exc.Message);
-                }
-            }
-
-            try
-            {
-                ZipOutputStream zipOutStream1 = new ZipOutputStream(File.Create(file_name));
-                zipOutStream1.SetLevel(9);
-                zipOutStream1.Password = CONST_KEYPASS;
-
-                MemoryStream oxIndexStream = new MemoryStream();
-                XmlTextWriter oxTW = new XmlTextWriter(oxIndexStream, Encoding.UTF8);
-                saveToXmlTextWriter(ref oxTW);
-                oxTW.Flush();
-
-                // write to file
-                zipOutStream1.PutNextEntry(new ZipEntry(CONST_STREAM_FILE_NAME));
-                oxIndexStream.Position = 0;
-                StreamReader sr2 = new StreamReader(oxIndexStream, Encoding.UTF8);
-                int sourceBytes;
-                do
-                {
-                    sourceBytes = sr2.BaseStream.Read(buffer, 0, buffer.Length);
-                    zipOutStream1.Write(buffer, 0, sourceBytes);
-                }
-                while (sourceBytes > 0);
-
-                sr2.Close();
-                oxTW.Close();
-                zipOutStream1.Finish();
-                zipOutStream1.Close();
-                
-                rv = true;
-            }
-            catch (Exception exc)
-            {
-                if (enableErrorReporting)
-                {
-                    MessageBox.Show(exc.Message);
-                }
-            }
-            
-            return rv;
-        }
-
-        public bool saveToXml()
-        {
-            return saveToXml(lastUsedFileName);
-        }
-
-        public bool saveToXml(string file_name)
-        {
-            bool rv = false;
-            
-            lastUsedFileName = file_name;
-            try
-            {
-                File.Delete(file_name);
-                FileInfo fileinfo1 = new FileInfo(file_name);
-                if (!Directory.Exists(fileinfo1.DirectoryName))
-                {
-                    Directory.CreateDirectory(fileinfo1.DirectoryName);
-                }
-            }
-            catch (Exception exc)
-            {
-                if (enableErrorReporting)
-                {
-                    MessageBox.Show(exc.Message);
-                }
-            }
-
-            try
-            {
-                XmlTextWriter oxTW = new XmlTextWriter(file_name, Encoding.UTF8);
-                saveToXmlTextWriter(ref oxTW);
-                oxTW.Flush();
-                oxTW.Close();
-                
-                rv = true;
-            }
-            catch (Exception exc)
-            {
-                if (enableErrorReporting)
-                {
-                    MessageBox.Show(exc.Message);
-                }
-            }
-            
-            return rv;
-        }
-        
-        #endregion
-        
-        protected virtual void loadFromXmlDocument(ref XmlDocument xml_doc) { }
-        protected virtual void saveToXmlTextWriter(ref XmlTextWriter writer) { }
-
-        #region public methods (conversions)
-
-        public int[] convIntArrayString(string s1, char c)        
-        {
-            string[] sarr = s1.Split(c);
-            int[] iarr = new int[sarr.Length];
-            for (int i = 0; i < sarr.Length; i++)
-            {
-                iarr[i] = Int32.Parse(sarr[i]);
-            }
-
-            return iarr;
-        }
-
-        public string convStringIntArray(int[] r, char s)
-        {
-            string t = null;
-            for (int i = 0; i < r.Length; i++)
-            {
-                if (i != 0)
-                {
-                    t += s.ToString();
-                }
-
-                t += r[i].ToString();
-            }
-
-            return t;
-        }
-
-#endregion
-    }
-}
\ No newline at end of file
diff --git a/FizzyLauncher.UI/RyzStudio/IO/SharpZipLib.cs b/FizzyLauncher.UI/RyzStudio/IO/SharpZipLib.cs
deleted file mode 100644
index b162124..0000000
--- a/FizzyLauncher.UI/RyzStudio/IO/SharpZipLib.cs
+++ /dev/null
@@ -1,76 +0,0 @@
-using System;
-using System.IO;
-using ICSharpCode.SharpZipLib.Zip;
-
-namespace RyzStudio.IO
-{
-    public class SharpZipLib
-    {
-        /// <summary>
-        /// Is zip file encrypted
-        /// </summary>
-        /// <param name="fn">Filename</param>
-        /// <returns>Is encrypted</returns>
-        public static bool IsZipEncrypted(string fn)
-        {
-            bool ret_val = false;
-            try
-            {
-                ZipInputStream zipIn = new ZipInputStream(System.IO.File.OpenRead(fn));
-                ZipEntry theEntry = null;
-                while ((theEntry = zipIn.GetNextEntry()) != null)
-                {
-                    if (theEntry.IsCrypted)
-                    {
-                        ret_val = true;
-                    }
-
-                    break;
-                }
-
-                zipIn.Close();
-            }
-            catch
-            {   
-                // do nothing
-            }
-
-            return ret_val;
-        }
-
-        public static void AddFile(ZipOutputStream zipstream, string filename, string prefixpath = null)
-        {
-            byte[] buffer = new byte[4096];
-            
-            string f1 = "";
-            if (prefixpath != null)
-            {
-                f1 = Path.GetDirectoryName(filename).TrimEnd('\\') + "\\";
-                f1 = f1.Replace(prefixpath, "").TrimEnd('\\') + "\\";
-                f1 = f1 + Path.GetFileName(filename);
-                f1 = f1.TrimStart('\\');
-            }
-            
-            ZipEntry entry = new ZipEntry(f1);
-            entry.DateTime = DateTime.Now;
-            zipstream.PutNextEntry(entry);
-
-            FileStream fs = File.OpenRead(filename);
-            int sourceBytes;
-            do
-            {
-                sourceBytes = fs.Read(buffer, 0, buffer.Length);
-                zipstream.Write(buffer, 0, sourceBytes);
-            }
-            while (sourceBytes > 0);
-        }
-
-        public static void AddFolder(ZipOutputStream zipstream, string folderpath, string prefixpath = null)
-        {
-            foreach (string fn in Directory.GetFiles(folderpath, "*.*", System.IO.SearchOption.AllDirectories))
-            {
-                AddFile(zipstream, fn, prefixpath);
-            }
-        }
-    }
-}
\ No newline at end of file
diff --git a/FizzyLauncher.UI/RyzStudio/Net/HttpWeb.cs b/FizzyLauncher.UI/RyzStudio/Net/HttpWeb.cs
deleted file mode 100644
index bafff2e..0000000
--- a/FizzyLauncher.UI/RyzStudio/Net/HttpWeb.cs
+++ /dev/null
@@ -1,168 +0,0 @@
-using System;
-using System.IO;
-using System.Net;
-using System.Text;
-using System.Windows.Forms;
-
-namespace RyzStudio.Net
-{
-	public class HttpWeb
-	{
-		public string defaultUserAgent = "Momozilla/5.0 (" + Environment.OSVersion.Platform.ToString() + " ; " + Environment.OSVersion.VersionString + "; " + Application.CurrentCulture.TwoLetterISOLanguageName + ")";
-		public int defaultTimeout = 6000;
-		public int defaultMaxRedirect = 8;
-		public bool defaultAllowRedirect = true;
-		public CookieContainer defaultCookierContainer = null;
-
-		public HttpWeb()
-		{
-		}
-
-		public HttpWebRequest CreateRequest(string url)
-		{
-			return this.CreateRequest(url, url);
-		}
-
-		public HttpWebRequest CreateRequest(string url, string referrerURL)
-		{
-			if (defaultCookierContainer == null)
-			{
-				defaultCookierContainer = new CookieContainer();
-			}
-
-			HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
-			webRequest.CachePolicy = new System.Net.Cache.RequestCachePolicy(System.Net.Cache.RequestCacheLevel.NoCacheNoStore);
-			webRequest.MaximumAutomaticRedirections = defaultMaxRedirect;
-			webRequest.CookieContainer = defaultCookierContainer;
-			webRequest.UserAgent = defaultUserAgent;
-			webRequest.AllowAutoRedirect = defaultAllowRedirect;
-			webRequest.Timeout = defaultTimeout;
-
-			return webRequest;
-		}
-
-		public int GetResponse(out string sourceCode, string url, string referrerURL = "")
-		{
-			HttpWebRequest webRequest = this.CreateRequest(url, referrerURL);
-
-			return GetResponse(out sourceCode, webRequest);
-		}
-
-		public int GetResponse(out string sourceCode, HttpWebRequest webRequest)
-		{
-			sourceCode = string.Empty;
-
-			int rv = 0;
-
-			try
-			{
-				HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();
-
-				rv = (int)webResponse.StatusCode;
-
-				StreamReader readContent = new StreamReader(webResponse.GetResponseStream());
-				sourceCode = readContent.ReadToEnd();
-
-				webResponse.Close();
-				webResponse = null;
-			}
-			catch (WebException xc)
-			{
-				if (xc.Response is HttpWebResponse)
-				{
-					HttpWebResponse rs = xc.Response as HttpWebResponse;
-					StreamReader readContent = new StreamReader(rs.GetResponseStream());
-					if (readContent != null)
-					{
-						sourceCode = readContent.ReadToEnd();
-					}
-
-					rv = (int)rs.StatusCode;
-				}
-				else
-				{
-					rv = (int)xc.Status;
-					sourceCode = xc.Message;
-				}
-			}
-			catch (Exception xc)
-			{
-				sourceCode = xc.Message;
-			}
-
-			return rv;
-		}
-
-		public static HttpWebRequest AddBasicAuthentication(HttpWebRequest webRequest, string username, string password)
-		{
-			webRequest.Headers["Authorization"] = "Basic " + Convert.ToBase64String(Encoding.Default.GetBytes(string.Concat(username, ":", password)));
-			webRequest.PreAuthenticate = true;
-
-			return webRequest;
-		}
-
-
-		public int GetPOSTResponse(out string sourceCode, HttpWebRequest webRequest, string postData)
-		{
-			sourceCode = "";
-			int rv = 0;
-			byte[] buffer = Encoding.UTF8.GetBytes(postData);
-
-			webRequest.ContentLength = buffer.Length;
-
-			try
-			{
-				Stream dataStream = webRequest.GetRequestStream();
-				dataStream.Write(buffer, 0, buffer.Length);
-				dataStream.Close();
-			}
-			catch (Exception xc)
-			{
-				sourceCode = xc.Message;
-				return rv;
-			}
-
-			return this.GetResponse(out sourceCode, webRequest);
-		}
-
-		public int GetHeader(out WebHeaderCollection headerCollection, string url, string referrerURL = "")
-		{
-			headerCollection = null;
-
-			int rv = 0;
-
-			HttpWebRequest webRequest = this.CreateRequest(url, referrerURL);
-			webRequest.Method = "HEAD";
-
-			try
-			{
-				HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();
-				headerCollection = webResponse.Headers;
-
-				rv = (int)webResponse.StatusCode;
-
-				webResponse.Close();
-				webResponse = null;
-			}
-			catch (WebException xc)
-			{
-				if (xc.Response is HttpWebResponse)
-				{
-					HttpWebResponse rs = xc.Response as HttpWebResponse;
-
-					rv = (int)rs.StatusCode;
-				}
-				else
-				{
-					rv = (int)xc.Status;
-				}
-			}
-			catch
-			{
-				// do nothing
-			}
-
-			return rv;
-		}
-	}
-}
\ No newline at end of file
diff --git a/FizzyLauncher.UI/RyzStudio/Windows/Forms/PanelBook.cs b/FizzyLauncher.UI/RyzStudio/Windows/Forms/PanelBook.cs
deleted file mode 100644
index c6755c8..0000000
--- a/FizzyLauncher.UI/RyzStudio/Windows/Forms/PanelBook.cs
+++ /dev/null
@@ -1,258 +0,0 @@
-namespace RyzStudio.Windows.Forms
-{
-    using System;
-    using System.Collections;
-    using System.ComponentModel;
-    using System.Drawing;
-    using System.Windows.Forms;
-
-    [ToolboxItem(true)]
-    public class PanelBook : UserControl
-    {
-        public class PanelCollection : CollectionBase
-        {
-            protected PanelBook panelBook = null;
-
-            public PanelCollection(PanelBook parentPanelBook) : base()
-            {
-                panelBook = parentPanelBook;
-            }
-
-            public PanelBook Parent => panelBook;
-
-            public Panel this[int index] { get => (Panel)List[index]; set => List[index] = value; }
-
-            public int Add(Panel value) => List.Add(value);
-
-            public void AddRange(Panel[] pages) => Array.ForEach(pages, x => this.Add(x));
-
-            public bool Contains(Panel value) => List.Contains(value);
-
-            public int IndexOf(Panel value) => List.IndexOf(value);
-
-            public void Insert(int index, Panel value) => List.Insert(index, value);
-
-            public void Remove(Panel value) => List.Remove(value);
-
-            protected override void OnInsertComplete(int index, object value)
-            {
-                base.OnInsertComplete(index, value);
-
-                if (panelBook != null)
-                {
-                    panelBook.PageIndex = index;
-                }
-            }
-
-            protected override void OnRemoveComplete(int index, object value)
-            {
-                base.OnRemoveComplete(index, value);
-
-                if (panelBook != null)
-                {
-                    if (panelBook.PageIndex == index)
-                    {
-                        if (index < InnerList.Count)
-                        {
-                            panelBook.PageIndex = index;
-                        }
-                        else
-                        {
-                            panelBook.PageIndex = InnerList.Count - 1;
-                        }
-                    }
-                }
-            }
-
-        }
-
-        private System.ComponentModel.IContainer components = null;
-
-        protected PanelCollection panelCollection = null;
-
-        public PanelBook()
-        {
-            InitializeComponent();
-
-            panelCollection = new PanelCollection(this);
-        }
-
-        protected override void Dispose(bool disposing)
-        {
-            if (disposing && (components != null))
-            {
-                components.Dispose();
-            }
-
-            base.Dispose(disposing);
-        }
-
-        protected void InitializeComponent()
-        {
-            components = new System.ComponentModel.Container();
-        }
-
-        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
-        public Panel ActivePanel { get; protected set; } = null;
-
-        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
-        public override bool AutoScroll { get => base.AutoScroll; set => base.AutoScroll = value; }
-
-        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
-        public new Size AutoScrollMargin { get => base.AutoScrollMargin; set => base.AutoScrollMargin = value; }
-
-        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
-        public new Size AutoScrollMinSize { get => base.AutoScrollMinSize; set => base.AutoScrollMinSize = value; }
-
-        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
-        public override Image BackgroundImage { get => base.BackgroundImage; set => base.BackgroundImage = value; }
-
-        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
-        public override ImageLayout BackgroundImageLayout { get => base.BackgroundImageLayout; set => base.BackgroundImageLayout = value; }
-
-        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
-        public new ImeMode ImeMode { get => base.ImeMode; set => base.ImeMode = value; }
-
-        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
-        public override RightToLeft RightToLeft { get => base.RightToLeft; set => base.RightToLeft = value; }
-
-        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
-        public new bool UseWaitCursor { get => base.UseWaitCursor; set => base.UseWaitCursor = value; }
-
-        [Category("Collection")]
-        [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
-        public PanelCollection Pages => panelCollection;
-
-        [Category("Collection")]
-        public int SelectedIndex
-        {
-            get => (panelCollection.Count <= 0) ? -1 : panelCollection.IndexOf(this.ActivePanel);
-            set
-            {
-                if (panelCollection.Count <= 0) return;
-                if (value < 0) return;
-                if (value > (panelCollection.Count - 1)) return;
-                if (value == this.SelectedIndex) return;
-
-                ActivatePage(value);
-            }
-        }
-
-        protected internal int PageIndex
-        {
-            get => panelCollection.IndexOf(this.ActivePanel);
-            set
-            {
-                if (panelCollection.Count <= 0)
-                {
-                    ActivatePage(-1);
-                    return;
-                }
-
-                if ((value < -1) || (value >= panelCollection.Count))
-                {
-                    throw new ArgumentOutOfRangeException("PageIndex", value, "The page index must be between 0 and " + Convert.ToString(panelCollection.Count - 1));
-                }
-
-                ActivatePage(value);
-            }
-        }
-
-        protected internal void ActivatePage(int index)
-        {
-            if ((panelCollection.Count == 0) && (index >= panelCollection.Count) && (index <= 0))
-            {
-                return;
-            }
-
-            Panel p = (Panel)panelCollection[index];
-
-            ActivatePage(p);
-        }
-
-        protected internal void ActivatePage(Panel page)
-        {
-            if (this.ActivePanel != null)
-            {
-                if (this.ActivePanel.InvokeRequired)
-                {
-                    this.ActivePanel.Invoke(new MethodInvoker(() => {
-                        this.ActivePanel.Visible = false;
-                    }));
-                }
-                else
-                {
-                    this.ActivePanel.Visible = false;
-                }
-            }
-
-            this.ActivePanel = page;
-            if (this.ActivePanel != null)
-            {
-                this.ActivePanel.Parent = this;
-                if (!this.Contains(this.ActivePanel))
-                {
-                    this.Container.Add(this.ActivePanel);
-                }
-
-                if (this.ActivePanel.InvokeRequired)
-                {
-                    this.ActivePanel.Invoke(new MethodInvoker(() => {
-                        this.ActivePanel.Dock = DockStyle.Fill;
-                        this.ActivePanel.Visible = true;
-                        this.ActivePanel.BringToFront();
-                    }));
-                }
-                else
-                {
-                    this.ActivePanel.Dock = DockStyle.Fill;
-                    this.ActivePanel.Visible = true;
-                    this.ActivePanel.BringToFront();
-                }
-            }
-
-            if (this.ActivePanel != null)
-            {
-                if (this.ActivePanel.InvokeRequired)
-                {
-                    this.ActivePanel.Invoke(new MethodInvoker(() => {
-                        this.ActivePanel.Invalidate();
-                    }));
-                }
-                else
-                {
-                    this.ActivePanel.Invalidate();
-                }
-            }
-            else
-            {
-                this.Invalidate();
-            }
-        }
-
-#if DEBUG
-
-        protected override void OnResize(EventArgs e)
-        {
-            base.OnResize(e);
-
-            if (this.DesignMode)
-            {
-                this.Invalidate();
-            }
-        }
-
-#endif
-
-        protected override void DestroyHandle()
-        {
-            base.DestroyHandle();
-
-            foreach (Panel p in panelCollection)
-            {
-                p.Dispose();
-            }
-        }
-
-    }
-}
\ No newline at end of file
diff --git a/FizzyLauncher.UI/RyzStudio/Windows/Forms/StackLayoutPanel.cs b/FizzyLauncher.UI/RyzStudio/Windows/Forms/StackLayoutPanel.cs
deleted file mode 100644
index 8cdeae5..0000000
--- a/FizzyLauncher.UI/RyzStudio/Windows/Forms/StackLayoutPanel.cs
+++ /dev/null
@@ -1,69 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Windows.Forms;
-
-namespace RyzStudio.Windows.Forms
-{
-    public class StackLayoutPanel : FlowLayoutPanel
-    {
-        public StackLayoutPanel() : base()
-        {
-            this.AutoScroll = true;
-            this.FlowDirection = FlowDirection.TopDown;
-            this.WrapContents = false;
-        }
-
-        protected override void OnResize(EventArgs eventargs)
-        {
-            base.OnResize(eventargs);
-
-            //int w = this.ClientRectangle.Width - SystemInformation.VerticalScrollBarWidth;
-            int w = this.ClientRectangle.Width - 1;
-
-            foreach (Control item in this.Controls)
-            {
-                if (item.Width != w)
-                {
-                    item.Width = w;
-                }
-            }
-        }
-
-        protected override void OnControlAdded(ControlEventArgs e)
-        {
-            base.OnControlAdded(e);
-
-            OnResize(null);
-        }
-
-        protected override void OnControlRemoved(ControlEventArgs e)
-        {
-            base.OnControlRemoved(e);
-
-            OnResize(null);
-        }
-
-        public void AddControl(Control value)
-        {
-            if (this.InvokeRequired)
-            {
-                this.Invoke(new MethodInvoker(() =>
-                {
-                    value.Margin = new Padding(0, 3, 0, 3);
-
-                    this.Controls.Add(value);
-                }));
-            }
-            else
-            {
-                value.Margin = new Padding(0, 3, 0, 3);
-
-                this.Controls.Add(value);
-            }
-        }
-
-    }
-}
diff --git a/FizzyLauncher.UI/RyzStudio/Windows/Forms/TFlatButton.cs b/FizzyLauncher.UI/RyzStudio/Windows/Forms/TFlatButton.cs
deleted file mode 100644
index b50dee0..0000000
--- a/FizzyLauncher.UI/RyzStudio/Windows/Forms/TFlatButton.cs
+++ /dev/null
@@ -1,115 +0,0 @@
-using System.Drawing;
-using System.Windows.Forms;
-
-namespace RyzStudio.Windows.Forms
-{
-    public class TFlatButton : Label
-    {
-        public class ButtonStyle
-        {
-            public Color BackColour { get; set; } = Color.Transparent;
-            public Color PenColour { get; set; } = Color.Transparent;
-        }
-
-        public enum FlatButtonState
-        {
-            Idle = 0,
-            Hover,
-            Down
-        }
-
-        protected FlatButtonState controlState = FlatButtonState.Idle;
-
-        public TFlatButton() : base()
-        {
-            this.AutoSize = false;
-            this.ImageAlign = ContentAlignment.MiddleCenter;
-            this.TextAlign = ContentAlignment.MiddleCenter;
-
-            // customise
-            this.StyleOver = new ButtonStyle()
-            {
-                BackColour = Color.FromArgb(51, 51, 51),
-                PenColour = Color.White
-            };
-            this.StyleDown = new ButtonStyle()
-            {
-                BackColour = Color.FromArgb(179, 179, 179),
-                PenColour = Color.Black
-            };
-            this.StyleDefault = new ButtonStyle()
-            {
-                BackColour = Color.White,
-                PenColour = Color.Black
-            };
-
-            this.VisualState = FlatButtonState.Idle;
-
-            this.Click += delegate { this.OnClick(null); };
-            this.MouseEnter += delegate { this.VisualState = FlatButtonState.Hover; };
-            this.MouseLeave += delegate { this.VisualState = FlatButtonState.Idle; };
-            this.MouseDown += delegate { this.VisualState = FlatButtonState.Down; };
-            this.MouseUp += delegate { this.VisualState = FlatButtonState.Idle; };
-        }
-
-        protected FlatButtonState VisualState
-        {
-            get { return controlState; }
-            set
-            {
-                switch (value)
-                {
-                    case FlatButtonState.Idle:
-                        if (this.VisualState == FlatButtonState.Down)
-                        {
-                            updateButton(StyleOver);
-                        }
-                        else
-                        {
-                            updateButton(StyleDefault);
-                        }
-
-                        break;
-                    case FlatButtonState.Hover:
-                        updateButton(StyleOver);
-                        break;
-                    case FlatButtonState.Down:
-                        updateButton(StyleDown);
-                        break;
-                    default:
-                        updateButton(StyleDefault);
-                        break;
-                }
-
-                controlState = value;
-            }
-        }
-
-        protected void updateButton(ButtonStyle style)
-        {
-            this.ForeColor = style.PenColour;
-            this.BackColor = style.BackColour;
-        }
-
-        protected ButtonStyle StyleOver { get; set; } = new ButtonStyle();
-
-        protected ButtonStyle StyleDown { get; set; } = new ButtonStyle();
-
-        protected ButtonStyle StyleDefault { get; set; } = new ButtonStyle();
-
-        public void PerformClick()
-        {
-            if (this.InvokeRequired)
-            {
-                this.Invoke(new MethodInvoker(() => {
-                    this.OnClick(null);
-                }));
-            }
-            else
-            {
-                this.OnClick(null);
-            }
-        }
-
-    }
-}
diff --git a/FizzyLauncher.UI/RyzStudio/Windows/Forms/TForm.cs b/FizzyLauncher.UI/RyzStudio/Windows/Forms/TForm.cs
deleted file mode 100644
index 48a2803..0000000
--- a/FizzyLauncher.UI/RyzStudio/Windows/Forms/TForm.cs
+++ /dev/null
@@ -1,433 +0,0 @@
-using System;
-using System.ComponentModel;
-using System.Drawing;
-using System.Windows.Forms;
-using Resources = AppLauncher.Properties.Resources;
-
-namespace RyzStudio.Windows.Forms
-{
-    public class TForm : Form
-    {
-        protected readonly Color borderColour = Color.FromArgb(200, 200, 200);
-        protected readonly int borderWidth = 1;
-
-        protected readonly int resizeBorderWidth = 4;
-
-        protected readonly Color backColour = Color.FromArgb(250, 250, 250);
-
-        protected readonly Color titleBackColour = Color.FromArgb(235, 234, 233);
-        protected readonly Color titleBorderColour = Color.FromArgb(200, 198, 196);
-        protected readonly Color titleColour = Color.FromArgb(102, 102, 102);
-        protected readonly int titleBarHeight = 33;
-        protected readonly bool showTitleBarLine = true;
-        protected Font titleFont = null;
-        protected int titleFontTop = 0;
-
-        protected readonly Size titleBarIconSize = new Size(48, 32);
-        protected readonly int titleBarIconMargin = 0;
-        protected readonly int titleBarIconMarginRight = 0;
-
-        protected Image appIcon = null;
-        protected const int appIconLeft = 12;
-        protected const int appIconRight = 6;
-        protected int appIconTop = 0;
-
-        protected bool isDragging = false;
-        protected Point startPosition = new Point();
-        protected Point startWindowSize = new Point();
-
-        protected bool enableMinimise { get; set; } = true;
-        protected bool enableMaximise { get; set; } = true;
-        protected bool enableClose { get; set; } = true;
-        protected bool closeOnMinimise { get; set; } = false;
-
-        protected bool isBusy = false;
-
-        private IContainer components;
-
-        public TForm() : base()
-        {
-            InitializeComponent();
-
-            if (!this.DesignMode)
-            {
-                this.FormBorderStyle = FormBorderStyle.None;
-                this.StartPosition = FormStartPosition.Manual;
-            }
-
-            this.AutoScaleMode = AutoScaleMode.None;
-            this.BackColor = backColour;
-            this.Padding = new Padding(0);
-            this.DoubleBuffered = true;
-
-            this.MouseDown += new MouseEventHandler(form_MouseDown);
-            this.MouseMove += new MouseEventHandler(form_MouseMove);
-            this.MouseUp += new MouseEventHandler(form_MouseUp);
-            this.PreviewKeyDown += new PreviewKeyDownEventHandler(form_PreviewKeyDown);
-        }
-
-        protected override void OnLoad(EventArgs e)
-        {
-            base.OnLoad(e);
-
-            this.Text = Application.ProductName;
-
-            initialiseLoadComponent();
-
-            if (appIcon != null) appIconTop = (int)Math.Floor((decimal)(titleBarHeight - appIcon.Height) / 2) + borderWidth;
-            titleFont = new Font(this.Font.FontFamily, 10F);
-            titleFontTop = (int)Math.Floor((decimal)(titleBarHeight - TextRenderer.MeasureText("#", titleFont).Height) / 2) + borderWidth;
-
-        }
-
-        protected override void OnMouseClick(MouseEventArgs e)
-        {
-            base.OnMouseClick(e);
-
-            bool isLabel = ((e.Location.X >= 0) && (e.Location.X <= this.Width) && (e.Location.Y >= 0) && (e.Location.Y <= titleBarHeight));
-
-            if (e.Button == MouseButtons.Left)
-            {
-                if (isLabel)
-                {
-                    // do nothing
-                }
-                else
-                {
-                    // do nothing
-                }
-            }
-            else if (e.Button == MouseButtons.Right)
-            {
-                if (isLabel)
-                {
-                    if (this.TitleContextMenuStrip != null)
-                    {
-                        this.TitleContextMenuStrip.Show(this, e.Location);
-                    }
-                }
-                else
-                {
-                    // do nothing
-                }
-            }
-        }
-
-        protected override void OnPaint(PaintEventArgs e)
-        {
-            base.OnPaint(e);
-
-            Graphics g = e.Graphics;
-            Rectangle area = new Rectangle(this.DisplayRectangle.X, this.DisplayRectangle.Y, (this.DisplayRectangle.Width - borderWidth), (this.DisplayRectangle.Height - borderWidth));
-
-            // border
-            g.DrawRectangle(new Pen(borderColour, borderWidth), area);
-
-            area.Inflate((-1 * borderWidth), (-1 * borderWidth));
-
-            g.FillRectangle(new SolidBrush(titleBackColour), area.X, area.Y, (area.Width + area.X), titleBarHeight);
-
-            if (showTitleBarLine) g.DrawLine(new Pen(titleBorderColour, 1), area.X, titleBarHeight, (area.Width + area.X), titleBarHeight);
-
-            if (!DesignMode)
-            {
-                if (appIcon != null) g.DrawImageUnscaled(appIcon, appIconLeft, appIconTop);
-
-                int iconPosX = borderWidth + appIconLeft + appIconRight + ((appIcon == null) ? 0 : appIcon.Width);
-                TextRenderer.DrawText(g, this.Text, titleFont, new Point(iconPosX, titleFontTop), titleColour);
-            }
-        }
-
-        protected override void OnResize(EventArgs e)
-        {
-            base.OnResize(e);
-
-            this.Invalidate();
-        }
-
-        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
-        public override Color BackColor { get => base.BackColor; set => base.BackColor = backColour; }
-
-        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
-        public new FormBorderStyle FormBorderStyle { get => base.FormBorderStyle; set => base.FormBorderStyle = value; }
-
-        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
-        public new Padding Padding { get => base.Padding; set => base.Padding = value; }
-
-        [Category("Appearance")]
-        public ContextMenuStrip TitleContextMenuStrip { get; set; } = null;
-
-        //[Browsable(false)]
-        //public Image AppIcon { get; set; } = null;
-
-        //[Browsable(false)]
-        //public bool IsMaximiseEnabled { get; set; } = false;
-
-        //protected Point DefaultLocation
-        //{
-        //    get
-        //    {
-        //        Point newPosition = new Point(Cursor.Position.X, Cursor.Position.Y);
-        //        newPosition.X -= (this.Width / 2);
-        //        newPosition.Y -= (this.Height / 2);
-
-        //        newPosition.X = Math.Max(newPosition.X, Screen.PrimaryScreen.WorkingArea.Left);
-        //        newPosition.Y = Math.Max(newPosition.Y, Screen.PrimaryScreen.WorkingArea.Top);
-
-        //        return newPosition;
-        //    }
-        //}
-
-        private void InitializeComponent()
-        {
-            this.components = new System.ComponentModel.Container();
-            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TForm));
-            this.SuspendLayout();
-            //
-            // AForm
-            //
-            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
-            this.Name = "AForm";
-            this.ResumeLayout(false);
-        }
-
-        private void form_MouseDown(object sender, MouseEventArgs e)
-        {
-            if (e.Button == MouseButtons.Left)
-            {
-                isDragging = true;
-                startPosition = e.Location;
-                startWindowSize = new Point(this.Width, this.Height);
-            }
-        }
-
-        private void form_MouseMove(object sender, MouseEventArgs e)
-        {
-            if (isDragging)
-            {
-                int x = (this.Location.X + (e.Location.X - startPosition.X));
-                int y = (this.Location.Y + (e.Location.Y - startPosition.Y));
-
-                //this.Location = validateFormLocation(x, y);
-                this.Location = new Point(x, y);
-            }
-        }
-
-        private void form_MouseUp(object sender, MouseEventArgs e)
-        {
-            isDragging = false;
-        }
-
-        private void form_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
-        {
-            if (e.KeyCode == Keys.Escape)
-            {
-                Application.Exit();
-            }
-        }
-
-        protected virtual void initialiseLoadComponent()
-        {
-            if (DesignMode) return;
-
-            // close
-            TImageBox closeBox = generateToolbarImageBox();
-            closeBox.Image = closeBox.ImageNormal = (enableClose) ? Resources.titlebar_close : Resources.titlebar_blank;
-            closeBox.ImageHover = (enableClose) ? Resources.titlebar_close3 : Resources.titlebar_blank;
-            closeBox.ImageSelected = Resources.titlebar_close3;
-            closeBox.MouseClick += delegate (object sender, MouseEventArgs e)
-            {
-                if (e.Button == MouseButtons.Left)
-                {
-                    if (enableClose)
-                    {
-                        this.Close();
-                    }
-                }
-            };
-            closeBox.Left = this.DisplayRectangle.Width - closeBox.Width - (titleBarIconMarginRight + borderWidth);
-
-            this.Controls.Add(closeBox);
-
-            // maximise
-            TImageBox maximiseBox = generateToolbarImageBox();
-            maximiseBox.Image = maximiseBox.ImageNormal = (enableMaximise) ? Resources.titlebar_maximise : Resources.titlebar_blank;
-            maximiseBox.ImageHover = (enableMaximise) ? Resources.titlebar_maximise5 : Resources.titlebar_blank;
-            maximiseBox.ImageSelected = Resources.titlebar_maximise3;
-            maximiseBox.MouseClick += delegate (object sender, MouseEventArgs e)
-            {
-                if (!(sender is TImageBox)) return;
-
-                TImageBox imageBox2 = (sender as TImageBox);
-
-                if (imageBox2 == null) return;
-
-                if (e.Button == MouseButtons.Left)
-                {
-                    if (enableMaximise)
-                    {
-                        if (this.WindowState == FormWindowState.Maximized)
-                        {
-                            this.WindowState = FormWindowState.Normal;
-                            imageBox2.Image = imageBox2.ImageNormal = Resources.titlebar_maximise;
-                        }
-                        else
-                        {
-                            this.WindowState = FormWindowState.Maximized;
-                            imageBox2.Image = imageBox2.ImageNormal = Resources.titlebar_maximise5;
-                        }
-                    }
-                }
-                else if (e.Button == MouseButtons.Right)
-                {
-                    this.TopMost = !this.TopMost;
-
-                    if (this.TopMost)
-                    {
-                        imageBox2.Image = imageBox2.ImageNormal = Resources.titlebar_maximise3;
-                        imageBox2.ImageHover = (enableMaximise) ? Resources.titlebar_maximise5 : Resources.titlebar_maximise3;
-                    }
-                    else
-                    {
-                        imageBox2.Image = imageBox2.ImageNormal = (enableMaximise) ? Resources.titlebar_maximise : Resources.titlebar_blank;
-                        imageBox2.ImageHover = (enableMaximise) ? Resources.titlebar_maximise5 : Resources.titlebar_blank;
-                    }
-                }
-            };
-            maximiseBox.Left = closeBox.Left - maximiseBox.Width - titleBarIconMargin;
-
-            this.Controls.Add(maximiseBox);
-
-            // minimise
-            TImageBox minimiseBox = generateToolbarImageBox();
-            minimiseBox.Image = minimiseBox.ImageNormal = (enableMinimise) ? Resources.titlebar_minimise : Resources.titlebar_blank;
-            minimiseBox.ImageHover = (enableMinimise) ? Resources.titlebar_minimise5 : Resources.titlebar_blank;
-            //minimiseBox.ImageSelected = null;
-            minimiseBox.MouseClick += delegate (object sender, MouseEventArgs e)
-            {
-                if (!enableMinimise) return;
-                if (e.Button != MouseButtons.Left) return;
-
-                if (closeOnMinimise)
-                {
-                    this.Close();
-                }
-                else
-                {
-                    this.WindowState = FormWindowState.Minimized;
-                }
-            };
-            minimiseBox.Left = maximiseBox.Left - minimiseBox.Width - titleBarIconMargin;
-
-            this.Controls.Add(minimiseBox);
-
-            // resize
-            UserControl uc1 = new UserControl()
-            {
-                Anchor = (AnchorStyles.Left | AnchorStyles.Bottom | AnchorStyles.Right),
-                Height = resizeBorderWidth,
-                Width = this.DisplayRectangle.Width - resizeBorderWidth,
-                Left = 0,
-                Top = this.DisplayRectangle.Height - resizeBorderWidth,
-                BackColor = Color.Transparent,
-                Cursor = Cursors.SizeNS
-            };
-            uc1.MouseDown += form_MouseDown;
-            uc1.MouseUp += form_MouseUp;
-            uc1.MouseMove += delegate (object sender, MouseEventArgs e)
-            {
-                if (isDragging)
-                {
-                    this.Size = new Size(startWindowSize.X, e.Y - startPosition.Y + this.Height);
-                }
-            };
-            uc1.BringToFront();
-
-            this.Controls.Add(uc1);
-
-            UserControl uc2 = new UserControl()
-            {
-                Anchor = (AnchorStyles.Top | AnchorStyles.Right | AnchorStyles.Bottom),
-                Height = this.DisplayRectangle.Height - resizeBorderWidth,
-                Width = resizeBorderWidth,
-                Left = this.DisplayRectangle.Width - resizeBorderWidth,
-                Top = 0,
-                BackColor = Color.Transparent,
-                Cursor = Cursors.SizeWE
-            };
-            uc2.MouseDown += form_MouseDown;
-            uc2.MouseUp += form_MouseUp;
-            uc2.MouseMove += delegate (object sender, MouseEventArgs e)
-            {
-                if (isDragging)
-                {
-                    this.Size = new Size(e.X - startPosition.X + this.Width, startWindowSize.Y);
-                }
-            };
-            uc2.BringToFront();
-
-            this.Controls.Add(uc2);
-
-            UserControl uc3 = new UserControl()
-            {
-                Anchor = (AnchorStyles.Bottom | AnchorStyles.Right),
-                Height = resizeBorderWidth,
-                Width = resizeBorderWidth,
-                Left = this.DisplayRectangle.Width - resizeBorderWidth,
-                Top = this.DisplayRectangle.Height - resizeBorderWidth,
-                BackColor = Color.Transparent,
-                Cursor = Cursors.SizeNWSE
-            };
-            uc3.MouseDown += form_MouseDown;
-            uc3.MouseUp += form_MouseUp;
-            uc3.MouseMove += delegate (object sender, MouseEventArgs e)
-            {
-                if (isDragging)
-                {
-                    this.Size = new Size((e.X - startPosition.X + this.Width), (e.Y - startPosition.Y + this.Height));
-                }
-            };
-            uc3.BringToFront();
-
-            this.Controls.Add(uc3);
-        }
-
-        protected TImageBox generateToolbarImageBox()
-        {
-            TImageBox imageBox = new TImageBox();
-            //imageBox.BackColor = Color.Transparent;
-            imageBox.BackColorHover = imageBox.BackColorSelected = Color.FromArgb(220, 220, 220);
-            imageBox.BackgroundImageLayout  = ImageLayout.Center;
-            imageBox.ErrorImage = null;
-            //imageBox.Image = Resources.close;
-            //imageBox.ImageHover = Resources.close2;
-            //imageBox.ImageNormal = Resources.close;
-            imageBox.ImageSelected = null;
-            imageBox.IsSelected = false;
-            //closeBox.Location = new System.Drawing.Point(169, 12);
-            imageBox.Size = titleBarIconSize;
-            imageBox.SizeMode = PictureBoxSizeMode.CenterImage;
-            //imageBox.MouseClick += new MouseEventHandler(closeBox_MouseClick);
-            //imageBox.Left = this.DisplayRectangle.Width - imageBox.Width - 17;
-            imageBox.Top = (int)Math.Floor((decimal) (titleBarHeight - titleBarIconSize.Height) / 2) + borderWidth;
-            imageBox.Anchor = (AnchorStyles.Top | AnchorStyles.Right);
-            imageBox.Padding = new Padding(0);
-
-            return imageBox;
-        }
-
-        //private void exitToolStripMenuItem_Click(object sender, EventArgs e) => this.Close();
-
-        //private void notifyIcon1_MouseClick(object sender, MouseEventArgs e)
-        //{
-        //    if (e.Button == MouseButtons.Left)
-        //    {
-        //        this.Visible = !this.Visible;
-        //    }
-
-        //    //notifyIcon1.Visible = !this.Visible;
-        //}
-
-
-    }
-}
\ No newline at end of file
diff --git a/FizzyLauncher.UI/RyzStudio/Windows/Forms/TForm.resx b/FizzyLauncher.UI/RyzStudio/Windows/Forms/TForm.resx
deleted file mode 100644
index b723165..0000000
--- a/FizzyLauncher.UI/RyzStudio/Windows/Forms/TForm.resx
+++ /dev/null
@@ -1,424 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!-- 
-    Microsoft ResX Schema 
-    
-    Version 2.0
-    
-    The primary goals of this format is to allow a simple XML format 
-    that is mostly human readable. The generation and parsing of the 
-    various data types are done through the TypeConverter classes 
-    associated with the data types.
-    
-    Example:
-    
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-                
-    There are any number of "resheader" rows that contain simple 
-    name/value pairs.
-    
-    Each data row contains a name, and value. The row also contains a 
-    type or mimetype. Type corresponds to a .NET class that support 
-    text/value conversion through the TypeConverter architecture. 
-    Classes that don't support this are serialized and stored with the 
-    mimetype set.
-    
-    The mimetype is used for serialized objects, and tells the 
-    ResXResourceReader how to depersist the object. This is currently not 
-    extensible. For a given mimetype the value must be set accordingly:
-    
-    Note - application/x-microsoft.net.object.binary.base64 is the format 
-    that the ResXResourceWriter will generate, however the reader can 
-    read any of the formats listed below.
-    
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-    
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array 
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <metadata name="notifyIcon1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>17, 17</value>
-  </metadata>
-  <metadata name="contextMenuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>130, 17</value>
-  </metadata>
-  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-  <data name="notifyIcon1.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-    <value>
-        AAABAAQAMDAAAAEAIACoJQAARgAAACAgAAABACAAqBAAAO4lAAAYGAAAAQAgAIgJAACWNgAAEBAAAAEA
-        IABoBAAAHkAAACgAAAAwAAAAYAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGxc
-        VU5rW1Tna1tU22paU5BsXVVCgEBABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAaltTZWtbVPxrW1T/a1tU/2tbVP9rW1T/a1tU7mtbU6VrXFNWbVtbDgAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAABqWlR/a1tU/2tbVP9rW1T/a1tU/2tbVP9rW1T/a1tU/2tbVP9rW1T/a1tU+Wta
-        VLprW1Nrb15VHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAVVVVA2tbVJhrW1T/a1tU/2tbVP+NgXz/2NPR/6+mov+Bc23/a1tU/2tb
-        VP9rW1T/a1tU/2tbVP9rW1T/a1tU/2tbVc1sXFSAa1xSMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABtSUkHa1xUqmtbVP9rW1T/a1tU/5iNiP/6+fn/////////
-        ////////6+no/7+4tf+Sh4L/bV5X/2tbVP9rW1T/a1tU/2tbVP9rW1T/a1tU/2tbVOFrXFOZallTTW1J
-        SQcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGlaWhFqW1TCa1tU/2tbVP9rW1T/o5mV//38
-        /P//////////////////////////////////////9PPy/8jDwP+cko3/c2Nd/2tbVP9rW1T/a1tU/2tb
-        VP9rW1T/a1tU/2tbVPVrW1SzalxUXmlaWhEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAalhYHWtbVNRrW1T/a1tU/2tb
-        VP+1rar/////////////////////////////////////////////////////////////////+vn5/9LN
-        y/+lm5f/eGpj/2tbVP9rW1T/a1tU/2tbVP9rW1T/a1tU/2tbVPtrWlS9bFxVb2xdVSEAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABrWVMra1tU42tb
-        VP9rW1T/bV1W/8S9u///////////////////////////////////////////////////////////////
-        /////////////////////////v7+/97a2f+xqKT/g3Zw/2tbVP9rW1T/a1tU/2tbVP9rW1T/a1tU/2tb
-        VP5qW1V4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGpZ
-        VTxrW1Tua1tU/2tbVP9wYVr/0czK////////////////////////////////////////////////////
-        /////////////////////////////////////////////////////////////+ro5/+8tbL/j4N+/21d
-        Vv9rW1T/a1tU/2tbVP9rW1TpAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAbFxTUGtbVPZrW1T/a1tU/3VnYP/d2df/////////////////////////////////////////
-        ////////////////////////////////////////////////////////////////////////////////
-        //////////////Tz8v/Iw8D/dmdh/2tbVP9rW1T/blpTJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAABsXFRha1tU+2tbVP9rW1T/emxl/+Th4P//////////////////////////////
-        ////////////////////////////////////////////////////////////////////////////////
-        ////////////////////////////////////////m5CL/2tbVP9rW1T/a1tTXwAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGtaVHdrW1T/a1tU/2tbVP+DdnD/7uzs/////////////Pvw//z6
-        7v/8+u7//Pru//z67v/8+u7//Pru//z67v/9/PT///////////////////////z4+f/79fX/+/X1//v1
-        9f/79fX/+/X1//v19f/79fX//Pb2////////////////////////////vLWy/2tbVP9rW1T/a1xTmQAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVVVUDa1tUmGtbVP9rW1T/a1tU/4t/ev/08/L/////////
-        ///cyT7/0bcA/9G3AP/RtwD/0bcA/9G3AP/RtwD/0bcA/9G3AP/RtwD/6Nt+////////////4bG1/8Rl
-        bP/EZWz/xGVs/8RlbP/EZWz/xGVs/8RlbP/EZWz/xGVs/9KKkP//////////////////////3tvZ/2tb
-        VP9rW1T/a1tU1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG1JSQdrW1Sra1tU/2tbVP9rW1T/mY6J//r5
-        +f////////////389f/RtwD/0bcA/9G3AP/RtwD/0bcA/9G3AP/RtwD/0bcA/9G3AP/RtwD/28Y1////
-        ////////0IWL/8RlbP/EZWz/xGVs/8RlbP/EZWz/xGVs/8RlbP/EZWz/xGVs/8RlbP/9+fn/////////
-        /////////Pz8/3BhWv9rW1T/a1tU/nFVVRIAAAAAAAAAAAAAAAAAAAAAaVpaEWtcVMNrW1T/a1tU/2tb
-        VP+kmpb//fz8//////////////////389P/RtwD/0bcA/+TVbP/w56r/8Oeq//Dnqv/w56r/8Oeq/93K
-        Qv/RtwD/28Y1////////////0IWL/8RlbP/TjZL/68zO/+vMzv/rzM7/68zO/+vMzv/dpqr/xGVs/8Rl
-        bP/8+Pn//////////////////////46CfP9rW1T/a1tU/2xbVEkAAAAAAAAAAAAAAABsWFgaa1xU0Wtb
-        VP9rW1T/a1tU/7CopP////////////////////////////389P/RtwD/0bcA/+7lov//////////////
-        /////////////+PTY//RtwD/28Y1////////////0IWL/8RlbP/boaX/////////////////////////
-        ///px8n/xGVs/8RlbP/8+Pn//////////////////////7CopP9rW1T/a1tU/2tbVIMAAAAAAAAAAAAA
-        AABqXFTOa1tU/2tbVP9tXlf/xr+9//////////////////////////////////389P/RtwD/0bcA/+7l
-        ov///////////////////////////+PTY//RtwD/28Y1////////////0IWL/8RlbP/boaX/////////
-        ///////////////////px8n/xGVs/8RlbP/8+Pn//////////////////////9LNy/9rW1T/a1tU/2tb
-        VL8AAAAAAAAAAAAAAABrW1Tva1tU/2tbVP/KxML///////////////////////////////////////38
-        9P/RtwD/0bcA/+7lov///////////////////////////+PTY//RtwD/28Y1////////////0IWL/8Rl
-        bP/boaX////////////////////////////px8n/xGVs/8RlbP/8+Pn///////////////////////Py
-        8v9sXFX/a1tU/2tbVPRmZmYFAAAAAAAAAABrW1W4a1tU/2tbVP/Oycf/////////////////////////
-        //////////////389P/RtwD/0bcA/+7lov///////////////////////////+PTY//RtwD/28Y1////
-        ////////0IWL/8RlbP/boaX////////////////////////////px8n/xGVs/8RlbP/8+Pn/////////
-        //////////////////+CdG7/a1tU/2tbVP9sXVM0AAAAAAAAAABqWlR/a1tU/2tbVP+tpKD/////////
-        //////////////////////////////389P/RtwD/0bcA/+7lov///////////////////////////+PT
-        Y//RtwD/28Y1////////////0IWL/8RlbP/boaX////////////////////////////px8n/xGVs/8Rl
-        bP/8+Pn///////////////////////////+jmZX/a1tU/2tbVP9rWlNuAAAAAAAAAABtWlNEa1tU/2tb
-        VP+Lfnn///////////////////////////////////////389P/RtwD/0bcA/93JQf/j1Gb/49Rm/+PU
-        Zv/j1Gb/49Rm/9jCJ//RtwD/28Y1////////////0IWL/8RlbP/NfYL/3KOn/9yjp//co6f/3KOn/9yj
-        p//TjJH/xGVs/8RlbP/8+Pn////////////////////////////Fv7z/a1tU/2tbVP9qW1OoAAAAAAAA
-        AABqVVUMa1tU+2tbVP9uXlf/+fn4//////////////////////////////////389P/RtwD/0bcA/9G3
-        AP/RtwD/0bcA/9G3AP/RtwD/0bcA/9G3AP/RtwD/28c5////////////0IWL/8RlbP/EZWz/xGVs/8Rl
-        bP/EZWz/xGVs/8RlbP/EZWz/xGVs/8Rmbf/9+vr////////////////////////////n5eT/a1tU/2tb
-        VP9rW1TkAAAAAAAAAAAAAAAAa1tUz2tbVP9rW1T/3NjW//////////////////////////////////38
-        9v/axTP/2sUz/9rFM//axTP/2sUz/9rFM//axTP/2sUz/9rFM//bxzj/8Ois////////////2p2i/9CE
-        if/QhIn/0ISJ/9CEif/QhIn/0ISJ/9CEif/QhIn/0ISJ/+GwtP//////////////////////////////
-        ///+/v7/dWdg/2tbVP9rW1T/alhYHQAAAAAAAAAAa1tUlGtbVP9rW1T/ubKv////////////////////
-        ////////////////////////////////////////////////////////////////////////////////
-        ////////////////////////////////////////////////////////////////////////////////
-        ////////////////////////l4uG/2tbVP9rW1T/a1pUWAAAAAAAAAAAbFtVWmtbVP9rW1T/mI2I////
-        ////////////////////////////////////////////////////////////////////////////////
-        ////////////////////////////////////////////////////////////////////////////////
-        ////////////////////////////////////////uLGt/2tbVP9rW1T/a1tUkgAAAAAAAAAAa1pSH2tb
-        VP9rW1T/dmdh//7+/v////////////////////////////////+rnPH/fGTp/3xk6f98ZOn/fGTp/3xk
-        6f98ZOn/fGTp/3xk6f9/aOr/ysD2////////////rOH9/zi4+v8ztvr/M7b6/zO2+v8ztvr/M7b6/zO2
-        +v8ztvr/M7b6/33R/P//////////////////////////////////////2tbV/2tbVP9rW1T/a1tVzQAA
-        AAAAAAAAAAAAAGtbVONrW1T/a1tU/+jm5f////////////////////////////r5/v9cPuT/Wz3k/1s9
-        5P9bPeT/Wz3k/1s95P9bPeT/Wz3k/1s95P9bPeT/gGjq////////////Obj6/wCk+f8ApPn/AKT5/wCk
-        +f8ApPn/AKT5/wCk+f8ApPn/AKT5/wGk+f/3/P//////////////////////////////////+vn5/25f
-        WP9rW1T/a1tU/GpVVQwAAAAAAAAAAGtcVKprW1T/a1tU/8bAvf////////////////////////////j3
-        /v9bPeT/Wz3k/4Vu6/+di+//nYvv/52L7/+di+//nYvv/3Rb6P9bPeT/fWXq////////////Nbf6/wCk
-        +f8nsvr/Zsj7/2bI+/9myPv/Zsj7/2bI+/9Bu/v/AKT5/wCk+f/0+///////////////////////////
-        /////////////4p9eP9rW1T/a1tU/2xdVUIAAAAAAAAAAGtbVHBrW1T/a1tU/6Sblv//////////////
-        //////////////j3/v9bPeT/Wz3k/8O49f///////////////////////////5uI7v9bPeT/fWXq////
-        ////////Nbf6/wCk+f9jx/v///////////////////////////+i3v3/AKT5/wCk+f/0+///////////
-        /////////////////////////////6yjn/9rW1T/a1tU/2pcVH0AAAAAAAAAAGxdUzRrW1T/a1tU/4J0
-        bv////////////////////////////j3/v9bPeT/Wz3k/8O49f///////////////////////////5uI
-        7v9bPeT/fWXq////////////Nbf6/wCk+f9jx/v///////////////////////////+i3v3/AKT5/wCk
-        +f/0+////////////////////////////////////////87Jx/9rW1T/a1tU/2tbVbgAAAAAAAAAAGZm
-        ZgVrW1T0a1tU/2xcVf/z8vL///////////////////////j3/v9bPeT/Wz3k/8O49f//////////////
-        /////////////5uI7v9bPeT/fWXq////////////Nbf6/wCk+f9jx/v/////////////////////////
-        //+i3v3/AKT5/wCk+f/0+////////////////////////////////////////8rEwv9rW1T/a1tU/2tb
-        VO8AAAAAAAAAAAAAAABrW1S/a1tU/2tbVP/Szcv///////////////////////j3/v9bPeT/Wz3k/8O4
-        9f///////////////////////////5uI7v9bPeT/fWXq////////////Nbf6/wCk+f9jx/v/////////
-        //////////////////+i3v3/AKT5/wCk+f/0+///////////////////////////////////xr+9/21e
-        V/9rW1T/a1tU/2pcVM4AAAAAAAAAAAAAAABrWlSFa1tU/2tbVP+xqaX///////////////////////j3
-        /v9bPeT/Wz3k/8O49f///////////////////////////5uI7v9bPeT/fWXq////////////Nbf6/wCk
-        +f9jx/v///////////////////////////+i3v3/AKT5/wCk+f/0+///////////////////////////
-        //+6sq//bFxV/2tbVP9rW1T/a1tT1m9eVR4AAAAAAAAAAAAAAABpXFVLa1tU/2tbVP+Pg37/////////
-        //////////////j3/v9bPeT/Wz3k/6CP7//Ivvb/yL72/8i+9v/Ivvb/yL72/4Vv6/9bPeT/fWXq////
-        ////////Nbf6/wCk+f9CvPv/quH9/6rh/f+q4f3/quH9/6rh/f9sy/z/AKT5/wCk+f/0+///////////
-        /////////f39/6ifmv9rW1T/a1tU/2tbVP9rW1TIZllZFAAAAAAAAAAAAAAAAAAAAABpWloRa1tU/Wtb
-        VP9wYVr//Pv7//////////////////j3/v9bPeT/Wz3k/1s95P9bPeT/Wz3k/1s95P9bPeT/Wz3k/1s9
-        5P9bPeT/fWXq////////////Nbf6/wCk+f8ApPn/AKT5/wCk+f8ApPn/AKT5/wCk+f8ApPn/AKT5/wCk
-        +f/1+//////////////7+vr/nZKO/2tbVP9rW1T/a1tU/2tcVbJmZk0KAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAa1tT1mtbVP9rW1T/4Nzb//////////////////j3/v9bPeT/Wz3k/1s95P9bPeT/Wz3k/1s9
-        5P9bPeT/Wz3k/1s95P9bPeT/rJ3x////////////Nbf6/wCk+f8ApPn/AKT5/wCk+f8ApPn/AKT5/wCk
-        +f8ApPn/AKT5/z66+v////////////b19P+Pg37/a1tU/2tbVP9rW1T/a1tTn4BAQAQAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAa1pUm2tbVP9rW1T/vbaz//////////////////7+///08v3/9PL9//Ty
-        /f/08v3/9PL9//Ty/f/08v3/9PL9//Ty/f/49/7/////////////////8vr//+75///u+f//7vn//+75
-        ///u+f//7vn//+75///u+f//8Pr/////////////8O/u/4Z5dP9rW1T/a1tU/2tbVP9rXFSIAAAAAQAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbFxUYWtbVP9rW1T/nJGM////////////////////
-        ////////////////////////////////////////////////////////////////////////////////
-        ///////////////////////////////////////////////////n5eT/fG5o/2tbVP9rW1T/a1tU/Gta
-        VWkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAblpTJWtbVP9rW1T/dmdh/8jD
-        wP/08/L/////////////////////////////////////////////////////////////////////////
-        /////////////////////////////////////////////////////////////93Z1/91Z2D/a1tU/2tb
-        VP9rW1T2bFxTUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWtb
-        VOlrW1T/a1tU/2tbVP9tXVb/j4N+/7y1sv/q6Of/////////////////////////////////////////
-        ////////////////////////////////////////////////////////////////////////0czK/3Bh
-        Wv9rW1T/a1tU/2tbVO5qWVU8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAGpbVXhrW1T+a1tU/2tbVP9rW1T/a1tU/2tbVP9rW1T/g3Zw/7GopP/e2tn//v7+////
-        ////////////////////////////////////////////////////////////////////////////////
-        ///Evbv/bV1W/2tbVP9rW1T/a1tU42tZUysAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsXVUhbFxVb2taVL1rW1T7a1tU/2tbVP9rW1T/a1tU/2tb
-        VP9rW1T/eGpj/6Wbl//Szcv/+vn5////////////////////////////////////////////////////
-        /////////////7Wtqv9rW1T/a1tU/2tbVP9rW1TUalhYHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABpWloRbFpUVWtb
-        U6JrW1Twa1tU/2tbVP9rW1T/a1tU/2tbVP9rW1T/cGFa/5KHgv+/uLX/8O/u////////////////////
-        ///////////////////9/f3/p56a/2tbVP9rW1T/a1tU/2pbVcdmWVkUAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAABVVVUDallVPGtbVJFrW1Pia1tU/2tbVP9rW1T/a1tU/2tbVP9rW1T/bFxV/4l8
-        dv+1ran/4d7d//////////////////v6+v+cko3/a1tU/2tbVP9rW1T/a1tUsXFVVQkAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa1xSMmxcVIBrW1XNa1tU/2tb
-        VP9rW1T/a1tU/2tbVP9rW1T/a1tU/4Fzbf+vpqL/2NPR/42BfP9rW1T/a1tU/2tbVP9rW1SYVVVVAwAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAb15VHmtbU2trWlS6a1tU+WtbVP9rW1T/a1tU/2tbVP9rW1T/a1tU/2tbVP9rW1T/a1tU/2pa
-        VH8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbVtbDmtcU1ZrW1Ola1tU7mtbVP9rW1T/a1tU/2tb
-        VP9rW1T8altTZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgEBABGxd
-        VUJqWlOQa1tU22tbVOdsXFVOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//4H///+sEP//AD///6wQ//4AB///rBD/+AAA//+sEP/w
-        AAAP/6wQ/+AAAAH/rBD/wAAAAD+sEP+AAAAAH6wQ/wAAAAAPrBD+AAAAAA+sEPwAAAAAD6wQ+AAAAAAP
-        rBDgAAAAAA+sEMAAAAAAB6wQgAAAAAAHrBAAAAAAAAesEAAAAAAAB6wQAAAAAAADrBAAAAAAAAOsEAAA
-        AAAAA6wQAAAAAAADrBAAAAAAAAOsEIAAAAAAAawQgAAAAAABrBCAAAAAAAGsEIAAAAAAAawQwAAAAAAA
-        rBDAAAAAAACsEMAAAAAAAKwQwAAAAAAArBDAAAAAAACsEOAAAAAAAKwQ4AAAAAAArBDgAAAAAAGsEOAA
-        AAAAA6wQ8AAAAAAHrBDwAAAAAA+sEPAAAAAAP6wQ8AAAAAB/rBDwAAAAAP+sEPgAAAAB/6wQ/AAAAAP/
-        rBD/gAAAB/+sEP/wAAAP/6wQ//8AAB//rBD//+AAf/+sEP///AD//6wQ////gf//rBAoAAAAIAAAAEAA
-        AAABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAABsXFRha1tU7GtbVcFqW1RzalxVJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAbFtVe2tbVP5rW1T/a1tU/2tbVP9rW1T/a1tT1mtcVIhrWVU5gICAAgAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAVVVVA2xbVJVrW1T/bV5X/8K7uf/RzMr/pJqW/3hpY/9rW1T/a1tU/2tb
-        VP9rW1TpalxTnGxcVU5mZk0KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAG1JSQdrW1Spa1tU/29fWf/Oycf//////////////////v7+/+He
-        3f+1ran/iXx2/2tbVP9rW1T/a1tU/2tbVPZqW1W7bFxVb2xYWBoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwYFAQbFxUwGtbVP91ZmD+3trZ////////////////////
-        ////////////////////////6efm/7y0sf+Ogn3/bV1W/2tbVP9rW1T/a1tU/WtbVMZrWlR3ZlVVDwAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaF5VG2tbVNJrW1T/fW9p/+fl5P//////////////
-        ///////////////////////////////////////////////////z8vL/x8G//5uQi/9xYlv/a1tU/2tb
-        VP9rW1SPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGpdVylrW1Tha1tU/4V4cv/w7u7/////////
-        //////////////////////////////////////////////////////////////////////////////r6
-        +v/Evbv/a1tU/2xbVMwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABrXVM3a1tU62tbVP+MgHr/9PPy////
-        ////////////////////////////////////////////////////////////////////////////////
-        //////////////v6+v9vX1n/a1tU+2pVVQwAAAAAAAAAAAAAAAAAAAAAallTTWtbVPVrW1T/mY6K//r5
-        +f///v3/1r8d/9G3AP/RtwD/0bcA/9G3AP/RtwD/07oL//r34//57u//x2xy/8RlbP/EZWz/xGVs/8Rl
-        bP/EZWz/y3d9///+/v///////////4yAev9rW1T/alpSQQAAAAAAAAAAAAAAAGpaVWBrW1T7a1tU/6mg
-        nP/+/v7///////799//RtwD/2cMr/+PUZv/j1Gb/49Rm/9zIPP/RtwD/9vHM//Pg4v/EZWz/0omP/9yj
-        p//co6f/3KOn/85/hf/EZWz//fr6////////////rqai/2tbVP9sW1V7AAAAAAAAAABrW1R5a1tU/2xc
-        Vf+4sa3//////////////////v33/9G3AP/k1Wz/////////////////7OGW/9G3AP/28cz/8+Di/8Rl
-        bP/nwML/////////////////3aaq/8RlbP/9+vr////////////RzMn/a1tU/2pbVLYAAAAAAAAAAGtb
-        VO5rW1T/w726///////////////////////+/ff/0bcA/+TVbP/////////////////s4Zb/0bcA//bx
-        zP/z4OL/xGVs/+fAwv/////////////////dpqr/xGVs//36+v////////////Lw8P9rW1T/a1tU74CA
-        gAIAAAAAa1tUxWtbVP/Z1dP///////////////////////799//RtwD/5NVs/////////////////+zh
-        lv/RtwD/9vHM//Pg4v/EZWz/58DC/////////////////92mqv/EZWz//fr6/////////////////4By
-        bP9rW1T/aF1RLAAAAABqXFSLa1tU/7iwrf///////////////////////v33/9G3AP/dyUH/7eKZ/+3i
-        mf/t4pn/4dBa/9G3AP/28cz/8+Di/8RlbP/Zm6D/58HE/+fBxP/nwcT/04yR/8RlbP/9+vr/////////
-        ////////opeT/2tbVP9qW1NlAAAAAGtbVVFrW1T/louG///////////////////////+/ff/0bcA/9G3
-        AP/RtwD/0bcA/9G3AP/RtwD/0bcB//n12//z4OL/xGVs/8RlbP/EZWz/xGVs/8RlbP/EZWz/x2xy//79
-        /f/////////////////Dvbr/a1tU/2tbU58AAAAAaF1RFmtbVP90ZV///v7+///////////////////+
-        /f/28cz/9vHM//bxzP/28cz/9vHM//bxzP/49dr///////35+f/z4OL/8+Di//Pg4v/z4OL/8+Di//Pg
-        4v/47e7//////////////////////+Xi4f9rW1T/altU2gAAAAAAAAAAa1xT3GtbVP/m4+L/////////
-        /////////////+zp/P/e2Pr/3tj6/97Y+v/e2Pr/3tj6/+fj+////////////9ry/v/M7f7/zO3+/8zt
-        /v/M7f7/zO3+/+L1/v///////////////////////v7+/3VmX/9rW1T+aF1RFgAAAABsWlSha1tU/8S+
-        u//////////////////8/P//YkXl/1s95P9bPeT/Wz3k/1s95P9bPeT/XD7k/+jk+//b8v7/AaT5/wCk
-        +f8ApPn/AKT5/wCk+f8ApPn/C6j5//v+////////////////////////lYmE/2tbVP9rWlRPAAAAAGpc
-        VGdrW1T/o5mU//////////////////r5/v9bPeT/hW7r/72x9P+9sfT/vbH0/5WB7v9bPeT/3tj6/8zt
-        /v8ApPn/WsT7/5nb/f+Z2/3/mdv9/0G7+/8ApPn/9/z///////////////////////+2r6v/a1tU/2pb
-        VIkAAAAAaF1RLGtbVP+Acmz/////////////////+vn+/1s95P+gj+//////////////////u6/0/1s9
-        5P/e2Pr/zO3+/wCk+f+W2v3/////////////////bMv8/wCk+f/3/P///////////////////////9nV
-        0/9rW1T/a1tUxQAAAACAgIACa1tU72tbVP/y8PD////////////6+f7/Wz3k/6CP7///////////////
-        //+7r/T/Wz3k/97Y+v/M7f7/AKT5/5ba/f////////////////9sy/z/AKT5//f8////////////////
-        ////////w726/2tbVP9rW1TuAAAAAAAAAABqW1S2a1tU/9HMyf////////////r5/v9bPeT/oI/v////
-        /////////////7uv9P9bPeT/3tj6/8zt/v8ApPn/ltr9/////////////////2zL/P8ApPn/9/z/////
-        /////////////7ixrf9sXFX/a1tU/2tbVHkAAAAAAAAAAGpcVH1rW1T/r6ej////////////+vn+/1s9
-        5P93Xun/nYvv/52L7/+di+//gmvq/1s95P/e2Pr/zO3+/wCk+f88ufr/Zsj7/2bI+/9myPv/K7P6/wCk
-        +f/3/P////////7+/v+upaH/a1tU/2tbVPxqXFRnAAAAAAAAAAAAAAAAa1tUQ2tbVP+NgXz/////////
-        ///6+f7/Wz3k/1s95P9bPeT/Wz3k/1s95P9bPeT/YkXl/+3q/P/M7f7/AKT5/wCk+f8ApPn/AKT5/wCk
-        +f8ApPn/Ha76//3+///7+vr/nZOO/2tbVP9rWlT4altVVAAAAAAAAAAAAAAAAAAAAAB0XV0La1tU+29f
-        Wf/7+vr/////////////////////////////////////////////////////////////////////////
-        ////////////////////////9vX0/5CEfv9rW1T/bFxU72pZVTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AABsW1TMa1tU/8S9u//6+vr/////////////////////////////////////////////////////////
-        //////////////////////////////Du7v+FeHL/a1tU/2tbVOFqXVcpAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAGtbVI9rW1T/a1tU/3FiW/+bkIv/x8G///Py8v//////////////////////////////
-        ///////////////////////////////////n5eT/fW9p/2tbVP9rW1TSaF5VGwAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAZlVVD2taVHdrW1TGa1tU/WtbVP9rW1T/bV1W/46Cff+8tLH/6efm////
-        ////////////////////////////////////////3trZ/3ZnYf9rW1T/bFxUwHBgUBAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmWVkUalxUXmtcVKprW1Tya1tU/2tb
-        VP9rW1T/f3Fr/6uinv/Y09H//fz8/////////////////9LNy/9xYVv/a1tU/2paVa9xVVUJAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGZm
-        TQpsXFVOalxTnGtbVOlrW1T/a1tU/2tbVP94aWP/pJqW/9HMyv/Cu7n/bV5X/2tbVP9sW1SVVVVVAwAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAgICAAmtZVTlrXFSIa1tT1mtbVP9rW1T/a1tU/2tbVP9rW1T+bFtVewAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAalxVJGpbVHNrW1XBa1tU7Gxc
-        VGEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/g////wA///wAB//4A
-        AD/8AAAH+AAAB/AAAAfgAAADwAAAA4AAAAMAAAADAAAAAQAAAAEAAAABAAAAAQAAAAGAAAAAgAAAAIAA
-        AACAAAAAgAAAAMAAAADAAAABwAAAA8AAAAfgAAAP4AAAH+AAAD/8AAB//4AA///wA////wf/KAAAABgA
-        AAAwAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAa1tTa2xcVfBsXFW1bFpVZmZcUhkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFrWlSFa1tU/4+Dfv+AcWv8a1tU/2tb
-        VP5tXlbMa1xUemxbVS0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAVVVVA2xbVJprW1T/qqCc//7+/v//////6+no/7+4tf+RhoH9bF1W/mtbVP9tXlbia1xTmWpZ
-        U02AVVUGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0XV0LbFxVtWxcVf+5sq//////////
-        ////////////////////////8/Hx/8bAvf+Zjor/cGBa/WtbVP9tXVbxaltUo2heVRsAAAAAAAAAAAAA
-        AAAAAAAAAAAAAGZZWRRtXFbKbV1W/sjCv///////////////////////////////////////////////
-        ////////+vn5/9LNy/+mnJj/bV1W/WtbVIMAAAAAAAAAAAAAAAAAAAAAaFhYIG1eV9pvYFn808/N////
-        ////////////////////////////////////////////////////////////////////////in55/W1d
-        Vr4AAAAAAAAAAAAAAABoXVEsbV5X53NlXvzd2tj//v78/9S8EP/RtwD/0bcA/9G3AP/RtwD/8Oit/+zN
-        0P/EZWz/xGVs/8RlbP/EZWz/yG91//79/f//////raSg/2xcVfaAQEAEAAAAAGxcVEBtXVbzfG5n++jm
-        5f///////v35/9G3AP/v5qf/9vHM//bxzP/Ywij/7eKZ/+fBxP/NfYP/8+Di//Pg4v/rysz/xGVs//77
-        /P//////z8rH/2tbVP9rXFIyAAAAAG1dVe2CdW/98O/u/////////////v35/9G3AP/38tH/////////
-        ///axTL/7eKZ/+fBxP/Qg4n////////////04+T/xGVs//77/P//////8fDv/2tbVP9sW1RtAAAAAG5e
-        Vs+ViYT+/////////////////v35/9G3AP/38tH////////////axTL/7eKZ/+fBxP/Qg4n/////////
-        ///04+T/xGVs//77/P///////////31waftqW1OoAAAAAGxaU5NyY138/v7+/////////////v35/9G3
-        AP/Zwyr/2sUz/9rFM//Tugr/7eOb/+fBxP/Ga3L/0ISJ/9CEif/OfoT/xGVs//78/P///////////6CW
-        kv9tXlflAAAAAGpcU1lrW1T/5ePh//////////////79/+3imf/t4pn/7eKZ/+3imf/t4pr/+/nr//bm
-        5//nwcT/58HE/+fBxP/nwcT/7M3P/////////////////8K7uf9rW1T/alhYHW9eVR5rW1T/w726////
-        /////////////8rA9v+9sfT/vbH0/72x9P++svT/8vD9/+v4//+a2/3/mdv9/5nb/f+Z2/3/rOH9////
-        /////////////+Th4P9rW1T/bFtVVwAAAABtXlfnopeT/////////////Pv+/1s95P92Xej/fGTp/3xk
-        6f9hReX/v7P0/5vb/f8KqPn/M7b6/zO2+v8qs/r/AKT5//r9//////////////7+/v9yY1z8a1tUkQAA
-        AABqW1OofXBp+///////////+/r+/1s95P/h3Pr///////////97Y+n/vbH0/5nb/f8ytvr/////////
-        ///R7/7/AKT5//n9//////////////////+ViYT+bl5WzwAAAABsW1Rta1tU//Hw7///////+/r+/1s9
-        5P/h3Pr///////////97Y+n/vbH0/5nb/f8ytvr////////////R7/7/AKT5//n9//////////////Dv
-        7v+CdW/9bV1V7QAAAABsXVM0a1tU/9DLyf//////+/r+/1s95P/GvPb/3tj6/97Y+v91W+j/vbH0/5nb
-        /f8osvr/zO3+/8zt/v+n4P3/AKT5//n9////////6+no/35wavxsXVX1altURgAAAACAQEAEbV1W9q6m
-        ov//////+/r+/1s95P9bPeT/Wz3k/1s95P9bPeT/ysH2/5nb/f8ApPn/AKT5/wCk+f8ApPn/EKr5//z+
-        ///g3dv/dmdh/G1dVuptWFMxAAAAAAAAAAAAAAAAbFxVv4x/ev3/////////////////////////////
-        /////////////////////////////////////////////9jT0f9xYVv8bV5W32pcVSQAAAAAAAAAAAAA
-        AAAAAAAAa1tUg21dVv2mnJj/0s3L//r5+f//////////////////////////////////////////////
-        ////////yMK//21dVv5tXFbKZllZFAAAAAAAAAAAAAAAAAAAAAAAAAAAaF5VG2pbVKNsXFXwa1tU/3Bg
-        Wv2Zjor+xsC9//Px8f////////////////////////////////+5sq//bFxV/2xcVbV0XV0LAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVVVUDallVPGtcVIhtXVbba1tU/2tbVP6Ie3X9ta2p/+He
-        3f///////v7+/66mov9rW1T/bFpUoWZmZgUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAbFtVLWtcVHpsXVXLa1tU/mtbVP9/cWv7j4N+/2tbVP9rWlSFAAAAAQAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAZlxSGWxaVWZsXFW1bFxV8GtbU2sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8H
-        /0H8AP9B+AAPQfAAA0HgAANBwAADQYAAAUEAAAFBAAABQQAAAUEAAAFBAAAAQQAAAEGAAABBgAAAQYAA
-        AEGAAABBgAABQcAAA0HAAAdBwAAPQfAAH0H/AD9B/+D/QSgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJhW3tvYFn0dWZgsmxbVVdmVVUPAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgICAAnFiW5eCdG705OHg/8a/vf+UiYT0cWFa+Xdo
-        YcptXFVsb15VHgAAAAAAAAAAAAAAAAAAAAAAAAAAbUlJB3NkXbKMgHr09/b2//////////////////r5
-        +f/Szcv/oJeS9XNlXfZzZV7baVxVJwAAAAAAAAAAbVtbDnNjXciZj4n1+/r6////////////////////
-        ///////////////////+/v7/pJqW+WxdVnYAAAAAamBVGHJkXdmnnpn2/f37/9S8E//axTP/2MIo/+XX
-        cP/eqa3/zX2D/9CEif/IcHf//v39/83Ixf92Z2C8AAAAAHJjXOC5sK36//////7++//bxjb///////Xw
-        yv/k1Gf/3KOn//Pf4P//////0IaL//79/f/w7u7/cWFb8gAAAAF0Zl/i4+Df///////+/vv/2cMr//bx
-        zP/u5aL/5NRn/9yjp//px8n/8+Di/85/hf/+/f3//////3hpYvNuWlMldGReo8K7uf////////79/+PU
-        Zv/j1Gb/49Rm//Dorv/qyMv/3KOn/9yjp//eqKz///7+//////+ajoryalxUXmpaVWCbkYzz//////7+
-        //+ikfD/nYvv/52L7//Lwfb/ruL9/2bI+/9myPv/b8z8//7/////////wbq3/3RlXqJuWlMleGli8///
-        ///8/P//d17p/97Y+v/DuPX/nYvv/2fJ+/+i3v3/zO3+/yuz+v/7/v///////+Pg3/90Zl/iAAAAAXFh
-        W/Lw7u7//Pz//35m6v//////3df5/52L7/9nyfv/yuz+//////82t/r/+/7///////+5sK36cmNc4AAA
-        AAB2Z2G+zsnH//z8//9iReX/fGTp/3Vb6P+jkvD/Z8n7/yiy+v8ztvr/E6v5//v9/v+to5/4c2Nd3m1b
-        UhwAAAAAbF1WdqSalvn+/v7///////////////////////////////////////v6+v+Zj4r2c2ReyW1b
-        Ww4AAAAAAAAAAGlcVSdzZV7bc2Vd9qCXkvXSzcv/+vn5//////////////////f29v+MgHr0c2Rdsm1J
-        SQcAAAAAAAAAAAAAAAAAAAAAAAAAAG9eVR5rW1NrdGRexnBhWfiShoHvxr+9/uTh4P+CdG70c2RdmYCA
-        gAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmVVUPbFtVV3VmYLJvYFn0cmFbewAA
-        AAAAAAAAAAAAAAAAAAAAAAAA+D+sQeAHrEHAAaxBgAGsQQABrEEAAKxBAACsQQAArEEAAKxBAACsQQAA
-        rEGAAKxBgAGsQYADrEHgB6xB/B+sQQ==
-</value>
-  </data>
-</root>
\ No newline at end of file
diff --git a/FizzyLauncher.UI/RyzStudio/Windows/Forms/THorizontalSeparator.Designer.cs b/FizzyLauncher.UI/RyzStudio/Windows/Forms/THorizontalSeparator.Designer.cs
deleted file mode 100644
index 1058088..0000000
--- a/FizzyLauncher.UI/RyzStudio/Windows/Forms/THorizontalSeparator.Designer.cs
+++ /dev/null
@@ -1,37 +0,0 @@
-namespace RyzStudio.Windows.Forms
-{
-    partial class THorizontalSeparator
-    {
-        /// <summary>
-        /// Required designer variable.
-        /// </summary>
-        private System.ComponentModel.IContainer components = null;
-
-        /// <summary>
-        /// Clean up any resources being used.
-        /// </summary>
-        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-        protected override void Dispose(bool disposing)
-        {
-            if (disposing && (components != null))
-            {
-                components.Dispose();
-            }
-            base.Dispose(disposing);
-        }
-
-        #region Component Designer generated code
-
-        /// <summary>
-        /// Required method for Designer support - do not modify
-        /// the contents of this method with the code editor.
-        /// </summary>
-        private void InitializeComponent()
-        {
-            components = new System.ComponentModel.Container();
-            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-        }
-
-        #endregion
-    }
-}
diff --git a/FizzyLauncher.UI/RyzStudio/Windows/Forms/THorizontalSeparator.cs b/FizzyLauncher.UI/RyzStudio/Windows/Forms/THorizontalSeparator.cs
deleted file mode 100644
index 3311e09..0000000
--- a/FizzyLauncher.UI/RyzStudio/Windows/Forms/THorizontalSeparator.cs
+++ /dev/null
@@ -1,26 +0,0 @@
-using System.Drawing;
-using System.Windows.Forms;
-
-namespace RyzStudio.Windows.Forms
-{
-    public partial class THorizontalSeparator : System.Windows.Forms.UserControl
-    {
-        public THorizontalSeparator()
-        {
-            InitializeComponent();
-
-            this.MaximumSize = new Size(SystemInformation.VirtualScreen.Width, 2);
-        }
-
-        protected override void OnPaintBackground(PaintEventArgs e)
-        {
-            base.OnPaintBackground(e);
-
-            Graphics g = e.Graphics;
-
-            g.FillRectangle(new SolidBrush(Color.FromArgb(213, 223, 229)), new Rectangle(this.DisplayRectangle.Left, 0, this.DisplayRectangle.Width, 1));
-            g.FillRectangle(new SolidBrush(Color.FromArgb(249, 251, 253)), new Rectangle(this.DisplayRectangle.Left, 1, this.DisplayRectangle.Width, 1));
-        }
-
-    }
-}
diff --git a/FizzyLauncher.UI/RyzStudio/Windows/Forms/TImageBox.cs b/FizzyLauncher.UI/RyzStudio/Windows/Forms/TImageBox.cs
deleted file mode 100644
index 09f7bbe..0000000
--- a/FizzyLauncher.UI/RyzStudio/Windows/Forms/TImageBox.cs
+++ /dev/null
@@ -1,84 +0,0 @@
-using System;
-using System.ComponentModel;
-using System.Drawing;
-
-namespace RyzStudio.Windows.Forms
-{
-    public class TImageBox : System.Windows.Forms.PictureBox
-    {
-        public TImageBox() : base()
-        {
-            this.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
-            this.ErrorImage = null;
-            this.InitialImage = null;
-            this.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
-        }
-
-        protected override void OnCreateControl()
-        {
-            OnMouseLeave(null);
-
-            base.OnCreateControl();
-        }
-
-        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
-        public new Color BackColor { get => base.BackColor; set => base.BackColor = value; }
-
-        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
-        public new Image Image { get => base.Image; set => base.Image = value; }
-
-        [Category("Appearance"), Browsable(true)]
-        public Color BackColorNormal { get; set; } = Color.Transparent;
-
-        [Category("Appearance"), Browsable(true)]
-        public Color BackColorHover { get; set; } = Color.Transparent;
-
-        [Category("Appearance"), Browsable(true)]
-        public Color BackColorSelected { get; set; } = Color.Transparent;
-
-        [Category("Appearance"), Browsable(true)]
-        public Image ImageNormal { get; set; }
-
-        [Category("Appearance"), Browsable(true)]
-        public Image ImageHover { get; set; }
-
-        [Category("Appearance"), Browsable(true)]
-        public Image ImageSelected { get; set; }
-
-        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
-        public Image NormalImage { get => this.ImageNormal; set => this.ImageNormal = value; }
-
-        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
-        public Image HoverImage { get => this.ImageHover; set => this.ImageHover = value; }
-
-        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
-        public Image SelectedImage { get => this.ImageSelected; set => this.ImageSelected = value; }
-
-        public bool IsSelected { get; set; } = false;
-
-        protected override void OnMouseEnter(EventArgs e)
-        {
-            this.Image = this.ImageHover;
-            this.BackColor = this.BackColorHover;
-
-            base.OnMouseEnter(e);
-        }
-
-        protected override void OnMouseLeave(EventArgs e)
-        {
-            this.Image = (this.IsSelected ? this.ImageSelected : this.ImageNormal);
-            this.BackColor = (this.IsSelected ? this.BackColorSelected : this.BackColorNormal);
-
-            base.OnMouseLeave(e);
-        }
-
-        protected override void OnLostFocus(EventArgs e)
-        {
-            this.Image = (this.IsSelected ? this.ImageSelected : this.ImageNormal);
-            this.BackColor = (this.IsSelected ? this.BackColorSelected : this.BackColorNormal);
-
-            base.OnLostFocus(e);
-        }
-
-    }
-}
diff --git a/FizzyLauncher.UI/RyzStudio/Windows/Forms/TUserControl.cs b/FizzyLauncher.UI/RyzStudio/Windows/Forms/TUserControl.cs
deleted file mode 100644
index 8bb38d6..0000000
--- a/FizzyLauncher.UI/RyzStudio/Windows/Forms/TUserControl.cs
+++ /dev/null
@@ -1,73 +0,0 @@
-using System.ComponentModel;
-using System.Drawing;
-using System.Windows.Forms;
-
-namespace RyzStudio.Windows.Forms
-{
-    public class TUserControl : System.Windows.Forms.UserControl
-    {
-
-        public TUserControl() : base()
-        {
-
-        }
-
-        [Browsable(false)]
-        public override Image BackgroundImage { get => base.BackgroundImage; set => base.BackgroundImage = value; }
-
-        [Browsable(false)]
-        public override ImageLayout BackgroundImageLayout { get => base.BackgroundImageLayout; set => base.BackgroundImageLayout = value; }
-
-        [Browsable(false)]
-        public new BorderStyle BorderStyle { get => base.BorderStyle; set => base.BorderStyle = value; }
-
-        [Browsable(false)]
-        public override Cursor Cursor { get => base.Cursor; set => base.Cursor = value; }
-
-        [Browsable(false)]
-        public override Font Font { get => base.Font; set => base.Font = value; }
-
-        [Browsable(false)]
-        public override Color ForeColor { get => base.ForeColor; set => base.ForeColor = value; }
-
-        [Browsable(false)]
-        public override RightToLeft RightToLeft { get => base.RightToLeft; set => base.RightToLeft = value; }
-
-        [Browsable(false)]
-        public new bool UseWaitCursor { get => base.UseWaitCursor; set => base.UseWaitCursor = value; }
-
-        [Browsable(false)]
-        public override bool AllowDrop { get => base.AllowDrop; set => base.AllowDrop = value; }
-
-        [Browsable(false)]
-        public override AutoValidate AutoValidate { get => base.AutoValidate; set => base.AutoValidate = value; }
-
-        //[Browsable(false)]
-        //public override ContextMenuStrip ContextMenuStrip { get => base.ContextMenuStrip; set => base.ContextMenuStrip = value; }
-
-        [Browsable(false)]
-        public new ImeMode ImeMode { get => base.ImeMode; set => base.ImeMode = value; }
-
-        [Browsable(false)]
-        public override bool AutoScroll { get => base.AutoScroll; set => base.AutoScroll = value; }
-
-        [Browsable(false)]
-        public new Size AutoScrollMargin { get => base.AutoScrollMargin; set => base.AutoScrollMargin = value; }
-
-        [Browsable(false)]
-        public new Size AutoScrollMinSize { get => base.AutoScrollMinSize; set => base.AutoScrollMinSize = value; }
-
-        [Browsable(false)]
-        public override bool AutoSize { get => base.AutoSize; set => base.AutoSize = value; }
-
-        [Browsable(false)]
-        public new AutoSizeMode AutoSizeMode { get => base.AutoSizeMode; set => base.AutoSizeMode = value; }
-
-        [Browsable(false)]
-        public override Size MaximumSize { get => base.MaximumSize; set => base.MaximumSize = value; }
-
-        [Browsable(false)]
-        public override Size MinimumSize { get => base.MinimumSize; set => base.MinimumSize = value; }
-
-    }
-}
\ No newline at end of file
diff --git a/FizzyLauncher.UI/RyzStudio/Windows/Forms/ThreadControl.cs b/FizzyLauncher.UI/RyzStudio/Windows/Forms/ThreadControl.cs
deleted file mode 100644
index 4c9c89e..0000000
--- a/FizzyLauncher.UI/RyzStudio/Windows/Forms/ThreadControl.cs
+++ /dev/null
@@ -1,526 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Drawing;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Windows.Forms;
-
-namespace RyzStudio.Windows.Forms
-{
-    public class ThreadControl
-    {
-        public static void Add(Control control, Control value)
-        {
-            if (control.InvokeRequired)
-            {
-                control.Invoke(new MethodInvoker(() =>
-                {
-                    control.Controls.Add(value);
-                }));
-            }
-            else
-            {
-                control.Controls.Add(value);
-            }
-        }
-
-        public static void Add(ListBox control, string value)
-        {
-            if (control.InvokeRequired)
-            {
-                control.Invoke(new MethodInvoker(() => {
-                    control.Items.Add(value);
-                }));
-            }
-            else
-            {
-                control.Items.Add(value);
-            }
-        }
-
-        //public static void Add(FlowLayoutPanel control, Control value)
-        //{
-        //    if (control.InvokeRequired)
-        //    {
-        //        control.Invoke(new MethodInvoker(() => {
-        //            control.Controls.Add(value);
-        //        }));
-        //    }
-        //    else
-        //    {
-        //        control.Controls.Add(value);
-        //    }
-        //}
-
-        public static int Add(TreeView control, TreeNode value)
-        {
-            int n = -1;
-
-            if (control.InvokeRequired)
-            {
-                control.Invoke(new MethodInvoker(() => {
-                    n = control.Nodes.Add(value);
-                }));
-            }
-            else
-            {
-                n = control.Nodes.Add(value);
-            }
-
-            return n;
-        }
-
-        public static int Add(TreeNode control, TreeNode value)
-        {
-            int n = -1;
-
-            if (control.TreeView.InvokeRequired)
-            {
-                control.TreeView.Invoke(new MethodInvoker(() => {
-                    n = control.Nodes.Add(value);
-                }));
-            }
-            else
-            {
-                n = control.Nodes.Add(value);
-            }
-
-            return n;
-        }
-
-        public static int Add(DataGridView control, object[] value)
-        {
-            int n = -1;
-
-            if (control.InvokeRequired)
-            {
-                control.Invoke(new MethodInvoker(() => {
-                    n = control.Rows.Add(value);
-                }));
-            }
-            else
-            {
-                n = control.Rows.Add(value);
-            }
-
-            return n;
-        }
-
-        public static int Add(DataGridView control, object[] value, object tag)
-        {
-            int n = -1;
-
-            if (control.InvokeRequired)
-            {
-                control.Invoke(new MethodInvoker(() => {
-                    n = control.Rows.Add(value);
-                    control.Rows[n].Tag = tag;
-                }));
-            }
-            else
-            {
-                n = control.Rows.Add(value);
-                control.Rows[n].Tag = tag;
-            }
-
-            return n;
-        }
-
-        public static TreeNode Add(TreeView control, string key, string text)
-        {
-            TreeNode rv = null;
-
-            if (control.InvokeRequired)
-            {
-                control.Invoke(new MethodInvoker(() => {
-                    rv = control.Nodes.Add(key, text);
-                }));
-            }
-            else
-            {
-                rv = control.Nodes.Add(key, text);
-            }
-
-            return rv;
-        }
-
-        public static TreeNode Add(TreeNode control, string key, string text)
-        {
-            TreeNode rv = null;
-
-            if (control.TreeView.InvokeRequired)
-            {
-                control.TreeView.Invoke(new MethodInvoker(() => {
-                    rv = control.Nodes.Add(key, text);
-                }));
-            }
-            else
-            {
-                rv = control.Nodes.Add(key, text);
-            }
-
-            return rv;
-        }
-
-        public static void AddLine(RichTextBox control, string text)
-        {
-            if (control.InvokeRequired)
-            {
-                control.Invoke(new MethodInvoker(() =>
-                {
-                    control.Text += text + Environment.NewLine;
-                }));
-            }
-            else
-            {
-                control.Text += text + Environment.NewLine;
-            }
-        }
-
-        public static void Clear(ListBox control)
-        {
-            if (control.InvokeRequired)
-            {
-                control.Invoke(new MethodInvoker(() => {
-                    control.Items.Clear();
-                }));
-            }
-            else
-            {
-                control.Items.Clear();
-            }
-        }
-
-        public static void Clear(FlowLayoutPanel control)
-        {
-            if (control.InvokeRequired)
-            {
-                control.Invoke(new MethodInvoker(() => {
-                    control.Controls.Clear();
-                }));
-            }
-            else
-            {
-                control.Controls.Clear();
-            }
-        }
-
-        public static void Clear(TreeView control)
-        {
-            if (control.InvokeRequired)
-            {
-                control.Invoke(new MethodInvoker(() => {
-                    control.Nodes.Clear();
-                }));
-            }
-            else
-            {
-                control.Nodes.Clear();
-            }
-        }
-
-        public static void Clear(Label control) => SetText(control, string.Empty);
-
-        public static void Clear(PictureBox control)
-        {
-            if (control.InvokeRequired)
-            {
-                control.Invoke(new MethodInvoker(() =>
-                {
-                    control.Image = null;
-                }));
-            }
-            else
-            {
-                control.Image = null;
-            }
-        }
-
-        public static void Clear(DataGridView control)
-        {
-            if (control.InvokeRequired)
-            {
-                control.Invoke(new MethodInvoker(() =>
-                {
-                    control.Rows.Clear();
-                }));
-            }
-            else
-            {
-                control.Rows.Clear();
-            }
-        }
-
-        public static List<T> FindChildControl<T>(Control control) where T : Control
-        {
-            List<T> rs = new List<T>();
-
-            foreach (Control item in control.Controls)
-            {
-                var ctr = item as T;
-                if (ctr == null)
-                {
-                    rs.AddRange(FindChildControl<T>(item));
-                }
-                else
-                {
-                    rs.Add(ctr);
-                }
-            }
-
-            return rs;
-        }
-
-        public static string GetText(Control control, bool doTrim = true)
-        {
-            string rv = string.Empty;
-
-            if (control.InvokeRequired)
-            {
-                control.Invoke(new MethodInvoker(() => {
-                    rv = (doTrim ? control.Text?.Trim() : control.Text);
-                }));
-            }
-            else
-            {
-                rv = (doTrim ? control.Text?.Trim() : control.Text);
-            }
-
-            return rv;
-        }
-
-        public static void SetChecked(ToolStripMenuItem control, bool value)
-        {
-            if (control.GetCurrentParent().InvokeRequired)
-            {
-                control.GetCurrentParent().Invoke(new MethodInvoker(() =>
-                {
-                    control.Checked = value;
-                }));
-            }
-            else
-            {
-                control.Checked = value;
-            }
-        }
-
-        public static void SetEnable(Control control, bool value)
-        {
-            if (control.InvokeRequired)
-            {
-                control.Invoke(new MethodInvoker(() =>
-                {
-                    control.Enabled = value;
-                }));
-            }
-            else
-            {
-                control.Enabled = value;
-            }
-        }
-
-        public static int GetValue(NumericUpDown sender)
-        {
-            int rv = 0;
-
-            if (sender.InvokeRequired)
-            {
-                sender.Invoke(new MethodInvoker(() => {
-                    rv = (int)sender.Value;
-                }));
-            }
-            else
-            {
-                rv = (int)sender.Value;
-            }
-
-            return rv;
-        }
-
-        public static string GetSelectedValue(ListBox sender)
-        {
-            string rv = string.Empty;
-
-            if (sender.InvokeRequired)
-            {
-                sender.Invoke(new MethodInvoker(() => {
-                    rv = (sender.SelectedItem == null) ? string.Empty : sender.SelectedItem.ToString();
-                }));
-            }
-            else
-            {
-                rv = (sender.SelectedItem == null) ? string.Empty : sender.SelectedItem.ToString();
-            }
-
-            return rv;
-        }
-
-        public static void SetHeight(Control control, int value)
-        {
-            if (control.InvokeRequired)
-            {
-                control.Invoke(new MethodInvoker(() => {
-                    control.Height = value;
-                }));
-            }
-            else
-            {
-                control.Height = value;
-            }
-        }
-
-        public static void SetLocation(Control control, Point value)
-        {
-            if (control.InvokeRequired)
-            {
-                control.Invoke(new MethodInvoker(() => {
-                    control.Location = value;
-                }));
-            }
-            else
-            {
-                control.Location = value;
-            }
-        }
-
-        public static void SetSize(Control control, int width, int height) => SetSize(control, new Size(width, height));
-
-        public static void SetSize(Control control, Size value)
-        {
-            if (control.InvokeRequired)
-            {
-                control.Invoke(new MethodInvoker(() => {
-                    control.Size = value;
-                }));
-            }
-            else
-            {
-                control.Size = value;
-            }
-        }
-
-        public static void SetText(Control control, string text)
-        {
-            if (control.InvokeRequired)
-            {
-                control.Invoke(new MethodInvoker(() =>
-                {
-                    control.Text = text;
-                }));
-            }
-            else
-            {
-                control.Text = text;
-            }
-        }
-
-        public static void SetTopMost(Form control, bool value)
-        {
-            if (control.InvokeRequired)
-            {
-                control.Invoke(new MethodInvoker(() => {
-                    control.TopMost = value;
-                }));
-            }
-            else
-            {
-                control.TopMost = value;
-            }
-        }
-
-        public static void SetValue(Control control, string value)
-        {
-            if (control.InvokeRequired)
-            {
-                control.Invoke(new MethodInvoker(() => {
-                    control.Text = value;
-                }));
-            }
-            else
-            {
-                control.Text = value;
-            }
-        }
-
-        public static void SetValue(PictureBox control, Image value)
-        {
-            if (control.InvokeRequired)
-            {
-                control.Invoke(new MethodInvoker(() =>
-                {
-                    control.Image = value;
-                }));
-            }
-            else
-            {
-                control.Image = value;
-            }
-        }
-
-        public static void SetVisible(Control control, bool value)
-        {
-            if (control.InvokeRequired)
-            {
-                control.Invoke(new MethodInvoker(() => {
-                    control.Visible = value;
-                }));
-            }
-            else
-            {
-                control.Visible = value;
-            }
-        }
-
-        public static void SetVisible(Form control, bool value)
-        {
-            if (control.InvokeRequired)
-            {
-                control.Invoke(new MethodInvoker(() => {
-                    if (value)
-                    {
-                        control.ShowInTaskbar = value;
-                        control.Opacity = 100;
-                        control.Visible = value;
-                    }
-                    else
-                    {
-                        control.Visible = value;
-                        control.ShowInTaskbar = value;
-                        control.Opacity = 0;
-                    }
-                }));
-            }
-            else
-            {
-                if (value)
-                {
-                    control.ShowInTaskbar = value;
-                    control.Opacity = 100;
-                    control.Visible = value;
-                }
-                else
-                {
-                    control.Visible = value;
-                    control.ShowInTaskbar = value;
-                    control.Opacity = 0;
-                }
-            }
-        }
-
-        public static void SetWidth(Control control, int value)
-        {
-            if (control.InvokeRequired)
-            {
-                control.Invoke(new MethodInvoker(() => {
-                    control.Width = value;
-                }));
-            }
-            else
-            {
-                control.Width = value;
-            }
-        }
-
-    }
-}
\ No newline at end of file
diff --git a/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/BorderlessForm.Designer.cs b/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/BorderlessForm.Designer.cs
deleted file mode 100644
index 04e71d5..0000000
--- a/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/BorderlessForm.Designer.cs
+++ /dev/null
@@ -1,191 +0,0 @@
-namespace RyzStudio.Windows.ThemedForms
-{
-  partial class BorderlessForm
-  {
-    /// <summary>
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary>
-    /// Clean up any resources being used.
-    /// </summary>
-    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-    protected override void Dispose(bool disposing)
-    {
-      if (disposing && (components != null))
-      {
-        components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    #region Windows Form Designer generated code
-
-    /// <summary>
-    /// Required method for Designer support - do not modify
-    /// the contents of this method with the code editor.
-    /// </summary>
-    private void InitializeComponent()
-    {
-            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(BorderlessForm));
-            this.label1 = new System.Windows.Forms.Label();
-            this.panel1 = new System.Windows.Forms.Panel();
-            this.area1 = new System.Windows.Forms.Panel();
-            this.pictureBox4 = new RyzStudio.Windows.Forms.ImageBox();
-            this.pictureBox2 = new RyzStudio.Windows.Forms.ImageBox();
-            this.pictureBox1 = new RyzStudio.Windows.Forms.ImageBox();
-            this.pictureBox3 = new RyzStudio.Windows.Forms.ImageBox();
-            ((System.ComponentModel.ISupportInitialize)(this.pictureBox4)).BeginInit();
-            ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit();
-            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
-            ((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).BeginInit();
-            this.SuspendLayout();
-            // 
-            // label1
-            // 
-            this.label1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
-            this.label1.BackColor = System.Drawing.Color.Transparent;
-            this.label1.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
-            this.label1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(241)))), ((int)(((byte)(241)))), ((int)(((byte)(241)))));
-            this.label1.Location = new System.Drawing.Point(1, 1);
-            this.label1.Name = "label1";
-            this.label1.Padding = new System.Windows.Forms.Padding(48, 0, 0, 0);
-            this.label1.Size = new System.Drawing.Size(454, 48);
-            this.label1.TabIndex = 148;
-            this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
-            this.label1.DoubleClick += new System.EventHandler(this.label1_DoubleClick);
-            this.label1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.label1_MouseClick);
-            this.label1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.label1_MouseDown);
-            this.label1.MouseMove += new System.Windows.Forms.MouseEventHandler(this.label1_MouseMove);
-            this.label1.MouseUp += new System.Windows.Forms.MouseEventHandler(this.label1_MouseUp);
-            // 
-            // panel1
-            // 
-            this.panel1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
-            this.panel1.BackColor = System.Drawing.Color.Transparent;
-            this.panel1.Cursor = System.Windows.Forms.Cursors.SizeNWSE;
-            this.panel1.Location = new System.Drawing.Point(594, 674);
-            this.panel1.Name = "panel1";
-            this.panel1.Size = new System.Drawing.Size(6, 6);
-            this.panel1.TabIndex = 150;
-            this.panel1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.panel1_MouseDown);
-            this.panel1.MouseMove += new System.Windows.Forms.MouseEventHandler(this.panel1_MouseMove);
-            this.panel1.MouseUp += new System.Windows.Forms.MouseEventHandler(this.panel1_MouseUp);
-            // 
-            // area1
-            // 
-            this.area1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
-            this.area1.BackColor = System.Drawing.Color.Transparent;
-            this.area1.Cursor = System.Windows.Forms.Cursors.SizeNS;
-            this.area1.Location = new System.Drawing.Point(1, 674);
-            this.area1.Name = "area1";
-            this.area1.Size = new System.Drawing.Size(592, 6);
-            this.area1.TabIndex = 152;
-            this.area1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.panel2_MouseDown);
-            this.area1.MouseMove += new System.Windows.Forms.MouseEventHandler(this.panel2_MouseMove);
-            this.area1.MouseUp += new System.Windows.Forms.MouseEventHandler(this.panel2_MouseUp);
-            // 
-            // pictureBox4
-            // 
-            this.pictureBox4.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
-            this.pictureBox4.BackColor = System.Drawing.Color.Transparent;
-            this.pictureBox4.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
-            this.pictureBox4.ErrorImage = null;
-            this.pictureBox4.HighlightImage = global::hiim.dply.Properties.Resources.form20_menu2;
-            this.pictureBox4.Image = global::hiim.dply.Properties.Resources.form20_menu;
-            this.pictureBox4.InitialImage = null;
-            this.pictureBox4.Location = new System.Drawing.Point(460, 11);
-            this.pictureBox4.Name = "pictureBox4";
-            this.pictureBox4.NormalImage = global::hiim.dply.Properties.Resources.form20_menu;
-            this.pictureBox4.Size = new System.Drawing.Size(28, 28);
-            this.pictureBox4.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
-            this.pictureBox4.TabIndex = 149;
-            this.pictureBox4.TabStop = false;
-            // 
-            // pictureBox2
-            // 
-            this.pictureBox2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
-            this.pictureBox2.BackColor = System.Drawing.Color.Transparent;
-            this.pictureBox2.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
-            this.pictureBox2.ErrorImage = null;
-            this.pictureBox2.HighlightImage = global::hiim.dply.Properties.Resources.form20_maximise2;
-            this.pictureBox2.Image = global::hiim.dply.Properties.Resources.form20_maximise;
-            this.pictureBox2.InitialImage = null;
-            this.pictureBox2.Location = new System.Drawing.Point(528, 11);
-            this.pictureBox2.Name = "pictureBox2";
-            this.pictureBox2.NormalImage = global::hiim.dply.Properties.Resources.form20_maximise;
-            this.pictureBox2.Size = new System.Drawing.Size(28, 28);
-            this.pictureBox2.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
-            this.pictureBox2.TabIndex = 147;
-            this.pictureBox2.TabStop = false;
-            // 
-            // pictureBox1
-            // 
-            this.pictureBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
-            this.pictureBox1.BackColor = System.Drawing.Color.Transparent;
-            this.pictureBox1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
-            this.pictureBox1.ErrorImage = null;
-            this.pictureBox1.HighlightImage = global::hiim.dply.Properties.Resources.form20_minimise2;
-            this.pictureBox1.Image = global::hiim.dply.Properties.Resources.form20_minimise;
-            this.pictureBox1.InitialImage = null;
-            this.pictureBox1.Location = new System.Drawing.Point(494, 11);
-            this.pictureBox1.Name = "pictureBox1";
-            this.pictureBox1.NormalImage = global::hiim.dply.Properties.Resources.form20_minimise;
-            this.pictureBox1.Size = new System.Drawing.Size(28, 28);
-            this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
-            this.pictureBox1.TabIndex = 146;
-            this.pictureBox1.TabStop = false;
-            // 
-            // pictureBox3
-            // 
-            this.pictureBox3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
-            this.pictureBox3.BackColor = System.Drawing.Color.Transparent;
-            this.pictureBox3.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
-            this.pictureBox3.ErrorImage = null;
-            this.pictureBox3.HighlightImage = global::hiim.dply.Properties.Resources.form20_close2;
-            this.pictureBox3.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox3.Image")));
-            this.pictureBox3.InitialImage = null;
-            this.pictureBox3.Location = new System.Drawing.Point(562, 11);
-            this.pictureBox3.Name = "pictureBox3";
-            this.pictureBox3.NormalImage = ((System.Drawing.Image)(resources.GetObject("pictureBox3.NormalImage")));
-            this.pictureBox3.Size = new System.Drawing.Size(28, 28);
-            this.pictureBox3.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
-            this.pictureBox3.TabIndex = 145;
-            this.pictureBox3.TabStop = false;
-            // 
-            // BorderlessForm
-            // 
-            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
-            this.BackColor = System.Drawing.Color.WhiteSmoke;
-            this.ClientSize = new System.Drawing.Size(600, 680);
-            this.Controls.Add(this.area1);
-            this.Controls.Add(this.panel1);
-            this.Controls.Add(this.pictureBox4);
-            this.Controls.Add(this.label1);
-            this.Controls.Add(this.pictureBox2);
-            this.Controls.Add(this.pictureBox1);
-            this.Controls.Add(this.pictureBox3);
-            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
-            this.Name = "BorderlessForm";
-            ((System.ComponentModel.ISupportInitialize)(this.pictureBox4)).EndInit();
-            ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit();
-            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
-            ((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).EndInit();
-            this.ResumeLayout(false);
-
-    }
-
-        #endregion
-
-        protected internal Forms.ImageBox pictureBox2;
-        protected internal Forms.ImageBox pictureBox1;
-        protected internal Forms.ImageBox pictureBox3;
-        protected internal System.Windows.Forms.Label label1;
-        protected internal Forms.ImageBox pictureBox4;
-        protected internal System.Windows.Forms.Panel panel1;
-        protected internal System.Windows.Forms.Panel area1;
-    }
-}
\ No newline at end of file
diff --git a/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/BorderlessForm.cs b/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/BorderlessForm.cs
deleted file mode 100644
index c5e4efe..0000000
--- a/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/BorderlessForm.cs
+++ /dev/null
@@ -1,410 +0,0 @@
-namespace RyzStudio.Windows.ThemedForms
-{
-    using System;
-    using System.ComponentModel;
-    using System.Drawing;
-    using System.Drawing.Design;
-    using System.Windows.Forms;
-    using Resources = hiim.dply.Properties.Resources;
-
-    public partial class BorderlessForm : System.Windows.Forms.Form
-    {
-        protected bool isBusy = false;
-
-        protected Color topFillColour = Color.FromArgb(15, 15, 15);
-        protected int topFillHeight = 48;
-        protected Color bottomFillColour = Color.FromArgb(15, 15, 15);
-        protected int bottomFillMargin = 19;
-        protected int bottomLeftMargin = 20;
-        protected int borderWidth = 1;
-        protected int menuFillWidth = 160;
-        protected Color menuFillColour = Color.FromArgb(179, 179, 179);
-
-        private bool windowDragging = false;
-        private Point windowOffset = new Point();
-        private Point windowSize = new Point();
-
-        public BorderlessForm() : base()
-        {
-            this.InitializeComponent();
-
-            this.BackColor = Color.FromArgb(247, 247, 247);
-            this.FormBorderStyle = FormBorderStyle.None;
-            this.Padding = new Padding(1);
-
-			this.topFillColour = Color.FromArgb(51, 51, 51);
-			this.topFillHeight = 48;
-			this.bottomFillColour = Color.FromArgb(0, 152, 167);
-			this.bottomFillMargin = 6;
-
-            pictureBox1.Click += pictureBox1_Click;
-            pictureBox2.Click += pictureBox2_Click;
-            pictureBox3.Click += pictureBox3_Click;
-            pictureBox4.Click += pictureBox4_Click;
-
-            updatePictureBox2Image();
-        }
-
-        protected override void OnClosing(CancelEventArgs e)
-        {
-            base.OnClosing(e);
-
-            if (this.IsBusy)
-            {
-                e.Cancel = true;
-            }
-        }
-
-        protected override void OnPaint(PaintEventArgs e)
-        {
-            base.OnPaint(e);
-
-            Graphics g = e.Graphics;
-
-            Rectangle areaTop = new Rectangle(this.DisplayRectangle.Left, this.Padding.Top, this.DisplayRectangle.Width, topFillHeight);
-            Rectangle areaBottom = new Rectangle(this.DisplayRectangle.Left, (this.DisplayRectangle.Height - bottomFillMargin + this.Padding.Top), this.DisplayRectangle.Width, bottomFillMargin);
-            Rectangle areaBorder = new Rectangle(this.ClientRectangle.X, this.ClientRectangle.Y, this.ClientRectangle.Width - borderWidth, this.ClientRectangle.Height - borderWidth);
-
-            Rectangle areaMenu = new Rectangle(this.DisplayRectangle.Left, this.DisplayRectangle.Top + topFillHeight, menuFillWidth, (this.DisplayRectangle.Height - bottomFillMargin - topFillHeight));
-
-            // draw header
-            if (topFillHeight > 0)
-            {
-                g.FillRectangle(new SolidBrush(topFillColour), areaTop);
-            }
-
-            // fill menu
-            g.FillRectangle(new SolidBrush(menuFillColour), areaMenu);
-
-            // draw footer
-            if (bottomFillMargin > 0)
-            {
-                g.FillRectangle(new SolidBrush(bottomFillColour), areaBottom);
-            }
-
-            // draw logo
-            if (this.TitleLogo != null)
-            {
-                g.DrawImageUnscaled(this.TitleLogo, this.Padding.Left, this.Padding.Top);
-            }
-
-            if (this.Banner != null)
-            {
-                g.DrawImageUnscaled(this.Banner, this.Padding.Left + bottomLeftMargin, (this.DisplayRectangle.Height - this.Banner.Height - bottomFillMargin + this.Padding.Top), (this.DisplayRectangle.Width - (this.Padding.Left + this.Padding.Right)), this.Banner.Height);
-            }
-
-            g.DrawRectangle(new Pen(Color.Black, borderWidth), areaBorder);
-        }
-
-        protected override void OnResize(EventArgs e)
-        {
-            base.OnResize(e);
-
-            updatePictureBox2Image();
-
-            this.Invalidate();
-        }
-
-        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
-        public new Color BackColor { get => base.BackColor; set => base.BackColor = value; }
-
-        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
-        public new FormBorderStyle FormBorderStyle { get => base.FormBorderStyle; set => base.FormBorderStyle = value; }
-
-        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
-        public new Padding Padding { get => base.Padding; set => base.Padding = value; }
-
-        [Category("Appearance"), Browsable(true)]
-        public string Description
-        {
-            get
-            {
-                return label1.Text?.Replace("\n", "\\n");
-            }
-            set
-            {
-                label1.Text = value?.Replace("\\n", "\n");
-            }
-        }
-
-        [Category("Appearance"), Browsable(true)]
-        public Image TitleLogo { get; set; }
-
-        [Category("Appearance"), Browsable(true)]
-        public Image Banner { get; set; }
-
-        [Category("Appearance"), Browsable(true)]
-        public bool ShowMenuButton { get => pictureBox4.Visible; set => pictureBox4.Visible = value; }
-
-        protected virtual bool IsBusy { get => isBusy; set => isBusy = value; }
-
-        private void pictureBox4_Click(object sender, System.EventArgs e)
-        {
-            //this.WindowState = FormWindowState.Minimized;
-        }
-
-        private void pictureBox1_Click(object sender, System.EventArgs e)
-        {
-            MouseEventArgs mouseEvent = (MouseEventArgs)e;
-            if (mouseEvent != null)
-            {
-                if (mouseEvent.Button != MouseButtons.Left)
-                {
-                    return;
-                }
-            }
-
-            this.WindowState = FormWindowState.Minimized;
-        }
-
-        private void pictureBox2_Click(object sender, System.EventArgs e)
-        {
-            MouseEventArgs mouseEvent = (MouseEventArgs)e;
-            if (mouseEvent != null)
-            {
-                if (mouseEvent.Button != MouseButtons.Left)
-                {
-                    return;
-                }
-            }
-
-            if (this.WindowState == FormWindowState.Maximized)
-            {
-                this.WindowState = FormWindowState.Normal;
-                pictureBox2.NormalImage = Resources.form20_maximise;
-                pictureBox2.HighlightImage = Resources.form20_maximise2;
-            }
-            else
-            {
-                this.WindowState = FormWindowState.Maximized;
-                pictureBox2.NormalImage = Resources.form20_restore;
-                pictureBox2.HighlightImage = Resources.form20_restore2;
-            }
-        }
-
-        private void pictureBox3_Click(object sender, System.EventArgs e)
-        {
-            MouseEventArgs mouseEvent = (MouseEventArgs)e;
-            if (mouseEvent != null)
-            {
-                if (mouseEvent.Button != MouseButtons.Left)
-                {
-                    return;
-                }
-            }
-
-            this.Close();
-        }
-
-        public void SetValue(Label sender, string value)
-        {
-            if (sender.InvokeRequired)
-            {
-                sender.Invoke(new MethodInvoker(() => { sender.Text = value; }));
-            }
-            else
-            {
-                sender.Text = value;
-            }
-        }
-
-        public void SetValue(GroupBox sender, string value)
-        {
-            if (sender.InvokeRequired)
-            {
-                sender.Invoke(new MethodInvoker(() => { sender.Text = value; }));
-            }
-            else
-            {
-                sender.Text = value;
-            }
-        }
-
-        public void AddValue(ListBox sender, string value)
-        {
-            if (sender.InvokeRequired)
-            {
-                sender.Invoke(new MethodInvoker(() => { sender.Items.Add(value); }));
-            }
-            else
-            {
-                sender.Items.Add(value);
-            }
-        }
-
-        public void AddControl(FlowLayoutPanel sender, Control value)
-        {
-            if (sender.InvokeRequired)
-            {
-                sender.Invoke(new MethodInvoker(() =>
-                {
-                    sender.Controls.Add(value);
-                }));
-            }
-            else
-            {
-                sender.Controls.Add(value);
-            }
-        }
-
-        public void ClearValues(ListBox sender)
-        {
-            if (sender.InvokeRequired)
-            {
-                sender.Invoke(new MethodInvoker(() => { sender.Items.Clear(); }));
-            }
-            else
-            {
-                sender.Items.Clear();
-            }
-        }
-
-        public string GetValue(ListBox sender)
-        {
-            string rv = string.Empty;
-
-            if (sender.InvokeRequired)
-            {
-                sender.Invoke(new MethodInvoker(() => { rv = (sender.SelectedItem == null) ? string.Empty : sender.SelectedItem.ToString(); }));
-            }
-            else
-            {
-                rv = (sender.SelectedItem == null) ? string.Empty : sender.SelectedItem.ToString();
-            }
-
-            return rv;
-        }
-
-        public string GetValue(TextBox sender)
-        {
-            string rv = string.Empty;
-
-            if (sender.InvokeRequired)
-            {
-                sender.Invoke(new MethodInvoker(() => { rv = sender.Text.Trim(); }));
-            }
-            else
-            {
-                rv = sender.Text.Trim();
-            }
-
-            return rv;
-        }
-
-        public int GetValue(NumericUpDown sender)
-        {
-            int rv = 0;
-
-            if (sender.InvokeRequired)
-            {
-                sender.Invoke(new MethodInvoker(() => { rv = (int)sender.Value; }));
-            }
-            else
-            {
-                rv = (int)sender.Value;
-            }
-
-            return rv;
-        }
-
-        protected void updatePictureBox2Image()
-        {
-            if (this.WindowState == FormWindowState.Maximized)
-            {
-                pictureBox2.NormalImage = Resources.form20_restore;
-                pictureBox2.HighlightImage = Resources.form20_restore2;
-            }
-            else
-            {
-                pictureBox2.NormalImage = Resources.form20_maximise;
-                pictureBox2.HighlightImage = Resources.form20_maximise2;
-            }
-        }
-
-        private void label1_MouseDown(object sender, MouseEventArgs e)
-        {
-            if (e.Button != MouseButtons.Left)
-            {
-                return;
-            }
-
-            windowDragging = true;
-            windowOffset = e.Location;
-        }
-
-        private void label1_MouseUp(object sender, MouseEventArgs e)
-        {
-            windowDragging = false;
-        }
-
-        private void label1_MouseMove(object sender, MouseEventArgs e)
-        {
-            if (windowDragging)
-            {
-                Point currentScreenPos = PointToScreen(e.Location);
-                Location = new Point(currentScreenPos.X - windowOffset.X, currentScreenPos.Y - windowOffset.Y);
-            }
-        }
-
-        private void label1_DoubleClick(object sender, EventArgs e) => pictureBox2_Click(sender, e);
-
-        private void label1_MouseClick(object sender, MouseEventArgs e)
-        {
-            if (e.Button == MouseButtons.Middle)
-            {
-                this.TopMost = !this.TopMost;
-            }
-        }
-
-        private void panel1_MouseDown(object sender, MouseEventArgs e)
-        {
-            if (e.Button != MouseButtons.Left)
-            {
-                return;
-            }
-
-            windowDragging = true;
-            windowOffset = e.Location;
-            windowSize = new Point(this.Width, this.Height);
-        }
-
-        private void panel1_MouseUp(object sender, MouseEventArgs e)
-        {
-            windowDragging = false;
-        }
-
-        private void panel1_MouseMove(object sender, MouseEventArgs e)
-        {
-            if (windowDragging)
-            {
-                this.Size = new Size(e.X - windowOffset.X + this.Width, e.Y - windowOffset.Y + this.Height);
-            }
-        }
-
-        private void panel2_MouseDown(object sender, MouseEventArgs e)
-        {
-            if (e.Button != MouseButtons.Left)
-            {
-                return;
-            }
-
-            windowDragging = true;
-            windowOffset = e.Location;
-            windowSize = new Point(this.Width, this.Height);
-        }
-
-        private void panel2_MouseUp(object sender, MouseEventArgs e)
-        {
-            windowDragging = false;
-        }
-
-        private void panel2_MouseMove(object sender, MouseEventArgs e)
-        {
-            if (windowDragging)
-            {
-                this.Size = new Size(windowSize.X, e.Y - windowOffset.Y + this.Height);
-            }
-        }
-
-    }
-}
\ No newline at end of file
diff --git a/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/BorderlessForm.resx b/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/BorderlessForm.resx
deleted file mode 100644
index db173e1..0000000
--- a/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/BorderlessForm.resx
+++ /dev/null
@@ -1,158 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!-- 
-    Microsoft ResX Schema 
-    
-    Version 2.0
-    
-    The primary goals of this format is to allow a simple XML format 
-    that is mostly human readable. The generation and parsing of the 
-    various data types are done through the TypeConverter classes 
-    associated with the data types.
-    
-    Example:
-    
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-                
-    There are any number of "resheader" rows that contain simple 
-    name/value pairs.
-    
-    Each data row contains a name, and value. The row also contains a 
-    type or mimetype. Type corresponds to a .NET class that support 
-    text/value conversion through the TypeConverter architecture. 
-    Classes that don't support this are serialized and stored with the 
-    mimetype set.
-    
-    The mimetype is used for serialized objects, and tells the 
-    ResXResourceReader how to depersist the object. This is currently not 
-    extensible. For a given mimetype the value must be set accordingly:
-    
-    Note - application/x-microsoft.net.object.binary.base64 is the format 
-    that the ResXResourceWriter will generate, however the reader can 
-    read any of the formats listed below.
-    
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-    
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array 
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <metadata name="label1.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>True</value>
-  </metadata>
-  <metadata name="pictureBox4.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>True</value>
-  </metadata>
-  <metadata name="pictureBox2.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>True</value>
-  </metadata>
-  <metadata name="pictureBox1.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>True</value>
-  </metadata>
-  <metadata name="pictureBox3.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>True</value>
-  </metadata>
-  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-  <data name="pictureBox3.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-    <value>
-        iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
-        xAAADsQBlSsOGwAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAADnSURBVDhP1ZVB
-        DoIwEEW7whNo9Cri/QCv5Y4YEoTWxK71Gvqn+W2AgEkbNvxkYPgzfWkpKcpau9NaX/u+/yC+iSFjK3Ay
-        RdhcU0qUChc3s67rzipRGJ8T+JYHR2ctWYGzXSC8Gzbs3rbtgZaSXDyp0QoKnJBMBK8WH5vVCUhCcvbX
-        bAuivwxsmmaP2TxYfyE3zJ/Ij2wLYu3/OxQoah4kYedgIt8TDTTGnFgeyfcsAodLxn205Dlo4IRkInjr
-        bgq8dT+bWG0L6A/WnLVo4b1eyHDHV8WHNaJwvwAkJeI9KMSGjC201tkP+AimzgF8cMEAAAAASUVORK5C
-        YII=
-</value>
-  </data>
-  <data name="pictureBox3.NormalImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-    <value>
-        iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
-        xAAADsQBlSsOGwAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAADnSURBVDhP1ZVB
-        DoIwEEW7whNo9Cri/QCv5Y4YEoTWxK71Gvqn+W2AgEkbNvxkYPgzfWkpKcpau9NaX/u+/yC+iSFjK3Ay
-        RdhcU0qUChc3s67rzipRGJ8T+JYHR2ctWYGzXSC8Gzbs3rbtgZaSXDyp0QoKnJBMBK8WH5vVCUhCcvbX
-        bAuivwxsmmaP2TxYfyE3zJ/Ij2wLYu3/OxQoah4kYedgIt8TDTTGnFgeyfcsAodLxn205Dlo4IRkInjr
-        bgq8dT+bWG0L6A/WnLVo4b1eyHDHV8WHNaJwvwAkJeI9KMSGjC201tkP+AimzgF8cMEAAAAASUVORK5C
-        YII=
-</value>
-  </data>
-</root>
\ No newline at end of file
diff --git a/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/BorderlessToolForm.Designer.cs b/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/BorderlessToolForm.Designer.cs
deleted file mode 100644
index 75f86a0..0000000
--- a/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/BorderlessToolForm.Designer.cs
+++ /dev/null
@@ -1,191 +0,0 @@
-namespace RyzStudio.Windows.ThemedForms
-{
-  partial class BorderlessToolForm
-    {
-    /// <summary>
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary>
-    /// Clean up any resources being used.
-    /// </summary>
-    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-    protected override void Dispose(bool disposing)
-    {
-      if (disposing && (components != null))
-      {
-        components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    #region Windows Form Designer generated code
-
-    /// <summary>
-    /// Required method for Designer support - do not modify
-    /// the contents of this method with the code editor.
-    /// </summary>
-    private void InitializeComponent()
-    {
-            this.lblDescription = new System.Windows.Forms.Label();
-            this.panel1 = new System.Windows.Forms.Panel();
-            this.imgbxMenu = new RyzStudio.Windows.Forms.ImageBox();
-            this.imgbxMaximise = new RyzStudio.Windows.Forms.ImageBox();
-            this.imgbxMinimise = new RyzStudio.Windows.Forms.ImageBox();
-            this.imgbxClose = new RyzStudio.Windows.Forms.ImageBox();
-            this.area1 = new System.Windows.Forms.Panel();
-            ((System.ComponentModel.ISupportInitialize)(this.imgbxMenu)).BeginInit();
-            ((System.ComponentModel.ISupportInitialize)(this.imgbxMaximise)).BeginInit();
-            ((System.ComponentModel.ISupportInitialize)(this.imgbxMinimise)).BeginInit();
-            ((System.ComponentModel.ISupportInitialize)(this.imgbxClose)).BeginInit();
-            this.SuspendLayout();
-            // 
-            // lblDescription
-            // 
-            this.lblDescription.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
-            this.lblDescription.BackColor = System.Drawing.Color.Transparent;
-            this.lblDescription.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
-            this.lblDescription.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(241)))), ((int)(((byte)(241)))), ((int)(((byte)(241)))));
-            this.lblDescription.Location = new System.Drawing.Point(1, 1);
-            this.lblDescription.Name = "lblDescription";
-            this.lblDescription.Padding = new System.Windows.Forms.Padding(10, 0, 0, 0);
-            this.lblDescription.Size = new System.Drawing.Size(194, 30);
-            this.lblDescription.TabIndex = 148;
-            this.lblDescription.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
-            this.lblDescription.DoubleClick += new System.EventHandler(this.label1_DoubleClick);
-            this.lblDescription.MouseClick += new System.Windows.Forms.MouseEventHandler(this.label1_MouseClick);
-            this.lblDescription.MouseDown += new System.Windows.Forms.MouseEventHandler(this.label1_MouseDown);
-            this.lblDescription.MouseMove += new System.Windows.Forms.MouseEventHandler(this.label1_MouseMove);
-            this.lblDescription.MouseUp += new System.Windows.Forms.MouseEventHandler(this.label1_MouseUp);
-            // 
-            // panel1
-            // 
-            this.panel1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
-            this.panel1.BackColor = System.Drawing.Color.Transparent;
-            this.panel1.Cursor = System.Windows.Forms.Cursors.SizeNWSE;
-            this.panel1.Location = new System.Drawing.Point(335, 595);
-            this.panel1.Name = "panel1";
-            this.panel1.Size = new System.Drawing.Size(5, 5);
-            this.panel1.TabIndex = 150;
-            this.panel1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.panel1_MouseDown);
-            this.panel1.MouseMove += new System.Windows.Forms.MouseEventHandler(this.panel1_MouseMove);
-            this.panel1.MouseUp += new System.Windows.Forms.MouseEventHandler(this.panel1_MouseUp);
-            // 
-            // imgbxMenu
-            // 
-            this.imgbxMenu.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
-            this.imgbxMenu.BackColor = System.Drawing.Color.Transparent;
-            this.imgbxMenu.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
-            this.imgbxMenu.ErrorImage = null;
-            this.imgbxMenu.HighlightImage = global::AppLauncher.Properties.Resources.form16_menu2;
-            this.imgbxMenu.Image = global::AppLauncher.Properties.Resources.form16_menu;
-            this.imgbxMenu.InitialImage = null;
-            this.imgbxMenu.Location = new System.Drawing.Point(224, 4);
-            this.imgbxMenu.Name = "imgbxMenu";
-            this.imgbxMenu.NormalImage = global::AppLauncher.Properties.Resources.form16_menu;
-            this.imgbxMenu.Size = new System.Drawing.Size(24, 24);
-            this.imgbxMenu.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
-            this.imgbxMenu.TabIndex = 149;
-            this.imgbxMenu.TabStop = false;
-            // 
-            // imgbxMaximise
-            // 
-            this.imgbxMaximise.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
-            this.imgbxMaximise.BackColor = System.Drawing.Color.Transparent;
-            this.imgbxMaximise.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
-            this.imgbxMaximise.ErrorImage = null;
-            this.imgbxMaximise.HighlightImage = global::AppLauncher.Properties.Resources.form16_maximise2;
-            this.imgbxMaximise.Image = global::AppLauncher.Properties.Resources.form16_maximise;
-            this.imgbxMaximise.InitialImage = null;
-            this.imgbxMaximise.Location = new System.Drawing.Point(280, 4);
-            this.imgbxMaximise.Name = "imgbxMaximise";
-            this.imgbxMaximise.NormalImage = global::AppLauncher.Properties.Resources.form16_maximise;
-            this.imgbxMaximise.Size = new System.Drawing.Size(24, 24);
-            this.imgbxMaximise.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
-            this.imgbxMaximise.TabIndex = 147;
-            this.imgbxMaximise.TabStop = false;
-            // 
-            // imgbxMinimise
-            // 
-            this.imgbxMinimise.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
-            this.imgbxMinimise.BackColor = System.Drawing.Color.Transparent;
-            this.imgbxMinimise.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
-            this.imgbxMinimise.ErrorImage = null;
-            this.imgbxMinimise.HighlightImage = global::AppLauncher.Properties.Resources.form16_minimise2;
-            this.imgbxMinimise.Image = global::AppLauncher.Properties.Resources.form16_minimise;
-            this.imgbxMinimise.InitialImage = null;
-            this.imgbxMinimise.Location = new System.Drawing.Point(252, 4);
-            this.imgbxMinimise.Name = "imgbxMinimise";
-            this.imgbxMinimise.NormalImage = global::AppLauncher.Properties.Resources.form16_minimise;
-            this.imgbxMinimise.Size = new System.Drawing.Size(24, 24);
-            this.imgbxMinimise.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
-            this.imgbxMinimise.TabIndex = 146;
-            this.imgbxMinimise.TabStop = false;
-            // 
-            // imgbxClose
-            // 
-            this.imgbxClose.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
-            this.imgbxClose.BackColor = System.Drawing.Color.Transparent;
-            this.imgbxClose.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
-            this.imgbxClose.ErrorImage = null;
-            this.imgbxClose.HighlightImage = global::AppLauncher.Properties.Resources.form16_close2;
-            this.imgbxClose.Image = global::AppLauncher.Properties.Resources.form16_close;
-            this.imgbxClose.InitialImage = null;
-            this.imgbxClose.Location = new System.Drawing.Point(308, 4);
-            this.imgbxClose.Name = "imgbxClose";
-            this.imgbxClose.NormalImage = global::AppLauncher.Properties.Resources.form16_close;
-            this.imgbxClose.Size = new System.Drawing.Size(24, 24);
-            this.imgbxClose.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
-            this.imgbxClose.TabIndex = 145;
-            this.imgbxClose.TabStop = false;
-            // 
-            // area1
-            // 
-            this.area1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
-            this.area1.BackColor = System.Drawing.Color.Transparent;
-            this.area1.Cursor = System.Windows.Forms.Cursors.SizeNS;
-            this.area1.Location = new System.Drawing.Point(0, 595);
-            this.area1.Name = "area1";
-            this.area1.Size = new System.Drawing.Size(334, 5);
-            this.area1.TabIndex = 151;
-            this.area1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.panel2_MouseDown);
-            this.area1.MouseMove += new System.Windows.Forms.MouseEventHandler(this.panel2_MouseMove);
-            this.area1.MouseUp += new System.Windows.Forms.MouseEventHandler(this.panel2_MouseUp);
-            // 
-            // BorderlessToolForm
-            // 
-            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
-            this.BackColor = System.Drawing.Color.WhiteSmoke;
-            this.ClientSize = new System.Drawing.Size(340, 600);
-            this.Controls.Add(this.area1);
-            this.Controls.Add(this.panel1);
-            this.Controls.Add(this.imgbxMenu);
-            this.Controls.Add(this.lblDescription);
-            this.Controls.Add(this.imgbxMaximise);
-            this.Controls.Add(this.imgbxMinimise);
-            this.Controls.Add(this.imgbxClose);
-            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
-            this.MinimumSize = new System.Drawing.Size(40, 0);
-            this.Name = "BorderlessToolForm";
-            ((System.ComponentModel.ISupportInitialize)(this.imgbxMenu)).EndInit();
-            ((System.ComponentModel.ISupportInitialize)(this.imgbxMaximise)).EndInit();
-            ((System.ComponentModel.ISupportInitialize)(this.imgbxMinimise)).EndInit();
-            ((System.ComponentModel.ISupportInitialize)(this.imgbxClose)).EndInit();
-            this.ResumeLayout(false);
-
-    }
-
-        #endregion
-
-        protected internal Forms.ImageBox imgbxMaximise;
-        protected internal Forms.ImageBox imgbxMinimise;
-        protected internal Forms.ImageBox imgbxClose;
-        protected internal System.Windows.Forms.Label lblDescription;
-        protected internal Forms.ImageBox imgbxMenu;
-        protected internal System.Windows.Forms.Panel panel1;
-        protected internal System.Windows.Forms.Panel area1;
-    }
-}
\ No newline at end of file
diff --git a/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/BorderlessToolForm.cs b/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/BorderlessToolForm.cs
deleted file mode 100644
index 3c17b0b..0000000
--- a/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/BorderlessToolForm.cs
+++ /dev/null
@@ -1,394 +0,0 @@
-namespace RyzStudio.Windows.ThemedForms
-{
-    using System;
-    using System.ComponentModel;
-    using System.Drawing;
-    using System.Drawing.Design;
-    using System.Windows.Forms;
-    using Resources = AppLauncher.Properties.Resources;
-
-    public partial class BorderlessToolForm : System.Windows.Forms.Form
-    {
-        protected bool isBusy = false;
-
-        protected Color topFillColour = Color.FromArgb(15, 15, 15);
-        protected int topFillHeight = 32;
-        protected int borderWidth = 1;
-
-        private bool windowDragging = false;
-        private Point windowOffset = new Point();
-        private Point windowSize = new Point();
-
-        public BorderlessToolForm() : base()
-        {
-            this.InitializeComponent();
-
-            this.BackColor = Color.FromArgb(246, 246, 246);
-            this.Padding = new Padding(1);
-
-			this.topFillColour = Color.FromArgb(51, 51, 51);
-			this.topFillHeight = 32;
-
-			this.BackColor = Color.FromArgb(179, 179, 179);
-            this.FormBorderStyle = FormBorderStyle.None;
-
-            imgbxMinimise.Click += pictureBox1_Click;
-            imgbxMaximise.Click += pictureBox2_Click;
-            imgbxClose.Click += pictureBox3_Click;
-            imgbxMenu.Click += pictureBox4_Click;
-
-            updatePictureBox2Image();
-        }
-
-        protected override void OnClosing(CancelEventArgs e)
-        {
-            base.OnClosing(e);
-
-            if (this.IsBusy)
-            {
-                e.Cancel = true;
-            }
-        }
-
-        protected override void OnPaint(PaintEventArgs e)
-        {
-            base.OnPaint(e);
-
-            Graphics g = e.Graphics;
-
-            Rectangle areaTop = new Rectangle(this.DisplayRectangle.Left, this.Padding.Top, this.DisplayRectangle.Width, topFillHeight);
-            Rectangle areaBorder = new Rectangle(this.ClientRectangle.X, this.ClientRectangle.Y, this.ClientRectangle.Width - borderWidth, this.ClientRectangle.Height - borderWidth);
-
-            // draw header
-            if (topFillHeight > 0)
-            {
-                g.FillRectangle(new SolidBrush(topFillColour), areaTop);
-            }
-
-            // draw logo
-            //if (this.TitleLogo != null)
-            //{
-            //    g.DrawImageUnscaled(this.TitleLogo, this.Padding.Left, this.Padding.Top);
-            //}
-
-            g.DrawRectangle(new Pen(Color.Black, borderWidth), areaBorder);
-        }
-
-        protected override void OnResize(EventArgs e)
-        {
-            base.OnResize(e);
-
-            updatePictureBox2Image();
-
-            this.Invalidate();
-        }
-
-        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
-        public new Color BackColor { get => base.BackColor; set => base.BackColor = value; }
-
-        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
-        public new FormBorderStyle FormBorderStyle { get => base.FormBorderStyle; set => base.FormBorderStyle = value; }
-
-        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
-        public new Padding Padding { get => base.Padding; set => base.Padding = value; }
-
-        [Category("Appearance"), Browsable(true)]
-        public string Description
-        {
-            get
-            {
-                return lblDescription.Text?.Replace("\n", "\\n");
-            }
-            set
-            {
-                lblDescription.Text = value?.Replace("\\n", "\n");
-            }
-        }
-
-        //[Category("Appearance"), Browsable(true)]
-        //public Image TitleLogo { get; set; }
-
-        [Category("Appearance"), Browsable(true)]
-        public Image Banner { get; set; }
-
-        [Category("Appearance"), Browsable(true)]
-        public bool ShowMenuButton { get => imgbxMenu.Visible; set => imgbxMenu.Visible = value; }
-
-        [Category("Appearance"), Browsable(true)]
-        public bool ShowMinimiseButton { get => imgbxMinimise.Visible; set => imgbxMinimise.Visible = value; }
-
-        [Category("Appearance"), Browsable(true)]
-        public bool ShowMaximiseButton { get => imgbxMaximise.Visible; set => imgbxMaximise.Visible = value; }
-
-        protected virtual bool IsBusy { get => isBusy; set => isBusy = value; }
-
-        private void pictureBox4_Click(object sender, System.EventArgs e)
-        {
-            //this.WindowState = FormWindowState.Minimized;
-        }
-
-        private void pictureBox1_Click(object sender, System.EventArgs e)
-        {
-            MouseEventArgs mouseEvent = (MouseEventArgs)e;
-            if (mouseEvent != null)
-            {
-                if (mouseEvent.Button != MouseButtons.Left)
-                {
-                    return;
-                }
-            }
-
-            this.WindowState = FormWindowState.Minimized;
-        }
-
-        private void pictureBox2_Click(object sender, System.EventArgs e)
-        {
-            MouseEventArgs mouseEvent = (MouseEventArgs)e;
-            if (mouseEvent != null)
-            {
-                if (mouseEvent.Button != MouseButtons.Left)
-                {
-                    return;
-                }
-            }
-
-            if (this.WindowState == FormWindowState.Maximized)
-            {
-                this.WindowState = FormWindowState.Normal;
-                imgbxMaximise.NormalImage = Resources.form16_maximise;
-                imgbxMaximise.HighlightImage = Resources.form16_maximise2;
-            }
-            else
-            {
-                this.WindowState = FormWindowState.Maximized;
-                imgbxMaximise.NormalImage = Resources.form16_restore;
-                imgbxMaximise.HighlightImage = Resources.form16_restore2;
-            }
-        }
-
-        private void pictureBox3_Click(object sender, System.EventArgs e)
-        {
-            MouseEventArgs mouseEvent = (MouseEventArgs)e;
-            if (mouseEvent != null)
-            {
-                if (mouseEvent.Button != MouseButtons.Left)
-                {
-                    return;
-                }
-            }
-
-            this.Close();
-        }
-
-        public void SetValue(Label sender, string value)
-        {
-            if (sender.InvokeRequired)
-            {
-                sender.Invoke(new MethodInvoker(() => { sender.Text = value; }));
-            }
-            else
-            {
-                sender.Text = value;
-            }
-        }
-
-        public void SetValue(GroupBox sender, string value)
-        {
-            if (sender.InvokeRequired)
-            {
-                sender.Invoke(new MethodInvoker(() => { sender.Text = value; }));
-            }
-            else
-            {
-                sender.Text = value;
-            }
-        }
-
-        public void AddValue(ListBox sender, string value)
-        {
-            if (sender.InvokeRequired)
-            {
-                sender.Invoke(new MethodInvoker(() => { sender.Items.Add(value); }));
-            }
-            else
-            {
-                sender.Items.Add(value);
-            }
-        }
-
-        public void AddControl(FlowLayoutPanel sender, Control value)
-        {
-            if (sender.InvokeRequired)
-            {
-                sender.Invoke(new MethodInvoker(() =>
-                {
-                    sender.Controls.Add(value);
-                }));
-            }
-            else
-            {
-                sender.Controls.Add(value);
-            }
-        }
-
-        public void ClearValues(ListBox sender)
-        {
-            if (sender.InvokeRequired)
-            {
-                sender.Invoke(new MethodInvoker(() => { sender.Items.Clear(); }));
-            }
-            else
-            {
-                sender.Items.Clear();
-            }
-        }
-
-        public string GetValue(ListBox sender)
-        {
-            string rv = string.Empty;
-
-            if (sender.InvokeRequired)
-            {
-                sender.Invoke(new MethodInvoker(() => { rv = (sender.SelectedItem == null) ? string.Empty : sender.SelectedItem.ToString(); }));
-            }
-            else
-            {
-                rv = (sender.SelectedItem == null) ? string.Empty : sender.SelectedItem.ToString();
-            }
-
-            return rv;
-        }
-
-        public string GetValue(TTextBox sender)
-        {
-            string rv = string.Empty;
-
-            if (sender.InvokeRequired)
-            {
-                sender.Invoke(new MethodInvoker(() => { rv = sender.Text.Trim(); }));
-            }
-            else
-            {
-                rv = sender.Text.Trim();
-            }
-
-            return rv;
-        }
-
-        public int GetValue(NumericUpDown sender)
-        {
-            int rv = 0;
-
-            if (sender.InvokeRequired)
-            {
-                sender.Invoke(new MethodInvoker(() => { rv = (int)sender.Value; }));
-            }
-            else
-            {
-                rv = (int)sender.Value;
-            }
-
-            return rv;
-        }
-
-        protected void updatePictureBox2Image()
-        {
-            if (this.WindowState == FormWindowState.Maximized)
-            {
-                imgbxMaximise.NormalImage = Resources.form16_restore;
-                imgbxMaximise.HighlightImage = Resources.form16_restore2;
-            }
-            else
-            {
-                imgbxMaximise.NormalImage = Resources.form16_maximise;
-                imgbxMaximise.HighlightImage = Resources.form16_maximise2;
-            }
-        }
-
-        private void label1_MouseDown(object sender, MouseEventArgs e)
-        {
-            if (e.Button != MouseButtons.Left)
-            {
-                return;
-            }
-
-            windowDragging = true;
-            windowOffset = e.Location;
-        }
-
-        private void label1_MouseUp(object sender, MouseEventArgs e)
-        {
-            windowDragging = false;
-        }
-
-        private void label1_MouseMove(object sender, MouseEventArgs e)
-        {
-            if (windowDragging)
-            {
-                Point currentScreenPos = PointToScreen(e.Location);
-                Location = new Point(currentScreenPos.X - windowOffset.X, currentScreenPos.Y - windowOffset.Y);
-            }
-        }
-
-        private void label1_DoubleClick(object sender, EventArgs e) => pictureBox2_Click(sender, e);
-
-        private void label1_MouseClick(object sender, MouseEventArgs e)
-        {
-            if (e.Button == MouseButtons.Middle)
-            {
-                this.TopMost = !this.TopMost;
-            }
-        }
-
-        private void panel1_MouseDown(object sender, MouseEventArgs e)
-        {
-            if (e.Button != MouseButtons.Left)
-            {
-                return;
-            }
-
-            windowDragging = true;
-            windowOffset = e.Location;
-            windowSize = new Point(this.Width, this.Height);
-        }
-
-        private void panel1_MouseUp(object sender, MouseEventArgs e)
-        {
-            windowDragging = false;
-        }
-
-        private void panel1_MouseMove(object sender, MouseEventArgs e)
-        {
-            if (windowDragging)
-            {
-                this.Size = new Size(e.X - windowOffset.X + this.Width, e.Y - windowOffset.Y + this.Height);
-            }
-        }
-
-        private void panel2_MouseDown(object sender, MouseEventArgs e)
-        {
-            if (e.Button != MouseButtons.Left)
-            {
-                return;
-            }
-
-            windowDragging = true;
-            windowOffset = e.Location;
-            windowSize = new Point(this.Width, this.Height);
-        }
-
-        private void panel2_MouseUp(object sender, MouseEventArgs e)
-        {
-            windowDragging = false;
-
-        }
-
-        private void panel2_MouseMove(object sender, MouseEventArgs e)
-        {
-            if (windowDragging)
-            {
-                this.Size = new Size(windowSize.X, e.Y - windowOffset.Y + this.Height);
-            }
-        }
-    }
-}
\ No newline at end of file
diff --git a/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/BorderlessToolForm.resx b/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/BorderlessToolForm.resx
deleted file mode 100644
index 8c98a25..0000000
--- a/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/BorderlessToolForm.resx
+++ /dev/null
@@ -1,138 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!-- 
-    Microsoft ResX Schema 
-    
-    Version 2.0
-    
-    The primary goals of this format is to allow a simple XML format 
-    that is mostly human readable. The generation and parsing of the 
-    various data types are done through the TypeConverter classes 
-    associated with the data types.
-    
-    Example:
-    
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-                
-    There are any number of "resheader" rows that contain simple 
-    name/value pairs.
-    
-    Each data row contains a name, and value. The row also contains a 
-    type or mimetype. Type corresponds to a .NET class that support 
-    text/value conversion through the TypeConverter architecture. 
-    Classes that don't support this are serialized and stored with the 
-    mimetype set.
-    
-    The mimetype is used for serialized objects, and tells the 
-    ResXResourceReader how to depersist the object. This is currently not 
-    extensible. For a given mimetype the value must be set accordingly:
-    
-    Note - application/x-microsoft.net.object.binary.base64 is the format 
-    that the ResXResourceWriter will generate, however the reader can 
-    read any of the formats listed below.
-    
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-    
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array 
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <metadata name="lblDescription.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>True</value>
-  </metadata>
-  <metadata name="panel1.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>True</value>
-  </metadata>
-  <metadata name="imgbxMenu.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>True</value>
-  </metadata>
-  <metadata name="imgbxMaximise.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>True</value>
-  </metadata>
-  <metadata name="imgbxMinimise.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>True</value>
-  </metadata>
-  <metadata name="imgbxClose.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>True</value>
-  </metadata>
-</root>
\ No newline at end of file
diff --git a/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TButton.cs b/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TButton.cs
deleted file mode 100644
index 7bd7916..0000000
--- a/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TButton.cs
+++ /dev/null
@@ -1,140 +0,0 @@
-namespace RyzStudio.Windows.ThemedForms
-{
-    using System;
-    using System.ComponentModel;
-    using System.Drawing;
-
-    public partial class TButton : RyzStudio.Windows.ThemedForms.TUserControl
-	{
-        public class ButtonStyle
-        {
-            public Color BackColour { get; set; } = Color.Transparent;
-            public Color PenColour { get; set; } = Color.Transparent;
-            public Image ForeImage { get; set; } = null;
-        }
-
-        public enum ButtonState
-        {
-            Idle = 0,
-            Hover,
-            Down
-        }
-
-        protected ButtonState controlState = ButtonState.Idle;
-        protected bool isSelected = false;
-
-        public TButton() : base()
-        {
-            InitializeComponent();
-
-            label1.ImageAlign = ContentAlignment.MiddleCenter;
-
-            this.StyleDefault = new ButtonStyle() { BackColour = Color.White, PenColour = Color.Black, ForeImage = this.DefaultImage };
-            this.StyleDown = new ButtonStyle() { BackColour = Color.FromArgb(0, 183, 209), PenColour = Color.Black, ForeImage = this.DownImage };
-            this.StyleOver = new ButtonStyle() { BackColour = Color.FromArgb(108, 101, 196), PenColour = Color.White, ForeImage = this.OverImage };
-            this.StyleSelected = new ButtonStyle() { BackColour = Color.FromArgb(51, 51, 51), PenColour = Color.White, ForeImage = this.OverImage };
-
-            label1.Click += delegate { this.OnClick(null); };
-			label1.MouseEnter += delegate { this.VisualState = ButtonState.Hover; };
-			label1.MouseLeave += delegate { this.VisualState = ButtonState.Idle; };
-			label1.MouseDown += delegate { this.VisualState = ButtonState.Down; };
-			label1.MouseUp += delegate { this.VisualState = ButtonState.Idle; };
-		}
-
-        protected override void OnLoad(EventArgs e)
-        {
-            base.OnLoad(e);
-
-			this.VisualState = ButtonState.Idle;
-        }
-
-        protected ButtonState VisualState
-		{
-			get { return controlState; }
-			set
-			{
-				switch (value)
-				{
-					case ButtonState.Idle:
-						if (this.VisualState == ButtonState.Down)
-						{
-							updateButton(StyleOver);
-						}
-						else
-						{
-                            if (this.IsSelected)
-                            {
-                                updateButton(StyleSelected);
-                            }
-                            else
-                            {
-                                updateButton(StyleDefault);
-                            }
-                        }
-
-						break;
-					case ButtonState.Hover:
-						updateButton(StyleOver);
-						break;
-					case ButtonState.Down:
-						updateButton(StyleDown);
-						break;
-					default:
-                        if (this.IsSelected)
-                        {
-                            updateButton(StyleSelected);
-                        }
-                        else
-                        {
-                            updateButton(StyleDefault);
-                        }
-
-                        break;
-				}
-
-				controlState = value;
-			}
-		}
-
-		protected void updateButton(ButtonStyle style)
-		{
-			label1.ForeColor = style.PenColour;
-			label1.BackColor = style.BackColour;
-			label1.Image = style.ForeImage;
-        }
-
-        [Browsable(true)]
-		[Category("Appearance")]
-		public string LabelText { get => label1.Text; set => label1.Text = value; }
-
-		[Browsable(true)]
-		[Category("Appearance")]
-		public Image OverImage { get; set; } = null;
-
-		[Browsable(true)]
-		[Category("Appearance")]
-		public Image DownImage { get; set; } = null;
-
-		[Browsable(true)]
-		[Category("Appearance")]
-		public Image DefaultImage { get; set; } = null;
-
-        public bool IsSelected
-        {
-            get => isSelected;
-            set
-            {
-                isSelected = value;
-
-                this.VisualState = this.VisualState;
-            }
-        }
-
-        protected ButtonStyle StyleOver { get; set; } = new ButtonStyle();
-        protected ButtonStyle StyleDown { get; set; } = new ButtonStyle();
-        protected ButtonStyle StyleDefault { get; set; } = new ButtonStyle();
-        protected ButtonStyle StyleSelected { get; set; } = new ButtonStyle();
-
-        public void PerformClick() => this.OnClick(null);
-	}
-}
\ No newline at end of file
diff --git a/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TButton.designer.cs b/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TButton.designer.cs
deleted file mode 100644
index 5bf79d6..0000000
--- a/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TButton.designer.cs
+++ /dev/null
@@ -1,61 +0,0 @@
-namespace RyzStudio.Windows.ThemedForms
-{
-  partial class TButton
-  {
-    /// <summary> 
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary> 
-    /// Clean up any resources being used.
-    /// </summary>
-    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-    protected override void Dispose(bool disposing)
-    {
-      if (disposing && (components != null))
-      {
-        components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    #region Component Designer generated code
-
-    /// <summary> 
-    /// Required method for Designer support - do not modify 
-    /// the contents of this method with the code editor.
-    /// </summary>
-    private void InitializeComponent()
-    {
-            this.label1 = new System.Windows.Forms.Label();
-            this.SuspendLayout();
-            // 
-            // label1
-            // 
-            this.label1.Dock = System.Windows.Forms.DockStyle.Fill;
-            this.label1.Location = new System.Drawing.Point(4, 4);
-            this.label1.Margin = new System.Windows.Forms.Padding(0);
-            this.label1.Name = "label1";
-            this.label1.Size = new System.Drawing.Size(121, 25);
-            this.label1.TabIndex = 0;
-            this.label1.Text = "label1";
-            this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
-            // 
-            // Button
-            // 
-            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-            this.Controls.Add(this.label1);
-            this.Name = "Button";
-            this.Padding = new System.Windows.Forms.Padding(4, 4, 3, 3);
-            this.Size = new System.Drawing.Size(128, 32);
-            this.ResumeLayout(false);
-
-    }
-
-		#endregion
-
-		private System.Windows.Forms.Label label1;
-	}
-}
diff --git a/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TButton.resx b/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TButton.resx
deleted file mode 100644
index 1af7de1..0000000
--- a/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TButton.resx
+++ /dev/null
@@ -1,120 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!-- 
-    Microsoft ResX Schema 
-    
-    Version 2.0
-    
-    The primary goals of this format is to allow a simple XML format 
-    that is mostly human readable. The generation and parsing of the 
-    various data types are done through the TypeConverter classes 
-    associated with the data types.
-    
-    Example:
-    
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-                
-    There are any number of "resheader" rows that contain simple 
-    name/value pairs.
-    
-    Each data row contains a name, and value. The row also contains a 
-    type or mimetype. Type corresponds to a .NET class that support 
-    text/value conversion through the TypeConverter architecture. 
-    Classes that don't support this are serialized and stored with the 
-    mimetype set.
-    
-    The mimetype is used for serialized objects, and tells the 
-    ResXResourceReader how to depersist the object. This is currently not 
-    extensible. For a given mimetype the value must be set accordingly:
-    
-    Note - application/x-microsoft.net.object.binary.base64 is the format 
-    that the ResXResourceWriter will generate, however the reader can 
-    read any of the formats listed below.
-    
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-    
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array 
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-</root>
\ No newline at end of file
diff --git a/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TButtonTextBox.cs b/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TButtonTextBox.cs
deleted file mode 100644
index dbe7d77..0000000
--- a/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TButtonTextBox.cs
+++ /dev/null
@@ -1,127 +0,0 @@
-namespace RyzStudio.Windows.ThemedForms
-{
-    using RyzStudio.Drawing;
-    using System;
-	using System.ComponentModel;
-	using System.Drawing;
-    using System.Windows.Forms;
-
-    public partial class TButtonTextBox : RyzStudio.Windows.ThemedForms.TUserControl
-	{
-        protected readonly Padding textboxPadding = new Padding(6, 6, 6, 6);
-
-		public TButtonTextBox() : base()
-        {
-            InitializeComponent();
-
-            //this.Margin = new Padding(10, 6, 10, 6);
-            this.Margin = new Padding(10, 3, 3, 3);
-            this.Font = new Font(this.Font, FontStyle.Regular);
-
-            textBox1.Font = this.Font;
-            textBox1.Left = this.Margin.Left;
-            textBox1.PreviewKeyDown += textBox_PreviewKeyDown;
-
-            imageBox1.Click += imageBox1_Click;
-
-            OnResize(null);
-        }
-
-        protected override void OnResize(EventArgs e)
-        {
-            base.OnResize(e);
-
-            int b = (styleActive.BorderWidth + 1) + styleActive.BorderPadding;
-
-            this.Height = textBox1.Height + (b + textboxPadding.Top) + ((b - 1) + textboxPadding.Bottom);
-
-            imageBox1.Width = 18;
-            imageBox1.Height = textBox1.Height + textboxPadding.Top + textboxPadding.Bottom;
-            imageBox1.Left = this.Width - (this.Margin.Right + b + imageBox1.Width);
-
-            textBox1.Left = this.Margin.Left;
-            textBox1.Width = imageBox1.Left - textBox1.Left - 3;
-            textBox1.Top = (int)Math.Ceiling(decimal.Divide((this.Height - textBox1.Height), 2));
-        }
-
-        protected override void OnGotFocus(EventArgs e)
-        {
-            base.OnGotFocus(e);
-
-            textBox1.Focus();
-        }
-
-        protected void textBox_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
-        {
-            switch (e.KeyCode)
-            {
-                case Keys.Enter:
-                    if (this.SubmitButton != null)
-                    {
-                        this.SubmitButton.PerformClick();
-                    }
-
-                    break;
-                case Keys.Escape:
-                    close();
-                    break;
-                default: break;
-            }
-        }
-
-        protected virtual void imageBox1_Click(object sender, EventArgs e) => OnButtonClick?.Invoke(sender, e);
-
-        [Category("Action")]
-        [Browsable(true)]
-        public event EventHandler OnButtonClick;
-
-        [Browsable(true), EditorBrowsable(EditorBrowsableState.Advanced)]
-        [Category("Appearance")]
-        public Forms.TImageBox InnerImageBox { get => imageBox1; set => imageBox1 = value; }
-
-        [Browsable(true), EditorBrowsable(EditorBrowsableState.Advanced)]
-		[Category("Appearance")]
-		public System.Windows.Forms.TextBox InnerTextBox { get => textBox1; set => textBox1 = value; }
-
-        [Category("Appearance"), Browsable(true)]
-        public Image NormalImage { get => imageBox1.ImageNormal; set => imageBox1.ImageNormal = value; }
-
-        [Category("Appearance"), Browsable(true)]
-        public Image HighlightImage { get => imageBox1.ImageHover; set => imageBox1.ImageHover = value; }
-
-        [Browsable(true), EditorBrowsable(EditorBrowsableState.Advanced)]
-        [Category("Appearance")]
-        public new string Text
-        {
-            get => textBox1.Text;
-            set
-            {
-                textBox1.Text = value;
-                textBox1.SelectionStart = textBox1.Text.Length;
-            }
-        }
-
-        [Browsable(true), EditorBrowsable(EditorBrowsableState.Advanced)]
-        [Category("Appearance")]
-        public bool UseSystemPasswordChar { get => textBox1.UseSystemPasswordChar; set => textBox1.UseSystemPasswordChar = value; }
-
-        [Browsable(true), EditorBrowsable(EditorBrowsableState.Advanced)]
-        [Category("Appearance")]
-        public TButton SubmitButton { get; set; } = null;
-
-        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
-        public new Padding Margin { get => base.Margin; set => base.Margin = value; }
-
-        protected override void updateBackground(Graphics g, ThemeStyle style)
-        {
-            int b = (styleActive.BorderWidth + 1) + styleActive.BorderPadding;
-
-            this.Padding = new Padding((b + textboxPadding.Left), (b + textboxPadding.Top), ((b - 1) + textboxPadding.Right), ((b - 1) + textboxPadding.Bottom));
-
-            Rectangoid area = new Rectangoid(this.ClientRectangle, style.BorderRadius, style.BorderWidth);
-            g.FillPath(new SolidBrush(style.BackColour), area.ToGraphicsPath());
-            g.DrawPath(new Pen(new SolidBrush(style.BorderColour), style.BorderWidth), area.ToGraphicsPath());
-        }
-
-    }
-}
\ No newline at end of file
diff --git a/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TButtonTextBox.designer.cs b/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TButtonTextBox.designer.cs
deleted file mode 100644
index 6a37b71..0000000
--- a/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TButtonTextBox.designer.cs
+++ /dev/null
@@ -1,81 +0,0 @@
-namespace RyzStudio.Windows.ThemedForms
-{
-    partial class TButtonTextBox
-    {
-        /// <summary>
-        /// Required designer variable.
-        /// </summary>
-        private System.ComponentModel.IContainer components = null;
-
-        /// <summary>
-        /// Clean up any resources being used.
-        /// </summary>
-        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-        protected override void Dispose(bool disposing)
-        {
-            if (disposing && (components != null))
-            {
-                components.Dispose();
-            }
-            base.Dispose(disposing);
-        }
-
-        #region Component Designer generated code
-
-        /// <summary>
-        /// Required method for Designer support - do not modify
-        /// the contents of this method with the code editor.
-        /// </summary>
-        private void InitializeComponent()
-        {
-            this.textBox1 = new System.Windows.Forms.TextBox();
-            this.imageBox1 = new RyzStudio.Windows.Forms.TImageBox();
-            ((System.ComponentModel.ISupportInitialize)(this.imageBox1)).BeginInit();
-            this.SuspendLayout();
-            //
-            // textBox1
-            //
-            this.textBox1.BackColor = System.Drawing.SystemColors.Window;
-            this.textBox1.BorderStyle = System.Windows.Forms.BorderStyle.None;
-            this.textBox1.HideSelection = false;
-            this.textBox1.Location = new System.Drawing.Point(7, 7);
-            this.textBox1.Name = "textBox1";
-            this.textBox1.Size = new System.Drawing.Size(68, 13);
-            this.textBox1.TabIndex = 0;
-            //
-            // imageBox1
-            //
-            this.imageBox1.BackColor = System.Drawing.Color.Transparent;
-            this.imageBox1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
-            this.imageBox1.ErrorImage = null;
-            this.imageBox1.ImageHover = null;
-            this.imageBox1.Image = null;
-            this.imageBox1.InitialImage = null;
-            this.imageBox1.Location = new System.Drawing.Point(107, 4);
-            this.imageBox1.Name = "imageBox1";
-            this.imageBox1.ImageNormal = null;
-            this.imageBox1.Size = new System.Drawing.Size(18, 25);
-            this.imageBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
-            this.imageBox1.TabIndex = 1;
-            this.imageBox1.TabStop = false;
-            //
-            // TextBox2
-            //
-            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
-            this.Controls.Add(this.imageBox1);
-            this.Controls.Add(this.textBox1);
-            this.Name = "TextBox2";
-            this.Padding = new System.Windows.Forms.Padding(4, 4, 3, 3);
-            this.Size = new System.Drawing.Size(128, 32);
-            ((System.ComponentModel.ISupportInitialize)(this.imageBox1)).EndInit();
-            this.ResumeLayout(false);
-            this.PerformLayout();
-
-        }
-
-        #endregion
-
-        private System.Windows.Forms.TextBox textBox1;
-        private Forms.TImageBox imageBox1;
-    }
-}
diff --git a/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TButtonTextBox.resx b/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TButtonTextBox.resx
deleted file mode 100644
index 1af7de1..0000000
--- a/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TButtonTextBox.resx
+++ /dev/null
@@ -1,120 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!-- 
-    Microsoft ResX Schema 
-    
-    Version 2.0
-    
-    The primary goals of this format is to allow a simple XML format 
-    that is mostly human readable. The generation and parsing of the 
-    various data types are done through the TypeConverter classes 
-    associated with the data types.
-    
-    Example:
-    
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-                
-    There are any number of "resheader" rows that contain simple 
-    name/value pairs.
-    
-    Each data row contains a name, and value. The row also contains a 
-    type or mimetype. Type corresponds to a .NET class that support 
-    text/value conversion through the TypeConverter architecture. 
-    Classes that don't support this are serialized and stored with the 
-    mimetype set.
-    
-    The mimetype is used for serialized objects, and tells the 
-    ResXResourceReader how to depersist the object. This is currently not 
-    extensible. For a given mimetype the value must be set accordingly:
-    
-    Note - application/x-microsoft.net.object.binary.base64 is the format 
-    that the ResXResourceWriter will generate, however the reader can 
-    read any of the formats listed below.
-    
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-    
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array 
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-</root>
\ No newline at end of file
diff --git a/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TDialogForm.Designer.cs b/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TDialogForm.Designer.cs
deleted file mode 100644
index 5ee7579..0000000
--- a/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TDialogForm.Designer.cs
+++ /dev/null
@@ -1,96 +0,0 @@
-namespace RyzStudio.Windows.ThemedForms
-{
-  partial class TDialogForm
-    {
-    /// <summary>
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary>
-    /// Clean up any resources being used.
-    /// </summary>
-    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-    protected override void Dispose(bool disposing)
-    {
-      if (disposing && (components != null))
-      {
-        components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    #region Windows Form Designer generated code
-
-    /// <summary>
-    /// Required method for Designer support - do not modify
-    /// the contents of this method with the code editor.
-    /// </summary>
-    private void InitializeComponent()
-    {
-            this.panel1 = new System.Windows.Forms.Panel();
-            this.imgbxClose = new RyzStudio.Windows.Forms.TImageBox();
-            this.area1 = new System.Windows.Forms.Panel();
-            ((System.ComponentModel.ISupportInitialize)(this.imgbxClose)).BeginInit();
-            this.SuspendLayout();
-            // 
-            // panel1
-            // 
-            this.panel1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
-            this.panel1.BackColor = System.Drawing.Color.Transparent;
-            this.panel1.Cursor = System.Windows.Forms.Cursors.SizeNWSE;
-            this.panel1.Location = new System.Drawing.Point(335, 595);
-            this.panel1.Name = "panel1";
-            this.panel1.Size = new System.Drawing.Size(5, 5);
-            this.panel1.TabIndex = 150;
-            // 
-            // imgbxClose
-            // 
-            this.imgbxClose.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
-            this.imgbxClose.BackColor = System.Drawing.Color.Transparent;
-            this.imgbxClose.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
-            this.imgbxClose.ErrorImage = null;
-            this.imgbxClose.ImageHover = global::AppLauncher.Properties.Resources16.close2;
-            this.imgbxClose.Image = null;
-            this.imgbxClose.InitialImage = null;
-            this.imgbxClose.Location = new System.Drawing.Point(308, 4);
-            this.imgbxClose.Name = "imgbxClose";
-            this.imgbxClose.ImageNormal = global::AppLauncher.Properties.Resources16.close;
-            this.imgbxClose.Size = new System.Drawing.Size(24, 24);
-            this.imgbxClose.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
-            this.imgbxClose.TabIndex = 145;
-            this.imgbxClose.TabStop = false;
-            // 
-            // area1
-            // 
-            this.area1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
-            this.area1.BackColor = System.Drawing.Color.Transparent;
-            this.area1.Cursor = System.Windows.Forms.Cursors.SizeNS;
-            this.area1.Location = new System.Drawing.Point(0, 595);
-            this.area1.Name = "area1";
-            this.area1.Size = new System.Drawing.Size(334, 5);
-            this.area1.TabIndex = 151;
-            // 
-            // TDialogForm
-            // 
-            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
-            this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(248)))), ((int)(((byte)(249)))), ((int)(((byte)(250)))));
-            this.ClientSize = new System.Drawing.Size(340, 600);
-            this.Controls.Add(this.area1);
-            this.Controls.Add(this.panel1);
-            this.Controls.Add(this.imgbxClose);
-            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
-            this.MinimumSize = new System.Drawing.Size(40, 0);
-            this.Name = "TDialogForm";
-            ((System.ComponentModel.ISupportInitialize)(this.imgbxClose)).EndInit();
-            this.ResumeLayout(false);
-
-    }
-
-        #endregion
-        protected internal Forms.TImageBox imgbxClose;
-        protected internal System.Windows.Forms.Panel panel1;
-        protected internal System.Windows.Forms.Panel area1;
-    }
-}
\ No newline at end of file
diff --git a/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TDialogForm.cs b/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TDialogForm.cs
deleted file mode 100644
index d85c999..0000000
--- a/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TDialogForm.cs
+++ /dev/null
@@ -1,136 +0,0 @@
-namespace RyzStudio.Windows.ThemedForms
-{
-    using System;
-    using System.ComponentModel;
-    using System.Drawing;
-    using System.Windows.Forms;
-
-    public partial class TDialogForm : System.Windows.Forms.Form
-    {
-        protected readonly Color borderColour = Color.FromArgb(77, 84, 100);
-        protected readonly int borderWidth = 1;
-
-        protected readonly Color backColour = Color.FromArgb(254, 254, 254);
-
-        protected readonly Color titleBarColour = Color.FromArgb(152, 175, 206);
-        protected readonly Color titleBarForeColour = Color.White;
-        protected readonly Font titleBarFont = new Font("Segoe UI", 8.25F, FontStyle.Bold, GraphicsUnit.Point, 0);
-        protected readonly int titleBarHeight = 32;
-
-        private bool isDragging = false;
-        private Point startPosition = new Point();
-
-        protected bool isBusy = false;
-
-        public TDialogForm() : base()
-        {
-            this.InitializeComponent();
-
-            this.FormBorderStyle = FormBorderStyle.None;
-            this.ShowInTaskbar = false;
-            this.TopMost = true;
-
-            imgbxClose.Click += pictureBox3_Click;
-
-            this.BackColor = backColour;
-            this.Padding = new Padding(0);
-        }
-
-        protected override void OnClosing(CancelEventArgs e)
-        {
-            base.OnClosing(e);
-
-            if (this.IsBusy)
-            {
-                e.Cancel = true;
-            }
-        }
-
-        protected override void OnMouseDown(MouseEventArgs e)
-        {
-            base.OnMouseDown(e);
-
-            if (e.Button == MouseButtons.Left)
-            {
-                isDragging = true;
-                startPosition = e.Location;
-            }
-        }
-
-        protected override void OnMouseMove(MouseEventArgs e)
-        {
-            base.OnMouseMove(e);
-
-            if (isDragging)
-            {
-                int x = (this.Location.X + (e.Location.X - startPosition.X));
-                int y = (this.Location.Y + (e.Location.Y - startPosition.Y));
-
-                this.Location = new Point(x, y);
-            }
-        }
-
-        protected override void OnMouseUp(MouseEventArgs e)
-        {
-            base.OnMouseUp(e);
-
-            isDragging = false;
-        }
-
-        protected override void OnPaint(PaintEventArgs e)
-        {
-            base.OnPaint(e);
-
-            Graphics g = e.Graphics;
-            Rectangle area = new Rectangle(this.DisplayRectangle.X, this.DisplayRectangle.Y, (this.DisplayRectangle.Width - borderWidth), (this.DisplayRectangle.Height - borderWidth));
-
-            // border
-            g.DrawRectangle(new Pen(borderColour, borderWidth), area);
-            g.DrawLine(new Pen(borderColour, 1), this.DisplayRectangle.X, (titleBarHeight + 1), this.DisplayRectangle.Width, (titleBarHeight + 1));
-
-            area.Inflate((-1 * borderWidth), (-1 * borderWidth));
-
-            g.FillRectangle(new SolidBrush(titleBarColour), area.X, area.Y, (area.Width + area.X), titleBarHeight);
-
-            TextRenderer.DrawText(g, this.Title, titleBarFont, new Point(12, 11), titleBarForeColour);
-
-        }
-
-        protected override void OnResize(EventArgs e)
-        {
-            base.OnResize(e);
-
-            this.Invalidate();
-        }
-
-        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
-        public override Color BackColor { get => base.BackColor; set => base.BackColor = value; }
-
-        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
-        public new FormBorderStyle FormBorderStyle { get => base.FormBorderStyle; set => base.FormBorderStyle = value; }
-
-        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
-        public new Padding Padding { get => base.Padding; set => base.Padding = value; }
-
-        [Category("Appearance"), Browsable(true)]
-        public string Title { get; set; }
-
-        protected virtual bool IsBusy { get => isBusy; set => isBusy = value; }
-
-        private void pictureBox3_Click(object sender, System.EventArgs e)
-        {
-            MouseEventArgs mouseEvent = (MouseEventArgs)e;
-            if (mouseEvent != null)
-            {
-                if (mouseEvent.Button != MouseButtons.Left)
-                {
-                    return;
-                }
-            }
-
-            this.Close();
-        }
-
-
-    }
-}
\ No newline at end of file
diff --git a/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TDialogForm.resx b/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TDialogForm.resx
deleted file mode 100644
index 6e0c1de..0000000
--- a/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TDialogForm.resx
+++ /dev/null
@@ -1,126 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!-- 
-    Microsoft ResX Schema 
-    
-    Version 2.0
-    
-    The primary goals of this format is to allow a simple XML format 
-    that is mostly human readable. The generation and parsing of the 
-    various data types are done through the TypeConverter classes 
-    associated with the data types.
-    
-    Example:
-    
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-                
-    There are any number of "resheader" rows that contain simple 
-    name/value pairs.
-    
-    Each data row contains a name, and value. The row also contains a 
-    type or mimetype. Type corresponds to a .NET class that support 
-    text/value conversion through the TypeConverter architecture. 
-    Classes that don't support this are serialized and stored with the 
-    mimetype set.
-    
-    The mimetype is used for serialized objects, and tells the 
-    ResXResourceReader how to depersist the object. This is currently not 
-    extensible. For a given mimetype the value must be set accordingly:
-    
-    Note - application/x-microsoft.net.object.binary.base64 is the format 
-    that the ResXResourceWriter will generate, however the reader can 
-    read any of the formats listed below.
-    
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-    
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array 
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <metadata name="panel1.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>True</value>
-  </metadata>
-  <metadata name="imgbxClose.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>True</value>
-  </metadata>
-</root>
\ No newline at end of file
diff --git a/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TFolderTextBox.cs b/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TFolderTextBox.cs
deleted file mode 100644
index 0c2b9ae..0000000
--- a/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TFolderTextBox.cs
+++ /dev/null
@@ -1,42 +0,0 @@
-using System;
-using System.IO;
-using System.Windows.Forms;
-using Resources = AppLauncher.Properties.Resources16;
-
-namespace RyzStudio.Windows.ThemedForms
-{
-    public class TFolderTextBox : TButtonTextBox
-    {
-        public TFolderTextBox() : base()
-        {
-            this.NormalImage = Resources.folder;
-            this.HighlightImage = Resources.folder2;
-            this.Text = string.Empty;
-        }
-
-        public FolderBrowserDialog FolderDialog { get; set; } = null;
-
-        protected override void imageBox1_Click(object sender, EventArgs e)
-        {
-            if (this.FolderDialog == null)
-            {
-                this.FolderDialog = new FolderBrowserDialog();
-                this.FolderDialog.Description = "Choose a directory";
-            }
-
-            if (!string.IsNullOrWhiteSpace(this.Text))
-            {
-                if (Directory.Exists(this.Text))
-                {
-                    this.FolderDialog.SelectedPath = this.Text;
-                }
-            }
-
-            if (this.FolderDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
-            {
-                this.Text = this.FolderDialog.SelectedPath;
-            }
-        }
-
-    }
-}
diff --git a/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TListBox.cs b/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TListBox.cs
deleted file mode 100644
index ed785eb..0000000
--- a/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TListBox.cs
+++ /dev/null
@@ -1,232 +0,0 @@
-namespace RyzStudio.Windows.ThemedForms
-{
-    using RyzStudio.Drawing;
-    using System;
-	using System.ComponentModel;
-	using System.Drawing;
-    using System.Windows.Forms;
-
-    public partial class TListBox : RyzStudio.Windows.ThemedForms.TUserControl
-	{
-        protected readonly Padding textboxPadding = new Padding(6, 2, 4, 2);
-
-		public TListBox() : base()
-        {
-            InitializeComponent();
-
-            this.Font = new Font(this.Font, FontStyle.Regular);
-            this.Margin = new Padding(10, 4, 10, 4);
-
-            listBox1.Font = this.Font;
-            listBox1.BorderStyle = BorderStyle.None;
-        }
-
-        protected override void OnResize(EventArgs e)
-        {
-            base.OnResize(e);
-
-            //int b = (styleActive.BorderWidth + 1) + styleActive.BorderPadding;
-
-            //this.Height = comboBox1.Height + (b + textboxPadding.Top) + ((b - 1) + textboxPadding.Bottom);
-        }
-
-        protected override void OnGotFocus(EventArgs e)
-        {
-            base.OnGotFocus(e);
-
-            listBox1.Focus();
-        }
-
-        [Browsable(true), EditorBrowsable(EditorBrowsableState.Advanced)]
-        [Category("Appearance")]
-        public System.Windows.Forms.ListBox ListBox { get => listBox1; set => listBox1 = value; }
-
-        [Browsable(true), EditorBrowsable(EditorBrowsableState.Advanced)]
-        [Category("Appearance")]
-        public TButton SubmitButton { get; set; } = null;
-
-        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
-        public new Padding Margin { get => base.Margin; set => base.Margin = value; }
-
-        [Category("Action")]
-        [Browsable(true)]
-        public event EventHandler OnAdd;
-
-        [Category("Action")]
-        [Browsable(true)]
-        public event EventHandler OnEdit;
-
-        protected override void updateBackground(Graphics g, ThemeStyle style)
-        {
-            int b = (styleActive.BorderWidth + 1) + styleActive.BorderPadding;
-
-            this.Padding = new Padding((b + textboxPadding.Left), (b + textboxPadding.Top), ((b - 1) + textboxPadding.Right), ((b - 1) + textboxPadding.Bottom));
-
-            Rectangoid area = new Rectangoid(this.ClientRectangle, style.BorderRadius, style.BorderWidth);
-            g.FillPath(new SolidBrush(style.BackColour), area.ToGraphicsPath());
-            g.DrawPath(new Pen(new SolidBrush(style.BorderColour), style.BorderWidth), area.ToGraphicsPath());
-        }
-
-        /// <summary>
-        /// Add
-        /// </summary>
-        /// <param name="sender"></param>
-        /// <param name="e"></param>
-        private void imageBox1_MouseClick(object sender, MouseEventArgs e)
-        {
-            if (e.Button != MouseButtons.Left)
-            {
-                return;
-            }
-
-            this.OnAdd?.Invoke(sender, e);
-        }
-
-        /// <summary>
-        /// Edit
-        /// </summary>
-        /// <param name="sender"></param>
-        /// <param name="e"></param>
-        private void imageBox5_MouseClick(object sender, MouseEventArgs e)
-        {
-            if (e.Button != MouseButtons.Left)
-            {
-                return;
-            }
-
-            this.OnEdit?.Invoke(sender, e);
-        }
-
-        /// <summary>
-        /// Remove
-        /// </summary>
-        /// <param name="sender"></param>
-        /// <param name="e"></param>
-        private void imageBox2_MouseClick(object sender, MouseEventArgs e)
-        {
-            if (e.Button != MouseButtons.Left)
-            {
-                return;
-            }
-
-            if (listBox1.SelectedIndex < 0)
-            {
-                return;
-            }
-
-            int pos = listBox1.SelectedIndex;
-
-            listBox1.Items.RemoveAt(pos);
-
-            if (pos > (listBox1.Items.Count - 1))
-            {
-                pos = (listBox1.Items.Count - 1);
-            }
-
-            listBox1.SelectedIndex = pos;
-        }
-
-        /// <summary>
-        /// Move up
-        /// </summary>
-        /// <param name="sender"></param>
-        /// <param name="e"></param>
-        private void imageBox3_MouseClick(object sender, MouseEventArgs e)
-        {
-            if (e != null)
-            {
-                if (e.Button != MouseButtons.Left)
-                {
-                    return;
-                }
-            }
-
-            if (listBox1.SelectedIndex <= 0)
-            {
-                return;
-            }
-
-            if (listBox1.SelectedItem == null)
-            {
-                return;
-            }
-
-            object item = listBox1.SelectedItem;
-            int pos = listBox1.SelectedIndex;
-
-            listBox1.Items.RemoveAt(pos);
-            listBox1.Items.Insert((pos - 1), item);
-
-            listBox1.SelectedIndex = (pos - 1);
-        }
-
-        /// <summary>
-        /// Move down
-        /// </summary>
-        /// <param name="sender"></param>
-        /// <param name="e"></param>
-        private void imageBox4_MouseClick(object sender, MouseEventArgs e)
-        {
-            if (e != null)
-            {
-                if (e.Button != MouseButtons.Left)
-                {
-                    return;
-                }
-            }
-
-            if (listBox1.SelectedIndex >= (listBox1.Items.Count - 1))
-            {
-                return;
-            }
-
-            if (listBox1.SelectedItem == null)
-            {
-                return;
-            }
-
-            object item = listBox1.SelectedItem;
-            int pos = listBox1.SelectedIndex;
-
-            listBox1.Items.RemoveAt(pos);
-            listBox1.Items.Insert((pos + 1), item);
-
-            listBox1.SelectedIndex = (pos + 1);
-        }
-
-        private void listBox1_MouseDoubleClick(object sender, MouseEventArgs e) => imageBox5_MouseClick(sender, e);
-
-        private void listBox1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
-        {
-            switch (e.KeyCode)
-            {
-                case Keys.Enter:
-                    if (this.SubmitButton != null)
-                    {
-                        this.SubmitButton.PerformClick();
-                    }
-
-                    break;
-                case Keys.Escape:
-                    close();
-                    break;
-                case Keys.Up:
-                    if (e.Alt)
-                    {
-                        imageBox3_MouseClick(sender, null);
-                    }
-
-                    break;
-                case Keys.Down:
-                    if (e.Alt)
-                    {
-                        imageBox4_MouseClick(sender, null);
-                    }
-
-                    break;
-                default: break;
-            }
-        }
-
-    }
-}
\ No newline at end of file
diff --git a/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TListBox.designer.cs b/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TListBox.designer.cs
deleted file mode 100644
index 81bff0f..0000000
--- a/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TListBox.designer.cs
+++ /dev/null
@@ -1,182 +0,0 @@
-namespace RyzStudio.Windows.ThemedForms
-{
-    partial class TListBox
-    {
-        /// <summary>
-        /// Required designer variable.
-        /// </summary>
-        private System.ComponentModel.IContainer components = null;
-
-        /// <summary>
-        /// Clean up any resources being used.
-        /// </summary>
-        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-        protected override void Dispose(bool disposing)
-        {
-            if (disposing && (components != null))
-            {
-                components.Dispose();
-            }
-            base.Dispose(disposing);
-        }
-
-        #region Component Designer generated code
-
-        /// <summary>
-        /// Required method for Designer support - do not modify
-        /// the contents of this method with the code editor.
-        /// </summary>
-        private void InitializeComponent()
-        {
-            this.listBox1 = new System.Windows.Forms.ListBox();
-            this.imageBox5 = new RyzStudio.Windows.Forms.TImageBox();
-            this.imageBox4 = new RyzStudio.Windows.Forms.TImageBox();
-            this.imageBox3 = new RyzStudio.Windows.Forms.TImageBox();
-            this.imageBox2 = new RyzStudio.Windows.Forms.TImageBox();
-            this.imageBox1 = new RyzStudio.Windows.Forms.TImageBox();
-            ((System.ComponentModel.ISupportInitialize)(this.imageBox5)).BeginInit();
-            ((System.ComponentModel.ISupportInitialize)(this.imageBox4)).BeginInit();
-            ((System.ComponentModel.ISupportInitialize)(this.imageBox3)).BeginInit();
-            ((System.ComponentModel.ISupportInitialize)(this.imageBox2)).BeginInit();
-            ((System.ComponentModel.ISupportInitialize)(this.imageBox1)).BeginInit();
-            this.SuspendLayout();
-            // 
-            // listBox1
-            // 
-            this.listBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
-            | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
-            this.listBox1.FormattingEnabled = true;
-            this.listBox1.Location = new System.Drawing.Point(4, 4);
-            this.listBox1.Name = "listBox1";
-            this.listBox1.Size = new System.Drawing.Size(121, 82);
-            this.listBox1.TabIndex = 0;
-            this.listBox1.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.listBox1_MouseDoubleClick);
-            this.listBox1.PreviewKeyDown += new System.Windows.Forms.PreviewKeyDownEventHandler(this.listBox1_PreviewKeyDown);
-            // 
-            // imageBox5
-            // 
-            this.imageBox5.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
-            this.imageBox5.BackColor = System.Drawing.Color.Transparent;
-            this.imageBox5.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
-            this.imageBox5.ErrorImage = null;
-            this.imageBox5.ImageHover = global::AppLauncher.Properties.Resources16.edit2;
-            this.imageBox5.Image = global::AppLauncher.Properties.Resources16.edit;
-            this.imageBox5.InitialImage = null;
-            this.imageBox5.Location = new System.Drawing.Point(52, 94);
-            this.imageBox5.Name = "imageBox5";
-            this.imageBox5.ImageNormal = global::AppLauncher.Properties.Resources16.edit;
-            this.imageBox5.Size = new System.Drawing.Size(18, 25);
-            this.imageBox5.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
-            this.imageBox5.TabIndex = 6;
-            this.imageBox5.TabStop = false;
-            this.imageBox5.MouseClick += new System.Windows.Forms.MouseEventHandler(this.imageBox5_MouseClick);
-            this.imageBox5.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.imageBox5_MouseClick);
-            // 
-            // imageBox4
-            // 
-            this.imageBox4.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
-            this.imageBox4.BackColor = System.Drawing.Color.Transparent;
-            this.imageBox4.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
-            this.imageBox4.ErrorImage = null;
-            this.imageBox4.ImageHover = global::AppLauncher.Properties.Resources16.arrow_down2;
-            this.imageBox4.Image = global::AppLauncher.Properties.Resources16.arrow_down;
-            this.imageBox4.InitialImage = null;
-            this.imageBox4.Location = new System.Drawing.Point(100, 94);
-            this.imageBox4.Name = "imageBox4";
-            this.imageBox4.ImageNormal = global::AppLauncher.Properties.Resources16.arrow_down;
-            this.imageBox4.Size = new System.Drawing.Size(18, 25);
-            this.imageBox4.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
-            this.imageBox4.TabIndex = 5;
-            this.imageBox4.TabStop = false;
-            this.imageBox4.MouseClick += new System.Windows.Forms.MouseEventHandler(this.imageBox4_MouseClick);
-            this.imageBox4.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.imageBox4_MouseClick);
-            // 
-            // imageBox3
-            // 
-            this.imageBox3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
-            this.imageBox3.BackColor = System.Drawing.Color.Transparent;
-            this.imageBox3.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
-            this.imageBox3.ErrorImage = null;
-            this.imageBox3.ImageHover = global::AppLauncher.Properties.Resources16.arrow_up2;
-            this.imageBox3.Image = global::AppLauncher.Properties.Resources16.arrow_up;
-            this.imageBox3.InitialImage = null;
-            this.imageBox3.Location = new System.Drawing.Point(76, 94);
-            this.imageBox3.Name = "imageBox3";
-            this.imageBox3.ImageNormal = global::AppLauncher.Properties.Resources16.arrow_up;
-            this.imageBox3.Size = new System.Drawing.Size(18, 25);
-            this.imageBox3.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
-            this.imageBox3.TabIndex = 4;
-            this.imageBox3.TabStop = false;
-            this.imageBox3.MouseClick += new System.Windows.Forms.MouseEventHandler(this.imageBox3_MouseClick);
-            this.imageBox3.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.imageBox3_MouseClick);
-            // 
-            // imageBox2
-            // 
-            this.imageBox2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
-            this.imageBox2.BackColor = System.Drawing.Color.Transparent;
-            this.imageBox2.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
-            this.imageBox2.ErrorImage = null;
-            this.imageBox2.ImageHover = global::AppLauncher.Properties.Resources16.minus2;
-            this.imageBox2.Image = global::AppLauncher.Properties.Resources16.minus;
-            this.imageBox2.InitialImage = null;
-            this.imageBox2.Location = new System.Drawing.Point(28, 94);
-            this.imageBox2.Name = "imageBox2";
-            this.imageBox2.ImageNormal = global::AppLauncher.Properties.Resources16.minus;
-            this.imageBox2.Size = new System.Drawing.Size(18, 25);
-            this.imageBox2.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
-            this.imageBox2.TabIndex = 3;
-            this.imageBox2.TabStop = false;
-            this.imageBox2.MouseClick += new System.Windows.Forms.MouseEventHandler(this.imageBox2_MouseClick);
-            this.imageBox2.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.imageBox2_MouseClick);
-            // 
-            // imageBox1
-            // 
-            this.imageBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
-            this.imageBox1.BackColor = System.Drawing.Color.Transparent;
-            this.imageBox1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
-            this.imageBox1.ErrorImage = null;
-            this.imageBox1.ImageHover = global::AppLauncher.Properties.Resources16.plus2;
-            this.imageBox1.Image = global::AppLauncher.Properties.Resources16.plus;
-            this.imageBox1.InitialImage = null;
-            this.imageBox1.Location = new System.Drawing.Point(4, 94);
-            this.imageBox1.Name = "imageBox1";
-            this.imageBox1.ImageNormal = global::AppLauncher.Properties.Resources16.plus;
-            this.imageBox1.Size = new System.Drawing.Size(18, 25);
-            this.imageBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
-            this.imageBox1.TabIndex = 2;
-            this.imageBox1.TabStop = false;
-            this.imageBox1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.imageBox1_MouseClick);
-            this.imageBox1.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.imageBox1_MouseClick);
-            // 
-            // TListBox
-            // 
-            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
-            this.Controls.Add(this.imageBox5);
-            this.Controls.Add(this.imageBox4);
-            this.Controls.Add(this.imageBox3);
-            this.Controls.Add(this.imageBox2);
-            this.Controls.Add(this.imageBox1);
-            this.Controls.Add(this.listBox1);
-            this.Name = "TListBox";
-            this.Padding = new System.Windows.Forms.Padding(4, 4, 3, 3);
-            this.Size = new System.Drawing.Size(128, 120);
-            ((System.ComponentModel.ISupportInitialize)(this.imageBox5)).EndInit();
-            ((System.ComponentModel.ISupportInitialize)(this.imageBox4)).EndInit();
-            ((System.ComponentModel.ISupportInitialize)(this.imageBox3)).EndInit();
-            ((System.ComponentModel.ISupportInitialize)(this.imageBox2)).EndInit();
-            ((System.ComponentModel.ISupportInitialize)(this.imageBox1)).EndInit();
-            this.ResumeLayout(false);
-
-        }
-
-        #endregion
-
-        private System.Windows.Forms.ListBox listBox1;
-        private Forms.TImageBox imageBox1;
-        private Forms.TImageBox imageBox2;
-        private Forms.TImageBox imageBox3;
-        private Forms.TImageBox imageBox4;
-        private Forms.TImageBox imageBox5;
-    }
-}
diff --git a/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TListBox.resx b/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TListBox.resx
deleted file mode 100644
index 1af7de1..0000000
--- a/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TListBox.resx
+++ /dev/null
@@ -1,120 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!-- 
-    Microsoft ResX Schema 
-    
-    Version 2.0
-    
-    The primary goals of this format is to allow a simple XML format 
-    that is mostly human readable. The generation and parsing of the 
-    various data types are done through the TypeConverter classes 
-    associated with the data types.
-    
-    Example:
-    
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-                
-    There are any number of "resheader" rows that contain simple 
-    name/value pairs.
-    
-    Each data row contains a name, and value. The row also contains a 
-    type or mimetype. Type corresponds to a .NET class that support 
-    text/value conversion through the TypeConverter architecture. 
-    Classes that don't support this are serialized and stored with the 
-    mimetype set.
-    
-    The mimetype is used for serialized objects, and tells the 
-    ResXResourceReader how to depersist the object. This is currently not 
-    extensible. For a given mimetype the value must be set accordingly:
-    
-    Note - application/x-microsoft.net.object.binary.base64 is the format 
-    that the ResXResourceWriter will generate, however the reader can 
-    read any of the formats listed below.
-    
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-    
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array 
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-</root>
\ No newline at end of file
diff --git a/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TOpenFileTextBox.cs b/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TOpenFileTextBox.cs
deleted file mode 100644
index 16a0d11..0000000
--- a/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TOpenFileTextBox.cs
+++ /dev/null
@@ -1,43 +0,0 @@
-using System;
-using System.IO;
-using System.Windows.Forms;
-using Resources = AppLauncher.Properties.Resources16;
-
-namespace RyzStudio.Windows.ThemedForms
-{
-    public class TOpenFileTextBox : TButtonTextBox
-    {
-        public TOpenFileTextBox() : base()
-        {
-            this.NormalImage = Resources.file;
-            this.HighlightImage = Resources.file2;
-            this.Text = string.Empty;
-        }
-
-        public OpenFileDialog FileDialog { get; set; } = null;
-
-        protected override void imageBox1_Click(object sender, EventArgs e)
-        {
-            if (this.FileDialog == null)
-            {
-                this.FileDialog = new OpenFileDialog();
-                this.FileDialog.Title = "Choose a file";
-                this.FileDialog.Filter = "All files|*";
-            }
-
-            if (!string.IsNullOrWhiteSpace(this.Text))
-            {
-                if (File.Exists(this.Text))
-                {
-                    this.FileDialog.InitialDirectory = Path.GetDirectoryName(this.Text);
-                }
-            }
-
-            if (this.FileDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
-            {
-                this.Text = this.FileDialog.FileName;
-            }
-        }
-
-    }
-}
diff --git a/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TPickerBox.cs b/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TPickerBox.cs
deleted file mode 100644
index 255f98c..0000000
--- a/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TPickerBox.cs
+++ /dev/null
@@ -1,98 +0,0 @@
-namespace RyzStudio.Windows.ThemedForms
-{
-    using RyzStudio.Drawing;
-    using System;
-	using System.ComponentModel;
-	using System.Drawing;
-    using System.Windows.Forms;
-
-    public partial class TPickerBox : RyzStudio.Windows.ThemedForms.TUserControl
-	{
-        protected readonly Padding textboxPadding = new Padding(6, 2, 4, 2);
-
-		public TPickerBox() : base()
-        {
-            InitializeComponent();
-
-            this.Font = new Font(this.Font, FontStyle.Regular);
-            this.Margin = new Padding(10, 4, 10, 4);
-
-            comboBox1.Font = this.Font;
-            comboBox1.DropDownStyle = ComboBoxStyle.DropDownList;
-            comboBox1.PreviewKeyDown += textBox_PreviewKeyDown;
-        }
-
-        protected override void OnResize(EventArgs e)
-        {
-            base.OnResize(e);
-
-            int b = (styleActive.BorderWidth + 1) + styleActive.BorderPadding;
-
-            this.Height = comboBox1.Height + (b + textboxPadding.Top) + ((b - 1) + textboxPadding.Bottom);
-        }
-
-        protected override void OnGotFocus(EventArgs e)
-        {
-            base.OnGotFocus(e);
-
-            comboBox1.Focus();
-        }
-
-        protected void textBox_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
-        {
-            switch (e.KeyCode)
-            {
-                case Keys.Enter:
-                    if (this.SubmitButton != null)
-                    {
-                        this.SubmitButton.PerformClick();
-                    }
-
-                    break;
-                case Keys.Escape:
-                    close();
-                    break;
-                default: break;
-            }
-        }
-
-        [Browsable(true), EditorBrowsable(EditorBrowsableState.Advanced)]
-        [Category("Appearance")]
-        public System.Windows.Forms.ComboBox ComboBox { get => comboBox1; set => comboBox1 = value; }
-
-        //[Browsable(true), EditorBrowsable(EditorBrowsableState.Advanced)]
-        //[Category("Appearance")]
-        //public new string Text
-        //{
-        //    get => textBox1.Text;
-        //    set
-        //    {
-        //        textBox1.Text = value;
-        //        textBox1.SelectionStart = textBox1.Text.Length;
-        //    }
-        //}
-
-        //[Browsable(true)]
-        //[Category("Appearance")]
-        //public ComboBox.ObjectCollection Items { get => comboBox1.Items; set => comboBox1.Items = value; }
-
-        [Browsable(true), EditorBrowsable(EditorBrowsableState.Advanced)]
-        [Category("Appearance")]
-        public TButton SubmitButton { get; set; } = null;
-
-        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
-        public new Padding Margin { get => base.Margin; set => base.Margin = value; }
-
-        protected override void updateBackground(Graphics g, ThemeStyle style)
-        {
-            int b = (styleActive.BorderWidth + 1) + styleActive.BorderPadding;
-
-            this.Padding = new Padding((b + textboxPadding.Left), (b + textboxPadding.Top), ((b - 1) + textboxPadding.Right), ((b - 1) + textboxPadding.Bottom));
-
-            Rectangoid area = new Rectangoid(this.ClientRectangle, style.BorderRadius, style.BorderWidth);
-            g.FillPath(new SolidBrush(style.BackColour), area.ToGraphicsPath());
-            g.DrawPath(new Pen(new SolidBrush(style.BorderColour), style.BorderWidth), area.ToGraphicsPath());
-        }
-
-    }
-}
\ No newline at end of file
diff --git a/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TPickerBox.designer.cs b/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TPickerBox.designer.cs
deleted file mode 100644
index 760329f..0000000
--- a/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TPickerBox.designer.cs
+++ /dev/null
@@ -1,59 +0,0 @@
-namespace RyzStudio.Windows.ThemedForms
-{
-    partial class TPickerBox
-    {
-        /// <summary>
-        /// Required designer variable.
-        /// </summary>
-        private System.ComponentModel.IContainer components = null;
-
-        /// <summary>
-        /// Clean up any resources being used.
-        /// </summary>
-        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-        protected override void Dispose(bool disposing)
-        {
-            if (disposing && (components != null))
-            {
-                components.Dispose();
-            }
-            base.Dispose(disposing);
-        }
-
-        #region Component Designer generated code
-
-        /// <summary>
-        /// Required method for Designer support - do not modify
-        /// the contents of this method with the code editor.
-        /// </summary>
-        private void InitializeComponent()
-        {
-            this.comboBox1 = new System.Windows.Forms.ComboBox();
-            this.SuspendLayout();
-            // 
-            // comboBox1
-            // 
-            this.comboBox1.Dock = System.Windows.Forms.DockStyle.Fill;
-            this.comboBox1.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
-            this.comboBox1.FormattingEnabled = true;
-            this.comboBox1.Location = new System.Drawing.Point(4, 4);
-            this.comboBox1.Name = "comboBox1";
-            this.comboBox1.Size = new System.Drawing.Size(121, 21);
-            this.comboBox1.TabIndex = 0;
-            // 
-            // PickerBox
-            // 
-            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
-            this.Controls.Add(this.comboBox1);
-            this.Name = "PickerBox";
-            this.Padding = new System.Windows.Forms.Padding(4, 4, 3, 3);
-            this.Size = new System.Drawing.Size(128, 32);
-            this.ResumeLayout(false);
-
-        }
-
-        #endregion
-
-        private System.Windows.Forms.ComboBox comboBox1;
-    }
-}
diff --git a/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TPickerBox.resx b/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TPickerBox.resx
deleted file mode 100644
index 1af7de1..0000000
--- a/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TPickerBox.resx
+++ /dev/null
@@ -1,120 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!-- 
-    Microsoft ResX Schema 
-    
-    Version 2.0
-    
-    The primary goals of this format is to allow a simple XML format 
-    that is mostly human readable. The generation and parsing of the 
-    various data types are done through the TypeConverter classes 
-    associated with the data types.
-    
-    Example:
-    
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-                
-    There are any number of "resheader" rows that contain simple 
-    name/value pairs.
-    
-    Each data row contains a name, and value. The row also contains a 
-    type or mimetype. Type corresponds to a .NET class that support 
-    text/value conversion through the TypeConverter architecture. 
-    Classes that don't support this are serialized and stored with the 
-    mimetype set.
-    
-    The mimetype is used for serialized objects, and tells the 
-    ResXResourceReader how to depersist the object. This is currently not 
-    extensible. For a given mimetype the value must be set accordingly:
-    
-    Note - application/x-microsoft.net.object.binary.base64 is the format 
-    that the ResXResourceWriter will generate, however the reader can 
-    read any of the formats listed below.
-    
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-    
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array 
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-</root>
\ No newline at end of file
diff --git a/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TTextBox.cs b/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TTextBox.cs
deleted file mode 100644
index 48a68d8..0000000
--- a/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TTextBox.cs
+++ /dev/null
@@ -1,96 +0,0 @@
-namespace RyzStudio.Windows.ThemedForms
-{
-    using RyzStudio.Drawing;
-    using System;
-	using System.ComponentModel;
-	using System.Drawing;
-    using System.Windows.Forms;
-
-    public partial class TTextBox : RyzStudio.Windows.ThemedForms.TUserControl
-	{
-        protected readonly Padding textboxPadding = new Padding(6, 6, 6, 6);
-
-		public TTextBox() : base()
-        {
-            InitializeComponent();
-
-            this.Margin = new Padding(10, 6, 10, 6);
-            this.Font = new Font(this.Font, FontStyle.Regular);
-
-            textBox1.Font = this.Font;
-            textBox1.PreviewKeyDown += textBox_PreviewKeyDown;
-        }
-
-        protected override void OnResize(EventArgs e)
-        {
-            base.OnResize(e);
-
-            int b = (styleActive.BorderWidth + 1) + styleActive.BorderPadding;
-
-            this.Height = textBox1.Height + (b + textboxPadding.Top) + ((b - 1) + textboxPadding.Bottom);
-        }
-
-        protected override void OnGotFocus(EventArgs e)
-        {
-            base.OnGotFocus(e);
-
-            textBox1.Focus();
-        }
-
-        protected void textBox_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
-        {
-            switch (e.KeyCode)
-            {
-                case Keys.Enter:
-                    if (this.SubmitButton != null)
-                    {
-                        this.SubmitButton.PerformClick();
-                    }
-
-                    break;
-                case Keys.Escape:
-                    close();
-                    break;
-                default: break;
-            }
-        }
-
-        [Browsable(true), EditorBrowsable(EditorBrowsableState.Advanced)]
-		[Category("Appearance")]
-		public System.Windows.Forms.TextBox InnerTextBox { get => textBox1; set => textBox1 = value; }
-
-        [Browsable(true), EditorBrowsable(EditorBrowsableState.Advanced)]
-        [Category("Appearance")]
-        public new string Text
-        {
-            get => textBox1.Text;
-            set
-            {
-                textBox1.Text = value;
-                textBox1.SelectionStart = textBox1.Text.Length;
-            }
-        }
-
-        [Browsable(true), EditorBrowsable(EditorBrowsableState.Advanced)]
-        [Category("Appearance")]
-        public bool UseSystemPasswordChar { get => textBox1.UseSystemPasswordChar; set => textBox1.UseSystemPasswordChar = value; }
-
-        [Browsable(true), EditorBrowsable(EditorBrowsableState.Advanced)]
-        [Category("Appearance")]
-        public TButton SubmitButton { get; set; } = null;
-
-        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
-        public new Padding Margin { get { return base.Margin; } set { base.Margin = value; } }
-
-        protected override void updateBackground(Graphics g, ThemeStyle style)
-        {
-            int b = (styleActive.BorderWidth + 1) + styleActive.BorderPadding;
-
-            this.Padding = new Padding((b + textboxPadding.Left), (b + textboxPadding.Top), ((b - 1) + textboxPadding.Right), ((b - 1) + textboxPadding.Bottom));
-
-            Rectangoid area = new Rectangoid(this.ClientRectangle, style.BorderRadius, style.BorderWidth);
-            g.FillPath(new SolidBrush(style.BackColour), area.ToGraphicsPath());
-            g.DrawPath(new Pen(new SolidBrush(style.BorderColour), style.BorderWidth), area.ToGraphicsPath());
-        }
-    }
-}
\ No newline at end of file
diff --git a/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TTextBox.designer.cs b/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TTextBox.designer.cs
deleted file mode 100644
index 752557d..0000000
--- a/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TTextBox.designer.cs
+++ /dev/null
@@ -1,60 +0,0 @@
-namespace RyzStudio.Windows.ThemedForms
-{
-    partial class TTextBox
-    {
-        /// <summary>
-        /// Required designer variable.
-        /// </summary>
-        private System.ComponentModel.IContainer components = null;
-
-        /// <summary>
-        /// Clean up any resources being used.
-        /// </summary>
-        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-        protected override void Dispose(bool disposing)
-        {
-            if (disposing && (components != null))
-            {
-                components.Dispose();
-            }
-            base.Dispose(disposing);
-        }
-
-        #region Component Designer generated code
-
-        /// <summary>
-        /// Required method for Designer support - do not modify
-        /// the contents of this method with the code editor.
-        /// </summary>
-        private void InitializeComponent()
-        {
-            this.textBox1 = new System.Windows.Forms.TextBox();
-            this.SuspendLayout();
-            // 
-            // textBox1
-            // 
-            this.textBox1.BorderStyle = System.Windows.Forms.BorderStyle.None;
-            this.textBox1.Dock = System.Windows.Forms.DockStyle.Fill;
-            this.textBox1.HideSelection = false;
-            this.textBox1.Location = new System.Drawing.Point(4, 4);
-            this.textBox1.Name = "textBox1";
-            this.textBox1.Size = new System.Drawing.Size(121, 13);
-            this.textBox1.TabIndex = 0;
-            // 
-            // TextBox
-            // 
-            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
-            this.Controls.Add(this.textBox1);
-            this.Name = "TextBox";
-            this.Padding = new System.Windows.Forms.Padding(4, 4, 3, 3);
-            this.Size = new System.Drawing.Size(128, 32);
-            this.ResumeLayout(false);
-            this.PerformLayout();
-
-        }
-
-        #endregion
-
-        private System.Windows.Forms.TextBox textBox1;
-    }
-}
diff --git a/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TTextBox.resx b/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TTextBox.resx
deleted file mode 100644
index 1af7de1..0000000
--- a/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TTextBox.resx
+++ /dev/null
@@ -1,120 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!-- 
-    Microsoft ResX Schema 
-    
-    Version 2.0
-    
-    The primary goals of this format is to allow a simple XML format 
-    that is mostly human readable. The generation and parsing of the 
-    various data types are done through the TypeConverter classes 
-    associated with the data types.
-    
-    Example:
-    
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-                
-    There are any number of "resheader" rows that contain simple 
-    name/value pairs.
-    
-    Each data row contains a name, and value. The row also contains a 
-    type or mimetype. Type corresponds to a .NET class that support 
-    text/value conversion through the TypeConverter architecture. 
-    Classes that don't support this are serialized and stored with the 
-    mimetype set.
-    
-    The mimetype is used for serialized objects, and tells the 
-    ResXResourceReader how to depersist the object. This is currently not 
-    extensible. For a given mimetype the value must be set accordingly:
-    
-    Note - application/x-microsoft.net.object.binary.base64 is the format 
-    that the ResXResourceWriter will generate, however the reader can 
-    read any of the formats listed below.
-    
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-    
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array 
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-</root>
\ No newline at end of file
diff --git a/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TUserControl.cs b/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TUserControl.cs
deleted file mode 100644
index 56bea24..0000000
--- a/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TUserControl.cs
+++ /dev/null
@@ -1,106 +0,0 @@
-using System;
-using System.Drawing;
-using System.Windows.Forms;
-using RyzStudio.Drawing;
-using System.ComponentModel;
-
-namespace RyzStudio.Windows.ThemedForms
-{
-    public partial class TUserControl : System.Windows.Forms.UserControl
-    {
-        public class ThemeStyle
-        {
-            public int BorderWidth;
-            public int BorderRadius;
-            public int BorderPadding;
-            public Color BorderColour;
-            public Color BackColour;
-            public Color ForeColour;
-
-            public ThemeStyle(int borderWidth, int borderRadius, int borderPadding, Color borderColour, Color backColour)
-            {
-                this.BorderWidth = borderWidth;
-                this.BorderRadius = borderRadius;
-                this.BorderPadding = borderPadding;
-                this.BorderColour = borderColour;
-                this.BackColour = backColour;
-                this.ForeColour = Color.Black;
-            }
-
-            public ThemeStyle(int borderWidth, int borderRadius, int borderPadding, Color borderColour, Color backColour, Color foreColour)
-            {
-                this.BorderWidth = borderWidth;
-                this.BorderRadius = borderRadius;
-                this.BorderPadding = borderPadding;
-                this.BorderColour = borderColour;
-                this.BackColour = backColour;
-                this.ForeColour = foreColour;
-            }
-        }
-
-        protected ThemeStyle styleActive = new ThemeStyle(1, 3, 2, Color.FromArgb(212, 212, 212), Color.White);
-
-        public TUserControl()
-        {
-            InitializeComponent();
-        }
-
-        protected override void OnLoad(EventArgs e)
-        {
-            base.OnLoad(e);
-
-			this.BackColor = Color.Transparent;
-		}
-
-		protected override void OnPaintBackground(PaintEventArgs e)
-        {
-            base.OnPaintBackground(e);
-
-			Graphics g = e.Graphics;
-            //g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
-            //g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
-            //g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
-            //g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
-
-            updateBackground(g, styleActive);
-        }
-
-        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
-        public new Padding Padding { get => base.Padding; set => base.Padding = value; }
-
-        protected virtual void updateBackground(Graphics g, ThemeStyle style)
-		{
-			int b = (styleActive.BorderWidth + 1) + styleActive.BorderPadding;
-
-			this.Padding = new Padding(b, b, (b - 1), (b - 1));
-
-			Rectangoid area = new Rectangoid(this.ClientRectangle, style.BorderRadius, style.BorderWidth);
-			g.FillPath(new SolidBrush(style.BackColour), area.ToGraphicsPath());
-			g.DrawPath(new Pen(new SolidBrush(style.BorderColour), style.BorderWidth), area.ToGraphicsPath());
-		}
-
-        protected virtual void close()
-        {
-            if (this.Parent == null)
-            {
-                return;
-            }
-
-            if (this.Parent is Form)
-            {
-                (this.Parent as Form).Close();
-                return;
-            }
-
-            if (this.Parent.GetType().IsSubclassOf(typeof(System.Windows.Forms.Form)))
-            {
-                System.Windows.Forms.Form parentForm = (System.Windows.Forms.Form)this.Parent;
-                if (parentForm != null)
-                {
-                    parentForm.Close();
-                }
-            }
-        }
-
-    }
-}
\ No newline at end of file
diff --git a/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TUserControl.designer.cs b/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TUserControl.designer.cs
deleted file mode 100644
index 6f57544..0000000
--- a/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TUserControl.designer.cs
+++ /dev/null
@@ -1,37 +0,0 @@
-namespace RyzStudio.Windows.ThemedForms
-{
-    partial class TUserControl
-    {
-        /// <summary>
-        /// Required designer variable.
-        /// </summary>
-        private System.ComponentModel.IContainer components = null;
-
-        /// <summary>
-        /// Clean up any resources being used.
-        /// </summary>
-        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-        protected override void Dispose(bool disposing)
-        {
-            if (disposing && (components != null))
-            {
-                components.Dispose();
-            }
-            base.Dispose(disposing);
-        }
-
-        #region Component Designer generated code
-
-        /// <summary>
-        /// Required method for Designer support - do not modify
-        /// the contents of this method with the code editor.
-        /// </summary>
-        private void InitializeComponent()
-        {
-            components = new System.ComponentModel.Container();
-            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-        }
-
-        #endregion
-    }
-}
diff --git a/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TYesNoPickerBox.cs b/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TYesNoPickerBox.cs
deleted file mode 100644
index 89225ee..0000000
--- a/FizzyLauncher.UI/RyzStudio/Windows/ThemedForms/TYesNoPickerBox.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-namespace RyzStudio.Windows.ThemedForms
-{
-    public class TYesNoPickerBox : TPickerBox
-    {
-
-        public TYesNoPickerBox() : base()
-        {
-            this.ComboBox.Items.Clear();
-
-            this.ComboBox.Items.AddRange(new string[] { "No", "Yes" });
-            if (this.ComboBox.Items.Count > 0) this.ComboBox.SelectedIndex = 0;
-        }
-
-        public bool Value { get => (this.ComboBox.SelectedIndex == 1); set =>this.ComboBox.SelectedIndex = (value ? 1 : 0); }
-
-    }
-}
diff --git a/FizzyLauncher.csproj b/FizzyLauncher.csproj
deleted file mode 100644
index 39bc8d3..0000000
--- a/FizzyLauncher.csproj
+++ /dev/null
@@ -1,171 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
-  <PropertyGroup>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProjectGuid>{66C1C75C-3612-4D23-B937-C3DE0D653292}</ProjectGuid>
-    <OutputType>WinExe</OutputType>
-    <RootNamespace>AppLauncher</RootNamespace>
-    <AssemblyName>fizzylauncher</AssemblyName>
-    <TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
-    <FileAlignment>512</FileAlignment>
-    <AutoGenerateBindingRedirects>false</AutoGenerateBindingRedirects>
-    <Deterministic>true</Deterministic>
-    <TargetFrameworkProfile />
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
-    <PlatformTarget>AnyCPU</PlatformTarget>
-    <DebugSymbols>true</DebugSymbols>
-    <DebugType>full</DebugType>
-    <Optimize>false</Optimize>
-    <OutputPath>bin\Debug\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-    <Prefer32Bit>false</Prefer32Bit>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
-    <PlatformTarget>AnyCPU</PlatformTarget>
-    <DebugType>none</DebugType>
-    <Optimize>true</Optimize>
-    <OutputPath>bin\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-    <Prefer32Bit>false</Prefer32Bit>
-  </PropertyGroup>
-  <PropertyGroup>
-    <NoWin32Manifest>true</NoWin32Manifest>
-  </PropertyGroup>
-  <PropertyGroup>
-    <ApplicationIcon>favicon.ico</ApplicationIcon>
-  </PropertyGroup>
-  <ItemGroup>
-    <Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
-      <HintPath>packages\Newtonsoft.Json.12.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
-    </Reference>
-    <Reference Include="System" />
-    <Reference Include="System.Core" />
-    <Reference Include="System.Xml.Linq" />
-    <Reference Include="System.Data.DataSetExtensions" />
-    <Reference Include="Microsoft.CSharp" />
-    <Reference Include="System.Data" />
-    <Reference Include="System.Deployment" />
-    <Reference Include="System.Drawing" />
-    <Reference Include="System.Net.Http" />
-    <Reference Include="System.Windows.Forms" />
-    <Reference Include="System.Xml" />
-  </ItemGroup>
-  <ItemGroup>
-    <Compile Include="Models\LauncherSession.cs" />
-    <Compile Include="Models\TileModel.cs" />
-    <Compile Include="MainForm.cs">
-      <SubType>Form</SubType>
-    </Compile>
-    <Compile Include="MainForm.Designer.cs">
-      <DependentUpon>MainForm.cs</DependentUpon>
-    </Compile>
-    <Compile Include="Models\TileGroupModel.cs" />
-    <Compile Include="Program.cs" />
-    <Compile Include="Properties\AssemblyInfo.cs" />
-    <Compile Include="Properties\Resources.Designer.cs">
-      <AutoGen>True</AutoGen>
-      <DesignTime>True</DesignTime>
-      <DependentUpon>Resources.resx</DependentUpon>
-    </Compile>
-    <Compile Include="Windows\Forms\Tile\AddTileForm.cs">
-      <SubType>Form</SubType>
-    </Compile>
-    <Compile Include="Windows\Forms\Tile\EditGroupForm.cs">
-      <SubType>Form</SubType>
-    </Compile>
-    <Compile Include="Windows\Forms\Tile\AddListTileForm.cs">
-      <SubType>Form</SubType>
-    </Compile>
-    <Compile Include="Windows\Forms\Tile\EditListTileForm.cs">
-      <SubType>Form</SubType>
-    </Compile>
-    <Compile Include="Windows\Forms\OptionsForm.cs">
-      <SubType>Form</SubType>
-    </Compile>
-    <Compile Include="Windows\Forms\Tile\EditTileForm.cs">
-      <SubType>Form</SubType>
-    </Compile>
-    <Compile Include="Windows\Forms\Tile\TTilePanelLayout.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="Windows\Forms\Tile\TTilePanelLayout.Designer.cs">
-      <DependentUpon>TTilePanelLayout.cs</DependentUpon>
-    </Compile>
-    <Compile Include="Windows\Forms\Tile\TTilePanel.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="Windows\Forms\Tile\TTilePanel.Designer.cs">
-      <DependentUpon>TTilePanel.cs</DependentUpon>
-    </Compile>
-    <EmbeddedResource Include="MainForm.resx">
-      <DependentUpon>MainForm.cs</DependentUpon>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Properties\Resources.resx">
-      <Generator>ResXFileCodeGenerator</Generator>
-      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Windows\Forms\Tile\AddTileForm.resx">
-      <DependentUpon>AddTileForm.cs</DependentUpon>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Windows\Forms\Tile\EditGroupForm.resx">
-      <DependentUpon>EditGroupForm.cs</DependentUpon>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Windows\Forms\Tile\AddListTileForm.resx">
-      <DependentUpon>AddListTileForm.cs</DependentUpon>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Windows\Forms\Tile\EditListTileForm.resx">
-      <DependentUpon>EditListTileForm.cs</DependentUpon>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Windows\Forms\OptionsForm.resx">
-      <DependentUpon>OptionsForm.cs</DependentUpon>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Windows\Forms\Tile\EditTileForm.resx">
-      <DependentUpon>EditTileForm.cs</DependentUpon>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Windows\Forms\Tile\TTilePanelLayout.resx">
-      <DependentUpon>TTilePanelLayout.cs</DependentUpon>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Windows\Forms\Tile\TTilePanel.resx">
-      <DependentUpon>TTilePanel.cs</DependentUpon>
-    </EmbeddedResource>
-    <None Include="packages.config" />
-    <None Include="Properties\Settings.settings">
-      <Generator>SettingsSingleFileGenerator</Generator>
-      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
-    </None>
-    <Compile Include="Properties\Settings.Designer.cs">
-      <AutoGen>True</AutoGen>
-      <DependentUpon>Settings.settings</DependentUpon>
-      <DesignTimeSharedInput>True</DesignTimeSharedInput>
-    </Compile>
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="Resources\toggle-left-ea-16.png" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="Resources\toggle-right-ea-16.png" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="Resources\folder_32.png" />
-  </ItemGroup>
-  <ItemGroup>
-    <Content Include="favicon.ico" />
-    <None Include="Resources\app_icon.png" />
-    <None Include="Resources\app_icon_32.png" />
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="FizzyLauncher.UI\FizzyLauncher.UI.csproj">
-      <Project>{d9a49347-583f-41b4-afe1-63ec80bbdb38}</Project>
-      <Name>FizzyLauncher.UI</Name>
-    </ProjectReference>
-  </ItemGroup>
-  <ItemGroup />
-  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
-</Project>
\ No newline at end of file
diff --git a/FizzyLauncher.csproj.user b/FizzyLauncher.csproj.user
deleted file mode 100644
index 6cbe588..0000000
--- a/FizzyLauncher.csproj.user
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <PropertyGroup>
-    <ProjectView>ProjectFiles</ProjectView>
-  </PropertyGroup>
-</Project>
\ No newline at end of file
diff --git a/MainForm.Designer.cs b/MainForm.Designer.cs
deleted file mode 100644
index b088587..0000000
--- a/MainForm.Designer.cs
+++ /dev/null
@@ -1,336 +0,0 @@
-namespace AppLauncher
-{
-    partial class MainForm
-    {
-        /// <summary>
-        /// Required designer variable.
-        /// </summary>
-        private System.ComponentModel.IContainer components = null;
-
-        /// <summary>
-        /// Clean up any resources being used.
-        /// </summary>
-        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-        protected override void Dispose(bool disposing)
-        {
-            if (disposing && (components != null))
-            {
-                components.Dispose();
-            }
-            base.Dispose(disposing);
-        }
-
-        #region Windows Form Designer generated code
-
-        /// <summary>
-        /// Required method for Designer support - do not modify
-        /// the contents of this method with the code editor.
-        /// </summary>
-        private void InitializeComponent()
-        {
-            this.components = new System.ComponentModel.Container();
-            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
-            this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components);
-            this.toolStripMenuItem4 = new System.Windows.Forms.ToolStripMenuItem();
-            this.toolStripMenuItem5 = new System.Windows.Forms.ToolStripMenuItem();
-            this.toolStripMenuItem7 = new System.Windows.Forms.ToolStripMenuItem();
-            this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
-            this.toolStripMenuItem8 = new System.Windows.Forms.ToolStripMenuItem();
-            this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator();
-            this.toolStripMenuItem6 = new System.Windows.Forms.ToolStripMenuItem();
-            this.toolStripMenuItem2 = new System.Windows.Forms.ToolStripMenuItem();
-            this.toolStripMenuItem10 = new System.Windows.Forms.ToolStripSeparator();
-            this.exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
-            this.toolStripMenuItem3 = new System.Windows.Forms.ToolStripMenuItem();
-            this.toolStripMenuItem12 = new System.Windows.Forms.ToolStripMenuItem();
-            this.toolStripMenuItem11 = new System.Windows.Forms.ToolStripMenuItem();
-            this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
-            this.toolStripMenuItem9 = new System.Windows.Forms.ToolStripMenuItem();
-            this.optionToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
-            this.helpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
-            this.viewHelpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
-            this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
-            this.aboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
-            this.saveFileDialog1 = new System.Windows.Forms.SaveFileDialog();
-            this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog();
-            this.notifyIcon1 = new System.Windows.Forms.NotifyIcon(this.components);
-            this.contextMenuStrip2 = new System.Windows.Forms.ContextMenuStrip(this.components);
-            this.exitToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
-            this.panel1 = new System.Windows.Forms.Panel();
-            this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel();
-            this.contextMenuStrip1.SuspendLayout();
-            this.contextMenuStrip2.SuspendLayout();
-            this.panel1.SuspendLayout();
-            this.SuspendLayout();
-            // 
-            // contextMenuStrip1
-            // 
-            this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
-            this.toolStripMenuItem4,
-            this.toolStripMenuItem3,
-            this.toolStripMenuItem9,
-            this.helpToolStripMenuItem});
-            this.contextMenuStrip1.Name = "contextMenuStrip1";
-            this.contextMenuStrip1.Size = new System.Drawing.Size(102, 92);
-            this.contextMenuStrip1.Opening += new System.ComponentModel.CancelEventHandler(this.contextMenuStrip1_Opening);
-            // 
-            // toolStripMenuItem4
-            // 
-            this.toolStripMenuItem4.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
-            this.toolStripMenuItem5,
-            this.toolStripMenuItem7,
-            this.toolStripSeparator2,
-            this.toolStripMenuItem8,
-            this.toolStripSeparator3,
-            this.toolStripMenuItem6,
-            this.toolStripMenuItem2,
-            this.toolStripMenuItem10,
-            this.exitToolStripMenuItem});
-            this.toolStripMenuItem4.Name = "toolStripMenuItem4";
-            this.toolStripMenuItem4.Size = new System.Drawing.Size(101, 22);
-            this.toolStripMenuItem4.Text = "&File";
-            // 
-            // toolStripMenuItem5
-            // 
-            this.toolStripMenuItem5.Name = "toolStripMenuItem5";
-            this.toolStripMenuItem5.Size = new System.Drawing.Size(123, 22);
-            this.toolStripMenuItem5.Text = "&New";
-            this.toolStripMenuItem5.Click += new System.EventHandler(this.toolStripMenuItem5_Click);
-            // 
-            // toolStripMenuItem7
-            // 
-            this.toolStripMenuItem7.Name = "toolStripMenuItem7";
-            this.toolStripMenuItem7.Size = new System.Drawing.Size(123, 22);
-            this.toolStripMenuItem7.Text = "&Open";
-            this.toolStripMenuItem7.Click += new System.EventHandler(this.toolStripMenuItem7_Click);
-            // 
-            // toolStripSeparator2
-            // 
-            this.toolStripSeparator2.Name = "toolStripSeparator2";
-            this.toolStripSeparator2.Size = new System.Drawing.Size(120, 6);
-            // 
-            // toolStripMenuItem8
-            // 
-            this.toolStripMenuItem8.Name = "toolStripMenuItem8";
-            this.toolStripMenuItem8.Size = new System.Drawing.Size(123, 22);
-            this.toolStripMenuItem8.Text = "&Close";
-            this.toolStripMenuItem8.Click += new System.EventHandler(this.toolStripMenuItem8_Click);
-            // 
-            // toolStripSeparator3
-            // 
-            this.toolStripSeparator3.Name = "toolStripSeparator3";
-            this.toolStripSeparator3.Size = new System.Drawing.Size(120, 6);
-            // 
-            // toolStripMenuItem6
-            // 
-            this.toolStripMenuItem6.Name = "toolStripMenuItem6";
-            this.toolStripMenuItem6.Size = new System.Drawing.Size(123, 22);
-            this.toolStripMenuItem6.Text = "&Save";
-            this.toolStripMenuItem6.Click += new System.EventHandler(this.toolStripMenuItem6_Click);
-            // 
-            // toolStripMenuItem2
-            // 
-            this.toolStripMenuItem2.Name = "toolStripMenuItem2";
-            this.toolStripMenuItem2.Size = new System.Drawing.Size(123, 22);
-            this.toolStripMenuItem2.Text = "Save &As...";
-            this.toolStripMenuItem2.Click += new System.EventHandler(this.toolStripMenuItem2_Click);
-            // 
-            // toolStripMenuItem10
-            // 
-            this.toolStripMenuItem10.Name = "toolStripMenuItem10";
-            this.toolStripMenuItem10.Size = new System.Drawing.Size(120, 6);
-            // 
-            // exitToolStripMenuItem
-            // 
-            this.exitToolStripMenuItem.Name = "exitToolStripMenuItem";
-            this.exitToolStripMenuItem.Size = new System.Drawing.Size(123, 22);
-            this.exitToolStripMenuItem.Text = "E&xit";
-            this.exitToolStripMenuItem.Click += new System.EventHandler(this.exitToolStripMenuItem_Click);
-            // 
-            // toolStripMenuItem3
-            // 
-            this.toolStripMenuItem3.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
-            this.toolStripMenuItem12,
-            this.toolStripMenuItem11,
-            this.toolStripMenuItem1});
-            this.toolStripMenuItem3.Name = "toolStripMenuItem3";
-            this.toolStripMenuItem3.Size = new System.Drawing.Size(101, 22);
-            this.toolStripMenuItem3.Text = "&View";
-            // 
-            // toolStripMenuItem12
-            // 
-            this.toolStripMenuItem12.Name = "toolStripMenuItem12";
-            this.toolStripMenuItem12.Size = new System.Drawing.Size(222, 22);
-            this.toolStripMenuItem12.Text = "Enable &Big Icons (In Folders)";
-            this.toolStripMenuItem12.Click += new System.EventHandler(this.toolStripMenuItem12_Click);
-            // 
-            // toolStripMenuItem11
-            // 
-            this.toolStripMenuItem11.Name = "toolStripMenuItem11";
-            this.toolStripMenuItem11.Size = new System.Drawing.Size(222, 22);
-            this.toolStripMenuItem11.Text = "Enable &Animation";
-            this.toolStripMenuItem11.Click += new System.EventHandler(this.toolStripMenuItem11_Click);
-            // 
-            // toolStripMenuItem1
-            // 
-            this.toolStripMenuItem1.Name = "toolStripMenuItem1";
-            this.toolStripMenuItem1.Size = new System.Drawing.Size(222, 22);
-            this.toolStripMenuItem1.Text = "Always On &Top";
-            this.toolStripMenuItem1.Click += new System.EventHandler(this.toolStripMenuItem1_Click);
-            // 
-            // toolStripMenuItem9
-            // 
-            this.toolStripMenuItem9.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
-            this.optionToolStripMenuItem});
-            this.toolStripMenuItem9.Name = "toolStripMenuItem9";
-            this.toolStripMenuItem9.Size = new System.Drawing.Size(101, 22);
-            this.toolStripMenuItem9.Text = "&Tools";
-            // 
-            // optionToolStripMenuItem
-            // 
-            this.optionToolStripMenuItem.Name = "optionToolStripMenuItem";
-            this.optionToolStripMenuItem.Size = new System.Drawing.Size(116, 22);
-            this.optionToolStripMenuItem.Text = "&Options";
-            this.optionToolStripMenuItem.Click += new System.EventHandler(this.optionToolStripMenuItem_Click);
-            // 
-            // helpToolStripMenuItem
-            // 
-            this.helpToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
-            this.viewHelpToolStripMenuItem,
-            this.toolStripSeparator1,
-            this.aboutToolStripMenuItem});
-            this.helpToolStripMenuItem.Name = "helpToolStripMenuItem";
-            this.helpToolStripMenuItem.Size = new System.Drawing.Size(101, 22);
-            this.helpToolStripMenuItem.Text = "&Help";
-            // 
-            // viewHelpToolStripMenuItem
-            // 
-            this.viewHelpToolStripMenuItem.Name = "viewHelpToolStripMenuItem";
-            this.viewHelpToolStripMenuItem.Size = new System.Drawing.Size(127, 22);
-            this.viewHelpToolStripMenuItem.Text = "&View Help";
-            this.viewHelpToolStripMenuItem.Click += new System.EventHandler(this.viewHelpToolStripMenuItem_Click);
-            // 
-            // toolStripSeparator1
-            // 
-            this.toolStripSeparator1.Name = "toolStripSeparator1";
-            this.toolStripSeparator1.Size = new System.Drawing.Size(124, 6);
-            // 
-            // aboutToolStripMenuItem
-            // 
-            this.aboutToolStripMenuItem.Name = "aboutToolStripMenuItem";
-            this.aboutToolStripMenuItem.Size = new System.Drawing.Size(127, 22);
-            this.aboutToolStripMenuItem.Text = "&About";
-            this.aboutToolStripMenuItem.Click += new System.EventHandler(this.aboutToolStripMenuItem_Click);
-            // 
-            // saveFileDialog1
-            // 
-            this.saveFileDialog1.Filter = "Session files|*.jsonfig";
-            this.saveFileDialog1.Title = "Choose file to save the session";
-            // 
-            // openFileDialog1
-            // 
-            this.openFileDialog1.Filter = "Session files|*.jsonfig";
-            this.openFileDialog1.Title = "Choose session file";
-            // 
-            // notifyIcon1
-            // 
-            this.notifyIcon1.ContextMenuStrip = this.contextMenuStrip2;
-            this.notifyIcon1.Icon = ((System.Drawing.Icon)(resources.GetObject("notifyIcon1.Icon")));
-            this.notifyIcon1.Text = "notifyIcon1";
-            this.notifyIcon1.Visible = true;
-            this.notifyIcon1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.notifyIcon1_MouseClick);
-            // 
-            // contextMenuStrip2
-            // 
-            this.contextMenuStrip2.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
-            this.exitToolStripMenuItem1});
-            this.contextMenuStrip2.Name = "contextMenuStrip2";
-            this.contextMenuStrip2.Size = new System.Drawing.Size(94, 26);
-            // 
-            // exitToolStripMenuItem1
-            // 
-            this.exitToolStripMenuItem1.Name = "exitToolStripMenuItem1";
-            this.exitToolStripMenuItem1.Size = new System.Drawing.Size(93, 22);
-            this.exitToolStripMenuItem1.Text = "E&xit";
-            this.exitToolStripMenuItem1.Click += new System.EventHandler(this.exitToolStripMenuItem1_Click);
-            // 
-            // panel1
-            // 
-            this.panel1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
-            | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
-            this.panel1.AutoScroll = true;
-            this.panel1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
-            this.panel1.BackColor = System.Drawing.Color.Transparent;
-            this.panel1.Controls.Add(this.flowLayoutPanel1);
-            this.panel1.Location = new System.Drawing.Point(12, 34);
-            this.panel1.Name = "panel1";
-            this.panel1.Size = new System.Drawing.Size(620, 363);
-            this.panel1.TabIndex = 0;
-            // 
-            // flowLayoutPanel1
-            // 
-            this.flowLayoutPanel1.AutoSize = true;
-            this.flowLayoutPanel1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
-            this.flowLayoutPanel1.BackColor = System.Drawing.Color.Transparent;
-            this.flowLayoutPanel1.FlowDirection = System.Windows.Forms.FlowDirection.TopDown;
-            this.flowLayoutPanel1.Location = new System.Drawing.Point(0, 0);
-            this.flowLayoutPanel1.Name = "flowLayoutPanel1";
-            this.flowLayoutPanel1.Padding = new System.Windows.Forms.Padding(0, 10, 0, 20);
-            this.flowLayoutPanel1.Size = new System.Drawing.Size(0, 30);
-            this.flowLayoutPanel1.TabIndex = 29;
-            this.flowLayoutPanel1.WrapContents = false;
-            // 
-            // MainForm
-            // 
-            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-            this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(250)))), ((int)(((byte)(250)))), ((int)(((byte)(250)))));
-            this.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None;
-            this.ClientSize = new System.Drawing.Size(633, 400);
-            this.Controls.Add(this.panel1);
-            this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
-            this.MinimumSize = new System.Drawing.Size(420, 280);
-            this.Name = "MainForm";
-            this.Text = "Launcher";
-            this.TitleContextMenuStrip = this.contextMenuStrip1;
-            this.contextMenuStrip1.ResumeLayout(false);
-            this.contextMenuStrip2.ResumeLayout(false);
-            this.panel1.ResumeLayout(false);
-            this.panel1.PerformLayout();
-            this.ResumeLayout(false);
-
-        }
-
-        #endregion
-        private System.Windows.Forms.ContextMenuStrip contextMenuStrip1;
-        private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem3;
-        private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem1;
-        private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem4;
-        private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem2;
-        private System.Windows.Forms.SaveFileDialog saveFileDialog1;
-        private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem5;
-        private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem6;
-        private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem7;
-        private System.Windows.Forms.OpenFileDialog openFileDialog1;
-        private System.Windows.Forms.ToolStripSeparator toolStripSeparator2;
-        private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem8;
-        private System.Windows.Forms.ToolStripSeparator toolStripSeparator3;
-        private System.Windows.Forms.ToolStripSeparator toolStripMenuItem10;
-        private System.Windows.Forms.ToolStripMenuItem exitToolStripMenuItem;
-        private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem9;
-        private System.Windows.Forms.ToolStripMenuItem optionToolStripMenuItem;
-        private System.Windows.Forms.ToolStripMenuItem helpToolStripMenuItem;
-        private System.Windows.Forms.ToolStripMenuItem viewHelpToolStripMenuItem;
-        private System.Windows.Forms.ToolStripMenuItem aboutToolStripMenuItem;
-        private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
-        private System.Windows.Forms.NotifyIcon notifyIcon1;
-        private System.Windows.Forms.ContextMenuStrip contextMenuStrip2;
-        private System.Windows.Forms.ToolStripMenuItem exitToolStripMenuItem1;
-        private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem11;
-        private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem12;
-        private System.Windows.Forms.Panel panel1;
-        private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel1;
-    }
-}
-
diff --git a/MainForm.cs b/MainForm.cs
deleted file mode 100644
index 7b76ac4..0000000
--- a/MainForm.cs
+++ /dev/null
@@ -1,595 +0,0 @@
-using AppLauncher.Models;
-using AppLauncher.Windows.Forms;
-using Newtonsoft.Json;
-using RyzStudio.Windows.Forms;
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Drawing;
-using System.IO;
-using System.Runtime.InteropServices;
-using System.Threading.Tasks;
-using System.Windows.Forms;
-
-namespace AppLauncher
-{
-    public partial class MainForm : TForm
-    {
-        [DllImport("user32.dll")]
-        protected static extern bool RegisterHotKey(IntPtr hWnd, int id, int fsModifiers, int vk);
-
-        [DllImport("user32.dll")]
-        protected static extern bool UnregisterHotKey(IntPtr hWnd, int id);
-
-        //protected const int MOD_ALT = 0x1;
-        //protected const int MOD_CONTROL = 0x2;
-        //protected const int MOD_SHIFT = 0x4;
-        //protected const int MOD_WIN = 0x8;
-        protected const int WM_HOTKEY = 0x312;
-        protected const int WM_QUERYENDSESSION = 0x0011;
-
-        protected OptionsForm optionsForm = null;
-        protected string sessionFilename = null;
-        protected bool requestExit = false;
-
-        public MainForm() : base()
-        {
-            InitializeComponent();
-
-            notifyIcon1.Text = Application.ProductName;
-
-            this.StartPosition = FormStartPosition.WindowsDefaultBounds;
-
-            appIcon = Properties.Resources.app_icon;
-
-            enableMaximise = false;
-            //enableMaximiseMenu = false;
-            closeOnMinimise = true;
-        }
-
-        protected override void OnLoad(EventArgs e)
-        {
-            ThreadControl.SetVisible(this, false);
-
-            base.OnLoad(e);
-        }
-
-        protected async override void OnShown(EventArgs e)
-        {
-            base.OnShown(e);
-
-            string jsonfigFilename = Path.ChangeExtension(Application.ExecutablePath, "jsonfig");
-            if (File.Exists(jsonfigFilename))
-            {
-                await loadFile(jsonfigFilename);
-            }
-            else
-            {
-                this.CurrentSession = new LauncherSession();
-                ThreadControl.SetSize(this, this.MinimumSize);
-                ThreadControl.SetVisible(this, true);
-            }
-        }
-
-        protected override void OnClosing(CancelEventArgs e)
-        {
-            base.OnClosing(e);
-
-            if (this.CurrentSession == null) this.CurrentSession = new LauncherSession();
-
-            if (this.CurrentSession.HideOnClose && !requestExit)
-            {
-                this.Visible = !this.Visible;
-                e.Cancel = true;
-                return;
-            }
-
-            requestExit = false;
-
-            if (string.IsNullOrWhiteSpace(sessionFilename))
-            {
-                // do nothing
-            }
-            else
-            {
-                if (this.CurrentSession.AutoSave == LauncherSession.AutoSaveOption.Prompt)
-                {
-                    DialogResult dr = MessageBox.Show("Save existing session?", "Exit", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
-                    if (dr == DialogResult.Yes)
-                    {
-                        bool rv = saveFile(sessionFilename, false);
-                        if (!rv)
-                        {
-                            e.Cancel = true;
-                        }
-                    }
-                    else if (dr == DialogResult.No)
-                    {
-                        // do nothing
-                    }
-                    else if (dr == DialogResult.Cancel)
-                    {
-                        e.Cancel = true;
-                    }
-                }
-                else if (this.CurrentSession.AutoSave == LauncherSession.AutoSaveOption.Yes)
-                {
-                    saveFile(sessionFilename, false);
-                }
-            }
-
-            if (this.CurrentSession.HotKey != null)
-            {
-                if (this.CurrentSession.HotKey.KeyCode != Keys.None)
-                {
-                    UnregisterHotKey((IntPtr)Handle, 1);
-                }
-            }
-
-        }
-
-        protected override void WndProc(ref Message m)
-        {
-            switch (m.Msg)
-            {
-                case WM_HOTKEY:
-                    if (m.WParam.ToInt32() == 1)
-                    {
-                        this.Visible = !this.Visible;
-                    }
-
-                    break;
-                case WM_QUERYENDSESSION:
-                    requestExit = true;
-                    //this.Close();
-                    Application.Exit();
-
-                    break;
-                default: break;
-
-            }
-
-            base.WndProc(ref m);
-        }
-
-        public LauncherSession CurrentSession { get; set; } = null;
-
-        private void toolStripMenuItem5_Click(object sender, EventArgs e)
-        {
-            if (string.IsNullOrWhiteSpace(sessionFilename))
-            {
-                newSession();
-            }
-            else
-            {
-                DialogResult dr = MessageBox.Show("Save existing session?", "New session", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
-                if (dr == DialogResult.Yes)
-                {
-                    bool rv = saveFile(sessionFilename, false);
-                    if (rv)
-                    {
-                        newSession();
-
-                        sessionFilename = null;
-                    }
-                }
-                else if (dr == DialogResult.No)
-                {
-                    newSession();
-
-                    sessionFilename = null;
-                }
-                else if (dr == DialogResult.Cancel)
-                {
-                    return;
-                }
-            }
-        }
-
-        private async void toolStripMenuItem7_Click(object sender, EventArgs e)
-        {
-            if (string.IsNullOrWhiteSpace(sessionFilename))
-            {
-                if (openFileDialog1.ShowDialog() == DialogResult.OK)
-                {
-                    await loadFile(openFileDialog1.FileName);
-                }
-            }
-            else
-            {
-                DialogResult dr = MessageBox.Show("Save existing session?", "Open session", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
-                if (dr == DialogResult.Yes)
-                {
-                    bool rv = saveFile(sessionFilename, false);
-                    if (rv)
-                    {
-                        if (openFileDialog1.ShowDialog() == DialogResult.OK)
-                        {
-                            await loadFile(openFileDialog1.FileName);
-                        }
-                    }
-                }
-                else if (dr == DialogResult.No)
-                {
-                    if (openFileDialog1.ShowDialog() == DialogResult.OK)
-                    {
-                        await loadFile(openFileDialog1.FileName);
-                    }
-                }
-                else if (dr == DialogResult.Cancel)
-                {
-                    return;
-                }
-            }
-        }
-
-        private void toolStripMenuItem8_Click(object sender, EventArgs e)
-        {
-            if (string.IsNullOrWhiteSpace(sessionFilename))
-            {
-                flowLayoutPanel1.Controls.Clear();
-            }
-            else
-            {
-                DialogResult dr = MessageBox.Show("Save existing session?", "Close session", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
-                if (dr == DialogResult.Yes)
-                {
-                    bool rv = saveFile(sessionFilename, false);
-                    if (rv)
-                    {
-                        flowLayoutPanel1.Controls.Clear();
-
-                        sessionFilename = null;
-                    }
-                }
-                else if (dr == DialogResult.No)
-                {
-                    flowLayoutPanel1.Controls.Clear();
-
-                    sessionFilename = null;
-                }
-                else if (dr == DialogResult.Cancel)
-                {
-                    return;
-                }
-            }
-        }
-
-        private void toolStripMenuItem6_Click(object sender, EventArgs e)
-        {
-            if (string.IsNullOrWhiteSpace(sessionFilename))
-            {
-                saveAsFile();
-            }
-            else
-            {
-                saveFile(sessionFilename, true);
-            }
-        }
-
-        private void toolStripMenuItem2_Click(object sender, EventArgs e) => saveAsFile();
-
-        private void toolStripMenuItem1_Click(object sender, EventArgs e) => this.TopMost = !this.TopMost;
-
-        private void exitToolStripMenuItem_Click(object sender, EventArgs e)
-        {
-            requestExit = true;
-            this.Close();
-        }
-
-        private void optionToolStripMenuItem_Click(object sender, EventArgs e)
-        {
-            if (optionsForm == null) optionsForm = new OptionsForm(this);
-            optionsForm.ShowDialog();
-
-            invalidateHotKey();
-        }
-
-        protected async Task collapseWindow(int width, int increment = 6)
-        {
-            await Task.Run(() =>
-            {
-                while (this.Width > width)
-                {
-                    ThreadControl.SetWidth(this, (this.Width - increment));
-
-                    Application.DoEvents();
-                }
-
-                ThreadControl.SetWidth(this, width);
-            });
-        }
-
-        protected async Task expandWindow(int width, int increment = 8)
-        {
-            await Task.Run(() =>
-            {
-                while (this.Width < width)
-                {
-                    ThreadControl.SetWidth(this, (this.Width + increment));
-
-                    Application.DoEvents();
-                }
-
-                ThreadControl.SetWidth(this, width);
-            });
-        }
-
-        protected void invalidateHotKey()
-        {
-            if (this.InvokeRequired)
-            {
-                this.Invoke(new MethodInvoker(() =>
-                {
-                    UnregisterHotKey((IntPtr)Handle, 1);
-                }));
-            }
-            else
-            {
-                UnregisterHotKey((IntPtr)Handle, 1);
-            }
-
-            if (this.CurrentSession.HotKey != null)
-            {
-                if (this.CurrentSession.HotKey.KeyCode != Keys.None)
-                {
-                    if (this.InvokeRequired)
-                    {
-                        this.Invoke(new MethodInvoker(() =>
-                        {
-                            RegisterHotKey((IntPtr)Handle, 1, this.CurrentSession.HotKey.ModifierCode, this.CurrentSession.HotKey.Key);
-                        }));
-                    }
-                    else
-                    {
-                        RegisterHotKey((IntPtr)Handle, 1, this.CurrentSession.HotKey.ModifierCode, this.CurrentSession.HotKey.Key);
-                    }
-                }
-            }
-        }
-
-        protected async Task loadFile(string filename)
-        {
-            await Task.Run(() =>
-            {
-                if (isBusy)
-                {
-                    return;
-                }
-
-                if (string.IsNullOrWhiteSpace(filename))
-                {
-                    return;
-                }
-
-                if (!File.Exists(filename))
-                {
-                    return;
-                }
-
-                string sourceCode = null;
-
-                try
-                {
-                    sessionFilename = filename;
-
-                    sourceCode = File.ReadAllText(sessionFilename);
-                }
-                catch (Exception exc)
-                {
-                    MessageBox.Show(exc.Message, "Load session");
-                    return;
-                }
-
-                if (string.IsNullOrWhiteSpace(sourceCode))
-                {
-                    return;
-                }
-
-                // load options
-                this.CurrentSession = JsonConvert.DeserializeObject<LauncherSession>(sourceCode);
-                if (this.CurrentSession == null)
-                {
-                    this.CurrentSession = new LauncherSession();
-                }
-
-                // load tiles
-                int maxWidth = 0;
-                ThreadControl.Clear(flowLayoutPanel1);
-
-                if (this.CurrentSession.Groups != null)
-                {
-                    foreach (TileGroupModel item in this.CurrentSession.Groups)
-                    {
-                        TTilePanelLayout panel = new TTilePanelLayout(item);
-
-                        maxWidth = Math.Max(maxWidth, panel.Width);
-
-                        ThreadControl.Add(flowLayoutPanel1, panel);
-                    }
-                }
-
-                // ui
-                ThreadControl.SetSize(this, (maxWidth + SystemInformation.VerticalScrollBarWidth + 20 + flowLayoutPanel1.Left), this.CurrentSession.DefaultHeight);
-                if (!this.CurrentSession.StartPosition.IsEmpty) ThreadControl.SetLocation(this, this.CurrentSession.StartPosition);
-
-                //
-                ThreadControl.SetTopMost(this, this.CurrentSession.AlwaysOnTop);
-                ThreadControl.SetVisible(this, true);
-                ThreadControl.SetChecked(toolStripMenuItem11, this.CurrentSession.EnableAnimation);
-                ThreadControl.SetChecked(toolStripMenuItem12, this.CurrentSession.EnableBigIconInFolder);
-
-                if (this.InvokeRequired)
-                {
-                    this.Invoke(new MethodInvoker(() => {
-                        this.Focus();
-                    }));
-                }
-                else
-                {
-                    this.Focus();
-                }
-
-                // hotkey
-                invalidateHotKey();
-
-            });
-        }
-
-        protected void newSession()
-        {
-            int maxWidth = 0;
-            flowLayoutPanel1.Controls.Clear();
-
-            TTilePanelLayout panel = new TTilePanelLayout(new TileGroupModel()
-            {
-                Title = "New Group",
-                IsExpanded = true,
-                GridSize = new Size(8, 1)
-            });
-
-            maxWidth = Math.Max(maxWidth, panel.Width);
-
-            flowLayoutPanel1.Controls.Add(panel);
-
-            this.Width = maxWidth + SystemInformation.VerticalScrollBarWidth + 20 + flowLayoutPanel1.Left;
-        }
-
-        protected bool saveFile(string filename, bool showNotices = true)
-        {
-            if (isBusy)
-            {
-                return false;
-            }
-
-            if (string.IsNullOrWhiteSpace(filename))
-            {
-                return false;
-            }
-
-            if (flowLayoutPanel1.Controls.Count <= 0)
-            {
-                return true;
-            }
-
-            isBusy = true;
-
-            // update session
-            if (this.CurrentSession == null)
-            {
-                this.CurrentSession = new LauncherSession();
-            }
-
-            this.CurrentSession.DefaultHeight = this.Height;
-            this.CurrentSession.AlwaysOnTop = this.TopMost;
-            this.CurrentSession.StartPosition = this.Location;
-
-            // save
-            this.CurrentSession.Groups = new List<TileGroupModel>();
-            for (int i = 0; i < flowLayoutPanel1.Controls.Count; i++)
-            {
-                if (flowLayoutPanel1.Controls[i].GetType() != typeof(TTilePanelLayout))
-                {
-                    continue;
-                }
-
-                TTilePanelLayout container = flowLayoutPanel1.Controls[i] as TTilePanelLayout;
-                this.CurrentSession.Groups.Add(container.Model);
-            }
-
-            try
-            {
-                File.WriteAllText(filename, JsonConvert.SerializeObject(this.CurrentSession));
-
-                if (showNotices)
-                {
-                    MessageBox.Show("Session saved!", "Save session", MessageBoxButtons.OK, MessageBoxIcon.Information);
-                }
-            }
-            catch (Exception exc)
-            {
-                MessageBox.Show(exc.Message, "Save session");
-
-                return false;
-            }
-
-            isBusy = false;
-
-            return true;
-        }
-
-        protected bool saveAsFile()
-        {
-            if (isBusy)
-            {
-                return false;
-            }
-
-            if (saveFileDialog1.ShowDialog() == DialogResult.OK)
-            {
-                bool rv = saveFile(saveFileDialog1.FileName);
-                if (rv)
-                {
-                    sessionFilename = saveFileDialog1.FileName;
-                }
-
-                return rv;
-            }
-
-            return false;
-        }
-
-        private void contextMenuStrip1_Opening(object sender, System.ComponentModel.CancelEventArgs e)
-        {
-            toolStripMenuItem1.Checked = this.TopMost;
-            toolStripMenuItem6.Enabled = !string.IsNullOrWhiteSpace(sessionFilename);
-        }
-
-        private void viewHelpToolStripMenuItem_Click(object sender, EventArgs e)
-        {
-            try
-            {
-                System.Diagnostics.Process.Start("https://www.hiimray.co.uk/software-fizzy-launcher");
-            }
-            catch
-            {
-                // do nothing
-            }
-        }
-
-        private void aboutToolStripMenuItem_Click(object sender, EventArgs e) => MessageBox.Show(Application.ProductName + " v" + Application.ProductVersion, "About", MessageBoxButtons.OK, MessageBoxIcon.Information);
-
-        private void notifyIcon1_MouseClick(object sender, MouseEventArgs e)
-        {
-            if (e.Button == MouseButtons.Left)
-            {
-                this.Visible = !this.Visible;
-            }
-        }
-
-        private void exitToolStripMenuItem1_Click(object sender, EventArgs e)
-        {
-            requestExit = true;
-            this.Close();
-        }
-
-        private void toolStripMenuItem11_Click(object sender, EventArgs e)
-        {
-            if (this.CurrentSession == null) return;
-
-            this.CurrentSession.EnableAnimation = !this.CurrentSession.EnableAnimation;
-
-            toolStripMenuItem11.Checked = this.CurrentSession.EnableAnimation;
-        }
-
-        private void toolStripMenuItem12_Click(object sender, EventArgs e)
-        {
-            if (this.CurrentSession == null) return;
-
-            this.CurrentSession.EnableBigIconInFolder = !this.CurrentSession.EnableBigIconInFolder;
-
-            toolStripMenuItem12.Checked = this.CurrentSession.EnableBigIconInFolder;
-        }
-
-    }
-}
\ No newline at end of file
diff --git a/MainForm.resx b/MainForm.resx
deleted file mode 100644
index 12b1ad5..0000000
--- a/MainForm.resx
+++ /dev/null
@@ -1,730 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!-- 
-    Microsoft ResX Schema 
-    
-    Version 2.0
-    
-    The primary goals of this format is to allow a simple XML format 
-    that is mostly human readable. The generation and parsing of the 
-    various data types are done through the TypeConverter classes 
-    associated with the data types.
-    
-    Example:
-    
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-                
-    There are any number of "resheader" rows that contain simple 
-    name/value pairs.
-    
-    Each data row contains a name, and value. The row also contains a 
-    type or mimetype. Type corresponds to a .NET class that support 
-    text/value conversion through the TypeConverter architecture. 
-    Classes that don't support this are serialized and stored with the 
-    mimetype set.
-    
-    The mimetype is used for serialized objects, and tells the 
-    ResXResourceReader how to depersist the object. This is currently not 
-    extensible. For a given mimetype the value must be set accordingly:
-    
-    Note - application/x-microsoft.net.object.binary.base64 is the format 
-    that the ResXResourceWriter will generate, however the reader can 
-    read any of the formats listed below.
-    
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-    
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array 
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <metadata name="contextMenuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>17, 17</value>
-  </metadata>
-  <metadata name="saveFileDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>172, 17</value>
-  </metadata>
-  <metadata name="openFileDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>308, 17</value>
-  </metadata>
-  <metadata name="notifyIcon1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>448, 17</value>
-  </metadata>
-  <metadata name="contextMenuStrip2.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>561, 17</value>
-  </metadata>
-  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-  <data name="notifyIcon1.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-    <value>
-        AAABAAQAMDAAAAEAIACoJQAARgAAACAgAAABACAAqBAAAO4lAAAYGAAAAQAgAIgJAACWNgAAEBAAAAEA
-        IABoBAAAHkAAACgAAAAwAAAAYAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGxc
-        VU5rW1Tna1tU22paU5BsXVVCgEBABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAaltTZWtbVPxrW1T/a1tU/2tbVP9rW1T/a1tU7mtbU6VrXFNWbVtbDgAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAABqWlR/a1tU/2tbVP9rW1T/a1tU/2tbVP9rW1T/a1tU/2tbVP9rW1T/a1tU+Wta
-        VLprW1Nrb15VHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAVVVVA2tbVJhrW1T/a1tU/2tbVP+NgXz/2NPR/6+mov+Bc23/a1tU/2tb
-        VP9rW1T/a1tU/2tbVP9rW1T/a1tU/2tbVc1sXFSAa1xSMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABtSUkHa1xUqmtbVP9rW1T/a1tU/5iNiP/6+fn/////////
-        ////////6+no/7+4tf+Sh4L/bV5X/2tbVP9rW1T/a1tU/2tbVP9rW1T/a1tU/2tbVOFrXFOZallTTW1J
-        SQcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGlaWhFqW1TCa1tU/2tbVP9rW1T/o5mV//38
-        /P//////////////////////////////////////9PPy/8jDwP+cko3/c2Nd/2tbVP9rW1T/a1tU/2tb
-        VP9rW1T/a1tU/2tbVPVrW1SzalxUXmlaWhEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAalhYHWtbVNRrW1T/a1tU/2tb
-        VP+1rar/////////////////////////////////////////////////////////////////+vn5/9LN
-        y/+lm5f/eGpj/2tbVP9rW1T/a1tU/2tbVP9rW1T/a1tU/2tbVPtrWlS9bFxVb2xdVSEAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABrWVMra1tU42tb
-        VP9rW1T/bV1W/8S9u///////////////////////////////////////////////////////////////
-        /////////////////////////v7+/97a2f+xqKT/g3Zw/2tbVP9rW1T/a1tU/2tbVP9rW1T/a1tU/2tb
-        VP5qW1V4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGpZ
-        VTxrW1Tua1tU/2tbVP9wYVr/0czK////////////////////////////////////////////////////
-        /////////////////////////////////////////////////////////////+ro5/+8tbL/j4N+/21d
-        Vv9rW1T/a1tU/2tbVP9rW1TpAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAbFxTUGtbVPZrW1T/a1tU/3VnYP/d2df/////////////////////////////////////////
-        ////////////////////////////////////////////////////////////////////////////////
-        //////////////Tz8v/Iw8D/dmdh/2tbVP9rW1T/blpTJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAABsXFRha1tU+2tbVP9rW1T/emxl/+Th4P//////////////////////////////
-        ////////////////////////////////////////////////////////////////////////////////
-        ////////////////////////////////////////m5CL/2tbVP9rW1T/a1tTXwAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGtaVHdrW1T/a1tU/2tbVP+DdnD/7uzs/////////////Pvw//z6
-        7v/8+u7//Pru//z67v/8+u7//Pru//z67v/9/PT///////////////////////z4+f/79fX/+/X1//v1
-        9f/79fX/+/X1//v19f/79fX//Pb2////////////////////////////vLWy/2tbVP9rW1T/a1xTmQAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVVVUDa1tUmGtbVP9rW1T/a1tU/4t/ev/08/L/////////
-        ///cyT7/0bcA/9G3AP/RtwD/0bcA/9G3AP/RtwD/0bcA/9G3AP/RtwD/6Nt+////////////4bG1/8Rl
-        bP/EZWz/xGVs/8RlbP/EZWz/xGVs/8RlbP/EZWz/xGVs/9KKkP//////////////////////3tvZ/2tb
-        VP9rW1T/a1tU1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG1JSQdrW1Sra1tU/2tbVP9rW1T/mY6J//r5
-        +f////////////389f/RtwD/0bcA/9G3AP/RtwD/0bcA/9G3AP/RtwD/0bcA/9G3AP/RtwD/28Y1////
-        ////////0IWL/8RlbP/EZWz/xGVs/8RlbP/EZWz/xGVs/8RlbP/EZWz/xGVs/8RlbP/9+fn/////////
-        /////////Pz8/3BhWv9rW1T/a1tU/nFVVRIAAAAAAAAAAAAAAAAAAAAAaVpaEWtcVMNrW1T/a1tU/2tb
-        VP+kmpb//fz8//////////////////389P/RtwD/0bcA/+TVbP/w56r/8Oeq//Dnqv/w56r/8Oeq/93K
-        Qv/RtwD/28Y1////////////0IWL/8RlbP/TjZL/68zO/+vMzv/rzM7/68zO/+vMzv/dpqr/xGVs/8Rl
-        bP/8+Pn//////////////////////46CfP9rW1T/a1tU/2xbVEkAAAAAAAAAAAAAAABsWFgaa1xU0Wtb
-        VP9rW1T/a1tU/7CopP////////////////////////////389P/RtwD/0bcA/+7lov//////////////
-        /////////////+PTY//RtwD/28Y1////////////0IWL/8RlbP/boaX/////////////////////////
-        ///px8n/xGVs/8RlbP/8+Pn//////////////////////7CopP9rW1T/a1tU/2tbVIMAAAAAAAAAAAAA
-        AABqXFTOa1tU/2tbVP9tXlf/xr+9//////////////////////////////////389P/RtwD/0bcA/+7l
-        ov///////////////////////////+PTY//RtwD/28Y1////////////0IWL/8RlbP/boaX/////////
-        ///////////////////px8n/xGVs/8RlbP/8+Pn//////////////////////9LNy/9rW1T/a1tU/2tb
-        VL8AAAAAAAAAAAAAAABrW1Tva1tU/2tbVP/KxML///////////////////////////////////////38
-        9P/RtwD/0bcA/+7lov///////////////////////////+PTY//RtwD/28Y1////////////0IWL/8Rl
-        bP/boaX////////////////////////////px8n/xGVs/8RlbP/8+Pn///////////////////////Py
-        8v9sXFX/a1tU/2tbVPRmZmYFAAAAAAAAAABrW1W4a1tU/2tbVP/Oycf/////////////////////////
-        //////////////389P/RtwD/0bcA/+7lov///////////////////////////+PTY//RtwD/28Y1////
-        ////////0IWL/8RlbP/boaX////////////////////////////px8n/xGVs/8RlbP/8+Pn/////////
-        //////////////////+CdG7/a1tU/2tbVP9sXVM0AAAAAAAAAABqWlR/a1tU/2tbVP+tpKD/////////
-        //////////////////////////////389P/RtwD/0bcA/+7lov///////////////////////////+PT
-        Y//RtwD/28Y1////////////0IWL/8RlbP/boaX////////////////////////////px8n/xGVs/8Rl
-        bP/8+Pn///////////////////////////+jmZX/a1tU/2tbVP9rWlNuAAAAAAAAAABtWlNEa1tU/2tb
-        VP+Lfnn///////////////////////////////////////389P/RtwD/0bcA/93JQf/j1Gb/49Rm/+PU
-        Zv/j1Gb/49Rm/9jCJ//RtwD/28Y1////////////0IWL/8RlbP/NfYL/3KOn/9yjp//co6f/3KOn/9yj
-        p//TjJH/xGVs/8RlbP/8+Pn////////////////////////////Fv7z/a1tU/2tbVP9qW1OoAAAAAAAA
-        AABqVVUMa1tU+2tbVP9uXlf/+fn4//////////////////////////////////389P/RtwD/0bcA/9G3
-        AP/RtwD/0bcA/9G3AP/RtwD/0bcA/9G3AP/RtwD/28c5////////////0IWL/8RlbP/EZWz/xGVs/8Rl
-        bP/EZWz/xGVs/8RlbP/EZWz/xGVs/8Rmbf/9+vr////////////////////////////n5eT/a1tU/2tb
-        VP9rW1TkAAAAAAAAAAAAAAAAa1tUz2tbVP9rW1T/3NjW//////////////////////////////////38
-        9v/axTP/2sUz/9rFM//axTP/2sUz/9rFM//axTP/2sUz/9rFM//bxzj/8Ois////////////2p2i/9CE
-        if/QhIn/0ISJ/9CEif/QhIn/0ISJ/9CEif/QhIn/0ISJ/+GwtP//////////////////////////////
-        ///+/v7/dWdg/2tbVP9rW1T/alhYHQAAAAAAAAAAa1tUlGtbVP9rW1T/ubKv////////////////////
-        ////////////////////////////////////////////////////////////////////////////////
-        ////////////////////////////////////////////////////////////////////////////////
-        ////////////////////////l4uG/2tbVP9rW1T/a1pUWAAAAAAAAAAAbFtVWmtbVP9rW1T/mI2I////
-        ////////////////////////////////////////////////////////////////////////////////
-        ////////////////////////////////////////////////////////////////////////////////
-        ////////////////////////////////////////uLGt/2tbVP9rW1T/a1tUkgAAAAAAAAAAa1pSH2tb
-        VP9rW1T/dmdh//7+/v////////////////////////////////+rnPH/fGTp/3xk6f98ZOn/fGTp/3xk
-        6f98ZOn/fGTp/3xk6f9/aOr/ysD2////////////rOH9/zi4+v8ztvr/M7b6/zO2+v8ztvr/M7b6/zO2
-        +v8ztvr/M7b6/33R/P//////////////////////////////////////2tbV/2tbVP9rW1T/a1tVzQAA
-        AAAAAAAAAAAAAGtbVONrW1T/a1tU/+jm5f////////////////////////////r5/v9cPuT/Wz3k/1s9
-        5P9bPeT/Wz3k/1s95P9bPeT/Wz3k/1s95P9bPeT/gGjq////////////Obj6/wCk+f8ApPn/AKT5/wCk
-        +f8ApPn/AKT5/wCk+f8ApPn/AKT5/wGk+f/3/P//////////////////////////////////+vn5/25f
-        WP9rW1T/a1tU/GpVVQwAAAAAAAAAAGtcVKprW1T/a1tU/8bAvf////////////////////////////j3
-        /v9bPeT/Wz3k/4Vu6/+di+//nYvv/52L7/+di+//nYvv/3Rb6P9bPeT/fWXq////////////Nbf6/wCk
-        +f8nsvr/Zsj7/2bI+/9myPv/Zsj7/2bI+/9Bu/v/AKT5/wCk+f/0+///////////////////////////
-        /////////////4p9eP9rW1T/a1tU/2xdVUIAAAAAAAAAAGtbVHBrW1T/a1tU/6Sblv//////////////
-        //////////////j3/v9bPeT/Wz3k/8O49f///////////////////////////5uI7v9bPeT/fWXq////
-        ////////Nbf6/wCk+f9jx/v///////////////////////////+i3v3/AKT5/wCk+f/0+///////////
-        /////////////////////////////6yjn/9rW1T/a1tU/2pcVH0AAAAAAAAAAGxdUzRrW1T/a1tU/4J0
-        bv////////////////////////////j3/v9bPeT/Wz3k/8O49f///////////////////////////5uI
-        7v9bPeT/fWXq////////////Nbf6/wCk+f9jx/v///////////////////////////+i3v3/AKT5/wCk
-        +f/0+////////////////////////////////////////87Jx/9rW1T/a1tU/2tbVbgAAAAAAAAAAGZm
-        ZgVrW1T0a1tU/2xcVf/z8vL///////////////////////j3/v9bPeT/Wz3k/8O49f//////////////
-        /////////////5uI7v9bPeT/fWXq////////////Nbf6/wCk+f9jx/v/////////////////////////
-        //+i3v3/AKT5/wCk+f/0+////////////////////////////////////////8rEwv9rW1T/a1tU/2tb
-        VO8AAAAAAAAAAAAAAABrW1S/a1tU/2tbVP/Szcv///////////////////////j3/v9bPeT/Wz3k/8O4
-        9f///////////////////////////5uI7v9bPeT/fWXq////////////Nbf6/wCk+f9jx/v/////////
-        //////////////////+i3v3/AKT5/wCk+f/0+///////////////////////////////////xr+9/21e
-        V/9rW1T/a1tU/2pcVM4AAAAAAAAAAAAAAABrWlSFa1tU/2tbVP+xqaX///////////////////////j3
-        /v9bPeT/Wz3k/8O49f///////////////////////////5uI7v9bPeT/fWXq////////////Nbf6/wCk
-        +f9jx/v///////////////////////////+i3v3/AKT5/wCk+f/0+///////////////////////////
-        //+6sq//bFxV/2tbVP9rW1T/a1tT1m9eVR4AAAAAAAAAAAAAAABpXFVLa1tU/2tbVP+Pg37/////////
-        //////////////j3/v9bPeT/Wz3k/6CP7//Ivvb/yL72/8i+9v/Ivvb/yL72/4Vv6/9bPeT/fWXq////
-        ////////Nbf6/wCk+f9CvPv/quH9/6rh/f+q4f3/quH9/6rh/f9sy/z/AKT5/wCk+f/0+///////////
-        /////////f39/6ifmv9rW1T/a1tU/2tbVP9rW1TIZllZFAAAAAAAAAAAAAAAAAAAAABpWloRa1tU/Wtb
-        VP9wYVr//Pv7//////////////////j3/v9bPeT/Wz3k/1s95P9bPeT/Wz3k/1s95P9bPeT/Wz3k/1s9
-        5P9bPeT/fWXq////////////Nbf6/wCk+f8ApPn/AKT5/wCk+f8ApPn/AKT5/wCk+f8ApPn/AKT5/wCk
-        +f/1+//////////////7+vr/nZKO/2tbVP9rW1T/a1tU/2tcVbJmZk0KAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAa1tT1mtbVP9rW1T/4Nzb//////////////////j3/v9bPeT/Wz3k/1s95P9bPeT/Wz3k/1s9
-        5P9bPeT/Wz3k/1s95P9bPeT/rJ3x////////////Nbf6/wCk+f8ApPn/AKT5/wCk+f8ApPn/AKT5/wCk
-        +f8ApPn/AKT5/z66+v////////////b19P+Pg37/a1tU/2tbVP9rW1T/a1tTn4BAQAQAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAa1pUm2tbVP9rW1T/vbaz//////////////////7+///08v3/9PL9//Ty
-        /f/08v3/9PL9//Ty/f/08v3/9PL9//Ty/f/49/7/////////////////8vr//+75///u+f//7vn//+75
-        ///u+f//7vn//+75///u+f//8Pr/////////////8O/u/4Z5dP9rW1T/a1tU/2tbVP9rXFSIAAAAAQAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbFxUYWtbVP9rW1T/nJGM////////////////////
-        ////////////////////////////////////////////////////////////////////////////////
-        ///////////////////////////////////////////////////n5eT/fG5o/2tbVP9rW1T/a1tU/Gta
-        VWkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAblpTJWtbVP9rW1T/dmdh/8jD
-        wP/08/L/////////////////////////////////////////////////////////////////////////
-        /////////////////////////////////////////////////////////////93Z1/91Z2D/a1tU/2tb
-        VP9rW1T2bFxTUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWtb
-        VOlrW1T/a1tU/2tbVP9tXVb/j4N+/7y1sv/q6Of/////////////////////////////////////////
-        ////////////////////////////////////////////////////////////////////////0czK/3Bh
-        Wv9rW1T/a1tU/2tbVO5qWVU8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAGpbVXhrW1T+a1tU/2tbVP9rW1T/a1tU/2tbVP9rW1T/g3Zw/7GopP/e2tn//v7+////
-        ////////////////////////////////////////////////////////////////////////////////
-        ///Evbv/bV1W/2tbVP9rW1T/a1tU42tZUysAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsXVUhbFxVb2taVL1rW1T7a1tU/2tbVP9rW1T/a1tU/2tb
-        VP9rW1T/eGpj/6Wbl//Szcv/+vn5////////////////////////////////////////////////////
-        /////////////7Wtqv9rW1T/a1tU/2tbVP9rW1TUalhYHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABpWloRbFpUVWtb
-        U6JrW1Twa1tU/2tbVP9rW1T/a1tU/2tbVP9rW1T/cGFa/5KHgv+/uLX/8O/u////////////////////
-        ///////////////////9/f3/p56a/2tbVP9rW1T/a1tU/2pbVcdmWVkUAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAABVVVUDallVPGtbVJFrW1Pia1tU/2tbVP9rW1T/a1tU/2tbVP9rW1T/bFxV/4l8
-        dv+1ran/4d7d//////////////////v6+v+cko3/a1tU/2tbVP9rW1T/a1tUsXFVVQkAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa1xSMmxcVIBrW1XNa1tU/2tb
-        VP9rW1T/a1tU/2tbVP9rW1T/a1tU/4Fzbf+vpqL/2NPR/42BfP9rW1T/a1tU/2tbVP9rW1SYVVVVAwAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAb15VHmtbU2trWlS6a1tU+WtbVP9rW1T/a1tU/2tbVP9rW1T/a1tU/2tbVP9rW1T/a1tU/2pa
-        VH8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbVtbDmtcU1ZrW1Ola1tU7mtbVP9rW1T/a1tU/2tb
-        VP9rW1T8altTZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgEBABGxd
-        VUJqWlOQa1tU22tbVOdsXFVOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//4H///+sEP//AD///6wQ//4AB///rBD/+AAA//+sEP/w
-        AAAP/6wQ/+AAAAH/rBD/wAAAAD+sEP+AAAAAH6wQ/wAAAAAPrBD+AAAAAA+sEPwAAAAAD6wQ+AAAAAAP
-        rBDgAAAAAA+sEMAAAAAAB6wQgAAAAAAHrBAAAAAAAAesEAAAAAAAB6wQAAAAAAADrBAAAAAAAAOsEAAA
-        AAAAA6wQAAAAAAADrBAAAAAAAAOsEIAAAAAAAawQgAAAAAABrBCAAAAAAAGsEIAAAAAAAawQwAAAAAAA
-        rBDAAAAAAACsEMAAAAAAAKwQwAAAAAAArBDAAAAAAACsEOAAAAAAAKwQ4AAAAAAArBDgAAAAAAGsEOAA
-        AAAAA6wQ8AAAAAAHrBDwAAAAAA+sEPAAAAAAP6wQ8AAAAAB/rBDwAAAAAP+sEPgAAAAB/6wQ/AAAAAP/
-        rBD/gAAAB/+sEP/wAAAP/6wQ//8AAB//rBD//+AAf/+sEP///AD//6wQ////gf//rBAoAAAAIAAAAEAA
-        AAABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAABsXFRha1tU7GtbVcFqW1RzalxVJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAbFtVe2tbVP5rW1T/a1tU/2tbVP9rW1T/a1tT1mtcVIhrWVU5gICAAgAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAVVVVA2xbVJVrW1T/bV5X/8K7uf/RzMr/pJqW/3hpY/9rW1T/a1tU/2tb
-        VP9rW1TpalxTnGxcVU5mZk0KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAG1JSQdrW1Spa1tU/29fWf/Oycf//////////////////v7+/+He
-        3f+1ran/iXx2/2tbVP9rW1T/a1tU/2tbVPZqW1W7bFxVb2xYWBoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwYFAQbFxUwGtbVP91ZmD+3trZ////////////////////
-        ////////////////////////6efm/7y0sf+Ogn3/bV1W/2tbVP9rW1T/a1tU/WtbVMZrWlR3ZlVVDwAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaF5VG2tbVNJrW1T/fW9p/+fl5P//////////////
-        ///////////////////////////////////////////////////z8vL/x8G//5uQi/9xYlv/a1tU/2tb
-        VP9rW1SPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGpdVylrW1Tha1tU/4V4cv/w7u7/////////
-        //////////////////////////////////////////////////////////////////////////////r6
-        +v/Evbv/a1tU/2xbVMwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABrXVM3a1tU62tbVP+MgHr/9PPy////
-        ////////////////////////////////////////////////////////////////////////////////
-        //////////////v6+v9vX1n/a1tU+2pVVQwAAAAAAAAAAAAAAAAAAAAAallTTWtbVPVrW1T/mY6K//r5
-        +f///v3/1r8d/9G3AP/RtwD/0bcA/9G3AP/RtwD/07oL//r34//57u//x2xy/8RlbP/EZWz/xGVs/8Rl
-        bP/EZWz/y3d9///+/v///////////4yAev9rW1T/alpSQQAAAAAAAAAAAAAAAGpaVWBrW1T7a1tU/6mg
-        nP/+/v7///////799//RtwD/2cMr/+PUZv/j1Gb/49Rm/9zIPP/RtwD/9vHM//Pg4v/EZWz/0omP/9yj
-        p//co6f/3KOn/85/hf/EZWz//fr6////////////rqai/2tbVP9sW1V7AAAAAAAAAABrW1R5a1tU/2xc
-        Vf+4sa3//////////////////v33/9G3AP/k1Wz/////////////////7OGW/9G3AP/28cz/8+Di/8Rl
-        bP/nwML/////////////////3aaq/8RlbP/9+vr////////////RzMn/a1tU/2pbVLYAAAAAAAAAAGtb
-        VO5rW1T/w726///////////////////////+/ff/0bcA/+TVbP/////////////////s4Zb/0bcA//bx
-        zP/z4OL/xGVs/+fAwv/////////////////dpqr/xGVs//36+v////////////Lw8P9rW1T/a1tU74CA
-        gAIAAAAAa1tUxWtbVP/Z1dP///////////////////////799//RtwD/5NVs/////////////////+zh
-        lv/RtwD/9vHM//Pg4v/EZWz/58DC/////////////////92mqv/EZWz//fr6/////////////////4By
-        bP9rW1T/aF1RLAAAAABqXFSLa1tU/7iwrf///////////////////////v33/9G3AP/dyUH/7eKZ/+3i
-        mf/t4pn/4dBa/9G3AP/28cz/8+Di/8RlbP/Zm6D/58HE/+fBxP/nwcT/04yR/8RlbP/9+vr/////////
-        ////////opeT/2tbVP9qW1NlAAAAAGtbVVFrW1T/louG///////////////////////+/ff/0bcA/9G3
-        AP/RtwD/0bcA/9G3AP/RtwD/0bcB//n12//z4OL/xGVs/8RlbP/EZWz/xGVs/8RlbP/EZWz/x2xy//79
-        /f/////////////////Dvbr/a1tU/2tbU58AAAAAaF1RFmtbVP90ZV///v7+///////////////////+
-        /f/28cz/9vHM//bxzP/28cz/9vHM//bxzP/49dr///////35+f/z4OL/8+Di//Pg4v/z4OL/8+Di//Pg
-        4v/47e7//////////////////////+Xi4f9rW1T/altU2gAAAAAAAAAAa1xT3GtbVP/m4+L/////////
-        /////////////+zp/P/e2Pr/3tj6/97Y+v/e2Pr/3tj6/+fj+////////////9ry/v/M7f7/zO3+/8zt
-        /v/M7f7/zO3+/+L1/v///////////////////////v7+/3VmX/9rW1T+aF1RFgAAAABsWlSha1tU/8S+
-        u//////////////////8/P//YkXl/1s95P9bPeT/Wz3k/1s95P9bPeT/XD7k/+jk+//b8v7/AaT5/wCk
-        +f8ApPn/AKT5/wCk+f8ApPn/C6j5//v+////////////////////////lYmE/2tbVP9rWlRPAAAAAGpc
-        VGdrW1T/o5mU//////////////////r5/v9bPeT/hW7r/72x9P+9sfT/vbH0/5WB7v9bPeT/3tj6/8zt
-        /v8ApPn/WsT7/5nb/f+Z2/3/mdv9/0G7+/8ApPn/9/z///////////////////////+2r6v/a1tU/2pb
-        VIkAAAAAaF1RLGtbVP+Acmz/////////////////+vn+/1s95P+gj+//////////////////u6/0/1s9
-        5P/e2Pr/zO3+/wCk+f+W2v3/////////////////bMv8/wCk+f/3/P///////////////////////9nV
-        0/9rW1T/a1tUxQAAAACAgIACa1tU72tbVP/y8PD////////////6+f7/Wz3k/6CP7///////////////
-        //+7r/T/Wz3k/97Y+v/M7f7/AKT5/5ba/f////////////////9sy/z/AKT5//f8////////////////
-        ////////w726/2tbVP9rW1TuAAAAAAAAAABqW1S2a1tU/9HMyf////////////r5/v9bPeT/oI/v////
-        /////////////7uv9P9bPeT/3tj6/8zt/v8ApPn/ltr9/////////////////2zL/P8ApPn/9/z/////
-        /////////////7ixrf9sXFX/a1tU/2tbVHkAAAAAAAAAAGpcVH1rW1T/r6ej////////////+vn+/1s9
-        5P93Xun/nYvv/52L7/+di+//gmvq/1s95P/e2Pr/zO3+/wCk+f88ufr/Zsj7/2bI+/9myPv/K7P6/wCk
-        +f/3/P////////7+/v+upaH/a1tU/2tbVPxqXFRnAAAAAAAAAAAAAAAAa1tUQ2tbVP+NgXz/////////
-        ///6+f7/Wz3k/1s95P9bPeT/Wz3k/1s95P9bPeT/YkXl/+3q/P/M7f7/AKT5/wCk+f8ApPn/AKT5/wCk
-        +f8ApPn/Ha76//3+///7+vr/nZOO/2tbVP9rWlT4altVVAAAAAAAAAAAAAAAAAAAAAB0XV0La1tU+29f
-        Wf/7+vr/////////////////////////////////////////////////////////////////////////
-        ////////////////////////9vX0/5CEfv9rW1T/bFxU72pZVTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AABsW1TMa1tU/8S9u//6+vr/////////////////////////////////////////////////////////
-        //////////////////////////////Du7v+FeHL/a1tU/2tbVOFqXVcpAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAGtbVI9rW1T/a1tU/3FiW/+bkIv/x8G///Py8v//////////////////////////////
-        ///////////////////////////////////n5eT/fW9p/2tbVP9rW1TSaF5VGwAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAZlVVD2taVHdrW1TGa1tU/WtbVP9rW1T/bV1W/46Cff+8tLH/6efm////
-        ////////////////////////////////////////3trZ/3ZnYf9rW1T/bFxUwHBgUBAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmWVkUalxUXmtcVKprW1Tya1tU/2tb
-        VP9rW1T/f3Fr/6uinv/Y09H//fz8/////////////////9LNy/9xYVv/a1tU/2paVa9xVVUJAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGZm
-        TQpsXFVOalxTnGtbVOlrW1T/a1tU/2tbVP94aWP/pJqW/9HMyv/Cu7n/bV5X/2tbVP9sW1SVVVVVAwAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAgICAAmtZVTlrXFSIa1tT1mtbVP9rW1T/a1tU/2tbVP9rW1T+bFtVewAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAalxVJGpbVHNrW1XBa1tU7Gxc
-        VGEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/g////wA///wAB//4A
-        AD/8AAAH+AAAB/AAAAfgAAADwAAAA4AAAAMAAAADAAAAAQAAAAEAAAABAAAAAQAAAAGAAAAAgAAAAIAA
-        AACAAAAAgAAAAMAAAADAAAABwAAAA8AAAAfgAAAP4AAAH+AAAD/8AAB//4AA///wA////wf/KAAAABgA
-        AAAwAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAa1tTa2xcVfBsXFW1bFpVZmZcUhkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFrWlSFa1tU/4+Dfv+AcWv8a1tU/2tb
-        VP5tXlbMa1xUemxbVS0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAVVVVA2xbVJprW1T/qqCc//7+/v//////6+no/7+4tf+RhoH9bF1W/mtbVP9tXlbia1xTmWpZ
-        U02AVVUGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0XV0LbFxVtWxcVf+5sq//////////
-        ////////////////////////8/Hx/8bAvf+Zjor/cGBa/WtbVP9tXVbxaltUo2heVRsAAAAAAAAAAAAA
-        AAAAAAAAAAAAAGZZWRRtXFbKbV1W/sjCv///////////////////////////////////////////////
-        ////////+vn5/9LNy/+mnJj/bV1W/WtbVIMAAAAAAAAAAAAAAAAAAAAAaFhYIG1eV9pvYFn808/N////
-        ////////////////////////////////////////////////////////////////////////in55/W1d
-        Vr4AAAAAAAAAAAAAAABoXVEsbV5X53NlXvzd2tj//v78/9S8EP/RtwD/0bcA/9G3AP/RtwD/8Oit/+zN
-        0P/EZWz/xGVs/8RlbP/EZWz/yG91//79/f//////raSg/2xcVfaAQEAEAAAAAGxcVEBtXVbzfG5n++jm
-        5f///////v35/9G3AP/v5qf/9vHM//bxzP/Ywij/7eKZ/+fBxP/NfYP/8+Di//Pg4v/rysz/xGVs//77
-        /P//////z8rH/2tbVP9rXFIyAAAAAG1dVe2CdW/98O/u/////////////v35/9G3AP/38tH/////////
-        ///axTL/7eKZ/+fBxP/Qg4n////////////04+T/xGVs//77/P//////8fDv/2tbVP9sW1RtAAAAAG5e
-        Vs+ViYT+/////////////////v35/9G3AP/38tH////////////axTL/7eKZ/+fBxP/Qg4n/////////
-        ///04+T/xGVs//77/P///////////31waftqW1OoAAAAAGxaU5NyY138/v7+/////////////v35/9G3
-        AP/Zwyr/2sUz/9rFM//Tugr/7eOb/+fBxP/Ga3L/0ISJ/9CEif/OfoT/xGVs//78/P///////////6CW
-        kv9tXlflAAAAAGpcU1lrW1T/5ePh//////////////79/+3imf/t4pn/7eKZ/+3imf/t4pr/+/nr//bm
-        5//nwcT/58HE/+fBxP/nwcT/7M3P/////////////////8K7uf9rW1T/alhYHW9eVR5rW1T/w726////
-        /////////////8rA9v+9sfT/vbH0/72x9P++svT/8vD9/+v4//+a2/3/mdv9/5nb/f+Z2/3/rOH9////
-        /////////////+Th4P9rW1T/bFtVVwAAAABtXlfnopeT/////////////Pv+/1s95P92Xej/fGTp/3xk
-        6f9hReX/v7P0/5vb/f8KqPn/M7b6/zO2+v8qs/r/AKT5//r9//////////////7+/v9yY1z8a1tUkQAA
-        AABqW1OofXBp+///////////+/r+/1s95P/h3Pr///////////97Y+n/vbH0/5nb/f8ytvr/////////
-        ///R7/7/AKT5//n9//////////////////+ViYT+bl5WzwAAAABsW1Rta1tU//Hw7///////+/r+/1s9
-        5P/h3Pr///////////97Y+n/vbH0/5nb/f8ytvr////////////R7/7/AKT5//n9//////////////Dv
-        7v+CdW/9bV1V7QAAAABsXVM0a1tU/9DLyf//////+/r+/1s95P/GvPb/3tj6/97Y+v91W+j/vbH0/5nb
-        /f8osvr/zO3+/8zt/v+n4P3/AKT5//n9////////6+no/35wavxsXVX1altURgAAAACAQEAEbV1W9q6m
-        ov//////+/r+/1s95P9bPeT/Wz3k/1s95P9bPeT/ysH2/5nb/f8ApPn/AKT5/wCk+f8ApPn/EKr5//z+
-        ///g3dv/dmdh/G1dVuptWFMxAAAAAAAAAAAAAAAAbFxVv4x/ev3/////////////////////////////
-        /////////////////////////////////////////////9jT0f9xYVv8bV5W32pcVSQAAAAAAAAAAAAA
-        AAAAAAAAa1tUg21dVv2mnJj/0s3L//r5+f//////////////////////////////////////////////
-        ////////yMK//21dVv5tXFbKZllZFAAAAAAAAAAAAAAAAAAAAAAAAAAAaF5VG2pbVKNsXFXwa1tU/3Bg
-        Wv2Zjor+xsC9//Px8f////////////////////////////////+5sq//bFxV/2xcVbV0XV0LAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVVVUDallVPGtcVIhtXVbba1tU/2tbVP6Ie3X9ta2p/+He
-        3f///////v7+/66mov9rW1T/bFpUoWZmZgUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAbFtVLWtcVHpsXVXLa1tU/mtbVP9/cWv7j4N+/2tbVP9rWlSFAAAAAQAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAZlxSGWxaVWZsXFW1bFxV8GtbU2sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8H
-        /0H8AP9B+AAPQfAAA0HgAANBwAADQYAAAUEAAAFBAAABQQAAAUEAAAFBAAAAQQAAAEGAAABBgAAAQYAA
-        AEGAAABBgAABQcAAA0HAAAdBwAAPQfAAH0H/AD9B/+D/QSgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJhW3tvYFn0dWZgsmxbVVdmVVUPAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgICAAnFiW5eCdG705OHg/8a/vf+UiYT0cWFa+Xdo
-        YcptXFVsb15VHgAAAAAAAAAAAAAAAAAAAAAAAAAAbUlJB3NkXbKMgHr09/b2//////////////////r5
-        +f/Szcv/oJeS9XNlXfZzZV7baVxVJwAAAAAAAAAAbVtbDnNjXciZj4n1+/r6////////////////////
-        ///////////////////+/v7/pJqW+WxdVnYAAAAAamBVGHJkXdmnnpn2/f37/9S8E//axTP/2MIo/+XX
-        cP/eqa3/zX2D/9CEif/IcHf//v39/83Ixf92Z2C8AAAAAHJjXOC5sK36//////7++//bxjb///////Xw
-        yv/k1Gf/3KOn//Pf4P//////0IaL//79/f/w7u7/cWFb8gAAAAF0Zl/i4+Df///////+/vv/2cMr//bx
-        zP/u5aL/5NRn/9yjp//px8n/8+Di/85/hf/+/f3//////3hpYvNuWlMldGReo8K7uf////////79/+PU
-        Zv/j1Gb/49Rm//Dorv/qyMv/3KOn/9yjp//eqKz///7+//////+ajoryalxUXmpaVWCbkYzz//////7+
-        //+ikfD/nYvv/52L7//Lwfb/ruL9/2bI+/9myPv/b8z8//7/////////wbq3/3RlXqJuWlMleGli8///
-        ///8/P//d17p/97Y+v/DuPX/nYvv/2fJ+/+i3v3/zO3+/yuz+v/7/v///////+Pg3/90Zl/iAAAAAXFh
-        W/Lw7u7//Pz//35m6v//////3df5/52L7/9nyfv/yuz+//////82t/r/+/7///////+5sK36cmNc4AAA
-        AAB2Z2G+zsnH//z8//9iReX/fGTp/3Vb6P+jkvD/Z8n7/yiy+v8ztvr/E6v5//v9/v+to5/4c2Nd3m1b
-        UhwAAAAAbF1WdqSalvn+/v7///////////////////////////////////////v6+v+Zj4r2c2ReyW1b
-        Ww4AAAAAAAAAAGlcVSdzZV7bc2Vd9qCXkvXSzcv/+vn5//////////////////f29v+MgHr0c2Rdsm1J
-        SQcAAAAAAAAAAAAAAAAAAAAAAAAAAG9eVR5rW1NrdGRexnBhWfiShoHvxr+9/uTh4P+CdG70c2RdmYCA
-        gAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmVVUPbFtVV3VmYLJvYFn0cmFbewAA
-        AAAAAAAAAAAAAAAAAAAAAAAA+D+sQeAHrEHAAaxBgAGsQQABrEEAAKxBAACsQQAArEEAAKxBAACsQQAA
-        rEGAAKxBgAGsQYADrEHgB6xB/B+sQQ==
-</value>
-  </data>
-  <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-    <value>
-        AAABAAQAMDAAAAEAIACoJQAARgAAACAgAAABACAAqBAAAO4lAAAYGAAAAQAgAIgJAACWNgAAEBAAAAEA
-        IABoBAAAHkAAACgAAAAwAAAAYAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGxc
-        VU5rW1Tna1tU22paU5BsXVVCgEBABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAaltTZWtbVPxrW1T/a1tU/2tbVP9rW1T/a1tU7mtbU6VrXFNWbVtbDgAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAABqWlR/a1tU/2tbVP9rW1T/a1tU/2tbVP9rW1T/a1tU/2tbVP9rW1T/a1tU+Wta
-        VLprW1Nrb15VHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAVVVVA2tbVJhrW1T/a1tU/2tbVP+NgXz/2NPR/6+mov+Bc23/a1tU/2tb
-        VP9rW1T/a1tU/2tbVP9rW1T/a1tU/2tbVc1sXFSAa1xSMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABtSUkHa1xUqmtbVP9rW1T/a1tU/5iNiP/6+fn/////////
-        ////////6+no/7+4tf+Sh4L/bV5X/2tbVP9rW1T/a1tU/2tbVP9rW1T/a1tU/2tbVOFrXFOZallTTW1J
-        SQcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGlaWhFqW1TCa1tU/2tbVP9rW1T/o5mV//38
-        /P//////////////////////////////////////9PPy/8jDwP+cko3/c2Nd/2tbVP9rW1T/a1tU/2tb
-        VP9rW1T/a1tU/2tbVPVrW1SzalxUXmlaWhEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAalhYHWtbVNRrW1T/a1tU/2tb
-        VP+1rar/////////////////////////////////////////////////////////////////+vn5/9LN
-        y/+lm5f/eGpj/2tbVP9rW1T/a1tU/2tbVP9rW1T/a1tU/2tbVPtrWlS9bFxVb2xdVSEAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABrWVMra1tU42tb
-        VP9rW1T/bV1W/8S9u///////////////////////////////////////////////////////////////
-        /////////////////////////v7+/97a2f+xqKT/g3Zw/2tbVP9rW1T/a1tU/2tbVP9rW1T/a1tU/2tb
-        VP5qW1V4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGpZ
-        VTxrW1Tua1tU/2tbVP9wYVr/0czK////////////////////////////////////////////////////
-        /////////////////////////////////////////////////////////////+ro5/+8tbL/j4N+/21d
-        Vv9rW1T/a1tU/2tbVP9rW1TpAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAbFxTUGtbVPZrW1T/a1tU/3VnYP/d2df/////////////////////////////////////////
-        ////////////////////////////////////////////////////////////////////////////////
-        //////////////Tz8v/Iw8D/dmdh/2tbVP9rW1T/blpTJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAABsXFRha1tU+2tbVP9rW1T/emxl/+Th4P//////////////////////////////
-        ////////////////////////////////////////////////////////////////////////////////
-        ////////////////////////////////////////m5CL/2tbVP9rW1T/a1tTXwAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGtaVHdrW1T/a1tU/2tbVP+DdnD/7uzs/////////////Pvw//z6
-        7v/8+u7//Pru//z67v/8+u7//Pru//z67v/9/PT///////////////////////z4+f/79fX/+/X1//v1
-        9f/79fX/+/X1//v19f/79fX//Pb2////////////////////////////vLWy/2tbVP9rW1T/a1xTmQAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVVVUDa1tUmGtbVP9rW1T/a1tU/4t/ev/08/L/////////
-        ///cyT7/0bcA/9G3AP/RtwD/0bcA/9G3AP/RtwD/0bcA/9G3AP/RtwD/6Nt+////////////4bG1/8Rl
-        bP/EZWz/xGVs/8RlbP/EZWz/xGVs/8RlbP/EZWz/xGVs/9KKkP//////////////////////3tvZ/2tb
-        VP9rW1T/a1tU1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG1JSQdrW1Sra1tU/2tbVP9rW1T/mY6J//r5
-        +f////////////389f/RtwD/0bcA/9G3AP/RtwD/0bcA/9G3AP/RtwD/0bcA/9G3AP/RtwD/28Y1////
-        ////////0IWL/8RlbP/EZWz/xGVs/8RlbP/EZWz/xGVs/8RlbP/EZWz/xGVs/8RlbP/9+fn/////////
-        /////////Pz8/3BhWv9rW1T/a1tU/nFVVRIAAAAAAAAAAAAAAAAAAAAAaVpaEWtcVMNrW1T/a1tU/2tb
-        VP+kmpb//fz8//////////////////389P/RtwD/0bcA/+TVbP/w56r/8Oeq//Dnqv/w56r/8Oeq/93K
-        Qv/RtwD/28Y1////////////0IWL/8RlbP/TjZL/68zO/+vMzv/rzM7/68zO/+vMzv/dpqr/xGVs/8Rl
-        bP/8+Pn//////////////////////46CfP9rW1T/a1tU/2xbVEkAAAAAAAAAAAAAAABsWFgaa1xU0Wtb
-        VP9rW1T/a1tU/7CopP////////////////////////////389P/RtwD/0bcA/+7lov//////////////
-        /////////////+PTY//RtwD/28Y1////////////0IWL/8RlbP/boaX/////////////////////////
-        ///px8n/xGVs/8RlbP/8+Pn//////////////////////7CopP9rW1T/a1tU/2tbVIMAAAAAAAAAAAAA
-        AABqXFTOa1tU/2tbVP9tXlf/xr+9//////////////////////////////////389P/RtwD/0bcA/+7l
-        ov///////////////////////////+PTY//RtwD/28Y1////////////0IWL/8RlbP/boaX/////////
-        ///////////////////px8n/xGVs/8RlbP/8+Pn//////////////////////9LNy/9rW1T/a1tU/2tb
-        VL8AAAAAAAAAAAAAAABrW1Tva1tU/2tbVP/KxML///////////////////////////////////////38
-        9P/RtwD/0bcA/+7lov///////////////////////////+PTY//RtwD/28Y1////////////0IWL/8Rl
-        bP/boaX////////////////////////////px8n/xGVs/8RlbP/8+Pn///////////////////////Py
-        8v9sXFX/a1tU/2tbVPRmZmYFAAAAAAAAAABrW1W4a1tU/2tbVP/Oycf/////////////////////////
-        //////////////389P/RtwD/0bcA/+7lov///////////////////////////+PTY//RtwD/28Y1////
-        ////////0IWL/8RlbP/boaX////////////////////////////px8n/xGVs/8RlbP/8+Pn/////////
-        //////////////////+CdG7/a1tU/2tbVP9sXVM0AAAAAAAAAABqWlR/a1tU/2tbVP+tpKD/////////
-        //////////////////////////////389P/RtwD/0bcA/+7lov///////////////////////////+PT
-        Y//RtwD/28Y1////////////0IWL/8RlbP/boaX////////////////////////////px8n/xGVs/8Rl
-        bP/8+Pn///////////////////////////+jmZX/a1tU/2tbVP9rWlNuAAAAAAAAAABtWlNEa1tU/2tb
-        VP+Lfnn///////////////////////////////////////389P/RtwD/0bcA/93JQf/j1Gb/49Rm/+PU
-        Zv/j1Gb/49Rm/9jCJ//RtwD/28Y1////////////0IWL/8RlbP/NfYL/3KOn/9yjp//co6f/3KOn/9yj
-        p//TjJH/xGVs/8RlbP/8+Pn////////////////////////////Fv7z/a1tU/2tbVP9qW1OoAAAAAAAA
-        AABqVVUMa1tU+2tbVP9uXlf/+fn4//////////////////////////////////389P/RtwD/0bcA/9G3
-        AP/RtwD/0bcA/9G3AP/RtwD/0bcA/9G3AP/RtwD/28c5////////////0IWL/8RlbP/EZWz/xGVs/8Rl
-        bP/EZWz/xGVs/8RlbP/EZWz/xGVs/8Rmbf/9+vr////////////////////////////n5eT/a1tU/2tb
-        VP9rW1TkAAAAAAAAAAAAAAAAa1tUz2tbVP9rW1T/3NjW//////////////////////////////////38
-        9v/axTP/2sUz/9rFM//axTP/2sUz/9rFM//axTP/2sUz/9rFM//bxzj/8Ois////////////2p2i/9CE
-        if/QhIn/0ISJ/9CEif/QhIn/0ISJ/9CEif/QhIn/0ISJ/+GwtP//////////////////////////////
-        ///+/v7/dWdg/2tbVP9rW1T/alhYHQAAAAAAAAAAa1tUlGtbVP9rW1T/ubKv////////////////////
-        ////////////////////////////////////////////////////////////////////////////////
-        ////////////////////////////////////////////////////////////////////////////////
-        ////////////////////////l4uG/2tbVP9rW1T/a1pUWAAAAAAAAAAAbFtVWmtbVP9rW1T/mI2I////
-        ////////////////////////////////////////////////////////////////////////////////
-        ////////////////////////////////////////////////////////////////////////////////
-        ////////////////////////////////////////uLGt/2tbVP9rW1T/a1tUkgAAAAAAAAAAa1pSH2tb
-        VP9rW1T/dmdh//7+/v////////////////////////////////+rnPH/fGTp/3xk6f98ZOn/fGTp/3xk
-        6f98ZOn/fGTp/3xk6f9/aOr/ysD2////////////rOH9/zi4+v8ztvr/M7b6/zO2+v8ztvr/M7b6/zO2
-        +v8ztvr/M7b6/33R/P//////////////////////////////////////2tbV/2tbVP9rW1T/a1tVzQAA
-        AAAAAAAAAAAAAGtbVONrW1T/a1tU/+jm5f////////////////////////////r5/v9cPuT/Wz3k/1s9
-        5P9bPeT/Wz3k/1s95P9bPeT/Wz3k/1s95P9bPeT/gGjq////////////Obj6/wCk+f8ApPn/AKT5/wCk
-        +f8ApPn/AKT5/wCk+f8ApPn/AKT5/wGk+f/3/P//////////////////////////////////+vn5/25f
-        WP9rW1T/a1tU/GpVVQwAAAAAAAAAAGtcVKprW1T/a1tU/8bAvf////////////////////////////j3
-        /v9bPeT/Wz3k/4Vu6/+di+//nYvv/52L7/+di+//nYvv/3Rb6P9bPeT/fWXq////////////Nbf6/wCk
-        +f8nsvr/Zsj7/2bI+/9myPv/Zsj7/2bI+/9Bu/v/AKT5/wCk+f/0+///////////////////////////
-        /////////////4p9eP9rW1T/a1tU/2xdVUIAAAAAAAAAAGtbVHBrW1T/a1tU/6Sblv//////////////
-        //////////////j3/v9bPeT/Wz3k/8O49f///////////////////////////5uI7v9bPeT/fWXq////
-        ////////Nbf6/wCk+f9jx/v///////////////////////////+i3v3/AKT5/wCk+f/0+///////////
-        /////////////////////////////6yjn/9rW1T/a1tU/2pcVH0AAAAAAAAAAGxdUzRrW1T/a1tU/4J0
-        bv////////////////////////////j3/v9bPeT/Wz3k/8O49f///////////////////////////5uI
-        7v9bPeT/fWXq////////////Nbf6/wCk+f9jx/v///////////////////////////+i3v3/AKT5/wCk
-        +f/0+////////////////////////////////////////87Jx/9rW1T/a1tU/2tbVbgAAAAAAAAAAGZm
-        ZgVrW1T0a1tU/2xcVf/z8vL///////////////////////j3/v9bPeT/Wz3k/8O49f//////////////
-        /////////////5uI7v9bPeT/fWXq////////////Nbf6/wCk+f9jx/v/////////////////////////
-        //+i3v3/AKT5/wCk+f/0+////////////////////////////////////////8rEwv9rW1T/a1tU/2tb
-        VO8AAAAAAAAAAAAAAABrW1S/a1tU/2tbVP/Szcv///////////////////////j3/v9bPeT/Wz3k/8O4
-        9f///////////////////////////5uI7v9bPeT/fWXq////////////Nbf6/wCk+f9jx/v/////////
-        //////////////////+i3v3/AKT5/wCk+f/0+///////////////////////////////////xr+9/21e
-        V/9rW1T/a1tU/2pcVM4AAAAAAAAAAAAAAABrWlSFa1tU/2tbVP+xqaX///////////////////////j3
-        /v9bPeT/Wz3k/8O49f///////////////////////////5uI7v9bPeT/fWXq////////////Nbf6/wCk
-        +f9jx/v///////////////////////////+i3v3/AKT5/wCk+f/0+///////////////////////////
-        //+6sq//bFxV/2tbVP9rW1T/a1tT1m9eVR4AAAAAAAAAAAAAAABpXFVLa1tU/2tbVP+Pg37/////////
-        //////////////j3/v9bPeT/Wz3k/6CP7//Ivvb/yL72/8i+9v/Ivvb/yL72/4Vv6/9bPeT/fWXq////
-        ////////Nbf6/wCk+f9CvPv/quH9/6rh/f+q4f3/quH9/6rh/f9sy/z/AKT5/wCk+f/0+///////////
-        /////////f39/6ifmv9rW1T/a1tU/2tbVP9rW1TIZllZFAAAAAAAAAAAAAAAAAAAAABpWloRa1tU/Wtb
-        VP9wYVr//Pv7//////////////////j3/v9bPeT/Wz3k/1s95P9bPeT/Wz3k/1s95P9bPeT/Wz3k/1s9
-        5P9bPeT/fWXq////////////Nbf6/wCk+f8ApPn/AKT5/wCk+f8ApPn/AKT5/wCk+f8ApPn/AKT5/wCk
-        +f/1+//////////////7+vr/nZKO/2tbVP9rW1T/a1tU/2tcVbJmZk0KAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAa1tT1mtbVP9rW1T/4Nzb//////////////////j3/v9bPeT/Wz3k/1s95P9bPeT/Wz3k/1s9
-        5P9bPeT/Wz3k/1s95P9bPeT/rJ3x////////////Nbf6/wCk+f8ApPn/AKT5/wCk+f8ApPn/AKT5/wCk
-        +f8ApPn/AKT5/z66+v////////////b19P+Pg37/a1tU/2tbVP9rW1T/a1tTn4BAQAQAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAa1pUm2tbVP9rW1T/vbaz//////////////////7+///08v3/9PL9//Ty
-        /f/08v3/9PL9//Ty/f/08v3/9PL9//Ty/f/49/7/////////////////8vr//+75///u+f//7vn//+75
-        ///u+f//7vn//+75///u+f//8Pr/////////////8O/u/4Z5dP9rW1T/a1tU/2tbVP9rXFSIAAAAAQAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbFxUYWtbVP9rW1T/nJGM////////////////////
-        ////////////////////////////////////////////////////////////////////////////////
-        ///////////////////////////////////////////////////n5eT/fG5o/2tbVP9rW1T/a1tU/Gta
-        VWkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAblpTJWtbVP9rW1T/dmdh/8jD
-        wP/08/L/////////////////////////////////////////////////////////////////////////
-        /////////////////////////////////////////////////////////////93Z1/91Z2D/a1tU/2tb
-        VP9rW1T2bFxTUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWtb
-        VOlrW1T/a1tU/2tbVP9tXVb/j4N+/7y1sv/q6Of/////////////////////////////////////////
-        ////////////////////////////////////////////////////////////////////////0czK/3Bh
-        Wv9rW1T/a1tU/2tbVO5qWVU8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAGpbVXhrW1T+a1tU/2tbVP9rW1T/a1tU/2tbVP9rW1T/g3Zw/7GopP/e2tn//v7+////
-        ////////////////////////////////////////////////////////////////////////////////
-        ///Evbv/bV1W/2tbVP9rW1T/a1tU42tZUysAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsXVUhbFxVb2taVL1rW1T7a1tU/2tbVP9rW1T/a1tU/2tb
-        VP9rW1T/eGpj/6Wbl//Szcv/+vn5////////////////////////////////////////////////////
-        /////////////7Wtqv9rW1T/a1tU/2tbVP9rW1TUalhYHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABpWloRbFpUVWtb
-        U6JrW1Twa1tU/2tbVP9rW1T/a1tU/2tbVP9rW1T/cGFa/5KHgv+/uLX/8O/u////////////////////
-        ///////////////////9/f3/p56a/2tbVP9rW1T/a1tU/2pbVcdmWVkUAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAABVVVUDallVPGtbVJFrW1Pia1tU/2tbVP9rW1T/a1tU/2tbVP9rW1T/bFxV/4l8
-        dv+1ran/4d7d//////////////////v6+v+cko3/a1tU/2tbVP9rW1T/a1tUsXFVVQkAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa1xSMmxcVIBrW1XNa1tU/2tb
-        VP9rW1T/a1tU/2tbVP9rW1T/a1tU/4Fzbf+vpqL/2NPR/42BfP9rW1T/a1tU/2tbVP9rW1SYVVVVAwAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAb15VHmtbU2trWlS6a1tU+WtbVP9rW1T/a1tU/2tbVP9rW1T/a1tU/2tbVP9rW1T/a1tU/2pa
-        VH8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbVtbDmtcU1ZrW1Ola1tU7mtbVP9rW1T/a1tU/2tb
-        VP9rW1T8altTZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgEBABGxd
-        VUJqWlOQa1tU22tbVOdsXFVOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//4H///+sEP//AD///6wQ//4AB///rBD/+AAA//+sEP/w
-        AAAP/6wQ/+AAAAH/rBD/wAAAAD+sEP+AAAAAH6wQ/wAAAAAPrBD+AAAAAA+sEPwAAAAAD6wQ+AAAAAAP
-        rBDgAAAAAA+sEMAAAAAAB6wQgAAAAAAHrBAAAAAAAAesEAAAAAAAB6wQAAAAAAADrBAAAAAAAAOsEAAA
-        AAAAA6wQAAAAAAADrBAAAAAAAAOsEIAAAAAAAawQgAAAAAABrBCAAAAAAAGsEIAAAAAAAawQwAAAAAAA
-        rBDAAAAAAACsEMAAAAAAAKwQwAAAAAAArBDAAAAAAACsEOAAAAAAAKwQ4AAAAAAArBDgAAAAAAGsEOAA
-        AAAAA6wQ8AAAAAAHrBDwAAAAAA+sEPAAAAAAP6wQ8AAAAAB/rBDwAAAAAP+sEPgAAAAB/6wQ/AAAAAP/
-        rBD/gAAAB/+sEP/wAAAP/6wQ//8AAB//rBD//+AAf/+sEP///AD//6wQ////gf//rBAoAAAAIAAAAEAA
-        AAABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAABsXFRha1tU7GtbVcFqW1RzalxVJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAbFtVe2tbVP5rW1T/a1tU/2tbVP9rW1T/a1tT1mtcVIhrWVU5gICAAgAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAVVVVA2xbVJVrW1T/bV5X/8K7uf/RzMr/pJqW/3hpY/9rW1T/a1tU/2tb
-        VP9rW1TpalxTnGxcVU5mZk0KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAG1JSQdrW1Spa1tU/29fWf/Oycf//////////////////v7+/+He
-        3f+1ran/iXx2/2tbVP9rW1T/a1tU/2tbVPZqW1W7bFxVb2xYWBoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwYFAQbFxUwGtbVP91ZmD+3trZ////////////////////
-        ////////////////////////6efm/7y0sf+Ogn3/bV1W/2tbVP9rW1T/a1tU/WtbVMZrWlR3ZlVVDwAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaF5VG2tbVNJrW1T/fW9p/+fl5P//////////////
-        ///////////////////////////////////////////////////z8vL/x8G//5uQi/9xYlv/a1tU/2tb
-        VP9rW1SPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGpdVylrW1Tha1tU/4V4cv/w7u7/////////
-        //////////////////////////////////////////////////////////////////////////////r6
-        +v/Evbv/a1tU/2xbVMwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABrXVM3a1tU62tbVP+MgHr/9PPy////
-        ////////////////////////////////////////////////////////////////////////////////
-        //////////////v6+v9vX1n/a1tU+2pVVQwAAAAAAAAAAAAAAAAAAAAAallTTWtbVPVrW1T/mY6K//r5
-        +f///v3/1r8d/9G3AP/RtwD/0bcA/9G3AP/RtwD/07oL//r34//57u//x2xy/8RlbP/EZWz/xGVs/8Rl
-        bP/EZWz/y3d9///+/v///////////4yAev9rW1T/alpSQQAAAAAAAAAAAAAAAGpaVWBrW1T7a1tU/6mg
-        nP/+/v7///////799//RtwD/2cMr/+PUZv/j1Gb/49Rm/9zIPP/RtwD/9vHM//Pg4v/EZWz/0omP/9yj
-        p//co6f/3KOn/85/hf/EZWz//fr6////////////rqai/2tbVP9sW1V7AAAAAAAAAABrW1R5a1tU/2xc
-        Vf+4sa3//////////////////v33/9G3AP/k1Wz/////////////////7OGW/9G3AP/28cz/8+Di/8Rl
-        bP/nwML/////////////////3aaq/8RlbP/9+vr////////////RzMn/a1tU/2pbVLYAAAAAAAAAAGtb
-        VO5rW1T/w726///////////////////////+/ff/0bcA/+TVbP/////////////////s4Zb/0bcA//bx
-        zP/z4OL/xGVs/+fAwv/////////////////dpqr/xGVs//36+v////////////Lw8P9rW1T/a1tU74CA
-        gAIAAAAAa1tUxWtbVP/Z1dP///////////////////////799//RtwD/5NVs/////////////////+zh
-        lv/RtwD/9vHM//Pg4v/EZWz/58DC/////////////////92mqv/EZWz//fr6/////////////////4By
-        bP9rW1T/aF1RLAAAAABqXFSLa1tU/7iwrf///////////////////////v33/9G3AP/dyUH/7eKZ/+3i
-        mf/t4pn/4dBa/9G3AP/28cz/8+Di/8RlbP/Zm6D/58HE/+fBxP/nwcT/04yR/8RlbP/9+vr/////////
-        ////////opeT/2tbVP9qW1NlAAAAAGtbVVFrW1T/louG///////////////////////+/ff/0bcA/9G3
-        AP/RtwD/0bcA/9G3AP/RtwD/0bcB//n12//z4OL/xGVs/8RlbP/EZWz/xGVs/8RlbP/EZWz/x2xy//79
-        /f/////////////////Dvbr/a1tU/2tbU58AAAAAaF1RFmtbVP90ZV///v7+///////////////////+
-        /f/28cz/9vHM//bxzP/28cz/9vHM//bxzP/49dr///////35+f/z4OL/8+Di//Pg4v/z4OL/8+Di//Pg
-        4v/47e7//////////////////////+Xi4f9rW1T/altU2gAAAAAAAAAAa1xT3GtbVP/m4+L/////////
-        /////////////+zp/P/e2Pr/3tj6/97Y+v/e2Pr/3tj6/+fj+////////////9ry/v/M7f7/zO3+/8zt
-        /v/M7f7/zO3+/+L1/v///////////////////////v7+/3VmX/9rW1T+aF1RFgAAAABsWlSha1tU/8S+
-        u//////////////////8/P//YkXl/1s95P9bPeT/Wz3k/1s95P9bPeT/XD7k/+jk+//b8v7/AaT5/wCk
-        +f8ApPn/AKT5/wCk+f8ApPn/C6j5//v+////////////////////////lYmE/2tbVP9rWlRPAAAAAGpc
-        VGdrW1T/o5mU//////////////////r5/v9bPeT/hW7r/72x9P+9sfT/vbH0/5WB7v9bPeT/3tj6/8zt
-        /v8ApPn/WsT7/5nb/f+Z2/3/mdv9/0G7+/8ApPn/9/z///////////////////////+2r6v/a1tU/2pb
-        VIkAAAAAaF1RLGtbVP+Acmz/////////////////+vn+/1s95P+gj+//////////////////u6/0/1s9
-        5P/e2Pr/zO3+/wCk+f+W2v3/////////////////bMv8/wCk+f/3/P///////////////////////9nV
-        0/9rW1T/a1tUxQAAAACAgIACa1tU72tbVP/y8PD////////////6+f7/Wz3k/6CP7///////////////
-        //+7r/T/Wz3k/97Y+v/M7f7/AKT5/5ba/f////////////////9sy/z/AKT5//f8////////////////
-        ////////w726/2tbVP9rW1TuAAAAAAAAAABqW1S2a1tU/9HMyf////////////r5/v9bPeT/oI/v////
-        /////////////7uv9P9bPeT/3tj6/8zt/v8ApPn/ltr9/////////////////2zL/P8ApPn/9/z/////
-        /////////////7ixrf9sXFX/a1tU/2tbVHkAAAAAAAAAAGpcVH1rW1T/r6ej////////////+vn+/1s9
-        5P93Xun/nYvv/52L7/+di+//gmvq/1s95P/e2Pr/zO3+/wCk+f88ufr/Zsj7/2bI+/9myPv/K7P6/wCk
-        +f/3/P////////7+/v+upaH/a1tU/2tbVPxqXFRnAAAAAAAAAAAAAAAAa1tUQ2tbVP+NgXz/////////
-        ///6+f7/Wz3k/1s95P9bPeT/Wz3k/1s95P9bPeT/YkXl/+3q/P/M7f7/AKT5/wCk+f8ApPn/AKT5/wCk
-        +f8ApPn/Ha76//3+///7+vr/nZOO/2tbVP9rWlT4altVVAAAAAAAAAAAAAAAAAAAAAB0XV0La1tU+29f
-        Wf/7+vr/////////////////////////////////////////////////////////////////////////
-        ////////////////////////9vX0/5CEfv9rW1T/bFxU72pZVTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AABsW1TMa1tU/8S9u//6+vr/////////////////////////////////////////////////////////
-        //////////////////////////////Du7v+FeHL/a1tU/2tbVOFqXVcpAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAGtbVI9rW1T/a1tU/3FiW/+bkIv/x8G///Py8v//////////////////////////////
-        ///////////////////////////////////n5eT/fW9p/2tbVP9rW1TSaF5VGwAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAZlVVD2taVHdrW1TGa1tU/WtbVP9rW1T/bV1W/46Cff+8tLH/6efm////
-        ////////////////////////////////////////3trZ/3ZnYf9rW1T/bFxUwHBgUBAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmWVkUalxUXmtcVKprW1Tya1tU/2tb
-        VP9rW1T/f3Fr/6uinv/Y09H//fz8/////////////////9LNy/9xYVv/a1tU/2paVa9xVVUJAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGZm
-        TQpsXFVOalxTnGtbVOlrW1T/a1tU/2tbVP94aWP/pJqW/9HMyv/Cu7n/bV5X/2tbVP9sW1SVVVVVAwAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAgICAAmtZVTlrXFSIa1tT1mtbVP9rW1T/a1tU/2tbVP9rW1T+bFtVewAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAalxVJGpbVHNrW1XBa1tU7Gxc
-        VGEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/g////wA///wAB//4A
-        AD/8AAAH+AAAB/AAAAfgAAADwAAAA4AAAAMAAAADAAAAAQAAAAEAAAABAAAAAQAAAAGAAAAAgAAAAIAA
-        AACAAAAAgAAAAMAAAADAAAABwAAAA8AAAAfgAAAP4AAAH+AAAD/8AAB//4AA///wA////wf/KAAAABgA
-        AAAwAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAa1tTa2xcVfBsXFW1bFpVZmZcUhkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFrWlSFa1tU/4+Dfv+AcWv8a1tU/2tb
-        VP5tXlbMa1xUemxbVS0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAVVVVA2xbVJprW1T/qqCc//7+/v//////6+no/7+4tf+RhoH9bF1W/mtbVP9tXlbia1xTmWpZ
-        U02AVVUGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0XV0LbFxVtWxcVf+5sq//////////
-        ////////////////////////8/Hx/8bAvf+Zjor/cGBa/WtbVP9tXVbxaltUo2heVRsAAAAAAAAAAAAA
-        AAAAAAAAAAAAAGZZWRRtXFbKbV1W/sjCv///////////////////////////////////////////////
-        ////////+vn5/9LNy/+mnJj/bV1W/WtbVIMAAAAAAAAAAAAAAAAAAAAAaFhYIG1eV9pvYFn808/N////
-        ////////////////////////////////////////////////////////////////////////in55/W1d
-        Vr4AAAAAAAAAAAAAAABoXVEsbV5X53NlXvzd2tj//v78/9S8EP/RtwD/0bcA/9G3AP/RtwD/8Oit/+zN
-        0P/EZWz/xGVs/8RlbP/EZWz/yG91//79/f//////raSg/2xcVfaAQEAEAAAAAGxcVEBtXVbzfG5n++jm
-        5f///////v35/9G3AP/v5qf/9vHM//bxzP/Ywij/7eKZ/+fBxP/NfYP/8+Di//Pg4v/rysz/xGVs//77
-        /P//////z8rH/2tbVP9rXFIyAAAAAG1dVe2CdW/98O/u/////////////v35/9G3AP/38tH/////////
-        ///axTL/7eKZ/+fBxP/Qg4n////////////04+T/xGVs//77/P//////8fDv/2tbVP9sW1RtAAAAAG5e
-        Vs+ViYT+/////////////////v35/9G3AP/38tH////////////axTL/7eKZ/+fBxP/Qg4n/////////
-        ///04+T/xGVs//77/P///////////31waftqW1OoAAAAAGxaU5NyY138/v7+/////////////v35/9G3
-        AP/Zwyr/2sUz/9rFM//Tugr/7eOb/+fBxP/Ga3L/0ISJ/9CEif/OfoT/xGVs//78/P///////////6CW
-        kv9tXlflAAAAAGpcU1lrW1T/5ePh//////////////79/+3imf/t4pn/7eKZ/+3imf/t4pr/+/nr//bm
-        5//nwcT/58HE/+fBxP/nwcT/7M3P/////////////////8K7uf9rW1T/alhYHW9eVR5rW1T/w726////
-        /////////////8rA9v+9sfT/vbH0/72x9P++svT/8vD9/+v4//+a2/3/mdv9/5nb/f+Z2/3/rOH9////
-        /////////////+Th4P9rW1T/bFtVVwAAAABtXlfnopeT/////////////Pv+/1s95P92Xej/fGTp/3xk
-        6f9hReX/v7P0/5vb/f8KqPn/M7b6/zO2+v8qs/r/AKT5//r9//////////////7+/v9yY1z8a1tUkQAA
-        AABqW1OofXBp+///////////+/r+/1s95P/h3Pr///////////97Y+n/vbH0/5nb/f8ytvr/////////
-        ///R7/7/AKT5//n9//////////////////+ViYT+bl5WzwAAAABsW1Rta1tU//Hw7///////+/r+/1s9
-        5P/h3Pr///////////97Y+n/vbH0/5nb/f8ytvr////////////R7/7/AKT5//n9//////////////Dv
-        7v+CdW/9bV1V7QAAAABsXVM0a1tU/9DLyf//////+/r+/1s95P/GvPb/3tj6/97Y+v91W+j/vbH0/5nb
-        /f8osvr/zO3+/8zt/v+n4P3/AKT5//n9////////6+no/35wavxsXVX1altURgAAAACAQEAEbV1W9q6m
-        ov//////+/r+/1s95P9bPeT/Wz3k/1s95P9bPeT/ysH2/5nb/f8ApPn/AKT5/wCk+f8ApPn/EKr5//z+
-        ///g3dv/dmdh/G1dVuptWFMxAAAAAAAAAAAAAAAAbFxVv4x/ev3/////////////////////////////
-        /////////////////////////////////////////////9jT0f9xYVv8bV5W32pcVSQAAAAAAAAAAAAA
-        AAAAAAAAa1tUg21dVv2mnJj/0s3L//r5+f//////////////////////////////////////////////
-        ////////yMK//21dVv5tXFbKZllZFAAAAAAAAAAAAAAAAAAAAAAAAAAAaF5VG2pbVKNsXFXwa1tU/3Bg
-        Wv2Zjor+xsC9//Px8f////////////////////////////////+5sq//bFxV/2xcVbV0XV0LAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVVVUDallVPGtcVIhtXVbba1tU/2tbVP6Ie3X9ta2p/+He
-        3f///////v7+/66mov9rW1T/bFpUoWZmZgUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAbFtVLWtcVHpsXVXLa1tU/mtbVP9/cWv7j4N+/2tbVP9rWlSFAAAAAQAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAZlxSGWxaVWZsXFW1bFxV8GtbU2sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8H
-        /0H8AP9B+AAPQfAAA0HgAANBwAADQYAAAUEAAAFBAAABQQAAAUEAAAFBAAAAQQAAAEGAAABBgAAAQYAA
-        AEGAAABBgAABQcAAA0HAAAdBwAAPQfAAH0H/AD9B/+D/QSgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJhW3tvYFn0dWZgsmxbVVdmVVUPAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgICAAnFiW5eCdG705OHg/8a/vf+UiYT0cWFa+Xdo
-        YcptXFVsb15VHgAAAAAAAAAAAAAAAAAAAAAAAAAAbUlJB3NkXbKMgHr09/b2//////////////////r5
-        +f/Szcv/oJeS9XNlXfZzZV7baVxVJwAAAAAAAAAAbVtbDnNjXciZj4n1+/r6////////////////////
-        ///////////////////+/v7/pJqW+WxdVnYAAAAAamBVGHJkXdmnnpn2/f37/9S8E//axTP/2MIo/+XX
-        cP/eqa3/zX2D/9CEif/IcHf//v39/83Ixf92Z2C8AAAAAHJjXOC5sK36//////7++//bxjb///////Xw
-        yv/k1Gf/3KOn//Pf4P//////0IaL//79/f/w7u7/cWFb8gAAAAF0Zl/i4+Df///////+/vv/2cMr//bx
-        zP/u5aL/5NRn/9yjp//px8n/8+Di/85/hf/+/f3//////3hpYvNuWlMldGReo8K7uf////////79/+PU
-        Zv/j1Gb/49Rm//Dorv/qyMv/3KOn/9yjp//eqKz///7+//////+ajoryalxUXmpaVWCbkYzz//////7+
-        //+ikfD/nYvv/52L7//Lwfb/ruL9/2bI+/9myPv/b8z8//7/////////wbq3/3RlXqJuWlMleGli8///
-        ///8/P//d17p/97Y+v/DuPX/nYvv/2fJ+/+i3v3/zO3+/yuz+v/7/v///////+Pg3/90Zl/iAAAAAXFh
-        W/Lw7u7//Pz//35m6v//////3df5/52L7/9nyfv/yuz+//////82t/r/+/7///////+5sK36cmNc4AAA
-        AAB2Z2G+zsnH//z8//9iReX/fGTp/3Vb6P+jkvD/Z8n7/yiy+v8ztvr/E6v5//v9/v+to5/4c2Nd3m1b
-        UhwAAAAAbF1WdqSalvn+/v7///////////////////////////////////////v6+v+Zj4r2c2ReyW1b
-        Ww4AAAAAAAAAAGlcVSdzZV7bc2Vd9qCXkvXSzcv/+vn5//////////////////f29v+MgHr0c2Rdsm1J
-        SQcAAAAAAAAAAAAAAAAAAAAAAAAAAG9eVR5rW1NrdGRexnBhWfiShoHvxr+9/uTh4P+CdG70c2RdmYCA
-        gAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmVVUPbFtVV3VmYLJvYFn0cmFbewAA
-        AAAAAAAAAAAAAAAAAAAAAAAA+D+sQeAHrEHAAaxBgAGsQQABrEEAAKxBAACsQQAArEEAAKxBAACsQQAA
-        rEGAAKxBgAGsQYADrEHgB6xB/B+sQQ==
-</value>
-  </data>
-</root>
\ No newline at end of file
diff --git a/Models/LauncherSession.cs b/Models/LauncherSession.cs
deleted file mode 100644
index e007df4..0000000
--- a/Models/LauncherSession.cs
+++ /dev/null
@@ -1,41 +0,0 @@
-using System.Collections.Generic;
-using System.Drawing;
-
-namespace AppLauncher.Models
-{
-    public class LauncherSession
-    {
-        public class HotKeyOptions
-        {
-            public bool IsCtrl { get; set; } = false;
-            public bool IsAlt { get; set; } = false;
-            public bool IsShift { get; set; } = false;
-            public int Key { get; set; } = (int)System.Windows.Forms.Keys.None;
-
-            public int ModifierCode => ((this.IsAlt ? 1 : 0) + (this.IsCtrl ? 2 : 0) + (this.IsShift ? 4 : 0));
-
-            public System.Windows.Forms.Keys KeyCode => (System.Windows.Forms.Keys)this.Key;
-        }
-
-        public enum AutoSaveOption
-        {
-            Prompt = 0,
-            Yes,
-            No
-        }
-
-        public int DefaultHeight { get; set; } = 280;
-        public HotKeyOptions HotKey { get; set; } = null;
-
-        public bool AlwaysOnTop { get; set; } = false;
-        public bool EnableAnimation { get; set; } = false;
-        public bool EnableBigIconInFolder { get; set; } = false;
-
-        public bool HideOnClose { get; set; } = false;
-        public bool HideOnClick { get; set; } = false;
-        public AutoSaveOption AutoSave { get; set; } =  AutoSaveOption.Prompt;
-        public List<TileGroupModel> Groups { get; set; } = new List<TileGroupModel>();
-        public Point StartPosition { get; set; } = Point.Empty;
-
-    }
-}
\ No newline at end of file
diff --git a/Models/TileGroupModel.cs b/Models/TileGroupModel.cs
deleted file mode 100644
index ab8974a..0000000
--- a/Models/TileGroupModel.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-using System.Collections.Generic;
-using System.Drawing;
-
-namespace AppLauncher.Models
-{
-    public class TileGroupModel
-    {
-        public string Title { get; set; }
-        public bool IsExpanded { get; set; } = false;
-        public bool IsExclusive { get; set; } = false;
-        public List<TileModel> Items { get; set; } = new List<TileModel>();
-        public Size GridSize = new Size(0, 0);
-    }
-}
\ No newline at end of file
diff --git a/Models/TileModel.cs b/Models/TileModel.cs
deleted file mode 100644
index ba7aa02..0000000
--- a/Models/TileModel.cs
+++ /dev/null
@@ -1,100 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.Drawing;
-
-namespace AppLauncher.Models
-{
-    public class TileModel
-    {
-        public string Title { get; set; }
-        public string ProcessFilename { get; set; }
-        public string ProcessArgument { get; set; }
-        public string ProcessWorkingDirectory { get; set; }
-        public ProcessWindowStyle ProcessWindowStyle { get; set; } = ProcessWindowStyle.Normal;
-        public bool ProcessAsAdmin { get; set; } = false;
-        public Point Position { get; set; }
-
-        public bool IsGroup { get; set; } = false;
-        public List<TileModel> Items { get; set; } = new List<TileModel>();
-
-        public override string ToString() => this.Title ?? string.Empty;
-
-        public string CleanProcessFilename => (string.IsNullOrWhiteSpace(this.ProcessFilename) ? string.Empty : resolvePath(this.ProcessFilename));
-
-        public string CleanProcessArgument => (string.IsNullOrWhiteSpace(this.ProcessArgument) ? string.Empty : resolvePath(this.ProcessArgument));
-
-        public string CleanProcessWorkingDirectory => (string.IsNullOrWhiteSpace(this.ProcessWorkingDirectory) ? string.Empty : resolvePath(this.ProcessWorkingDirectory));
-
-        protected string resolvePath(string value)
-        {
-            string rv = Environment.ExpandEnvironmentVariables(value);
-
-            rv = resolveFirstPath(rv);
-            rv = resolveLastPath(rv);
-
-            return rv;
-        }
-
-        protected string resolveFirstPath(string value)
-        {
-            const string last = "%FIRST%";
-            if (!value.Contains(last))
-            {
-                return value;
-            }
-
-            string head = value.Substring(0, value.IndexOf(last));
-            string tail = value.Substring(value.IndexOf(last) + last.Length);
-
-            string[] dirList = new string[0];
-
-            try
-            {
-                dirList = System.IO.Directory.GetDirectories(head, "*", System.IO.SearchOption.TopDirectoryOnly);
-            }
-            catch
-            {
-                // do nothing
-            }
-
-            if (dirList.Length <= 0)
-            {
-                return value;
-            }
-
-            return dirList[0] + tail;
-        }
-
-        protected string resolveLastPath(string value)
-        {
-            const string last = "%LAST%";
-            if (!value.Contains(last))
-            {
-                return value;
-            }
-
-            string head = value.Substring(0, value.IndexOf(last));
-            string tail = value.Substring(value.IndexOf(last) + last.Length);
-
-            string[] dirList = new string[0];
-
-            try
-            {
-                dirList = System.IO.Directory.GetDirectories(head, "*", System.IO.SearchOption.TopDirectoryOnly);
-            }
-            catch
-            {
-                // do nothing
-            }
-
-            if (dirList.Length <= 0)
-            {
-                return value;
-            }
-
-            return dirList[(dirList.Length - 1)] + tail;
-        }
-
-    }
-}
diff --git a/Program.cs b/Program.cs
deleted file mode 100644
index 49753de..0000000
--- a/Program.cs
+++ /dev/null
@@ -1,31 +0,0 @@
-using System;
-using System.Windows.Forms;
-
-namespace AppLauncher
-{
-    static class Program
-    {
-        const string applicationID = "f31c9f65-4047-41e4-ac85-dbe11d12ee46";
-
-        /// <summary>
-        /// The main entry point for the application.
-        /// </summary>
-        [STAThread]
-        static void Main()
-        {
-            System.Threading.Mutex mutex = new System.Threading.Mutex(false, applicationID);
-            if (mutex.WaitOne(TimeSpan.Zero))
-            {
-                Application.EnableVisualStyles();
-                Application.SetCompatibleTextRenderingDefault(false);
-                Application.Run(new MainForm());
-
-                mutex.ReleaseMutex();
-            }
-
-            mutex.Close();
-            mutex.Dispose();
-            mutex = null;
-        }
-    }
-}
diff --git a/Properties/AssemblyInfo.cs b/Properties/AssemblyInfo.cs
deleted file mode 100644
index 91add18..0000000
--- a/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-using System.Reflection;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("Fizzy Launcher")]
-[assembly: AssemblyDescription("Application and shortcut launcher")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("Hi, I'm Ray")]
-[assembly: AssemblyProduct("Fizzy Launcher")]
-[assembly: AssemblyCopyright("Copyright © Ray Lam 2020")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components.  If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("66c1c75c-3612-4d23-b937-c3de0d653292")]
-
-// Version information for an assembly consists of the following four values:
-//
-//      Major Version
-//      Minor Version
-//      Build Number
-//      Revision
-//
-// You can specify all the values or you can default the Build and Revision Numbers
-// by using the '*' as shown below:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("0.1.2.016")]
diff --git a/Properties/Resources.Designer.cs b/Properties/Resources.Designer.cs
deleted file mode 100644
index 90bd94d..0000000
--- a/Properties/Resources.Designer.cs
+++ /dev/null
@@ -1,103 +0,0 @@
-//------------------------------------------------------------------------------
-// <auto-generated>
-//     This code was generated by a tool.
-//     Runtime Version:4.0.30319.42000
-//
-//     Changes to this file may cause incorrect behavior and will be lost if
-//     the code is regenerated.
-// </auto-generated>
-//------------------------------------------------------------------------------
-
-namespace AppLauncher.Properties {
-    using System;
-    
-    
-    /// <summary>
-    ///   A strongly-typed resource class, for looking up localized strings, etc.
-    /// </summary>
-    // This class was auto-generated by the StronglyTypedResourceBuilder
-    // class via a tool like ResGen or Visual Studio.
-    // To add or remove a member, edit your .ResX file then rerun ResGen
-    // with the /str option, or rebuild your VS project.
-    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-    internal class Resources {
-        
-        private static global::System.Resources.ResourceManager resourceMan;
-        
-        private static global::System.Globalization.CultureInfo resourceCulture;
-        
-        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
-        internal Resources() {
-        }
-        
-        /// <summary>
-        ///   Returns the cached ResourceManager instance used by this class.
-        /// </summary>
-        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
-        internal static global::System.Resources.ResourceManager ResourceManager {
-            get {
-                if (object.ReferenceEquals(resourceMan, null)) {
-                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("AppLauncher.Properties.Resources", typeof(Resources).Assembly);
-                    resourceMan = temp;
-                }
-                return resourceMan;
-            }
-        }
-        
-        /// <summary>
-        ///   Overrides the current thread's CurrentUICulture property for all
-        ///   resource lookups using this strongly typed resource class.
-        /// </summary>
-        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
-        internal static global::System.Globalization.CultureInfo Culture {
-            get {
-                return resourceCulture;
-            }
-            set {
-                resourceCulture = value;
-            }
-        }
-        
-        /// <summary>
-        ///   Looks up a localized resource of type System.Drawing.Bitmap.
-        /// </summary>
-        internal static System.Drawing.Bitmap app_icon {
-            get {
-                object obj = ResourceManager.GetObject("app_icon", resourceCulture);
-                return ((System.Drawing.Bitmap)(obj));
-            }
-        }
-        
-        /// <summary>
-        ///   Looks up a localized resource of type System.Drawing.Bitmap.
-        /// </summary>
-        internal static System.Drawing.Bitmap folder_32 {
-            get {
-                object obj = ResourceManager.GetObject("folder_32", resourceCulture);
-                return ((System.Drawing.Bitmap)(obj));
-            }
-        }
-        
-        /// <summary>
-        ///   Looks up a localized resource of type System.Drawing.Bitmap.
-        /// </summary>
-        internal static System.Drawing.Bitmap toggle_left_ea_16 {
-            get {
-                object obj = ResourceManager.GetObject("toggle_left_ea_16", resourceCulture);
-                return ((System.Drawing.Bitmap)(obj));
-            }
-        }
-        
-        /// <summary>
-        ///   Looks up a localized resource of type System.Drawing.Bitmap.
-        /// </summary>
-        internal static System.Drawing.Bitmap toggle_right_ea_16 {
-            get {
-                object obj = ResourceManager.GetObject("toggle_right_ea_16", resourceCulture);
-                return ((System.Drawing.Bitmap)(obj));
-            }
-        }
-    }
-}
diff --git a/Properties/Resources.resx b/Properties/Resources.resx
deleted file mode 100644
index dda20bf..0000000
--- a/Properties/Resources.resx
+++ /dev/null
@@ -1,133 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!-- 
-    Microsoft ResX Schema 
-    
-    Version 2.0
-    
-    The primary goals of this format is to allow a simple XML format 
-    that is mostly human readable. The generation and parsing of the 
-    various data types are done through the TypeConverter classes 
-    associated with the data types.
-    
-    Example:
-    
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-                
-    There are any number of "resheader" rows that contain simple 
-    name/value pairs.
-    
-    Each data row contains a name, and value. The row also contains a 
-    type or mimetype. Type corresponds to a .NET class that support 
-    text/value conversion through the TypeConverter architecture. 
-    Classes that don't support this are serialized and stored with the 
-    mimetype set.
-    
-    The mimetype is used for serialized objects, and tells the 
-    ResXResourceReader how to depersist the object. This is currently not 
-    extensible. For a given mimetype the value must be set accordingly:
-    
-    Note - application/x-microsoft.net.object.binary.base64 is the format 
-    that the ResXResourceWriter will generate, however the reader can 
-    read any of the formats listed below.
-    
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-    
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array 
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
-  <data name="app_icon" type="System.Resources.ResXFileRef, System.Windows.Forms">
-    <value>..\Resources\app_icon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
-  </data>
-  <data name="folder_32" type="System.Resources.ResXFileRef, System.Windows.Forms">
-    <value>..\Resources\folder_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
-  </data>
-  <data name="toggle_left_ea_16" type="System.Resources.ResXFileRef, System.Windows.Forms">
-    <value>..\Resources\toggle-left-ea-16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
-  </data>
-  <data name="toggle_right_ea_16" type="System.Resources.ResXFileRef, System.Windows.Forms">
-    <value>..\Resources\toggle-right-ea-16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
-  </data>
-</root>
\ No newline at end of file
diff --git a/Properties/Settings.Designer.cs b/Properties/Settings.Designer.cs
deleted file mode 100644
index 85a6f63..0000000
--- a/Properties/Settings.Designer.cs
+++ /dev/null
@@ -1,26 +0,0 @@
-//------------------------------------------------------------------------------
-// <auto-generated>
-//     This code was generated by a tool.
-//     Runtime Version:4.0.30319.42000
-//
-//     Changes to this file may cause incorrect behavior and will be lost if
-//     the code is regenerated.
-// </auto-generated>
-//------------------------------------------------------------------------------
-
-namespace AppLauncher.Properties {
-    
-    
-    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.8.1.0")]
-    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
-        
-        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
-        
-        public static Settings Default {
-            get {
-                return defaultInstance;
-            }
-        }
-    }
-}
diff --git a/Properties/Settings.settings b/Properties/Settings.settings
deleted file mode 100644
index 3964565..0000000
--- a/Properties/Settings.settings
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version='1.0' encoding='utf-8'?>
-<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
-  <Profiles>
-    <Profile Name="(Default)" />
-  </Profiles>
-  <Settings />
-</SettingsFile>
diff --git a/Resources/app_icon.png b/Resources/app_icon.png
deleted file mode 100644
index ad67f186232163c4a2d7e16a43bde59383176977..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1344
zcmV-G1;6@<P)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H11kFiA
zK~zYIomOj16jv1f&YhWc7b)NZi;sYU3#$YafuzAlv^KTXNLnguRKzr`twx%VG-@g~
z!HQa|rfH&73+W#bA)v%cTT`1RwiXjp9x7E31uBa?<WX3Gh25EZ`(x#?fdcg;^JC_m
z@B8lg=FGiA_#g4^_K)UBT$c!jw*jo+LL9uDpPfA!hNdF5rhFVNNF)+blHei^00o%>
zRDYwN{Gj$RAaLx`#q7@jh-nE}tyT$gV1kfnBO|tnb8ZG8LKg&!_}FL`zbp!2p&<}L
z;6mXQT>bG^K+t)kw{vGsPLAt81*|)E&l4IuPQ((05WYG^;W0}VQ(SB`#V?D7kB|3+
z9bPHDj*CU50PvHZ^qceYPW4YHkerg1#Td(2yE=izEsMgEs727}l&Ks90Nl8F8)tL#
z1q8|^ZD>P5K~Cpzj*Tc0tu%+t$F2{yB0e^H+T;MRX4R`WxIc{)MUK^!8Gl;0?=gFH
zux8C6*%aJm-?;uYL+aKf2$zbM*WVjQWIU3N8FQ<k-rnVz(D^}^+=<7H%{X@A8?Ar9
z(XF}g=H<fERSW?9gF9n5=LSo7m?vRo8cexaFy&@J4w(zy^W42EpG8pCmqS@!4tZq(
z;Oqf}26Nbad~tZ66yQJ0$Q1EMa>|}{3;>8D0RSSxLp=oK1@oX-LZMhfL3-Vogcryd
z=e~R+JupG0036BuM4CI>q$eg7FaQwXD*^+Js-LgVw0)l}X8HLdFu<RPs7VF@S&~*q
zTEgX#3UUuu_vhK58Sa&<O)UUp02qY57OrdY?pn<;3>tw8Ay8Xa&$*`kE?ak`hiIBQ
z+Y&Kq56KdYS?S=t&qtR<1jDL0Fnttc2zY$BI)8wTPF<6&1%rb_5`k{XoV!*K2$qP^
z7t95a7q-x&Z32*FFhK2+QQwm2k(=qQASPt={$X7M06^0CEg76GHyCtU@Vq(FaDgfW
zcHM7Aq_-Xh=5D>Fe+Wdt;sz&5iW(6##|r@9a&ok_4&dvv%OOeb+J}!CAW5vHF#oho
zmSncl60wjGjo<eQmWE)-D|!Gx+^t98FI)+l?S=gZmjVEuHuvNB;X59V)zsCis;1op
z049V8>FDed|Mc{Z6L^{E>9wPyqgy7hvSEQut!*6x2Qp8oEv@Yy#Si)hQDJwW!tTI;
z#z&qzof>RU`e1v~hqhLS2d4Ig|C~e_0LYgvoVk&dx;vq#r}viwnI{7?_U)0(=1}-4
z61LuL@&E_uBzSu(Xm4}i#L>GW&kbHO=*6z~u&x0_<mhe=xCe|G-Yr{pFAzHAI%6zs
zZ~9ItHYVz&EXv3{$?F?!zZK=3UJH!bO$!Up{mooM%Qcl(e)(07xN-CLv`L*#7s@NE
z@$Gj7sBg4^b6z%_8#g+sse5M*ioqfP8@6pu#5;-WCM31n`%qq0jf%=@+__i7oh}z+
zjM+KYu9Cz*Ek1wl>4XA+``8q^ptFGZ@U1si<NY1UAR@Fs>qJG>UnsA<$M4rXBF+Ud
ziP<#HuR#+(FxB*Paq%JNSgy$qeM;Vzb_9fs$VFy!b@yuR&pIRkf=R5Bb6!G%N{jQ)
zR8MB#lz$bQQqs~G(NO?p;P_r+&eD<#IjvLShT~r)8rJyMfXr3^0000<MNUMnLSTYL
C>uwGJ

diff --git a/Resources/app_icon_32.png b/Resources/app_icon_32.png
deleted file mode 100644
index 51e5f0d1efcbb24071542496d559afef98fa93d1..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1728
zcmV;x20!_UP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H122Dvs
zK~z|UwU>WPmDd@^Kj(el%cYkK2$Ns4E<wE@D(xstR&6!QnyfA>+Lqf56&)s}7HnrX
zyKHH?kacE@W~p6}P@Bv~h0<QODw=i8+!nWrBL%4l*vk(gT0o`aas{m1AMe>8cwe|b
zP-)%wzvn&Q=Xt*GbIy6rIfAbU`{uGGQnFqk3M4E?h?nb+R35xre=*mD6%`dqhjTbz
zs;rli0s&be6e$p|I%+C+-!lPEl$KheZ$v$&qZbG%o&b^qWASmZ<mRj(@1bm5E;oNX
z?7;8W0Z}D9S6_5E9R4pQps1*HzE{=058?+%9tUCrV=2k=$<0|oZcaAKvuvoUV)!+m
zJ<q<%gG_on2q}-^HE(n{UjO2*1laAR@zP}4j$l2I4=4bNqL67zC-0#L_*QN<X{pJP
zVj1Y_?&EjAuV!p~0)#l_)3gmo-`+QRM*)SK%3lX|0+`KFeDi^2<mId&H)jR0vDVur
z4aLCV6?X5bV)*kBfb&B2uX7x#9=L;m9nBzfpW9Z%+DBJnGMVO-G!!nEo8Ro&&!x+Q
z0GCunKK}0EstYqY#^e<j?}`EWph?qM`)K}GP7aWe5YMk)eTijRHh^#VrP63GDtlxm
z$EZNzrt<FsCzoa{;<aD>6aeY*GWb|Y#NZ;@OiImO6txfU2YHb>mW7x$^yBsERK9tL
z#{ZlJ$)pf+v!kY}9zdIB%T-80X2znhK&JHjiOS9}Y;XSno;D}?h#Mv8mV448i1=j&
zM-HDxx;sGkU@}Fsv%G|_B_?qEFMl^nL|x(Lvhw;PRc}rUkUR{KVG9=!m6OH1om&li
z;^;{{ZO$N$n!XXm_Pk;Hn_s~1?wI~RA=t9<Nvu{2b&eCNlvEdPDo<2ks=I-B7$9>=
zdc<<xD?C;3J)SN3VZeM@0XWxtWf?FpH6@Ao_}E#U?-geBkqa7tDwWj$OEVWobnx{J
zFwyW2!}hdwg>m$2AAwK}TaI>waRT_Xt2e;<Xlf1U$|{5;(-vHQp(==IGn1{IOty9g
zM-c*HwSdVF2=xA1^#0mljur!oMkt(JeYf(9Mh!qJa<!0<8M**fm6RiU&|TNVf{2*=
z&=#ZsDVPeJ;0@;xoeUyafRvK%-hKe-SN&(SCyTcy3!TL=mixGWL23|Lm+(on1=1{G
zvEwua8{qNiTpdXR(!w}aOeBQ3UjA%|iHRG4?0Nri^)*e?)zuQn%vgjF!H1(qO7a@J
z!~cw_4%W41Ddu4hdv>3T$cZwm?0q92MVXH4?7lcv3B+jtO$HiJg#91DcM`4qC~cl$
zpBfpbc4!p0&u?4|@>V9XBqPq?w0!(I-A*@tzYG=-n15s=fQA&S05WW|@BigiGo=d?
z4cjjzwL`(D>mpkmtJh3V;o!gxx}EN@Sb+-Yihc&B4x=o9p)1#B6>zWMc8_u8>M+3Q
zgNsu;0|NE}ymjzh{@n24|5bpq$0+}qii!#yK&!9W|6BXUvLOj?z4P92&E;~lZHql<
zLH=`Og6BFuGwjas$*|xpO~VXao-pi-J>lEZd8+{ll+%H48i1p=>g}hC%Kj@9QTNxs
z{mU{kGRjZNONcU=SQu@hWBeu^<2QqX#i$A?Q5x1bl_;}HZ_jmlLy{&Wn$fiB`{Jiv
zQ}geadSl>Q(7t=RxIACzoB-x$*wXpM&$bh5jS2gcF9WaF$JS?e;r01^!XpzLj;e8(
zaU%lw)8YM1sv_3_m%6(9sM!4mE?4+Uo_lgHr~ci9*XIMoxj=H5<yvmvvVDQ{s~-T_
zN%IqV<>zHA_<Cw2>Z}+W8>gkUo#xhdK56S@a?%qR+E-t*|E1ds0NC*3o%1xG?<i8P
zwZ>TFFLymJZr3YdYAb)-a-Qb1Z8*F8&~-g9qytSzjtQ@~+Tl20l=ZeRqjl?EFvle7
zhk$2Hn#PM|Tlx0N9AjKcNnihEnp@jxX>I3X-=&%EUkK!BgmOal;i#*t9E_CXj!!eY
z-LA^0ls|whQ&oj+#dZ=B;%Pp6o|e{j+}Fou(yvJ&k1Hq*H!Yr%#}6F1ai{oq{W!I6
z+VP4+z82~u;erq}2tUV`XC^fT8qD2dPOsy_%{xkva<706iEI#pV~!(LJ#&c>ivIzs
Wj#q5(AM-N+0000<MNUMnLSTYb07Y5=

diff --git a/Resources/folder_32.png b/Resources/folder_32.png
deleted file mode 100644
index 832fd3c9b04b64cf590032b045d45050e033aaef..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 601
zcmV-f0;c_mP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800001b5ch_0Itp)
z=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!T<mc!T}X1N`L?W0q#jeK~z{rV;BVk
z4H%&`7^GyCY5xDu*bQV_0kI%h5EH!k$Mny8{?zVsP(DQf?trwkN{zqF|IPxLTo4g_
zfbr6&Hyoy`S2z5E3Xlz$p)`Ymne{v%r31wOfpF7*#{Y+aY><QCn2~|;GmusQVsUn^
zKYz}jIeHMtrU<}8AUU)AHINbk+P`w{^sWeqC@P38DdA@O%6u8fR0QH*{}}$cF)}be
z21^nE9E=>VrcG=30_DO16O;x4pyeRIh||EuJw0C;nEs~%ng4;9jfsKj03*ZyyTst1
z|G$4o$tXXYlvQp6HVg`o9Y7SAJGE;sFpg$JxugK*|BMVqjQ<(-r({+bL&ZpU00?~M
z_+0>WL?JLBI*G+V^|OFl{{S(|KZgIUV1s}FISqh<6$E<bPVX#*vZ)GEGRqeNEr|m%
zKLG6jXLGVbfLs8y{1ucb0Hx{c0Bm5?0izBWb-<_tMjbHf0AvTefl&WtAvE;?BO`+x
zlnHA7fdQgDkWsz?$nys>fwd;%=Kl=;UO;511Aq-$Ng(9|Vgenqe$KScAc!~=q-IyD
z{rmS1)Yj*Qh|mmtWnyA7nmx7s7Kj6HmY+L)<gKZZ-Marw|K)*PF(BpyOHdEI2l{t6
nuxS=LcUmXd@=-7d00RR6=)<f&HZ`m800000NkvXXu0mjfpLF>%

diff --git a/Resources/raw/icon-set.svg b/Resources/raw/icon-set.svg
deleted file mode 100644
index d7d223a..0000000
--- a/Resources/raw/icon-set.svg
+++ /dev/null
@@ -1,942 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="210mm"
-   height="297mm"
-   viewBox="0 0 210 297"
-   version="1.1"
-   id="svg8"
-   inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
-   sodipodi:docname="icon-set.svg">
-  <defs
-     id="defs2">
-    <linearGradient
-       id="linearGradient856">
-      <stop
-         id="stop857"
-         offset="0"
-         stop-opacity="0.5"
-         stop-color="#ffffff" />
-      <stop
-         id="stop858"
-         offset="1"
-         stop-opacity="0.25"
-         stop-color="#ffffff" />
-    </linearGradient>
-    <linearGradient
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.79291263,0,0,1.261173,-197.94453,-91.992003)"
-       id="linearGradient859"
-       x1="174.3136"
-       x2="284.79895"
-       xlink:href="#linearGradient856"
-       y1="129.67796"
-       y2="147.37285" />
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#d4b0e7"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="4.1750023"
-     inkscape:cx="315.07811"
-     inkscape:cy="427.8732"
-     inkscape:document-units="mm"
-     inkscape:current-layer="layer1"
-     inkscape:document-rotation="0"
-     showgrid="false"
-     inkscape:window-width="1920"
-     inkscape:window-height="1017"
-     inkscape:window-x="-8"
-     inkscape:window-y="-8"
-     inkscape:window-maximized="1" />
-  <metadata
-     id="metadata5">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1">
-    <g
-       id="g1126"
-       style="stroke:#d4d4d4;stroke-opacity:1;fill:none;fill-opacity:1;opacity:0.99800004"
-       inkscape:export-filename="L:\gitlab-hiimray\linear-app-launcher\RyzStudio\Windows\Forms\Resources\edit.png"
-       inkscape:export-xdpi="96.300003"
-       inkscape:export-ydpi="96.300003">
-      <g
-         transform="matrix(0.18713591,0,0,0.18713591,97.496016,76.71581)"
-         id="g1083"
-         style="fill:none;stroke:#d4d4d4;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;fill-opacity:1">
-        <circle
-           cx="12"
-           cy="12"
-           r="10"
-           id="circle1072"
-           style="stroke:#d4d4d4;stroke-opacity:1;fill:none;fill-opacity:1" />
-      </g>
-      <g
-         transform="matrix(0.08592684,0,0,0.08592684,98.715721,77.925124)"
-         id="g1120"
-         style="fill:none;stroke:#d4d4d4;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;fill-opacity:1;stroke-opacity:1">
-        <path
-           style="fill:#d4d4d4;fill-opacity:1;stroke:#d4d4d4;stroke-opacity:1"
-           d="m 17,3 a 2.8284271,2.8284271 0 1 1 4,4 L 7.5,20.5 2,22 3.5,16.5 Z"
-           id="path1109" />
-      </g>
-    </g>
-    <g
-       style="fill:none;stroke:#d4d4d4;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
-       id="g59"
-       transform="matrix(0.19624737,0,0,0.19624737,73.599293,76.13193)"
-       inkscape:export-filename="L:\gitlab-hiimray\linear-app-launcher\RyzStudio\Windows\Forms\Resources\plus.png"
-       inkscape:export-xdpi="96"
-       inkscape:export-ydpi="96">
-      <circle
-         id="circle42"
-         r="10"
-         cy="12"
-         cx="12"
-         style="stroke:#d4d4d4;stroke-opacity:1" />
-      <line
-         id="line44"
-         y2="16"
-         x2="12"
-         y1="8"
-         x1="12"
-         style="stroke:#d4d4d4;stroke-opacity:1" />
-      <line
-         id="line46"
-         y2="12"
-         x2="16"
-         y1="12"
-         x1="8"
-         style="stroke:#d4d4d4;stroke-opacity:1" />
-    </g>
-    <g
-       style="fill:none;stroke:#d4d4d4;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
-       id="g75"
-       transform="matrix(0.19169164,0,0,0.19169164,79.634206,76.156058)"
-       inkscape:export-filename="L:\gitlab-hiimray\linear-app-launcher\RyzStudio\Windows\Forms\Resources\g75.png"
-       inkscape:export-xdpi="96"
-       inkscape:export-ydpi="96">
-      <circle
-         id="circle61"
-         r="10"
-         cy="12"
-         cx="12"
-         style="stroke:#d4d4d4;stroke-opacity:1" />
-      <line
-         id="line63"
-         y2="12"
-         x2="16"
-         y1="12"
-         x1="8"
-         style="stroke:#d4d4d4;stroke-opacity:1" />
-    </g>
-    <g
-       style="fill:none;stroke:#d4d4d4;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;opacity:0.99700002"
-       id="g94"
-       transform="matrix(0.1915652,0,0,0.1915652,91.177285,76.333708)"
-       inkscape:export-filename="L:\gitlab-hiimray\linear-app-launcher\RyzStudio\Windows\Forms\Resources\g94.png"
-       inkscape:export-xdpi="96"
-       inkscape:export-ydpi="96">
-      <circle
-         id="circle77"
-         r="10"
-         cy="12"
-         cx="12"
-         style="stroke:#d4d4d4;stroke-opacity:1" />
-      <polyline
-         id="polyline79"
-         points="8 12 12 16 16 12"
-         style="stroke:#d4d4d4;stroke-opacity:1" />
-      <line
-         id="line81"
-         y2="16"
-         x2="12"
-         y1="8"
-         x1="12"
-         style="stroke:#d4d4d4;stroke-opacity:1" />
-    </g>
-    <g
-       style="fill:none;stroke:#d4d4d4;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
-       id="g113"
-       transform="matrix(0.19800798,0,0,0.19800798,84.917109,76.248983)"
-       inkscape:export-filename="L:\gitlab-hiimray\linear-app-launcher\RyzStudio\Windows\Forms\Resources\g113.png"
-       inkscape:export-xdpi="96"
-       inkscape:export-ydpi="96">
-      <circle
-         id="circle96"
-         r="10"
-         cy="12"
-         cx="12"
-         style="stroke:#d4d4d4;stroke-opacity:1" />
-      <polyline
-         id="polyline98"
-         points="16 12 12 8 8 12"
-         style="stroke:#d4d4d4;stroke-opacity:1" />
-      <line
-         id="line100"
-         y2="8"
-         x2="12"
-         y1="16"
-         x1="12"
-         style="stroke:#d4d4d4;stroke-opacity:1" />
-    </g>
-    <g
-       transform="matrix(0.19776595,0,0,0.19776595,73.265307,81.754641)"
-       id="g59-0"
-       style="fill:none;stroke:#66609e;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1">
-      <circle
-         style="stroke:#66609e;stroke-opacity:1"
-         cx="12"
-         cy="12"
-         r="10"
-         id="circle42-7" />
-      <line
-         style="stroke:#66609e;stroke-opacity:1"
-         x1="12"
-         y1="8"
-         x2="12"
-         y2="16"
-         id="line44-4" />
-      <line
-         style="stroke:#66609e;stroke-opacity:1"
-         x1="8"
-         y1="12"
-         x2="16"
-         y2="12"
-         id="line46-0" />
-    </g>
-    <g
-       transform="matrix(0.19169164,0,0,0.19169164,79.301739,81.780287)"
-       id="g75-5"
-       style="fill:none;stroke:#66609e;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1">
-      <circle
-         style="stroke:#66609e;stroke-opacity:1"
-         cx="12"
-         cy="12"
-         r="10"
-         id="circle61-2" />
-      <line
-         style="stroke:#66609e;stroke-opacity:1"
-         x1="8"
-         y1="12"
-         x2="16"
-         y2="12"
-         id="line63-0" />
-    </g>
-    <g
-       transform="matrix(0.1915652,0,0,0.1915652,90.844816,81.957936)"
-       id="g94-6"
-       style="fill:none;stroke:#66609e;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1">
-      <circle
-         style="stroke:#66609e;stroke-opacity:1"
-         cx="12"
-         cy="12"
-         r="10"
-         id="circle77-3" />
-      <polyline
-         style="stroke:#66609e;stroke-opacity:1"
-         points="8 12 12 16 16 12"
-         id="polyline79-9" />
-      <line
-         style="stroke:#66609e;stroke-opacity:1"
-         x1="12"
-         y1="8"
-         x2="12"
-         y2="16"
-         id="line81-3" />
-    </g>
-    <g
-       transform="matrix(0.19800798,0,0,0.19800798,84.58464,81.873212)"
-       id="g113-6"
-       style="fill:none;stroke:#66609e;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1">
-      <circle
-         style="stroke:#66609e;stroke-opacity:1"
-         cx="12"
-         cy="12"
-         r="10"
-         id="circle96-2" />
-      <polyline
-         style="stroke:#66609e;stroke-opacity:1"
-         points="16 12 12 8 8 12"
-         id="polyline98-1" />
-      <line
-         style="stroke:#66609e;stroke-opacity:1"
-         x1="12"
-         y1="16"
-         x2="12"
-         y2="8"
-         id="line100-2" />
-    </g>
-    <g
-       style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
-       id="g59-0-6"
-       transform="matrix(0.19776595,0,0,0.19776595,73.332125,87.467528)"
-       inkscape:export-filename="L:\gitlab-hiimray\linear-app-launcher\RyzStudio\Windows\Forms\Resources\plus2.png"
-       inkscape:export-xdpi="96"
-       inkscape:export-ydpi="96">
-      <circle
-         id="circle42-7-4"
-         r="10"
-         cy="12"
-         cx="12"
-         style="stroke:#000000;stroke-opacity:1" />
-      <line
-         id="line44-4-5"
-         y2="16"
-         x2="12"
-         y1="8"
-         x1="12"
-         style="stroke:#000000;stroke-opacity:1" />
-      <line
-         id="line46-0-1"
-         y2="12"
-         x2="16"
-         y1="12"
-         x1="8"
-         style="stroke:#000000;stroke-opacity:1" />
-    </g>
-    <g
-       style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
-       id="g75-5-5"
-       transform="matrix(0.19169164,0,0,0.19169164,79.368556,87.493174)"
-       inkscape:export-filename="L:\gitlab-hiimray\linear-app-launcher\RyzStudio\Windows\Forms\Resources\g75-5-5.png"
-       inkscape:export-xdpi="96"
-       inkscape:export-ydpi="96">
-      <circle
-         id="circle61-2-3"
-         r="10"
-         cy="12"
-         cx="12"
-         style="stroke:#000000;stroke-opacity:1" />
-      <line
-         id="line63-0-8"
-         y2="12"
-         x2="16"
-         y1="12"
-         x1="8"
-         style="stroke:#000000;stroke-opacity:1" />
-    </g>
-    <g
-       style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
-       id="g94-6-2"
-       transform="matrix(0.1915652,0,0,0.1915652,90.911634,87.670823)"
-       inkscape:export-filename="L:\gitlab-hiimray\linear-app-launcher\RyzStudio\Windows\Forms\Resources\g94-6-2.png"
-       inkscape:export-xdpi="96"
-       inkscape:export-ydpi="96">
-      <circle
-         id="circle77-3-9"
-         r="10"
-         cy="12"
-         cx="12"
-         style="stroke:#000000;stroke-opacity:1" />
-      <polyline
-         id="polyline79-9-3"
-         points="8 12 12 16 16 12"
-         style="stroke:#000000;stroke-opacity:1" />
-      <line
-         id="line81-3-7"
-         y2="16"
-         x2="12"
-         y1="8"
-         x1="12"
-         style="stroke:#000000;stroke-opacity:1" />
-    </g>
-    <g
-       style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
-       id="g113-6-2"
-       transform="matrix(0.19800798,0,0,0.19800798,84.651458,87.586098)"
-       inkscape:export-filename="L:\gitlab-hiimray\linear-app-launcher\RyzStudio\Windows\Forms\Resources\g113-6-2.png"
-       inkscape:export-xdpi="96"
-       inkscape:export-ydpi="96">
-      <circle
-         id="circle96-2-6"
-         r="10"
-         cy="12"
-         cx="12"
-         style="stroke:#000000;stroke-opacity:1" />
-      <polyline
-         id="polyline98-1-5"
-         points="16 12 12 8 8 12"
-         style="stroke:#000000;stroke-opacity:1" />
-      <line
-         id="line100-2-7"
-         y2="8"
-         x2="12"
-         y1="16"
-         x1="12"
-         style="stroke:#000000;stroke-opacity:1" />
-    </g>
-    <g
-       style="fill:none;fill-opacity:1;stroke:#66609e;stroke-opacity:1"
-       id="g1126-3"
-       transform="translate(-0.30067804,5.1783474)">
-      <g
-         style="fill:none;fill-opacity:1;stroke:#66609e;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
-         id="g1083-1"
-         transform="matrix(0.18713591,0,0,0.18713591,97.496016,76.71581)">
-        <circle
-           style="fill:none;fill-opacity:1;stroke:#66609e;stroke-opacity:1"
-           id="circle1072-6"
-           r="10"
-           cy="12"
-           cx="12" />
-      </g>
-      <g
-         style="fill:none;fill-opacity:1;stroke:#66609e;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
-         id="g1120-7"
-         transform="matrix(0.08592684,0,0,0.08592684,98.715721,77.925124)">
-        <path
-           id="path1109-3"
-           d="m 17,3 a 2.8284271,2.8284271 0 1 1 4,4 L 7.5,20.5 2,22 3.5,16.5 Z"
-           style="fill:#66609e;fill-opacity:1;stroke:#66609e;stroke-opacity:1" />
-      </g>
-    </g>
-    <g
-       style="fill:none;fill-opacity:1;stroke:#000000;stroke-opacity:1"
-       id="g1126-5"
-       transform="translate(-0.28397375,10.623964)"
-       inkscape:export-filename="L:\gitlab-hiimray\linear-app-launcher\RyzStudio\Windows\Forms\Resources\edit2.png"
-       inkscape:export-xdpi="96.300003"
-       inkscape:export-ydpi="96.300003">
-      <g
-         style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
-         id="g1083-8"
-         transform="matrix(0.18713591,0,0,0.18713591,97.496016,76.71581)">
-        <circle
-           style="fill:none;fill-opacity:1;stroke:#000000;stroke-opacity:1"
-           id="circle1072-3"
-           r="10"
-           cy="12"
-           cx="12" />
-      </g>
-      <g
-         style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
-         id="g1120-9"
-         transform="matrix(0.08592684,0,0,0.08592684,98.715721,77.925124)">
-        <path
-           id="path1109-2"
-           d="m 17,3 a 2.8284271,2.8284271 0 1 1 4,4 L 7.5,20.5 2,22 3.5,16.5 Z"
-           style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1" />
-      </g>
-    </g>
-    <g
-       style="fill:none;fill-opacity:1;stroke:#545b6b;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
-       id="g1549"
-       transform="matrix(0.4024192,0,0,0.4024192,47.691701,86.479192)"
-       inkscape:export-filename="L:\gitlab-hiimray\linear-app-launcher\Resources\app_icon_24.png"
-       inkscape:export-xdpi="96"
-       inkscape:export-ydpi="96">
-      <rect
-         style="fill:none;fill-opacity:1;stroke:#545b6b;stroke-width:1.57547;stroke-opacity:1"
-         inkscape:export-ydpi="120"
-         inkscape:export-xdpi="120"
-         inkscape:export-filename="L:\gitlab-hiimray\linear-app-launcher\Resources\rect1168.png"
-         id="rect1168"
-         height="5.5141511"
-         width="5.5141511"
-         y="2.7877357"
-         x="2.7877357" />
-      <rect
-         style="fill:none;fill-opacity:1;stroke:#545b6b;stroke-width:1.57547;stroke-opacity:1"
-         inkscape:export-ydpi="120"
-         inkscape:export-xdpi="120"
-         inkscape:export-filename="L:\gitlab-hiimray\linear-app-launcher\Resources\rect1168.png"
-         id="rect1170"
-         height="5.5141511"
-         width="5.5141511"
-         y="2.7877357"
-         x="11.45283" />
-      <rect
-         style="fill:none;fill-opacity:1;stroke:#545b6b;stroke-width:1.57547;stroke-opacity:1"
-         inkscape:export-ydpi="120"
-         inkscape:export-xdpi="120"
-         inkscape:export-filename="L:\gitlab-hiimray\linear-app-launcher\Resources\rect1168.png"
-         id="rect1172"
-         height="5.5141511"
-         width="5.5141511"
-         y="11.45283"
-         x="11.45283" />
-      <rect
-         style="fill:none;fill-opacity:1;stroke:#545b6b;stroke-width:1.57547;stroke-opacity:1"
-         inkscape:export-ydpi="120"
-         inkscape:export-xdpi="120"
-         inkscape:export-filename="L:\gitlab-hiimray\linear-app-launcher\Resources\rect1168.png"
-         id="rect1174"
-         height="5.5141511"
-         width="5.5141511"
-         y="11.45283"
-         x="2.7877357" />
-    </g>
-    <g
-       style="fill:none;stroke:#636977;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
-       id="g1565"
-       transform="matrix(0.32940665,0,0,0.32940665,85.708522,93.493015)"
-       inkscape:export-filename="L:\gitlab-hiimray\linear-app-launcher\Resources\toggle-left-ea-16.png"
-       inkscape:export-xdpi="96"
-       inkscape:export-ydpi="96">
-      <rect
-         inkscape:export-ydpi="120"
-         inkscape:export-xdpi="120"
-         inkscape:export-filename="L:\gitlab-hiimray\linear-app-launcher\Resources\rect5891.png"
-         style="stroke:#636977;stroke-width:1.04014;stroke-opacity:1"
-         id="rect5891"
-         ry="3.6404958"
-         rx="3.6404958"
-         height="7.2809916"
-         width="11.441558"
-         y="4.520071"
-         x="0.52007085" />
-      <circle
-         inkscape:export-ydpi="120"
-         inkscape:export-xdpi="120"
-         inkscape:export-filename="L:\gitlab-hiimray\linear-app-launcher\Resources\rect5891.png"
-         style="stroke:#636977;stroke-width:1.04014;stroke-opacity:1"
-         id="circle5893"
-         r="1.5602125"
-         cy="8.1605663"
-         cx="4.1605668" />
-    </g>
-    <g
-       style="fill:none;stroke:#636977;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
-       id="g1581"
-       transform="matrix(0.33075013,0,0,0.33075013,91.462156,93.398154)"
-       inkscape:export-filename="L:\gitlab-hiimray\linear-app-launcher\Resources\toggle-right-ea-16.png"
-       inkscape:export-xdpi="96"
-       inkscape:export-ydpi="96">
-      <rect
-         inkscape:export-ydpi="120"
-         inkscape:export-xdpi="120"
-         inkscape:export-filename="L:\gitlab-hiimray\linear-app-launcher\Resources\toggle-right-ea-16.png"
-         style="stroke:#636977;stroke-width:1.0339;stroke-opacity:1"
-         id="rect5915"
-         ry="3.618644"
-         rx="3.618644"
-         height="7.237288"
-         width="11.372882"
-         y="4.5169492"
-         x="0.51694918" />
-      <circle
-         inkscape:export-ydpi="120"
-         inkscape:export-xdpi="120"
-         inkscape:export-filename="L:\gitlab-hiimray\linear-app-launcher\Resources\toggle-right-ea-16.png"
-         style="stroke:#636977;stroke-width:1.0339;stroke-opacity:1"
-         id="circle5917"
-         r="1.5508475"
-         cy="8.1355934"
-         cx="8.2711868" />
-    </g>
-    <g
-       style="fill:none;stroke:#636977;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
-       id="g1832"
-       transform="matrix(0.34189664,0,0,0.34189664,58.53086,85.862008)"
-       inkscape:export-filename="L:\gitlab-hiimray\linear-app-launcher\Resources\folder_32.png"
-       inkscape:export-xdpi="96"
-       inkscape:export-ydpi="96">
-      <path
-         inkscape:export-ydpi="122.18182"
-         inkscape:export-xdpi="122.18182"
-         inkscape:export-filename="L:\gitlab-hiimray\linear-app-launcher\Resources\folder-ea-32.png"
-         style="stroke:#636977;stroke-opacity:1"
-         id="path4528"
-         d="m 22,19 a 2,2 0 0 1 -2,2 H 4 A 2,2 0 0 1 2,19 V 5 A 2,2 0 0 1 4,3 h 5 l 2,3 h 9 a 2,2 0 0 1 2,2 z" />
-    </g>
-    <g
-       style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
-       id="g1972"
-       transform="matrix(0.21447029,0,0,0.21447029,102.69715,99.69036)"
-       inkscape:export-filename="L:\gitlab-hiimray\fizzy-launcher\RyzStudio\Windows\Forms\Resources\close_16.png"
-       inkscape:export-xdpi="96"
-       inkscape:export-ydpi="96">
-      <rect
-         id="rect1955"
-         ry="2"
-         rx="2"
-         height="18"
-         width="18"
-         y="3"
-         x="3"
-         style="stroke:#ffffff;stroke-opacity:1" />
-      <line
-         id="line1957"
-         y2="15"
-         x2="15"
-         y1="9"
-         x1="9"
-         style="stroke:#ffffff;stroke-opacity:1" />
-      <line
-         id="line1959"
-         y2="15"
-         x2="9"
-         y1="9"
-         x1="15"
-         style="stroke:#ffffff;stroke-opacity:1" />
-    </g>
-    <g
-       inkscape:export-ydpi="96"
-       inkscape:export-xdpi="96"
-       inkscape:export-filename="L:\gitlab-hiimray\linear-app-launcher\RyzStudio\Windows\Forms\Resources\close_20.png"
-       transform="matrix(0.26458333,0,0,0.26458333,91.972952,99.256047)"
-       id="g1972-0"
-       style="fill:none;stroke:#9c9eab;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1">
-      <rect
-         style="stroke:#9c9eab;stroke-opacity:1"
-         x="3"
-         y="3"
-         width="18"
-         height="18"
-         rx="2"
-         ry="2"
-         id="rect1955-1" />
-      <line
-         style="stroke:#9c9eab;stroke-opacity:1"
-         x1="9"
-         y1="9"
-         x2="15"
-         y2="15"
-         id="line1957-7" />
-      <line
-         style="stroke:#9c9eab;stroke-opacity:1"
-         x1="15"
-         y1="9"
-         x2="9"
-         y2="15"
-         id="line1959-0" />
-    </g>
-    <g
-       inkscape:export-ydpi="96"
-       inkscape:export-xdpi="96"
-       inkscape:export-filename="L:\gitlab-hiimray\fizzy-launcher\RyzStudio\Windows\Forms\Resources\close2_16.png"
-       transform="matrix(0.21447029,0,0,0.21447029,103.16487,107.37436)"
-       id="g1972-6"
-       style="fill:none;stroke:#e43d5b;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1">
-      <rect
-         style="stroke:#e43d5b;stroke-opacity:1"
-         x="3"
-         y="3"
-         width="18"
-         height="18"
-         rx="2"
-         ry="2"
-         id="rect1955-5" />
-      <line
-         style="stroke:#e43d5b;stroke-opacity:1"
-         x1="9"
-         y1="9"
-         x2="15"
-         y2="15"
-         id="line1957-79" />
-      <line
-         style="stroke:#e43d5b;stroke-opacity:1"
-         x1="15"
-         y1="9"
-         x2="9"
-         y2="15"
-         id="line1959-9" />
-    </g>
-    <g
-       style="fill:none;stroke:#e43d5b;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
-       id="g1972-0-6"
-       transform="matrix(0.26458333,0,0,0.26458333,92.44067,106.94004)"
-       inkscape:export-filename="L:\gitlab-hiimray\fizzy-launcher\RyzStudio\Windows\Forms\Resources\close2_20.png"
-       inkscape:export-xdpi="96"
-       inkscape:export-ydpi="96">
-      <rect
-         id="rect1955-1-5"
-         ry="2"
-         rx="2"
-         height="18"
-         width="18"
-         y="3"
-         x="3"
-         style="stroke:#e43d5b;stroke-opacity:1" />
-      <line
-         id="line1957-7-3"
-         y2="15"
-         x2="15"
-         y1="9"
-         x1="9"
-         style="stroke:#e43d5b;stroke-opacity:1" />
-      <line
-         id="line1959-0-0"
-         y2="15"
-         x2="9"
-         y1="9"
-         x1="15"
-         style="stroke:#e43d5b;stroke-opacity:1" />
-    </g>
-    <g
-       id="g2084"
-       style="stroke:#9c9eab;stroke-opacity:1"
-       inkscape:export-filename="L:\gitlab-hiimray\linear-app-launcher\RyzStudio\Windows\Forms\Resources\minimise_20.png"
-       inkscape:export-xdpi="96"
-       inkscape:export-ydpi="96">
-      <rect
-         id="rect2046"
-         ry="0.52916664"
-         rx="0.52916664"
-         height="4.7624998"
-         width="4.7624998"
-         y="100.26458"
-         x="50.264584"
-         style="fill:none;stroke:#9c9eab;stroke-width:0.529167;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" />
-      <line
-         id="line2048"
-         y2="103.70419"
-         x2="53.704166"
-         y1="103.70419"
-         x1="51.587502"
-         style="fill:none;stroke:#9c9eab;stroke-width:0.529167;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" />
-    </g>
-    <g
-       id="g2093"
-       style="stroke:#9c9eab;stroke-opacity:1"
-       inkscape:export-filename="L:\gitlab-hiimray\linear-app-launcher\RyzStudio\Windows\Forms\Resources\maximise_20.png"
-       inkscape:export-xdpi="96"
-       inkscape:export-ydpi="96">
-      <g
-         id="g2088"
-         style="stroke:#9c9eab;stroke-opacity:1">
-        <rect
-           id="rect2046-3"
-           ry="0.52916664"
-           rx="0.52916664"
-           height="4.7624998"
-           width="4.7624998"
-           y="100.23583"
-           x="57.506439"
-           style="fill:none;stroke:#9c9eab;stroke-width:0.529167;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" />
-        <line
-           id="line2048-3"
-           y2="101.55878"
-           x2="60.946022"
-           y1="101.55878"
-           x1="58.829357"
-           style="fill:none;stroke:#9c9eab;stroke-width:0.529167;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" />
-      </g>
-    </g>
-    <g
-       style="stroke:#ffa800;stroke-opacity:1"
-       id="g2084-0"
-       transform="translate(0.28551938,6.8433626)"
-       inkscape:export-filename="L:\gitlab-hiimray\linear-app-launcher\RyzStudio\Windows\Forms\Resources\minimise2_20.png"
-       inkscape:export-xdpi="96"
-       inkscape:export-ydpi="96">
-      <rect
-         style="fill:none;stroke:#ffa800;stroke-width:0.529167;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
-         x="50.264584"
-         y="100.26458"
-         width="4.7624998"
-         height="4.7624998"
-         rx="0.52916664"
-         ry="0.52916664"
-         id="rect2046-8" />
-      <line
-         style="fill:none;stroke:#ffa800;stroke-width:0.529167;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
-         x1="51.587502"
-         y1="103.70419"
-         x2="53.704166"
-         y2="103.70419"
-         id="line2048-0" />
-    </g>
-    <g
-       style="stroke:#ffa800;stroke-opacity:1"
-       id="g2093-0"
-       transform="translate(0.28551938,6.8433626)"
-       inkscape:export-filename="L:\gitlab-hiimray\linear-app-launcher\RyzStudio\Windows\Forms\Resources\maximise2_20.png"
-       inkscape:export-xdpi="96"
-       inkscape:export-ydpi="96">
-      <g
-         style="stroke:#ffa800;stroke-opacity:1"
-         id="g2088-0">
-        <rect
-           style="fill:none;stroke:#ffa800;stroke-width:0.529167;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
-           x="57.506439"
-           y="100.23583"
-           width="4.7624998"
-           height="4.7624998"
-           rx="0.52916664"
-           ry="0.52916664"
-           id="rect2046-3-0" />
-        <line
-           style="fill:none;stroke:#ffa800;stroke-width:0.529167;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
-           x1="58.829357"
-           y1="101.55878"
-           x2="60.946022"
-           y2="101.55878"
-           id="line2048-3-5" />
-      </g>
-    </g>
-    <path
-       inkscape:export-filename="N:\icon-16.png"
-       inkscape:export-ydpi="150"
-       inkscape:export-xdpi="150"
-       id="path852"
-       d="m 115.92909,151.32554 -10.13759,3.10677 -7.82051,-7.03087 2.31709,-10.13756 10.1376,-3.10677 7.82051,7.03082 z"
-       inkscape:connector-curvature="0"
-       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#545b6b;stroke-width:1.33802;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-    <rect
-       style="fill:none;fill-opacity:1;stroke:#e43d5b;stroke-width:0.633999;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
-       inkscape:export-ydpi="120"
-       inkscape:export-xdpi="120"
-       inkscape:export-filename="L:\gitlab-hiimray\linear-app-launcher\Resources\rect1168.png"
-       id="rect1168-4"
-       height="2.2190003"
-       width="2.2190003"
-       y="115.46481"
-       x="49.049667" />
-    <rect
-       style="fill:none;fill-opacity:1;stroke:#f9a400;stroke-width:0.633999;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
-       inkscape:export-ydpi="120"
-       inkscape:export-xdpi="120"
-       inkscape:export-filename="L:\gitlab-hiimray\linear-app-launcher\Resources\rect1168.png"
-       id="rect1170-3"
-       height="2.2190003"
-       width="2.2190003"
-       y="115.46481"
-       x="52.536667" />
-    <rect
-       style="fill:none;fill-opacity:1;stroke:#6c65c4;stroke-width:0.633999;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
-       inkscape:export-ydpi="120"
-       inkscape:export-xdpi="120"
-       inkscape:export-filename="L:\gitlab-hiimray\linear-app-launcher\Resources\rect1168.png"
-       id="rect1172-2"
-       height="2.2190003"
-       width="2.2190003"
-       y="118.95181"
-       x="52.536667" />
-    <rect
-       style="fill:none;fill-opacity:1;stroke:#00b7d1;stroke-width:0.633999;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
-       inkscape:export-ydpi="120"
-       inkscape:export-xdpi="120"
-       inkscape:export-filename="L:\gitlab-hiimray\linear-app-launcher\Resources\rect1168.png"
-       id="rect1174-6"
-       height="2.2190003"
-       width="2.2190003"
-       y="118.95181"
-       x="49.049667" />
-    <g
-       transform="translate(-33.270941,-1.3308419)"
-       id="g2186-8">
-      <rect
-         style="fill:none;fill-opacity:1;stroke:#e43d5b;stroke-width:0.633999;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
-         inkscape:export-ydpi="120"
-         inkscape:export-xdpi="120"
-         inkscape:export-filename="L:\gitlab-hiimray\linear-app-launcher\Resources\rect1168.png"
-         id="rect1168-4-6"
-         height="2.2190003"
-         width="2.2190003"
-         y="117.17588"
-         x="90.749245" />
-      <rect
-         style="fill:none;fill-opacity:1;stroke:#f9a400;stroke-width:0.633999;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
-         inkscape:export-ydpi="120"
-         inkscape:export-xdpi="120"
-         inkscape:export-filename="L:\gitlab-hiimray\linear-app-launcher\Resources\rect1168.png"
-         id="rect1170-3-6"
-         height="2.2190003"
-         width="2.2190003"
-         y="117.17588"
-         x="94.236244" />
-      <rect
-         style="fill:none;fill-opacity:1;stroke:#6c65c4;stroke-width:0.633999;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
-         inkscape:export-ydpi="120"
-         inkscape:export-xdpi="120"
-         inkscape:export-filename="L:\gitlab-hiimray\linear-app-launcher\Resources\rect1168.png"
-         id="rect1172-2-3"
-         height="2.2190003"
-         width="2.2190003"
-         y="120.66288"
-         x="94.236244" />
-      <rect
-         style="fill:none;fill-opacity:1;stroke:#00b7d1;stroke-width:0.633999;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
-         inkscape:export-ydpi="120"
-         inkscape:export-xdpi="120"
-         inkscape:export-filename="L:\gitlab-hiimray\linear-app-launcher\Resources\rect1168.png"
-         id="rect1174-6-1"
-         height="2.2190003"
-         width="2.2190003"
-         y="120.66288"
-         x="90.749245" />
-    </g>
-    <g
-       id="g2309"
-       transform="matrix(0.37569687,0,0,0.37569687,37.123099,77.557604)"
-       inkscape:export-filename="L:\L\xData (95785206A)\2020\projects\linear-app-launcher\graphics\2\icon16.png"
-       inkscape:export-xdpi="96"
-       inkscape:export-ydpi="96">
-      <path
-         style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#545b6b;stroke-width:2.09266;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-         inkscape:connector-curvature="0"
-         d="M 88.59595,152.12833 72.74081,156.9873 60.509578,145.99106 64.133499,130.13597 79.98864,125.277 92.21988,136.27316 Z"
-         id="path852-6"
-         inkscape:export-xdpi="96"
-         inkscape:export-ydpi="96"
-         inkscape:export-filename="L:\L\xData (95785206A)\2020\projects\linear-app-launcher\graphics\2\icon128.png" />
-      <g
-         id="g2186-8-3"
-         transform="matrix(2.6757045,0,0,2.6757045,-174.08721,-180.02964)">
-        <rect
-           x="90.749245"
-           y="117.17588"
-           width="2.2190003"
-           height="2.2190003"
-           id="rect1168-4-6-9"
-           inkscape:export-filename="L:\gitlab-hiimray\linear-app-launcher\Resources\rect1168.png"
-           inkscape:export-xdpi="120"
-           inkscape:export-ydpi="120"
-           style="fill:none;fill-opacity:1;stroke:#e43d5b;stroke-width:0.633999;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" />
-        <rect
-           x="94.236244"
-           y="117.17588"
-           width="2.2190003"
-           height="2.2190003"
-           id="rect1170-3-6-7"
-           inkscape:export-filename="L:\gitlab-hiimray\linear-app-launcher\Resources\rect1168.png"
-           inkscape:export-xdpi="120"
-           inkscape:export-ydpi="120"
-           style="fill:none;fill-opacity:1;stroke:#f9a400;stroke-width:0.633999;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" />
-        <rect
-           x="94.236244"
-           y="120.66288"
-           width="2.2190003"
-           height="2.2190003"
-           id="rect1172-2-3-7"
-           inkscape:export-filename="L:\gitlab-hiimray\linear-app-launcher\Resources\rect1168.png"
-           inkscape:export-xdpi="120"
-           inkscape:export-ydpi="120"
-           style="fill:none;fill-opacity:1;stroke:#6c65c4;stroke-width:0.633999;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" />
-        <rect
-           x="90.749245"
-           y="120.66288"
-           width="2.2190003"
-           height="2.2190003"
-           id="rect1174-6-1-8"
-           inkscape:export-filename="L:\gitlab-hiimray\linear-app-launcher\Resources\rect1168.png"
-           inkscape:export-xdpi="120"
-           inkscape:export-ydpi="120"
-           style="fill:none;fill-opacity:1;stroke:#00b7d1;stroke-width:0.633999;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" />
-      </g>
-    </g>
-  </g>
-</svg>
diff --git a/Resources/toggle-left-ea-16.png b/Resources/toggle-left-ea-16.png
deleted file mode 100644
index e7895fd54022e74fed851ee550eb693be6ae2aa1..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 506
zcmV<W0R{evP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00001b5ch_0Itp)
z=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!T<mc!T}X1N`L?W0gp*UK~y+T)snqS
zLSYof&$$jk&=i$JA4C6vWhwTt1PyYbr8&|pG=f4Y9ipaCF{niiRHC^hih?%jOZswY
zE+`1mrW&e2PtUzKimaj4AH1A<pL@=GpL5=qY9IcL<eCcES*iH(IDplpi@zy}P*!1C
zO(mi^P0%-R`+{>M5@V(vBy0<DQPZnol4gWaELBJXnM8DrUEbgjJ{$^*=cRPF+0fWI
zLM$B$aW<6*U+I-qxO@v97TRFpA(N%YktCs;_Lln4n>6gh#SCn<B5%=R?SIT)9$y<}
z-{db&t}WKSE?62=P;4XSy@$fP9fiYX6FJg}hy{5oXluzR`He8`BG?q;^$!GI{sCGg
zZJKJEx$X?{z*MGFw|60rIfO)!Wj*T;Fas4Kr*MVC_?>!Re04uR-KxwohL*PApgR+f
zrj7KUOn8Hn2u=(>tlM;X=VzHXhI#D4_;!W3py}0MU}hXKj!~R&?oY=f>tB72PltNB
wTnVs3{n)7GQ?5qa_(;1m>16cWkZK&F58rczF09|kUjP6A07*qoM6N<$f`0zlMF0Q*

diff --git a/Resources/toggle-right-ea-16.png b/Resources/toggle-right-ea-16.png
deleted file mode 100644
index aedd7c2f94120ca876963df3b9500d46e6f058f4..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 502
zcmV<S0SW$zP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00001b5ch_0Itp)
z=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!T<mc!T}X1N`L?W0gFjQK~y+T)soLE
zL{SvS&$$+&Ed5%rkiURrBy47*F=b<`yfO5~hRDoVC=2CHqu9)hc(bvc1(AiF%mN$v
z11yB{BP)f{+~a%SOv;;N?Ng_7?)RR1?&;i1{~xY+vZj-Ltn@s>L0F?FR`V=ECyHf#
zC!0Dmf>$6COU#i-nwj>IP!QrLqx)f!Cb%(JSV$J~+0+JGb|Q$4V_}KrGbz{0^f75C
zx;4oV3E#ZFT<<kBc33R5#lk_3#Nx-K>CMeKqm}$0;P4b~%Obpjb;62m&2=NUkMDbk
zYZVCvi1`qUUyx;CUUjohSE+{jAq?L?y$6Kp0C7NhIe)-{bf7-T%P*Cb7;jLRjG1P*
zysSnut-vis?D!=sDx%s^du#1EW?;^oDb~D(Hp5md9`#Q6$Y-2wt#l8r+(jefZB6yz
zyT^}7Y=toRHLo?xUYup(H0E)Lrz~jV2c!GJz*_Lcct#1K^LaPpY<_>FiJ4?Cm-GVK
s96+JwitNV}J~e;F&805N(m#jj3n7Dw9b#Vt6#xJL07*qoM6N<$f{}0FssI20

diff --git a/Windows/Forms/OptionsForm.cs b/Windows/Forms/OptionsForm.cs
deleted file mode 100644
index ff34358..0000000
--- a/Windows/Forms/OptionsForm.cs
+++ /dev/null
@@ -1,446 +0,0 @@
-using AppLauncher.Models;
-using RyzStudio.Windows.ThemedForms;
-using System;
-using System.Drawing;
-using System.Text;
-
-namespace AppLauncher.Windows.Forms
-{
-    public class OptionsForm : TDialogForm
-    {
-        private System.Windows.Forms.Label label1;
-        private TButton button1;
-        private TTextBox textBox1;
-        private TYesNoPickerBox pickerBox1;
-        private System.Windows.Forms.Label label2;
-        private TYesNoPickerBox pickerBox2;
-        private System.Windows.Forms.Label label3;
-        private TYesNoPickerBox pickerBox3;
-        private System.Windows.Forms.Label label4;
-        private System.Windows.Forms.Label label5;
-        private RyzStudio.Windows.Forms.THorizontalSeparator horizontalSeparator2;
-        private TYesNoPickerBox pickerBox4;
-        private System.Windows.Forms.Label label6;
-        private TYesNoPickerBox pickerBox5;
-        private System.Windows.Forms.Label label7;
-        private System.Windows.Forms.Label label8;
-        private TPickerBox pickerBox6;
-
-        public MainForm parentForm { get; set; } = null;
-        protected LauncherSession.HotKeyOptions hotKeyOptions = null;
-
-        public OptionsForm(MainForm parent) : base()
-        {
-            InitializeComponent();
-
-            parentForm = parent;
-
-            textBox1.InnerTextBox.ReadOnly = true;
-            textBox1.InnerTextBox.BackColor = Color.White;
-            textBox1.InnerTextBox.KeyUp += textBox1_KeyUp;
-
-            pickerBox6.ComboBox.Items.Clear();
-            foreach (string item in Enum.GetNames(typeof(LauncherSession.AutoSaveOption)))
-            {
-                pickerBox6.ComboBox.Items.Add(item);
-            }
-
-            if (pickerBox6.ComboBox.Items.Count > 0) pickerBox6.ComboBox.SelectedIndex = 0;
-
-        }
-
-        private void InitializeComponent()
-        {
-            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(OptionsForm));
-            this.textBox1 = new RyzStudio.Windows.ThemedForms.TTextBox();
-            this.label1 = new System.Windows.Forms.Label();
-            this.button1 = new RyzStudio.Windows.ThemedForms.TButton();
-            this.pickerBox1 = new RyzStudio.Windows.ThemedForms.TYesNoPickerBox();
-            this.label2 = new System.Windows.Forms.Label();
-            this.pickerBox2 = new RyzStudio.Windows.ThemedForms.TYesNoPickerBox();
-            this.label3 = new System.Windows.Forms.Label();
-            this.pickerBox3 = new RyzStudio.Windows.ThemedForms.TYesNoPickerBox();
-            this.label4 = new System.Windows.Forms.Label();
-            this.label5 = new System.Windows.Forms.Label();
-            this.horizontalSeparator2 = new RyzStudio.Windows.Forms.THorizontalSeparator();
-            this.pickerBox4 = new RyzStudio.Windows.ThemedForms.TYesNoPickerBox();
-            this.label6 = new System.Windows.Forms.Label();
-            this.pickerBox5 = new RyzStudio.Windows.ThemedForms.TYesNoPickerBox();
-            this.label7 = new System.Windows.Forms.Label();
-            this.label8 = new System.Windows.Forms.Label();
-            this.pickerBox6 = new RyzStudio.Windows.ThemedForms.TPickerBox();
-            ((System.ComponentModel.ISupportInitialize)(this.imgbxClose)).BeginInit();
-            this.SuspendLayout();
-            // 
-            // imgbxClose
-            // 
-            this.imgbxClose.Image = ((System.Drawing.Image)(resources.GetObject("imgbxClose.Image")));
-            this.imgbxClose.Location = new System.Drawing.Point(367, 5);
-            // 
-            // panel1
-            // 
-            this.panel1.Location = new System.Drawing.Point(394, 474);
-            // 
-            // area1
-            // 
-            this.area1.Location = new System.Drawing.Point(1, 474);
-            this.area1.Size = new System.Drawing.Size(392, 5);
-            // 
-            // textBox1
-            // 
-            this.textBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
-            this.textBox1.BackColor = System.Drawing.Color.Transparent;
-            this.textBox1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F);
-            this.textBox1.Location = new System.Drawing.Point(159, 206);
-            this.textBox1.Margin = new System.Windows.Forms.Padding(10, 6, 10, 6);
-            this.textBox1.Name = "textBox1";
-            this.textBox1.Padding = new System.Windows.Forms.Padding(10, 10, 9, 9);
-            this.textBox1.Size = new System.Drawing.Size(220, 32);
-            this.textBox1.SubmitButton = null;
-            this.textBox1.TabIndex = 152;
-            this.textBox1.UseSystemPasswordChar = false;
-            // 
-            // label1
-            // 
-            this.label1.BackColor = System.Drawing.Color.Transparent;
-            this.label1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(95)))), ((int)(((byte)(99)))), ((int)(((byte)(104)))));
-            this.label1.Location = new System.Drawing.Point(18, 83);
-            this.label1.Margin = new System.Windows.Forms.Padding(0);
-            this.label1.Name = "label1";
-            this.label1.Size = new System.Drawing.Size(131, 32);
-            this.label1.TabIndex = 153;
-            this.label1.Text = "Use Control";
-            this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
-            // 
-            // button1
-            // 
-            this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
-            this.button1.BackColor = System.Drawing.Color.Transparent;
-            this.button1.DefaultImage = null;
-            this.button1.DownImage = null;
-            this.button1.IsSelected = false;
-            this.button1.LabelText = "&Save";
-            this.button1.Location = new System.Drawing.Point(251, 427);
-            this.button1.Name = "button1";
-            this.button1.OverImage = null;
-            this.button1.Padding = new System.Windows.Forms.Padding(4, 4, 3, 3);
-            this.button1.Size = new System.Drawing.Size(128, 32);
-            this.button1.TabIndex = 173;
-            this.button1.Click += new System.EventHandler(this.button1_Click);
-            // 
-            // pickerBox1
-            // 
-            this.pickerBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
-            this.pickerBox1.BackColor = System.Drawing.Color.Transparent;
-            this.pickerBox1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F);
-            this.pickerBox1.Location = new System.Drawing.Point(159, 83);
-            this.pickerBox1.Margin = new System.Windows.Forms.Padding(10, 4, 10, 4);
-            this.pickerBox1.Name = "pickerBox1";
-            this.pickerBox1.Padding = new System.Windows.Forms.Padding(10, 6, 7, 5);
-            this.pickerBox1.Size = new System.Drawing.Size(220, 32);
-            this.pickerBox1.SubmitButton = null;
-            this.pickerBox1.TabIndex = 174;
-            this.pickerBox1.Value = false;
-            // 
-            // label2
-            // 
-            this.label2.BackColor = System.Drawing.Color.Transparent;
-            this.label2.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
-            this.label2.ForeColor = System.Drawing.Color.Black;
-            this.label2.Location = new System.Drawing.Point(8, 50);
-            this.label2.Margin = new System.Windows.Forms.Padding(0);
-            this.label2.Name = "label2";
-            this.label2.Size = new System.Drawing.Size(385, 24);
-            this.label2.TabIndex = 175;
-            this.label2.Text = "Toggle Hotkey";
-            this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
-            // 
-            // pickerBox2
-            // 
-            this.pickerBox2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
-            this.pickerBox2.BackColor = System.Drawing.Color.Transparent;
-            this.pickerBox2.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F);
-            this.pickerBox2.Location = new System.Drawing.Point(159, 124);
-            this.pickerBox2.Margin = new System.Windows.Forms.Padding(10, 4, 10, 4);
-            this.pickerBox2.Name = "pickerBox2";
-            this.pickerBox2.Padding = new System.Windows.Forms.Padding(10, 6, 7, 5);
-            this.pickerBox2.Size = new System.Drawing.Size(220, 32);
-            this.pickerBox2.SubmitButton = null;
-            this.pickerBox2.TabIndex = 177;
-            this.pickerBox2.Value = false;
-            // 
-            // label3
-            // 
-            this.label3.BackColor = System.Drawing.Color.Transparent;
-            this.label3.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(95)))), ((int)(((byte)(99)))), ((int)(((byte)(104)))));
-            this.label3.Location = new System.Drawing.Point(18, 124);
-            this.label3.Margin = new System.Windows.Forms.Padding(0);
-            this.label3.Name = "label3";
-            this.label3.Size = new System.Drawing.Size(131, 32);
-            this.label3.TabIndex = 176;
-            this.label3.Text = "Use Alt";
-            this.label3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
-            // 
-            // pickerBox3
-            // 
-            this.pickerBox3.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
-            this.pickerBox3.BackColor = System.Drawing.Color.Transparent;
-            this.pickerBox3.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F);
-            this.pickerBox3.Location = new System.Drawing.Point(159, 165);
-            this.pickerBox3.Margin = new System.Windows.Forms.Padding(10, 4, 10, 4);
-            this.pickerBox3.Name = "pickerBox3";
-            this.pickerBox3.Padding = new System.Windows.Forms.Padding(10, 6, 7, 5);
-            this.pickerBox3.Size = new System.Drawing.Size(220, 32);
-            this.pickerBox3.SubmitButton = null;
-            this.pickerBox3.TabIndex = 179;
-            this.pickerBox3.Value = false;
-            // 
-            // label4
-            // 
-            this.label4.BackColor = System.Drawing.Color.Transparent;
-            this.label4.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(95)))), ((int)(((byte)(99)))), ((int)(((byte)(104)))));
-            this.label4.Location = new System.Drawing.Point(18, 165);
-            this.label4.Margin = new System.Windows.Forms.Padding(0);
-            this.label4.Name = "label4";
-            this.label4.Size = new System.Drawing.Size(131, 32);
-            this.label4.TabIndex = 178;
-            this.label4.Text = "Use Shift";
-            this.label4.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
-            // 
-            // label5
-            // 
-            this.label5.BackColor = System.Drawing.Color.Transparent;
-            this.label5.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(95)))), ((int)(((byte)(99)))), ((int)(((byte)(104)))));
-            this.label5.Location = new System.Drawing.Point(18, 206);
-            this.label5.Margin = new System.Windows.Forms.Padding(0);
-            this.label5.Name = "label5";
-            this.label5.Size = new System.Drawing.Size(131, 32);
-            this.label5.TabIndex = 180;
-            this.label5.Text = "Key";
-            this.label5.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
-            // 
-            // horizontalSeparator2
-            // 
-            this.horizontalSeparator2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
-            this.horizontalSeparator2.Location = new System.Drawing.Point(10, 247);
-            this.horizontalSeparator2.MaximumSize = new System.Drawing.Size(4920, 2);
-            this.horizontalSeparator2.Name = "horizontalSeparator2";
-            this.horizontalSeparator2.Size = new System.Drawing.Size(380, 2);
-            this.horizontalSeparator2.TabIndex = 181;
-            // 
-            // pickerBox4
-            // 
-            this.pickerBox4.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
-            this.pickerBox4.BackColor = System.Drawing.Color.Transparent;
-            this.pickerBox4.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F);
-            this.pickerBox4.Location = new System.Drawing.Point(159, 300);
-            this.pickerBox4.Margin = new System.Windows.Forms.Padding(10, 4, 10, 4);
-            this.pickerBox4.Name = "pickerBox4";
-            this.pickerBox4.Padding = new System.Windows.Forms.Padding(10, 6, 7, 5);
-            this.pickerBox4.Size = new System.Drawing.Size(220, 32);
-            this.pickerBox4.SubmitButton = null;
-            this.pickerBox4.TabIndex = 183;
-            this.pickerBox4.Value = true;
-            // 
-            // label6
-            // 
-            this.label6.BackColor = System.Drawing.Color.Transparent;
-            this.label6.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(95)))), ((int)(((byte)(99)))), ((int)(((byte)(104)))));
-            this.label6.Location = new System.Drawing.Point(18, 300);
-            this.label6.Margin = new System.Windows.Forms.Padding(0);
-            this.label6.Name = "label6";
-            this.label6.Size = new System.Drawing.Size(131, 32);
-            this.label6.TabIndex = 182;
-            this.label6.Text = "Hide On Close";
-            this.label6.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
-            // 
-            // pickerBox5
-            // 
-            this.pickerBox5.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
-            this.pickerBox5.BackColor = System.Drawing.Color.Transparent;
-            this.pickerBox5.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F);
-            this.pickerBox5.Location = new System.Drawing.Point(159, 341);
-            this.pickerBox5.Margin = new System.Windows.Forms.Padding(10, 4, 10, 4);
-            this.pickerBox5.Name = "pickerBox5";
-            this.pickerBox5.Padding = new System.Windows.Forms.Padding(10, 6, 7, 5);
-            this.pickerBox5.Size = new System.Drawing.Size(220, 32);
-            this.pickerBox5.SubmitButton = null;
-            this.pickerBox5.TabIndex = 185;
-            this.pickerBox5.Value = true;
-            // 
-            // label7
-            // 
-            this.label7.BackColor = System.Drawing.Color.Transparent;
-            this.label7.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(95)))), ((int)(((byte)(99)))), ((int)(((byte)(104)))));
-            this.label7.Location = new System.Drawing.Point(18, 341);
-            this.label7.Margin = new System.Windows.Forms.Padding(0);
-            this.label7.Name = "label7";
-            this.label7.Size = new System.Drawing.Size(131, 32);
-            this.label7.TabIndex = 184;
-            this.label7.Text = "Hide On Click";
-            this.label7.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
-            // 
-            // label8
-            // 
-            this.label8.BackColor = System.Drawing.Color.Transparent;
-            this.label8.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(95)))), ((int)(((byte)(99)))), ((int)(((byte)(104)))));
-            this.label8.Location = new System.Drawing.Point(18, 259);
-            this.label8.Margin = new System.Windows.Forms.Padding(0);
-            this.label8.Name = "label8";
-            this.label8.Size = new System.Drawing.Size(131, 32);
-            this.label8.TabIndex = 186;
-            this.label8.Text = "Auto Save";
-            this.label8.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
-            // 
-            // pickerBox6
-            // 
-            this.pickerBox6.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
-            this.pickerBox6.BackColor = System.Drawing.Color.Transparent;
-            this.pickerBox6.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F);
-            this.pickerBox6.Location = new System.Drawing.Point(159, 259);
-            this.pickerBox6.Margin = new System.Windows.Forms.Padding(10, 4, 10, 4);
-            this.pickerBox6.Name = "pickerBox6";
-            this.pickerBox6.Padding = new System.Windows.Forms.Padding(10, 6, 7, 5);
-            this.pickerBox6.Size = new System.Drawing.Size(220, 32);
-            this.pickerBox6.SubmitButton = null;
-            this.pickerBox6.TabIndex = 187;
-            // 
-            // OptionsForm
-            // 
-            this.ClientSize = new System.Drawing.Size(400, 480);
-            this.Controls.Add(this.pickerBox6);
-            this.Controls.Add(this.label8);
-            this.Controls.Add(this.pickerBox5);
-            this.Controls.Add(this.label7);
-            this.Controls.Add(this.pickerBox4);
-            this.Controls.Add(this.label6);
-            this.Controls.Add(this.horizontalSeparator2);
-            this.Controls.Add(this.label5);
-            this.Controls.Add(this.pickerBox3);
-            this.Controls.Add(this.label4);
-            this.Controls.Add(this.pickerBox2);
-            this.Controls.Add(this.label3);
-            this.Controls.Add(this.label2);
-            this.Controls.Add(this.pickerBox1);
-            this.Controls.Add(this.button1);
-            this.Controls.Add(this.label1);
-            this.Controls.Add(this.textBox1);
-            this.Name = "OptionsForm";
-            this.Title = "Options";
-            this.Controls.SetChildIndex(this.imgbxClose, 0);
-            this.Controls.SetChildIndex(this.panel1, 0);
-            this.Controls.SetChildIndex(this.area1, 0);
-            this.Controls.SetChildIndex(this.textBox1, 0);
-            this.Controls.SetChildIndex(this.label1, 0);
-            this.Controls.SetChildIndex(this.button1, 0);
-            this.Controls.SetChildIndex(this.pickerBox1, 0);
-            this.Controls.SetChildIndex(this.label2, 0);
-            this.Controls.SetChildIndex(this.label3, 0);
-            this.Controls.SetChildIndex(this.pickerBox2, 0);
-            this.Controls.SetChildIndex(this.label4, 0);
-            this.Controls.SetChildIndex(this.pickerBox3, 0);
-            this.Controls.SetChildIndex(this.label5, 0);
-            this.Controls.SetChildIndex(this.horizontalSeparator2, 0);
-            this.Controls.SetChildIndex(this.label6, 0);
-            this.Controls.SetChildIndex(this.pickerBox4, 0);
-            this.Controls.SetChildIndex(this.label7, 0);
-            this.Controls.SetChildIndex(this.pickerBox5, 0);
-            this.Controls.SetChildIndex(this.label8, 0);
-            this.Controls.SetChildIndex(this.pickerBox6, 0);
-            ((System.ComponentModel.ISupportInitialize)(this.imgbxClose)).EndInit();
-            this.ResumeLayout(false);
-
-        }
-
-        protected override void OnShown(EventArgs e)
-        {
-            base.OnShown(e);
-
-            if (hotKeyOptions == null) hotKeyOptions = new LauncherSession.HotKeyOptions();
-
-            if (parentForm == null)
-            {
-                return;
-            }
-
-            if (parentForm.CurrentSession == null)
-            {
-                return;
-            }
-
-            // hotkey
-            if (parentForm.CurrentSession.HotKey != null)
-            {
-                hotKeyOptions.IsCtrl = parentForm.CurrentSession.HotKey.IsCtrl;
-                hotKeyOptions.IsAlt = parentForm.CurrentSession.HotKey.IsAlt;
-                hotKeyOptions.IsShift = parentForm.CurrentSession.HotKey.IsShift;
-                hotKeyOptions.Key = parentForm.CurrentSession.HotKey.Key;
-
-                pickerBox1.Value = hotKeyOptions.IsCtrl;
-                pickerBox2.Value = hotKeyOptions.IsAlt;
-                pickerBox3.Value = hotKeyOptions.IsShift;
-
-                textBox1.Text = hotKeyOptions.KeyCode.ToString();
-            }
-
-            pickerBox4.Value = parentForm.CurrentSession.HideOnClose;
-            pickerBox5.Value = parentForm.CurrentSession.HideOnClick;
-            pickerBox6.ComboBox.SelectedIndex = (int)parentForm.CurrentSession.AutoSave;
-
-        }
-
-        private void button1_Click(object sender, EventArgs e)
-        {
-            if (hotKeyOptions == null) hotKeyOptions = new LauncherSession.HotKeyOptions();
-
-            if (parentForm != null)
-            {
-                if (parentForm.CurrentSession == null) parentForm.CurrentSession = new LauncherSession();
-                if (parentForm.CurrentSession.HotKey == null) parentForm.CurrentSession.HotKey = new LauncherSession.HotKeyOptions();
-
-                parentForm.CurrentSession.HotKey.IsCtrl = pickerBox1.Value;
-                parentForm.CurrentSession.HotKey.IsAlt = pickerBox2.Value;
-                parentForm.CurrentSession.HotKey.IsShift = pickerBox3.Value;
-                parentForm.CurrentSession.HotKey.Key = hotKeyOptions.Key;
-
-                parentForm.CurrentSession.HideOnClose = pickerBox4.Value;
-                parentForm.CurrentSession.HideOnClick = pickerBox5.Value;
-                parentForm.CurrentSession.AutoSave = (LauncherSession.AutoSaveOption)pickerBox6.ComboBox.SelectedIndex;
-
-            }
-
-            this.Close();
-        }
-
-        private void textBox1_KeyUp(object sender, System.Windows.Forms.KeyEventArgs e)
-        {
-            if (e.KeyCode == System.Windows.Forms.Keys.ControlKey) return;
-            if (e.KeyCode == System.Windows.Forms.Keys.ShiftKey) return;
-            if (e.KeyCode == System.Windows.Forms.Keys.Menu) return;
-
-            if (hotKeyOptions == null) hotKeyOptions = new LauncherSession.HotKeyOptions();
-            //hotKeyOptions.IsCtrl = pickerBox1.Value;
-            //hotKeyOptions.IsAlt = pickerBox2.Value;
-            //hotKeyOptions.IsShift = pickerBox3.Value;
-            hotKeyOptions.Key = (int)e.KeyCode;
-
-            //StringBuilder sb = new StringBuilder();
-            //if (hotKeyOptions.IsCtrl) sb = sb.Append("Ctrl + ");
-            //if (hotKeyOptions.IsAlt) sb = sb.Append("Alt + ");
-            //if (hotKeyOptions.IsShift) sb = sb.Append("Shift + ");
-            //sb = sb.Append(e.KeyCode.ToString());
-
-            //textBox1.Text = sb.ToString();
-            textBox1.Text = e.KeyCode.ToString();
-        }
-
-    }
-}
\ No newline at end of file
diff --git a/Windows/Forms/OptionsForm.resx b/Windows/Forms/OptionsForm.resx
deleted file mode 100644
index 3747e00..0000000
--- a/Windows/Forms/OptionsForm.resx
+++ /dev/null
@@ -1,131 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!-- 
-    Microsoft ResX Schema 
-    
-    Version 2.0
-    
-    The primary goals of this format is to allow a simple XML format 
-    that is mostly human readable. The generation and parsing of the 
-    various data types are done through the TypeConverter classes 
-    associated with the data types.
-    
-    Example:
-    
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-                
-    There are any number of "resheader" rows that contain simple 
-    name/value pairs.
-    
-    Each data row contains a name, and value. The row also contains a 
-    type or mimetype. Type corresponds to a .NET class that support 
-    text/value conversion through the TypeConverter architecture. 
-    Classes that don't support this are serialized and stored with the 
-    mimetype set.
-    
-    The mimetype is used for serialized objects, and tells the 
-    ResXResourceReader how to depersist the object. This is currently not 
-    extensible. For a given mimetype the value must be set accordingly:
-    
-    Note - application/x-microsoft.net.object.binary.base64 is the format 
-    that the ResXResourceWriter will generate, however the reader can 
-    read any of the formats listed below.
-    
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-    
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array 
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-  <data name="imgbxClose.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-    <value>
-        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
-        wwAADsMBx2+oZAAAABh0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMS4xYyqcSwAAANlJREFUOE+lU1sO
-        gjAQrHgRY6KemQ+VT9NrgAfgfRA+SawzdTAk2lhkkgm7s7vTAq0py/LUNM0dHEEXSfYWfd8fDQIOD23b
-        nvFMY6jeAcxpMFIwC1HX9YWzNOCWUunR4AxnvxpUVbV3zm2UGsbUlHoEDfBhdsgf4BWDCcmYGmtqCxtw
-        NeQcoJ6JjGn43hXy8CvIxDeIGbREZY+pHjLgtqeVHf7SzVq7VdmDM6x9GGj1/19h9UckVv3GWMwNRh5L
-        6dGYH+UCHCTQ9SfV+7pMvJIIaLL0Oudd1x2eUQ8MyeAeq0cAAAAASUVORK5CYII=
-</value>
-  </data>
-</root>
\ No newline at end of file
diff --git a/Windows/Forms/Tile/AddListTileForm.cs b/Windows/Forms/Tile/AddListTileForm.cs
deleted file mode 100644
index 2229333..0000000
--- a/Windows/Forms/Tile/AddListTileForm.cs
+++ /dev/null
@@ -1,294 +0,0 @@
-using AppLauncher.Models;
-using RyzStudio.Windows.ThemedForms;
-using System;
-using System.Diagnostics;
-using System.Drawing;
-using System.IO;
-using System.Linq;
-using System.Windows.Forms;
-
-namespace AppLauncher.Windows.Forms
-{
-    public class AddListTileForm : TDialogForm
-    {
-        public static void ShowDialog(TTilePanelLayout control, Point coord)
-        {
-            AddListTileForm form = new AddListTileForm();
-            form.TilePanelLayout = control;
-            form.AimCoord = coord;
-            form.ShowDialog();
-        }
-
-        private System.Windows.Forms.Label label1;
-        private TButton button1;
-        private RyzStudio.Windows.Forms.THorizontalSeparator horizontalSeparator2;
-        private TTextBox textBox1;
-        private TListBox listBox1;
-        private RyzStudio.Windows.Forms.THorizontalSeparator tHorizontalSeparator1;
-        private System.Windows.Forms.Label label2;
-
-        public TTilePanelLayout TilePanelLayout { get; set; } = null;
-        public Point AimCoord { get; set; } = new Point(-1, -1);
-
-        public AddListTileForm() : base()
-        {
-            InitializeComponent();
-        }
-
-        private void InitializeComponent()
-        {
-            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AddListTileForm));
-            this.textBox1 = new RyzStudio.Windows.ThemedForms.TTextBox();
-            this.label1 = new System.Windows.Forms.Label();
-            this.button1 = new RyzStudio.Windows.ThemedForms.TButton();
-            this.horizontalSeparator2 = new RyzStudio.Windows.Forms.THorizontalSeparator();
-            this.listBox1 = new RyzStudio.Windows.ThemedForms.TListBox();
-            this.label2 = new System.Windows.Forms.Label();
-            this.tHorizontalSeparator1 = new RyzStudio.Windows.Forms.THorizontalSeparator();
-            ((System.ComponentModel.ISupportInitialize)(this.imgbxClose)).BeginInit();
-            this.SuspendLayout();
-            // 
-            // imgbxClose
-            // 
-            this.imgbxClose.Image = ((System.Drawing.Image)(resources.GetObject("imgbxClose.Image")));
-            this.imgbxClose.Location = new System.Drawing.Point(367, 5);
-            // 
-            // panel1
-            // 
-            this.panel1.Location = new System.Drawing.Point(394, 474);
-            // 
-            // area1
-            // 
-            this.area1.Location = new System.Drawing.Point(1, 474);
-            this.area1.Size = new System.Drawing.Size(392, 5);
-            // 
-            // textBox1
-            // 
-            this.textBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
-            this.textBox1.BackColor = System.Drawing.Color.Transparent;
-            this.textBox1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F);
-            this.textBox1.Location = new System.Drawing.Point(159, 50);
-            this.textBox1.Margin = new System.Windows.Forms.Padding(10, 6, 10, 6);
-            this.textBox1.Name = "textBox1";
-            this.textBox1.Padding = new System.Windows.Forms.Padding(10, 10, 9, 9);
-            this.textBox1.Size = new System.Drawing.Size(220, 32);
-            this.textBox1.SubmitButton = null;
-            this.textBox1.TabIndex = 152;
-            this.textBox1.UseSystemPasswordChar = false;
-            // 
-            // label1
-            // 
-            this.label1.BackColor = System.Drawing.Color.Transparent;
-            this.label1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(95)))), ((int)(((byte)(99)))), ((int)(((byte)(104)))));
-            this.label1.Location = new System.Drawing.Point(18, 50);
-            this.label1.Margin = new System.Windows.Forms.Padding(0);
-            this.label1.Name = "label1";
-            this.label1.Size = new System.Drawing.Size(131, 32);
-            this.label1.TabIndex = 153;
-            this.label1.Text = "Title";
-            this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
-            // 
-            // button1
-            // 
-            this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
-            this.button1.BackColor = System.Drawing.Color.Transparent;
-            this.button1.DefaultImage = null;
-            this.button1.DownImage = null;
-            this.button1.IsSelected = false;
-            this.button1.LabelText = "&Save";
-            this.button1.Location = new System.Drawing.Point(251, 427);
-            this.button1.Name = "button1";
-            this.button1.OverImage = null;
-            this.button1.Padding = new System.Windows.Forms.Padding(4, 4, 3, 3);
-            this.button1.Size = new System.Drawing.Size(128, 32);
-            this.button1.TabIndex = 173;
-            this.button1.Click += new System.EventHandler(this.button1_Click);
-            // 
-            // horizontalSeparator2
-            // 
-            this.horizontalSeparator2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
-            this.horizontalSeparator2.Location = new System.Drawing.Point(10, 92);
-            this.horizontalSeparator2.MaximumSize = new System.Drawing.Size(4920, 2);
-            this.horizontalSeparator2.Name = "horizontalSeparator2";
-            this.horizontalSeparator2.Size = new System.Drawing.Size(380, 2);
-            this.horizontalSeparator2.TabIndex = 177;
-            // 
-            // listBox1
-            // 
-            this.listBox1.AllowDrop = true;
-            this.listBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
-            | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
-            this.listBox1.BackColor = System.Drawing.Color.Transparent;
-            this.listBox1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F);
-            this.listBox1.Location = new System.Drawing.Point(159, 101);
-            this.listBox1.Margin = new System.Windows.Forms.Padding(10, 4, 10, 4);
-            this.listBox1.Name = "listBox1";
-            this.listBox1.Padding = new System.Windows.Forms.Padding(10, 6, 7, 5);
-            this.listBox1.Size = new System.Drawing.Size(220, 280);
-            this.listBox1.SubmitButton = null;
-            this.listBox1.TabIndex = 180;
-            this.listBox1.OnAdd += new System.EventHandler(this.listBox1_OnAdd);
-            this.listBox1.OnEdit += new System.EventHandler(this.listBox1_OnEdit);
-            this.listBox1.DragDrop += new System.Windows.Forms.DragEventHandler(this.listBox1_DragDrop);
-            this.listBox1.DragOver += new System.Windows.Forms.DragEventHandler(this.listBox1_DragOver);
-            // 
-            // label2
-            // 
-            this.label2.BackColor = System.Drawing.Color.Transparent;
-            this.label2.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(95)))), ((int)(((byte)(99)))), ((int)(((byte)(104)))));
-            this.label2.Location = new System.Drawing.Point(18, 104);
-            this.label2.Name = "label2";
-            this.label2.Size = new System.Drawing.Size(131, 32);
-            this.label2.TabIndex = 181;
-            this.label2.Text = "List";
-            this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
-            // 
-            // tHorizontalSeparator1
-            // 
-            this.tHorizontalSeparator1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
-            this.tHorizontalSeparator1.Location = new System.Drawing.Point(10, 391);
-            this.tHorizontalSeparator1.MaximumSize = new System.Drawing.Size(4920, 2);
-            this.tHorizontalSeparator1.Name = "tHorizontalSeparator1";
-            this.tHorizontalSeparator1.Size = new System.Drawing.Size(380, 2);
-            this.tHorizontalSeparator1.TabIndex = 182;
-            // 
-            // AddListTileForm
-            // 
-            this.ClientSize = new System.Drawing.Size(400, 480);
-            this.Controls.Add(this.tHorizontalSeparator1);
-            this.Controls.Add(this.label2);
-            this.Controls.Add(this.listBox1);
-            this.Controls.Add(this.horizontalSeparator2);
-            this.Controls.Add(this.button1);
-            this.Controls.Add(this.label1);
-            this.Controls.Add(this.textBox1);
-            this.Name = "AddListTileForm";
-            this.Title = "Add List Tile";
-            this.Controls.SetChildIndex(this.imgbxClose, 0);
-            this.Controls.SetChildIndex(this.panel1, 0);
-            this.Controls.SetChildIndex(this.area1, 0);
-            this.Controls.SetChildIndex(this.textBox1, 0);
-            this.Controls.SetChildIndex(this.label1, 0);
-            this.Controls.SetChildIndex(this.button1, 0);
-            this.Controls.SetChildIndex(this.horizontalSeparator2, 0);
-            this.Controls.SetChildIndex(this.listBox1, 0);
-            this.Controls.SetChildIndex(this.label2, 0);
-            this.Controls.SetChildIndex(this.tHorizontalSeparator1, 0);
-            ((System.ComponentModel.ISupportInitialize)(this.imgbxClose)).EndInit();
-            this.ResumeLayout(false);
-
-        }
-
-        private void button1_Click(object sender, EventArgs e)
-        {
-            TileModel model = new TileModel()
-            {
-                Title = textBox1.Text?.Trim(),
-                IsGroup = true
-            };
-
-            if (!this.AimCoord.Equals(new Point(-1, -1)))
-            {
-                model.Position = this.AimCoord;
-            }
-
-            model.Items = new System.Collections.Generic.List<TileModel>();
-
-            foreach (TileModel item in listBox1.ListBox.Items.OfType<TileModel>())
-            {
-                if (item.IsGroup)
-                {
-                    continue;
-                }
-
-                model.Items.Add(item);
-            }
-
-            this.TilePanelLayout.AddTile(model);
-
-            this.Close();
-        }
-
-        private void listBox1_OnAdd(object sender, EventArgs e) => AddTileForm.ShowDialog(listBox1);
-
-        private void listBox1_OnEdit(object sender, EventArgs e)
-        {
-            if (listBox1.ListBox.Items.Count <= 0)
-            {
-                return;
-            }
-
-            EditTileForm.ShowDialog(listBox1);
-        }
-
-        private void listBox1_DragOver(object sender, System.Windows.Forms.DragEventArgs e)
-        {
-            if (e.Data.GetDataPresent(DataFormats.FileDrop))
-            {
-                e.Effect = DragDropEffects.Link;
-            }
-            else
-            {
-                e.Effect = DragDropEffects.None;
-            }
-        }
-
-        private void listBox1_DragDrop(object sender, DragEventArgs e)
-        {
-            string[] fileList = e.Data.GetData(DataFormats.FileDrop) as string[];
-            if (fileList == null)
-            {
-                return;
-            }
-
-            if (fileList.Length <= 0)
-            {
-                return;
-            }
-
-            if (string.IsNullOrWhiteSpace(fileList[0]))
-            {
-                return;
-            }
-
-            TileModel model = new TileModel()
-            {
-                ProcessFilename = fileList[0],
-                Title = Path.GetFileName(fileList[0])
-            };
-
-            // exe
-            if (Path.GetExtension(fileList[0]).Equals(".exe", StringComparison.CurrentCultureIgnoreCase))
-            {
-                if (File.Exists(fileList[0]))
-                {
-                    try
-                    {
-                        FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(fileList[0]);
-                        if (fvi != null)
-                        {
-                            model.Title = fvi.ProductName;
-                        }
-                    }
-                    catch
-                    {
-                        // do nothing
-                    }
-                }
-
-
-                if (string.IsNullOrWhiteSpace(model.Title))
-                {
-                    model.Title = Path.GetFileNameWithoutExtension(fileList[0]);
-                }
-            }
-
-            listBox1.ListBox.Items.Add(model);
-        }
-
-    }
-}
\ No newline at end of file
diff --git a/Windows/Forms/Tile/AddListTileForm.resx b/Windows/Forms/Tile/AddListTileForm.resx
deleted file mode 100644
index 3747e00..0000000
--- a/Windows/Forms/Tile/AddListTileForm.resx
+++ /dev/null
@@ -1,131 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!-- 
-    Microsoft ResX Schema 
-    
-    Version 2.0
-    
-    The primary goals of this format is to allow a simple XML format 
-    that is mostly human readable. The generation and parsing of the 
-    various data types are done through the TypeConverter classes 
-    associated with the data types.
-    
-    Example:
-    
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-                
-    There are any number of "resheader" rows that contain simple 
-    name/value pairs.
-    
-    Each data row contains a name, and value. The row also contains a 
-    type or mimetype. Type corresponds to a .NET class that support 
-    text/value conversion through the TypeConverter architecture. 
-    Classes that don't support this are serialized and stored with the 
-    mimetype set.
-    
-    The mimetype is used for serialized objects, and tells the 
-    ResXResourceReader how to depersist the object. This is currently not 
-    extensible. For a given mimetype the value must be set accordingly:
-    
-    Note - application/x-microsoft.net.object.binary.base64 is the format 
-    that the ResXResourceWriter will generate, however the reader can 
-    read any of the formats listed below.
-    
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-    
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array 
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-  <data name="imgbxClose.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-    <value>
-        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
-        wwAADsMBx2+oZAAAABh0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMS4xYyqcSwAAANlJREFUOE+lU1sO
-        gjAQrHgRY6KemQ+VT9NrgAfgfRA+SawzdTAk2lhkkgm7s7vTAq0py/LUNM0dHEEXSfYWfd8fDQIOD23b
-        nvFMY6jeAcxpMFIwC1HX9YWzNOCWUunR4AxnvxpUVbV3zm2UGsbUlHoEDfBhdsgf4BWDCcmYGmtqCxtw
-        NeQcoJ6JjGn43hXy8CvIxDeIGbREZY+pHjLgtqeVHf7SzVq7VdmDM6x9GGj1/19h9UckVv3GWMwNRh5L
-        6dGYH+UCHCTQ9SfV+7pMvJIIaLL0Oudd1x2eUQ8MyeAeq0cAAAAASUVORK5CYII=
-</value>
-  </data>
-</root>
\ No newline at end of file
diff --git a/Windows/Forms/Tile/AddTileForm.cs b/Windows/Forms/Tile/AddTileForm.cs
deleted file mode 100644
index a44bf72..0000000
--- a/Windows/Forms/Tile/AddTileForm.cs
+++ /dev/null
@@ -1,375 +0,0 @@
-using AppLauncher.Models;
-using RyzStudio.Windows.ThemedForms;
-using System;
-using System.Drawing;
-
-namespace AppLauncher.Windows.Forms
-{
-    public class AddTileForm : TDialogForm
-    {
-        public static void ShowDialog(TTilePanelLayout control, Point coord)
-        {
-            AddTileForm form = new AddTileForm();
-            form.TilePanelLayout = control;
-            form.AimCoord = coord;
-            form.ShowDialog();
-        }
-
-        public static void ShowDialog(TListBox control)
-        {
-            AddTileForm form = new AddTileForm();
-            form.ListBox = control;
-            form.ShowDialog();
-        }
-
-        private System.Windows.Forms.Label label6;
-        private System.Windows.Forms.Label label7;
-        private System.Windows.Forms.Label label4;
-        private System.Windows.Forms.Label label3;
-        private System.Windows.Forms.Label label2;
-        private System.Windows.Forms.Label label1;
-        private TOpenFileTextBox textBox2;
-        private TTextBox textBox3;
-        private TFolderTextBox textBox4;
-        private TButton button1;
-        private TPickerBox pickerBox1;
-        private TPickerBox pickerBox2;
-        private RyzStudio.Windows.Forms.THorizontalSeparator horizontalSeparator1;
-        private RyzStudio.Windows.Forms.THorizontalSeparator horizontalSeparator2;
-        private TTextBox textBox1;
-
-        public TTilePanelLayout TilePanelLayout { get; set; } = null;
-        public Point AimCoord { get; set; } = new Point(-1, -1);
-        public TListBox ListBox { get; set; } = null;
-
-        public AddTileForm() : base()
-        {
-            InitializeComponent();
-
-            pickerBox1.ComboBox.Items.Clear();
-            pickerBox1.ComboBox.Items.AddRange(new string[] { "Normal", "Hidden", "Minimized", "Maximized" });
-            if (pickerBox1.ComboBox.Items.Count > 0) pickerBox1.ComboBox.SelectedIndex = 0;
-
-            pickerBox2.ComboBox.Items.Clear();
-            pickerBox2.ComboBox.Items.AddRange(new string[] { "No", "Yes" });
-            if (pickerBox2.ComboBox.Items.Count > 0) pickerBox2.ComboBox.SelectedIndex = 0;
-        }
-
-        private void InitializeComponent()
-        {
-            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AddTileForm));
-            RyzStudio.Windows.ThemedForms.TButton.ButtonStyle buttonStyle1 = new RyzStudio.Windows.ThemedForms.TButton.ButtonStyle();
-            RyzStudio.Windows.ThemedForms.TButton.ButtonStyle buttonStyle2 = new RyzStudio.Windows.ThemedForms.TButton.ButtonStyle();
-            RyzStudio.Windows.ThemedForms.TButton.ButtonStyle buttonStyle3 = new RyzStudio.Windows.ThemedForms.TButton.ButtonStyle();
-            this.textBox1 = new RyzStudio.Windows.ThemedForms.TTextBox();
-            this.label6 = new System.Windows.Forms.Label();
-            this.label7 = new System.Windows.Forms.Label();
-            this.label4 = new System.Windows.Forms.Label();
-            this.label3 = new System.Windows.Forms.Label();
-            this.label2 = new System.Windows.Forms.Label();
-            this.label1 = new System.Windows.Forms.Label();
-            this.textBox2 = new RyzStudio.Windows.ThemedForms.TOpenFileTextBox();
-            this.textBox3 = new RyzStudio.Windows.ThemedForms.TTextBox();
-            this.textBox4 = new RyzStudio.Windows.ThemedForms.TFolderTextBox();
-            this.button1 = new RyzStudio.Windows.ThemedForms.TButton();
-            this.pickerBox1 = new RyzStudio.Windows.ThemedForms.TPickerBox();
-            this.pickerBox2 = new RyzStudio.Windows.ThemedForms.TPickerBox();
-            this.horizontalSeparator1 = new RyzStudio.Windows.Forms.THorizontalSeparator();
-            this.horizontalSeparator2 = new RyzStudio.Windows.Forms.THorizontalSeparator();
-            ((System.ComponentModel.ISupportInitialize)(this.imgbxClose)).BeginInit();
-            this.SuspendLayout();
-            //
-            // imgbxClose
-            //
-            this.imgbxClose.Image = ((System.Drawing.Image)(resources.GetObject("imgbxClose.Image")));
-            this.imgbxClose.Location = new System.Drawing.Point(367, 5);
-            //
-            this.Text = "Add Tile";
-            //
-            // panel1
-            //
-            this.panel1.Location = new System.Drawing.Point(394, 474);
-            //
-            // area1
-            //
-            this.area1.Location = new System.Drawing.Point(1, 474);
-            this.area1.Size = new System.Drawing.Size(392, 5);
-            //
-            // textBox1
-            //
-            this.textBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-            | System.Windows.Forms.AnchorStyles.Right)));
-            this.textBox1.BackColor = System.Drawing.Color.Transparent;
-            this.textBox1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F);
-            this.textBox1.Location = new System.Drawing.Point(159, 50);
-            this.textBox1.Margin = new System.Windows.Forms.Padding(10, 6, 10, 6);
-            this.textBox1.Name = "textBox1";
-            this.textBox1.Padding = new System.Windows.Forms.Padding(10, 10, 9, 9);
-            this.textBox1.Size = new System.Drawing.Size(220, 32);
-            this.textBox1.SubmitButton = null;
-            this.textBox1.TabIndex = 152;
-            this.textBox1.UseSystemPasswordChar = false;
-            //
-            // label6
-            //
-            this.label6.BackColor = System.Drawing.Color.Transparent;
-            this.label6.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(95)))), ((int)(((byte)(99)))), ((int)(((byte)(104)))));
-            this.label6.Location = new System.Drawing.Point(18, 268);
-            this.label6.Name = "label6";
-            this.label6.Size = new System.Drawing.Size(208, 32);
-            this.label6.TabIndex = 163;
-            this.label6.Text = "Run As Admin";
-            this.label6.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
-            //
-            // label7
-            //
-            this.label7.BackColor = System.Drawing.Color.Transparent;
-            this.label7.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(95)))), ((int)(((byte)(99)))), ((int)(((byte)(104)))));
-            this.label7.Location = new System.Drawing.Point(18, 227);
-            this.label7.Name = "label7";
-            this.label7.Size = new System.Drawing.Size(208, 32);
-            this.label7.TabIndex = 161;
-            this.label7.Text = "Window Style";
-            this.label7.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
-            //
-            // label4
-            //
-            this.label4.BackColor = System.Drawing.Color.Transparent;
-            this.label4.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(95)))), ((int)(((byte)(99)))), ((int)(((byte)(104)))));
-            this.label4.Location = new System.Drawing.Point(18, 173);
-            this.label4.Name = "label4";
-            this.label4.Size = new System.Drawing.Size(131, 32);
-            this.label4.TabIndex = 159;
-            this.label4.Text = "Working Directory";
-            this.label4.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
-            //
-            // label3
-            //
-            this.label3.BackColor = System.Drawing.Color.Transparent;
-            this.label3.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(95)))), ((int)(((byte)(99)))), ((int)(((byte)(104)))));
-            this.label3.Location = new System.Drawing.Point(18, 132);
-            this.label3.Name = "label3";
-            this.label3.Size = new System.Drawing.Size(131, 32);
-            this.label3.TabIndex = 157;
-            this.label3.Text = "Argument";
-            this.label3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
-            //
-            // label2
-            //
-            this.label2.BackColor = System.Drawing.Color.Transparent;
-            this.label2.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(95)))), ((int)(((byte)(99)))), ((int)(((byte)(104)))));
-            this.label2.Location = new System.Drawing.Point(18, 91);
-            this.label2.Name = "label2";
-            this.label2.Size = new System.Drawing.Size(131, 32);
-            this.label2.TabIndex = 155;
-            this.label2.Text = "Filename";
-            this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
-            //
-            // label1
-            //
-            this.label1.BackColor = System.Drawing.Color.Transparent;
-            this.label1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(95)))), ((int)(((byte)(99)))), ((int)(((byte)(104)))));
-            this.label1.Location = new System.Drawing.Point(18, 50);
-            this.label1.Margin = new System.Windows.Forms.Padding(0);
-            this.label1.Name = "label1";
-            this.label1.Size = new System.Drawing.Size(131, 32);
-            this.label1.TabIndex = 153;
-            this.label1.Text = "Title";
-            this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
-            //
-            // textBox2
-            //
-            this.textBox2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-            | System.Windows.Forms.AnchorStyles.Right)));
-            this.textBox2.BackColor = System.Drawing.Color.Transparent;
-            this.textBox2.FileDialog = null;
-            this.textBox2.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F);
-            this.textBox2.HighlightImage = ((System.Drawing.Image)(resources.GetObject("textBox2.HighlightImage")));
-            this.textBox2.Location = new System.Drawing.Point(159, 91);
-            this.textBox2.Margin = new System.Windows.Forms.Padding(10, 3, 3, 3);
-            this.textBox2.Name = "textBox2";
-            this.textBox2.NormalImage = ((System.Drawing.Image)(resources.GetObject("textBox2.NormalImage")));
-            this.textBox2.Padding = new System.Windows.Forms.Padding(10, 10, 9, 9);
-            this.textBox2.Size = new System.Drawing.Size(220, 32);
-            this.textBox2.SubmitButton = null;
-            this.textBox2.TabIndex = 170;
-            this.textBox2.UseSystemPasswordChar = false;
-            //
-            // textBox3
-            //
-            this.textBox3.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-            | System.Windows.Forms.AnchorStyles.Right)));
-            this.textBox3.BackColor = System.Drawing.Color.Transparent;
-            this.textBox3.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F);
-            this.textBox3.Location = new System.Drawing.Point(159, 132);
-            this.textBox3.Margin = new System.Windows.Forms.Padding(10, 6, 10, 6);
-            this.textBox3.Name = "textBox3";
-            this.textBox3.Padding = new System.Windows.Forms.Padding(10, 10, 9, 9);
-            this.textBox3.Size = new System.Drawing.Size(220, 32);
-            this.textBox3.SubmitButton = null;
-            this.textBox3.TabIndex = 171;
-            this.textBox3.UseSystemPasswordChar = false;
-            //
-            // textBox4
-            //
-            this.textBox4.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-            | System.Windows.Forms.AnchorStyles.Right)));
-            this.textBox4.BackColor = System.Drawing.Color.Transparent;
-            this.textBox4.FolderDialog = null;
-            this.textBox4.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F);
-            this.textBox4.HighlightImage = ((System.Drawing.Image)(resources.GetObject("textBox4.HighlightImage")));
-            this.textBox4.Location = new System.Drawing.Point(159, 173);
-            this.textBox4.Margin = new System.Windows.Forms.Padding(10, 3, 3, 3);
-            this.textBox4.Name = "textBox4";
-            this.textBox4.NormalImage = ((System.Drawing.Image)(resources.GetObject("textBox4.NormalImage")));
-            this.textBox4.Padding = new System.Windows.Forms.Padding(10, 10, 9, 9);
-            this.textBox4.Size = new System.Drawing.Size(220, 32);
-            this.textBox4.SubmitButton = null;
-            this.textBox4.TabIndex = 172;
-            this.textBox4.UseSystemPasswordChar = false;
-            //
-            // button1
-            //
-            this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
-            this.button1.BackColor = System.Drawing.Color.Transparent;
-            this.button1.DefaultImage = null;
-            this.button1.DownImage = null;
-            this.button1.LabelText = "&Save";
-            this.button1.Location = new System.Drawing.Point(251, 427);
-            this.button1.Name = "button1";
-            this.button1.OverImage = null;
-            this.button1.Padding = new System.Windows.Forms.Padding(4, 4, 3, 3);
-            this.button1.Size = new System.Drawing.Size(128, 32);
-            this.button1.TabIndex = 173;
-            this.button1.Click += new System.EventHandler(this.button1_Click);
-            //
-            // pickerBox1
-            //
-            this.pickerBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-            | System.Windows.Forms.AnchorStyles.Right)));
-            this.pickerBox1.BackColor = System.Drawing.Color.Transparent;
-            this.pickerBox1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F);
-            this.pickerBox1.Location = new System.Drawing.Point(239, 227);
-            this.pickerBox1.Margin = new System.Windows.Forms.Padding(10, 6, 10, 6);
-            this.pickerBox1.Name = "pickerBox1";
-            this.pickerBox1.Padding = new System.Windows.Forms.Padding(10, 6, 7, 5);
-            this.pickerBox1.Size = new System.Drawing.Size(140, 32);
-            this.pickerBox1.SubmitButton = null;
-            this.pickerBox1.TabIndex = 174;
-            //
-            // pickerBox2
-            //
-            this.pickerBox2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-            | System.Windows.Forms.AnchorStyles.Right)));
-            this.pickerBox2.BackColor = System.Drawing.Color.Transparent;
-            this.pickerBox2.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F);
-            this.pickerBox2.Location = new System.Drawing.Point(239, 268);
-            this.pickerBox2.Margin = new System.Windows.Forms.Padding(10, 6, 10, 6);
-            this.pickerBox2.Name = "pickerBox2";
-            this.pickerBox2.Padding = new System.Windows.Forms.Padding(10, 6, 7, 5);
-            this.pickerBox2.Size = new System.Drawing.Size(140, 32);
-            this.pickerBox2.SubmitButton = null;
-            this.pickerBox2.TabIndex = 175;
-            //
-            // horizontalSeparator1
-            //
-            this.horizontalSeparator1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-            | System.Windows.Forms.AnchorStyles.Right)));
-            this.horizontalSeparator1.Location = new System.Drawing.Point(10, 215);
-            this.horizontalSeparator1.MaximumSize = new System.Drawing.Size(4920, 2);
-            this.horizontalSeparator1.Name = "horizontalSeparator1";
-            this.horizontalSeparator1.Size = new System.Drawing.Size(380, 2);
-            this.horizontalSeparator1.TabIndex = 176;
-            //
-            // horizontalSeparator2
-            //
-            this.horizontalSeparator2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-            | System.Windows.Forms.AnchorStyles.Right)));
-            this.horizontalSeparator2.Location = new System.Drawing.Point(10, 310);
-            this.horizontalSeparator2.MaximumSize = new System.Drawing.Size(4920, 2);
-            this.horizontalSeparator2.Name = "horizontalSeparator2";
-            this.horizontalSeparator2.Size = new System.Drawing.Size(380, 2);
-            this.horizontalSeparator2.TabIndex = 177;
-            //
-            // AddTileForm
-            //
-            this.ClientSize = new System.Drawing.Size(400, 480);
-            this.Controls.Add(this.horizontalSeparator2);
-            this.Controls.Add(this.horizontalSeparator1);
-            this.Controls.Add(this.pickerBox2);
-            this.Controls.Add(this.pickerBox1);
-            this.Controls.Add(this.button1);
-            this.Controls.Add(this.textBox4);
-            this.Controls.Add(this.textBox3);
-            this.Controls.Add(this.textBox2);
-            this.Controls.Add(this.label6);
-            this.Controls.Add(this.label7);
-            this.Controls.Add(this.label4);
-            this.Controls.Add(this.label3);
-            this.Controls.Add(this.label2);
-            this.Controls.Add(this.label1);
-            this.Controls.Add(this.textBox1);
-            this.Title = "Add Tile";
-            this.Name = "AddTileForm";
-            this.Controls.SetChildIndex(this.imgbxClose, 0);
-            this.Controls.SetChildIndex(this.panel1, 0);
-            this.Controls.SetChildIndex(this.area1, 0);
-            this.Controls.SetChildIndex(this.textBox1, 0);
-            this.Controls.SetChildIndex(this.label1, 0);
-            this.Controls.SetChildIndex(this.label2, 0);
-            this.Controls.SetChildIndex(this.label3, 0);
-            this.Controls.SetChildIndex(this.label4, 0);
-            this.Controls.SetChildIndex(this.label7, 0);
-            this.Controls.SetChildIndex(this.label6, 0);
-            this.Controls.SetChildIndex(this.textBox2, 0);
-            this.Controls.SetChildIndex(this.textBox3, 0);
-            this.Controls.SetChildIndex(this.textBox4, 0);
-            this.Controls.SetChildIndex(this.button1, 0);
-            this.Controls.SetChildIndex(this.pickerBox1, 0);
-            this.Controls.SetChildIndex(this.pickerBox2, 0);
-            this.Controls.SetChildIndex(this.horizontalSeparator1, 0);
-            this.Controls.SetChildIndex(this.horizontalSeparator2, 0);
-            ((System.ComponentModel.ISupportInitialize)(this.imgbxClose)).EndInit();
-            this.ResumeLayout(false);
-
-        }
-
-        private void button1_Click(object sender, EventArgs e)
-        {
-            TileModel model = buildModel();
-
-            if (this.TilePanelLayout != null)
-            {
-                this.TilePanelLayout.AddTile(model);
-            }
-            else if (this.ListBox != null)
-            {
-                int n = this.ListBox.ListBox.Items.Add(model);
-                this.ListBox.ListBox.SelectedIndex = n;
-            }
-
-            this.Close();
-        }
-
-        protected TileModel buildModel()
-        {
-            TileModel rs = new TileModel()
-            {
-                Title = textBox1.Text?.Trim(),
-                ProcessFilename = textBox2.Text?.Trim(),
-                ProcessArgument = textBox3.Text?.Trim(),
-                ProcessWorkingDirectory = textBox4.Text?.Trim(),
-                ProcessWindowStyle = (System.Diagnostics.ProcessWindowStyle)pickerBox1.ComboBox.SelectedIndex,
-                ProcessAsAdmin = (pickerBox2.ComboBox.SelectedIndex == 1)
-            };
-
-            if (!this.AimCoord.Equals(new Point(-1, -1)))
-            {
-                rs.Position = this.AimCoord;
-            }
-
-            return rs;
-        }
-
-    }
-}
diff --git a/Windows/Forms/Tile/AddTileForm.resx b/Windows/Forms/Tile/AddTileForm.resx
deleted file mode 100644
index e6f3e1a..0000000
--- a/Windows/Forms/Tile/AddTileForm.resx
+++ /dev/null
@@ -1,167 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!-- 
-    Microsoft ResX Schema 
-    
-    Version 2.0
-    
-    The primary goals of this format is to allow a simple XML format 
-    that is mostly human readable. The generation and parsing of the 
-    various data types are done through the TypeConverter classes 
-    associated with the data types.
-    
-    Example:
-    
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-                
-    There are any number of "resheader" rows that contain simple 
-    name/value pairs.
-    
-    Each data row contains a name, and value. The row also contains a 
-    type or mimetype. Type corresponds to a .NET class that support 
-    text/value conversion through the TypeConverter architecture. 
-    Classes that don't support this are serialized and stored with the 
-    mimetype set.
-    
-    The mimetype is used for serialized objects, and tells the 
-    ResXResourceReader how to depersist the object. This is currently not 
-    extensible. For a given mimetype the value must be set accordingly:
-    
-    Note - application/x-microsoft.net.object.binary.base64 is the format 
-    that the ResXResourceWriter will generate, however the reader can 
-    read any of the formats listed below.
-    
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-    
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array 
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-  <data name="imgbxClose.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-    <value>
-        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
-        wwAADsMBx2+oZAAAABh0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMS4xYyqcSwAAANlJREFUOE+lU1sO
-        gjAQrHgRY6KemQ+VT9NrgAfgfRA+SawzdTAk2lhkkgm7s7vTAq0py/LUNM0dHEEXSfYWfd8fDQIOD23b
-        nvFMY6jeAcxpMFIwC1HX9YWzNOCWUunR4AxnvxpUVbV3zm2UGsbUlHoEDfBhdsgf4BWDCcmYGmtqCxtw
-        NeQcoJ6JjGn43hXy8CvIxDeIGbREZY+pHjLgtqeVHf7SzVq7VdmDM6x9GGj1/19h9UckVv3GWMwNRh5L
-        6dGYH+UCHCTQ9SfV+7pMvJIIaLL0Oudd1x2eUQ8MyeAeq0cAAAAASUVORK5CYII=
-</value>
-  </data>
-  <data name="textBox2.HighlightImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-    <value>
-        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
-        wgAADsIBFShKgAAAAK9JREFUOE/t0zsKwkAURuGp1BWJK3EhIrgAV+EOLLWwtRQLwQdiIbbiIkwynj+O
-        IVwnyhR2XvjyInNIkXHee8f0cEQBPbDOaKEarSvXhsAJO4wirlB4jipiA3phoIvIrLFChhnKiA3o8Ckw
-        RR93LNBODVwwwRL62kNKYIxNzQ1FSsDOEHk08HrYJMw/8KtA06/cCef6KJDZgDbTFrHNZO3x9idqOyui
-        m2+07bvPgHcPXOhtG3D6cUIAAAAASUVORK5CYII=
-</value>
-  </data>
-  <data name="textBox2.NormalImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-    <value>
-        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
-        wgAADsIBFShKgAAAAMZJREFUOE/tk7sNwjAQQF3BRohJGAQhMQBTsAElFLSUiAKJTxIXhBZlCILNuyRG
-        iXEQKeg46fmsO/slhU9Za5XWehiXYcD6JElygZ6qhdwTioVDGo4wDXDjsohXdYkvMDTHVa8R9Hb0tpCz
-        XzqJL5Df/CRYRFE0Yn8nr9M07XcSwBXmXN6QDfncRTCjt6+Rgfla4Adfn3D+ERS4Yht/wY8FxVN2xTac
-        gLP5qyYLAhmmA4SGyeeEoPkSq3EWydsoB4gRDEqBVU/p15ajstHKCgAAAABJRU5ErkJggg==
-</value>
-  </data>
-  <data name="textBox4.HighlightImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-    <value>
-        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
-        xAAADsQBlSsOGwAAAJtJREFUOE/t0zEKwkAQheEpvILHSLySlTeJ6AnEzpPYi0ERPIKWKtZKNv9LNS5x
-        E6xS+OCDJew8tsgYmeCECsGZo1dKXLBwtnghQ2fe0JDPGHecsW6xwgwjNM8tdIgyxQ0qij2gORV9LejK
-        Bk8dfi3QjGY/C0IISS7/gkEVtP3KfbKEZm0PLZM++IVK0d0rdrAcR8TrnKK7BzPLa7Wb+WX/Nb8PAAAA
-        AElFTkSuQmCC
-</value>
-  </data>
-  <data name="textBox4.NormalImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-    <value>
-        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
-        xAAADsQBlSsOGwAAALZJREFUOE/tkzEKwjAYRjt4BY9hvZKTN1HsCYqbJzGzKBGb9gY6qjgrxvdJK7ZS
-        Gpwc/ODBnzTvg0AT5Xk+hB3cwVc456ZRSIqi2MAeafbGEq5Zlg3KY+1Bvkkql89Ya/vsnUCZN8FJYWyM
-        6ekKnsWkdF9hb8S3I6ioyRnkpa0FXcFbwOXrAjlyawXe+06q/At+qoDh41cOCU4iV8OaQY8pUVEgOnuA
-        VcSzjRm2UHvOHeisdc7FDwDnJKIbLgP9AAAAAElFTkSuQmCC
-</value>
-  </data>
-</root>
\ No newline at end of file
diff --git a/Windows/Forms/Tile/EditGroupForm.cs b/Windows/Forms/Tile/EditGroupForm.cs
deleted file mode 100644
index 0929250..0000000
--- a/Windows/Forms/Tile/EditGroupForm.cs
+++ /dev/null
@@ -1,187 +0,0 @@
-using AppLauncher.Models;
-using RyzStudio.Windows.ThemedForms;
-using System;
-
-namespace AppLauncher.Windows.Forms
-{
-    public class EditGroupForm : TDialogForm
-    {
-        public static void ShowDialog(TTilePanelLayout control)
-        {
-            EditGroupForm form = new EditGroupForm();
-            form.TilePanelLayout = control;
-            form.ShowDialog();
-        }
-
-        private System.Windows.Forms.Label label2;
-        private System.Windows.Forms.Label label1;
-        private TButton button1;
-        private TPickerBox pickerBox1;
-        private RyzStudio.Windows.Forms.THorizontalSeparator horizontalSeparator2;
-        private TTextBox textBox1;
-
-        public TTilePanelLayout TilePanelLayout { get; set; } = null;
-
-        public EditGroupForm() : base()
-        {
-            InitializeComponent();
-
-            pickerBox1.ComboBox.Items.Clear();
-            pickerBox1.ComboBox.Items.AddRange(new string[] { "No", "Yes" });
-            if (pickerBox1.ComboBox.Items.Count > 0) pickerBox1.ComboBox.SelectedIndex = 0;
-        }
-
-        private void InitializeComponent()
-        {
-            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(EditGroupForm));
-            this.textBox1 = new RyzStudio.Windows.ThemedForms.TTextBox();
-            this.label2 = new System.Windows.Forms.Label();
-            this.label1 = new System.Windows.Forms.Label();
-            this.button1 = new RyzStudio.Windows.ThemedForms.TButton();
-            this.pickerBox1 = new RyzStudio.Windows.ThemedForms.TPickerBox();
-            this.horizontalSeparator2 = new RyzStudio.Windows.Forms.THorizontalSeparator();
-            ((System.ComponentModel.ISupportInitialize)(this.imgbxClose)).BeginInit();
-            this.SuspendLayout();
-            // 
-            // imgbxClose
-            // 
-            this.imgbxClose.Image = ((System.Drawing.Image)(resources.GetObject("imgbxClose.Image")));
-            this.imgbxClose.Location = new System.Drawing.Point(367, 5);
-            // 
-            // panel1
-            // 
-            this.panel1.Location = new System.Drawing.Point(394, 474);
-            // 
-            // area1
-            // 
-            this.area1.Location = new System.Drawing.Point(1, 474);
-            this.area1.Size = new System.Drawing.Size(392, 5);
-            // 
-            // textBox1
-            // 
-            this.textBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
-            this.textBox1.BackColor = System.Drawing.Color.Transparent;
-            this.textBox1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F);
-            this.textBox1.Location = new System.Drawing.Point(159, 50);
-            this.textBox1.Margin = new System.Windows.Forms.Padding(10, 6, 10, 6);
-            this.textBox1.Name = "textBox1";
-            this.textBox1.Padding = new System.Windows.Forms.Padding(10, 10, 9, 9);
-            this.textBox1.Size = new System.Drawing.Size(220, 32);
-            this.textBox1.SubmitButton = null;
-            this.textBox1.TabIndex = 152;
-            this.textBox1.UseSystemPasswordChar = false;
-            // 
-            // label2
-            // 
-            this.label2.BackColor = System.Drawing.Color.Transparent;
-            this.label2.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(95)))), ((int)(((byte)(99)))), ((int)(((byte)(104)))));
-            this.label2.Location = new System.Drawing.Point(18, 91);
-            this.label2.Name = "label2";
-            this.label2.Size = new System.Drawing.Size(131, 32);
-            this.label2.TabIndex = 155;
-            this.label2.Text = "Show Only Expanded";
-            this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
-            // 
-            // label1
-            // 
-            this.label1.BackColor = System.Drawing.Color.Transparent;
-            this.label1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(95)))), ((int)(((byte)(99)))), ((int)(((byte)(104)))));
-            this.label1.Location = new System.Drawing.Point(18, 50);
-            this.label1.Margin = new System.Windows.Forms.Padding(0);
-            this.label1.Name = "label1";
-            this.label1.Size = new System.Drawing.Size(131, 32);
-            this.label1.TabIndex = 153;
-            this.label1.Text = "Title";
-            this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
-            // 
-            // button1
-            // 
-            this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
-            this.button1.BackColor = System.Drawing.Color.Transparent;
-            this.button1.DefaultImage = null;
-            this.button1.DownImage = null;
-            this.button1.IsSelected = false;
-            this.button1.LabelText = "&Save";
-            this.button1.Location = new System.Drawing.Point(251, 427);
-            this.button1.Name = "button1";
-            this.button1.OverImage = null;
-            this.button1.Padding = new System.Windows.Forms.Padding(4, 4, 3, 3);
-            this.button1.Size = new System.Drawing.Size(128, 32);
-            this.button1.TabIndex = 173;
-            this.button1.Click += new System.EventHandler(this.button1_Click);
-            // 
-            // pickerBox1
-            // 
-            this.pickerBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
-            this.pickerBox1.BackColor = System.Drawing.Color.Transparent;
-            this.pickerBox1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F);
-            this.pickerBox1.Location = new System.Drawing.Point(239, 91);
-            this.pickerBox1.Margin = new System.Windows.Forms.Padding(10, 6, 10, 6);
-            this.pickerBox1.Name = "pickerBox1";
-            this.pickerBox1.Padding = new System.Windows.Forms.Padding(10, 6, 7, 5);
-            this.pickerBox1.Size = new System.Drawing.Size(140, 32);
-            this.pickerBox1.SubmitButton = null;
-            this.pickerBox1.TabIndex = 174;
-            // 
-            // horizontalSeparator2
-            // 
-            this.horizontalSeparator2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
-            this.horizontalSeparator2.Location = new System.Drawing.Point(10, 133);
-            this.horizontalSeparator2.MaximumSize = new System.Drawing.Size(4920, 2);
-            this.horizontalSeparator2.Name = "horizontalSeparator2";
-            this.horizontalSeparator2.Size = new System.Drawing.Size(380, 2);
-            this.horizontalSeparator2.TabIndex = 182;
-            // 
-            // EditGroupForm
-            // 
-            this.ClientSize = new System.Drawing.Size(400, 480);
-            this.Controls.Add(this.horizontalSeparator2);
-            this.Controls.Add(this.pickerBox1);
-            this.Controls.Add(this.button1);
-            this.Controls.Add(this.label2);
-            this.Controls.Add(this.label1);
-            this.Controls.Add(this.textBox1);
-            this.Name = "EditGroupForm";
-            this.Text = "Edit Group";
-            this.Title = "Edit Group";
-            this.Controls.SetChildIndex(this.imgbxClose, 0);
-            this.Controls.SetChildIndex(this.panel1, 0);
-            this.Controls.SetChildIndex(this.area1, 0);
-            this.Controls.SetChildIndex(this.textBox1, 0);
-            this.Controls.SetChildIndex(this.label1, 0);
-            this.Controls.SetChildIndex(this.label2, 0);
-            this.Controls.SetChildIndex(this.button1, 0);
-            this.Controls.SetChildIndex(this.pickerBox1, 0);
-            this.Controls.SetChildIndex(this.horizontalSeparator2, 0);
-            ((System.ComponentModel.ISupportInitialize)(this.imgbxClose)).EndInit();
-            this.ResumeLayout(false);
-
-        }
-
-        protected override void OnShown(EventArgs e)
-        {
-            base.OnShown(e);
-
-            if (this.TilePanelLayout != null)
-            {
-                textBox1.Text = this.TilePanelLayout.Model.Title;
-                pickerBox1.ComboBox.SelectedIndex = (this.TilePanelLayout.Model.IsExclusive ? 1 : 0);
-            }
-        }
-
-        private void button1_Click(object sender, EventArgs e)
-        {
-            TileGroupModel model = this.TilePanelLayout.Model;
-            model.Title = textBox1.Text?.Trim();
-            model.IsExclusive = (pickerBox1.ComboBox.SelectedIndex == 1);
-
-            this.TilePanelLayout.UpdateModel(model);
-
-            this.Close();
-        }
-
-    }
-}
diff --git a/Windows/Forms/Tile/EditGroupForm.resx b/Windows/Forms/Tile/EditGroupForm.resx
deleted file mode 100644
index 3747e00..0000000
--- a/Windows/Forms/Tile/EditGroupForm.resx
+++ /dev/null
@@ -1,131 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!-- 
-    Microsoft ResX Schema 
-    
-    Version 2.0
-    
-    The primary goals of this format is to allow a simple XML format 
-    that is mostly human readable. The generation and parsing of the 
-    various data types are done through the TypeConverter classes 
-    associated with the data types.
-    
-    Example:
-    
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-                
-    There are any number of "resheader" rows that contain simple 
-    name/value pairs.
-    
-    Each data row contains a name, and value. The row also contains a 
-    type or mimetype. Type corresponds to a .NET class that support 
-    text/value conversion through the TypeConverter architecture. 
-    Classes that don't support this are serialized and stored with the 
-    mimetype set.
-    
-    The mimetype is used for serialized objects, and tells the 
-    ResXResourceReader how to depersist the object. This is currently not 
-    extensible. For a given mimetype the value must be set accordingly:
-    
-    Note - application/x-microsoft.net.object.binary.base64 is the format 
-    that the ResXResourceWriter will generate, however the reader can 
-    read any of the formats listed below.
-    
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-    
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array 
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-  <data name="imgbxClose.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-    <value>
-        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
-        wwAADsMBx2+oZAAAABh0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMS4xYyqcSwAAANlJREFUOE+lU1sO
-        gjAQrHgRY6KemQ+VT9NrgAfgfRA+SawzdTAk2lhkkgm7s7vTAq0py/LUNM0dHEEXSfYWfd8fDQIOD23b
-        nvFMY6jeAcxpMFIwC1HX9YWzNOCWUunR4AxnvxpUVbV3zm2UGsbUlHoEDfBhdsgf4BWDCcmYGmtqCxtw
-        NeQcoJ6JjGn43hXy8CvIxDeIGbREZY+pHjLgtqeVHf7SzVq7VdmDM6x9GGj1/19h9UckVv3GWMwNRh5L
-        6dGYH+UCHCTQ9SfV+7pMvJIIaLL0Oudd1x2eUQ8MyeAeq0cAAAAASUVORK5CYII=
-</value>
-  </data>
-</root>
\ No newline at end of file
diff --git a/Windows/Forms/Tile/EditListTileForm.cs b/Windows/Forms/Tile/EditListTileForm.cs
deleted file mode 100644
index d901c45..0000000
--- a/Windows/Forms/Tile/EditListTileForm.cs
+++ /dev/null
@@ -1,302 +0,0 @@
-using AppLauncher.Models;
-using RyzStudio.Windows.ThemedForms;
-using System;
-using System.Diagnostics;
-using System.IO;
-using System.Linq;
-using System.Windows.Forms;
-
-namespace AppLauncher.Windows.Forms
-{
-    public class EditListTileForm : TDialogForm
-    {
-        public static void ShowDialog(TTilePanel control)
-        {
-            EditListTileForm form = new EditListTileForm();
-            form.TilePanel = control;
-            form.ShowDialog();
-        }
-
-        private System.Windows.Forms.Label label1;
-        private TButton button1;
-        private RyzStudio.Windows.Forms.THorizontalSeparator horizontalSeparator2;
-        private TTextBox textBox1;
-        private TListBox listBox1;
-        private System.Windows.Forms.Label label2;
-
-        public TTilePanel TilePanel { get; set; } = null;
-
-        public EditListTileForm() : base()
-        {
-            InitializeComponent();
-        }
-
-        private void InitializeComponent()
-        {
-            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(EditListTileForm));
-            RyzStudio.Windows.ThemedForms.TButton.ButtonStyle buttonStyle1 = new RyzStudio.Windows.ThemedForms.TButton.ButtonStyle();
-            RyzStudio.Windows.ThemedForms.TButton.ButtonStyle buttonStyle2 = new RyzStudio.Windows.ThemedForms.TButton.ButtonStyle();
-            RyzStudio.Windows.ThemedForms.TButton.ButtonStyle buttonStyle3 = new RyzStudio.Windows.ThemedForms.TButton.ButtonStyle();
-            this.textBox1 = new RyzStudio.Windows.ThemedForms.TTextBox();
-            this.label1 = new System.Windows.Forms.Label();
-            this.button1 = new RyzStudio.Windows.ThemedForms.TButton();
-            this.horizontalSeparator2 = new RyzStudio.Windows.Forms.THorizontalSeparator();
-            this.listBox1 = new RyzStudio.Windows.ThemedForms.TListBox();
-            this.label2 = new System.Windows.Forms.Label();
-            ((System.ComponentModel.ISupportInitialize)(this.imgbxClose)).BeginInit();
-            this.SuspendLayout();
-            //
-            // imgbxClose
-            //
-            this.imgbxClose.Image = ((System.Drawing.Image)(resources.GetObject("imgbxClose.Image")));
-            this.imgbxClose.Location = new System.Drawing.Point(367, 5);
-            //
-            // lblDescription
-            //
-            this.Title = "Edit List Tile";
-            //
-            // panel1
-            //
-            this.panel1.Location = new System.Drawing.Point(394, 474);
-            //
-            // area1
-            //
-            this.area1.Location = new System.Drawing.Point(1, 474);
-            this.area1.Size = new System.Drawing.Size(392, 5);
-            //
-            // textBox1
-            //
-            this.textBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-            | System.Windows.Forms.AnchorStyles.Right)));
-            this.textBox1.BackColor = System.Drawing.Color.Transparent;
-            this.textBox1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F);
-            this.textBox1.Location = new System.Drawing.Point(159, 50);
-            this.textBox1.Margin = new System.Windows.Forms.Padding(10, 6, 10, 6);
-            this.textBox1.Name = "textBox1";
-            this.textBox1.Padding = new System.Windows.Forms.Padding(10, 10, 9, 9);
-            this.textBox1.Size = new System.Drawing.Size(220, 32);
-            this.textBox1.SubmitButton = null;
-            this.textBox1.TabIndex = 152;
-            this.textBox1.UseSystemPasswordChar = false;
-            //
-            // label1
-            //
-            this.label1.BackColor = System.Drawing.Color.Transparent;
-            this.label1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(95)))), ((int)(((byte)(99)))), ((int)(((byte)(104)))));
-            this.label1.Location = new System.Drawing.Point(18, 50);
-            this.label1.Margin = new System.Windows.Forms.Padding(0);
-            this.label1.Name = "label1";
-            this.label1.Size = new System.Drawing.Size(131, 32);
-            this.label1.TabIndex = 153;
-            this.label1.Text = "Title";
-            this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
-            //
-            // button1
-            //
-            this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
-            this.button1.BackColor = System.Drawing.Color.Transparent;
-            this.button1.DefaultImage = null;
-            this.button1.DownImage = null;
-            this.button1.LabelText = "&Save";
-            this.button1.Location = new System.Drawing.Point(251, 427);
-            this.button1.Name = "button1";
-            this.button1.OverImage = null;
-            this.button1.Padding = new System.Windows.Forms.Padding(4, 4, 3, 3);
-            this.button1.Size = new System.Drawing.Size(128, 32);
-            this.button1.TabIndex = 173;
-            this.button1.Click += new System.EventHandler(this.button1_Click);
-            //
-            // horizontalSeparator2
-            //
-            this.horizontalSeparator2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-            | System.Windows.Forms.AnchorStyles.Right)));
-            this.horizontalSeparator2.Location = new System.Drawing.Point(10, 92);
-            this.horizontalSeparator2.MaximumSize = new System.Drawing.Size(4920, 2);
-            this.horizontalSeparator2.Name = "horizontalSeparator2";
-            this.horizontalSeparator2.Size = new System.Drawing.Size(380, 2);
-            this.horizontalSeparator2.TabIndex = 177;
-            //
-            // listBox1
-            //
-            this.listBox1.AllowDrop = true;
-            this.listBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
-            | System.Windows.Forms.AnchorStyles.Left)
-            | System.Windows.Forms.AnchorStyles.Right)));
-            this.listBox1.BackColor = System.Drawing.Color.Transparent;
-            this.listBox1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F);
-            this.listBox1.Location = new System.Drawing.Point(159, 101);
-            this.listBox1.Margin = new System.Windows.Forms.Padding(10, 4, 10, 4);
-            this.listBox1.Name = "listBox1";
-            this.listBox1.Padding = new System.Windows.Forms.Padding(10, 6, 7, 5);
-            this.listBox1.Size = new System.Drawing.Size(220, 280);
-            this.listBox1.SubmitButton = null;
-            this.listBox1.TabIndex = 180;
-            this.listBox1.OnAdd += new System.EventHandler(this.listBox1_OnAdd);
-            this.listBox1.OnEdit += new System.EventHandler(this.listBox1_OnEdit);
-            this.listBox1.DragDrop += new System.Windows.Forms.DragEventHandler(this.listBox1_DragDrop);
-            this.listBox1.DragOver += new System.Windows.Forms.DragEventHandler(this.listBox1_DragOver);
-            //
-            // label2
-            //
-            this.label2.BackColor = System.Drawing.Color.Transparent;
-            this.label2.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(95)))), ((int)(((byte)(99)))), ((int)(((byte)(104)))));
-            this.label2.Location = new System.Drawing.Point(18, 104);
-            this.label2.Name = "label2";
-            this.label2.Size = new System.Drawing.Size(131, 32);
-            this.label2.TabIndex = 181;
-            this.label2.Text = "List";
-            this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
-            //
-            // EditListTileForm
-            //
-            this.ClientSize = new System.Drawing.Size(400, 480);
-            this.Controls.Add(this.label2);
-            this.Controls.Add(this.listBox1);
-            this.Controls.Add(this.horizontalSeparator2);
-            this.Controls.Add(this.button1);
-            this.Controls.Add(this.label1);
-            this.Controls.Add(this.textBox1);
-            this.Title = "Edit List Tile";
-            this.Name = "EditListTileForm";
-            this.Controls.SetChildIndex(this.imgbxClose, 0);
-            this.Controls.SetChildIndex(this.panel1, 0);
-            this.Controls.SetChildIndex(this.area1, 0);
-            this.Controls.SetChildIndex(this.textBox1, 0);
-            this.Controls.SetChildIndex(this.label1, 0);
-            this.Controls.SetChildIndex(this.button1, 0);
-            this.Controls.SetChildIndex(this.horizontalSeparator2, 0);
-            this.Controls.SetChildIndex(this.listBox1, 0);
-            this.Controls.SetChildIndex(this.label2, 0);
-            ((System.ComponentModel.ISupportInitialize)(this.imgbxClose)).EndInit();
-            this.ResumeLayout(false);
-
-        }
-
-        protected override void OnShown(EventArgs e)
-        {
-            base.OnShown(e);
-
-            listBox1.ListBox.Items.Clear();
-
-            if (this.TilePanel == null) return;
-            if (this.TilePanel.ModelInfo == null) return;
-
-            textBox1.Text = this.TilePanel.ModelInfo.Title;
-
-            if (this.TilePanel.ModelInfo.Items != null)
-            {
-                foreach (TileModel item in this.TilePanel.ModelInfo.Items)
-                {
-                    if (item.IsGroup)
-                    {
-                        continue;
-                    }
-
-                    listBox1.ListBox.Items.Add(item);
-                }
-            }
-        }
-
-        private void button1_Click(object sender, EventArgs e)
-        {
-            TileModel model = new TileModel()
-            {
-                Title = textBox1.Text?.Trim(),
-                IsGroup = true
-            };
-
-            model.Items = new System.Collections.Generic.List<TileModel>();
-
-            foreach (TileModel item in listBox1.ListBox.Items.OfType<TileModel>())
-            {
-                if (item.IsGroup)
-                {
-                    continue;
-                }
-
-                model.Items.Add(item);
-            }
-
-            this.TilePanel.LoadInfo(model);
-
-            this.Close();
-        }
-
-        private void listBox1_OnAdd(object sender, EventArgs e) => AddTileForm.ShowDialog(listBox1);
-
-        private void listBox1_OnEdit(object sender, EventArgs e)
-        {
-            if (listBox1.ListBox.Items.Count <= 0)
-            {
-                return;
-            }
-
-            EditTileForm.ShowDialog(listBox1);
-        }
-
-        private void listBox1_DragOver(object sender, System.Windows.Forms.DragEventArgs e)
-        {
-            if (e.Data.GetDataPresent(DataFormats.FileDrop))
-            {
-                e.Effect = DragDropEffects.Link;
-            }
-            else
-            {
-                e.Effect = DragDropEffects.None;
-            }
-        }
-
-        private void listBox1_DragDrop(object sender, DragEventArgs e)
-        {
-            string[] fileList = e.Data.GetData(DataFormats.FileDrop) as string[];
-            if (fileList == null)
-            {
-                return;
-            }
-
-            if (fileList.Length <= 0)
-            {
-                return;
-            }
-
-            if (string.IsNullOrWhiteSpace(fileList[0]))
-            {
-                return;
-            }
-
-            TileModel model = new TileModel()
-            {
-                ProcessFilename = fileList[0],
-                Title = Path.GetFileName(fileList[0])
-            };
-
-            // exe
-            if (Path.GetExtension(fileList[0]).Equals(".exe", StringComparison.CurrentCultureIgnoreCase))
-            {
-                if (File.Exists(fileList[0]))
-                {
-                    try
-                    {
-                        FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(fileList[0]);
-                        if (fvi != null)
-                        {
-                            model.Title = fvi.ProductName;
-                        }
-                    }
-                    catch
-                    {
-                        // do nothing
-                    }
-                }
-
-                if (string.IsNullOrWhiteSpace(model.Title))
-                {
-                    model.Title = Path.GetFileNameWithoutExtension(fileList[0]);
-                }
-            }
-
-            listBox1.ListBox.Items.Add(model);
-        }
-
-    }
-}
\ No newline at end of file
diff --git a/Windows/Forms/Tile/EditListTileForm.resx b/Windows/Forms/Tile/EditListTileForm.resx
deleted file mode 100644
index 3747e00..0000000
--- a/Windows/Forms/Tile/EditListTileForm.resx
+++ /dev/null
@@ -1,131 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!-- 
-    Microsoft ResX Schema 
-    
-    Version 2.0
-    
-    The primary goals of this format is to allow a simple XML format 
-    that is mostly human readable. The generation and parsing of the 
-    various data types are done through the TypeConverter classes 
-    associated with the data types.
-    
-    Example:
-    
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-                
-    There are any number of "resheader" rows that contain simple 
-    name/value pairs.
-    
-    Each data row contains a name, and value. The row also contains a 
-    type or mimetype. Type corresponds to a .NET class that support 
-    text/value conversion through the TypeConverter architecture. 
-    Classes that don't support this are serialized and stored with the 
-    mimetype set.
-    
-    The mimetype is used for serialized objects, and tells the 
-    ResXResourceReader how to depersist the object. This is currently not 
-    extensible. For a given mimetype the value must be set accordingly:
-    
-    Note - application/x-microsoft.net.object.binary.base64 is the format 
-    that the ResXResourceWriter will generate, however the reader can 
-    read any of the formats listed below.
-    
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-    
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array 
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-  <data name="imgbxClose.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-    <value>
-        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
-        wwAADsMBx2+oZAAAABh0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMS4xYyqcSwAAANlJREFUOE+lU1sO
-        gjAQrHgRY6KemQ+VT9NrgAfgfRA+SawzdTAk2lhkkgm7s7vTAq0py/LUNM0dHEEXSfYWfd8fDQIOD23b
-        nvFMY6jeAcxpMFIwC1HX9YWzNOCWUunR4AxnvxpUVbV3zm2UGsbUlHoEDfBhdsgf4BWDCcmYGmtqCxtw
-        NeQcoJ6JjGn43hXy8CvIxDeIGbREZY+pHjLgtqeVHf7SzVq7VdmDM6x9GGj1/19h9UckVv3GWMwNRh5L
-        6dGYH+UCHCTQ9SfV+7pMvJIIaLL0Oudd1x2eUQ8MyeAeq0cAAAAASUVORK5CYII=
-</value>
-  </data>
-</root>
\ No newline at end of file
diff --git a/Windows/Forms/Tile/EditTileForm.cs b/Windows/Forms/Tile/EditTileForm.cs
deleted file mode 100644
index 7b876f0..0000000
--- a/Windows/Forms/Tile/EditTileForm.cs
+++ /dev/null
@@ -1,408 +0,0 @@
-using AppLauncher.Models;
-using RyzStudio.Windows.ThemedForms;
-using System;
-
-namespace AppLauncher.Windows.Forms
-{
-    public class EditTileForm : TDialogForm
-    {
-        public static void ShowDialog(TTilePanel control)
-        {
-            EditTileForm form = new EditTileForm();
-            form.TilePanel = control;
-            form.ShowDialog();
-        }
-
-        public static void ShowDialog(TListBox control)
-        {
-            EditTileForm form = new EditTileForm();
-            form.ListBox = control;
-            form.ShowDialog();
-        }
-
-        private System.Windows.Forms.Label label6;
-        private System.Windows.Forms.Label label7;
-        private System.Windows.Forms.Label label4;
-        private System.Windows.Forms.Label label3;
-        private System.Windows.Forms.Label label2;
-        private System.Windows.Forms.Label label1;
-        private TOpenFileTextBox textBox2;
-        private TTextBox textBox3;
-        private TFolderTextBox textBox4;
-        private TButton button1;
-        private TPickerBox pickerBox1;
-        private TPickerBox pickerBox2;
-        private RyzStudio.Windows.Forms.THorizontalSeparator horizontalSeparator1;
-        private RyzStudio.Windows.Forms.THorizontalSeparator horizontalSeparator2;
-        private TTextBox textBox1;
-
-        public TTilePanel TilePanel { get; set; } = null;
-        public TListBox ListBox { get; set; } = null;
-
-        public EditTileForm() : base()
-        {
-            InitializeComponent();
-
-            pickerBox1.ComboBox.Items.Clear();
-            pickerBox1.ComboBox.Items.AddRange(new string[] { "Normal", "Hidden", "Minimized", "Maximized" });
-            if (pickerBox1.ComboBox.Items.Count > 0) pickerBox1.ComboBox.SelectedIndex = 0;
-
-            pickerBox2.ComboBox.Items.Clear();
-            pickerBox2.ComboBox.Items.AddRange(new string[] { "No", "Yes" });
-            if (pickerBox2.ComboBox.Items.Count > 0) pickerBox2.ComboBox.SelectedIndex = 0;
-        }
-
-        private void InitializeComponent()
-        {
-            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(EditTileForm));
-            RyzStudio.Windows.ThemedForms.TButton.ButtonStyle buttonStyle1 = new RyzStudio.Windows.ThemedForms.TButton.ButtonStyle();
-            RyzStudio.Windows.ThemedForms.TButton.ButtonStyle buttonStyle2 = new RyzStudio.Windows.ThemedForms.TButton.ButtonStyle();
-            RyzStudio.Windows.ThemedForms.TButton.ButtonStyle buttonStyle3 = new RyzStudio.Windows.ThemedForms.TButton.ButtonStyle();
-            this.textBox1 = new RyzStudio.Windows.ThemedForms.TTextBox();
-            this.label6 = new System.Windows.Forms.Label();
-            this.label7 = new System.Windows.Forms.Label();
-            this.label4 = new System.Windows.Forms.Label();
-            this.label3 = new System.Windows.Forms.Label();
-            this.label2 = new System.Windows.Forms.Label();
-            this.label1 = new System.Windows.Forms.Label();
-            this.textBox2 = new RyzStudio.Windows.ThemedForms.TOpenFileTextBox();
-            this.textBox3 = new RyzStudio.Windows.ThemedForms.TTextBox();
-            this.textBox4 = new RyzStudio.Windows.ThemedForms.TFolderTextBox();
-            this.button1 = new RyzStudio.Windows.ThemedForms.TButton();
-            this.pickerBox1 = new RyzStudio.Windows.ThemedForms.TPickerBox();
-            this.pickerBox2 = new RyzStudio.Windows.ThemedForms.TPickerBox();
-            this.horizontalSeparator1 = new RyzStudio.Windows.Forms.THorizontalSeparator();
-            this.horizontalSeparator2 = new RyzStudio.Windows.Forms.THorizontalSeparator();
-            ((System.ComponentModel.ISupportInitialize)(this.imgbxClose)).BeginInit();
-            this.SuspendLayout();
-            //
-            // imgbxClose
-            //
-            this.imgbxClose.Image = ((System.Drawing.Image)(resources.GetObject("imgbxClose.Image")));
-            this.imgbxClose.Location = new System.Drawing.Point(367, 5);
-            //
-            // lblDescription
-            //
-            this.Title = "Edit Tile";
-            //
-            // panel1
-            //
-            this.panel1.Location = new System.Drawing.Point(394, 474);
-            //
-            // area1
-            //
-            this.area1.Location = new System.Drawing.Point(1, 474);
-            this.area1.Size = new System.Drawing.Size(392, 5);
-            //
-            // textBox1
-            //
-            this.textBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-            | System.Windows.Forms.AnchorStyles.Right)));
-            this.textBox1.BackColor = System.Drawing.Color.Transparent;
-            this.textBox1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F);
-            this.textBox1.Location = new System.Drawing.Point(159, 50);
-            this.textBox1.Margin = new System.Windows.Forms.Padding(10, 6, 10, 6);
-            this.textBox1.Name = "textBox1";
-            this.textBox1.Padding = new System.Windows.Forms.Padding(10, 10, 9, 9);
-            this.textBox1.Size = new System.Drawing.Size(220, 32);
-            this.textBox1.SubmitButton = null;
-            this.textBox1.TabIndex = 152;
-            this.textBox1.UseSystemPasswordChar = false;
-            //
-            // label6
-            //
-            this.label6.BackColor = System.Drawing.Color.Transparent;
-            this.label6.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(95)))), ((int)(((byte)(99)))), ((int)(((byte)(104)))));
-            this.label6.Location = new System.Drawing.Point(18, 268);
-            this.label6.Name = "label6";
-            this.label6.Size = new System.Drawing.Size(208, 32);
-            this.label6.TabIndex = 163;
-            this.label6.Text = "Run As Admin";
-            this.label6.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
-            //
-            // label7
-            //
-            this.label7.BackColor = System.Drawing.Color.Transparent;
-            this.label7.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(95)))), ((int)(((byte)(99)))), ((int)(((byte)(104)))));
-            this.label7.Location = new System.Drawing.Point(18, 227);
-            this.label7.Name = "label7";
-            this.label7.Size = new System.Drawing.Size(208, 32);
-            this.label7.TabIndex = 161;
-            this.label7.Text = "Window Style";
-            this.label7.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
-            //
-            // label4
-            //
-            this.label4.BackColor = System.Drawing.Color.Transparent;
-            this.label4.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(95)))), ((int)(((byte)(99)))), ((int)(((byte)(104)))));
-            this.label4.Location = new System.Drawing.Point(18, 173);
-            this.label4.Name = "label4";
-            this.label4.Size = new System.Drawing.Size(131, 32);
-            this.label4.TabIndex = 159;
-            this.label4.Text = "Working Directory";
-            this.label4.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
-            //
-            // label3
-            //
-            this.label3.BackColor = System.Drawing.Color.Transparent;
-            this.label3.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(95)))), ((int)(((byte)(99)))), ((int)(((byte)(104)))));
-            this.label3.Location = new System.Drawing.Point(18, 132);
-            this.label3.Name = "label3";
-            this.label3.Size = new System.Drawing.Size(131, 32);
-            this.label3.TabIndex = 157;
-            this.label3.Text = "Argument";
-            this.label3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
-            //
-            // label2
-            //
-            this.label2.BackColor = System.Drawing.Color.Transparent;
-            this.label2.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(95)))), ((int)(((byte)(99)))), ((int)(((byte)(104)))));
-            this.label2.Location = new System.Drawing.Point(18, 91);
-            this.label2.Name = "label2";
-            this.label2.Size = new System.Drawing.Size(131, 32);
-            this.label2.TabIndex = 155;
-            this.label2.Text = "Filename";
-            this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
-            //
-            // label1
-            //
-            this.label1.BackColor = System.Drawing.Color.Transparent;
-            this.label1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(95)))), ((int)(((byte)(99)))), ((int)(((byte)(104)))));
-            this.label1.Location = new System.Drawing.Point(18, 50);
-            this.label1.Margin = new System.Windows.Forms.Padding(0);
-            this.label1.Name = "label1";
-            this.label1.Size = new System.Drawing.Size(131, 32);
-            this.label1.TabIndex = 153;
-            this.label1.Text = "Title";
-            this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
-            //
-            // textBox2
-            //
-            this.textBox2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-            | System.Windows.Forms.AnchorStyles.Right)));
-            this.textBox2.BackColor = System.Drawing.Color.Transparent;
-            this.textBox2.FileDialog = null;
-            this.textBox2.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F);
-            this.textBox2.HighlightImage = ((System.Drawing.Image)(resources.GetObject("textBox2.HighlightImage")));
-            this.textBox2.Location = new System.Drawing.Point(159, 91);
-            this.textBox2.Margin = new System.Windows.Forms.Padding(10, 3, 3, 3);
-            this.textBox2.Name = "textBox2";
-            this.textBox2.NormalImage = ((System.Drawing.Image)(resources.GetObject("textBox2.NormalImage")));
-            this.textBox2.Padding = new System.Windows.Forms.Padding(10, 10, 9, 9);
-            this.textBox2.Size = new System.Drawing.Size(220, 32);
-            this.textBox2.SubmitButton = null;
-            this.textBox2.TabIndex = 170;
-            this.textBox2.UseSystemPasswordChar = false;
-            //
-            // textBox3
-            //
-            this.textBox3.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-            | System.Windows.Forms.AnchorStyles.Right)));
-            this.textBox3.BackColor = System.Drawing.Color.Transparent;
-            this.textBox3.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F);
-            this.textBox3.Location = new System.Drawing.Point(159, 132);
-            this.textBox3.Margin = new System.Windows.Forms.Padding(10, 6, 10, 6);
-            this.textBox3.Name = "textBox3";
-            this.textBox3.Padding = new System.Windows.Forms.Padding(10, 10, 9, 9);
-            this.textBox3.Size = new System.Drawing.Size(220, 32);
-            this.textBox3.SubmitButton = null;
-            this.textBox3.TabIndex = 171;
-            this.textBox3.UseSystemPasswordChar = false;
-            //
-            // textBox4
-            //
-            this.textBox4.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-            | System.Windows.Forms.AnchorStyles.Right)));
-            this.textBox4.BackColor = System.Drawing.Color.Transparent;
-            this.textBox4.FolderDialog = null;
-            this.textBox4.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F);
-            this.textBox4.HighlightImage = ((System.Drawing.Image)(resources.GetObject("textBox4.HighlightImage")));
-            this.textBox4.Location = new System.Drawing.Point(159, 173);
-            this.textBox4.Margin = new System.Windows.Forms.Padding(10, 3, 3, 3);
-            this.textBox4.Name = "textBox4";
-            this.textBox4.NormalImage = ((System.Drawing.Image)(resources.GetObject("textBox4.NormalImage")));
-            this.textBox4.Padding = new System.Windows.Forms.Padding(10, 10, 9, 9);
-            this.textBox4.Size = new System.Drawing.Size(220, 32);
-            this.textBox4.SubmitButton = null;
-            this.textBox4.TabIndex = 172;
-            this.textBox4.UseSystemPasswordChar = false;
-            //
-            // button1
-            //
-            this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
-            this.button1.BackColor = System.Drawing.Color.Transparent;
-            this.button1.DefaultImage = null;
-            this.button1.DownImage = null;
-            this.button1.LabelText = "&Save";
-            this.button1.Location = new System.Drawing.Point(251, 427);
-            this.button1.Name = "button1";
-            this.button1.OverImage = null;
-            this.button1.Padding = new System.Windows.Forms.Padding(4, 4, 3, 3);
-            this.button1.Size = new System.Drawing.Size(128, 32);
-            this.button1.TabIndex = 173;
-            this.button1.Click += new System.EventHandler(this.button1_Click);
-            //
-            // pickerBox1
-            //
-            this.pickerBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-            | System.Windows.Forms.AnchorStyles.Right)));
-            this.pickerBox1.BackColor = System.Drawing.Color.Transparent;
-            this.pickerBox1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F);
-            this.pickerBox1.Location = new System.Drawing.Point(239, 227);
-            this.pickerBox1.Margin = new System.Windows.Forms.Padding(10, 6, 10, 6);
-            this.pickerBox1.Name = "pickerBox1";
-            this.pickerBox1.Padding = new System.Windows.Forms.Padding(10, 6, 7, 5);
-            this.pickerBox1.Size = new System.Drawing.Size(140, 32);
-            this.pickerBox1.SubmitButton = null;
-            this.pickerBox1.TabIndex = 174;
-            //
-            // pickerBox2
-            //
-            this.pickerBox2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-            | System.Windows.Forms.AnchorStyles.Right)));
-            this.pickerBox2.BackColor = System.Drawing.Color.Transparent;
-            this.pickerBox2.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F);
-            this.pickerBox2.Location = new System.Drawing.Point(239, 268);
-            this.pickerBox2.Margin = new System.Windows.Forms.Padding(10, 6, 10, 6);
-            this.pickerBox2.Name = "pickerBox2";
-            this.pickerBox2.Padding = new System.Windows.Forms.Padding(10, 6, 7, 5);
-            this.pickerBox2.Size = new System.Drawing.Size(140, 32);
-            this.pickerBox2.SubmitButton = null;
-            this.pickerBox2.TabIndex = 175;
-            //
-            // horizontalSeparator1
-            //
-            this.horizontalSeparator1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-            | System.Windows.Forms.AnchorStyles.Right)));
-            this.horizontalSeparator1.Location = new System.Drawing.Point(10, 215);
-            this.horizontalSeparator1.MaximumSize = new System.Drawing.Size(4920, 2);
-            this.horizontalSeparator1.Name = "horizontalSeparator1";
-            this.horizontalSeparator1.Size = new System.Drawing.Size(380, 2);
-            this.horizontalSeparator1.TabIndex = 176;
-            //
-            // horizontalSeparator2
-            //
-            this.horizontalSeparator2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-            | System.Windows.Forms.AnchorStyles.Right)));
-            this.horizontalSeparator2.Location = new System.Drawing.Point(10, 310);
-            this.horizontalSeparator2.MaximumSize = new System.Drawing.Size(4920, 2);
-            this.horizontalSeparator2.Name = "horizontalSeparator2";
-            this.horizontalSeparator2.Size = new System.Drawing.Size(380, 2);
-            this.horizontalSeparator2.TabIndex = 177;
-            //
-            // EditTileForm
-            //
-            this.ClientSize = new System.Drawing.Size(400, 480);
-            this.Controls.Add(this.horizontalSeparator2);
-            this.Controls.Add(this.horizontalSeparator1);
-            this.Controls.Add(this.pickerBox2);
-            this.Controls.Add(this.pickerBox1);
-            this.Controls.Add(this.button1);
-            this.Controls.Add(this.textBox4);
-            this.Controls.Add(this.textBox3);
-            this.Controls.Add(this.textBox2);
-            this.Controls.Add(this.label6);
-            this.Controls.Add(this.label7);
-            this.Controls.Add(this.label4);
-            this.Controls.Add(this.label3);
-            this.Controls.Add(this.label2);
-            this.Controls.Add(this.label1);
-            this.Controls.Add(this.textBox1);
-            this.Title = "Edit Tile";
-            this.Name = "EditTileForm";
-            this.Controls.SetChildIndex(this.imgbxClose, 0);
-            this.Controls.SetChildIndex(this.panel1, 0);
-            this.Controls.SetChildIndex(this.area1, 0);
-            this.Controls.SetChildIndex(this.textBox1, 0);
-            this.Controls.SetChildIndex(this.label1, 0);
-            this.Controls.SetChildIndex(this.label2, 0);
-            this.Controls.SetChildIndex(this.label3, 0);
-            this.Controls.SetChildIndex(this.label4, 0);
-            this.Controls.SetChildIndex(this.label7, 0);
-            this.Controls.SetChildIndex(this.label6, 0);
-            this.Controls.SetChildIndex(this.textBox2, 0);
-            this.Controls.SetChildIndex(this.textBox3, 0);
-            this.Controls.SetChildIndex(this.textBox4, 0);
-            this.Controls.SetChildIndex(this.button1, 0);
-            this.Controls.SetChildIndex(this.pickerBox1, 0);
-            this.Controls.SetChildIndex(this.pickerBox2, 0);
-            this.Controls.SetChildIndex(this.horizontalSeparator1, 0);
-            this.Controls.SetChildIndex(this.horizontalSeparator2, 0);
-            ((System.ComponentModel.ISupportInitialize)(this.imgbxClose)).EndInit();
-            this.ResumeLayout(false);
-
-        }
-
-        protected override void OnShown(EventArgs e)
-        {
-            base.OnShown(e);
-
-            if (this.TilePanel != null)
-            {
-                updateModel(this.TilePanel.ModelInfo);
-            }
-            else if (this.ListBox != null)
-            {
-                if (this.ListBox.ListBox.SelectedItem != null)
-                {
-                    TileModel model = (this.ListBox.ListBox.SelectedItem as TileModel);
-                    if (model != null)
-                    {
-                        updateModel(model);
-                    }
-                }
-            }
-        }
-
-        private void button1_Click(object sender, EventArgs e)
-        {
-            TileModel model = buildModel();
-
-            if (this.TilePanel != null)
-            {
-                this.TilePanel.LoadInfo(model);
-            }
-            else if (this.ListBox != null)
-            {
-                int n = this.ListBox.ListBox.SelectedIndex;
-                if (n >= 0)
-                {
-                    this.ListBox.ListBox.Items.RemoveAt(n);
-                    this.ListBox.ListBox.Items.Insert(n, model);
-                    this.ListBox.ListBox.SelectedIndex = n;
-                }
-            }
-
-            this.Close();
-        }
-
-        protected TileModel buildModel()
-        {
-            return new TileModel()
-            {
-                Title = textBox1.Text?.Trim(),
-                ProcessFilename = textBox2.Text?.Trim(),
-                ProcessArgument = textBox3.Text?.Trim(),
-                ProcessWorkingDirectory = textBox4.Text?.Trim(),
-                ProcessWindowStyle = (System.Diagnostics.ProcessWindowStyle)pickerBox1.ComboBox.SelectedIndex,
-                ProcessAsAdmin = (pickerBox2.ComboBox.SelectedIndex == 1)
-            };
-        }
-
-        protected void updateModel(TileModel model)
-        {
-            if (model == null)
-            {
-                return;
-            }
-
-            textBox1.Text = model.Title;
-            textBox2.Text = model.ProcessFilename;
-            textBox3.Text = model.ProcessArgument;
-            textBox4.Text = model.ProcessWorkingDirectory;
-            pickerBox1.ComboBox.SelectedIndex = (int)model.ProcessWindowStyle;
-            pickerBox2.ComboBox.SelectedIndex = (model.ProcessAsAdmin ? 1 : 0);
-        }
-
-    }
-}
\ No newline at end of file
diff --git a/Windows/Forms/Tile/EditTileForm.resx b/Windows/Forms/Tile/EditTileForm.resx
deleted file mode 100644
index e6f3e1a..0000000
--- a/Windows/Forms/Tile/EditTileForm.resx
+++ /dev/null
@@ -1,167 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!-- 
-    Microsoft ResX Schema 
-    
-    Version 2.0
-    
-    The primary goals of this format is to allow a simple XML format 
-    that is mostly human readable. The generation and parsing of the 
-    various data types are done through the TypeConverter classes 
-    associated with the data types.
-    
-    Example:
-    
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-                
-    There are any number of "resheader" rows that contain simple 
-    name/value pairs.
-    
-    Each data row contains a name, and value. The row also contains a 
-    type or mimetype. Type corresponds to a .NET class that support 
-    text/value conversion through the TypeConverter architecture. 
-    Classes that don't support this are serialized and stored with the 
-    mimetype set.
-    
-    The mimetype is used for serialized objects, and tells the 
-    ResXResourceReader how to depersist the object. This is currently not 
-    extensible. For a given mimetype the value must be set accordingly:
-    
-    Note - application/x-microsoft.net.object.binary.base64 is the format 
-    that the ResXResourceWriter will generate, however the reader can 
-    read any of the formats listed below.
-    
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-    
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array 
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-  <data name="imgbxClose.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-    <value>
-        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
-        wwAADsMBx2+oZAAAABh0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMS4xYyqcSwAAANlJREFUOE+lU1sO
-        gjAQrHgRY6KemQ+VT9NrgAfgfRA+SawzdTAk2lhkkgm7s7vTAq0py/LUNM0dHEEXSfYWfd8fDQIOD23b
-        nvFMY6jeAcxpMFIwC1HX9YWzNOCWUunR4AxnvxpUVbV3zm2UGsbUlHoEDfBhdsgf4BWDCcmYGmtqCxtw
-        NeQcoJ6JjGn43hXy8CvIxDeIGbREZY+pHjLgtqeVHf7SzVq7VdmDM6x9GGj1/19h9UckVv3GWMwNRh5L
-        6dGYH+UCHCTQ9SfV+7pMvJIIaLL0Oudd1x2eUQ8MyeAeq0cAAAAASUVORK5CYII=
-</value>
-  </data>
-  <data name="textBox2.HighlightImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-    <value>
-        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
-        wgAADsIBFShKgAAAAK9JREFUOE/t0zsKwkAURuGp1BWJK3EhIrgAV+EOLLWwtRQLwQdiIbbiIkwynj+O
-        IVwnyhR2XvjyInNIkXHee8f0cEQBPbDOaKEarSvXhsAJO4wirlB4jipiA3phoIvIrLFChhnKiA3o8Ckw
-        RR93LNBODVwwwRL62kNKYIxNzQ1FSsDOEHk08HrYJMw/8KtA06/cCef6KJDZgDbTFrHNZO3x9idqOyui
-        m2+07bvPgHcPXOhtG3D6cUIAAAAASUVORK5CYII=
-</value>
-  </data>
-  <data name="textBox2.NormalImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-    <value>
-        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
-        wgAADsIBFShKgAAAAMZJREFUOE/tk7sNwjAQQF3BRohJGAQhMQBTsAElFLSUiAKJTxIXhBZlCILNuyRG
-        iXEQKeg46fmsO/slhU9Za5XWehiXYcD6JElygZ6qhdwTioVDGo4wDXDjsohXdYkvMDTHVa8R9Hb0tpCz
-        XzqJL5Df/CRYRFE0Yn8nr9M07XcSwBXmXN6QDfncRTCjt6+Rgfla4Adfn3D+ERS4Yht/wY8FxVN2xTac
-        gLP5qyYLAhmmA4SGyeeEoPkSq3EWydsoB4gRDEqBVU/p15ajstHKCgAAAABJRU5ErkJggg==
-</value>
-  </data>
-  <data name="textBox4.HighlightImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-    <value>
-        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
-        xAAADsQBlSsOGwAAAJtJREFUOE/t0zEKwkAQheEpvILHSLySlTeJ6AnEzpPYi0ERPIKWKtZKNv9LNS5x
-        E6xS+OCDJew8tsgYmeCECsGZo1dKXLBwtnghQ2fe0JDPGHecsW6xwgwjNM8tdIgyxQ0qij2gORV9LejK
-        Bk8dfi3QjGY/C0IISS7/gkEVtP3KfbKEZm0PLZM++IVK0d0rdrAcR8TrnKK7BzPLa7Wb+WX/Nb8PAAAA
-        AElFTkSuQmCC
-</value>
-  </data>
-  <data name="textBox4.NormalImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-    <value>
-        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
-        xAAADsQBlSsOGwAAALZJREFUOE/tkzEKwjAYRjt4BY9hvZKTN1HsCYqbJzGzKBGb9gY6qjgrxvdJK7ZS
-        Gpwc/ODBnzTvg0AT5Xk+hB3cwVc456ZRSIqi2MAeafbGEq5Zlg3KY+1Bvkkql89Ya/vsnUCZN8FJYWyM
-        6ekKnsWkdF9hb8S3I6ioyRnkpa0FXcFbwOXrAjlyawXe+06q/At+qoDh41cOCU4iV8OaQY8pUVEgOnuA
-        VcSzjRm2UHvOHeisdc7FDwDnJKIbLgP9AAAAAElFTkSuQmCC
-</value>
-  </data>
-</root>
\ No newline at end of file
diff --git a/Windows/Forms/Tile/TTilePanel.Designer.cs b/Windows/Forms/Tile/TTilePanel.Designer.cs
deleted file mode 100644
index 84b30d3..0000000
--- a/Windows/Forms/Tile/TTilePanel.Designer.cs
+++ /dev/null
@@ -1,124 +0,0 @@
-namespace AppLauncher.Windows.Forms
-{
-    partial class TTilePanel
-    {
-        /// <summary> 
-        /// Required designer variable.
-        /// </summary>
-        private System.ComponentModel.IContainer components = null;
-
-        /// <summary> 
-        /// Clean up any resources being used.
-        /// </summary>
-        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-        protected override void Dispose(bool disposing)
-        {
-            if (disposing && (components != null))
-            {
-                components.Dispose();
-            }
-            base.Dispose(disposing);
-        }
-
-        #region Component Designer generated code
-
-        /// <summary> 
-        /// Required method for Designer support - do not modify 
-        /// the contents of this method with the code editor.
-        /// </summary>
-        private void InitializeComponent()
-        {
-            this.components = new System.ComponentModel.Container();
-            this.label1 = new System.Windows.Forms.Label();
-            this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components);
-            this.editToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
-            this.removeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
-            this.pictureBox1 = new System.Windows.Forms.PictureBox();
-            this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
-            this.contextMenuStrip1.SuspendLayout();
-            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
-            this.SuspendLayout();
-            // 
-            // label1
-            // 
-            this.label1.AutoEllipsis = true;
-            this.label1.BackColor = System.Drawing.Color.Transparent;
-            this.label1.ContextMenuStrip = this.contextMenuStrip1;
-            this.label1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(234)))), ((int)(((byte)(234)))), ((int)(((byte)(234)))));
-            this.label1.Location = new System.Drawing.Point(0, 47);
-            this.label1.Margin = new System.Windows.Forms.Padding(0);
-            this.label1.Name = "label1";
-            this.label1.Size = new System.Drawing.Size(70, 13);
-            this.label1.TabIndex = 24;
-            this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
-            this.label1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.panel_MouseClick);
-            this.label1.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.panel_MouseDoubleClick);
-            // 
-            // contextMenuStrip1
-            // 
-            this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
-            this.editToolStripMenuItem,
-            this.removeToolStripMenuItem});
-            this.contextMenuStrip1.Name = "contextMenuStrip1";
-            this.contextMenuStrip1.Size = new System.Drawing.Size(118, 48);
-            // 
-            // editToolStripMenuItem
-            // 
-            this.editToolStripMenuItem.Name = "editToolStripMenuItem";
-            this.editToolStripMenuItem.Size = new System.Drawing.Size(117, 22);
-            this.editToolStripMenuItem.Text = "&Edit";
-            this.editToolStripMenuItem.Click += new System.EventHandler(this.editToolStripMenuItem_Click);
-            // 
-            // removeToolStripMenuItem
-            // 
-            this.removeToolStripMenuItem.Name = "removeToolStripMenuItem";
-            this.removeToolStripMenuItem.Size = new System.Drawing.Size(117, 22);
-            this.removeToolStripMenuItem.Text = "&Remove";
-            this.removeToolStripMenuItem.Click += new System.EventHandler(this.removeToolStripMenuItem_Click);
-            // 
-            // pictureBox1
-            // 
-            this.pictureBox1.BackColor = System.Drawing.Color.Transparent;
-            this.pictureBox1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
-            this.pictureBox1.ContextMenuStrip = this.contextMenuStrip1;
-            this.pictureBox1.ErrorImage = null;
-            this.pictureBox1.InitialImage = null;
-            this.pictureBox1.Location = new System.Drawing.Point(0, 8);
-            this.pictureBox1.Margin = new System.Windows.Forms.Padding(0);
-            this.pictureBox1.Name = "pictureBox1";
-            this.pictureBox1.Size = new System.Drawing.Size(70, 38);
-            this.pictureBox1.TabIndex = 25;
-            this.pictureBox1.TabStop = false;
-            this.pictureBox1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.panel_MouseClick);
-            this.pictureBox1.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.panel_MouseDoubleClick);
-            // 
-            // TilePanel
-            // 
-            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-            this.Controls.Add(this.pictureBox1);
-            this.Controls.Add(this.label1);
-            this.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(234)))), ((int)(((byte)(234)))), ((int)(((byte)(234)))));
-            this.Margin = new System.Windows.Forms.Padding(3, 3, 0, 0);
-            this.MaximumSize = new System.Drawing.Size(70, 70);
-            this.MinimumSize = new System.Drawing.Size(70, 70);
-            this.Name = "TilePanel";
-            this.Size = new System.Drawing.Size(70, 70);
-            this.MouseClick += new System.Windows.Forms.MouseEventHandler(this.panel_MouseClick);
-            this.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.panel_MouseDoubleClick);
-            this.contextMenuStrip1.ResumeLayout(false);
-            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
-            this.ResumeLayout(false);
-
-        }
-
-        #endregion
-
-        private System.Windows.Forms.Label label1;
-        private System.Windows.Forms.PictureBox pictureBox1;
-        private System.Windows.Forms.ContextMenuStrip contextMenuStrip1;
-        private System.Windows.Forms.ToolStripMenuItem editToolStripMenuItem;
-        private System.Windows.Forms.ToolStripMenuItem removeToolStripMenuItem;
-        private System.Windows.Forms.ToolTip toolTip1;
-    }
-}
diff --git a/Windows/Forms/Tile/TTilePanel.cs b/Windows/Forms/Tile/TTilePanel.cs
deleted file mode 100644
index 88ad239..0000000
--- a/Windows/Forms/Tile/TTilePanel.cs
+++ /dev/null
@@ -1,429 +0,0 @@
-using AppLauncher.Models;
-using RyzStudio.Windows.Forms;
-using System;
-using System.ComponentModel;
-using System.Diagnostics;
-using System.Drawing;
-using System.IO;
-using System.Windows.Forms;
-
-namespace AppLauncher.Windows.Forms
-{
-    public partial class TTilePanel : TUserControl
-    {
-        protected bool isDragging = false;
-        protected Point startPosition = new Point();
-
-        protected ContextMenuStrip groupContextMenu = null;
-        protected TileModel modelInfo = new TileModel();
-
-        public TTilePanel() : base()
-        {
-            InitializeComponent();
-
-            this.BackColor = Color.FromArgb(250, 250, 250);
-            this.ContextMenuStrip = contextMenuStrip1;
-            this.DoubleBuffered = true;
-            this.AllowDrop = true;
-
-            label1.ForeColor = Color.FromArgb(99, 105, 119);
-            label1.Font = new Font(this.Font.FontFamily, 8.25F);
-
-            this.MouseDown += panel_MouseDown;
-            this.MouseUp += panel_MouseUp;
-            this.MouseMove += panel_MouseMove;
-            pictureBox1.MouseDown += panel_MouseDown;
-            pictureBox1.MouseUp += panel_MouseUp;
-            pictureBox1.MouseMove += panel_MouseMove;
-            label1.MouseDown += panel_MouseDown;
-            label1.MouseUp += panel_MouseUp;
-            label1.MouseMove += panel_MouseMove;
-        }
-
-        protected override void OnPaint(PaintEventArgs e)
-        {
-            base.OnPaint(e);
-
-            Graphics g = e.Graphics;
-
-            g.DrawRectangle(new Pen(Color.FromArgb(204, 206, 218), 1), new Rectangle(this.DisplayRectangle.X, this.DisplayRectangle.Y, (this.DisplayRectangle.Width - 1), (this.DisplayRectangle.Height - 1)));
-
-        }
-
-        [Category("Appearance"), Browsable(true)]
-        public string Title { get => label1.Text; protected set => label1.Text = value; }
-
-        [Category("Appearance"), Browsable(true)]
-        public Image Image { get => pictureBox1.BackgroundImage; protected set => pictureBox1.BackgroundImage = value; }
-
-        [Browsable(false)]
-        public TileModel ModelInfo => modelInfo;
-
-        public TTilePanelLayout PanelContainer
-        {
-            get
-            {
-                if (this.Parent == null)
-                {
-                    return null;
-                }
-
-                if (this.Parent.GetType() != typeof(TTilePanelLayout))
-                {
-                    return null;
-                }
-
-                return (TTilePanelLayout)this.Parent;
-            }
-        }
-
-        protected override void OnDragDrop(DragEventArgs e)
-        {
-            string[] fileList = e.Data.GetData(DataFormats.FileDrop) as string[];
-
-            if (this.ModelInfo.IsGroup)
-            {
-                this.DropFileList(fileList);
-
-                invalidateGroupMenu(this.ModelInfo);
-            }
-            else
-            {
-                if (this.PanelContainer != null)
-                {
-                    this.PanelContainer.DropFileList(fileList);
-                }
-            }
-        }
-
-        protected override void OnDragOver(DragEventArgs e)
-        {
-            base.OnDragDrop(e);
-
-            e.Effect = (e.Data.GetDataPresent(DataFormats.FileDrop)) ? DragDropEffects.Link : DragDropEffects.None;
-        }
-
-        public void DropFileList(string[] fileList)
-        {
-            if (fileList == null)
-            {
-                return;
-            }
-
-            if (fileList.Length <= 0)
-            {
-                return;
-            }
-
-            if (string.IsNullOrWhiteSpace(fileList[0]))
-            {
-                return;
-            }
-
-            TileModel model = new TileModel()
-            {
-                ProcessFilename = fileList[0],
-                Title = Path.GetFileName(fileList[0])
-            };
-
-            // exe
-            if (Path.GetExtension(fileList[0]).Equals(".exe", StringComparison.CurrentCultureIgnoreCase))
-            {
-                if (File.Exists(fileList[0]))
-                {
-                    try
-                    {
-                        FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(fileList[0]);
-                        if (fvi != null)
-                        {
-                            model.Title = fvi.ProductName;
-                        }
-                    }
-                    catch
-                    {
-                        // do nothing
-                    }
-                }
-
-                if (string.IsNullOrWhiteSpace(model.Title))
-                {
-                    model.Title = Path.GetFileNameWithoutExtension(fileList[0]);
-                }
-            }
-
-            this.ModelInfo.Items.Add(model);
-        }
-
-        public void LoadInfo(TileModel model)
-        {
-            this.modelInfo = model;
-
-            this.Image = null;
-            this.Title = model.Title;
-
-            if (this.modelInfo.IsGroup)
-            {
-                this.Image = Properties.Resources.folder_32;
-
-                invalidateGroupMenu(this.modelInfo);
-            }
-            else
-            {
-                this.Image = getIcon(model);
-            }
-
-            toolTip1.SetToolTip(this, this.Title);
-            toolTip1.SetToolTip(pictureBox1, this.Title);
-            toolTip1.SetToolTip(label1, this.Title);
-        }
-
-        private void panel_MouseDown(object sender, MouseEventArgs e)
-        {
-            TTilePanelLayout container = this.PanelContainer;
-            if (container == null)
-            {
-                return;
-            }
-
-            this.BringToFront();
-
-            if (((e.Button == MouseButtons.Left) && (Control.ModifierKeys == Keys.Control)) || (e.Button == MouseButtons.Right))
-            {
-                isDragging = true;
-                startPosition = e.Location;
-            }
-        }
-
-        private void panel_MouseUp(object sender, MouseEventArgs e)
-        {
-            isDragging = false;
-        }
-
-        private void panel_MouseMove(object sender, MouseEventArgs e)
-        {
-            if (isDragging)
-            {
-                TTilePanelLayout layoutPanel = this.PanelContainer;
-                if (layoutPanel == null)
-                {
-                    return;
-                }
-
-                int x = (this.Location.X + (e.Location.X - startPosition.X));
-                int y = (this.Location.Y + (e.Location.Y - startPosition.Y));
-
-                layoutPanel.MoveTile(this, x, y);
-            }
-        }
-
-        private void panel_MouseClick(object sender, MouseEventArgs e)
-        {
-            if (Control.ModifierKeys == Keys.Control) return;
-            if (this.ModelInfo == null) return;
-
-            if (e.Button == MouseButtons.Left)
-            {
-                if (this.ModelInfo.IsGroup)
-                {
-                    if (groupContextMenu != null)
-                    {
-                        invalidateGroupMenuSize();
-
-                        groupContextMenu.Show(this, e.Location);
-                    }
-                }
-                else
-                {
-                    panel_MouseDoubleClick(sender, e);
-                }
-            }
-        }
-
-        private void panel_MouseDoubleClick(object sender, MouseEventArgs e)
-        {
-            if (Control.ModifierKeys == Keys.Control) return;
-
-            if (e.Button == MouseButtons.Left)
-            {
-                execute(this.ModelInfo);
-            }
-        }
-
-        private void editToolStripMenuItem_Click(object sender, EventArgs e)
-        {
-            if (this.ModelInfo.IsGroup)
-            {
-                EditListTileForm.ShowDialog(this);
-            }
-            else
-            {
-                EditTileForm.ShowDialog(this);
-            }
-        }
-
-        private void removeToolStripMenuItem_Click(object sender, EventArgs e)
-        {
-            if (this.PanelContainer == null)
-            {
-                return;
-            }
-
-            this.PanelContainer.Remove(this);
-        }
-
-        protected void execute(TileModel model)
-        {
-            if (model == null)
-            {
-                return;
-            }
-
-            if (model.IsGroup)
-            {
-                return;
-            }
-
-            if (string.IsNullOrWhiteSpace(model.CleanProcessFilename))
-            {
-                return;
-            }
-
-            if (!File.Exists(model.CleanProcessFilename))
-            {
-                return;
-            }
-
-            ProcessStartInfo p = new ProcessStartInfo();
-            p.FileName = model.CleanProcessFilename;
-            p.WindowStyle = model.ProcessWindowStyle;
-            if (!string.IsNullOrWhiteSpace(model.CleanProcessArgument)) p.Arguments = model.CleanProcessArgument;
-            if (!string.IsNullOrWhiteSpace(model.CleanProcessWorkingDirectory)) p.WorkingDirectory = model.CleanProcessWorkingDirectory;
-            if (model.ProcessAsAdmin) p.Verb = "runas";
-
-            MainForm parentForm = findMainForm();
-            if (parentForm != null)
-            {
-                if (parentForm.CurrentSession != null)
-                {
-                    if (parentForm.CurrentSession.HideOnClick)
-                    {
-                        parentForm.Visible = false;
-                    }
-                }
-            }
-
-            try
-            {
-                Process.Start(p);
-            }
-            catch (Exception exc)
-            {
-                MessageBox.Show(exc.Message);
-            }
-        }
-
-        protected Image getIcon(TileModel model)
-        {
-            if (!File.Exists(model.CleanProcessFilename))
-            {
-                return null;
-            }
-
-            try
-            {
-                return Icon.ExtractAssociatedIcon(model.CleanProcessFilename)?.ToBitmap();
-            }
-            catch
-            {
-                // do nothing
-            }
-
-            return null;
-        }
-
-        protected void invalidateGroupMenu(TileModel model)
-        {
-            if (groupContextMenu == null)
-            {
-                groupContextMenu = new ContextMenuStrip();
-            }
-
-            groupContextMenu.Items.Clear();
-
-            if (model.Items == null)
-            {
-                return;
-            }
-
-            foreach (TileModel item in model.Items)
-            {
-                ToolStripItem toolItem = groupContextMenu.Items.Add(item.Title);
-                toolItem.Image = getIcon(item);
-                toolItem.Tag = item;
-                toolItem.Click += toolItem_Click;
-            }
-        }
-
-        protected void invalidateGroupMenuSize()
-        {
-            if (this.PanelContainer != null)
-            {
-                if (this.PanelContainer.MainForm != null)
-                {
-                    if (this.PanelContainer.MainForm.CurrentSession != null)
-                    {
-                        if (this.PanelContainer.MainForm.CurrentSession.EnableBigIconInFolder)
-                        {
-                            groupContextMenu.ImageScalingSize = new Size(24, 24);
-                            return;
-                        }
-                    }
-                }
-            }
-
-            groupContextMenu.ImageScalingSize = new Size(16, 16);
-        }
-
-        protected MainForm findMainForm()
-        {
-            Control item = this;
-
-            while (true)
-            {
-                item = item.Parent;
-                if (item == null)
-                {
-                    return null;
-                }
-
-                if (item.GetType() == typeof(MainForm))
-                {
-                    return (item as MainForm);
-                }
-            }
-        }
-
-        private void toolItem_Click(object sender, EventArgs e)
-        {
-            if (sender.GetType() != typeof(ToolStripMenuItem))
-            {
-                return;
-            }
-
-            ToolStripMenuItem item = (sender as ToolStripMenuItem);
-            if (item.Tag == null)
-            {
-                return;
-            }
-
-            if (item.Tag.GetType() != typeof(TileModel))
-            {
-                return;
-            }
-
-            TileModel model = (item.Tag as TileModel);
-            execute(model);
-        }
-
-    }
-}
\ No newline at end of file
diff --git a/Windows/Forms/Tile/TTilePanel.resx b/Windows/Forms/Tile/TTilePanel.resx
deleted file mode 100644
index 955aa4f..0000000
--- a/Windows/Forms/Tile/TTilePanel.resx
+++ /dev/null
@@ -1,126 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!-- 
-    Microsoft ResX Schema 
-    
-    Version 2.0
-    
-    The primary goals of this format is to allow a simple XML format 
-    that is mostly human readable. The generation and parsing of the 
-    various data types are done through the TypeConverter classes 
-    associated with the data types.
-    
-    Example:
-    
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-                
-    There are any number of "resheader" rows that contain simple 
-    name/value pairs.
-    
-    Each data row contains a name, and value. The row also contains a 
-    type or mimetype. Type corresponds to a .NET class that support 
-    text/value conversion through the TypeConverter architecture. 
-    Classes that don't support this are serialized and stored with the 
-    mimetype set.
-    
-    The mimetype is used for serialized objects, and tells the 
-    ResXResourceReader how to depersist the object. This is currently not 
-    extensible. For a given mimetype the value must be set accordingly:
-    
-    Note - application/x-microsoft.net.object.binary.base64 is the format 
-    that the ResXResourceWriter will generate, however the reader can 
-    read any of the formats listed below.
-    
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-    
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array 
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <metadata name="contextMenuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>17, 17</value>
-  </metadata>
-  <metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>172, 17</value>
-  </metadata>
-</root>
\ No newline at end of file
diff --git a/Windows/Forms/Tile/TTilePanelLayout.Designer.cs b/Windows/Forms/Tile/TTilePanelLayout.Designer.cs
deleted file mode 100644
index 7f5696d..0000000
--- a/Windows/Forms/Tile/TTilePanelLayout.Designer.cs
+++ /dev/null
@@ -1,222 +0,0 @@
-namespace AppLauncher.Windows.Forms
-{
-    partial class TTilePanelLayout
-    {
-        /// <summary> 
-        /// Required designer variable.
-        /// </summary>
-        private System.ComponentModel.IContainer components = null;
-
-        /// <summary> 
-        /// Clean up any resources being used.
-        /// </summary>
-        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-        protected override void Dispose(bool disposing)
-        {
-            if (disposing && (components != null))
-            {
-                components.Dispose();
-            }
-            base.Dispose(disposing);
-        }
-
-        #region Component Designer generated code
-
-        /// <summary> 
-        /// Required method for Designer support - do not modify 
-        /// the contents of this method with the code editor.
-        /// </summary>
-        private void InitializeComponent()
-        {
-            this.components = new System.ComponentModel.Container();
-            this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components);
-            this.addToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
-            this.addListToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
-            this.contextMenuStrip2 = new System.Windows.Forms.ContextMenuStrip(this.components);
-            this.toolStripMenuItem2 = new System.Windows.Forms.ToolStripMenuItem();
-            this.toolStripMenuItem5 = new System.Windows.Forms.ToolStripMenuItem();
-            this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
-            this.removeRowToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
-            this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
-            this.toolStripMenuItem4 = new System.Windows.Forms.ToolStripMenuItem();
-            this.topToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
-            this.upToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
-            this.downToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
-            this.bottomToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
-            this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
-            this.toolStripMenuItem3 = new System.Windows.Forms.ToolStripMenuItem();
-            this.label1 = new System.Windows.Forms.Label();
-            this.contextMenuStrip1.SuspendLayout();
-            this.contextMenuStrip2.SuspendLayout();
-            this.SuspendLayout();
-            // 
-            // contextMenuStrip1
-            // 
-            this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
-            this.addToolStripMenuItem,
-            this.addListToolStripMenuItem});
-            this.contextMenuStrip1.Name = "contextMenuStrip1";
-            this.contextMenuStrip1.Size = new System.Drawing.Size(181, 70);
-            // 
-            // addToolStripMenuItem
-            // 
-            this.addToolStripMenuItem.Name = "addToolStripMenuItem";
-            this.addToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
-            this.addToolStripMenuItem.Text = "&Add Tile";
-            this.addToolStripMenuItem.Click += new System.EventHandler(this.addTileMenuItem_Click);
-            // 
-            // addListToolStripMenuItem
-            // 
-            this.addListToolStripMenuItem.Name = "addListToolStripMenuItem";
-            this.addListToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
-            this.addListToolStripMenuItem.Text = "Add &Folder";
-            this.addListToolStripMenuItem.Click += new System.EventHandler(this.addListTileMenuItem_Click);
-            // 
-            // contextMenuStrip2
-            // 
-            this.contextMenuStrip2.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
-            this.toolStripMenuItem2,
-            this.toolStripMenuItem5,
-            this.toolStripMenuItem1,
-            this.removeRowToolStripMenuItem,
-            this.toolStripSeparator2,
-            this.toolStripMenuItem4,
-            this.toolStripSeparator1,
-            this.toolStripMenuItem3});
-            this.contextMenuStrip2.Name = "contextMenuStrip1";
-            this.contextMenuStrip2.Size = new System.Drawing.Size(144, 148);
-            // 
-            // toolStripMenuItem2
-            // 
-            this.toolStripMenuItem2.Name = "toolStripMenuItem2";
-            this.toolStripMenuItem2.Size = new System.Drawing.Size(143, 22);
-            this.toolStripMenuItem2.Text = "&Add Group";
-            this.toolStripMenuItem2.Click += new System.EventHandler(this.addGroupMenuItem_Click);
-            // 
-            // toolStripMenuItem5
-            // 
-            this.toolStripMenuItem5.Name = "toolStripMenuItem5";
-            this.toolStripMenuItem5.Size = new System.Drawing.Size(143, 22);
-            this.toolStripMenuItem5.Text = "Add &Row";
-            this.toolStripMenuItem5.Click += new System.EventHandler(this.addRowMenuItem_Click);
-            // 
-            // toolStripMenuItem1
-            // 
-            this.toolStripMenuItem1.Name = "toolStripMenuItem1";
-            this.toolStripMenuItem1.Size = new System.Drawing.Size(143, 22);
-            this.toolStripMenuItem1.Text = "&Edit";
-            this.toolStripMenuItem1.Click += new System.EventHandler(this.editGroupMenuItem_Click);
-            // 
-            // removeRowToolStripMenuItem
-            // 
-            this.removeRowToolStripMenuItem.Name = "removeRowToolStripMenuItem";
-            this.removeRowToolStripMenuItem.Size = new System.Drawing.Size(143, 22);
-            this.removeRowToolStripMenuItem.Text = "Remo&ve Row";
-            this.removeRowToolStripMenuItem.Click += new System.EventHandler(this.removeRowToolStripMenuItem_Click);
-            // 
-            // toolStripSeparator2
-            // 
-            this.toolStripSeparator2.Name = "toolStripSeparator2";
-            this.toolStripSeparator2.Size = new System.Drawing.Size(140, 6);
-            // 
-            // toolStripMenuItem4
-            // 
-            this.toolStripMenuItem4.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
-            this.topToolStripMenuItem,
-            this.upToolStripMenuItem,
-            this.downToolStripMenuItem,
-            this.bottomToolStripMenuItem});
-            this.toolStripMenuItem4.Name = "toolStripMenuItem4";
-            this.toolStripMenuItem4.Size = new System.Drawing.Size(143, 22);
-            this.toolStripMenuItem4.Text = "&Move";
-            // 
-            // topToolStripMenuItem
-            // 
-            this.topToolStripMenuItem.Name = "topToolStripMenuItem";
-            this.topToolStripMenuItem.Size = new System.Drawing.Size(114, 22);
-            this.topToolStripMenuItem.Text = "&Top";
-            this.topToolStripMenuItem.Click += new System.EventHandler(this.moveTopMenuItem_Click);
-            // 
-            // upToolStripMenuItem
-            // 
-            this.upToolStripMenuItem.Name = "upToolStripMenuItem";
-            this.upToolStripMenuItem.Size = new System.Drawing.Size(114, 22);
-            this.upToolStripMenuItem.Text = "&Up";
-            this.upToolStripMenuItem.Click += new System.EventHandler(this.moveUpMenuItem_Click);
-            // 
-            // downToolStripMenuItem
-            // 
-            this.downToolStripMenuItem.Name = "downToolStripMenuItem";
-            this.downToolStripMenuItem.Size = new System.Drawing.Size(114, 22);
-            this.downToolStripMenuItem.Text = "&Down";
-            this.downToolStripMenuItem.Click += new System.EventHandler(this.moveDownMenuItem_Click);
-            // 
-            // bottomToolStripMenuItem
-            // 
-            this.bottomToolStripMenuItem.Name = "bottomToolStripMenuItem";
-            this.bottomToolStripMenuItem.Size = new System.Drawing.Size(114, 22);
-            this.bottomToolStripMenuItem.Text = "&Bottom";
-            this.bottomToolStripMenuItem.Click += new System.EventHandler(this.moveBottomMenuItem_Click);
-            // 
-            // toolStripSeparator1
-            // 
-            this.toolStripSeparator1.Name = "toolStripSeparator1";
-            this.toolStripSeparator1.Size = new System.Drawing.Size(140, 6);
-            // 
-            // toolStripMenuItem3
-            // 
-            this.toolStripMenuItem3.Name = "toolStripMenuItem3";
-            this.toolStripMenuItem3.Size = new System.Drawing.Size(143, 22);
-            this.toolStripMenuItem3.Text = "&Remove";
-            this.toolStripMenuItem3.Click += new System.EventHandler(this.removeGroupMenuItem3_Click);
-            // 
-            // label1
-            // 
-            this.label1.AutoSize = true;
-            this.label1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(99)))), ((int)(((byte)(105)))), ((int)(((byte)(119)))));
-            this.label1.Image = global::AppLauncher.Properties.Resources.toggle_left_ea_16;
-            this.label1.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
-            this.label1.Location = new System.Drawing.Point(227, 72);
-            this.label1.Margin = new System.Windows.Forms.Padding(0);
-            this.label1.Name = "label1";
-            this.label1.Size = new System.Drawing.Size(0, 13);
-            this.label1.TabIndex = 2;
-            this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
-            this.label1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.label1_MouseClick);
-            this.label1.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.label1_MouseClick);
-            // 
-            // TTilePanelLayout
-            // 
-            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-            this.BackColor = System.Drawing.Color.Transparent;
-            this.Controls.Add(this.label1);
-            this.Name = "TTilePanelLayout";
-            this.Size = new System.Drawing.Size(370, 150);
-            this.contextMenuStrip1.ResumeLayout(false);
-            this.contextMenuStrip2.ResumeLayout(false);
-            this.ResumeLayout(false);
-            this.PerformLayout();
-
-        }
-
-        #endregion
-        private System.Windows.Forms.ContextMenuStrip contextMenuStrip1;
-        private System.Windows.Forms.ToolStripMenuItem addToolStripMenuItem;
-        private System.Windows.Forms.ToolStripMenuItem addListToolStripMenuItem;
-        private System.Windows.Forms.ContextMenuStrip contextMenuStrip2;
-        private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem2;
-        private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem5;
-        private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem1;
-        private System.Windows.Forms.ToolStripSeparator toolStripSeparator2;
-        private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem4;
-        private System.Windows.Forms.ToolStripMenuItem topToolStripMenuItem;
-        private System.Windows.Forms.ToolStripMenuItem upToolStripMenuItem;
-        private System.Windows.Forms.ToolStripMenuItem downToolStripMenuItem;
-        private System.Windows.Forms.ToolStripMenuItem bottomToolStripMenuItem;
-        private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
-        private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem3;
-        private System.Windows.Forms.ToolStripMenuItem removeRowToolStripMenuItem;
-        private System.Windows.Forms.Label label1;
-    }
-}
diff --git a/Windows/Forms/Tile/TTilePanelLayout.cs b/Windows/Forms/Tile/TTilePanelLayout.cs
deleted file mode 100644
index e0a0fb6..0000000
--- a/Windows/Forms/Tile/TTilePanelLayout.cs
+++ /dev/null
@@ -1,855 +0,0 @@
-using AppLauncher.Models;
-using RyzStudio.Windows.Forms;
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Diagnostics;
-using System.Drawing;
-using System.IO;
-using System.Linq;
-using System.Threading;
-using System.Threading.Tasks;
-using System.Windows.Forms;
-
-namespace AppLauncher.Windows.Forms
-{
-    public partial class TTilePanelLayout : TUserControl
-    {
-        public class Item
-        {
-            public TTilePanel Tile { get; set; }
-            public Point Coord { get; set; } = new Point(0, 0);
-        }
-
-        protected readonly int tileSize = 70;
-        protected readonly int margin = 3;
-        protected readonly int labelHeight = 20;
-        protected readonly int collapseIncrement = 6;
-        protected readonly int expandIncrement = 8;
-
-        protected TileGroupModel groupModel = null;
-        protected List<Item> items = new List<Item>();
-
-        protected int collapseHeight = 0;
-        protected int expandedHeight = 0;
-
-        protected bool isAnimating = false;
-        protected bool isChecked = true;
-        protected Point lastMousePosition = new Point();
-        protected Point gridSize = new Point();
-
-        public TTilePanelLayout(TileGroupModel model) : base()
-        {
-            InitializeComponent();
-
-            this.AllowDrop = true;
-            this.BackColor = Color.Transparent;
-
-            this.LoadModel(model);
-
-            label1.Location = new Point(0, 4);
-            label1.Margin = new Padding(0);
-            label1.Padding = new Padding(0);
-        }
-
-        protected override void OnDragDrop(DragEventArgs e)
-        {
-            string[] fileList = e.Data.GetData(DataFormats.FileDrop) as string[];
-
-            this.DropFileList(fileList);
-        }
-
-        protected override void OnDragOver(DragEventArgs e)
-        {
-            if (e.Data.GetDataPresent(DataFormats.FileDrop))
-            {
-                e.Effect = DragDropEffects.Link;
-            }
-            else
-            {
-                e.Effect = DragDropEffects.None;
-            }
-        }
-
-        protected override void OnLoad(EventArgs e)
-        {
-            base.OnLoad(e);
-
-            this.Margin = new Padding(0);
-            this.Padding = new Padding(0, 0, 0, 10);
-            //this.MaximumSize = new Size(panel1.Width, ExpandedHeight);
-            //this.MinimumSize = new Size(panel1.Width, label1.Height);
-            //this.Size = this.MaximumSize;
-            //this.Size = new Size(panel1.Width, this.ExpandedHeight);
-        }
-
-        protected override async void OnResize(EventArgs e)
-        {
-            base.OnResize(e);
-
-            await this.InvalidateContainer();
-        }
-
-        protected override void OnMouseClick(MouseEventArgs e)
-        {
-            base.OnMouseClick(e);
-
-            lastMousePosition = e.Location;
-
-            bool isLabel = ((e.Location.X >= 0) && (e.Location.X <= this.Width) && (e.Location.Y >= 0) && (e.Location.Y <= 20));
-
-            if (e.Button == MouseButtons.Left)
-            {
-                // do nothing
-            }
-            else if (e.Button == MouseButtons.Right)
-            {
-                if (isLabel)
-                {
-                    contextMenuStrip2.Show(this, e.Location);
-                }
-                else
-                {
-                    contextMenuStrip1.Show(this, e.Location);
-                }
-            }
-        }
-
-        protected override void OnMouseDoubleClick(MouseEventArgs e) => base.OnMouseClick(e);
-
-        public Point GridSize
-        {
-            get
-            {
-                //int w = (int)Math.Floor(decimal.Divide(this.Width, this.TileSize));
-                //int h = (int)Math.Floor(decimal.Divide(this.Height - labelHeight, this.TileSize));
-
-                //return new Point(w, h);
-                return gridSize;
-            }
-        }
-
-        public bool EnableAnimation
-        {
-            get
-            {
-                MainForm mainForm = this.MainForm;
-                if (mainForm == null)
-                {
-                    return false;
-                }
-
-                if (mainForm.CurrentSession == null)
-                {
-                    return false;
-                }
-
-                return mainForm.CurrentSession.EnableAnimation;
-            }
-        }
-
-        public int CollapseHeight => labelHeight + collapseHeight;
-
-        public int ExpandedHeight => expandedHeight + this.Padding.Bottom;
-
-        public void DropFileList(string[] fileList)
-        {
-            if (fileList == null)
-            {
-                return;
-            }
-
-            if (fileList.Length <= 0)
-            {
-                return;
-            }
-
-            if (string.IsNullOrWhiteSpace(fileList[0]))
-            {
-                return;
-            }
-
-            TileModel model = new TileModel()
-            {
-                ProcessFilename = fileList[0],
-                Title = Path.GetFileName(fileList[0])
-            };
-
-            // exe
-            if (Path.GetExtension(fileList[0]).Equals(".exe", StringComparison.CurrentCultureIgnoreCase))
-            {
-                if (File.Exists(fileList[0]))
-                {
-                    try
-                    {
-                        FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(fileList[0]);
-                        if (fvi != null)
-                        {
-                            model.Title = fvi.ProductName;
-                        }
-                    }
-                    catch
-                    {
-                        // do nothing
-                    }
-                }
-
-                if (string.IsNullOrWhiteSpace(model.Title))
-                {
-                    model.Title = Path.GetFileNameWithoutExtension(fileList[0]);
-                }
-            }
-
-            this.AddTile(model);
-        }
-
-        public TileGroupModel Model
-        {
-            get
-            {
-                TileGroupModel rs = new TileGroupModel()
-                {
-                    Title = groupModel.Title,
-                    GridSize = new Size(this.GridSize.X, this.GridSize.Y),
-                    IsExpanded = isChecked,
-                    IsExclusive = groupModel.IsExclusive,
-                    Items = this.Tiles
-                };
-
-                return rs;
-            }
-        }
-
-        public FlowLayoutPanel FlowLayoutPanel
-        {
-            get
-            {
-                Control parentControl = this.Parent;
-                while (true)
-                {
-                    if (parentControl == null)
-                    {
-                        return null;
-                    }
-
-                    if (parentControl.GetType() == typeof(FlowLayoutPanel))
-                    {
-                        return parentControl as FlowLayoutPanel;
-                    }
-
-                    parentControl = parentControl.Parent;
-                }
-            }
-        }
-
-        public MainForm MainForm
-        {
-            get
-            {
-                Control parentControl = this.FlowLayoutPanel;
-                while (true)
-                {
-                    if (parentControl == null)
-                    {
-                        return null;
-                    }
-
-                    if (parentControl.GetType() == typeof(MainForm))
-                    {
-                        return parentControl as MainForm;
-                    }
-
-                    parentControl = parentControl.Parent;
-                }
-            }
-        }
-
-        public List<TileModel> Tiles
-        {
-            get
-            {
-                List<TileModel> rs = new List<TileModel>();
-                foreach (Item item in items)
-                {
-                    TileModel model = item.Tile.ModelInfo;
-                    model.Position = item.Coord;
-
-                    rs.Add(model);
-                }
-
-                return rs;
-            }
-        }
-
-        public int TileSize => (tileSize + margin);
-
-        public void AddTile(TileModel tile)
-        {
-            Point gridSize = this.GridSize;
-
-            if (items.Count >= (gridSize.X * gridSize.Y))
-            {
-                this.SetGridSize(gridSize.X, (gridSize.Y + 1));
-            }
-
-            Point? newCoord = tile.Position;
-            if ((newCoord == null) || hasTile(tile.Position))
-            {
-                newCoord = findLastFreeCoord();
-            }
-
-            if (newCoord == null)
-            {
-                return;
-            }
-
-            tile.Position = newCoord.Value;
-
-            TTilePanel panel = new TTilePanel();
-            panel.LoadInfo(tile);
-            panel.Location = convertCoordToLocation(tile.Position);
-
-            items.Add(new Item()
-            {
-                Tile = panel,
-                Coord = tile.Position
-            });
-
-            this.Controls.Add(panel);
-        }
-
-        public void Clear()
-        {
-            this.Controls.Clear();
-        }
-
-        public async Task Collapse()
-        {
-            await Task.Run(() =>
-            {
-                if (isAnimating) return;
-
-                isAnimating = true;
-                isChecked = false;
-
-                if (this.EnableAnimation)
-                {
-                    while (this.Height > this.CollapseHeight)
-                    {
-                        ThreadControl.SetHeight(this, (this.Height - collapseIncrement));
-
-                        Thread.Sleep(10);
-                    }
-                }
-
-                ThreadControl.SetHeight(this, this.CollapseHeight);
-
-                isAnimating = false;
-
-                this.Invalidate(this.DisplayRectangle, false);
-            });
-        }
-
-        public async Task Expand()
-        {
-            await Task.Run(() =>
-            {
-                if (isAnimating) return;
-
-                isAnimating = true;
-                isChecked = true;
-
-                if (this.EnableAnimation)
-                {
-                    while (this.Height < this.ExpandedHeight)
-                    {
-                        ThreadControl.SetHeight(this, (this.Height + expandIncrement));
-                        Thread.Sleep(10);
-                    }
-                }
-
-                ThreadControl.SetHeight(this, this.ExpandedHeight);
-
-                isAnimating = false;
-
-                this.Invalidate(this.DisplayRectangle, false);
-            });
-        }
-
-        public Point GetTilePosition(int posX, int posY)
-        {
-            int x = (int)Math.Round(decimal.Divide(posX, this.TileSize));
-            int y = (int)Math.Round(decimal.Divide((posY - labelHeight), this.TileSize));
-
-            if (x < 0) x = 0;
-            if (y < 0) y = 0;
-
-            return new Point((x * this.TileSize), ((y * this.TileSize) + labelHeight));
-        }
-
-        public async Task InvalidateContainer()
-        {
-            if (isAnimating)
-            {
-                return;
-            }
-
-            if (isChecked)
-            {
-                await this.Expand();
-            }
-            else
-            {
-                await this.Collapse();
-            }
-        }
-
-        public void AddGroup()
-        {
-            if (this.FlowLayoutPanel == null)
-            {
-                return;
-            }
-
-            this.FlowLayoutPanel.Controls.Add(new TTilePanelLayout(new TileGroupModel()
-            {
-                Title = "New Group",
-                GridSize = new Size(8, 1)
-            }));
-        }
-
-        public void AddRow() => this.SetGridSize(gridSize.X, (gridSize.Y + 1));
-
-        public void EditGroup() => EditGroupForm.ShowDialog(this);
-
-        public void LoadModel(TileGroupModel model)
-        {
-            groupModel = model;
-
-            isChecked = groupModel.IsExpanded;
-
-            label1.Text = "        " + groupModel?.Title;
-            label1.Image = (isChecked ? Properties.Resources.toggle_right_ea_16 : Properties.Resources.toggle_left_ea_16);
-
-            this.SetGridSize(groupModel.GridSize.Width, groupModel.GridSize.Height);
-            this.LoadTiles(model.Items);
-            this.SetGridSize(groupModel.GridSize.Width, groupModel.GridSize.Height);
-
-            this.Invalidate();
-        }
-
-        public void UpdateModel(TileGroupModel model)
-        {
-            groupModel = model;
-            isChecked = groupModel.IsExpanded;
-
-            label1.Text = "        " + groupModel?.Title;
-
-            this.Invalidate();
-        }
-
-        public void LoadTiles(List<TileModel> tiles)
-        {
-            if (tiles == null)
-            {
-                return;
-            }
-
-            if (tiles.Count() <= 0)
-            {
-                return;
-            }
-
-            foreach (TileModel item in tiles)
-            {
-                // resolve final grid position
-                Point? confirmedPosition = resolveCoord(item.Position);
-                if (confirmedPosition == null)
-                {
-                    continue;
-                }
-
-                // place control
-                TTilePanel panel = new TTilePanel();
-                panel.LoadInfo(item);
-                panel.Location = convertCoordToLocation(confirmedPosition.Value);
-
-                items.Add(new Item()
-                {
-                    Tile = panel,
-                    Coord = confirmedPosition.Value
-                });
-
-                this.Controls.Add(panel);
-            }
-        }
-
-        public void MoveTile(TTilePanel panel, int posX, int posY)
-        {
-            Item item = items.Where(x => x.Tile.Equals(panel)).FirstOrDefault();
-            if (item == null)
-            {
-                return;
-            }
-
-            Point newPosition = convertLocationToCoord_Nearest(posX, posY);
-            if (!isTileInBounds(newPosition))
-            {
-                return;
-            }
-
-            if (hasTile(newPosition))
-            {
-                Item swapItem = items.Where(x => x.Coord.Equals(newPosition)).FirstOrDefault();
-                if (swapItem != null)
-                {
-                    swapItem.Coord = item.Coord;
-                    swapItem.Tile.Location = convertCoordToLocation(item.Coord);
-                }
-
-                item.Coord = newPosition;
-                panel.Location = convertCoordToLocation(newPosition);
-            }
-            else
-            {
-                item.Coord = newPosition;
-                panel.Location = convertCoordToLocation(newPosition);
-            }
-        }
-
-        public void MoveTop()
-        {
-            if (this.FlowLayoutPanel == null)
-            {
-                return;
-            }
-
-            this.FlowLayoutPanel.Controls.SetChildIndex(this, 0);
-        }
-
-        public void MoveUp()
-        {
-            if (this.FlowLayoutPanel == null)
-            {
-                return;
-            }
-
-            int pos = this.FlowLayoutPanel.Controls.GetChildIndex(this);
-            if (pos <= 0)
-            {
-                return;
-            }
-
-            this.FlowLayoutPanel.Controls.SetChildIndex(this, (pos - 1));
-        }
-
-        public void MoveDown()
-        {
-            if (this.FlowLayoutPanel == null)
-            {
-                return;
-            }
-
-            int pos = this.FlowLayoutPanel.Controls.GetChildIndex(this);
-            if (pos >= (this.FlowLayoutPanel.Controls.Count - 1))
-            {
-                return;
-            }
-
-            this.FlowLayoutPanel.Controls.SetChildIndex(this, (pos + 1));
-        }
-
-        public void MoveBottom()
-        {
-            if (this.FlowLayoutPanel == null)
-            {
-                return;
-            }
-
-            this.FlowLayoutPanel.Controls.SetChildIndex(this, (this.FlowLayoutPanel.Controls.Count - 1));
-        }
-
-        public void Remove()
-        {
-            if (this.FlowLayoutPanel == null)
-            {
-                return;
-            }
-
-            this.FlowLayoutPanel.Controls.Remove(this);
-        }
-
-        public void Remove(TTilePanel panel)
-        {
-            Item m = items.Where(x => x.Tile.Equals(panel)).FirstOrDefault();
-            if (m != null)
-            {
-                items.Remove(m);
-            }
-
-            this.Controls.Remove(panel);
-        }
-
-        public void SetGridSize(int width, int height)
-        {
-            gridSize = new Point(width, height);
-
-            groupModel.GridSize.Height = height;
-
-            expandedHeight = (this.TileSize * height) + labelHeight;
-
-            int w = (this.TileSize * gridSize.X);
-
-            this.Size = new Size(w, (isChecked ? this.ExpandedHeight : this.CollapseHeight));
-        }
-
-        protected Point convertCoordToLocation(Point position) => new Point((position.X * this.TileSize), ((position.Y * this.TileSize) + labelHeight));
-
-        protected Point convertLocationToCoord(int posX, int posY)
-        {
-            int x = (int)Math.Ceiling(decimal.Divide(posX, this.TileSize));
-            int y = (int)Math.Ceiling(decimal.Divide((posY - labelHeight), this.TileSize));
-
-            x--;
-            y--;
-
-            if (x < 0) x = 0;
-            if (y < 0) y = 0;
-
-            return new Point(x, y);
-        }
-
-        protected Point convertLocationToCoord_Nearest(int posX, int posY)
-        {
-            int x = (int)Math.Round(decimal.Divide(posX, this.TileSize));
-            int y = (int)Math.Round(decimal.Divide((posY - labelHeight), this.TileSize));
-
-            if (x < 0) x = 0;
-            if (y < 0) y = 0;
-
-            return new Point(x, y);
-        }
-
-        protected Point? findFirstFreeCoord()
-        {
-            Point gridSize = this.GridSize;
-
-            for (int y = 0; y < gridSize.Y; y++)
-            {
-                for (int x = 0; x < gridSize.X; x++)
-                {
-                    if (hasTile(new Point(x, y)))
-                    {
-                        continue;
-                    }
-
-                    return new Point(x, y);
-                }
-            }
-
-            return null;
-        }
-
-        protected Point? findLastFreeCoord()
-        {
-            Point gridSize = this.GridSize;
-
-            // none available
-            if (items.Count >= (gridSize.X * gridSize.Y))
-            {
-                return null;
-            }
-
-            if (items.Count <= 0)
-            {
-                return findFirstFreeCoord();
-            }
-
-            // only one available
-            if (items.Count >= ((gridSize.X * gridSize.Y) - 1))
-            {
-                return findFirstFreeCoord();
-            }
-
-            Point? rv = null;
-
-            for (int y = (gridSize.Y - 1); y >= 0; y--)
-            {
-                for (int x = (gridSize.X - 1); x >= 0; x--)
-                {
-                    if (hasTile(new Point(x, y)))
-                    {
-                        if (rv.HasValue)
-                        {
-                            return rv;
-                        }
-                    }
-                    else
-                    {
-                        rv = new Point(x, y);
-                    }
-                }
-            }
-
-            return null;
-        }
-
-        protected bool hasTile(Point position)
-        {
-            if (items == null)
-            {
-                return false;
-            }
-
-            if (items.Count <= 0)
-            {
-                return false;
-            }
-
-            return (items.Count(x => x.Coord.Equals(position)) > 0);
-        }
-
-        protected bool isTileInBounds(Point position)
-        {
-            Point gridSize = this.GridSize;
-
-            if (position.X >= gridSize.X)
-            {
-                return false;
-            }
-
-            if (position.Y >= gridSize.Y)
-            {
-                return false;
-            }
-
-            return true;
-        }
-
-        protected Point? resolveCoord(Point coord)
-        {
-            if (!isTileInBounds(coord))
-            {
-                return null;
-            }
-
-            if (!hasTile(coord))
-            {
-                return coord;
-            }
-
-            return resolveNextCoord(coord);
-        }
-
-        protected Point? resolveNextCoord(Point coord)
-        {
-            Point gridSize = this.GridSize;
-            Point newCoord = coord;
-
-            while (true)
-            {
-                newCoord.X++;
-
-                if (newCoord.X >= gridSize.X)
-                {
-                    newCoord.Y++;
-                    newCoord.X = 0;
-                }
-
-                if (!isTileInBounds(newCoord))
-                {
-                    return null;
-                }
-
-                if (hasTile(newCoord))
-                {
-                    continue;
-                }
-
-                return newCoord;
-            }
-        }
-
-        private void addTileMenuItem_Click(object sender, EventArgs e)
-        {
-            Point coord = convertLocationToCoord(lastMousePosition.X, lastMousePosition.Y);
-
-            AddTileForm.ShowDialog(this, coord);
-        }
-
-        private void addListTileMenuItem_Click(object sender, EventArgs e)
-        {
-            Point coord = convertLocationToCoord(lastMousePosition.X, lastMousePosition.Y);
-
-            AddListTileForm.ShowDialog(this, coord);
-        }
-
-        private void addGroupMenuItem_Click(object sender, EventArgs e) => this.AddGroup();
-
-        private void addRowMenuItem_Click(object sender, EventArgs e) => this.AddRow();
-
-        private void editGroupMenuItem_Click(object sender, EventArgs e) => this.EditGroup();
-
-        private void moveTopMenuItem_Click(object sender, EventArgs e) => this.MoveTop();
-
-        private void moveUpMenuItem_Click(object sender, EventArgs e) => this.MoveUp();
-
-        private void moveDownMenuItem_Click(object sender, EventArgs e) => this.MoveDown();
-
-        private void moveBottomMenuItem_Click(object sender, EventArgs e) => this.MoveBottom();
-
-        private void removeGroupMenuItem3_Click(object sender, EventArgs e) => this.Remove();
-
-        private void removeRowToolStripMenuItem_Click(object sender, EventArgs e)
-        {
-            bool rs = items.Exists(x => x.Coord.Y.Equals(gridSize.Y - 1));
-            if (!rs)
-            {
-                this.SetGridSize(gridSize.X, (gridSize.Y - 1));
-            }
-        }
-
-        private async void label1_MouseClick(object sender, MouseEventArgs e)
-        {
-            if (isAnimating) return;
-
-            if (e.Button == MouseButtons.Left)
-            {
-                isChecked = !isChecked;
-
-                label1.Image = (isChecked ? Properties.Resources.toggle_right_ea_16 : Properties.Resources.toggle_left_ea_16);
-
-                this.Invalidate();
-
-                await this.InvalidateContainer();
-
-                // exclusivity
-                if (isChecked)
-                {
-                    if (this.Model.IsExclusive)
-                    {
-                        if (this.FlowLayoutPanel != null)
-                        {
-                            foreach (TTilePanelLayout item in this.FlowLayoutPanel.Controls.OfType<TTilePanelLayout>())
-                            {
-                                if (item.Equals(this))
-                                {
-                                    continue;
-                                }
-
-                                await item.Collapse();
-                            }
-                        }
-                    }
-                }
-
-                label1.Image = (isChecked ? Properties.Resources.toggle_right_ea_16 : Properties.Resources.toggle_left_ea_16);
-            }
-            else if (e.Button == MouseButtons.Right)
-            {
-                contextMenuStrip2.Show(this, e.Location);
-            }
-        }
-
-    }
-}
diff --git a/Windows/Forms/Tile/TTilePanelLayout.resx b/Windows/Forms/Tile/TTilePanelLayout.resx
deleted file mode 100644
index 8baf68f..0000000
--- a/Windows/Forms/Tile/TTilePanelLayout.resx
+++ /dev/null
@@ -1,126 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!-- 
-    Microsoft ResX Schema 
-    
-    Version 2.0
-    
-    The primary goals of this format is to allow a simple XML format 
-    that is mostly human readable. The generation and parsing of the 
-    various data types are done through the TypeConverter classes 
-    associated with the data types.
-    
-    Example:
-    
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-                
-    There are any number of "resheader" rows that contain simple 
-    name/value pairs.
-    
-    Each data row contains a name, and value. The row also contains a 
-    type or mimetype. Type corresponds to a .NET class that support 
-    text/value conversion through the TypeConverter architecture. 
-    Classes that don't support this are serialized and stored with the 
-    mimetype set.
-    
-    The mimetype is used for serialized objects, and tells the 
-    ResXResourceReader how to depersist the object. This is currently not 
-    extensible. For a given mimetype the value must be set accordingly:
-    
-    Note - application/x-microsoft.net.object.binary.base64 is the format 
-    that the ResXResourceWriter will generate, however the reader can 
-    read any of the formats listed below.
-    
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-    
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array 
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <metadata name="contextMenuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>17, 17</value>
-  </metadata>
-  <metadata name="contextMenuStrip2.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>172, 17</value>
-  </metadata>
-</root>
\ No newline at end of file
diff --git a/build-release.bat b/build-release.bat
deleted file mode 100644
index 4647cd4..0000000
--- a/build-release.bat
+++ /dev/null
@@ -1,2 +0,0 @@
-"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin\MSBuild.exe" "skye.sln" /T:Build /P:Configuration=Release
-PAUSE
\ No newline at end of file
diff --git a/favicon.ico b/favicon.ico
deleted file mode 100644
index 5d60ade9d37ee6deb89e358cb4d6cac929ebef26..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 17542
zcmd5^32;<LdVUI<sA8vrl1*)SlXxLjN!eK^RgQPpyRLF<<Q!G5)NXc}87$3=gk(U#
z%;?|-8=>J00t`mB!9v(z3CtzH;00qYiAx9}aoYw7uns^H2x$<~pwS$i|Ld84>UncX
z=Ip9p{f_SbzrSA}|Is5wiBo>0y!fI*`A}u!KPk$8D~d97Xy86UQQGO*Gtc<%7yh}T
ztaw>b66iU~kNc6L{A`$_JWq9~2_=mP&mU&8nGL_Qn)J;?brz%UeOrp*4g0WRgyhLj
z7L#ra;r0+Q4YgZMy7gAGZbYWZ^p{VfBo?DSPlH)2gSdBDjrzSLk2O2h@UzD)i@{(R
zM7TeevA;KaCcAk4EZhEhF`GRpQ{aw}8)|H3z1?aa{?enCCG*WU<E>`>W*Pg(?=57#
zE*F#2t=1M+wr3YB_`f+UGxe<qa_}+NKx3@XlC1kJ+J2bwj5iwp%3{(Vma&%<e#E>U
zj|@HJy6bKyt2|Q9Ru{a-CXGsoCQCQ9{iVgMPX(_BDT^g3=~-&~f{cCF*3BVUV?Drk
zI#+X&tuI>1rdviulf_MQ<^Zj2*|eVh!~Mu&P1e0YxSIs_%#;!A=z)E)pvHXf^ZD4-
z+DmN5#&vA&)SPIt_$(&F^dBOFCE4&Q;ik3Fzdq)q8`;_Fs+ib*NP(Lz&20a!oow0M
zSqyz7cn0!T!XGyf8Ej_V@2Rd+v@>OF8oP4oyB`8=z;(o&nL0LIl_Sfjqn*2diPpDt
z!tEB=-?5Eh*Ba^vjN^VQ6urM##ZUXk$o`<Gc{5GmMvk%B-qxl<@wgq#)7u`Ayq+$#
zthn&>xR|@UJ0f|UPEj-{$9Ph)&^j9pf4F^Vao#%&-%_N@CthP`zfxjSOWiC{g*EKh
z#g2}##iVnK-dF30i>q~)`tZ~G7YRS#mrVLCs;t!Sg-i2;_9d^UJ0@-+TV2Jk1O#?w
z{^FR}g?wJkKIoyn1#3nCmv4f>@Yh-yuvgHYdPK&)Zq<sAeF@`2;JfyXjX9b(htQR(
zH+Y$F_|Lyrz;0Ea3ZW~XZ&u~QIMb%3b7l(s%x2QRDdV>#CH*a7KPzMZg4W}3NyguP
zy*OME)^vVUMErH1tq)tL_4tXX_<={lH&@0_d-W;t4th#O*@3V;@bGcr$9^p^QeGzG
zr~3}^uIlLFh}a(|{=1!>jPwX0Lsv#d#-9oqtR}-Af&bKr<4+`hfSNNoOW<d=6x}Zc
ze%S`ux^C?giywNf=x3`@mnHCL8g>6Eo-dv?qu=<ioJeF%7cxTV;^F5a&fl8cIqY)D
zh7dZxWO>y23sA?(_N(~GX5A?8TMUN3ApBfU$fEh{a`i-%L7u;29gURN9e+h_r{C*;
zMke$2_Nw*di{|UsRQ!bZn!t~o?oW$vaQWi5a<!mqugA%1kNqMh)gAv0bF`GIb!$H<
zW@qN*$E1cY{;1Z`UO?A|{wQ$59uYFovk%4duXk?OR()dbS1w+l;wK#~N#M7c3`T(;
zw(OId_Uzc&hu@?x5csXe;X?#|=-c>Kk<ymcci7C)tx+j&+)Y+h-ltENHh9@@_Vlt}
z?2b;kXQSKEwcmat;WyL>{KyHvY9F@TxE>aMugk~GuU%uNe~(Rel0l?b2)nY*6_etq
z%)KZgz;@0WnIvTJVC@ky$Uc#Z^6)xD&pn@teSX$0_Q~Ro5Snai;bn5i^x^;2SAP7@
z?d)Y4mF^Hq+~-zh>v9XJ!{>`~rwjbFj~U)j@tgEHVhpV-S`oIgjQ_}<?yzNw7Pd#k
zKk9gRaK%@>{l;HfvPQ*Ex?8Tmk3Cu7$6g&SJqh@s;|QG4eFT2!MD)B1@1QF|XVRu8
z0Y7xiKK%L)fgd?NFB9*evue}h#t+?I_C-SX55jNM&lmW2YznnC9w+|2w697!G<^fz
zw_0EJc(dVu1b+CCv`NOlc3B6jJm?Ie`PsK3&fhooyV+*i3$$cA>4`Xhy<RWdxMr0+
zW^i4Zk(~TDa^K^c+rcKi7c#(R_PB%B3mJc`Js{lr*`Gb2TVm-ZUG9^DrNP+EhMgH1
zzkN!JUEJflh;LATxi07v3<Q7aCwJ7kV*QVW|Fyk+x~H?di~A7;7Jsf=6Dux7dQp+6
zb71$EDh6CYt?26X#w5ror%r;^PHu&0<miLW93Aa!!Hmh8e%CLgK91@C4EPOs-POyN
z$S@wsHT3+MS>t5v9;?wXUW|`eIees||Dnqv?jZZ$9;OiR4a+({;c&u-91FANeH_(m
z6*3@)FB|I-e39^RKa2#QyyRy?|F^?;uff)@Tf_>ezE74xzJ@;+F$csRqUqZGl@qZL
zjlaJMF_V6QjZg?N8^mr9!y)XdA6=FM*N6cj7KHs;8^h}le#D?OZC;RV!wB#O^cees
z&8Rof+FDG!92$Nqe|&$$8xeQJ8WJsGU)u0#@V-Rf{dl;2X+U6O6o!vI5K~%C@-#-0
z1$%w|%&BbG)=jM8>Xjf-urDDNsj0hze9Lqi;?X9=pm{9XWT?^L3Bre%He%a|aU<5P
zDf=<{<<TM!<pzC<zKNCQ44oCwyEGWJnE5^Yf1xcs{wFxIfwLPV&w7$WjbBPKd2sgQ
z@gt3m06Gh7Rh+FM{B=alG(Ub9yJqYXjLoLGRhqz<@;c9bN<7bd6ouywMH!6u^`v|t
zFQ+zNr`%5Y5Xvc22A3xI0=XxUQ+58lK9H9qk1tKI2XbV%56TAx?xW;(REP_-6DBXm
zd!;lXR$h-{R4yo|_V_*VC$Tv`o|Ak$C%Ji^7sy#@0^~%$K<+`5qhI2YQ$gNu)ImdV
zPaT-YbC17YdB>L~;GEV_qG3c2>YP?U2W%tz`VgJ>m}D^<{*ju0B#C^9@6z}TqdSmY
zVAe0RCL3O{+wFhypuu4Mq}bd?nBTB*5AXY$pHn~_ar*d>a~`c0vu-u!P&8YnzZe6t
z*G=G^Ju;bT<2cZfu!mtU!=8q65;<w#-3MI-vBduJ6y<W#exE?!yBzIJ$w>1-CySL@
zn{TlFf84>A&dJs4U9deXX#Jm-VK599JR;@eQVoAc<<Eh4ZuWQv-G877exBop${5ZW
zOnBQQ_sg<KeDU0p^432S-v;oWKYb!|v`5!>`h%;N^a|*rXp_cLbtL}Q6y2|>%q^5#
zVh=ta&>ue0%0Rcl7^1e_vVT=z!8tK{hjUgG-(Td{S$$siZP~MGY+R1%oZtI2>%G^+
zT<sm~xNV{uXA<#x<R_=)`i<KFFvx`VEym%Af-iE5(U1mQc(-ZoYE}35dGB%FmyWy;
z6c4*x`6_?zyi?8Y);DtA=kk{Y#lKGF&F9bMxY0J!lfVOOiQrH7Gx#&o3lRs9li-gt
z0di_<SP{a%xjZ;VEMosM|FhL6{PLUhyCwcyhd6Rzugrp9KWP4)4hQE?@^*-|lCF<I
z{!8DSf9U+dz&_E&F^o(3!@uxvZ`Lmc|2<y>_dUuA`4JPn-B_qn!x=g&MrUQ@?|-Ri
zEo(k>R3#Dnl=~lT7O(su@D2Pr8tr9&0RI&f!_p?fUmo{;*Ky3%U8jyedEAR@%nKjc
zLvq4*20zjt*Fb*iho9hn@|cn8xL3>5{DX|)sHeM@7sI(2%z<#!b31hHy586jkY8V`
zjzP2TGBDg|YE)T^i?&t|yLz!VgqoZB9D22#K307@lp4E({Z(j_$2&7d0)r2-0|VKh
zpMn3;gZl(qp5yrF+y8Z4jqS+3NyMvKuDMwq@kV?poDc8mjdZpv6axDwf1dvv81?@P
z{^YM73;rdA9|rM9Tns!BQ#!DtOQnxy`(rWa7sw6X#-nalSm#wq#E!zny>@TkBECUB
z_+u`BKjwy<1b_IH<+N{m7sn;@Ur`%8&V=tc9DmGp@FO|~{#Xm>nxA*U8X?ld;@>w1
z^zGn}MEc}zV8R+H(!=17H6A{Ifc!K3-1!*D#k1`jN(6h_1O4BBT54-hJaLZoW=Q|P
z`gL#&@r5t_u|?7U828)Oe<t{PFy;hr<iz_wz#lfeNP@pS?!`6c#qFCOb^L`J|Icpg
zWnLQp+~58|z~64v_mEzwmwDrQa!Sh6#NQ1a0p%Z5g1`Lzd9%3Oq)&E4^BqDrLLWd^
zg3ffm3A!6}IJ8OB0NqY2w|q}!mIcakoe{btbjWZq!&um$vqE<bw090Vt;{RjHFRU>
z$W*6-h{tPCA3jXz)X=S=W5-I+)y4T>=<v|x!|{vu4E{PAqp5-TduKonE>GSBE89~1
zDfc;P&-laNIU(JzZ<AiP{XzK7U`xTKf^9`Of_&hx!C;HQPYv5l#35m`Jq+I$Un|Mh
z<Tj@ilal(!C+nBd`uIV-gAEQ_95y*&XoHPDkak%;ji&O!<fe&Z<ZF4I{0;Hsdx$4D
zLwr5C9?FUAM2epfCki5Zr)a61o)N_np?-Wlxh#l=5TX4%@?|jQ7(|TY8T=H_5WPrr
zKYj}M7io+*h<4eGhKvmJ@SjqX4<g0UoaFIq#9HhVtl~FazRc7S)ie&?q3`{#KZH@h
zx3CIhXR~DYh~M}uUohKiOBum^9>l9r{GP{dF#K68ept_WU(j9`?d;gyJ9ik))xhS<
zNi*^_ht``rG^R=-tyx$bGR-5ZsGP6za9OP7NPRDUBlG#{kFlnKSJ0VZ$TTh~X(-L%
z+U&Gs&-v3eYTbceESfdLOFRzB{RBOW+HRgSCe?GL_9E$`9(G}W0=Fgl^m>KP_-$ov
zHD^L>+RE%Hsy>f1snowt5%;BeH;nk*otZV(EzVi_ye{5$$BhlD4uA3R^W2Vstx}Ua
zSJm5ZRaJ9-KDYm%)ak0gd6vL$(K1sEx93dB_R8@W(f+;8vugL$9(ze`|IFNc^?6s*
zwV?LzI6C-RPU~bQ`Y0=P#A(utgS6%QX&;PpbH=;HnNpik_rb(bDIPhlC)&Ss<mc+y
z%kz7mVz--$xE)tvov5CzJT+^cAHVdQvb8G;u-;z>e%c$7F^{e{HK;Pv$5L&^KKpSM
zbGvRa=Z$97Rupz)Tg~adx^#v81Z^Vj=8s|MnbuCnc|O@TIJmQmbvnH479E#eCD{Y8
z4RGF1PWaso+Nbs7Ey#ee3Hwwe4;e4e_ok+_sOJjPN$)HBvWpc_dry&lBhC)~JfLs(
zN-WUV6Gxe`UM=T+MCW_)O+@?dUVr-ym-}?BcSp5yd4TsNI+rNY*$%&*<C5CPJB%5O
z9kh?J1bHyFknXpAjCG88jD6mI;4IpilYSdPv|q8`soJMg=$s$E2k<{n=lX<Qx}n~G
z7Ea*D8ape;;-UCQH?4K}DYSyQOmo-?Kaq@I=-eW&I^^W-Yjy5~%`WDl8B~9z4*Hje
z+PayUr299tEfTF6WlQqj(exr`*RMZ_^O1h#q5a_daQ=7d|GC81i#2wjv1hF1RM&^K
zJyN_Ddjj?bl7q*Kv1icU;lmz+y(Ch?9z=COyRbKj{)m)gZ{+b@^6e8Q#HKJ;d<);5
z;+12!+^!OSJ@O;Szk!I<cDU!*!}(sGVmJvt;759{8+$(IO*#P8gYI+R3Azb%6!e9^
zA9dDPjgqRAND-dI9%XQ%Lm8A<PgG81SK<;0mWC9%SLmIV;&`2MC7yD$GbEA1bBUw_
zCPEK`kua2KpnBNEbkn=EUw2WQU?<kH{`mNb4fi{cZ+<16EA7Hsh;xJ==FjVzkZyEM
z8<$>{X*SrjXYo)E39*q$qf>U0Pr2)!<~Mpm&se*%pnKAo6esQXb##XBIe$&6OEFyf
zy>VsXvi$B?wl2mO*%vO-!=|FXCC%{6#L+32Hhfy>^m^T-Km3^QUD(&Jf0x6qZraNC
zb^I=%GG`js7iubx(Rz@!AN6THuK)Urt$bni`N)4&@iLz>-Hs}D?ZQ~@!@m1Hlyb(-
zELhCz!;Ymn-$~WuCTEOnY^wjBzej!e#^E2t@4iHR{B8^WK={Cg|8e^Gx9{Q%)a22r
zCD_;e4S0k6>W-Fe>}KUj)sKF4BmLHa<VRYybWtblLHO#6mM^)BXLwb-+@bnLPSU!#
zt<kHVqt34OFriQ!+WQsxI8%#(0a#EUTRD6y@MGcJGtO;~J>h0Jw~TcgJ`~}<gUpZ}
zeSp3|pP>G%4F7rVE8n@)`c-Xyt}oO1Zc!h7j=rb*3a!lt5la*PMV#BmzEM)(;QX;~
zU|;?57V;mG17&N;njRW2S2In+{~q-*7BD7cT?X=K6UJ8IvPI5Gqf<}F|LXx`5n~c#
z6Js>oI*l=nv5hev>G%8MTm^m8ik$T1o`MClJ7^C1Fqbf=sBR(bRbY;lFlRA$F^4gi
qF{i`T>3O|0u|B>uu{^Fc(N07$b6RV{lbxQUjD3*5j%P?|;{OB00kg6I

diff --git a/installer.iss b/installer.iss
deleted file mode 100644
index 354cdaf..0000000
--- a/installer.iss
+++ /dev/null
@@ -1,52 +0,0 @@
-; Script generated by the Inno Setup Script Wizard.
-; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
-
-#define MyAppName "Fizzy Launcher"
-#define MyAppVersion "0.1.2.016"
-#define MyAppPublisher "Hi, I'm Ray"
-#define MyAppURL "https://www.hiimray.co.uk/software-fizzy-launcher"
-#define MyAppExeName "fizzylauncher.exe"
-
-[Setup]
-; NOTE: The value of AppId uniquely identifies this application. Do not use the same AppId value in installers for other applications.
-; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
-AppId={{472ED37C-C4FC-4B72-8BC3-C281A6E0D2F9}
-AppName={#MyAppName}
-AppVersion={#MyAppVersion}
-;AppVerName={#MyAppName} {#MyAppVersion}
-AppPublisher={#MyAppPublisher}
-AppPublisherURL={#MyAppURL}
-AppSupportURL={#MyAppURL}
-AppUpdatesURL={#MyAppURL}
-DefaultDirName={autopf}\{#MyAppName}
-DefaultGroupName={#MyAppName}
-DisableProgramGroupPage=yes
-; Remove the following line to run in administrative install mode (install for all users.)
-PrivilegesRequired=lowest
-OutputDir=L:\gitlab-hiimray\fizzy-launcher\bin
-OutputBaseFilename=fizzy-launcher
-Compression=lzma
-SolidCompression=yes
-WizardStyle=modern
-
-[Languages]
-Name: "english"; MessagesFile: "compiler:Default.isl"
-
-[Tasks]
-Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
-
-[Files]
-Source: "L:\gitlab-hiimray\fizzy-launcher\bin\Release\fizzylauncher.exe"; DestDir: "{app}"; Flags: ignoreversion
-Source: "L:\gitlab-hiimray\fizzy-launcher\bin\Release\fizzylauncher.ui.dll"; DestDir: "{app}"; Flags: ignoreversion
-Source: "L:\gitlab-hiimray\fizzy-launcher\bin\Release\Newtonsoft.Json.dll"; DestDir: "{app}"; Flags: ignoreversion
-Source: "L:\gitlab-hiimray\fizzy-launcher\bin\Release\Newtonsoft.Json.xml"; DestDir: "{app}"; Flags: ignoreversion
-; NOTE: Don't use "Flags: ignoreversion" on any shared system files
-
-[Icons]
-Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
-Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"
-Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon
-
-[Run]
-Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent
-
diff --git a/packages.config b/packages.config
deleted file mode 100644
index a9de8b5..0000000
--- a/packages.config
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<packages>
-  <package id="Newtonsoft.Json" version="12.0.3" targetFramework="net472" />
-</packages>
\ No newline at end of file
diff --git a/skye.sln b/skye.sln
deleted file mode 100644
index f67c029..0000000
--- a/skye.sln
+++ /dev/null
@@ -1,31 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Version 16
-VisualStudioVersion = 16.0.30523.141
-MinimumVisualStudioVersion = 10.0.40219.1
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FizzyLauncher", "FizzyLauncher.csproj", "{66C1C75C-3612-4D23-B937-C3DE0D653292}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FizzyLauncher.UI", "FizzyLauncher.UI\FizzyLauncher.UI.csproj", "{D9A49347-583F-41B4-AFE1-63EC80BBDB38}"
-EndProject
-Global
-	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug|Any CPU = Debug|Any CPU
-		Release|Any CPU = Release|Any CPU
-	EndGlobalSection
-	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{66C1C75C-3612-4D23-B937-C3DE0D653292}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{66C1C75C-3612-4D23-B937-C3DE0D653292}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{66C1C75C-3612-4D23-B937-C3DE0D653292}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{66C1C75C-3612-4D23-B937-C3DE0D653292}.Release|Any CPU.Build.0 = Release|Any CPU
-		{D9A49347-583F-41B4-AFE1-63EC80BBDB38}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{D9A49347-583F-41B4-AFE1-63EC80BBDB38}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{D9A49347-583F-41B4-AFE1-63EC80BBDB38}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{D9A49347-583F-41B4-AFE1-63EC80BBDB38}.Release|Any CPU.Build.0 = Release|Any CPU
-	EndGlobalSection
-	GlobalSection(SolutionProperties) = preSolution
-		HideSolutionNode = FALSE
-	EndGlobalSection
-	GlobalSection(ExtensibilityGlobals) = postSolution
-		SolutionGuid = {517C5E2C-E479-4B03-A992-C875F8B7ABCD}
-	EndGlobalSection
-EndGlobal

From 2d4fd8233b2f0c634b7fe9272c0616032e083779 Mon Sep 17 00:00:00 2001
From: Ray <sympatheticfire@gmail.com>
Date: Fri, 23 Jul 2021 00:45:30 +0100
Subject: [PATCH 2/7] Added: port to net-5

---
 .gitignore                                    |   3 +
 AppResource.Designer.cs                       |  93 ++
 AppResource.resx                              | 130 +++
 FizzyLauncher.csproj                          |  85 ++
 FizzyLauncher.csproj.user                     |  68 ++
 FizzyLauncher.sln                             |  25 +
 MainForm.Designer.cs                          | 346 +++++++
 MainForm.cs                                   | 644 +++++++++++++
 MainForm.resx                                 | 670 ++++++++++++++
 Models/LauncherSession.cs                     |  42 +
 Models/TileGroupModel.cs                      |  14 +
 Models/TileModel.cs                           | 100 +++
 OptionsForm.cs                                | 279 ++++++
 OptionsForm.resx                              |  80 ++
 Program.cs                                    |  23 +
 Resources/UI/arrow_down.png                   | Bin 0 -> 601 bytes
 Resources/UI/arrow_down2.png                  | Bin 0 -> 417 bytes
 Resources/UI/arrow_up.png                     | Bin 0 -> 590 bytes
 Resources/UI/arrow_up2.png                    | Bin 0 -> 410 bytes
 Resources/UI/close.png                        | Bin 0 -> 367 bytes
 Resources/UI/close2.png                       | Bin 0 -> 468 bytes
 Resources/UI/edit.png                         | Bin 0 -> 612 bytes
 Resources/UI/edit2.png                        | Bin 0 -> 419 bytes
 Resources/UI/file.png                         | Bin 0 -> 372 bytes
 Resources/UI/file2.png                        | Bin 0 -> 323 bytes
 Resources/UI/folder.png                       | Bin 0 -> 352 bytes
 Resources/UI/folder2.png                      | Bin 0 -> 288 bytes
 Resources/UI/minus.png                        | Bin 0 -> 532 bytes
 Resources/UI/minus2.png                       | Bin 0 -> 380 bytes
 Resources/UI/plus.png                         | Bin 0 -> 559 bytes
 Resources/UI/plus2.png                        | Bin 0 -> 398 bytes
 Resources/UI/trash.png                        | Bin 0 -> 382 bytes
 Resources/UI/trash2.png                       | Bin 0 -> 289 bytes
 Resources/folder_32.png                       | Bin 0 -> 601 bytes
 Resources/toggle-left-ea-16.png               | Bin 0 -> 506 bytes
 Resources/toggle-right-ea-16.png              | Bin 0 -> 502 bytes
 RyzStudio/Data/SQLite/SQLiteDatabase.cs       | 444 +++++++++
 RyzStudio/Drawing/Rectangoid.cs               | 124 +++
 RyzStudio/IO/FileType.cs                      |  56 ++
 RyzStudio/IO/SessionFileFormatBase.cs         | 290 ++++++
 RyzStudio/IO/SharpZipLib.cs                   |  76 ++
 RyzStudio/Net/HttpWeb.cs                      | 168 ++++
 RyzStudio/Windows/Forms/StackLayoutPanel.cs   |  69 ++
 RyzStudio/Windows/Forms/TFlatButton.cs        | 115 +++
 RyzStudio/Windows/Forms/TForm.cs              | 434 +++++++++
 RyzStudio/Windows/Forms/TForm.resx            | 424 +++++++++
 .../Forms/THorizontalSeparator.Designer.cs    |  37 +
 .../Windows/Forms/THorizontalSeparator.cs     | 101 +++
 .../Windows/Forms/THorizontalSeparator.resx   | 120 +++
 RyzStudio/Windows/Forms/TImageBox.cs          |  84 ++
 RyzStudio/Windows/Forms/TPanelBook.cs         | 258 ++++++
 RyzStudio/Windows/Forms/TUserControl.cs       |  73 ++
 RyzStudio/Windows/Forms/ThreadControl.cs      | 571 ++++++++++++
 .../ThemedForms/BorderlessForm.Designer.cs    | 193 ++++
 .../Windows/ThemedForms/BorderlessForm.cs     | 409 +++++++++
 .../Windows/ThemedForms/BorderlessForm.resx   | 158 ++++
 .../BorderlessToolForm.Designer.cs            | 191 ++++
 .../Windows/ThemedForms/BorderlessToolForm.cs | 394 ++++++++
 .../ThemedForms/BorderlessToolForm.resx       | 138 +++
 .../ThemedForms/PickerBox/TPickerBox.cs       |  98 ++
 .../PickerBox/TPickerBox.designer.cs          |  59 ++
 .../ThemedForms/PickerBox/TPickerBox.resx     | 120 +++
 .../ThemedForms/PickerBox/TYesNoPickerBox.cs  |  17 +
 RyzStudio/Windows/ThemedForms/TButton.cs      | 170 ++++
 .../Windows/ThemedForms/TButton.designer.cs   |  61 ++
 RyzStudio/Windows/ThemedForms/TButton.resx    | 120 +++
 .../ThemedForms/TDialogForm.Designer.cs       |  47 +
 RyzStudio/Windows/ThemedForms/TDialogForm.cs  | 117 +++
 .../Windows/ThemedForms/TDialogForm.resx      |  60 ++
 RyzStudio/Windows/ThemedForms/TListBox.cs     | 233 +++++
 .../Windows/ThemedForms/TListBox.designer.cs  | 182 ++++
 RyzStudio/Windows/ThemedForms/TListBox.resx   | 120 +++
 RyzStudio/Windows/ThemedForms/TUserControl.cs | 106 +++
 .../ThemedForms/TUserControl.designer.cs      |  37 +
 .../ThemedForms/TextBox/TButtonTextBox.cs     | 127 +++
 .../TextBox/TButtonTextBox.designer.cs        |  81 ++
 .../ThemedForms/TextBox/TButtonTextBox.resx   | 120 +++
 .../TextBox/TFolderTextBox - Copy.resx        | 120 +++
 .../ThemedForms/TextBox/TFolderTextBox.cs     |  42 +
 .../ThemedForms/TextBox/TFolderTextBox.resx   | 120 +++
 .../ThemedForms/TextBox/TKeyCodeTextBox.cs    |  92 ++
 .../ThemedForms/TextBox/TOpenFileTextBox.cs   |  43 +
 .../Windows/ThemedForms/TextBox/TTextBox.cs   | 100 +++
 .../ThemedForms/TextBox/TTextBox.designer.cs  |  60 ++
 .../Windows/ThemedForms/TextBox/TTextBox.resx | 120 +++
 Text/Json/JsonPointConverter.cs               |  40 +
 Text/Json/JsonSizeConverter.cs                |  40 +
 UIResource.Designer.cs                        | 243 +++++
 UIResource.resx                               | 175 ++++
 Windows/Forms/EditGroupForm.cs                | 177 ++++
 Windows/Forms/EditGroupForm.resx              |  60 ++
 Windows/Forms/EditTileFolderForm.cs           | 384 ++++++++
 Windows/Forms/EditTileFolderForm.resx         |  60 ++
 Windows/Forms/EditTileForm.cs                 | 483 ++++++++++
 Windows/Forms/EditTileForm.resx               |  97 ++
 Windows/Forms/TilePanel.Designer.cs           |  82 ++
 Windows/Forms/TilePanel.cs                    | 491 ++++++++++
 Windows/Forms/TilePanel.resx                  |  66 ++
 Windows/Forms/TilePanelLayout.Designer.cs     | 222 +++++
 Windows/Forms/TilePanelLayout.cs              | 849 ++++++++++++++++++
 Windows/Forms/TilePanelLayout.resx            | 126 +++
 favicon.ico                                   | Bin 0 -> 17542 bytes
 102 files changed, 13696 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 AppResource.Designer.cs
 create mode 100644 AppResource.resx
 create mode 100644 FizzyLauncher.csproj
 create mode 100644 FizzyLauncher.csproj.user
 create mode 100644 FizzyLauncher.sln
 create mode 100644 MainForm.Designer.cs
 create mode 100644 MainForm.cs
 create mode 100644 MainForm.resx
 create mode 100644 Models/LauncherSession.cs
 create mode 100644 Models/TileGroupModel.cs
 create mode 100644 Models/TileModel.cs
 create mode 100644 OptionsForm.cs
 create mode 100644 OptionsForm.resx
 create mode 100644 Program.cs
 create mode 100644 Resources/UI/arrow_down.png
 create mode 100644 Resources/UI/arrow_down2.png
 create mode 100644 Resources/UI/arrow_up.png
 create mode 100644 Resources/UI/arrow_up2.png
 create mode 100644 Resources/UI/close.png
 create mode 100644 Resources/UI/close2.png
 create mode 100644 Resources/UI/edit.png
 create mode 100644 Resources/UI/edit2.png
 create mode 100644 Resources/UI/file.png
 create mode 100644 Resources/UI/file2.png
 create mode 100644 Resources/UI/folder.png
 create mode 100644 Resources/UI/folder2.png
 create mode 100644 Resources/UI/minus.png
 create mode 100644 Resources/UI/minus2.png
 create mode 100644 Resources/UI/plus.png
 create mode 100644 Resources/UI/plus2.png
 create mode 100644 Resources/UI/trash.png
 create mode 100644 Resources/UI/trash2.png
 create mode 100644 Resources/folder_32.png
 create mode 100644 Resources/toggle-left-ea-16.png
 create mode 100644 Resources/toggle-right-ea-16.png
 create mode 100644 RyzStudio/Data/SQLite/SQLiteDatabase.cs
 create mode 100644 RyzStudio/Drawing/Rectangoid.cs
 create mode 100644 RyzStudio/IO/FileType.cs
 create mode 100644 RyzStudio/IO/SessionFileFormatBase.cs
 create mode 100644 RyzStudio/IO/SharpZipLib.cs
 create mode 100644 RyzStudio/Net/HttpWeb.cs
 create mode 100644 RyzStudio/Windows/Forms/StackLayoutPanel.cs
 create mode 100644 RyzStudio/Windows/Forms/TFlatButton.cs
 create mode 100644 RyzStudio/Windows/Forms/TForm.cs
 create mode 100644 RyzStudio/Windows/Forms/TForm.resx
 create mode 100644 RyzStudio/Windows/Forms/THorizontalSeparator.Designer.cs
 create mode 100644 RyzStudio/Windows/Forms/THorizontalSeparator.cs
 create mode 100644 RyzStudio/Windows/Forms/THorizontalSeparator.resx
 create mode 100644 RyzStudio/Windows/Forms/TImageBox.cs
 create mode 100644 RyzStudio/Windows/Forms/TPanelBook.cs
 create mode 100644 RyzStudio/Windows/Forms/TUserControl.cs
 create mode 100644 RyzStudio/Windows/Forms/ThreadControl.cs
 create mode 100644 RyzStudio/Windows/ThemedForms/BorderlessForm.Designer.cs
 create mode 100644 RyzStudio/Windows/ThemedForms/BorderlessForm.cs
 create mode 100644 RyzStudio/Windows/ThemedForms/BorderlessForm.resx
 create mode 100644 RyzStudio/Windows/ThemedForms/BorderlessToolForm.Designer.cs
 create mode 100644 RyzStudio/Windows/ThemedForms/BorderlessToolForm.cs
 create mode 100644 RyzStudio/Windows/ThemedForms/BorderlessToolForm.resx
 create mode 100644 RyzStudio/Windows/ThemedForms/PickerBox/TPickerBox.cs
 create mode 100644 RyzStudio/Windows/ThemedForms/PickerBox/TPickerBox.designer.cs
 create mode 100644 RyzStudio/Windows/ThemedForms/PickerBox/TPickerBox.resx
 create mode 100644 RyzStudio/Windows/ThemedForms/PickerBox/TYesNoPickerBox.cs
 create mode 100644 RyzStudio/Windows/ThemedForms/TButton.cs
 create mode 100644 RyzStudio/Windows/ThemedForms/TButton.designer.cs
 create mode 100644 RyzStudio/Windows/ThemedForms/TButton.resx
 create mode 100644 RyzStudio/Windows/ThemedForms/TDialogForm.Designer.cs
 create mode 100644 RyzStudio/Windows/ThemedForms/TDialogForm.cs
 create mode 100644 RyzStudio/Windows/ThemedForms/TDialogForm.resx
 create mode 100644 RyzStudio/Windows/ThemedForms/TListBox.cs
 create mode 100644 RyzStudio/Windows/ThemedForms/TListBox.designer.cs
 create mode 100644 RyzStudio/Windows/ThemedForms/TListBox.resx
 create mode 100644 RyzStudio/Windows/ThemedForms/TUserControl.cs
 create mode 100644 RyzStudio/Windows/ThemedForms/TUserControl.designer.cs
 create mode 100644 RyzStudio/Windows/ThemedForms/TextBox/TButtonTextBox.cs
 create mode 100644 RyzStudio/Windows/ThemedForms/TextBox/TButtonTextBox.designer.cs
 create mode 100644 RyzStudio/Windows/ThemedForms/TextBox/TButtonTextBox.resx
 create mode 100644 RyzStudio/Windows/ThemedForms/TextBox/TFolderTextBox - Copy.resx
 create mode 100644 RyzStudio/Windows/ThemedForms/TextBox/TFolderTextBox.cs
 create mode 100644 RyzStudio/Windows/ThemedForms/TextBox/TFolderTextBox.resx
 create mode 100644 RyzStudio/Windows/ThemedForms/TextBox/TKeyCodeTextBox.cs
 create mode 100644 RyzStudio/Windows/ThemedForms/TextBox/TOpenFileTextBox.cs
 create mode 100644 RyzStudio/Windows/ThemedForms/TextBox/TTextBox.cs
 create mode 100644 RyzStudio/Windows/ThemedForms/TextBox/TTextBox.designer.cs
 create mode 100644 RyzStudio/Windows/ThemedForms/TextBox/TTextBox.resx
 create mode 100644 Text/Json/JsonPointConverter.cs
 create mode 100644 Text/Json/JsonSizeConverter.cs
 create mode 100644 UIResource.Designer.cs
 create mode 100644 UIResource.resx
 create mode 100644 Windows/Forms/EditGroupForm.cs
 create mode 100644 Windows/Forms/EditGroupForm.resx
 create mode 100644 Windows/Forms/EditTileFolderForm.cs
 create mode 100644 Windows/Forms/EditTileFolderForm.resx
 create mode 100644 Windows/Forms/EditTileForm.cs
 create mode 100644 Windows/Forms/EditTileForm.resx
 create mode 100644 Windows/Forms/TilePanel.Designer.cs
 create mode 100644 Windows/Forms/TilePanel.cs
 create mode 100644 Windows/Forms/TilePanel.resx
 create mode 100644 Windows/Forms/TilePanelLayout.Designer.cs
 create mode 100644 Windows/Forms/TilePanelLayout.cs
 create mode 100644 Windows/Forms/TilePanelLayout.resx
 create mode 100644 favicon.ico

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..28bcb4a
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+/.vs
+/bin
+/obj
diff --git a/AppResource.Designer.cs b/AppResource.Designer.cs
new file mode 100644
index 0000000..4512104
--- /dev/null
+++ b/AppResource.Designer.cs
@@ -0,0 +1,93 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.42000
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace FizzyLauncher {
+    using System;
+    
+    
+    /// <summary>
+    ///   A strongly-typed resource class, for looking up localized strings, etc.
+    /// </summary>
+    // This class was auto-generated by the StronglyTypedResourceBuilder
+    // class via a tool like ResGen or Visual Studio.
+    // To add or remove a member, edit your .ResX file then rerun ResGen
+    // with the /str option, or rebuild your VS project.
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    internal class AppResource {
+        
+        private static global::System.Resources.ResourceManager resourceMan;
+        
+        private static global::System.Globalization.CultureInfo resourceCulture;
+        
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+        internal AppResource() {
+        }
+        
+        /// <summary>
+        ///   Returns the cached ResourceManager instance used by this class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager {
+            get {
+                if (object.ReferenceEquals(resourceMan, null)) {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("FizzyLauncher.AppResource", typeof(AppResource).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+        
+        /// <summary>
+        ///   Overrides the current thread's CurrentUICulture property for all
+        ///   resource lookups using this strongly typed resource class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture {
+            get {
+                return resourceCulture;
+            }
+            set {
+                resourceCulture = value;
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized resource of type System.Drawing.Bitmap.
+        /// </summary>
+        internal static System.Drawing.Bitmap folder_32 {
+            get {
+                object obj = ResourceManager.GetObject("folder_32", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized resource of type System.Drawing.Bitmap.
+        /// </summary>
+        internal static System.Drawing.Bitmap toggle_left_ea_16 {
+            get {
+                object obj = ResourceManager.GetObject("toggle_left_ea_16", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized resource of type System.Drawing.Bitmap.
+        /// </summary>
+        internal static System.Drawing.Bitmap toggle_right_ea_16 {
+            get {
+                object obj = ResourceManager.GetObject("toggle_right_ea_16", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+    }
+}
diff --git a/AppResource.resx b/AppResource.resx
new file mode 100644
index 0000000..f5bec56
--- /dev/null
+++ b/AppResource.resx
@@ -0,0 +1,130 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="folder_32" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>Resources\folder_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="toggle_left_ea_16" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>Resources\toggle-left-ea-16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="toggle_right_ea_16" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>Resources\toggle-right-ea-16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/FizzyLauncher.csproj b/FizzyLauncher.csproj
new file mode 100644
index 0000000..47ac8db
--- /dev/null
+++ b/FizzyLauncher.csproj
@@ -0,0 +1,85 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <OutputType>WinExe</OutputType>
+    <TargetFramework>net5.0-windows</TargetFramework>
+    <UseWindowsForms>true</UseWindowsForms>
+    <NoWin32Manifest>true</NoWin32Manifest>
+    <ApplicationIcon>favicon.ico</ApplicationIcon>
+    <SignAssembly>false</SignAssembly>
+    <AssemblyName>fizzylauncher</AssemblyName>
+    <Authors>Ray Lam</Authors>
+    <Company>Hi, I'm Ray</Company>
+    <Product>Fizzy Launcher</Product>
+    <Copyright>Ray Lam</Copyright>
+    <AssemblyVersion>0.2.1.055</AssemblyVersion>
+    <FileVersion>0.2.1.055</FileVersion>
+  </PropertyGroup>
+
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
+    <OutputPath>bin\Debug\</OutputPath>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <Compile Remove="#\**" />
+    <Compile Remove="RyzStudio\Data\**" />
+    <Compile Remove="RyzStudio\IO\**" />
+    <Compile Remove="RyzStudio\Net\**" />
+    <EmbeddedResource Remove="#\**" />
+    <EmbeddedResource Remove="RyzStudio\Data\**" />
+    <EmbeddedResource Remove="RyzStudio\IO\**" />
+    <EmbeddedResource Remove="RyzStudio\Net\**" />
+    <None Remove="#\**" />
+    <None Remove="RyzStudio\Data\**" />
+    <None Remove="RyzStudio\IO\**" />
+    <None Remove="RyzStudio\Net\**" />
+  </ItemGroup>
+
+  <ItemGroup>
+    <Compile Remove="RyzStudio\Windows\Forms\StackLayoutPanel.cs" />
+    <Compile Remove="RyzStudio\Windows\Forms\TFlatButton.cs" />
+    <Compile Remove="RyzStudio\Windows\Forms\TForm.cs" />
+    <Compile Remove="RyzStudio\Windows\Forms\TPanelBook.cs" />
+    <Compile Remove="RyzStudio\Windows\ThemedForms\BorderlessForm.cs" />
+    <Compile Remove="RyzStudio\Windows\ThemedForms\BorderlessForm.Designer.cs" />
+    <Compile Remove="RyzStudio\Windows\ThemedForms\BorderlessToolForm.cs" />
+    <Compile Remove="RyzStudio\Windows\ThemedForms\BorderlessToolForm.Designer.cs" />
+  </ItemGroup>
+
+  <ItemGroup>
+    <EmbeddedResource Remove="RyzStudio\Windows\Forms\TForm.resx" />
+    <EmbeddedResource Remove="RyzStudio\Windows\ThemedForms\BorderlessForm.resx" />
+    <EmbeddedResource Remove="RyzStudio\Windows\ThemedForms\BorderlessToolForm.resx" />
+  </ItemGroup>
+
+  <ItemGroup>
+    <Compile Update="AppResource.Designer.cs">
+      <DesignTime>True</DesignTime>
+      <AutoGen>True</AutoGen>
+      <DependentUpon>AppResource.resx</DependentUpon>
+    </Compile>
+    <Compile Update="RyzStudio\Windows\ThemedForms\TextBox\TKeyCodeTextBox.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Update="UIResource.Designer.cs">
+      <DesignTime>True</DesignTime>
+      <AutoGen>True</AutoGen>
+      <DependentUpon>UIResource.resx</DependentUpon>
+    </Compile>
+  </ItemGroup>
+
+  <ItemGroup>
+    <EmbeddedResource Update="AppResource.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>AppResource.Designer.cs</LastGenOutput>
+    </EmbeddedResource>
+    <EmbeddedResource Update="RyzStudio\Windows\ThemedForms\TextBox\TFolderTextBox - Copy.resx">
+      <DependentUpon>TFolderTextBox.resx</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Update="UIResource.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>UIResource.Designer.cs</LastGenOutput>
+    </EmbeddedResource>
+  </ItemGroup>
+
+</Project>
\ No newline at end of file
diff --git a/FizzyLauncher.csproj.user b/FizzyLauncher.csproj.user
new file mode 100644
index 0000000..3091f15
--- /dev/null
+++ b/FizzyLauncher.csproj.user
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <ShowAllFiles>false</ShowAllFiles>
+  </PropertyGroup>
+  <ItemGroup>
+    <Compile Update="MainForm.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Update="RyzStudio\Windows\Forms\THorizontalSeparator.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Update="RyzStudio\Windows\Forms\TImageBox.cs">
+      <SubType>Component</SubType>
+    </Compile>
+    <Compile Update="RyzStudio\Windows\Forms\TUserControl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Update="RyzStudio\Windows\ThemedForms\TButton.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Update="RyzStudio\Windows\ThemedForms\TextBox\TButtonTextBox.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Update="RyzStudio\Windows\ThemedForms\TDialogForm.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Update="RyzStudio\Windows\ThemedForms\TextBox\TFolderTextBox.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Update="RyzStudio\Windows\ThemedForms\TListBox.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Update="RyzStudio\Windows\ThemedForms\TextBox\TOpenFileTextBox.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Update="RyzStudio\Windows\ThemedForms\PickerBox\TPickerBox.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Update="RyzStudio\Windows\ThemedForms\TextBox\TTextBox.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Update="RyzStudio\Windows\ThemedForms\TUserControl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Update="RyzStudio\Windows\ThemedForms\PickerBox\TYesNoPickerBox.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Update="OptionsForm.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Update="Windows\Forms\EditTileFolderForm.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Update="Windows\Forms\EditTileForm.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Update="Windows\Forms\EditGroupForm.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Update="Windows\Forms\TilePanel.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Update="Windows\Forms\TilePanelLayout.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+  </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/FizzyLauncher.sln b/FizzyLauncher.sln
new file mode 100644
index 0000000..aafd02f
--- /dev/null
+++ b/FizzyLauncher.sln
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.31410.357
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FizzyLauncher", "FizzyLauncher.csproj", "{4833FB27-0817-4720-A54B-180369B0C374}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Release|Any CPU = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{4833FB27-0817-4720-A54B-180369B0C374}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{4833FB27-0817-4720-A54B-180369B0C374}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{4833FB27-0817-4720-A54B-180369B0C374}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{4833FB27-0817-4720-A54B-180369B0C374}.Release|Any CPU.Build.0 = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+	GlobalSection(ExtensibilityGlobals) = postSolution
+		SolutionGuid = {CB4C1DB0-19FE-4AA0-9621-D66FAC4CF7C5}
+	EndGlobalSection
+EndGlobal
diff --git a/MainForm.Designer.cs b/MainForm.Designer.cs
new file mode 100644
index 0000000..16b56d0
--- /dev/null
+++ b/MainForm.Designer.cs
@@ -0,0 +1,346 @@
+namespace FizzyLauncher
+{
+    partial class MainForm
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Windows Form Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.components = new System.ComponentModel.Container();
+            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
+            this.saveFileDialog1 = new System.Windows.Forms.SaveFileDialog();
+            this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog();
+            this.notifyIcon1 = new System.Windows.Forms.NotifyIcon(this.components);
+            this.contextMenuStrip2 = new System.Windows.Forms.ContextMenuStrip(this.components);
+            this.exitToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
+            this.menuStrip1 = new System.Windows.Forms.MenuStrip();
+            this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.newToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.openToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.toolStripMenuItem13 = new System.Windows.Forms.ToolStripSeparator();
+            this.closeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.toolStripMenuItem14 = new System.Windows.Forms.ToolStripSeparator();
+            this.saveToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.saveAsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.toolStripMenuItem15 = new System.Windows.Forms.ToolStripSeparator();
+            this.exitToolStripMenuItem2 = new System.Windows.Forms.ToolStripMenuItem();
+            this.viewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.showBigIconsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.enableAnimationsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.alwaysOnTopToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.toolsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.optionsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.helpToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
+            this.viewHelpToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
+            this.toolStripMenuItem16 = new System.Windows.Forms.ToolStripSeparator();
+            this.aboutToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
+            this.panel1 = new System.Windows.Forms.Panel();
+            this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel();
+            this.contextMenuStrip2.SuspendLayout();
+            this.menuStrip1.SuspendLayout();
+            this.panel1.SuspendLayout();
+            this.SuspendLayout();
+            // 
+            // saveFileDialog1
+            // 
+            this.saveFileDialog1.Filter = "Session files|*.jsonfig";
+            this.saveFileDialog1.Title = "Choose file to save the session";
+            // 
+            // openFileDialog1
+            // 
+            this.openFileDialog1.Filter = "Session files|*.jsonfig";
+            this.openFileDialog1.Title = "Choose session file";
+            // 
+            // notifyIcon1
+            // 
+            this.notifyIcon1.ContextMenuStrip = this.contextMenuStrip2;
+            this.notifyIcon1.Icon = ((System.Drawing.Icon)(resources.GetObject("notifyIcon1.Icon")));
+            this.notifyIcon1.Text = "notifyIcon1";
+            this.notifyIcon1.Visible = true;
+            this.notifyIcon1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.notifyIcon1_MouseClick);
+            // 
+            // contextMenuStrip2
+            // 
+            this.contextMenuStrip2.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.exitToolStripMenuItem1});
+            this.contextMenuStrip2.Name = "contextMenuStrip2";
+            this.contextMenuStrip2.Size = new System.Drawing.Size(94, 26);
+            // 
+            // exitToolStripMenuItem1
+            // 
+            this.exitToolStripMenuItem1.Name = "exitToolStripMenuItem1";
+            this.exitToolStripMenuItem1.Size = new System.Drawing.Size(93, 22);
+            this.exitToolStripMenuItem1.Text = "E&xit";
+            this.exitToolStripMenuItem1.Click += new System.EventHandler(this.exitToolStripMenuItem1_Click);
+            // 
+            // menuStrip1
+            // 
+            this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.fileToolStripMenuItem,
+            this.viewToolStripMenuItem,
+            this.toolsToolStripMenuItem,
+            this.helpToolStripMenuItem1});
+            this.menuStrip1.Location = new System.Drawing.Point(0, 0);
+            this.menuStrip1.Name = "menuStrip1";
+            this.menuStrip1.Size = new System.Drawing.Size(633, 24);
+            this.menuStrip1.TabIndex = 2;
+            this.menuStrip1.MenuActivate += new System.EventHandler(this.menuStrip1_MenuActivate);
+            // 
+            // fileToolStripMenuItem
+            // 
+            this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.newToolStripMenuItem,
+            this.openToolStripMenuItem,
+            this.toolStripMenuItem13,
+            this.closeToolStripMenuItem,
+            this.toolStripMenuItem14,
+            this.saveToolStripMenuItem,
+            this.saveAsToolStripMenuItem,
+            this.toolStripMenuItem15,
+            this.exitToolStripMenuItem2});
+            this.fileToolStripMenuItem.Name = "fileToolStripMenuItem";
+            this.fileToolStripMenuItem.Size = new System.Drawing.Size(37, 20);
+            this.fileToolStripMenuItem.Text = "&File";
+            // 
+            // newToolStripMenuItem
+            // 
+            this.newToolStripMenuItem.Name = "newToolStripMenuItem";
+            this.newToolStripMenuItem.Size = new System.Drawing.Size(123, 22);
+            this.newToolStripMenuItem.Text = "&New";
+            this.newToolStripMenuItem.Click += new System.EventHandler(this.newToolStripMenuItem_Click);
+            // 
+            // openToolStripMenuItem
+            // 
+            this.openToolStripMenuItem.Name = "openToolStripMenuItem";
+            this.openToolStripMenuItem.Size = new System.Drawing.Size(123, 22);
+            this.openToolStripMenuItem.Text = "&Open";
+            this.openToolStripMenuItem.Click += new System.EventHandler(this.openToolStripMenuItem_Click);
+            // 
+            // toolStripMenuItem13
+            // 
+            this.toolStripMenuItem13.Name = "toolStripMenuItem13";
+            this.toolStripMenuItem13.Size = new System.Drawing.Size(120, 6);
+            // 
+            // closeToolStripMenuItem
+            // 
+            this.closeToolStripMenuItem.Name = "closeToolStripMenuItem";
+            this.closeToolStripMenuItem.Size = new System.Drawing.Size(123, 22);
+            this.closeToolStripMenuItem.Text = "&Close";
+            this.closeToolStripMenuItem.Click += new System.EventHandler(this.closeToolStripMenuItem_Click);
+            // 
+            // toolStripMenuItem14
+            // 
+            this.toolStripMenuItem14.Name = "toolStripMenuItem14";
+            this.toolStripMenuItem14.Size = new System.Drawing.Size(120, 6);
+            // 
+            // saveToolStripMenuItem
+            // 
+            this.saveToolStripMenuItem.Name = "saveToolStripMenuItem";
+            this.saveToolStripMenuItem.Size = new System.Drawing.Size(123, 22);
+            this.saveToolStripMenuItem.Text = "&Save";
+            this.saveToolStripMenuItem.Click += new System.EventHandler(this.saveToolStripMenuItem_Click);
+            // 
+            // saveAsToolStripMenuItem
+            // 
+            this.saveAsToolStripMenuItem.Name = "saveAsToolStripMenuItem";
+            this.saveAsToolStripMenuItem.Size = new System.Drawing.Size(123, 22);
+            this.saveAsToolStripMenuItem.Text = "Save &As...";
+            this.saveAsToolStripMenuItem.Click += new System.EventHandler(this.saveAsToolStripMenuItem_Click);
+            // 
+            // toolStripMenuItem15
+            // 
+            this.toolStripMenuItem15.Name = "toolStripMenuItem15";
+            this.toolStripMenuItem15.Size = new System.Drawing.Size(120, 6);
+            // 
+            // exitToolStripMenuItem2
+            // 
+            this.exitToolStripMenuItem2.Name = "exitToolStripMenuItem2";
+            this.exitToolStripMenuItem2.Size = new System.Drawing.Size(123, 22);
+            this.exitToolStripMenuItem2.Text = "E&xit";
+            this.exitToolStripMenuItem2.Click += new System.EventHandler(this.exitToolStripMenuItem2_Click);
+            // 
+            // viewToolStripMenuItem
+            // 
+            this.viewToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.showBigIconsToolStripMenuItem,
+            this.enableAnimationsToolStripMenuItem,
+            this.alwaysOnTopToolStripMenuItem});
+            this.viewToolStripMenuItem.Name = "viewToolStripMenuItem";
+            this.viewToolStripMenuItem.Size = new System.Drawing.Size(44, 20);
+            this.viewToolStripMenuItem.Text = "&View";
+            // 
+            // showBigIconsToolStripMenuItem
+            // 
+            this.showBigIconsToolStripMenuItem.Name = "showBigIconsToolStripMenuItem";
+            this.showBigIconsToolStripMenuItem.Size = new System.Drawing.Size(173, 22);
+            this.showBigIconsToolStripMenuItem.Text = "Show &Big Icons";
+            this.showBigIconsToolStripMenuItem.Click += new System.EventHandler(this.showBigIconsToolStripMenuItem_Click);
+            // 
+            // enableAnimationsToolStripMenuItem
+            // 
+            this.enableAnimationsToolStripMenuItem.Name = "enableAnimationsToolStripMenuItem";
+            this.enableAnimationsToolStripMenuItem.Size = new System.Drawing.Size(173, 22);
+            this.enableAnimationsToolStripMenuItem.Text = "Enable &Animations";
+            this.enableAnimationsToolStripMenuItem.Click += new System.EventHandler(this.enableAnimationsToolStripMenuItem_Click);
+            // 
+            // alwaysOnTopToolStripMenuItem
+            // 
+            this.alwaysOnTopToolStripMenuItem.Name = "alwaysOnTopToolStripMenuItem";
+            this.alwaysOnTopToolStripMenuItem.Size = new System.Drawing.Size(173, 22);
+            this.alwaysOnTopToolStripMenuItem.Text = "Always On &Top";
+            this.alwaysOnTopToolStripMenuItem.Click += new System.EventHandler(this.alwaysOnTopToolStripMenuItem_Click);
+            // 
+            // toolsToolStripMenuItem
+            // 
+            this.toolsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.optionsToolStripMenuItem});
+            this.toolsToolStripMenuItem.Name = "toolsToolStripMenuItem";
+            this.toolsToolStripMenuItem.Size = new System.Drawing.Size(46, 20);
+            this.toolsToolStripMenuItem.Text = "&Tools";
+            // 
+            // optionsToolStripMenuItem
+            // 
+            this.optionsToolStripMenuItem.Name = "optionsToolStripMenuItem";
+            this.optionsToolStripMenuItem.Size = new System.Drawing.Size(116, 22);
+            this.optionsToolStripMenuItem.Text = "&Options";
+            this.optionsToolStripMenuItem.Click += new System.EventHandler(this.optionsToolStripMenuItem_Click);
+            // 
+            // helpToolStripMenuItem1
+            // 
+            this.helpToolStripMenuItem1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.viewHelpToolStripMenuItem1,
+            this.toolStripMenuItem16,
+            this.aboutToolStripMenuItem1});
+            this.helpToolStripMenuItem1.Name = "helpToolStripMenuItem1";
+            this.helpToolStripMenuItem1.Size = new System.Drawing.Size(44, 20);
+            this.helpToolStripMenuItem1.Text = "&Help";
+            // 
+            // viewHelpToolStripMenuItem1
+            // 
+            this.viewHelpToolStripMenuItem1.Name = "viewHelpToolStripMenuItem1";
+            this.viewHelpToolStripMenuItem1.Size = new System.Drawing.Size(127, 22);
+            this.viewHelpToolStripMenuItem1.Text = "&View Help";
+            this.viewHelpToolStripMenuItem1.Click += new System.EventHandler(this.viewHelpToolStripMenuItem1_Click);
+            // 
+            // toolStripMenuItem16
+            // 
+            this.toolStripMenuItem16.Name = "toolStripMenuItem16";
+            this.toolStripMenuItem16.Size = new System.Drawing.Size(124, 6);
+            // 
+            // aboutToolStripMenuItem1
+            // 
+            this.aboutToolStripMenuItem1.Name = "aboutToolStripMenuItem1";
+            this.aboutToolStripMenuItem1.Size = new System.Drawing.Size(127, 22);
+            this.aboutToolStripMenuItem1.Text = "&About";
+            this.aboutToolStripMenuItem1.Click += new System.EventHandler(this.aboutToolStripMenuItem1_Click);
+            // 
+            // panel1
+            // 
+            this.panel1.AutoScroll = true;
+            this.panel1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
+            this.panel1.BackColor = System.Drawing.Color.Transparent;
+            this.panel1.Controls.Add(this.flowLayoutPanel1);
+            this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.panel1.Location = new System.Drawing.Point(0, 24);
+            this.panel1.Margin = new System.Windows.Forms.Padding(0);
+            this.panel1.Name = "panel1";
+            this.panel1.Padding = new System.Windows.Forms.Padding(10, 10, 10, 20);
+            this.panel1.Size = new System.Drawing.Size(633, 376);
+            this.panel1.TabIndex = 3;
+            // 
+            // flowLayoutPanel1
+            // 
+            this.flowLayoutPanel1.AutoSize = true;
+            this.flowLayoutPanel1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
+            this.flowLayoutPanel1.BackColor = System.Drawing.Color.Transparent;
+            this.flowLayoutPanel1.FlowDirection = System.Windows.Forms.FlowDirection.TopDown;
+            this.flowLayoutPanel1.Location = new System.Drawing.Point(10, 10);
+            this.flowLayoutPanel1.Margin = new System.Windows.Forms.Padding(0);
+            this.flowLayoutPanel1.Name = "flowLayoutPanel1";
+            this.flowLayoutPanel1.Padding = new System.Windows.Forms.Padding(0, 0, 0, 20);
+            this.flowLayoutPanel1.Size = new System.Drawing.Size(0, 20);
+            this.flowLayoutPanel1.TabIndex = 29;
+            this.flowLayoutPanel1.WrapContents = false;
+            // 
+            // MainForm
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(250)))), ((int)(((byte)(250)))), ((int)(((byte)(250)))));
+            this.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None;
+            this.ClientSize = new System.Drawing.Size(633, 400);
+            this.Controls.Add(this.panel1);
+            this.Controls.Add(this.menuStrip1);
+            this.DoubleBuffered = true;
+            this.ForeColor = System.Drawing.SystemColors.ControlText;
+            this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+            this.MainMenuStrip = this.menuStrip1;
+            this.MaximizeBox = false;
+            this.MinimizeBox = false;
+            this.MinimumSize = new System.Drawing.Size(420, 280);
+            this.Name = "MainForm";
+            this.Text = "Fizzy Launcher";
+            this.contextMenuStrip2.ResumeLayout(false);
+            this.menuStrip1.ResumeLayout(false);
+            this.menuStrip1.PerformLayout();
+            this.panel1.ResumeLayout(false);
+            this.panel1.PerformLayout();
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+        private System.Windows.Forms.SaveFileDialog saveFileDialog1;
+        private System.Windows.Forms.OpenFileDialog openFileDialog1;
+        private System.Windows.Forms.NotifyIcon notifyIcon1;
+        private System.Windows.Forms.ContextMenuStrip contextMenuStrip2;
+        private System.Windows.Forms.ToolStripMenuItem exitToolStripMenuItem1;
+        private System.Windows.Forms.MenuStrip menuStrip1;
+        private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem;
+        private System.Windows.Forms.ToolStripMenuItem viewToolStripMenuItem;
+        private System.Windows.Forms.ToolStripMenuItem toolsToolStripMenuItem;
+        private System.Windows.Forms.ToolStripMenuItem helpToolStripMenuItem1;
+        private System.Windows.Forms.Panel panel1;
+        private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel1;
+        private System.Windows.Forms.ToolStripMenuItem newToolStripMenuItem;
+        private System.Windows.Forms.ToolStripMenuItem openToolStripMenuItem;
+        private System.Windows.Forms.ToolStripSeparator toolStripMenuItem13;
+        private System.Windows.Forms.ToolStripMenuItem closeToolStripMenuItem;
+        private System.Windows.Forms.ToolStripSeparator toolStripMenuItem14;
+        private System.Windows.Forms.ToolStripMenuItem saveToolStripMenuItem;
+        private System.Windows.Forms.ToolStripMenuItem saveAsToolStripMenuItem;
+        private System.Windows.Forms.ToolStripSeparator toolStripMenuItem15;
+        private System.Windows.Forms.ToolStripMenuItem exitToolStripMenuItem2;
+        private System.Windows.Forms.ToolStripMenuItem showBigIconsToolStripMenuItem;
+        private System.Windows.Forms.ToolStripMenuItem enableAnimationsToolStripMenuItem;
+        private System.Windows.Forms.ToolStripMenuItem alwaysOnTopToolStripMenuItem;
+        private System.Windows.Forms.ToolStripMenuItem optionsToolStripMenuItem;
+        private System.Windows.Forms.ToolStripMenuItem viewHelpToolStripMenuItem1;
+        private System.Windows.Forms.ToolStripSeparator toolStripMenuItem16;
+        private System.Windows.Forms.ToolStripMenuItem aboutToolStripMenuItem1;
+    }
+}
+
diff --git a/MainForm.cs b/MainForm.cs
new file mode 100644
index 0000000..bd47082
--- /dev/null
+++ b/MainForm.cs
@@ -0,0 +1,644 @@
+using FizzyLauncher.Models;
+using FizzyLauncher.Text.Json;
+using FizzyLauncher.Windows.Forms;
+using RyzStudio.Windows.Forms;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.IO;
+using System.Runtime.InteropServices;
+using System.Text.Json;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace FizzyLauncher
+{
+    public partial class MainForm : Form
+    {
+        [DllImport("user32.dll")]
+        protected static extern bool RegisterHotKey(IntPtr hWnd, int id, int fsModifiers, int vk);
+
+        [DllImport("user32.dll")]
+        protected static extern bool UnregisterHotKey(IntPtr hWnd, int id);
+
+        //protected const int MOD_ALT = 0x1;
+        //protected const int MOD_CONTROL = 0x2;
+        //protected const int MOD_SHIFT = 0x4;
+        //protected const int MOD_WIN = 0x8;
+        protected const int WM_HOTKEY = 0x312;
+        protected const int WM_QUERYENDSESSION = 0x0011;
+
+        protected OptionsForm optionsForm = null;
+        protected string sessionFilename = null;
+        protected bool isBusy = false;
+        protected bool requestExit = false;
+
+
+        public MainForm() : base()
+        {
+            InitializeComponent();
+
+            notifyIcon1.Text = Application.ProductName;
+
+            this.StartPosition = FormStartPosition.WindowsDefaultBounds;
+            this.Visible = false;
+        }
+
+        protected override void OnLoad(EventArgs e)
+        {
+            base.OnLoad(e);
+
+            ThreadControl.SetVisible(this, false);
+            ThreadControl.SetSize(this, this.MinimumSize);
+        }
+
+        protected async override void OnShown(EventArgs e)
+        {
+            base.OnShown(e);
+
+            ThreadControl.SetVisible(this, false);
+
+            string jsonfigFilename = Path.ChangeExtension(Application.ExecutablePath, "jsonfig");
+            if (File.Exists(jsonfigFilename))
+            {
+                await loadFile(jsonfigFilename);
+            }
+            else
+            {
+                this.CurrentSession = new LauncherSession();
+
+                ThreadControl.SetVisible(this, true);
+            }
+        }
+
+        protected override void OnClosing(CancelEventArgs e)
+        {
+            base.OnClosing(e);
+
+            if (this.CurrentSession == null) this.CurrentSession = new LauncherSession();
+
+            if (this.CurrentSession.HideOnClose && !requestExit)
+            {
+                this.Visible = !this.Visible;
+                e.Cancel = true;
+                return;
+            }
+
+            requestExit = false;
+
+            if (string.IsNullOrWhiteSpace(sessionFilename))
+            {
+                // do nothing
+            }
+            else
+            {
+                if (this.CurrentSession.AutoSave == LauncherSession.AutoSaveOption.Prompt)
+                {
+                    DialogResult dr = MessageBox.Show("Save existing session?", "Exit", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
+                    if (dr == DialogResult.Yes)
+                    {
+                        bool rv = saveFile(sessionFilename, false);
+                        if (!rv)
+                        {
+                            e.Cancel = true;
+                        }
+                    }
+                    else if (dr == DialogResult.No)
+                    {
+                        // do nothing
+                    }
+                    else if (dr == DialogResult.Cancel)
+                    {
+                        e.Cancel = true;
+                    }
+                }
+                else if (this.CurrentSession.AutoSave == LauncherSession.AutoSaveOption.Yes)
+                {
+                    saveFile(sessionFilename, false);
+                }
+            }
+
+            if (this.CurrentSession.HotKey != null)
+            {
+                if (this.CurrentSession.HotKey.KeyCode != Keys.None)
+                {
+                    // UnregisterHotKey((IntPtr)Handle, 1);
+                }
+            }
+
+        }
+
+        protected override void WndProc(ref Message m)
+        {
+            switch (m.Msg)
+            {
+                case WM_HOTKEY:
+                    if (m.WParam.ToInt32() == 1)
+                    {
+                        this.Visible = !this.Visible;
+                    }
+
+                    break;
+                case WM_QUERYENDSESSION:
+                    requestExit = true;
+                    //this.Close();
+                    Application.Exit();
+
+                    break;
+                default: break;
+
+            }
+
+            base.WndProc(ref m);
+        }
+
+
+        public LauncherSession CurrentSession { get; set; } = null;
+
+
+        protected async Task collapseWindow(int width, int increment = 6)
+        {
+            await Task.Run(() =>
+            {
+                while (this.Width > width)
+                {
+                    ThreadControl.SetWidth(this, (this.Width - increment));
+
+                    Application.DoEvents();
+                }
+
+                ThreadControl.SetWidth(this, width);
+            });
+        }
+
+        protected async Task expandWindow(int width, int increment = 8)
+        {
+            await Task.Run(() =>
+            {
+                while (this.Width < width)
+                {
+                    ThreadControl.SetWidth(this, (this.Width + increment));
+
+                    Application.DoEvents();
+                }
+
+                ThreadControl.SetWidth(this, width);
+            });
+        }
+
+        protected void invalidateHotKey()
+        {
+            if (this.InvokeRequired)
+            {
+                this.Invoke(new MethodInvoker(() =>
+                {
+                    // UnregisterHotKey((IntPtr)Handle, 1);
+                }));
+            }
+            else
+            {
+                // UnregisterHotKey((IntPtr)Handle, 1);
+            }
+
+            if (this.CurrentSession.HotKey != null)
+            {
+                if (this.CurrentSession.HotKey.KeyCode != Keys.None)
+                {
+                    if (this.InvokeRequired)
+                    {
+                        this.Invoke(new MethodInvoker(() =>
+                        {
+                            // RegisterHotKey((IntPtr)Handle, 1, this.CurrentSession.HotKey.ModifierCode, this.CurrentSession.HotKey.Key);
+                        }));
+                    }
+                    else
+                    {
+                        // RegisterHotKey((IntPtr)Handle, 1, this.CurrentSession.HotKey.ModifierCode, this.CurrentSession.HotKey.Key);
+                    }
+                }
+            }
+        }
+
+
+        protected void newSession()
+        {
+            flowLayoutPanel1.Controls.Clear();
+            flowLayoutPanel1.Controls.Add(new TilePanelLayout(new TileGroupModel()
+            {
+                Title = "New Group",
+                IsExpanded = true,
+                GridSize = new Size(6, 1)
+            }));
+
+            InvalidateWidth(6);
+        }
+
+        protected async Task loadFile(string filename)
+        {
+            await Task.Run(() =>
+            {
+                if (isBusy)
+                {
+                    return;
+                }
+
+                if (string.IsNullOrWhiteSpace(filename))
+                {
+                    return;
+                }
+
+                if (!File.Exists(filename))
+                {
+                    return;
+                }
+
+                string sourceCode = null;
+
+                try
+                {
+                    sessionFilename = filename;
+
+                    sourceCode = File.ReadAllText(sessionFilename);
+                }
+                catch (Exception exc)
+                {
+                    MessageBox.Show(exc.Message, "Load session");
+                    return;
+                }
+
+                if (string.IsNullOrWhiteSpace(sourceCode))
+                {
+                    return;
+                }
+
+                // load options
+                var options = new JsonSerializerOptions();
+                options.Converters.Add(new JsonPointConverter());
+                options.Converters.Add(new JsonSizeConverter());
+
+                this.CurrentSession = JsonSerializer.Deserialize<LauncherSession>(sourceCode, options);
+                if (this.CurrentSession == null)
+                {
+                    this.CurrentSession = new LauncherSession();
+                }
+
+                // load tiles
+                int maxTileWidth = 0;
+                ThreadControl.Clear(flowLayoutPanel1);
+
+                if (this.CurrentSession.Groups != null)
+                {
+                    foreach (TileGroupModel item in this.CurrentSession.Groups)
+                    {
+                        maxTileWidth = Math.Max(maxTileWidth, item.GridSize.Width);
+
+                        TilePanelLayout panel = new TilePanelLayout(item);
+
+                        ThreadControl.Add(flowLayoutPanel1, panel);
+                    }
+                }
+
+                // resize
+                InvalidateSize(maxTileWidth);
+
+                // reposition
+                if (!this.CurrentSession.StartPosition.IsEmpty) ThreadControl.SetLocation(this, this.CurrentSession.StartPosition);
+
+                //
+                ThreadControl.SetTopMost(this, this.CurrentSession.AlwaysOnTop);
+                ThreadControl.SetVisible(this, true);
+                ThreadControl.SetChecked(enableAnimationsToolStripMenuItem, this.CurrentSession.EnableAnimation);
+                ThreadControl.SetChecked(showBigIconsToolStripMenuItem, this.CurrentSession.EnableBigIconInFolder);
+
+                ThreadControl.SetFocus(this);
+
+                // hotkey
+                invalidateHotKey();
+
+            });
+        }
+
+        protected bool saveFile(string filename, bool showNotices = true)
+        {
+            if (isBusy)
+            {
+                return false;
+            }
+
+            if (string.IsNullOrWhiteSpace(filename))
+            {
+                return false;
+            }
+
+            if (flowLayoutPanel1.Controls.Count <= 0)
+            {
+                return true;
+            }
+
+            isBusy = true;
+
+            // update session
+            if (this.CurrentSession == null)
+            {
+                this.CurrentSession = new LauncherSession();
+            }
+
+            this.CurrentSession.DefaultHeight = this.Height;
+            this.CurrentSession.AlwaysOnTop = this.TopMost;
+            this.CurrentSession.StartPosition = this.Location;
+
+            // save
+            this.CurrentSession.Groups = new List<TileGroupModel>();
+            for (int i = 0; i < flowLayoutPanel1.Controls.Count; i++)
+            {
+                if (flowLayoutPanel1.Controls[i].GetType() != typeof(TilePanelLayout))
+                {
+                    continue;
+                }
+
+                TilePanelLayout container = flowLayoutPanel1.Controls[i] as TilePanelLayout;
+                this.CurrentSession.Groups.Add(container.Model);
+            }
+
+            try
+            {
+                File.WriteAllText(filename, JsonSerializer.Serialize(this.CurrentSession));
+
+                if (showNotices)
+                {
+                    MessageBox.Show("Session saved!", "Save session", MessageBoxButtons.OK, MessageBoxIcon.Information);
+                }
+            }
+            catch (Exception exc)
+            {
+                MessageBox.Show(exc.Message, "Save session");
+
+                return false;
+            }
+
+            isBusy = false;
+
+            return true;
+        }
+
+        protected bool saveAsFile()
+        {
+            if (isBusy)
+            {
+                return false;
+            }
+
+            if (saveFileDialog1.ShowDialog() == DialogResult.OK)
+            {
+                bool rv = saveFile(saveFileDialog1.FileName);
+                if (rv)
+                {
+                    sessionFilename = saveFileDialog1.FileName;
+                }
+
+                return rv;
+            }
+
+            return false;
+        }
+
+
+        protected void InvalidateSize(int columnWidth)
+        {
+            int newWidth = TilePanelLayout.CalcWidth(columnWidth);
+            newWidth += SystemInformation.VerticalScrollBarWidth;
+            newWidth += flowLayoutPanel1.Padding.Horizontal + flowLayoutPanel1.Margin.Horizontal;
+            newWidth += panel1.Left + panel1.Padding.Horizontal + panel1.Margin.Horizontal;
+            newWidth += this.Padding.Horizontal;
+
+            ThreadControl.ClientSize(this, newWidth, this.CurrentSession.DefaultHeight);
+        }
+
+        protected void InvalidateWidth(int columnWidth)
+        {
+            int newWidth = TilePanelLayout.CalcWidth(columnWidth);
+            newWidth += SystemInformation.VerticalScrollBarWidth;
+            newWidth += panel1.Left + panel1.Padding.Horizontal + this.Padding.Horizontal + flowLayoutPanel1.Padding.Horizontal + flowLayoutPanel1.Left;
+
+            ThreadControl.SetClientWidth(this, newWidth);
+        }
+
+
+        #region main menu
+
+        private void newToolStripMenuItem_Click(object sender, EventArgs e)
+        {
+            if (string.IsNullOrWhiteSpace(sessionFilename))
+            {
+                newSession();
+            }
+            else
+            {
+                DialogResult dr = MessageBox.Show("Save existing session?", "New session", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
+                if (dr == DialogResult.Yes)
+                {
+                    bool rv = saveFile(sessionFilename, false);
+                    if (rv)
+                    {
+                        newSession();
+
+                        sessionFilename = null;
+                    }
+                }
+                else if (dr == DialogResult.No)
+                {
+                    newSession();
+
+                    sessionFilename = null;
+                }
+                else if (dr == DialogResult.Cancel)
+                {
+                    return;
+                }
+            }
+        }
+
+        private async void openToolStripMenuItem_Click(object sender, EventArgs e)
+        {
+            if (string.IsNullOrWhiteSpace(sessionFilename))
+            {
+                if (openFileDialog1.ShowDialog() == DialogResult.OK)
+                {
+                    await loadFile(openFileDialog1.FileName);
+                }
+            }
+            else
+            {
+                DialogResult dr = MessageBox.Show("Save existing session?", "Open session", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
+                if (dr == DialogResult.Yes)
+                {
+                    bool rv = saveFile(sessionFilename, false);
+                    if (rv)
+                    {
+                        if (openFileDialog1.ShowDialog() == DialogResult.OK)
+                        {
+                            await loadFile(openFileDialog1.FileName);
+                        }
+                    }
+                }
+                else if (dr == DialogResult.No)
+                {
+                    if (openFileDialog1.ShowDialog() == DialogResult.OK)
+                    {
+                        await loadFile(openFileDialog1.FileName);
+                    }
+                }
+                else if (dr == DialogResult.Cancel)
+                {
+                    return;
+                }
+            }
+        }
+
+        private void closeToolStripMenuItem_Click(object sender, EventArgs e)
+        {
+            if (string.IsNullOrWhiteSpace(sessionFilename))
+            {
+                flowLayoutPanel1.Controls.Clear();
+            }
+            else
+            {
+                DialogResult dr = MessageBox.Show("Save existing session?", "Close session", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
+                if (dr == DialogResult.Yes)
+                {
+                    bool rv = saveFile(sessionFilename, false);
+                    if (rv)
+                    {
+                        flowLayoutPanel1.Controls.Clear();
+
+                        sessionFilename = null;
+                    }
+                }
+                else if (dr == DialogResult.No)
+                {
+                    flowLayoutPanel1.Controls.Clear();
+
+                    sessionFilename = null;
+                }
+                else if (dr == DialogResult.Cancel)
+                {
+                    return;
+                }
+            }
+        }
+
+        private void saveToolStripMenuItem_Click(object sender, EventArgs e)
+        {
+            if (string.IsNullOrWhiteSpace(sessionFilename))
+            {
+                saveAsFile();
+            }
+            else
+            {
+                saveFile(sessionFilename, true);
+            }
+        }
+
+        private void saveAsToolStripMenuItem_Click(object sender, EventArgs e)
+        {
+            saveAsFile();
+        }
+
+        private void exitToolStripMenuItem2_Click(object sender, EventArgs e)
+        {
+            requestExit = true;
+
+            this.Close();
+        }
+
+
+        private void showBigIconsToolStripMenuItem_Click(object sender, EventArgs e)
+        {
+            if (this.CurrentSession == null)
+            {
+                return;
+            }
+
+            this.CurrentSession.EnableBigIconInFolder = !this.CurrentSession.EnableBigIconInFolder;
+
+            showBigIconsToolStripMenuItem.Checked = this.CurrentSession.EnableBigIconInFolder;
+        }
+
+        private void enableAnimationsToolStripMenuItem_Click(object sender, EventArgs e)
+        {
+            if (this.CurrentSession == null)
+            {
+                return;
+            }
+
+            this.CurrentSession.EnableAnimation = !this.CurrentSession.EnableAnimation;
+
+            enableAnimationsToolStripMenuItem.Checked = this.CurrentSession.EnableAnimation;
+        }
+
+        private void alwaysOnTopToolStripMenuItem_Click(object sender, EventArgs e)
+        {
+            this.TopMost = !this.TopMost;
+        }
+
+
+        private void optionsToolStripMenuItem_Click(object sender, EventArgs e)
+        {
+            if (optionsForm == null) optionsForm = new OptionsForm(this);
+            optionsForm.ShowDialog();
+
+            invalidateHotKey();
+        }
+
+
+        private void viewHelpToolStripMenuItem1_Click(object sender, EventArgs e)
+        {
+            try
+            {
+                System.Diagnostics.Process.Start("https://www.hiimray.co.uk/software-fizzy-launcher");
+            }
+            catch
+            {
+                // do nothing
+            }
+        }
+
+        private void aboutToolStripMenuItem1_Click(object sender, EventArgs e)
+        {
+            MessageBox.Show(Application.ProductName + " v" + Application.ProductVersion, "About", MessageBoxButtons.OK, MessageBoxIcon.Information);
+        }
+
+
+        private void menuStrip1_MenuActivate(object sender, EventArgs e)
+        {
+            alwaysOnTopToolStripMenuItem.Checked = this.TopMost;
+            saveAsToolStripMenuItem.Enabled = !string.IsNullOrWhiteSpace(sessionFilename);
+        }
+
+
+        #endregion
+
+        #region notification icon
+
+        private void notifyIcon1_MouseClick(object sender, MouseEventArgs e)
+        {
+            if (e.Button == MouseButtons.Left)
+            {
+                this.Visible = !this.Visible;
+            }
+        }
+
+        private void exitToolStripMenuItem1_Click(object sender, EventArgs e)
+        {
+            requestExit = true;
+
+            this.Close();
+        }
+
+
+        #endregion
+
+
+    }
+}
\ No newline at end of file
diff --git a/MainForm.resx b/MainForm.resx
new file mode 100644
index 0000000..04386e6
--- /dev/null
+++ b/MainForm.resx
@@ -0,0 +1,670 @@
+<root>
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="saveFileDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>172, 17</value>
+  </metadata>
+  <metadata name="openFileDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>308, 17</value>
+  </metadata>
+  <metadata name="notifyIcon1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>448, 17</value>
+  </metadata>
+  <metadata name="contextMenuStrip2.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>561, 17</value>
+  </metadata>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="notifyIcon1.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAABAAQAMDAAAAEAIACoJQAARgAAACAgAAABACAAqBAAAO4lAAAYGAAAAQAgAIgJAACWNgAAEBAAAAEA
+        IABoBAAAHkAAACgAAAAwAAAAYAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGxc
+        VU5rW1Tna1tU22paU5BsXVVCgEBABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAaltTZWtbVPxrW1T/a1tU/2tbVP9rW1T/a1tU7mtbU6VrXFNWbVtbDgAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAABqWlR/a1tU/2tbVP9rW1T/a1tU/2tbVP9rW1T/a1tU/2tbVP9rW1T/a1tU+Wta
+        VLprW1Nrb15VHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAVVVVA2tbVJhrW1T/a1tU/2tbVP+NgXz/2NPR/6+mov+Bc23/a1tU/2tb
+        VP9rW1T/a1tU/2tbVP9rW1T/a1tU/2tbVc1sXFSAa1xSMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABtSUkHa1xUqmtbVP9rW1T/a1tU/5iNiP/6+fn/////////
+        ////////6+no/7+4tf+Sh4L/bV5X/2tbVP9rW1T/a1tU/2tbVP9rW1T/a1tU/2tbVOFrXFOZallTTW1J
+        SQcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGlaWhFqW1TCa1tU/2tbVP9rW1T/o5mV//38
+        /P//////////////////////////////////////9PPy/8jDwP+cko3/c2Nd/2tbVP9rW1T/a1tU/2tb
+        VP9rW1T/a1tU/2tbVPVrW1SzalxUXmlaWhEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAalhYHWtbVNRrW1T/a1tU/2tb
+        VP+1rar/////////////////////////////////////////////////////////////////+vn5/9LN
+        y/+lm5f/eGpj/2tbVP9rW1T/a1tU/2tbVP9rW1T/a1tU/2tbVPtrWlS9bFxVb2xdVSEAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABrWVMra1tU42tb
+        VP9rW1T/bV1W/8S9u///////////////////////////////////////////////////////////////
+        /////////////////////////v7+/97a2f+xqKT/g3Zw/2tbVP9rW1T/a1tU/2tbVP9rW1T/a1tU/2tb
+        VP5qW1V4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGpZ
+        VTxrW1Tua1tU/2tbVP9wYVr/0czK////////////////////////////////////////////////////
+        /////////////////////////////////////////////////////////////+ro5/+8tbL/j4N+/21d
+        Vv9rW1T/a1tU/2tbVP9rW1TpAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAbFxTUGtbVPZrW1T/a1tU/3VnYP/d2df/////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        //////////////Tz8v/Iw8D/dmdh/2tbVP9rW1T/blpTJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAABsXFRha1tU+2tbVP9rW1T/emxl/+Th4P//////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////m5CL/2tbVP9rW1T/a1tTXwAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGtaVHdrW1T/a1tU/2tbVP+DdnD/7uzs/////////////Pvw//z6
+        7v/8+u7//Pru//z67v/8+u7//Pru//z67v/9/PT///////////////////////z4+f/79fX/+/X1//v1
+        9f/79fX/+/X1//v19f/79fX//Pb2////////////////////////////vLWy/2tbVP9rW1T/a1xTmQAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVVVUDa1tUmGtbVP9rW1T/a1tU/4t/ev/08/L/////////
+        ///cyT7/0bcA/9G3AP/RtwD/0bcA/9G3AP/RtwD/0bcA/9G3AP/RtwD/6Nt+////////////4bG1/8Rl
+        bP/EZWz/xGVs/8RlbP/EZWz/xGVs/8RlbP/EZWz/xGVs/9KKkP//////////////////////3tvZ/2tb
+        VP9rW1T/a1tU1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG1JSQdrW1Sra1tU/2tbVP9rW1T/mY6J//r5
+        +f////////////389f/RtwD/0bcA/9G3AP/RtwD/0bcA/9G3AP/RtwD/0bcA/9G3AP/RtwD/28Y1////
+        ////////0IWL/8RlbP/EZWz/xGVs/8RlbP/EZWz/xGVs/8RlbP/EZWz/xGVs/8RlbP/9+fn/////////
+        /////////Pz8/3BhWv9rW1T/a1tU/nFVVRIAAAAAAAAAAAAAAAAAAAAAaVpaEWtcVMNrW1T/a1tU/2tb
+        VP+kmpb//fz8//////////////////389P/RtwD/0bcA/+TVbP/w56r/8Oeq//Dnqv/w56r/8Oeq/93K
+        Qv/RtwD/28Y1////////////0IWL/8RlbP/TjZL/68zO/+vMzv/rzM7/68zO/+vMzv/dpqr/xGVs/8Rl
+        bP/8+Pn//////////////////////46CfP9rW1T/a1tU/2xbVEkAAAAAAAAAAAAAAABsWFgaa1xU0Wtb
+        VP9rW1T/a1tU/7CopP////////////////////////////389P/RtwD/0bcA/+7lov//////////////
+        /////////////+PTY//RtwD/28Y1////////////0IWL/8RlbP/boaX/////////////////////////
+        ///px8n/xGVs/8RlbP/8+Pn//////////////////////7CopP9rW1T/a1tU/2tbVIMAAAAAAAAAAAAA
+        AABqXFTOa1tU/2tbVP9tXlf/xr+9//////////////////////////////////389P/RtwD/0bcA/+7l
+        ov///////////////////////////+PTY//RtwD/28Y1////////////0IWL/8RlbP/boaX/////////
+        ///////////////////px8n/xGVs/8RlbP/8+Pn//////////////////////9LNy/9rW1T/a1tU/2tb
+        VL8AAAAAAAAAAAAAAABrW1Tva1tU/2tbVP/KxML///////////////////////////////////////38
+        9P/RtwD/0bcA/+7lov///////////////////////////+PTY//RtwD/28Y1////////////0IWL/8Rl
+        bP/boaX////////////////////////////px8n/xGVs/8RlbP/8+Pn///////////////////////Py
+        8v9sXFX/a1tU/2tbVPRmZmYFAAAAAAAAAABrW1W4a1tU/2tbVP/Oycf/////////////////////////
+        //////////////389P/RtwD/0bcA/+7lov///////////////////////////+PTY//RtwD/28Y1////
+        ////////0IWL/8RlbP/boaX////////////////////////////px8n/xGVs/8RlbP/8+Pn/////////
+        //////////////////+CdG7/a1tU/2tbVP9sXVM0AAAAAAAAAABqWlR/a1tU/2tbVP+tpKD/////////
+        //////////////////////////////389P/RtwD/0bcA/+7lov///////////////////////////+PT
+        Y//RtwD/28Y1////////////0IWL/8RlbP/boaX////////////////////////////px8n/xGVs/8Rl
+        bP/8+Pn///////////////////////////+jmZX/a1tU/2tbVP9rWlNuAAAAAAAAAABtWlNEa1tU/2tb
+        VP+Lfnn///////////////////////////////////////389P/RtwD/0bcA/93JQf/j1Gb/49Rm/+PU
+        Zv/j1Gb/49Rm/9jCJ//RtwD/28Y1////////////0IWL/8RlbP/NfYL/3KOn/9yjp//co6f/3KOn/9yj
+        p//TjJH/xGVs/8RlbP/8+Pn////////////////////////////Fv7z/a1tU/2tbVP9qW1OoAAAAAAAA
+        AABqVVUMa1tU+2tbVP9uXlf/+fn4//////////////////////////////////389P/RtwD/0bcA/9G3
+        AP/RtwD/0bcA/9G3AP/RtwD/0bcA/9G3AP/RtwD/28c5////////////0IWL/8RlbP/EZWz/xGVs/8Rl
+        bP/EZWz/xGVs/8RlbP/EZWz/xGVs/8Rmbf/9+vr////////////////////////////n5eT/a1tU/2tb
+        VP9rW1TkAAAAAAAAAAAAAAAAa1tUz2tbVP9rW1T/3NjW//////////////////////////////////38
+        9v/axTP/2sUz/9rFM//axTP/2sUz/9rFM//axTP/2sUz/9rFM//bxzj/8Ois////////////2p2i/9CE
+        if/QhIn/0ISJ/9CEif/QhIn/0ISJ/9CEif/QhIn/0ISJ/+GwtP//////////////////////////////
+        ///+/v7/dWdg/2tbVP9rW1T/alhYHQAAAAAAAAAAa1tUlGtbVP9rW1T/ubKv////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////l4uG/2tbVP9rW1T/a1pUWAAAAAAAAAAAbFtVWmtbVP9rW1T/mI2I////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////uLGt/2tbVP9rW1T/a1tUkgAAAAAAAAAAa1pSH2tb
+        VP9rW1T/dmdh//7+/v////////////////////////////////+rnPH/fGTp/3xk6f98ZOn/fGTp/3xk
+        6f98ZOn/fGTp/3xk6f9/aOr/ysD2////////////rOH9/zi4+v8ztvr/M7b6/zO2+v8ztvr/M7b6/zO2
+        +v8ztvr/M7b6/33R/P//////////////////////////////////////2tbV/2tbVP9rW1T/a1tVzQAA
+        AAAAAAAAAAAAAGtbVONrW1T/a1tU/+jm5f////////////////////////////r5/v9cPuT/Wz3k/1s9
+        5P9bPeT/Wz3k/1s95P9bPeT/Wz3k/1s95P9bPeT/gGjq////////////Obj6/wCk+f8ApPn/AKT5/wCk
+        +f8ApPn/AKT5/wCk+f8ApPn/AKT5/wGk+f/3/P//////////////////////////////////+vn5/25f
+        WP9rW1T/a1tU/GpVVQwAAAAAAAAAAGtcVKprW1T/a1tU/8bAvf////////////////////////////j3
+        /v9bPeT/Wz3k/4Vu6/+di+//nYvv/52L7/+di+//nYvv/3Rb6P9bPeT/fWXq////////////Nbf6/wCk
+        +f8nsvr/Zsj7/2bI+/9myPv/Zsj7/2bI+/9Bu/v/AKT5/wCk+f/0+///////////////////////////
+        /////////////4p9eP9rW1T/a1tU/2xdVUIAAAAAAAAAAGtbVHBrW1T/a1tU/6Sblv//////////////
+        //////////////j3/v9bPeT/Wz3k/8O49f///////////////////////////5uI7v9bPeT/fWXq////
+        ////////Nbf6/wCk+f9jx/v///////////////////////////+i3v3/AKT5/wCk+f/0+///////////
+        /////////////////////////////6yjn/9rW1T/a1tU/2pcVH0AAAAAAAAAAGxdUzRrW1T/a1tU/4J0
+        bv////////////////////////////j3/v9bPeT/Wz3k/8O49f///////////////////////////5uI
+        7v9bPeT/fWXq////////////Nbf6/wCk+f9jx/v///////////////////////////+i3v3/AKT5/wCk
+        +f/0+////////////////////////////////////////87Jx/9rW1T/a1tU/2tbVbgAAAAAAAAAAGZm
+        ZgVrW1T0a1tU/2xcVf/z8vL///////////////////////j3/v9bPeT/Wz3k/8O49f//////////////
+        /////////////5uI7v9bPeT/fWXq////////////Nbf6/wCk+f9jx/v/////////////////////////
+        //+i3v3/AKT5/wCk+f/0+////////////////////////////////////////8rEwv9rW1T/a1tU/2tb
+        VO8AAAAAAAAAAAAAAABrW1S/a1tU/2tbVP/Szcv///////////////////////j3/v9bPeT/Wz3k/8O4
+        9f///////////////////////////5uI7v9bPeT/fWXq////////////Nbf6/wCk+f9jx/v/////////
+        //////////////////+i3v3/AKT5/wCk+f/0+///////////////////////////////////xr+9/21e
+        V/9rW1T/a1tU/2pcVM4AAAAAAAAAAAAAAABrWlSFa1tU/2tbVP+xqaX///////////////////////j3
+        /v9bPeT/Wz3k/8O49f///////////////////////////5uI7v9bPeT/fWXq////////////Nbf6/wCk
+        +f9jx/v///////////////////////////+i3v3/AKT5/wCk+f/0+///////////////////////////
+        //+6sq//bFxV/2tbVP9rW1T/a1tT1m9eVR4AAAAAAAAAAAAAAABpXFVLa1tU/2tbVP+Pg37/////////
+        //////////////j3/v9bPeT/Wz3k/6CP7//Ivvb/yL72/8i+9v/Ivvb/yL72/4Vv6/9bPeT/fWXq////
+        ////////Nbf6/wCk+f9CvPv/quH9/6rh/f+q4f3/quH9/6rh/f9sy/z/AKT5/wCk+f/0+///////////
+        /////////f39/6ifmv9rW1T/a1tU/2tbVP9rW1TIZllZFAAAAAAAAAAAAAAAAAAAAABpWloRa1tU/Wtb
+        VP9wYVr//Pv7//////////////////j3/v9bPeT/Wz3k/1s95P9bPeT/Wz3k/1s95P9bPeT/Wz3k/1s9
+        5P9bPeT/fWXq////////////Nbf6/wCk+f8ApPn/AKT5/wCk+f8ApPn/AKT5/wCk+f8ApPn/AKT5/wCk
+        +f/1+//////////////7+vr/nZKO/2tbVP9rW1T/a1tU/2tcVbJmZk0KAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAa1tT1mtbVP9rW1T/4Nzb//////////////////j3/v9bPeT/Wz3k/1s95P9bPeT/Wz3k/1s9
+        5P9bPeT/Wz3k/1s95P9bPeT/rJ3x////////////Nbf6/wCk+f8ApPn/AKT5/wCk+f8ApPn/AKT5/wCk
+        +f8ApPn/AKT5/z66+v////////////b19P+Pg37/a1tU/2tbVP9rW1T/a1tTn4BAQAQAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAa1pUm2tbVP9rW1T/vbaz//////////////////7+///08v3/9PL9//Ty
+        /f/08v3/9PL9//Ty/f/08v3/9PL9//Ty/f/49/7/////////////////8vr//+75///u+f//7vn//+75
+        ///u+f//7vn//+75///u+f//8Pr/////////////8O/u/4Z5dP9rW1T/a1tU/2tbVP9rXFSIAAAAAQAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbFxUYWtbVP9rW1T/nJGM////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ///////////////////////////////////////////////////n5eT/fG5o/2tbVP9rW1T/a1tU/Gta
+        VWkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAblpTJWtbVP9rW1T/dmdh/8jD
+        wP/08/L/////////////////////////////////////////////////////////////////////////
+        /////////////////////////////////////////////////////////////93Z1/91Z2D/a1tU/2tb
+        VP9rW1T2bFxTUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWtb
+        VOlrW1T/a1tU/2tbVP9tXVb/j4N+/7y1sv/q6Of/////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////0czK/3Bh
+        Wv9rW1T/a1tU/2tbVO5qWVU8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAGpbVXhrW1T+a1tU/2tbVP9rW1T/a1tU/2tbVP9rW1T/g3Zw/7GopP/e2tn//v7+////
+        ////////////////////////////////////////////////////////////////////////////////
+        ///Evbv/bV1W/2tbVP9rW1T/a1tU42tZUysAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsXVUhbFxVb2taVL1rW1T7a1tU/2tbVP9rW1T/a1tU/2tb
+        VP9rW1T/eGpj/6Wbl//Szcv/+vn5////////////////////////////////////////////////////
+        /////////////7Wtqv9rW1T/a1tU/2tbVP9rW1TUalhYHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABpWloRbFpUVWtb
+        U6JrW1Twa1tU/2tbVP9rW1T/a1tU/2tbVP9rW1T/cGFa/5KHgv+/uLX/8O/u////////////////////
+        ///////////////////9/f3/p56a/2tbVP9rW1T/a1tU/2pbVcdmWVkUAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAABVVVUDallVPGtbVJFrW1Pia1tU/2tbVP9rW1T/a1tU/2tbVP9rW1T/bFxV/4l8
+        dv+1ran/4d7d//////////////////v6+v+cko3/a1tU/2tbVP9rW1T/a1tUsXFVVQkAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa1xSMmxcVIBrW1XNa1tU/2tb
+        VP9rW1T/a1tU/2tbVP9rW1T/a1tU/4Fzbf+vpqL/2NPR/42BfP9rW1T/a1tU/2tbVP9rW1SYVVVVAwAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAb15VHmtbU2trWlS6a1tU+WtbVP9rW1T/a1tU/2tbVP9rW1T/a1tU/2tbVP9rW1T/a1tU/2pa
+        VH8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbVtbDmtcU1ZrW1Ola1tU7mtbVP9rW1T/a1tU/2tb
+        VP9rW1T8altTZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgEBABGxd
+        VUJqWlOQa1tU22tbVOdsXFVOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//4H///+sEP//AD///6wQ//4AB///rBD/+AAA//+sEP/w
+        AAAP/6wQ/+AAAAH/rBD/wAAAAD+sEP+AAAAAH6wQ/wAAAAAPrBD+AAAAAA+sEPwAAAAAD6wQ+AAAAAAP
+        rBDgAAAAAA+sEMAAAAAAB6wQgAAAAAAHrBAAAAAAAAesEAAAAAAAB6wQAAAAAAADrBAAAAAAAAOsEAAA
+        AAAAA6wQAAAAAAADrBAAAAAAAAOsEIAAAAAAAawQgAAAAAABrBCAAAAAAAGsEIAAAAAAAawQwAAAAAAA
+        rBDAAAAAAACsEMAAAAAAAKwQwAAAAAAArBDAAAAAAACsEOAAAAAAAKwQ4AAAAAAArBDgAAAAAAGsEOAA
+        AAAAA6wQ8AAAAAAHrBDwAAAAAA+sEPAAAAAAP6wQ8AAAAAB/rBDwAAAAAP+sEPgAAAAB/6wQ/AAAAAP/
+        rBD/gAAAB/+sEP/wAAAP/6wQ//8AAB//rBD//+AAf/+sEP///AD//6wQ////gf//rBAoAAAAIAAAAEAA
+        AAABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAABsXFRha1tU7GtbVcFqW1RzalxVJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAbFtVe2tbVP5rW1T/a1tU/2tbVP9rW1T/a1tT1mtcVIhrWVU5gICAAgAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAVVVVA2xbVJVrW1T/bV5X/8K7uf/RzMr/pJqW/3hpY/9rW1T/a1tU/2tb
+        VP9rW1TpalxTnGxcVU5mZk0KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAG1JSQdrW1Spa1tU/29fWf/Oycf//////////////////v7+/+He
+        3f+1ran/iXx2/2tbVP9rW1T/a1tU/2tbVPZqW1W7bFxVb2xYWBoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwYFAQbFxUwGtbVP91ZmD+3trZ////////////////////
+        ////////////////////////6efm/7y0sf+Ogn3/bV1W/2tbVP9rW1T/a1tU/WtbVMZrWlR3ZlVVDwAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaF5VG2tbVNJrW1T/fW9p/+fl5P//////////////
+        ///////////////////////////////////////////////////z8vL/x8G//5uQi/9xYlv/a1tU/2tb
+        VP9rW1SPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGpdVylrW1Tha1tU/4V4cv/w7u7/////////
+        //////////////////////////////////////////////////////////////////////////////r6
+        +v/Evbv/a1tU/2xbVMwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABrXVM3a1tU62tbVP+MgHr/9PPy////
+        ////////////////////////////////////////////////////////////////////////////////
+        //////////////v6+v9vX1n/a1tU+2pVVQwAAAAAAAAAAAAAAAAAAAAAallTTWtbVPVrW1T/mY6K//r5
+        +f///v3/1r8d/9G3AP/RtwD/0bcA/9G3AP/RtwD/07oL//r34//57u//x2xy/8RlbP/EZWz/xGVs/8Rl
+        bP/EZWz/y3d9///+/v///////////4yAev9rW1T/alpSQQAAAAAAAAAAAAAAAGpaVWBrW1T7a1tU/6mg
+        nP/+/v7///////799//RtwD/2cMr/+PUZv/j1Gb/49Rm/9zIPP/RtwD/9vHM//Pg4v/EZWz/0omP/9yj
+        p//co6f/3KOn/85/hf/EZWz//fr6////////////rqai/2tbVP9sW1V7AAAAAAAAAABrW1R5a1tU/2xc
+        Vf+4sa3//////////////////v33/9G3AP/k1Wz/////////////////7OGW/9G3AP/28cz/8+Di/8Rl
+        bP/nwML/////////////////3aaq/8RlbP/9+vr////////////RzMn/a1tU/2pbVLYAAAAAAAAAAGtb
+        VO5rW1T/w726///////////////////////+/ff/0bcA/+TVbP/////////////////s4Zb/0bcA//bx
+        zP/z4OL/xGVs/+fAwv/////////////////dpqr/xGVs//36+v////////////Lw8P9rW1T/a1tU74CA
+        gAIAAAAAa1tUxWtbVP/Z1dP///////////////////////799//RtwD/5NVs/////////////////+zh
+        lv/RtwD/9vHM//Pg4v/EZWz/58DC/////////////////92mqv/EZWz//fr6/////////////////4By
+        bP9rW1T/aF1RLAAAAABqXFSLa1tU/7iwrf///////////////////////v33/9G3AP/dyUH/7eKZ/+3i
+        mf/t4pn/4dBa/9G3AP/28cz/8+Di/8RlbP/Zm6D/58HE/+fBxP/nwcT/04yR/8RlbP/9+vr/////////
+        ////////opeT/2tbVP9qW1NlAAAAAGtbVVFrW1T/louG///////////////////////+/ff/0bcA/9G3
+        AP/RtwD/0bcA/9G3AP/RtwD/0bcB//n12//z4OL/xGVs/8RlbP/EZWz/xGVs/8RlbP/EZWz/x2xy//79
+        /f/////////////////Dvbr/a1tU/2tbU58AAAAAaF1RFmtbVP90ZV///v7+///////////////////+
+        /f/28cz/9vHM//bxzP/28cz/9vHM//bxzP/49dr///////35+f/z4OL/8+Di//Pg4v/z4OL/8+Di//Pg
+        4v/47e7//////////////////////+Xi4f9rW1T/altU2gAAAAAAAAAAa1xT3GtbVP/m4+L/////////
+        /////////////+zp/P/e2Pr/3tj6/97Y+v/e2Pr/3tj6/+fj+////////////9ry/v/M7f7/zO3+/8zt
+        /v/M7f7/zO3+/+L1/v///////////////////////v7+/3VmX/9rW1T+aF1RFgAAAABsWlSha1tU/8S+
+        u//////////////////8/P//YkXl/1s95P9bPeT/Wz3k/1s95P9bPeT/XD7k/+jk+//b8v7/AaT5/wCk
+        +f8ApPn/AKT5/wCk+f8ApPn/C6j5//v+////////////////////////lYmE/2tbVP9rWlRPAAAAAGpc
+        VGdrW1T/o5mU//////////////////r5/v9bPeT/hW7r/72x9P+9sfT/vbH0/5WB7v9bPeT/3tj6/8zt
+        /v8ApPn/WsT7/5nb/f+Z2/3/mdv9/0G7+/8ApPn/9/z///////////////////////+2r6v/a1tU/2pb
+        VIkAAAAAaF1RLGtbVP+Acmz/////////////////+vn+/1s95P+gj+//////////////////u6/0/1s9
+        5P/e2Pr/zO3+/wCk+f+W2v3/////////////////bMv8/wCk+f/3/P///////////////////////9nV
+        0/9rW1T/a1tUxQAAAACAgIACa1tU72tbVP/y8PD////////////6+f7/Wz3k/6CP7///////////////
+        //+7r/T/Wz3k/97Y+v/M7f7/AKT5/5ba/f////////////////9sy/z/AKT5//f8////////////////
+        ////////w726/2tbVP9rW1TuAAAAAAAAAABqW1S2a1tU/9HMyf////////////r5/v9bPeT/oI/v////
+        /////////////7uv9P9bPeT/3tj6/8zt/v8ApPn/ltr9/////////////////2zL/P8ApPn/9/z/////
+        /////////////7ixrf9sXFX/a1tU/2tbVHkAAAAAAAAAAGpcVH1rW1T/r6ej////////////+vn+/1s9
+        5P93Xun/nYvv/52L7/+di+//gmvq/1s95P/e2Pr/zO3+/wCk+f88ufr/Zsj7/2bI+/9myPv/K7P6/wCk
+        +f/3/P////////7+/v+upaH/a1tU/2tbVPxqXFRnAAAAAAAAAAAAAAAAa1tUQ2tbVP+NgXz/////////
+        ///6+f7/Wz3k/1s95P9bPeT/Wz3k/1s95P9bPeT/YkXl/+3q/P/M7f7/AKT5/wCk+f8ApPn/AKT5/wCk
+        +f8ApPn/Ha76//3+///7+vr/nZOO/2tbVP9rWlT4altVVAAAAAAAAAAAAAAAAAAAAAB0XV0La1tU+29f
+        Wf/7+vr/////////////////////////////////////////////////////////////////////////
+        ////////////////////////9vX0/5CEfv9rW1T/bFxU72pZVTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AABsW1TMa1tU/8S9u//6+vr/////////////////////////////////////////////////////////
+        //////////////////////////////Du7v+FeHL/a1tU/2tbVOFqXVcpAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAGtbVI9rW1T/a1tU/3FiW/+bkIv/x8G///Py8v//////////////////////////////
+        ///////////////////////////////////n5eT/fW9p/2tbVP9rW1TSaF5VGwAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAZlVVD2taVHdrW1TGa1tU/WtbVP9rW1T/bV1W/46Cff+8tLH/6efm////
+        ////////////////////////////////////////3trZ/3ZnYf9rW1T/bFxUwHBgUBAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmWVkUalxUXmtcVKprW1Tya1tU/2tb
+        VP9rW1T/f3Fr/6uinv/Y09H//fz8/////////////////9LNy/9xYVv/a1tU/2paVa9xVVUJAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGZm
+        TQpsXFVOalxTnGtbVOlrW1T/a1tU/2tbVP94aWP/pJqW/9HMyv/Cu7n/bV5X/2tbVP9sW1SVVVVVAwAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAgICAAmtZVTlrXFSIa1tT1mtbVP9rW1T/a1tU/2tbVP9rW1T+bFtVewAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAalxVJGpbVHNrW1XBa1tU7Gxc
+        VGEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/g////wA///wAB//4A
+        AD/8AAAH+AAAB/AAAAfgAAADwAAAA4AAAAMAAAADAAAAAQAAAAEAAAABAAAAAQAAAAGAAAAAgAAAAIAA
+        AACAAAAAgAAAAMAAAADAAAABwAAAA8AAAAfgAAAP4AAAH+AAAD/8AAB//4AA///wA////wf/KAAAABgA
+        AAAwAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAa1tTa2xcVfBsXFW1bFpVZmZcUhkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFrWlSFa1tU/4+Dfv+AcWv8a1tU/2tb
+        VP5tXlbMa1xUemxbVS0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAVVVVA2xbVJprW1T/qqCc//7+/v//////6+no/7+4tf+RhoH9bF1W/mtbVP9tXlbia1xTmWpZ
+        U02AVVUGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0XV0LbFxVtWxcVf+5sq//////////
+        ////////////////////////8/Hx/8bAvf+Zjor/cGBa/WtbVP9tXVbxaltUo2heVRsAAAAAAAAAAAAA
+        AAAAAAAAAAAAAGZZWRRtXFbKbV1W/sjCv///////////////////////////////////////////////
+        ////////+vn5/9LNy/+mnJj/bV1W/WtbVIMAAAAAAAAAAAAAAAAAAAAAaFhYIG1eV9pvYFn808/N////
+        ////////////////////////////////////////////////////////////////////////in55/W1d
+        Vr4AAAAAAAAAAAAAAABoXVEsbV5X53NlXvzd2tj//v78/9S8EP/RtwD/0bcA/9G3AP/RtwD/8Oit/+zN
+        0P/EZWz/xGVs/8RlbP/EZWz/yG91//79/f//////raSg/2xcVfaAQEAEAAAAAGxcVEBtXVbzfG5n++jm
+        5f///////v35/9G3AP/v5qf/9vHM//bxzP/Ywij/7eKZ/+fBxP/NfYP/8+Di//Pg4v/rysz/xGVs//77
+        /P//////z8rH/2tbVP9rXFIyAAAAAG1dVe2CdW/98O/u/////////////v35/9G3AP/38tH/////////
+        ///axTL/7eKZ/+fBxP/Qg4n////////////04+T/xGVs//77/P//////8fDv/2tbVP9sW1RtAAAAAG5e
+        Vs+ViYT+/////////////////v35/9G3AP/38tH////////////axTL/7eKZ/+fBxP/Qg4n/////////
+        ///04+T/xGVs//77/P///////////31waftqW1OoAAAAAGxaU5NyY138/v7+/////////////v35/9G3
+        AP/Zwyr/2sUz/9rFM//Tugr/7eOb/+fBxP/Ga3L/0ISJ/9CEif/OfoT/xGVs//78/P///////////6CW
+        kv9tXlflAAAAAGpcU1lrW1T/5ePh//////////////79/+3imf/t4pn/7eKZ/+3imf/t4pr/+/nr//bm
+        5//nwcT/58HE/+fBxP/nwcT/7M3P/////////////////8K7uf9rW1T/alhYHW9eVR5rW1T/w726////
+        /////////////8rA9v+9sfT/vbH0/72x9P++svT/8vD9/+v4//+a2/3/mdv9/5nb/f+Z2/3/rOH9////
+        /////////////+Th4P9rW1T/bFtVVwAAAABtXlfnopeT/////////////Pv+/1s95P92Xej/fGTp/3xk
+        6f9hReX/v7P0/5vb/f8KqPn/M7b6/zO2+v8qs/r/AKT5//r9//////////////7+/v9yY1z8a1tUkQAA
+        AABqW1OofXBp+///////////+/r+/1s95P/h3Pr///////////97Y+n/vbH0/5nb/f8ytvr/////////
+        ///R7/7/AKT5//n9//////////////////+ViYT+bl5WzwAAAABsW1Rta1tU//Hw7///////+/r+/1s9
+        5P/h3Pr///////////97Y+n/vbH0/5nb/f8ytvr////////////R7/7/AKT5//n9//////////////Dv
+        7v+CdW/9bV1V7QAAAABsXVM0a1tU/9DLyf//////+/r+/1s95P/GvPb/3tj6/97Y+v91W+j/vbH0/5nb
+        /f8osvr/zO3+/8zt/v+n4P3/AKT5//n9////////6+no/35wavxsXVX1altURgAAAACAQEAEbV1W9q6m
+        ov//////+/r+/1s95P9bPeT/Wz3k/1s95P9bPeT/ysH2/5nb/f8ApPn/AKT5/wCk+f8ApPn/EKr5//z+
+        ///g3dv/dmdh/G1dVuptWFMxAAAAAAAAAAAAAAAAbFxVv4x/ev3/////////////////////////////
+        /////////////////////////////////////////////9jT0f9xYVv8bV5W32pcVSQAAAAAAAAAAAAA
+        AAAAAAAAa1tUg21dVv2mnJj/0s3L//r5+f//////////////////////////////////////////////
+        ////////yMK//21dVv5tXFbKZllZFAAAAAAAAAAAAAAAAAAAAAAAAAAAaF5VG2pbVKNsXFXwa1tU/3Bg
+        Wv2Zjor+xsC9//Px8f////////////////////////////////+5sq//bFxV/2xcVbV0XV0LAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVVVUDallVPGtcVIhtXVbba1tU/2tbVP6Ie3X9ta2p/+He
+        3f///////v7+/66mov9rW1T/bFpUoWZmZgUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAbFtVLWtcVHpsXVXLa1tU/mtbVP9/cWv7j4N+/2tbVP9rWlSFAAAAAQAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAZlxSGWxaVWZsXFW1bFxV8GtbU2sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8H
+        /0H8AP9B+AAPQfAAA0HgAANBwAADQYAAAUEAAAFBAAABQQAAAUEAAAFBAAAAQQAAAEGAAABBgAAAQYAA
+        AEGAAABBgAABQcAAA0HAAAdBwAAPQfAAH0H/AD9B/+D/QSgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJhW3tvYFn0dWZgsmxbVVdmVVUPAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgICAAnFiW5eCdG705OHg/8a/vf+UiYT0cWFa+Xdo
+        YcptXFVsb15VHgAAAAAAAAAAAAAAAAAAAAAAAAAAbUlJB3NkXbKMgHr09/b2//////////////////r5
+        +f/Szcv/oJeS9XNlXfZzZV7baVxVJwAAAAAAAAAAbVtbDnNjXciZj4n1+/r6////////////////////
+        ///////////////////+/v7/pJqW+WxdVnYAAAAAamBVGHJkXdmnnpn2/f37/9S8E//axTP/2MIo/+XX
+        cP/eqa3/zX2D/9CEif/IcHf//v39/83Ixf92Z2C8AAAAAHJjXOC5sK36//////7++//bxjb///////Xw
+        yv/k1Gf/3KOn//Pf4P//////0IaL//79/f/w7u7/cWFb8gAAAAF0Zl/i4+Df///////+/vv/2cMr//bx
+        zP/u5aL/5NRn/9yjp//px8n/8+Di/85/hf/+/f3//////3hpYvNuWlMldGReo8K7uf////////79/+PU
+        Zv/j1Gb/49Rm//Dorv/qyMv/3KOn/9yjp//eqKz///7+//////+ajoryalxUXmpaVWCbkYzz//////7+
+        //+ikfD/nYvv/52L7//Lwfb/ruL9/2bI+/9myPv/b8z8//7/////////wbq3/3RlXqJuWlMleGli8///
+        ///8/P//d17p/97Y+v/DuPX/nYvv/2fJ+/+i3v3/zO3+/yuz+v/7/v///////+Pg3/90Zl/iAAAAAXFh
+        W/Lw7u7//Pz//35m6v//////3df5/52L7/9nyfv/yuz+//////82t/r/+/7///////+5sK36cmNc4AAA
+        AAB2Z2G+zsnH//z8//9iReX/fGTp/3Vb6P+jkvD/Z8n7/yiy+v8ztvr/E6v5//v9/v+to5/4c2Nd3m1b
+        UhwAAAAAbF1WdqSalvn+/v7///////////////////////////////////////v6+v+Zj4r2c2ReyW1b
+        Ww4AAAAAAAAAAGlcVSdzZV7bc2Vd9qCXkvXSzcv/+vn5//////////////////f29v+MgHr0c2Rdsm1J
+        SQcAAAAAAAAAAAAAAAAAAAAAAAAAAG9eVR5rW1NrdGRexnBhWfiShoHvxr+9/uTh4P+CdG70c2RdmYCA
+        gAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmVVUPbFtVV3VmYLJvYFn0cmFbewAA
+        AAAAAAAAAAAAAAAAAAAAAAAA+D+sQeAHrEHAAaxBgAGsQQABrEEAAKxBAACsQQAArEEAAKxBAACsQQAA
+        rEGAAKxBgAGsQYADrEHgB6xB/B+sQQ==
+</value>
+  </data>
+  <metadata name="menuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>716, 17</value>
+  </metadata>
+  <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAABAAQAMDAAAAEAIACoJQAARgAAACAgAAABACAAqBAAAO4lAAAYGAAAAQAgAIgJAACWNgAAEBAAAAEA
+        IABoBAAAHkAAACgAAAAwAAAAYAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGxc
+        VU5rW1Tna1tU22paU5BsXVVCgEBABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAaltTZWtbVPxrW1T/a1tU/2tbVP9rW1T/a1tU7mtbU6VrXFNWbVtbDgAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAABqWlR/a1tU/2tbVP9rW1T/a1tU/2tbVP9rW1T/a1tU/2tbVP9rW1T/a1tU+Wta
+        VLprW1Nrb15VHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAVVVVA2tbVJhrW1T/a1tU/2tbVP+NgXz/2NPR/6+mov+Bc23/a1tU/2tb
+        VP9rW1T/a1tU/2tbVP9rW1T/a1tU/2tbVc1sXFSAa1xSMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABtSUkHa1xUqmtbVP9rW1T/a1tU/5iNiP/6+fn/////////
+        ////////6+no/7+4tf+Sh4L/bV5X/2tbVP9rW1T/a1tU/2tbVP9rW1T/a1tU/2tbVOFrXFOZallTTW1J
+        SQcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGlaWhFqW1TCa1tU/2tbVP9rW1T/o5mV//38
+        /P//////////////////////////////////////9PPy/8jDwP+cko3/c2Nd/2tbVP9rW1T/a1tU/2tb
+        VP9rW1T/a1tU/2tbVPVrW1SzalxUXmlaWhEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAalhYHWtbVNRrW1T/a1tU/2tb
+        VP+1rar/////////////////////////////////////////////////////////////////+vn5/9LN
+        y/+lm5f/eGpj/2tbVP9rW1T/a1tU/2tbVP9rW1T/a1tU/2tbVPtrWlS9bFxVb2xdVSEAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABrWVMra1tU42tb
+        VP9rW1T/bV1W/8S9u///////////////////////////////////////////////////////////////
+        /////////////////////////v7+/97a2f+xqKT/g3Zw/2tbVP9rW1T/a1tU/2tbVP9rW1T/a1tU/2tb
+        VP5qW1V4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGpZ
+        VTxrW1Tua1tU/2tbVP9wYVr/0czK////////////////////////////////////////////////////
+        /////////////////////////////////////////////////////////////+ro5/+8tbL/j4N+/21d
+        Vv9rW1T/a1tU/2tbVP9rW1TpAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAbFxTUGtbVPZrW1T/a1tU/3VnYP/d2df/////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        //////////////Tz8v/Iw8D/dmdh/2tbVP9rW1T/blpTJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAABsXFRha1tU+2tbVP9rW1T/emxl/+Th4P//////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////m5CL/2tbVP9rW1T/a1tTXwAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGtaVHdrW1T/a1tU/2tbVP+DdnD/7uzs/////////////Pvw//z6
+        7v/8+u7//Pru//z67v/8+u7//Pru//z67v/9/PT///////////////////////z4+f/79fX/+/X1//v1
+        9f/79fX/+/X1//v19f/79fX//Pb2////////////////////////////vLWy/2tbVP9rW1T/a1xTmQAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVVVUDa1tUmGtbVP9rW1T/a1tU/4t/ev/08/L/////////
+        ///cyT7/0bcA/9G3AP/RtwD/0bcA/9G3AP/RtwD/0bcA/9G3AP/RtwD/6Nt+////////////4bG1/8Rl
+        bP/EZWz/xGVs/8RlbP/EZWz/xGVs/8RlbP/EZWz/xGVs/9KKkP//////////////////////3tvZ/2tb
+        VP9rW1T/a1tU1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG1JSQdrW1Sra1tU/2tbVP9rW1T/mY6J//r5
+        +f////////////389f/RtwD/0bcA/9G3AP/RtwD/0bcA/9G3AP/RtwD/0bcA/9G3AP/RtwD/28Y1////
+        ////////0IWL/8RlbP/EZWz/xGVs/8RlbP/EZWz/xGVs/8RlbP/EZWz/xGVs/8RlbP/9+fn/////////
+        /////////Pz8/3BhWv9rW1T/a1tU/nFVVRIAAAAAAAAAAAAAAAAAAAAAaVpaEWtcVMNrW1T/a1tU/2tb
+        VP+kmpb//fz8//////////////////389P/RtwD/0bcA/+TVbP/w56r/8Oeq//Dnqv/w56r/8Oeq/93K
+        Qv/RtwD/28Y1////////////0IWL/8RlbP/TjZL/68zO/+vMzv/rzM7/68zO/+vMzv/dpqr/xGVs/8Rl
+        bP/8+Pn//////////////////////46CfP9rW1T/a1tU/2xbVEkAAAAAAAAAAAAAAABsWFgaa1xU0Wtb
+        VP9rW1T/a1tU/7CopP////////////////////////////389P/RtwD/0bcA/+7lov//////////////
+        /////////////+PTY//RtwD/28Y1////////////0IWL/8RlbP/boaX/////////////////////////
+        ///px8n/xGVs/8RlbP/8+Pn//////////////////////7CopP9rW1T/a1tU/2tbVIMAAAAAAAAAAAAA
+        AABqXFTOa1tU/2tbVP9tXlf/xr+9//////////////////////////////////389P/RtwD/0bcA/+7l
+        ov///////////////////////////+PTY//RtwD/28Y1////////////0IWL/8RlbP/boaX/////////
+        ///////////////////px8n/xGVs/8RlbP/8+Pn//////////////////////9LNy/9rW1T/a1tU/2tb
+        VL8AAAAAAAAAAAAAAABrW1Tva1tU/2tbVP/KxML///////////////////////////////////////38
+        9P/RtwD/0bcA/+7lov///////////////////////////+PTY//RtwD/28Y1////////////0IWL/8Rl
+        bP/boaX////////////////////////////px8n/xGVs/8RlbP/8+Pn///////////////////////Py
+        8v9sXFX/a1tU/2tbVPRmZmYFAAAAAAAAAABrW1W4a1tU/2tbVP/Oycf/////////////////////////
+        //////////////389P/RtwD/0bcA/+7lov///////////////////////////+PTY//RtwD/28Y1////
+        ////////0IWL/8RlbP/boaX////////////////////////////px8n/xGVs/8RlbP/8+Pn/////////
+        //////////////////+CdG7/a1tU/2tbVP9sXVM0AAAAAAAAAABqWlR/a1tU/2tbVP+tpKD/////////
+        //////////////////////////////389P/RtwD/0bcA/+7lov///////////////////////////+PT
+        Y//RtwD/28Y1////////////0IWL/8RlbP/boaX////////////////////////////px8n/xGVs/8Rl
+        bP/8+Pn///////////////////////////+jmZX/a1tU/2tbVP9rWlNuAAAAAAAAAABtWlNEa1tU/2tb
+        VP+Lfnn///////////////////////////////////////389P/RtwD/0bcA/93JQf/j1Gb/49Rm/+PU
+        Zv/j1Gb/49Rm/9jCJ//RtwD/28Y1////////////0IWL/8RlbP/NfYL/3KOn/9yjp//co6f/3KOn/9yj
+        p//TjJH/xGVs/8RlbP/8+Pn////////////////////////////Fv7z/a1tU/2tbVP9qW1OoAAAAAAAA
+        AABqVVUMa1tU+2tbVP9uXlf/+fn4//////////////////////////////////389P/RtwD/0bcA/9G3
+        AP/RtwD/0bcA/9G3AP/RtwD/0bcA/9G3AP/RtwD/28c5////////////0IWL/8RlbP/EZWz/xGVs/8Rl
+        bP/EZWz/xGVs/8RlbP/EZWz/xGVs/8Rmbf/9+vr////////////////////////////n5eT/a1tU/2tb
+        VP9rW1TkAAAAAAAAAAAAAAAAa1tUz2tbVP9rW1T/3NjW//////////////////////////////////38
+        9v/axTP/2sUz/9rFM//axTP/2sUz/9rFM//axTP/2sUz/9rFM//bxzj/8Ois////////////2p2i/9CE
+        if/QhIn/0ISJ/9CEif/QhIn/0ISJ/9CEif/QhIn/0ISJ/+GwtP//////////////////////////////
+        ///+/v7/dWdg/2tbVP9rW1T/alhYHQAAAAAAAAAAa1tUlGtbVP9rW1T/ubKv////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////l4uG/2tbVP9rW1T/a1pUWAAAAAAAAAAAbFtVWmtbVP9rW1T/mI2I////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////uLGt/2tbVP9rW1T/a1tUkgAAAAAAAAAAa1pSH2tb
+        VP9rW1T/dmdh//7+/v////////////////////////////////+rnPH/fGTp/3xk6f98ZOn/fGTp/3xk
+        6f98ZOn/fGTp/3xk6f9/aOr/ysD2////////////rOH9/zi4+v8ztvr/M7b6/zO2+v8ztvr/M7b6/zO2
+        +v8ztvr/M7b6/33R/P//////////////////////////////////////2tbV/2tbVP9rW1T/a1tVzQAA
+        AAAAAAAAAAAAAGtbVONrW1T/a1tU/+jm5f////////////////////////////r5/v9cPuT/Wz3k/1s9
+        5P9bPeT/Wz3k/1s95P9bPeT/Wz3k/1s95P9bPeT/gGjq////////////Obj6/wCk+f8ApPn/AKT5/wCk
+        +f8ApPn/AKT5/wCk+f8ApPn/AKT5/wGk+f/3/P//////////////////////////////////+vn5/25f
+        WP9rW1T/a1tU/GpVVQwAAAAAAAAAAGtcVKprW1T/a1tU/8bAvf////////////////////////////j3
+        /v9bPeT/Wz3k/4Vu6/+di+//nYvv/52L7/+di+//nYvv/3Rb6P9bPeT/fWXq////////////Nbf6/wCk
+        +f8nsvr/Zsj7/2bI+/9myPv/Zsj7/2bI+/9Bu/v/AKT5/wCk+f/0+///////////////////////////
+        /////////////4p9eP9rW1T/a1tU/2xdVUIAAAAAAAAAAGtbVHBrW1T/a1tU/6Sblv//////////////
+        //////////////j3/v9bPeT/Wz3k/8O49f///////////////////////////5uI7v9bPeT/fWXq////
+        ////////Nbf6/wCk+f9jx/v///////////////////////////+i3v3/AKT5/wCk+f/0+///////////
+        /////////////////////////////6yjn/9rW1T/a1tU/2pcVH0AAAAAAAAAAGxdUzRrW1T/a1tU/4J0
+        bv////////////////////////////j3/v9bPeT/Wz3k/8O49f///////////////////////////5uI
+        7v9bPeT/fWXq////////////Nbf6/wCk+f9jx/v///////////////////////////+i3v3/AKT5/wCk
+        +f/0+////////////////////////////////////////87Jx/9rW1T/a1tU/2tbVbgAAAAAAAAAAGZm
+        ZgVrW1T0a1tU/2xcVf/z8vL///////////////////////j3/v9bPeT/Wz3k/8O49f//////////////
+        /////////////5uI7v9bPeT/fWXq////////////Nbf6/wCk+f9jx/v/////////////////////////
+        //+i3v3/AKT5/wCk+f/0+////////////////////////////////////////8rEwv9rW1T/a1tU/2tb
+        VO8AAAAAAAAAAAAAAABrW1S/a1tU/2tbVP/Szcv///////////////////////j3/v9bPeT/Wz3k/8O4
+        9f///////////////////////////5uI7v9bPeT/fWXq////////////Nbf6/wCk+f9jx/v/////////
+        //////////////////+i3v3/AKT5/wCk+f/0+///////////////////////////////////xr+9/21e
+        V/9rW1T/a1tU/2pcVM4AAAAAAAAAAAAAAABrWlSFa1tU/2tbVP+xqaX///////////////////////j3
+        /v9bPeT/Wz3k/8O49f///////////////////////////5uI7v9bPeT/fWXq////////////Nbf6/wCk
+        +f9jx/v///////////////////////////+i3v3/AKT5/wCk+f/0+///////////////////////////
+        //+6sq//bFxV/2tbVP9rW1T/a1tT1m9eVR4AAAAAAAAAAAAAAABpXFVLa1tU/2tbVP+Pg37/////////
+        //////////////j3/v9bPeT/Wz3k/6CP7//Ivvb/yL72/8i+9v/Ivvb/yL72/4Vv6/9bPeT/fWXq////
+        ////////Nbf6/wCk+f9CvPv/quH9/6rh/f+q4f3/quH9/6rh/f9sy/z/AKT5/wCk+f/0+///////////
+        /////////f39/6ifmv9rW1T/a1tU/2tbVP9rW1TIZllZFAAAAAAAAAAAAAAAAAAAAABpWloRa1tU/Wtb
+        VP9wYVr//Pv7//////////////////j3/v9bPeT/Wz3k/1s95P9bPeT/Wz3k/1s95P9bPeT/Wz3k/1s9
+        5P9bPeT/fWXq////////////Nbf6/wCk+f8ApPn/AKT5/wCk+f8ApPn/AKT5/wCk+f8ApPn/AKT5/wCk
+        +f/1+//////////////7+vr/nZKO/2tbVP9rW1T/a1tU/2tcVbJmZk0KAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAa1tT1mtbVP9rW1T/4Nzb//////////////////j3/v9bPeT/Wz3k/1s95P9bPeT/Wz3k/1s9
+        5P9bPeT/Wz3k/1s95P9bPeT/rJ3x////////////Nbf6/wCk+f8ApPn/AKT5/wCk+f8ApPn/AKT5/wCk
+        +f8ApPn/AKT5/z66+v////////////b19P+Pg37/a1tU/2tbVP9rW1T/a1tTn4BAQAQAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAa1pUm2tbVP9rW1T/vbaz//////////////////7+///08v3/9PL9//Ty
+        /f/08v3/9PL9//Ty/f/08v3/9PL9//Ty/f/49/7/////////////////8vr//+75///u+f//7vn//+75
+        ///u+f//7vn//+75///u+f//8Pr/////////////8O/u/4Z5dP9rW1T/a1tU/2tbVP9rXFSIAAAAAQAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbFxUYWtbVP9rW1T/nJGM////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ///////////////////////////////////////////////////n5eT/fG5o/2tbVP9rW1T/a1tU/Gta
+        VWkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAblpTJWtbVP9rW1T/dmdh/8jD
+        wP/08/L/////////////////////////////////////////////////////////////////////////
+        /////////////////////////////////////////////////////////////93Z1/91Z2D/a1tU/2tb
+        VP9rW1T2bFxTUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWtb
+        VOlrW1T/a1tU/2tbVP9tXVb/j4N+/7y1sv/q6Of/////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////0czK/3Bh
+        Wv9rW1T/a1tU/2tbVO5qWVU8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAGpbVXhrW1T+a1tU/2tbVP9rW1T/a1tU/2tbVP9rW1T/g3Zw/7GopP/e2tn//v7+////
+        ////////////////////////////////////////////////////////////////////////////////
+        ///Evbv/bV1W/2tbVP9rW1T/a1tU42tZUysAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsXVUhbFxVb2taVL1rW1T7a1tU/2tbVP9rW1T/a1tU/2tb
+        VP9rW1T/eGpj/6Wbl//Szcv/+vn5////////////////////////////////////////////////////
+        /////////////7Wtqv9rW1T/a1tU/2tbVP9rW1TUalhYHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABpWloRbFpUVWtb
+        U6JrW1Twa1tU/2tbVP9rW1T/a1tU/2tbVP9rW1T/cGFa/5KHgv+/uLX/8O/u////////////////////
+        ///////////////////9/f3/p56a/2tbVP9rW1T/a1tU/2pbVcdmWVkUAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAABVVVUDallVPGtbVJFrW1Pia1tU/2tbVP9rW1T/a1tU/2tbVP9rW1T/bFxV/4l8
+        dv+1ran/4d7d//////////////////v6+v+cko3/a1tU/2tbVP9rW1T/a1tUsXFVVQkAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa1xSMmxcVIBrW1XNa1tU/2tb
+        VP9rW1T/a1tU/2tbVP9rW1T/a1tU/4Fzbf+vpqL/2NPR/42BfP9rW1T/a1tU/2tbVP9rW1SYVVVVAwAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAb15VHmtbU2trWlS6a1tU+WtbVP9rW1T/a1tU/2tbVP9rW1T/a1tU/2tbVP9rW1T/a1tU/2pa
+        VH8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbVtbDmtcU1ZrW1Ola1tU7mtbVP9rW1T/a1tU/2tb
+        VP9rW1T8altTZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgEBABGxd
+        VUJqWlOQa1tU22tbVOdsXFVOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//4H///+sEP//AD///6wQ//4AB///rBD/+AAA//+sEP/w
+        AAAP/6wQ/+AAAAH/rBD/wAAAAD+sEP+AAAAAH6wQ/wAAAAAPrBD+AAAAAA+sEPwAAAAAD6wQ+AAAAAAP
+        rBDgAAAAAA+sEMAAAAAAB6wQgAAAAAAHrBAAAAAAAAesEAAAAAAAB6wQAAAAAAADrBAAAAAAAAOsEAAA
+        AAAAA6wQAAAAAAADrBAAAAAAAAOsEIAAAAAAAawQgAAAAAABrBCAAAAAAAGsEIAAAAAAAawQwAAAAAAA
+        rBDAAAAAAACsEMAAAAAAAKwQwAAAAAAArBDAAAAAAACsEOAAAAAAAKwQ4AAAAAAArBDgAAAAAAGsEOAA
+        AAAAA6wQ8AAAAAAHrBDwAAAAAA+sEPAAAAAAP6wQ8AAAAAB/rBDwAAAAAP+sEPgAAAAB/6wQ/AAAAAP/
+        rBD/gAAAB/+sEP/wAAAP/6wQ//8AAB//rBD//+AAf/+sEP///AD//6wQ////gf//rBAoAAAAIAAAAEAA
+        AAABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAABsXFRha1tU7GtbVcFqW1RzalxVJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAbFtVe2tbVP5rW1T/a1tU/2tbVP9rW1T/a1tT1mtcVIhrWVU5gICAAgAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAVVVVA2xbVJVrW1T/bV5X/8K7uf/RzMr/pJqW/3hpY/9rW1T/a1tU/2tb
+        VP9rW1TpalxTnGxcVU5mZk0KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAG1JSQdrW1Spa1tU/29fWf/Oycf//////////////////v7+/+He
+        3f+1ran/iXx2/2tbVP9rW1T/a1tU/2tbVPZqW1W7bFxVb2xYWBoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwYFAQbFxUwGtbVP91ZmD+3trZ////////////////////
+        ////////////////////////6efm/7y0sf+Ogn3/bV1W/2tbVP9rW1T/a1tU/WtbVMZrWlR3ZlVVDwAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaF5VG2tbVNJrW1T/fW9p/+fl5P//////////////
+        ///////////////////////////////////////////////////z8vL/x8G//5uQi/9xYlv/a1tU/2tb
+        VP9rW1SPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGpdVylrW1Tha1tU/4V4cv/w7u7/////////
+        //////////////////////////////////////////////////////////////////////////////r6
+        +v/Evbv/a1tU/2xbVMwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABrXVM3a1tU62tbVP+MgHr/9PPy////
+        ////////////////////////////////////////////////////////////////////////////////
+        //////////////v6+v9vX1n/a1tU+2pVVQwAAAAAAAAAAAAAAAAAAAAAallTTWtbVPVrW1T/mY6K//r5
+        +f///v3/1r8d/9G3AP/RtwD/0bcA/9G3AP/RtwD/07oL//r34//57u//x2xy/8RlbP/EZWz/xGVs/8Rl
+        bP/EZWz/y3d9///+/v///////////4yAev9rW1T/alpSQQAAAAAAAAAAAAAAAGpaVWBrW1T7a1tU/6mg
+        nP/+/v7///////799//RtwD/2cMr/+PUZv/j1Gb/49Rm/9zIPP/RtwD/9vHM//Pg4v/EZWz/0omP/9yj
+        p//co6f/3KOn/85/hf/EZWz//fr6////////////rqai/2tbVP9sW1V7AAAAAAAAAABrW1R5a1tU/2xc
+        Vf+4sa3//////////////////v33/9G3AP/k1Wz/////////////////7OGW/9G3AP/28cz/8+Di/8Rl
+        bP/nwML/////////////////3aaq/8RlbP/9+vr////////////RzMn/a1tU/2pbVLYAAAAAAAAAAGtb
+        VO5rW1T/w726///////////////////////+/ff/0bcA/+TVbP/////////////////s4Zb/0bcA//bx
+        zP/z4OL/xGVs/+fAwv/////////////////dpqr/xGVs//36+v////////////Lw8P9rW1T/a1tU74CA
+        gAIAAAAAa1tUxWtbVP/Z1dP///////////////////////799//RtwD/5NVs/////////////////+zh
+        lv/RtwD/9vHM//Pg4v/EZWz/58DC/////////////////92mqv/EZWz//fr6/////////////////4By
+        bP9rW1T/aF1RLAAAAABqXFSLa1tU/7iwrf///////////////////////v33/9G3AP/dyUH/7eKZ/+3i
+        mf/t4pn/4dBa/9G3AP/28cz/8+Di/8RlbP/Zm6D/58HE/+fBxP/nwcT/04yR/8RlbP/9+vr/////////
+        ////////opeT/2tbVP9qW1NlAAAAAGtbVVFrW1T/louG///////////////////////+/ff/0bcA/9G3
+        AP/RtwD/0bcA/9G3AP/RtwD/0bcB//n12//z4OL/xGVs/8RlbP/EZWz/xGVs/8RlbP/EZWz/x2xy//79
+        /f/////////////////Dvbr/a1tU/2tbU58AAAAAaF1RFmtbVP90ZV///v7+///////////////////+
+        /f/28cz/9vHM//bxzP/28cz/9vHM//bxzP/49dr///////35+f/z4OL/8+Di//Pg4v/z4OL/8+Di//Pg
+        4v/47e7//////////////////////+Xi4f9rW1T/altU2gAAAAAAAAAAa1xT3GtbVP/m4+L/////////
+        /////////////+zp/P/e2Pr/3tj6/97Y+v/e2Pr/3tj6/+fj+////////////9ry/v/M7f7/zO3+/8zt
+        /v/M7f7/zO3+/+L1/v///////////////////////v7+/3VmX/9rW1T+aF1RFgAAAABsWlSha1tU/8S+
+        u//////////////////8/P//YkXl/1s95P9bPeT/Wz3k/1s95P9bPeT/XD7k/+jk+//b8v7/AaT5/wCk
+        +f8ApPn/AKT5/wCk+f8ApPn/C6j5//v+////////////////////////lYmE/2tbVP9rWlRPAAAAAGpc
+        VGdrW1T/o5mU//////////////////r5/v9bPeT/hW7r/72x9P+9sfT/vbH0/5WB7v9bPeT/3tj6/8zt
+        /v8ApPn/WsT7/5nb/f+Z2/3/mdv9/0G7+/8ApPn/9/z///////////////////////+2r6v/a1tU/2pb
+        VIkAAAAAaF1RLGtbVP+Acmz/////////////////+vn+/1s95P+gj+//////////////////u6/0/1s9
+        5P/e2Pr/zO3+/wCk+f+W2v3/////////////////bMv8/wCk+f/3/P///////////////////////9nV
+        0/9rW1T/a1tUxQAAAACAgIACa1tU72tbVP/y8PD////////////6+f7/Wz3k/6CP7///////////////
+        //+7r/T/Wz3k/97Y+v/M7f7/AKT5/5ba/f////////////////9sy/z/AKT5//f8////////////////
+        ////////w726/2tbVP9rW1TuAAAAAAAAAABqW1S2a1tU/9HMyf////////////r5/v9bPeT/oI/v////
+        /////////////7uv9P9bPeT/3tj6/8zt/v8ApPn/ltr9/////////////////2zL/P8ApPn/9/z/////
+        /////////////7ixrf9sXFX/a1tU/2tbVHkAAAAAAAAAAGpcVH1rW1T/r6ej////////////+vn+/1s9
+        5P93Xun/nYvv/52L7/+di+//gmvq/1s95P/e2Pr/zO3+/wCk+f88ufr/Zsj7/2bI+/9myPv/K7P6/wCk
+        +f/3/P////////7+/v+upaH/a1tU/2tbVPxqXFRnAAAAAAAAAAAAAAAAa1tUQ2tbVP+NgXz/////////
+        ///6+f7/Wz3k/1s95P9bPeT/Wz3k/1s95P9bPeT/YkXl/+3q/P/M7f7/AKT5/wCk+f8ApPn/AKT5/wCk
+        +f8ApPn/Ha76//3+///7+vr/nZOO/2tbVP9rWlT4altVVAAAAAAAAAAAAAAAAAAAAAB0XV0La1tU+29f
+        Wf/7+vr/////////////////////////////////////////////////////////////////////////
+        ////////////////////////9vX0/5CEfv9rW1T/bFxU72pZVTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AABsW1TMa1tU/8S9u//6+vr/////////////////////////////////////////////////////////
+        //////////////////////////////Du7v+FeHL/a1tU/2tbVOFqXVcpAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAGtbVI9rW1T/a1tU/3FiW/+bkIv/x8G///Py8v//////////////////////////////
+        ///////////////////////////////////n5eT/fW9p/2tbVP9rW1TSaF5VGwAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAZlVVD2taVHdrW1TGa1tU/WtbVP9rW1T/bV1W/46Cff+8tLH/6efm////
+        ////////////////////////////////////////3trZ/3ZnYf9rW1T/bFxUwHBgUBAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmWVkUalxUXmtcVKprW1Tya1tU/2tb
+        VP9rW1T/f3Fr/6uinv/Y09H//fz8/////////////////9LNy/9xYVv/a1tU/2paVa9xVVUJAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGZm
+        TQpsXFVOalxTnGtbVOlrW1T/a1tU/2tbVP94aWP/pJqW/9HMyv/Cu7n/bV5X/2tbVP9sW1SVVVVVAwAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAgICAAmtZVTlrXFSIa1tT1mtbVP9rW1T/a1tU/2tbVP9rW1T+bFtVewAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAalxVJGpbVHNrW1XBa1tU7Gxc
+        VGEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/g////wA///wAB//4A
+        AD/8AAAH+AAAB/AAAAfgAAADwAAAA4AAAAMAAAADAAAAAQAAAAEAAAABAAAAAQAAAAGAAAAAgAAAAIAA
+        AACAAAAAgAAAAMAAAADAAAABwAAAA8AAAAfgAAAP4AAAH+AAAD/8AAB//4AA///wA////wf/KAAAABgA
+        AAAwAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAa1tTa2xcVfBsXFW1bFpVZmZcUhkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFrWlSFa1tU/4+Dfv+AcWv8a1tU/2tb
+        VP5tXlbMa1xUemxbVS0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAVVVVA2xbVJprW1T/qqCc//7+/v//////6+no/7+4tf+RhoH9bF1W/mtbVP9tXlbia1xTmWpZ
+        U02AVVUGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0XV0LbFxVtWxcVf+5sq//////////
+        ////////////////////////8/Hx/8bAvf+Zjor/cGBa/WtbVP9tXVbxaltUo2heVRsAAAAAAAAAAAAA
+        AAAAAAAAAAAAAGZZWRRtXFbKbV1W/sjCv///////////////////////////////////////////////
+        ////////+vn5/9LNy/+mnJj/bV1W/WtbVIMAAAAAAAAAAAAAAAAAAAAAaFhYIG1eV9pvYFn808/N////
+        ////////////////////////////////////////////////////////////////////////in55/W1d
+        Vr4AAAAAAAAAAAAAAABoXVEsbV5X53NlXvzd2tj//v78/9S8EP/RtwD/0bcA/9G3AP/RtwD/8Oit/+zN
+        0P/EZWz/xGVs/8RlbP/EZWz/yG91//79/f//////raSg/2xcVfaAQEAEAAAAAGxcVEBtXVbzfG5n++jm
+        5f///////v35/9G3AP/v5qf/9vHM//bxzP/Ywij/7eKZ/+fBxP/NfYP/8+Di//Pg4v/rysz/xGVs//77
+        /P//////z8rH/2tbVP9rXFIyAAAAAG1dVe2CdW/98O/u/////////////v35/9G3AP/38tH/////////
+        ///axTL/7eKZ/+fBxP/Qg4n////////////04+T/xGVs//77/P//////8fDv/2tbVP9sW1RtAAAAAG5e
+        Vs+ViYT+/////////////////v35/9G3AP/38tH////////////axTL/7eKZ/+fBxP/Qg4n/////////
+        ///04+T/xGVs//77/P///////////31waftqW1OoAAAAAGxaU5NyY138/v7+/////////////v35/9G3
+        AP/Zwyr/2sUz/9rFM//Tugr/7eOb/+fBxP/Ga3L/0ISJ/9CEif/OfoT/xGVs//78/P///////////6CW
+        kv9tXlflAAAAAGpcU1lrW1T/5ePh//////////////79/+3imf/t4pn/7eKZ/+3imf/t4pr/+/nr//bm
+        5//nwcT/58HE/+fBxP/nwcT/7M3P/////////////////8K7uf9rW1T/alhYHW9eVR5rW1T/w726////
+        /////////////8rA9v+9sfT/vbH0/72x9P++svT/8vD9/+v4//+a2/3/mdv9/5nb/f+Z2/3/rOH9////
+        /////////////+Th4P9rW1T/bFtVVwAAAABtXlfnopeT/////////////Pv+/1s95P92Xej/fGTp/3xk
+        6f9hReX/v7P0/5vb/f8KqPn/M7b6/zO2+v8qs/r/AKT5//r9//////////////7+/v9yY1z8a1tUkQAA
+        AABqW1OofXBp+///////////+/r+/1s95P/h3Pr///////////97Y+n/vbH0/5nb/f8ytvr/////////
+        ///R7/7/AKT5//n9//////////////////+ViYT+bl5WzwAAAABsW1Rta1tU//Hw7///////+/r+/1s9
+        5P/h3Pr///////////97Y+n/vbH0/5nb/f8ytvr////////////R7/7/AKT5//n9//////////////Dv
+        7v+CdW/9bV1V7QAAAABsXVM0a1tU/9DLyf//////+/r+/1s95P/GvPb/3tj6/97Y+v91W+j/vbH0/5nb
+        /f8osvr/zO3+/8zt/v+n4P3/AKT5//n9////////6+no/35wavxsXVX1altURgAAAACAQEAEbV1W9q6m
+        ov//////+/r+/1s95P9bPeT/Wz3k/1s95P9bPeT/ysH2/5nb/f8ApPn/AKT5/wCk+f8ApPn/EKr5//z+
+        ///g3dv/dmdh/G1dVuptWFMxAAAAAAAAAAAAAAAAbFxVv4x/ev3/////////////////////////////
+        /////////////////////////////////////////////9jT0f9xYVv8bV5W32pcVSQAAAAAAAAAAAAA
+        AAAAAAAAa1tUg21dVv2mnJj/0s3L//r5+f//////////////////////////////////////////////
+        ////////yMK//21dVv5tXFbKZllZFAAAAAAAAAAAAAAAAAAAAAAAAAAAaF5VG2pbVKNsXFXwa1tU/3Bg
+        Wv2Zjor+xsC9//Px8f////////////////////////////////+5sq//bFxV/2xcVbV0XV0LAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVVVUDallVPGtcVIhtXVbba1tU/2tbVP6Ie3X9ta2p/+He
+        3f///////v7+/66mov9rW1T/bFpUoWZmZgUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAbFtVLWtcVHpsXVXLa1tU/mtbVP9/cWv7j4N+/2tbVP9rWlSFAAAAAQAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAZlxSGWxaVWZsXFW1bFxV8GtbU2sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8H
+        /0H8AP9B+AAPQfAAA0HgAANBwAADQYAAAUEAAAFBAAABQQAAAUEAAAFBAAAAQQAAAEGAAABBgAAAQYAA
+        AEGAAABBgAABQcAAA0HAAAdBwAAPQfAAH0H/AD9B/+D/QSgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJhW3tvYFn0dWZgsmxbVVdmVVUPAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgICAAnFiW5eCdG705OHg/8a/vf+UiYT0cWFa+Xdo
+        YcptXFVsb15VHgAAAAAAAAAAAAAAAAAAAAAAAAAAbUlJB3NkXbKMgHr09/b2//////////////////r5
+        +f/Szcv/oJeS9XNlXfZzZV7baVxVJwAAAAAAAAAAbVtbDnNjXciZj4n1+/r6////////////////////
+        ///////////////////+/v7/pJqW+WxdVnYAAAAAamBVGHJkXdmnnpn2/f37/9S8E//axTP/2MIo/+XX
+        cP/eqa3/zX2D/9CEif/IcHf//v39/83Ixf92Z2C8AAAAAHJjXOC5sK36//////7++//bxjb///////Xw
+        yv/k1Gf/3KOn//Pf4P//////0IaL//79/f/w7u7/cWFb8gAAAAF0Zl/i4+Df///////+/vv/2cMr//bx
+        zP/u5aL/5NRn/9yjp//px8n/8+Di/85/hf/+/f3//////3hpYvNuWlMldGReo8K7uf////////79/+PU
+        Zv/j1Gb/49Rm//Dorv/qyMv/3KOn/9yjp//eqKz///7+//////+ajoryalxUXmpaVWCbkYzz//////7+
+        //+ikfD/nYvv/52L7//Lwfb/ruL9/2bI+/9myPv/b8z8//7/////////wbq3/3RlXqJuWlMleGli8///
+        ///8/P//d17p/97Y+v/DuPX/nYvv/2fJ+/+i3v3/zO3+/yuz+v/7/v///////+Pg3/90Zl/iAAAAAXFh
+        W/Lw7u7//Pz//35m6v//////3df5/52L7/9nyfv/yuz+//////82t/r/+/7///////+5sK36cmNc4AAA
+        AAB2Z2G+zsnH//z8//9iReX/fGTp/3Vb6P+jkvD/Z8n7/yiy+v8ztvr/E6v5//v9/v+to5/4c2Nd3m1b
+        UhwAAAAAbF1WdqSalvn+/v7///////////////////////////////////////v6+v+Zj4r2c2ReyW1b
+        Ww4AAAAAAAAAAGlcVSdzZV7bc2Vd9qCXkvXSzcv/+vn5//////////////////f29v+MgHr0c2Rdsm1J
+        SQcAAAAAAAAAAAAAAAAAAAAAAAAAAG9eVR5rW1NrdGRexnBhWfiShoHvxr+9/uTh4P+CdG70c2RdmYCA
+        gAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmVVUPbFtVV3VmYLJvYFn0cmFbewAA
+        AAAAAAAAAAAAAAAAAAAAAAAA+D+sQeAHrEHAAaxBgAGsQQABrEEAAKxBAACsQQAArEEAAKxBAACsQQAA
+        rEGAAKxBgAGsQYADrEHgB6xB/B+sQQ==
+</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/Models/LauncherSession.cs b/Models/LauncherSession.cs
new file mode 100644
index 0000000..784b2d8
--- /dev/null
+++ b/Models/LauncherSession.cs
@@ -0,0 +1,42 @@
+using System.Collections.Generic;
+using System.Drawing;
+
+namespace FizzyLauncher.Models
+{
+    public class LauncherSession
+    {
+        public class HotKeyOptions
+        {
+            public bool IsCtrl { get; set; } = false;
+            public bool IsAlt { get; set; } = false;
+            public bool IsShift { get; set; } = false;
+            public int Key { get; set; } = (int)System.Windows.Forms.Keys.None;
+
+            public int ModifierCode => ((this.IsAlt ? 1 : 0) + (this.IsCtrl ? 2 : 0) + (this.IsShift ? 4 : 0));
+
+            public System.Windows.Forms.Keys KeyCode => (System.Windows.Forms.Keys)this.Key;
+        }
+
+        public enum AutoSaveOption
+        {
+            Prompt = 0,
+            Yes,
+            No
+        }
+
+        public int DefaultHeight { get; set; } = 280;
+        public HotKeyOptions HotKey { get; set; } = null;
+
+        public bool AlwaysOnTop { get; set; } = false;
+        public bool EnableAnimation { get; set; } = false;
+        public bool EnableBigIconInFolder { get; set; } = false;
+
+        public bool HideOnClose { get; set; } = false;
+        public bool HideOnClick { get; set; } = false;
+        public AutoSaveOption AutoSave { get; set; } =  AutoSaveOption.Prompt;
+        public List<TileGroupModel> Groups { get; set; } = new List<TileGroupModel>();
+
+        public Point StartPosition { get; set; } = Point.Empty;
+
+    }
+}
\ No newline at end of file
diff --git a/Models/TileGroupModel.cs b/Models/TileGroupModel.cs
new file mode 100644
index 0000000..cdf04a6
--- /dev/null
+++ b/Models/TileGroupModel.cs
@@ -0,0 +1,14 @@
+using System.Collections.Generic;
+using System.Drawing;
+
+namespace FizzyLauncher.Models
+{
+    public class TileGroupModel
+    {
+        public string Title { get; set; }
+        public bool IsExpanded { get; set; } = false;
+        public bool IsExclusive { get; set; } = false;
+        public List<TileModel> Items { get; set; } = new List<TileModel>();
+        public Size GridSize { get; set; } = new Size(0, 0);
+    }
+}
\ No newline at end of file
diff --git a/Models/TileModel.cs b/Models/TileModel.cs
new file mode 100644
index 0000000..72f8411
--- /dev/null
+++ b/Models/TileModel.cs
@@ -0,0 +1,100 @@
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Drawing;
+
+namespace FizzyLauncher.Models
+{
+    public class TileModel
+    {
+        public string Title { get; set; }
+        public string ProcessFilename { get; set; }
+        public string ProcessArgument { get; set; }
+        public string ProcessWorkingDirectory { get; set; }
+        public ProcessWindowStyle ProcessWindowStyle { get; set; } = ProcessWindowStyle.Normal;
+        public bool ProcessAsAdmin { get; set; } = false;
+        public Point Position { get; set; }
+
+        public bool IsGroup { get; set; } = false;
+        public List<TileModel> Items { get; set; } = new List<TileModel>();
+
+        public override string ToString() => this.Title ?? string.Empty;
+
+        public string CleanProcessFilename => (string.IsNullOrWhiteSpace(this.ProcessFilename) ? string.Empty : resolvePath(this.ProcessFilename));
+
+        public string CleanProcessArgument => (string.IsNullOrWhiteSpace(this.ProcessArgument) ? string.Empty : resolvePath(this.ProcessArgument));
+
+        public string CleanProcessWorkingDirectory => (string.IsNullOrWhiteSpace(this.ProcessWorkingDirectory) ? string.Empty : resolvePath(this.ProcessWorkingDirectory));
+
+        protected string resolvePath(string value)
+        {
+            string rv = Environment.ExpandEnvironmentVariables(value);
+
+            rv = resolveFirstPath(rv);
+            rv = resolveLastPath(rv);
+
+            return rv;
+        }
+
+        protected string resolveFirstPath(string value)
+        {
+            const string last = "%FIRST%";
+            if (!value.Contains(last))
+            {
+                return value;
+            }
+
+            string head = value.Substring(0, value.IndexOf(last));
+            string tail = value.Substring(value.IndexOf(last) + last.Length);
+
+            string[] dirList = new string[0];
+
+            try
+            {
+                dirList = System.IO.Directory.GetDirectories(head, "*", System.IO.SearchOption.TopDirectoryOnly);
+            }
+            catch
+            {
+                // do nothing
+            }
+
+            if (dirList.Length <= 0)
+            {
+                return value;
+            }
+
+            return dirList[0] + tail;
+        }
+
+        protected string resolveLastPath(string value)
+        {
+            const string last = "%LAST%";
+            if (!value.Contains(last))
+            {
+                return value;
+            }
+
+            string head = value.Substring(0, value.IndexOf(last));
+            string tail = value.Substring(value.IndexOf(last) + last.Length);
+
+            string[] dirList = new string[0];
+
+            try
+            {
+                dirList = System.IO.Directory.GetDirectories(head, "*", System.IO.SearchOption.TopDirectoryOnly);
+            }
+            catch
+            {
+                // do nothing
+            }
+
+            if (dirList.Length <= 0)
+            {
+                return value;
+            }
+
+            return dirList[(dirList.Length - 1)] + tail;
+        }
+
+    }
+}
diff --git a/OptionsForm.cs b/OptionsForm.cs
new file mode 100644
index 0000000..29aff71
--- /dev/null
+++ b/OptionsForm.cs
@@ -0,0 +1,279 @@
+using FizzyLauncher.Models;
+using RyzStudio.Windows.ThemedForms;
+using System;
+
+namespace FizzyLauncher
+{
+    public class OptionsForm : TDialogForm
+    {
+        private System.Windows.Forms.Label label1;
+        private TButton button1;
+        private TYesNoPickerBox pickerBox2;
+        private System.Windows.Forms.Label label6;
+        private TYesNoPickerBox pickerBox3;
+        private System.Windows.Forms.Label label7;
+        private System.Windows.Forms.Label label8;
+        private TPickerBox pickerBox1;
+        private RyzStudio.Windows.Forms.THorizontalSeparator tHorizontalSeparator1;
+        private TKeyCodeTextBox textBox1;
+
+
+        public OptionsForm(MainForm parent) : base()
+        {
+            InitializeComponent();
+
+            parentForm = parent;
+
+            pickerBox1.ComboBox.Items.Clear();
+            foreach (string item in Enum.GetNames(typeof(LauncherSession.AutoSaveOption)))
+            {
+                pickerBox1.ComboBox.Items.Add(item);
+            }
+
+            if (pickerBox1.ComboBox.Items.Count > 0) pickerBox1.ComboBox.SelectedIndex = 0;
+
+        }
+
+        private void InitializeComponent()
+        {
+            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(OptionsForm));
+            RyzStudio.Windows.ThemedForms.TKeyCodeTextBox.Results results1 = new RyzStudio.Windows.ThemedForms.TKeyCodeTextBox.Results();
+            this.label1 = new System.Windows.Forms.Label();
+            this.button1 = new RyzStudio.Windows.ThemedForms.TButton();
+            this.pickerBox2 = new RyzStudio.Windows.ThemedForms.TYesNoPickerBox();
+            this.label6 = new System.Windows.Forms.Label();
+            this.pickerBox3 = new RyzStudio.Windows.ThemedForms.TYesNoPickerBox();
+            this.label7 = new System.Windows.Forms.Label();
+            this.label8 = new System.Windows.Forms.Label();
+            this.pickerBox1 = new RyzStudio.Windows.ThemedForms.TPickerBox();
+            this.tHorizontalSeparator1 = new RyzStudio.Windows.Forms.THorizontalSeparator();
+            this.textBox1 = new RyzStudio.Windows.ThemedForms.TKeyCodeTextBox();
+            this.SuspendLayout();
+            // 
+            // label1
+            // 
+            this.label1.AutoSize = true;
+            this.label1.BackColor = System.Drawing.Color.Transparent;
+            this.label1.ForeColor = System.Drawing.SystemColors.ControlText;
+            this.label1.Location = new System.Drawing.Point(10, 21);
+            this.label1.Margin = new System.Windows.Forms.Padding(0);
+            this.label1.Name = "label1";
+            this.label1.Padding = new System.Windows.Forms.Padding(0, 9, 0, 10);
+            this.label1.Size = new System.Drawing.Size(107, 34);
+            this.label1.TabIndex = 153;
+            this.label1.Text = "Show/Hide Hotkey";
+            this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+            // 
+            // button1
+            // 
+            this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+            this.button1.BackColor = System.Drawing.Color.Transparent;
+            this.button1.DefaultImage = null;
+            this.button1.DownImage = null;
+            this.button1.IsSelected = false;
+            this.button1.LabelText = "&Save";
+            this.button1.Location = new System.Drawing.Point(241, 469);
+            this.button1.Margin = new System.Windows.Forms.Padding(10);
+            this.button1.Name = "button1";
+            this.button1.OverImage = null;
+            this.button1.Padding = new System.Windows.Forms.Padding(4, 4, 3, 3);
+            this.button1.Size = new System.Drawing.Size(128, 32);
+            this.button1.TabIndex = 173;
+            this.button1.Click += new System.EventHandler(this.button1_Click);
+            // 
+            // pickerBox2
+            // 
+            this.pickerBox2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+            this.pickerBox2.BackColor = System.Drawing.Color.Transparent;
+            this.pickerBox2.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
+            this.pickerBox2.Location = new System.Drawing.Point(285, 103);
+            this.pickerBox2.Margin = new System.Windows.Forms.Padding(10, 4, 10, 4);
+            this.pickerBox2.Name = "pickerBox2";
+            this.pickerBox2.Padding = new System.Windows.Forms.Padding(10, 6, 7, 5);
+            this.pickerBox2.Size = new System.Drawing.Size(84, 34);
+            this.pickerBox2.SubmitButton = null;
+            this.pickerBox2.TabIndex = 183;
+            this.pickerBox2.Value = true;
+            // 
+            // label6
+            // 
+            this.label6.AutoSize = true;
+            this.label6.BackColor = System.Drawing.Color.Transparent;
+            this.label6.ForeColor = System.Drawing.SystemColors.ControlText;
+            this.label6.Location = new System.Drawing.Point(10, 103);
+            this.label6.Margin = new System.Windows.Forms.Padding(0);
+            this.label6.Name = "label6";
+            this.label6.Padding = new System.Windows.Forms.Padding(0, 9, 0, 10);
+            this.label6.Size = new System.Drawing.Size(83, 34);
+            this.label6.TabIndex = 182;
+            this.label6.Text = "Hide On Close";
+            this.label6.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+            // 
+            // pickerBox3
+            // 
+            this.pickerBox3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+            this.pickerBox3.BackColor = System.Drawing.Color.Transparent;
+            this.pickerBox3.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
+            this.pickerBox3.Location = new System.Drawing.Point(285, 144);
+            this.pickerBox3.Margin = new System.Windows.Forms.Padding(10, 4, 10, 4);
+            this.pickerBox3.Name = "pickerBox3";
+            this.pickerBox3.Padding = new System.Windows.Forms.Padding(10, 6, 7, 5);
+            this.pickerBox3.Size = new System.Drawing.Size(84, 34);
+            this.pickerBox3.SubmitButton = null;
+            this.pickerBox3.TabIndex = 185;
+            this.pickerBox3.Value = true;
+            // 
+            // label7
+            // 
+            this.label7.AutoSize = true;
+            this.label7.BackColor = System.Drawing.Color.Transparent;
+            this.label7.ForeColor = System.Drawing.SystemColors.ControlText;
+            this.label7.Location = new System.Drawing.Point(10, 144);
+            this.label7.Margin = new System.Windows.Forms.Padding(0);
+            this.label7.Name = "label7";
+            this.label7.Padding = new System.Windows.Forms.Padding(0, 9, 0, 10);
+            this.label7.Size = new System.Drawing.Size(95, 34);
+            this.label7.TabIndex = 184;
+            this.label7.Text = "Hide On Execute";
+            this.label7.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+            // 
+            // label8
+            // 
+            this.label8.AutoSize = true;
+            this.label8.BackColor = System.Drawing.Color.Transparent;
+            this.label8.ForeColor = System.Drawing.SystemColors.ControlText;
+            this.label8.Location = new System.Drawing.Point(10, 62);
+            this.label8.Margin = new System.Windows.Forms.Padding(0);
+            this.label8.Name = "label8";
+            this.label8.Padding = new System.Windows.Forms.Padding(0, 9, 0, 10);
+            this.label8.Size = new System.Drawing.Size(60, 34);
+            this.label8.TabIndex = 186;
+            this.label8.Text = "Auto Save";
+            this.label8.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+            // 
+            // pickerBox1
+            // 
+            this.pickerBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+            this.pickerBox1.BackColor = System.Drawing.Color.Transparent;
+            this.pickerBox1.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
+            this.pickerBox1.Location = new System.Drawing.Point(285, 62);
+            this.pickerBox1.Margin = new System.Windows.Forms.Padding(10, 4, 10, 4);
+            this.pickerBox1.Name = "pickerBox1";
+            this.pickerBox1.Padding = new System.Windows.Forms.Padding(10, 6, 7, 5);
+            this.pickerBox1.Size = new System.Drawing.Size(84, 34);
+            this.pickerBox1.SubmitButton = null;
+            this.pickerBox1.TabIndex = 187;
+            // 
+            // tHorizontalSeparator1
+            // 
+            this.tHorizontalSeparator1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.tHorizontalSeparator1.AutoScrollMargin = new System.Drawing.Size(0, 0);
+            this.tHorizontalSeparator1.AutoScrollMinSize = new System.Drawing.Size(0, 0);
+            this.tHorizontalSeparator1.BackColor = System.Drawing.Color.Transparent;
+            this.tHorizontalSeparator1.Location = new System.Drawing.Point(10, 437);
+            this.tHorizontalSeparator1.Margin = new System.Windows.Forms.Padding(10, 0, 10, 0);
+            this.tHorizontalSeparator1.MaximumSize = new System.Drawing.Size(4920, 2);
+            this.tHorizontalSeparator1.MinimumSize = new System.Drawing.Size(0, 22);
+            this.tHorizontalSeparator1.Name = "tHorizontalSeparator1";
+            this.tHorizontalSeparator1.Padding = new System.Windows.Forms.Padding(0, 10, 0, 10);
+            this.tHorizontalSeparator1.Size = new System.Drawing.Size(364, 22);
+            this.tHorizontalSeparator1.TabIndex = 188;
+            // 
+            // textBox1
+            // 
+            this.textBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.textBox1.BackColor = System.Drawing.Color.Transparent;
+            this.textBox1.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
+            this.textBox1.HighlightImage = ((System.Drawing.Image)(resources.GetObject("textBox1.HighlightImage")));
+            results1.IsAlt = false;
+            results1.IsCtrl = false;
+            results1.IsShift = false;
+            results1.Key = System.Windows.Forms.Keys.None;
+            this.textBox1.KeyCodeResults = results1;
+            this.textBox1.Location = new System.Drawing.Point(192, 20);
+            this.textBox1.Margin = new System.Windows.Forms.Padding(10, 3, 3, 3);
+            this.textBox1.Name = "textBox1";
+            this.textBox1.NormalImage = ((System.Drawing.Image)(resources.GetObject("textBox1.NormalImage")));
+            this.textBox1.Padding = new System.Windows.Forms.Padding(10, 10, 9, 9);
+            this.textBox1.Size = new System.Drawing.Size(177, 35);
+            this.textBox1.SubmitButton = null;
+            this.textBox1.TabIndex = 189;
+            this.textBox1.UseSystemPasswordChar = false;
+            // 
+            // OptionsForm
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.ClientSize = new System.Drawing.Size(384, 521);
+            this.Controls.Add(this.textBox1);
+            this.Controls.Add(this.tHorizontalSeparator1);
+            this.Controls.Add(this.pickerBox1);
+            this.Controls.Add(this.label8);
+            this.Controls.Add(this.pickerBox3);
+            this.Controls.Add(this.label7);
+            this.Controls.Add(this.pickerBox2);
+            this.Controls.Add(this.label6);
+            this.Controls.Add(this.button1);
+            this.Controls.Add(this.label1);
+            this.MinimumSize = new System.Drawing.Size(400, 560);
+            this.Name = "OptionsForm";
+            this.Text = "Options";
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        protected override void OnShown(EventArgs e)
+        {
+            base.OnShown(e);
+
+            if (parentForm == null)
+            {
+                return;
+            }
+
+            if (parentForm.CurrentSession == null)
+            {
+                return;
+            }
+
+            // hotkey
+            if (parentForm.CurrentSession.HotKey != null)
+            {
+                textBox1.UpdateKeyCode(parentForm.CurrentSession.HotKey.IsCtrl, parentForm.CurrentSession.HotKey.IsAlt, parentForm.CurrentSession.HotKey.IsShift, parentForm.CurrentSession.HotKey.KeyCode);
+            }
+
+            pickerBox1.ComboBox.SelectedIndex = (int)parentForm.CurrentSession.AutoSave;
+            pickerBox2.Value = parentForm.CurrentSession.HideOnClose;
+            pickerBox3.Value = parentForm.CurrentSession.HideOnClick;
+        }
+
+
+        public MainForm parentForm { get; set; } = null;
+
+
+        private void button1_Click(object sender, EventArgs e)
+        {
+            if (parentForm != null)
+            {
+                if (parentForm.CurrentSession == null) parentForm.CurrentSession = new LauncherSession();
+                if (parentForm.CurrentSession.HotKey == null) parentForm.CurrentSession.HotKey = new LauncherSession.HotKeyOptions();
+
+                parentForm.CurrentSession.HotKey.IsCtrl = textBox1.KeyCodeResults.IsCtrl;
+                parentForm.CurrentSession.HotKey.IsAlt = textBox1.KeyCodeResults.IsAlt;
+                parentForm.CurrentSession.HotKey.IsShift = textBox1.KeyCodeResults.IsShift;
+                parentForm.CurrentSession.HotKey.Key = textBox1.KeyCodeResults.KeyCode;
+
+                parentForm.CurrentSession.AutoSave = (LauncherSession.AutoSaveOption)pickerBox1.ComboBox.SelectedIndex;
+                parentForm.CurrentSession.HideOnClose = pickerBox2.Value;
+                parentForm.CurrentSession.HideOnClick = pickerBox3.Value;
+
+            }
+
+            this.Close();
+        }
+
+    }
+}
\ No newline at end of file
diff --git a/OptionsForm.resx b/OptionsForm.resx
new file mode 100644
index 0000000..e3d054b
--- /dev/null
+++ b/OptionsForm.resx
@@ -0,0 +1,80 @@
+<root>
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="textBox1.HighlightImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAAA4AAAAQCAYAAAAmlE46AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+        vQAADr0BR/uQrQAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAClSURBVDhP7dI/
+        DgFBGIbxSVTKjcRx3MLqXYCOjkocQcMF3MAZOIKaE5AthOexf2QnbJQKb/JLJvO9XzLFhCgtbHDBveB5
+        DWcfM8ANC0wKnr1LUUsbHXSxxBlJxDtnduy6E04on/Utd0IPOxwxxBT9iHfO7Nh155kV9vmxMXbsVvkv
+        vvIji4f82Bg7tcUxrpih/NyxOeyMUMVPu0WGd39TzuzQDeEB5/ZKvTSyulEAAAAASUVORK5CYII=
+</value>
+  </data>
+  <data name="textBox1.NormalImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAAA4AAAAQCAYAAAAmlE46AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+        vQAADr0BR/uQrQAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAADTSURBVDhP7ZI7
+        CsJQEEUfWFmK4HLchdpnA9ppp5W4BBtdQNyBC0ilRf6VdVyBwUL03JdXxC/YWThwmDcz94YJjKmH7/uN
+        OI7XaZqekiS5Cr1hpZmTPQemAeILeU4eC/dWr+9kVQRB0MzzvB2GYQfBAsExiqJWHfU0k0ZaeQyNAuxa
+        X1CYLMu6/MOW4kD2YAK9B9TznGYrj12XVZY0drb4ENJI68q/sR4/YoS9K9+GNHdGLmIEJV+cku1xP4Jh
+        Ri7JQ2erDp3mBs7w6jaFZht74MaYGwmLbkeRGexGAAAAAElFTkSuQmCC
+</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/Program.cs b/Program.cs
new file mode 100644
index 0000000..71f4564
--- /dev/null
+++ b/Program.cs
@@ -0,0 +1,23 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace FizzyLauncher
+{
+    static class Program
+    {
+        /// <summary>
+        ///  The main entry point for the application.
+        /// </summary>
+        [STAThread]
+        static void Main()
+        {
+            Application.SetHighDpiMode(HighDpiMode.SystemAware);
+            Application.EnableVisualStyles();
+            Application.SetCompatibleTextRenderingDefault(false);
+            Application.Run(new MainForm());
+        }
+    }
+}
diff --git a/Resources/UI/arrow_down.png b/Resources/UI/arrow_down.png
new file mode 100644
index 0000000000000000000000000000000000000000..cccf233e96a5deccc73a84bdfff320ebbdfafc31
GIT binary patch
literal 601
zcmV-f0;c_mP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10p>|W
zK~y-6eN#PaR6!Iy=Mro-30PSKiIpPraGR~|R%2l*e}HHL+OCNp+H6D%i7rT@MYhmh
z(i)A;{sSL-=OJm7fImQkE@*a-h4bX)1w7SoKjxlu?hH{wQ52b^B}r`n^C|oVz%I#t
z2q9MMSsr4HCnWU%+yd|oz>cIn03dl5zyirxNiRv>2_gLYcR^}?3*aKjhojMGz13>{
ztWL`FykTamX7)hRfaI0(61e-OyZ?6gt940r#26Q2jEBSF@Hqf5Y5oXcErhUEE4~H*
zA%r*8xVv{r-Uo2Ol40LRqtSYOnxth(%k}tpJbohSK+=*Ww|DBA|A%I?`2&AVZX1Bp
zrQ0R#;c)m^l2w>kjPX$^DPfP~{1hsyOqeEluPBOBBnbdTQEW-N0pNO_%@lzBv}XW7
z2;r5xpOo~B<k!TY4WN@{+3T{7<T*+E2H-t_g*?w2WirdM9)OOdIZ1P=xmS@nE$K3V
zT_f2iIcsLCRcfhW!^}3T&56-nk~1Xx004L2h%p|<7#ELweiZeGWJym)(g47=yLYQ{
zO5}OoaQ7~NZAk+&TLF%Lrl%xtOFAI=ZZesCO6l_?FOi&?OeQbPY~{#js!<G*Zc1vC
nJOhA|K9l@Faw~*TRO|l$hQb)jyjdwG00000NkvXXu0mjf^)LpI

literal 0
HcmV?d00001

diff --git a/Resources/UI/arrow_down2.png b/Resources/UI/arrow_down2.png
new file mode 100644
index 0000000000000000000000000000000000000000..5b0b11556cd01e9e14cfc44d5acb34d204a173a1
GIT binary patch
literal 417
zcmV;S0bc%zP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10WL{I
zK~y-6jnlm@#8D6h@SlxrVbQ8YCt<w?(b&oZh>B8ZG=hYV6`zG(JOYKMKq6{25g!Gc
zP~6$wzw0k?l1XmP%$dxcdoI5*fj!*fHR1+M)brw=!nqnn3wXu_?jtvfX$;~7%lMFq
zukeXA^p#9j!#Y|~TP-G!LOfF<%+ZJ@`)y((h_#a9*@zq)p&2JF?D3DWFC%i)@Pyq8
zCZ&bF|6}|%-a<23!LaVO+hcE|Qs64s^7A_P80q!%DWM;$7%JpWF^{>jac*&zaZC8Z
zL&R5bMVw0p)0CE2`=d#jxL;aglVs19WRe^QI4t2eL({SLVGxay;vBz>MAynK$t3x8
z1lKlD$IAI<+QA}TBm><=ZVXcxz%f>2pQ(sCc5xkzUgO*p)-B>2nOsV+E0#r300000
LNkvXXu0mjf{w}h~

literal 0
HcmV?d00001

diff --git a/Resources/UI/arrow_up.png b/Resources/UI/arrow_up.png
new file mode 100644
index 0000000000000000000000000000000000000000..a08438ba358ad09ba06ed091b453a749822880e9
GIT binary patch
literal 590
zcmV-U0<ryxP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10ozGL
zK~y-6jZ?d7R8bUNYa=#e@&^(t#e2kQrnVc6h4}>q6HrW}CN{B|2nrHM@L9~@7lgD%
zV>5r?W%d~)jS|QQXp9#$bC=DTaC22~Rhxa*eynxQA!-<nM&~5WOKJm{N$D>Dwn+9v
z2(ilNB#1E{m-H0C4FF#OY)aY&0FtKx%#xgz^qS<|5W>&H2C4WhfD0ra6h*PtYPEh;
zC*^tGFtcSdyDw=#^75n!-2J7y|8n;$bxC!^80TV)2gBj;82~V8{s>?-gs@sAyZdu9
zW0qx$wS0%<3V`#L4Et6T#afMY8^B^&mbX%Ti1B#*Skj)Pc}s3@RyC)BF3DYzy8yb?
zCe3DZKbhP%04FDICym!q@f!dm0HYLl-Ti81k!_MQhRRhYe3$en%d!O}WLdUA@*&Cn
zx~azi?4)}J0E7_M0jwt}005FDfR$<?$up9648VH;vw5C3>fQf^7~=^^mjG-T$v(+x
zGh40`N%lzg>Ul}`NKTRLBdz)(#&{58ocoXIM;?-;Np~a-0BpE>=WlZIJa4#r2f&7;
zftf7<e}1MXByUREBl)f@%TMX}EXj)`r^>Q?WoAo9K2vSQAnCfKHpx=}DCslF4<vgb
cgi)3M8%|0O&HO-)KL7v#07*qoM6N<$g0V#Ue*gdg

literal 0
HcmV?d00001

diff --git a/Resources/UI/arrow_up2.png b/Resources/UI/arrow_up2.png
new file mode 100644
index 0000000000000000000000000000000000000000..07c1797bf4de4fbe3e64cb44f2e1ebf9e1a99805
GIT binary patch
literal 410
zcmV;L0cHM)P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10VhdB
zK~y-6jnlm@#6c7V@E?&aEFMGR<2l&IR(cu<rBI5XQL*B)+7@r%E1m+0s1+(=t%gk~
z<}T}RBu;XZ$-Vd7nK^TY-x$RfZqSUlMhzpy=B|!)DVk>Sj8oi2Z4ea<-~bDFQy^dB
z9n0v=oUDu$w4%4vS=<ZqM21*IHHK`r6Qhw>&NS~}H<Mot&M--^$IP+k@ewg!sFm@A
zO_JJ&e~|AZazl=A1r14@Hl~A6$9Y6Oa#MwCG<y7eO47TpV+kjbo52HKWsti<8)p$Y
z9OJq>j#!a|`7in~jti1KTYl=$#$-ehYr*-l_HHDq|JePPk@&W9OHwy?ow9EOeObBq
znKm$o7fHO^s10EZ{n*E%!e{Elh~%)V7}Sh)O<1=RpF<x|X2`42&;S4c07*qoM6N<$
Ef({U`lK=n!

literal 0
HcmV?d00001

diff --git a/Resources/UI/close.png b/Resources/UI/close.png
new file mode 100644
index 0000000000000000000000000000000000000000..25fc63244c4ebb4d67ac4fe0f893e9c281eb1584
GIT binary patch
literal 367
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9F5he4R}c>anMprB-l
zYeY$Kep*R+Vo@qXd3m{BW?pu2a$-TMUVc&f>~}U&Kt+E%T^vI!dZ$iy^gC=I;CkO>
z<pYUO)l+@9r|7QmxU;gGZPQb!fX;Uo4xydF3KLiLyUM0`WE_sKwE6b=dqq#x%5_(c
zJ<PfyUMls9YX{T32HC?QOxF)ccW#r}@i97UshR5{UR%p><|#+zzjR7P%Dh^VpUb|W
zuaP%kWos0J=myW7@><mk-aGK#VOrZQ{lM^PAG4BEDPIlK_sm^v@01Qr4$rVW5Ggi4
zJ+IH&<7l+n?b5PV{?dDe6Rol*9!)M?Z@0zO=W%VEOX<Q}j7y%JOwVDgUGLzMQ-74{
z_P(vG?Rqj_RsAzq-gqVOo(Zwo^8CVC;|HRpv-Ul!-~V}Y)kju8Rng2BAC$fT!-2um
L)z4*}Q$iB}b%d0U

literal 0
HcmV?d00001

diff --git a/Resources/UI/close2.png b/Resources/UI/close2.png
new file mode 100644
index 0000000000000000000000000000000000000000..c02cdf0e09c2d9a8c5c6283505b31c941f7b7f5d
GIT binary patch
literal 468
zcmV;_0W1EAP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10bxl*
zK~y-6jgwDG!(b4_e=m)Hj-UilO2wT^H#X2qR7$H<KEZS3B9>OD^ccms&;z)#hy{b*
zK+rVfq7iFbYTj;U-kW(de4moz(*yIY0~`T9#gGCISjqXh_|U|)P+CN7m@nf5Wmi6M
zWa4_~wtrD@IsmU>Q^1)A_(doGfxIuk_m<Vh)n?g1zn0Os+AJ^QE;M+nHTFu<C<$8~
zBl3*MOTt#CB#qu`jlFsP!qvBigK-kJdcb)SjsynK2D)3r!T8?>0<*a9lIrOvvdcW(
z3*!BYpKdExm?9FgjTzb|^+zpZE;uky5<Xq!wtLfCX6@vC{lmb`yI64WUTf^;;%*S{
zyCAMOpbNC~+Ugayhl7`iStW@3PDGiAvLNoeiCJZPIC%MY1%TbVo9EeBV9e!a9i&*c
zwyd}kQ%&jv51{&M*!+2(1;wg^?tQG}(4+%8!>r(URtmZ|W$qhAV}!e^5dtj$0000<
KMNUMnLSTZlBh&@}

literal 0
HcmV?d00001

diff --git a/Resources/UI/edit.png b/Resources/UI/edit.png
new file mode 100644
index 0000000000000000000000000000000000000000..031e3f604221f0e7d68be875e68412c8b19e089e
GIT binary patch
literal 612
zcmV-q0-ODbP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00009a7bBm000ip
z000ip0UQ`76951J8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10r5#h
zK~y-6b(6nqR6!8OKi}oBiAg2tBvuhw&!o6IU=fXlsRgYxg|;yfK@k%>N&JP;!hkk{
zRVu+~Z1NxY$nNDxqXYy=r$G<AyB(YN<mG%$wd~GkX1+5!qR*Pm=1DV~F|$cvB)|Rw
zY)D%5-p8`PibIU?keNLMt^(hIbu-%mkTeQRNg6V<=aQ~_?|=Udki+kQ2}$?b?e<cm
z(fC!)lx5j~b8g-_ciYT1C7mmR5JFf9A#_3r=ldn~Ta0l!#@OB3+Ij+@T=OSj(R;sG
z1+`kO)16M|Qm@y$Gd@24HH5Gr=@xLx<qiAMZnu~IlksA=+kGSHa;;W-4AATK?wi@Z
zna#Mo+w1+B3pl0p02l`L%<L7w*x1<5yvdUeI9hbO3YIhs>`A&=uh-v}Ty`Xl)F_Rz
z44c^_Nk<CUd;hXZq62pGIRmi0y*-*zS_TSuwhESX9N2Zh2Vg48vH^gU(uKV2Z#n$B
zqQb*wb{5!hl2#=RIp^l{0DF?|I_D;;U;s0_A!$(3DgYsbr!mHEjB&aO=*xcKBe`79
zteI^BYaxV%LQdJTEE@<REC6d}w&|RkgMXK4S<*E#+n4k{rPRuwPe?i=X)vYq%sDrA
yV43<#^k#O&%qArr17v2OC4H3i!h7E=`~Ly1e;M$j$(1+&0000<MNUMnLSTX}h8gJq

literal 0
HcmV?d00001

diff --git a/Resources/UI/edit2.png b/Resources/UI/edit2.png
new file mode 100644
index 0000000000000000000000000000000000000000..b9e93ab30d4ed2c5793f4eab9ad7689ab26568fc
GIT binary patch
literal 419
zcmV;U0bKrxP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00009a7bBm000ip
z000ip0UQ`76951J8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10We8K
zK~y-6jnlg>L{SvR@t;JdFsO8D5|@|IhypJ#m5!Q1H8FZd#HA7)3J*ZxDUgU4a4Co}
z6%!PDjXBPkVI?QoXRZBTXYKENoA#K*7Oqi`=L%I!<Tv+Z)`i%#h!>pUHfp1o!65dr
zj5j&>0`DlJ@0ZDnSVJTB7P7_NfaiVz^D!SywwsB`NR+!kQ#inIyjOx5Ckgh{VQeVj
z0iQU{9OoIEB(;zJ0Y6|iQ#-~b)Fg5Kf){f23TnN6{>m)8g&{m*6^9+BY&*gz?lWI5
zb>L1UgQ-d)7Nbzc2kyGS{gQ}Pl06$*IxI$$kxnCHJ(zE6??ht03)GA@Bhj*QLsGZc
z&M9gc=-bNq%d~+dyy6@;Q5(ZF2C#<}xyzJ|3CUrX(WoBls<3W0z5w(WQ9cjxl3D-&
N002ovPDHLkV1gdCtIYra

literal 0
HcmV?d00001

diff --git a/Resources/UI/file.png b/Resources/UI/file.png
new file mode 100644
index 0000000000000000000000000000000000000000..d0c9e5830ade13c518f1a0a7fb5c4e4f20407e41
GIT binary patch
literal 372
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl
z_H+M9WCij$3p^r=85sBufiR<}hF1en1E;5pV~B-+@}K|z?GJx_eO>q8-{0o#jg5}n
z9g>X_tOiC#_t=80Zr!@IUqOk7N1;}M!R*1StE;a!<V<){v_V7b1hbR^XUKL*kM=`6
zj^+>K12(Z}++-JXWeQ&xW63z>H+#w~#;bXZn+`j)9pFh|njA5wmragwuLSFoy^UXf
z-QJ$R*||lK?E$O9ZJ!1+Yvz}S9d3O--Y>s=VUUaD2I&<qnFXYc4GljszMSq5#jeH9
z$+N)zKl9;*99k{nG5czEvaI;0?;+2zcn5=82X`{FODm(DK^DUyhBuBq%nX;AVr+}j
zesLbrKCtMAqsRpYH(gy_TLE@U>+{T?OdXq84umfFr?P-?xdad}WKNiL#_{XZGGItC
Nc)I$ztaD0e0s!%Bg1i6#

literal 0
HcmV?d00001

diff --git a/Resources/UI/file2.png b/Resources/UI/file2.png
new file mode 100644
index 0000000000000000000000000000000000000000..f3e9f6d2179af7121d2314669151bada83185afe
GIT binary patch
literal 323
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl
z_H+M9WCij$3p^r=85sBufiR<}hF1en@P?<0V~B<S+shmI4hD!E`xwWpw!2(_TX47M
z88QAuf%iw;l1#i@l0=&?rfn9w@_){^u)ANf<PS{$bL-yiZ(A(i@*Xna@epU<qaeIa
z_>_mzch1Gq$$e+;8eZOfUvhDuXxoI>Z<;4FSAKHgGum`mj9+JAe$xE~D$Gfb_Ufni
z7#v^{&B$rov*qGpw%RufHG>j*wWC%%Y+_q<#CAgOdiK0!6}xON-0+;gM&xay`G2PQ
zOt+G*wXB{cw|r8~q%TRk64!0sue^WDo$FTu|J0^hdJ9TEnV5RN^Ixw)1@p4T61G!!
S%?<<o$l&Sf=d#Wzp$Pyn#DaSO

literal 0
HcmV?d00001

diff --git a/Resources/UI/folder.png b/Resources/UI/folder.png
new file mode 100644
index 0000000000000000000000000000000000000000..a97c4e0107de391e61dc628ff9a964c9e5063a99
GIT binary patch
literal 352
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl
z_H+M9WCij$3p^r=85sDEfH31!Z9ZwB;8#x<#}Etux0CJp4?0L3dq1HsY2pXTU+zg8
zeyX+A@gyEQlqb~EpQNOkX??@6Wb^B}&)-g+64E8{canPf`^)>z-+dbOt}?FI(5&63
z!&xxsRAc6>xjSk&zt`3`Z)|F7-J~QH5X=#{UFURYn3YI@<L3(oJ!NkUj~AYrwd}2-
zt>fwwJ_jttCAK*V_`Ki{a*MzIbzRjOhYh_C1ebkJR#jNvvd?fa!=5|A|9&sX=bBqw
z_}4JvZ^yzP0u8$9uV$_<FL*5fp_}1OddKUN!Ht#6@)j&_uv+3@+3P8KY*Niv3t_J;
wNA`ES*0nZBa{XF+dEal7jD>TjT-wL<<V0!oL$}2<fC0eZ>FVdQ&MBb@0I8Ogm;e9(

literal 0
HcmV?d00001

diff --git a/Resources/UI/folder2.png b/Resources/UI/folder2.png
new file mode 100644
index 0000000000000000000000000000000000000000..d21178aa8cafb22ebfe50bf0379772d84075e671
GIT binary patch
literal 288
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl
z_H+M9WCij$3p^r=85sDEfH31!Z9ZwB;8sr;#}Etux0m<wF*=I0J(Rp+#c94#sP)`j
zjhHs+1(#mC99+7BLvX5`?4s?*ey`Ov+iWj1W#1FeXLH`nnUiANX0q`pvtDAy_Kgt>
z`({cN-g>d1b*@z9#RhA)7pn!Ax7qqdta#{pJI^3+VJW*+#mk31-fh|?`8{_S-y0oW
z`^Bn$it?(JjOTVb)$O~faH{@5KU<52yXeMiVqQy{0_Lhp%~1Zkc=O`wSeX!(3x_|<
hFBYubZFY>sKU2UnWXUOwlRytJc)I$ztaD0e0suaOZf^hp

literal 0
HcmV?d00001

diff --git a/Resources/UI/minus.png b/Resources/UI/minus.png
new file mode 100644
index 0000000000000000000000000000000000000000..6b396d43dcd620706ec9a4eb0662e997b8117f02
GIT binary patch
literal 532
zcmV+v0_**WP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10ij7m
zK~y-6om0JPltC0d=Mrqz<PAhCMMm6aYrEBmn94UWpthQ%(Pm>O5kdSx+&3_!H6}Lu
z1`a!Sku(W;0}b&5&CapNM814RT|CwN+<VTPd*>1jj7FnNlIA6K0h}$zI{-FG_Cp9>
zkLS_C-A_q+2H-A$F96mhZ2<tu^8jW^&PaMq@<9mU`!9l${2ss+l8>vZTIqB;-|9*+
z#+I2an%N^s1CrN|NRU!`nNs?ZQo7l+)P%dwx%<IzID8HOES^6BSPmg9|BIjq_DDVi
zaM?=1zE)MWGD$K3jK||AlJ+FcTdDSX)AQfZZnyVwSmf>$fHRWb)jZzHIo~-c(ahe2
z5LU}}i{uSMt(E_SDFC~r&j5g;u=?keLy){6Y1aU30GN$2wkB0|_tTQD0oXK>eUdX~
zwm2z)q$QHmB>Mn>l+p`#KXCWC3Dl2$BrAUIOBw)JODXkEvJ+!$rIdOA)+7zgYytRv
zn4XfnCuxu5hn(~0a($8HRg%*==T~O7aBP?wPYjZ7OX`w52Y`~cNq!{xHiR&$$NvNo
W{^Fg|2zLko0000<MNUMnLSTaH$>?$b

literal 0
HcmV?d00001

diff --git a/Resources/UI/minus2.png b/Resources/UI/minus2.png
new file mode 100644
index 0000000000000000000000000000000000000000..9bb41283a7f3e8d7bdf81467b5391984bea3e424
GIT binary patch
literal 380
zcmV-?0fYXDP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10SQS&
zK~y-6ozqP&Ltzxg@gI>6wCuoCLc0!;h?>{~#$wuF&J`hI14vi^39BfHbP+^!L<a`%
zDc5ap()LMia&pf3zaQs5FN12}1TW~u_lyknV)Ilku0+!|K5&mt)E2Rdd0b!@UkdOO
zzR|+$kdsxhk6!dv^2PIj*N1>bHDi&}exebH)(CK42f-|p2KH8R>@rpHj$_iauf~A;
zx<-2j3%Jb{HnCL#UE(g{4%Vjq|CJMI(kt9Z29rrctd0TKq#<S`d-f!gjH<(6eyx2L
ziRK9KhJum!vvN-|$*}9xayvf;Gw_&>u!B!L;5BMXSiziR`#punlviDHSUVQ#Mw|)j
a=Jf+%ay>&=(wun!0000<MNUMnLSTY9jGv<b

literal 0
HcmV?d00001

diff --git a/Resources/UI/plus.png b/Resources/UI/plus.png
new file mode 100644
index 0000000000000000000000000000000000000000..f63ace902d9e993fbf04de2688e18f9c4648530e
GIT binary patch
literal 559
zcmV+~0?_@5P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10lY~>
zK~y-6om0zdR6!6urwDGw<PStwinQY(%-Y?Uh?tdsV1l~U#Eoty?j$0J4`k*K4A~}e
z+{_<%xz&SYqvQ`X=mkygabYLiv_XQk>ONgnr%qKDk=bN2xg=>pQV+n{1b+cAA~_5p
z#HK$F4l%}4lAZ&&3*ak&O-b7TK=M3*Ig&Gy-jI9{Lil-@AO&v#xJvR#RaL9qZudu%
zsVIt;nJt^yV@YF@*AJ4w-Cw!;FL%G0OUf<AI3Hu&E6ef)05EC(2w)|Iu#!370)P<0
zS`&BoKFLP_E?a8Yx2mdEb2dqfk`{A(e}Dg}q+Ll1mb$%}YyOvYI-T$M)8yV1fHRWb
zHOsE+`cArD0f4eBM*v`EZyR#9N!~CtM)^NB1z;!58Ngw~)&RiWw*a8sZqMd{BrizX
zF#zuY%oRn^Iw@<6@wB8_03#zgBspVd%g3+`NDgvb(nFHdB!@_)zKk*M#Te&Lz<%T-
zSz@{`X$)Z9-TTMMDT<=y?tK93lE!AX1pK{B&q&^rv`ccUuIo?f`69_{B&X}Ter;w;
xN0uooF-W>CsYmi00808y@&n012w~Fn{|yw|_65H@(}Ms2002ovPDHLkV1jc+^1c87

literal 0
HcmV?d00001

diff --git a/Resources/UI/plus2.png b/Resources/UI/plus2.png
new file mode 100644
index 0000000000000000000000000000000000000000..0c29081e25aa7911ea1e9793e66094cb06efb9df
GIT binary patch
literal 398
zcmV;90df9`P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10UJp~
zK~y-6ozp!|LQxO};7<w)QFmbMOcXlTfZ9mqBDB_;puJ#>KRYlk!JoJaAu%jMV?+z3
zuy_MJAMYjTNhY~>X3o7cbI)ZOHJqY{L0A_ZRI|x*sdYJ$_V9*V^dq*4Z7ksm2l$d9
zKjIrr%;!{AK?}pkEvJJQLEgzBX3>a4&PI+}IGQ=hyJ1-z1!tXPU@rw_--TsS!7JJ&
z)FlJ^oT2;?K7vy(VcBHbqp}~uHo`{xbUS^ll>C0mf1!u#f>_ZE;0E0i?j<6r{Nd6C
zY)RTul{`r+C$Z=mkApLo_IWrOGu%EUBqmZGN<@;^PQ^q(V<~4p(+T$RE*ai)#MZEh
sMO@-g<};;HMH^3X&>+?wA>A~70F4SmZKJ&MYXATM07*qoM6N<$f>mIi`~Uy|

literal 0
HcmV?d00001

diff --git a/Resources/UI/trash.png b/Resources/UI/trash.png
new file mode 100644
index 0000000000000000000000000000000000000000..55e65525ddc861bd34825421f233b1589aa8733a
GIT binary patch
literal 382
zcmV-^0fGLBP)<h;3K|Lk000e1NJLTq000gE000mO1^@s6CX`M(00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10Sie)
zK~yM_?T)cZ!%!H7&$$VKIz+OFd#CFw_!<)3>f{5s2r9Vf;No0$5f>q&n=g>5TXNB*
zv*Hp=KqZiSoLYhuN(VQ;`TNfQ6Fssl3#_%b#+W@x0{|fT1>nIscaWxOH*>>&Xsz8L
zIr83LlKcPw@BKQ-BWvvwfNbV6&+|c&Bx`Nk20;)UO4^rX`-3E(N#1o`cNIlZS5?&~
z%d&h0u!+@p3ym?ml1?QJNnQZh05JU}4gtJNIw3hFc@6+5iel`Xn=CuyoSPIyF$Ms$
z;)`?s!#@qZ_gp6Toe%&>z5p0G=guU3FN!1$NN!2GpNDl_U&nF0E$J9Qv?wIm0(fki
c<^}+M0F=gWXpb8FNB{r;07*qoM6N<$f^I65pa1{>

literal 0
HcmV?d00001

diff --git a/Resources/UI/trash2.png b/Resources/UI/trash2.png
new file mode 100644
index 0000000000000000000000000000000000000000..1ae8d4397a12014956b526440cb2e4675e781690
GIT binary patch
literal 289
zcmeAS@N?(olHy`uVBq!ia0vp^d_XL~!3HGNrubO_Db50q$YP-QVGw3Kp1&dmC@5Lt
z8c`CQpH@<ySd_|8US6)3nU`IhoLG>mmtT}V`<;yxP|-S17sn8diEl62@;Md?uzZ-`
z|17gaZ^7k4hUFK$W1JipEff&H5TIe%c#cuVVezzp%oZn&Kb-nUvP;x%rlqHqcRdu9
z>?u5;dWLcF0ow_^lG!U3_t)Nddhv+N<@Ds1m>m(v_?mAVWYdaxAQN=M=BSs|Y>`zN
zi#z1FB97aMZFJQxxNB{A<Wjj#bC^}*58Z#q;-!N*zwn>k`$T(tQF+0igsy-?D*NU<
hd{S)h?<jmw)UnBs<@7DD7@*4;JYD@<);T3K0RRX!Z1VsB

literal 0
HcmV?d00001

diff --git a/Resources/folder_32.png b/Resources/folder_32.png
new file mode 100644
index 0000000000000000000000000000000000000000..832fd3c9b04b64cf590032b045d45050e033aaef
GIT binary patch
literal 601
zcmV-f0;c_mP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800001b5ch_0Itp)
z=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!T<mc!T}X1N`L?W0q#jeK~z{rV;BVk
z4H%&`7^GyCY5xDu*bQV_0kI%h5EH!k$Mny8{?zVsP(DQf?trwkN{zqF|IPxLTo4g_
zfbr6&Hyoy`S2z5E3Xlz$p)`Ymne{v%r31wOfpF7*#{Y+aY><QCn2~|;GmusQVsUn^
zKYz}jIeHMtrU<}8AUU)AHINbk+P`w{^sWeqC@P38DdA@O%6u8fR0QH*{}}$cF)}be
z21^nE9E=>VrcG=30_DO16O;x4pyeRIh||EuJw0C;nEs~%ng4;9jfsKj03*ZyyTst1
z|G$4o$tXXYlvQp6HVg`o9Y7SAJGE;sFpg$JxugK*|BMVqjQ<(-r({+bL&ZpU00?~M
z_+0>WL?JLBI*G+V^|OFl{{S(|KZgIUV1s}FISqh<6$E<bPVX#*vZ)GEGRqeNEr|m%
zKLG6jXLGVbfLs8y{1ucb0Hx{c0Bm5?0izBWb-<_tMjbHf0AvTefl&WtAvE;?BO`+x
zlnHA7fdQgDkWsz?$nys>fwd;%=Kl=;UO;511Aq-$Ng(9|Vgenqe$KScAc!~=q-IyD
z{rmS1)Yj*Qh|mmtWnyA7nmx7s7Kj6HmY+L)<gKZZ-Marw|K)*PF(BpyOHdEI2l{t6
nuxS=LcUmXd@=-7d00RR6=)<f&HZ`m800000NkvXXu0mjfpLF>%

literal 0
HcmV?d00001

diff --git a/Resources/toggle-left-ea-16.png b/Resources/toggle-left-ea-16.png
new file mode 100644
index 0000000000000000000000000000000000000000..e7895fd54022e74fed851ee550eb693be6ae2aa1
GIT binary patch
literal 506
zcmV<W0R{evP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00001b5ch_0Itp)
z=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!T<mc!T}X1N`L?W0gp*UK~y+T)snqS
zLSYof&$$jk&=i$JA4C6vWhwTt1PyYbr8&|pG=f4Y9ipaCF{niiRHC^hih?%jOZswY
zE+`1mrW&e2PtUzKimaj4AH1A<pL@=GpL5=qY9IcL<eCcES*iH(IDplpi@zy}P*!1C
zO(mi^P0%-R`+{>M5@V(vBy0<DQPZnol4gWaELBJXnM8DrUEbgjJ{$^*=cRPF+0fWI
zLM$B$aW<6*U+I-qxO@v97TRFpA(N%YktCs;_Lln4n>6gh#SCn<B5%=R?SIT)9$y<}
z-{db&t}WKSE?62=P;4XSy@$fP9fiYX6FJg}hy{5oXluzR`He8`BG?q;^$!GI{sCGg
zZJKJEx$X?{z*MGFw|60rIfO)!Wj*T;Fas4Kr*MVC_?>!Re04uR-KxwohL*PApgR+f
zrj7KUOn8Hn2u=(>tlM;X=VzHXhI#D4_;!W3py}0MU}hXKj!~R&?oY=f>tB72PltNB
wTnVs3{n)7GQ?5qa_(;1m>16cWkZK&F58rczF09|kUjP6A07*qoM6N<$f`0zlMF0Q*

literal 0
HcmV?d00001

diff --git a/Resources/toggle-right-ea-16.png b/Resources/toggle-right-ea-16.png
new file mode 100644
index 0000000000000000000000000000000000000000..aedd7c2f94120ca876963df3b9500d46e6f058f4
GIT binary patch
literal 502
zcmV<S0SW$zP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00001b5ch_0Itp)
z=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!T<mc!T}X1N`L?W0gFjQK~y+T)soLE
zL{SvS&$$+&Ed5%rkiURrBy47*F=b<`yfO5~hRDoVC=2CHqu9)hc(bvc1(AiF%mN$v
z11yB{BP)f{+~a%SOv;;N?Ng_7?)RR1?&;i1{~xY+vZj-Ltn@s>L0F?FR`V=ECyHf#
zC!0Dmf>$6COU#i-nwj>IP!QrLqx)f!Cb%(JSV$J~+0+JGb|Q$4V_}KrGbz{0^f75C
zx;4oV3E#ZFT<<kBc33R5#lk_3#Nx-K>CMeKqm}$0;P4b~%Obpjb;62m&2=NUkMDbk
zYZVCvi1`qUUyx;CUUjohSE+{jAq?L?y$6Kp0C7NhIe)-{bf7-T%P*Cb7;jLRjG1P*
zysSnut-vis?D!=sDx%s^du#1EW?;^oDb~D(Hp5md9`#Q6$Y-2wt#l8r+(jefZB6yz
zyT^}7Y=toRHLo?xUYup(H0E)Lrz~jV2c!GJz*_Lcct#1K^LaPpY<_>FiJ4?Cm-GVK
s96+JwitNV}J~e;F&805N(m#jj3n7Dw9b#Vt6#xJL07*qoM6N<$f{}0FssI20

literal 0
HcmV?d00001

diff --git a/RyzStudio/Data/SQLite/SQLiteDatabase.cs b/RyzStudio/Data/SQLite/SQLiteDatabase.cs
new file mode 100644
index 0000000..2ebab58
--- /dev/null
+++ b/RyzStudio/Data/SQLite/SQLiteDatabase.cs
@@ -0,0 +1,444 @@
+using System;
+using System.ComponentModel;
+using System.Data;
+using System.IO;
+
+namespace RyzStudio.Data.SQLite
+{
+    public class SQLiteDatabase
+    {
+        #region static methods
+
+        public static string escapeSQL(string query)
+        {
+            return query.Replace("'", "''").Trim();
+        }
+
+        public static string escapeValue(string text)
+        {
+            return text.Replace("\"", "\\\"").Replace("\t", "\\t").Replace("\r", " \\r").Replace("\n", "\\n");
+        }
+
+        public static string PrepareQuery(string query, params string[] arguments)
+        {
+            string rv = query;
+
+            if (string.IsNullOrEmpty(rv))
+            {
+                return string.Empty;
+            }
+            
+            for (int i = 0; i < arguments.Length; i++)
+            {
+                rv = rv.Replace("[^" + (i + 1).ToString() + "]", escapeSQL(arguments[i]));
+            }
+            
+            return rv;
+        }
+        
+        #endregion
+        
+        protected SQLiteWrapper.SQLiteBase database = null;
+        protected string databaseLocation = ":memory:";
+        protected string lastError = "";
+        
+        protected string[] requiredTableList = new string[0];
+        
+        protected const string tableNameConfig = "ryz_app_xxxx_config";
+
+        #region public properties
+
+        [Browsable(false)]
+        public SQLiteWrapper.SQLiteBase Database
+        {
+            get { return database; }
+            set { database = value; }
+        }
+
+        [Browsable(false)]
+        public string DatabaseLocation
+        {
+            get { return databaseLocation; }
+            set { databaseLocation = value; }
+        }
+
+        [Browsable(false)]
+        public string LastError
+        {
+            get { return lastError; }
+        }
+
+        [Browsable(false)]
+        public int LastInsertID
+        {
+            get
+            {
+                if (database == null)
+                {
+                    return 0;
+                }
+                
+                DataTable dt = this.DoQuery("SELECT last_insert_rowid() AS ccc;");
+                if (dt == null)
+                {
+                    return 0;
+                }
+
+                if (dt.Rows.Count <= 0)
+                {
+                    return 0;
+                }
+                
+                return int.Parse(dt.Rows[0]["ccc"].ToString());
+            }
+        }
+        
+        #endregion
+
+        #region public methods
+
+        public bool Create(bool use_memory = true)
+        {
+            lastError = string.Empty;
+
+            if (string.IsNullOrEmpty(databaseLocation))
+            {
+                return false;
+            }
+            
+            try
+            {
+                if (database != null)
+                {
+                    database.CloseDatabase();
+                }
+
+                database = new SQLiteWrapper.SQLiteBase(((use_memory) ? ":memory:" : databaseLocation));
+            }
+            catch (Exception exc)
+            {
+                lastError = exc.Message;
+                return false;
+            }
+            
+            bool rv = Prepare();
+            if (!rv)
+            {
+                return false;
+            }
+            
+            return CheckRequiredTables();
+        }
+
+        public bool Create(string filename, bool override_file = false)
+        {
+            lastError = string.Empty;
+            databaseLocation = filename;
+
+            if (string.IsNullOrEmpty(databaseLocation))
+            {
+                return false;
+            }
+
+            if (File.Exists(databaseLocation) && override_file)
+            {
+                try
+                {
+                    File.Delete(databaseLocation);
+                }
+                catch (Exception xc)
+                {
+                    lastError = xc.Message;
+                    return false;
+                }
+            }
+            
+            try
+            {
+                if (database != null)
+                {
+                    database.CloseDatabase();
+                }
+
+                database = new SQLiteWrapper.SQLiteBase(databaseLocation);
+            }
+            catch (Exception exc)
+            {
+                lastError = exc.Message;
+                return false;
+            }
+            
+            bool rv = CheckRequiredTables();
+            if (!rv)
+            {
+                Prepare();
+            }
+            
+            return CheckRequiredTables();
+        }
+
+        public bool Load(string filename)
+        {
+            if (!File.Exists(filename))
+            {
+                return false;
+            }
+            
+            lastError = string.Empty;
+            databaseLocation = filename;
+            
+            try
+            {
+                if (database != null)
+                {
+                    database.CloseDatabase();
+                }
+
+                database = new SQLiteWrapper.SQLiteBase(databaseLocation);
+            }
+            catch (Exception exc)
+            {
+                lastError = exc.Message;
+                return false;
+            }
+            
+            return CheckRequiredTables();
+        }
+
+        public void Close()
+        {
+            if (database != null)
+            {
+                database.CloseDatabase();
+            }
+        }
+
+
+        public DataTable DoQuery(string query)
+        {
+            lastError = string.Empty;
+            if (database == null)
+            {
+                return null;
+            }
+            
+            try
+            {
+                return database.ExecuteQuery(query);
+            }
+            catch (Exception exc)
+            {
+                lastError = exc.Message;
+                return null;
+            }
+        }
+
+        public DataTable DoQuery(string query, params string[] args)
+        {
+            string sql = SQLiteDatabase.PrepareQuery(query, args);
+            
+            return DoQuery(sql);
+        }
+
+        public bool DoNonQuery(string query)
+        {
+            lastError = string.Empty;
+            if (database == null)
+            {
+                return false;
+            }
+            
+            try
+            {
+                database.ExecuteNonQuery(query);
+                return true;
+            }
+            catch (Exception exc)
+            {
+                lastError = exc.Message;
+                return false;
+            }
+        }
+
+        public bool DoNonQuery(string query, params string[] args)
+        {
+            string sql = SQLiteDatabase.PrepareQuery(query, args);
+            
+            return DoNonQuery(sql);
+        }
+
+        public string DoQuerySingle(string query)
+        {
+            lastError = string.Empty;
+            if (database == null)
+            {
+                return string.Empty;
+            }
+            
+            DataTable tbl = DoQuery(query);
+
+            if (tbl == null)
+            {
+                return string.Empty;
+            }
+
+            if (tbl.Columns.Count <= 0)
+            {
+                return string.Empty;
+            }
+
+            if (tbl.Rows.Count <= 0)
+            {
+                return string.Empty;
+            }
+            
+            return tbl.Rows[0][0].ToString();
+        }
+
+        public string DoQuerySingle(string query, params string[] args)
+        {
+            string sql = SQLiteDatabase.PrepareQuery(query, args);
+            
+            return DoQuerySingle(sql);
+        }
+
+        public int DoQueryCount(string query)
+        {
+            if (database == null)
+            {
+                return -1;
+            }
+            
+            DataTable tbl = DoQuery(query);
+
+            if (tbl == null)
+            {
+                return -1;
+            }
+
+            if (tbl.Rows.Count <= 0)
+            {
+                return 0;
+            }
+            
+            return tbl.Rows.Count;
+        }
+
+        public int DoQueryCount(string query, params string[] args)
+        {
+            string sql = SQLiteDatabase.PrepareQuery(query, args);
+            
+            return DoQueryCount(sql);
+        }
+
+        public bool DoQueryExist(string query)
+        {
+            int rv = DoQueryCount(query);
+            
+            return (rv > 0);
+        }
+
+        public bool DoQueryExist(string query, params string[] args)
+        {
+            string sql = SQLiteDatabase.PrepareQuery(query, args);
+            
+            return DoQueryExist(sql);
+        }
+
+        public bool HasTable(string table_name)
+        {
+            lastError = string.Empty;
+            if (database == null)
+            {
+                return false;
+            }
+            
+            int rv = this.DoQueryCount("SELECT 1 FROM sqlite_master WHERE type='table' AND name='" + escapeSQL(table_name) + "'");            
+
+            return (rv > 0);
+        }
+
+        public bool CheckRequiredTables()
+        {
+            bool rv = true;
+            foreach (string tbl in requiredTableList)
+            {
+                if (string.IsNullOrEmpty(tbl))
+                {
+                    continue;
+                }
+                
+                if (!this.HasTable(tbl))
+                {
+                    rv = false;
+                    break;
+                }
+            }
+            
+            return rv;
+        }
+
+
+        protected bool PrepareConfig()
+        {
+            if (HasTable(tableNameConfig))
+            {
+                return true;
+            }
+            
+            bool rv = this.DoNonQuery(@"
+                BEGIN TRANSACTION;
+                CREATE TABLE " + tableNameConfig + @" (cfg_name TEXT, cfg_value TEXT);
+                COMMIT;
+            ");
+
+            return rv;
+        }
+
+        public bool SetConfig(string name, string value)
+        {
+            if (!PrepareConfig())
+            {
+                return false;
+            }
+            
+            string sql = string.Empty;
+            int rv = this.DoQueryCount("SELECT 1 FROM " + tableNameConfig + " WHERE cfg_name='" + escapeSQL(name) + "'");
+            if (rv <= 0)
+            {
+                sql = "INSERT INTO " + tableNameConfig + " (cfg_name, cfg_value) VALUES ('[^1]', '[^2]');";
+            }
+            else
+            {
+                sql = "UPDATE " + tableNameConfig + " SET cfg_value='[^2]' WHERE cfg_name='[^1]';";
+            }
+
+            sql = PrepareQuery(sql, new string[] { name, value });
+            
+            return this.DoNonQuery(sql);
+        }
+
+        public string GetConfig(string name, string default_value = "")
+        {
+            if (!PrepareConfig())
+            {
+                return default_value;
+            }
+            
+            bool rv = this.DoQueryExist("SELECT 1 FROM " + tableNameConfig + " WHERE cfg_name='" + escapeSQL(name) + "'");
+            if (!rv)
+            {
+                return default_value;
+            }
+            
+            return this.DoQuerySingle("SELECT cfg_value FROM " + tableNameConfig + " WHERE cfg_name='" + escapeSQL(name) + "'");
+        }
+
+        #endregion
+
+        protected virtual bool Prepare()
+        {
+            return true;
+        }
+    }
+}
\ No newline at end of file
diff --git a/RyzStudio/Drawing/Rectangoid.cs b/RyzStudio/Drawing/Rectangoid.cs
new file mode 100644
index 0000000..59a24d8
--- /dev/null
+++ b/RyzStudio/Drawing/Rectangoid.cs
@@ -0,0 +1,124 @@
+using System.Drawing;
+using System.Drawing.Drawing2D;
+
+namespace RyzStudio.Drawing
+{
+	public struct Rectangoid
+	{
+		private int X;
+		private int Y;
+		private int Width;
+		private int Height;
+		private int Radius;
+
+		public Rectangoid(Rectangle rect, int radius)
+		{
+			X = rect.X;
+			Y = rect.Y;
+			Width = rect.Width;
+			Height = rect.Height;
+			Radius = radius;
+		}
+
+		public Rectangoid(Rectangle rect, int radius, int borderWidth)
+		{
+			rect.Inflate((-1 * borderWidth), (-1 * borderWidth));
+
+			X = rect.X;
+			Y = rect.Y;
+			Width = rect.Width;
+			Height = rect.Height;
+			Radius = radius;
+		}
+
+		public Rectangoid(int x, int y, int width, int height, int radius)
+		{
+			X = x;
+			Y = y;
+			Width = width;
+			Height = height;
+			Radius = radius;
+		}
+
+		public Rectangoid(int x, int y, int width, int height)
+		{
+			X = x;
+			Y = y;
+			Width = width;
+			Height = height;
+			Radius = 0;
+		}
+
+		public Rectangoid(int width, int height, int radius)
+		{
+			X = 0;
+			Y = 0;
+			Width = width;
+			Height = height;
+			Radius = radius;
+		}
+
+		public Rectangoid(int width, int height)
+		{
+			X = 0;
+			Y = 0;
+			Width = width;
+			Height = height;
+			Radius = 0;
+		}
+
+		public Rectangoid(int width)
+		{
+			X = 0;
+			Y = 0;
+			Width = width;
+			Height = width;
+			Radius = 0;
+		}
+
+		public GraphicsPath ToGraphicsPath()
+		{
+			GraphicsPath rv = new GraphicsPath();
+			rv.AddLine(X + this.Radius, Y, X + Width - (this.Radius * 2), Y);
+
+			if (this.Radius > 0)
+			{
+				rv.AddArc(X + Width - (this.Radius * 2), Y, this.Radius * 2, this.Radius * 2, 270, 90);
+			}
+
+			rv.AddLine(X + Width, Y + this.Radius, X + Width, Y + Height - (this.Radius * 2));
+
+			if (this.Radius > 0)
+			{
+				rv.AddArc(X + Width - (this.Radius * 2), Y + Height - (this.Radius * 2), this.Radius * 2, this.Radius * 2, 0, 90);
+			}
+
+			rv.AddLine(X + Width - (this.Radius * 2), Y + Height, X + this.Radius, Y + Height);
+
+			if (this.Radius > 0)
+			{
+				rv.AddArc(X, Y + Height - (this.Radius * 2), this.Radius * 2, this.Radius * 2, 90, 90);
+			}
+
+			rv.AddLine(X, Y + Height - (this.Radius * 2), X, Y + this.Radius);
+
+			if (this.Radius > 0)
+			{
+				rv.AddArc(X, Y, this.Radius * 2, this.Radius * 2, 180, 90);
+			}
+
+			rv.CloseFigure();
+
+			return rv;
+		}
+
+		public PointF GetOrigin()
+		{
+			PointF rv = new PointF();
+			rv.X = ((float)Width / 2) + X;
+			rv.Y = ((float)Height / 2) + Y;
+
+			return rv;
+		}
+	}
+}
\ No newline at end of file
diff --git a/RyzStudio/IO/FileType.cs b/RyzStudio/IO/FileType.cs
new file mode 100644
index 0000000..3c8b616
--- /dev/null
+++ b/RyzStudio/IO/FileType.cs
@@ -0,0 +1,56 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace RyzStudio.IO
+{
+    public class FileType
+    {
+        protected static readonly byte[] BMP = { 66, 77 };
+        protected static readonly byte[] GIF = { 71, 73, 70, 56 };
+        protected static readonly byte[] ICO = { 0, 0, 1, 0 };
+        protected static readonly byte[] JPG = { 255, 216, 255 };
+        protected static readonly byte[] PNG = { 137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82 };
+
+        public static bool IsImage(byte[] byteArray)
+        {
+            if (byteArray == null)
+            {
+                return false;
+            }
+
+            if (byteArray.Length <= 0)
+            {
+                return false;
+            }
+
+            if (byteArray.Take(2).SequenceEqual(BMP))
+            {
+                return true;
+            }
+
+            if (byteArray.Take(4).SequenceEqual(GIF))
+            {
+                return true;
+            }
+
+            if (byteArray.Take(4).SequenceEqual(ICO))
+            {
+                return true;
+            }
+
+            if (byteArray.Take(3).SequenceEqual(JPG))
+            {
+                return true;
+            }
+
+            if (byteArray.Take(16).SequenceEqual(PNG))
+            {
+                return true;
+            }
+
+            return false;
+        }
+    }
+}
diff --git a/RyzStudio/IO/SessionFileFormatBase.cs b/RyzStudio/IO/SessionFileFormatBase.cs
new file mode 100644
index 0000000..3ae2887
--- /dev/null
+++ b/RyzStudio/IO/SessionFileFormatBase.cs
@@ -0,0 +1,290 @@
+using System;
+using System.IO;
+using System.Text;
+using System.Xml;
+using System.Windows.Forms;
+using ICSharpCode.SharpZipLib.Zip;
+
+namespace RyzStudio.IO
+{
+    public abstract class SessionFileFormatBase
+    {
+        protected string CONST_KEYPASS = "";
+        protected string CONST_PRODUCT = "";
+        protected string CONST_STREAM_FILE_NAME = "";
+
+        protected bool enableErrorReporting = false;
+        protected string lastUsedFileName = "";
+
+        #region public properties
+
+        public string passkey
+        {
+            get { return CONST_KEYPASS; }
+            set { CONST_KEYPASS = value; }
+        }
+
+        /*public string LastFilename
+        {
+            get { return lastUsedFileName; }
+            set { lastUsedFileName = value; }
+        }*/
+        
+        #endregion
+
+        #region public methods
+
+/*        public bool loadFromRyz()
+        {
+            return loadFromRyz(lastUsedFileName);
+        }*/
+
+        public bool loadFromRyz(string file_name)
+        {
+            lastUsedFileName = file_name;
+            if (!File.Exists(file_name))
+            {
+                return false;
+            }
+            
+            bool rv = false;
+            
+            try
+            {
+                ZipInputStream zipIn = new ZipInputStream(File.OpenRead(file_name));
+                zipIn.Password = CONST_KEYPASS;
+                ZipEntry theEntry = null;
+                
+                while ((theEntry = zipIn.GetNextEntry()) != null)
+                {
+                    string streamFileName = Path.GetFileName(theEntry.Name);
+                    if (streamFileName.Equals(CONST_STREAM_FILE_NAME))
+                    {
+                        MemoryStream oxStream = new MemoryStream();
+                        StreamWriter streamWriter = new StreamWriter(oxStream);
+                        int size = 2048;
+                        byte[] data = new byte[size];
+                        while (true)
+                        {
+                            size = zipIn.Read(data, 0, data.Length);
+                            if (size <= 0) break;
+                            streamWriter.BaseStream.Write(data, 0, size);
+                        }
+
+                        oxStream.Position = 0;
+
+                        StreamReader sr2 = new StreamReader(oxStream, Encoding.UTF8);
+                        XmlDocument xDoc = new XmlDocument();
+                        xDoc.LoadXml(sr2.ReadToEnd());
+                        
+                        loadFromXmlDocument(ref xDoc);
+                    }
+                }
+
+                zipIn.Close();
+                
+                rv = true;
+            }
+            catch (Exception exc)
+            {
+                if (enableErrorReporting)
+                {
+                    MessageBox.Show(exc.Message);
+                }
+            }
+            
+            return rv;
+        }
+
+        public bool loadFromXml()
+        {
+            return loadFromXml(lastUsedFileName);
+        }
+
+        public bool loadFromXml(string file_name)
+        {
+            lastUsedFileName = file_name;
+            if (!File.Exists(file_name))
+            {
+                return false;
+            }
+            
+            bool rv = false;
+            
+            try
+            {
+                StreamReader sr2 = new StreamReader(file_name, Encoding.UTF8);
+                XmlDocument xDoc = new XmlDocument();
+                xDoc.LoadXml(sr2.ReadToEnd());
+                
+                loadFromXmlDocument(ref xDoc);
+                sr2.Close();
+                
+                rv = true;
+            }
+            catch (Exception exc)
+            {
+                if (enableErrorReporting)
+                {
+                    MessageBox.Show(exc.Message);
+                }
+            }
+            
+            return rv;
+        }
+
+/*        public bool saveToRyz()
+        {
+            return saveToRyz(lastUsedFileName);
+        }
+*/
+
+        public bool saveToRyz(string file_name)
+        {
+            bool rv = false;
+            lastUsedFileName = file_name;
+            byte[] buffer = new byte[4096];
+
+            try
+            {
+                File.Delete(file_name);
+                FileInfo fileinfo1 = new FileInfo(file_name);
+                if (!Directory.Exists(fileinfo1.DirectoryName))
+                {
+                    Directory.CreateDirectory(fileinfo1.DirectoryName);
+                }
+            }
+            catch (Exception exc)
+            {
+                if (enableErrorReporting)
+                {
+                    MessageBox.Show(exc.Message);
+                }
+            }
+
+            try
+            {
+                ZipOutputStream zipOutStream1 = new ZipOutputStream(File.Create(file_name));
+                zipOutStream1.SetLevel(9);
+                zipOutStream1.Password = CONST_KEYPASS;
+
+                MemoryStream oxIndexStream = new MemoryStream();
+                XmlTextWriter oxTW = new XmlTextWriter(oxIndexStream, Encoding.UTF8);
+                saveToXmlTextWriter(ref oxTW);
+                oxTW.Flush();
+
+                // write to file
+                zipOutStream1.PutNextEntry(new ZipEntry(CONST_STREAM_FILE_NAME));
+                oxIndexStream.Position = 0;
+                StreamReader sr2 = new StreamReader(oxIndexStream, Encoding.UTF8);
+                int sourceBytes;
+                do
+                {
+                    sourceBytes = sr2.BaseStream.Read(buffer, 0, buffer.Length);
+                    zipOutStream1.Write(buffer, 0, sourceBytes);
+                }
+                while (sourceBytes > 0);
+
+                sr2.Close();
+                oxTW.Close();
+                zipOutStream1.Finish();
+                zipOutStream1.Close();
+                
+                rv = true;
+            }
+            catch (Exception exc)
+            {
+                if (enableErrorReporting)
+                {
+                    MessageBox.Show(exc.Message);
+                }
+            }
+            
+            return rv;
+        }
+
+        public bool saveToXml()
+        {
+            return saveToXml(lastUsedFileName);
+        }
+
+        public bool saveToXml(string file_name)
+        {
+            bool rv = false;
+            
+            lastUsedFileName = file_name;
+            try
+            {
+                File.Delete(file_name);
+                FileInfo fileinfo1 = new FileInfo(file_name);
+                if (!Directory.Exists(fileinfo1.DirectoryName))
+                {
+                    Directory.CreateDirectory(fileinfo1.DirectoryName);
+                }
+            }
+            catch (Exception exc)
+            {
+                if (enableErrorReporting)
+                {
+                    MessageBox.Show(exc.Message);
+                }
+            }
+
+            try
+            {
+                XmlTextWriter oxTW = new XmlTextWriter(file_name, Encoding.UTF8);
+                saveToXmlTextWriter(ref oxTW);
+                oxTW.Flush();
+                oxTW.Close();
+                
+                rv = true;
+            }
+            catch (Exception exc)
+            {
+                if (enableErrorReporting)
+                {
+                    MessageBox.Show(exc.Message);
+                }
+            }
+            
+            return rv;
+        }
+        
+        #endregion
+        
+        protected virtual void loadFromXmlDocument(ref XmlDocument xml_doc) { }
+        protected virtual void saveToXmlTextWriter(ref XmlTextWriter writer) { }
+
+        #region public methods (conversions)
+
+        public int[] convIntArrayString(string s1, char c)        
+        {
+            string[] sarr = s1.Split(c);
+            int[] iarr = new int[sarr.Length];
+            for (int i = 0; i < sarr.Length; i++)
+            {
+                iarr[i] = Int32.Parse(sarr[i]);
+            }
+
+            return iarr;
+        }
+
+        public string convStringIntArray(int[] r, char s)
+        {
+            string t = null;
+            for (int i = 0; i < r.Length; i++)
+            {
+                if (i != 0)
+                {
+                    t += s.ToString();
+                }
+
+                t += r[i].ToString();
+            }
+
+            return t;
+        }
+
+#endregion
+    }
+}
\ No newline at end of file
diff --git a/RyzStudio/IO/SharpZipLib.cs b/RyzStudio/IO/SharpZipLib.cs
new file mode 100644
index 0000000..b162124
--- /dev/null
+++ b/RyzStudio/IO/SharpZipLib.cs
@@ -0,0 +1,76 @@
+using System;
+using System.IO;
+using ICSharpCode.SharpZipLib.Zip;
+
+namespace RyzStudio.IO
+{
+    public class SharpZipLib
+    {
+        /// <summary>
+        /// Is zip file encrypted
+        /// </summary>
+        /// <param name="fn">Filename</param>
+        /// <returns>Is encrypted</returns>
+        public static bool IsZipEncrypted(string fn)
+        {
+            bool ret_val = false;
+            try
+            {
+                ZipInputStream zipIn = new ZipInputStream(System.IO.File.OpenRead(fn));
+                ZipEntry theEntry = null;
+                while ((theEntry = zipIn.GetNextEntry()) != null)
+                {
+                    if (theEntry.IsCrypted)
+                    {
+                        ret_val = true;
+                    }
+
+                    break;
+                }
+
+                zipIn.Close();
+            }
+            catch
+            {   
+                // do nothing
+            }
+
+            return ret_val;
+        }
+
+        public static void AddFile(ZipOutputStream zipstream, string filename, string prefixpath = null)
+        {
+            byte[] buffer = new byte[4096];
+            
+            string f1 = "";
+            if (prefixpath != null)
+            {
+                f1 = Path.GetDirectoryName(filename).TrimEnd('\\') + "\\";
+                f1 = f1.Replace(prefixpath, "").TrimEnd('\\') + "\\";
+                f1 = f1 + Path.GetFileName(filename);
+                f1 = f1.TrimStart('\\');
+            }
+            
+            ZipEntry entry = new ZipEntry(f1);
+            entry.DateTime = DateTime.Now;
+            zipstream.PutNextEntry(entry);
+
+            FileStream fs = File.OpenRead(filename);
+            int sourceBytes;
+            do
+            {
+                sourceBytes = fs.Read(buffer, 0, buffer.Length);
+                zipstream.Write(buffer, 0, sourceBytes);
+            }
+            while (sourceBytes > 0);
+        }
+
+        public static void AddFolder(ZipOutputStream zipstream, string folderpath, string prefixpath = null)
+        {
+            foreach (string fn in Directory.GetFiles(folderpath, "*.*", System.IO.SearchOption.AllDirectories))
+            {
+                AddFile(zipstream, fn, prefixpath);
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/RyzStudio/Net/HttpWeb.cs b/RyzStudio/Net/HttpWeb.cs
new file mode 100644
index 0000000..bafff2e
--- /dev/null
+++ b/RyzStudio/Net/HttpWeb.cs
@@ -0,0 +1,168 @@
+using System;
+using System.IO;
+using System.Net;
+using System.Text;
+using System.Windows.Forms;
+
+namespace RyzStudio.Net
+{
+	public class HttpWeb
+	{
+		public string defaultUserAgent = "Momozilla/5.0 (" + Environment.OSVersion.Platform.ToString() + " ; " + Environment.OSVersion.VersionString + "; " + Application.CurrentCulture.TwoLetterISOLanguageName + ")";
+		public int defaultTimeout = 6000;
+		public int defaultMaxRedirect = 8;
+		public bool defaultAllowRedirect = true;
+		public CookieContainer defaultCookierContainer = null;
+
+		public HttpWeb()
+		{
+		}
+
+		public HttpWebRequest CreateRequest(string url)
+		{
+			return this.CreateRequest(url, url);
+		}
+
+		public HttpWebRequest CreateRequest(string url, string referrerURL)
+		{
+			if (defaultCookierContainer == null)
+			{
+				defaultCookierContainer = new CookieContainer();
+			}
+
+			HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
+			webRequest.CachePolicy = new System.Net.Cache.RequestCachePolicy(System.Net.Cache.RequestCacheLevel.NoCacheNoStore);
+			webRequest.MaximumAutomaticRedirections = defaultMaxRedirect;
+			webRequest.CookieContainer = defaultCookierContainer;
+			webRequest.UserAgent = defaultUserAgent;
+			webRequest.AllowAutoRedirect = defaultAllowRedirect;
+			webRequest.Timeout = defaultTimeout;
+
+			return webRequest;
+		}
+
+		public int GetResponse(out string sourceCode, string url, string referrerURL = "")
+		{
+			HttpWebRequest webRequest = this.CreateRequest(url, referrerURL);
+
+			return GetResponse(out sourceCode, webRequest);
+		}
+
+		public int GetResponse(out string sourceCode, HttpWebRequest webRequest)
+		{
+			sourceCode = string.Empty;
+
+			int rv = 0;
+
+			try
+			{
+				HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();
+
+				rv = (int)webResponse.StatusCode;
+
+				StreamReader readContent = new StreamReader(webResponse.GetResponseStream());
+				sourceCode = readContent.ReadToEnd();
+
+				webResponse.Close();
+				webResponse = null;
+			}
+			catch (WebException xc)
+			{
+				if (xc.Response is HttpWebResponse)
+				{
+					HttpWebResponse rs = xc.Response as HttpWebResponse;
+					StreamReader readContent = new StreamReader(rs.GetResponseStream());
+					if (readContent != null)
+					{
+						sourceCode = readContent.ReadToEnd();
+					}
+
+					rv = (int)rs.StatusCode;
+				}
+				else
+				{
+					rv = (int)xc.Status;
+					sourceCode = xc.Message;
+				}
+			}
+			catch (Exception xc)
+			{
+				sourceCode = xc.Message;
+			}
+
+			return rv;
+		}
+
+		public static HttpWebRequest AddBasicAuthentication(HttpWebRequest webRequest, string username, string password)
+		{
+			webRequest.Headers["Authorization"] = "Basic " + Convert.ToBase64String(Encoding.Default.GetBytes(string.Concat(username, ":", password)));
+			webRequest.PreAuthenticate = true;
+
+			return webRequest;
+		}
+
+
+		public int GetPOSTResponse(out string sourceCode, HttpWebRequest webRequest, string postData)
+		{
+			sourceCode = "";
+			int rv = 0;
+			byte[] buffer = Encoding.UTF8.GetBytes(postData);
+
+			webRequest.ContentLength = buffer.Length;
+
+			try
+			{
+				Stream dataStream = webRequest.GetRequestStream();
+				dataStream.Write(buffer, 0, buffer.Length);
+				dataStream.Close();
+			}
+			catch (Exception xc)
+			{
+				sourceCode = xc.Message;
+				return rv;
+			}
+
+			return this.GetResponse(out sourceCode, webRequest);
+		}
+
+		public int GetHeader(out WebHeaderCollection headerCollection, string url, string referrerURL = "")
+		{
+			headerCollection = null;
+
+			int rv = 0;
+
+			HttpWebRequest webRequest = this.CreateRequest(url, referrerURL);
+			webRequest.Method = "HEAD";
+
+			try
+			{
+				HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();
+				headerCollection = webResponse.Headers;
+
+				rv = (int)webResponse.StatusCode;
+
+				webResponse.Close();
+				webResponse = null;
+			}
+			catch (WebException xc)
+			{
+				if (xc.Response is HttpWebResponse)
+				{
+					HttpWebResponse rs = xc.Response as HttpWebResponse;
+
+					rv = (int)rs.StatusCode;
+				}
+				else
+				{
+					rv = (int)xc.Status;
+				}
+			}
+			catch
+			{
+				// do nothing
+			}
+
+			return rv;
+		}
+	}
+}
\ No newline at end of file
diff --git a/RyzStudio/Windows/Forms/StackLayoutPanel.cs b/RyzStudio/Windows/Forms/StackLayoutPanel.cs
new file mode 100644
index 0000000..8cdeae5
--- /dev/null
+++ b/RyzStudio/Windows/Forms/StackLayoutPanel.cs
@@ -0,0 +1,69 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace RyzStudio.Windows.Forms
+{
+    public class StackLayoutPanel : FlowLayoutPanel
+    {
+        public StackLayoutPanel() : base()
+        {
+            this.AutoScroll = true;
+            this.FlowDirection = FlowDirection.TopDown;
+            this.WrapContents = false;
+        }
+
+        protected override void OnResize(EventArgs eventargs)
+        {
+            base.OnResize(eventargs);
+
+            //int w = this.ClientRectangle.Width - SystemInformation.VerticalScrollBarWidth;
+            int w = this.ClientRectangle.Width - 1;
+
+            foreach (Control item in this.Controls)
+            {
+                if (item.Width != w)
+                {
+                    item.Width = w;
+                }
+            }
+        }
+
+        protected override void OnControlAdded(ControlEventArgs e)
+        {
+            base.OnControlAdded(e);
+
+            OnResize(null);
+        }
+
+        protected override void OnControlRemoved(ControlEventArgs e)
+        {
+            base.OnControlRemoved(e);
+
+            OnResize(null);
+        }
+
+        public void AddControl(Control value)
+        {
+            if (this.InvokeRequired)
+            {
+                this.Invoke(new MethodInvoker(() =>
+                {
+                    value.Margin = new Padding(0, 3, 0, 3);
+
+                    this.Controls.Add(value);
+                }));
+            }
+            else
+            {
+                value.Margin = new Padding(0, 3, 0, 3);
+
+                this.Controls.Add(value);
+            }
+        }
+
+    }
+}
diff --git a/RyzStudio/Windows/Forms/TFlatButton.cs b/RyzStudio/Windows/Forms/TFlatButton.cs
new file mode 100644
index 0000000..b50dee0
--- /dev/null
+++ b/RyzStudio/Windows/Forms/TFlatButton.cs
@@ -0,0 +1,115 @@
+using System.Drawing;
+using System.Windows.Forms;
+
+namespace RyzStudio.Windows.Forms
+{
+    public class TFlatButton : Label
+    {
+        public class ButtonStyle
+        {
+            public Color BackColour { get; set; } = Color.Transparent;
+            public Color PenColour { get; set; } = Color.Transparent;
+        }
+
+        public enum FlatButtonState
+        {
+            Idle = 0,
+            Hover,
+            Down
+        }
+
+        protected FlatButtonState controlState = FlatButtonState.Idle;
+
+        public TFlatButton() : base()
+        {
+            this.AutoSize = false;
+            this.ImageAlign = ContentAlignment.MiddleCenter;
+            this.TextAlign = ContentAlignment.MiddleCenter;
+
+            // customise
+            this.StyleOver = new ButtonStyle()
+            {
+                BackColour = Color.FromArgb(51, 51, 51),
+                PenColour = Color.White
+            };
+            this.StyleDown = new ButtonStyle()
+            {
+                BackColour = Color.FromArgb(179, 179, 179),
+                PenColour = Color.Black
+            };
+            this.StyleDefault = new ButtonStyle()
+            {
+                BackColour = Color.White,
+                PenColour = Color.Black
+            };
+
+            this.VisualState = FlatButtonState.Idle;
+
+            this.Click += delegate { this.OnClick(null); };
+            this.MouseEnter += delegate { this.VisualState = FlatButtonState.Hover; };
+            this.MouseLeave += delegate { this.VisualState = FlatButtonState.Idle; };
+            this.MouseDown += delegate { this.VisualState = FlatButtonState.Down; };
+            this.MouseUp += delegate { this.VisualState = FlatButtonState.Idle; };
+        }
+
+        protected FlatButtonState VisualState
+        {
+            get { return controlState; }
+            set
+            {
+                switch (value)
+                {
+                    case FlatButtonState.Idle:
+                        if (this.VisualState == FlatButtonState.Down)
+                        {
+                            updateButton(StyleOver);
+                        }
+                        else
+                        {
+                            updateButton(StyleDefault);
+                        }
+
+                        break;
+                    case FlatButtonState.Hover:
+                        updateButton(StyleOver);
+                        break;
+                    case FlatButtonState.Down:
+                        updateButton(StyleDown);
+                        break;
+                    default:
+                        updateButton(StyleDefault);
+                        break;
+                }
+
+                controlState = value;
+            }
+        }
+
+        protected void updateButton(ButtonStyle style)
+        {
+            this.ForeColor = style.PenColour;
+            this.BackColor = style.BackColour;
+        }
+
+        protected ButtonStyle StyleOver { get; set; } = new ButtonStyle();
+
+        protected ButtonStyle StyleDown { get; set; } = new ButtonStyle();
+
+        protected ButtonStyle StyleDefault { get; set; } = new ButtonStyle();
+
+        public void PerformClick()
+        {
+            if (this.InvokeRequired)
+            {
+                this.Invoke(new MethodInvoker(() => {
+                    this.OnClick(null);
+                }));
+            }
+            else
+            {
+                this.OnClick(null);
+            }
+        }
+
+    }
+}
diff --git a/RyzStudio/Windows/Forms/TForm.cs b/RyzStudio/Windows/Forms/TForm.cs
new file mode 100644
index 0000000..58ed7dc
--- /dev/null
+++ b/RyzStudio/Windows/Forms/TForm.cs
@@ -0,0 +1,434 @@
+using System;
+using System.ComponentModel;
+using System.Drawing;
+using System.Windows.Forms;
+//using Resources = AppLauncher.Properties.Resources;
+
+namespace RyzStudio.Windows.Forms
+{
+    public class TForm : Form
+    {
+        //protected readonly Color borderColour = Color.FromArgb(200, 200, 200);
+        //protected readonly int borderWidth = 1;
+
+        //protected readonly int resizeBorderWidth = 4;
+
+        protected readonly Color backColour = Color.FromArgb(250, 250, 250);
+
+        //protected readonly Color titleBackColour = Color.FromArgb(235, 234, 233);
+        //protected readonly Color titleBorderColour = Color.FromArgb(200, 198, 196);
+        //protected readonly Color titleColour = Color.FromArgb(102, 102, 102);
+        //protected readonly int titleBarHeight = 33;
+        //protected readonly bool showTitleBarLine = true;
+        //protected Font titleFont = null;
+        //protected int titleFontTop = 0;
+
+        //protected readonly Size titleBarIconSize = new Size(48, 32);
+        //protected readonly int titleBarIconMargin = 0;
+        //protected readonly int titleBarIconMarginRight = 0;
+
+        //protected Image appIcon = null;
+        //protected const int appIconLeft = 12;
+        //protected const int appIconRight = 6;
+        //protected int appIconTop = 0;
+
+        protected bool isDragging = false;
+        protected Point startPosition = new Point();
+
+        //protected Point startWindowSize = new Point();
+
+        //protected bool enableMinimise { get; set; } = true;
+        //protected bool enableMaximise { get; set; } = true;
+        //protected bool enableClose { get; set; } = true;
+        //protected bool closeOnMinimise { get; set; } = false;
+
+        protected bool isBusy = false;
+
+        private IContainer components;
+
+        public TForm() : base()
+        {
+            InitializeComponent();
+
+            //if (!this.DesignMode)
+            //{
+            //    this.FormBorderStyle = FormBorderStyle.None;
+            //    this.StartPosition = FormStartPosition.Manual;
+            //}
+
+            this.AutoScaleMode = AutoScaleMode.Font;
+            this.BackColor = backColour;
+            this.FormBorderStyle = FormBorderStyle.Sizable;
+            this.Padding = new Padding(0);
+            this.DoubleBuffered = true;
+
+            this.MouseDown += new MouseEventHandler(form_MouseDown);
+            this.MouseMove += new MouseEventHandler(form_MouseMove);
+            this.MouseUp += new MouseEventHandler(form_MouseUp);
+            this.PreviewKeyDown += new PreviewKeyDownEventHandler(form_PreviewKeyDown);
+        }
+
+        protected override void OnLoad(EventArgs e)
+        {
+            base.OnLoad(e);
+
+            this.Text = Application.ProductName;
+
+            //initialiseLoadComponent();
+
+            //if (appIcon != null) appIconTop = (int)Math.Floor((decimal)(titleBarHeight - appIcon.Height) / 2) + borderWidth;
+            //titleFont = new Font(this.Font.FontFamily, 10F);
+            //titleFontTop = (int)Math.Floor((decimal)(titleBarHeight - TextRenderer.MeasureText("#", titleFont).Height) / 2) + borderWidth;
+
+        }
+
+        //protected override void OnMouseClick(MouseEventArgs e)
+        //{
+        //    base.OnMouseClick(e);
+
+        //    bool isLabel = ((e.Location.X >= 0) && (e.Location.X <= this.Width) && (e.Location.Y >= 0) && (e.Location.Y <= titleBarHeight));
+
+        //    if (e.Button == MouseButtons.Left)
+        //    {
+        //        if (isLabel)
+        //        {
+        //            // do nothing
+        //        }
+        //        else
+        //        {
+        //            // do nothing
+        //        }
+        //    }
+        //    else if (e.Button == MouseButtons.Right)
+        //    {
+        //        if (isLabel)
+        //        {
+        //            if (this.TitleContextMenuStrip != null)
+        //            {
+        //                this.TitleContextMenuStrip.Show(this, e.Location);
+        //            }
+        //        }
+        //        else
+        //        {
+        //            // do nothing
+        //        }
+        //    }
+        //}
+
+        //protected override void OnPaint(PaintEventArgs e)
+        //{
+        //    base.OnPaint(e);
+
+        //    Graphics g = e.Graphics;
+        //    Rectangle area = new Rectangle(this.DisplayRectangle.X, this.DisplayRectangle.Y, (this.DisplayRectangle.Width - borderWidth), (this.DisplayRectangle.Height - borderWidth));
+
+        //    // border
+        //    g.DrawRectangle(new Pen(borderColour, borderWidth), area);
+
+        //    area.Inflate((-1 * borderWidth), (-1 * borderWidth));
+
+            //g.FillRectangle(new SolidBrush(titleBackColour), area.X, area.Y, (area.Width + area.X), titleBarHeight);
+
+            //if (showTitleBarLine) g.DrawLine(new Pen(titleBorderColour, 1), area.X, titleBarHeight, (area.Width + area.X), titleBarHeight);
+
+            //if (!DesignMode)
+            //{
+            //    if (appIcon != null) g.DrawImageUnscaled(appIcon, appIconLeft, appIconTop);
+
+            //    int iconPosX = borderWidth + appIconLeft + appIconRight + ((appIcon == null) ? 0 : appIcon.Width);
+            //    TextRenderer.DrawText(g, this.Text, titleFont, new Point(iconPosX, titleFontTop), titleColour);
+            //}
+        //}
+
+        protected override void OnResize(EventArgs e)
+        {
+            base.OnResize(e);
+
+            this.Invalidate();
+        }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public override Color BackColor { get => base.BackColor; set => base.BackColor = backColour; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public new FormBorderStyle FormBorderStyle { get => base.FormBorderStyle; set => base.FormBorderStyle = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public new Padding Padding { get => base.Padding; set => base.Padding = value; }
+
+        [Category("Appearance")]
+        public ContextMenuStrip TitleContextMenuStrip { get; set; } = null;
+
+        //[Browsable(false)]
+        //public Image AppIcon { get; set; } = null;
+
+        //[Browsable(false)]
+        //public bool IsMaximiseEnabled { get; set; } = false;
+
+        //protected Point DefaultLocation
+        //{
+        //    get
+        //    {
+        //        Point newPosition = new Point(Cursor.Position.X, Cursor.Position.Y);
+        //        newPosition.X -= (this.Width / 2);
+        //        newPosition.Y -= (this.Height / 2);
+
+        //        newPosition.X = Math.Max(newPosition.X, Screen.PrimaryScreen.WorkingArea.Left);
+        //        newPosition.Y = Math.Max(newPosition.Y, Screen.PrimaryScreen.WorkingArea.Top);
+
+        //        return newPosition;
+        //    }
+        //}
+
+        private void InitializeComponent()
+        {
+            this.components = new System.ComponentModel.Container();
+            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TForm));
+            this.SuspendLayout();
+            //
+            // AForm
+            //
+            this.Name = "AForm";
+            this.ResumeLayout(false);
+        }
+
+        private void form_MouseDown(object sender, MouseEventArgs e)
+        {
+            if (e.Button == MouseButtons.Left)
+            {
+                isDragging = true;
+                startPosition = e.Location;
+                //startWindowSize = new Point(this.Width, this.Height);
+            }
+        }
+
+        private void form_MouseMove(object sender, MouseEventArgs e)
+        {
+            if (isDragging)
+            {
+                int x = (this.Location.X + (e.Location.X - startPosition.X));
+                int y = (this.Location.Y + (e.Location.Y - startPosition.Y));
+
+                //this.Location = validateFormLocation(x, y);
+                this.Location = new Point(x, y);
+            }
+        }
+
+        private void form_MouseUp(object sender, MouseEventArgs e)
+        {
+            isDragging = false;
+        }
+
+        private void form_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
+        {
+            if (e.KeyCode == Keys.Escape)
+            {
+                Application.Exit();
+            }
+        }
+
+        //protected virtual void initialiseLoadComponent()
+        //{
+        //    if (DesignMode) return;
+
+        //    // close
+        //    TImageBox closeBox = generateToolbarImageBox();
+        //    closeBox.Image = closeBox.ImageNormal = (enableClose) ? Resources.titlebar_close : Resources.titlebar_blank;
+        //    closeBox.ImageHover = (enableClose) ? Resources.titlebar_close3 : Resources.titlebar_blank;
+        //    closeBox.ImageSelected = Resources.titlebar_close3;
+        //    closeBox.MouseClick += delegate (object sender, MouseEventArgs e)
+        //    {
+        //        if (e.Button == MouseButtons.Left)
+        //        {
+        //            if (enableClose)
+        //            {
+        //                this.Close();
+        //            }
+        //        }
+        //    };
+        //    closeBox.Left = this.DisplayRectangle.Width - closeBox.Width - (titleBarIconMarginRight + borderWidth);
+
+        //    this.Controls.Add(closeBox);
+
+        //    // maximise
+        //    TImageBox maximiseBox = generateToolbarImageBox();
+        //    maximiseBox.Image = maximiseBox.ImageNormal = (enableMaximise) ? Resources.titlebar_maximise : Resources.titlebar_blank;
+        //    maximiseBox.ImageHover = (enableMaximise) ? Resources.titlebar_maximise5 : Resources.titlebar_blank;
+        //    maximiseBox.ImageSelected = Resources.titlebar_maximise3;
+        //    maximiseBox.MouseClick += delegate (object sender, MouseEventArgs e)
+        //    {
+        //        if (!(sender is TImageBox)) return;
+
+        //        TImageBox imageBox2 = (sender as TImageBox);
+
+        //        if (imageBox2 == null) return;
+
+        //        if (e.Button == MouseButtons.Left)
+        //        {
+        //            if (enableMaximise)
+        //            {
+        //                if (this.WindowState == FormWindowState.Maximized)
+        //                {
+        //                    this.WindowState = FormWindowState.Normal;
+        //                    imageBox2.Image = imageBox2.ImageNormal = Resources.titlebar_maximise;
+        //                }
+        //                else
+        //                {
+        //                    this.WindowState = FormWindowState.Maximized;
+        //                    imageBox2.Image = imageBox2.ImageNormal = Resources.titlebar_maximise5;
+        //                }
+        //            }
+        //        }
+        //        else if (e.Button == MouseButtons.Right)
+        //        {
+        //            this.TopMost = !this.TopMost;
+
+        //            if (this.TopMost)
+        //            {
+        //                imageBox2.Image = imageBox2.ImageNormal = Resources.titlebar_maximise3;
+        //                imageBox2.ImageHover = (enableMaximise) ? Resources.titlebar_maximise5 : Resources.titlebar_maximise3;
+        //            }
+        //            else
+        //            {
+        //                imageBox2.Image = imageBox2.ImageNormal = (enableMaximise) ? Resources.titlebar_maximise : Resources.titlebar_blank;
+        //                imageBox2.ImageHover = (enableMaximise) ? Resources.titlebar_maximise5 : Resources.titlebar_blank;
+        //            }
+        //        }
+        //    };
+        //    maximiseBox.Left = closeBox.Left - maximiseBox.Width - titleBarIconMargin;
+
+        //    this.Controls.Add(maximiseBox);
+
+        //    // minimise
+        //    TImageBox minimiseBox = generateToolbarImageBox();
+        //    minimiseBox.Image = minimiseBox.ImageNormal = (enableMinimise) ? Resources.titlebar_minimise : Resources.titlebar_blank;
+        //    minimiseBox.ImageHover = (enableMinimise) ? Resources.titlebar_minimise5 : Resources.titlebar_blank;
+        //    //minimiseBox.ImageSelected = null;
+        //    minimiseBox.MouseClick += delegate (object sender, MouseEventArgs e)
+        //    {
+        //        if (!enableMinimise) return;
+        //        if (e.Button != MouseButtons.Left) return;
+
+        //        if (closeOnMinimise)
+        //        {
+        //            this.Close();
+        //        }
+        //        else
+        //        {
+        //            this.WindowState = FormWindowState.Minimized;
+        //        }
+        //    };
+        //    minimiseBox.Left = maximiseBox.Left - minimiseBox.Width - titleBarIconMargin;
+
+        //    this.Controls.Add(minimiseBox);
+
+        //    // resize
+        //    UserControl uc1 = new UserControl()
+        //    {
+        //        Anchor = (AnchorStyles.Left | AnchorStyles.Bottom | AnchorStyles.Right),
+        //        Height = resizeBorderWidth,
+        //        Width = this.DisplayRectangle.Width - resizeBorderWidth,
+        //        Left = 0,
+        //        Top = this.DisplayRectangle.Height - resizeBorderWidth,
+        //        BackColor = Color.Transparent,
+        //        Cursor = Cursors.SizeNS
+        //    };
+        //    uc1.MouseDown += form_MouseDown;
+        //    uc1.MouseUp += form_MouseUp;
+        //    uc1.MouseMove += delegate (object sender, MouseEventArgs e)
+        //    {
+        //        if (isDragging)
+        //        {
+        //            this.Size = new Size(startWindowSize.X, e.Y - startPosition.Y + this.Height);
+        //        }
+        //    };
+        //    uc1.BringToFront();
+
+        //    this.Controls.Add(uc1);
+
+        //    UserControl uc2 = new UserControl()
+        //    {
+        //        Anchor = (AnchorStyles.Top | AnchorStyles.Right | AnchorStyles.Bottom),
+        //        Height = this.DisplayRectangle.Height - resizeBorderWidth,
+        //        Width = resizeBorderWidth,
+        //        Left = this.DisplayRectangle.Width - resizeBorderWidth,
+        //        Top = 0,
+        //        BackColor = Color.Transparent,
+        //        Cursor = Cursors.SizeWE
+        //    };
+        //    uc2.MouseDown += form_MouseDown;
+        //    uc2.MouseUp += form_MouseUp;
+        //    uc2.MouseMove += delegate (object sender, MouseEventArgs e)
+        //    {
+        //        if (isDragging)
+        //        {
+        //            this.Size = new Size(e.X - startPosition.X + this.Width, startWindowSize.Y);
+        //        }
+        //    };
+        //    uc2.BringToFront();
+
+        //    this.Controls.Add(uc2);
+
+        //    UserControl uc3 = new UserControl()
+        //    {
+        //        Anchor = (AnchorStyles.Bottom | AnchorStyles.Right),
+        //        Height = resizeBorderWidth,
+        //        Width = resizeBorderWidth,
+        //        Left = this.DisplayRectangle.Width - resizeBorderWidth,
+        //        Top = this.DisplayRectangle.Height - resizeBorderWidth,
+        //        BackColor = Color.Transparent,
+        //        Cursor = Cursors.SizeNWSE
+        //    };
+        //    uc3.MouseDown += form_MouseDown;
+        //    uc3.MouseUp += form_MouseUp;
+        //    uc3.MouseMove += delegate (object sender, MouseEventArgs e)
+        //    {
+        //        if (isDragging)
+        //        {
+        //            this.Size = new Size((e.X - startPosition.X + this.Width), (e.Y - startPosition.Y + this.Height));
+        //        }
+        //    };
+        //    uc3.BringToFront();
+
+        //    this.Controls.Add(uc3);
+        //}
+
+        //protected TImageBox generateToolbarImageBox()
+        //{
+        //    TImageBox imageBox = new TImageBox();
+        //    //imageBox.BackColor = Color.Transparent;
+        //    imageBox.BackColorHover = imageBox.BackColorSelected = Color.FromArgb(220, 220, 220);
+        //    imageBox.BackgroundImageLayout  = ImageLayout.Center;
+        //    imageBox.ErrorImage = null;
+        //    //imageBox.Image = Resources.close;
+        //    //imageBox.ImageHover = Resources.close2;
+        //    //imageBox.ImageNormal = Resources.close;
+        //    imageBox.ImageSelected = null;
+        //    imageBox.IsSelected = false;
+        //    //closeBox.Location = new System.Drawing.Point(169, 12);
+        //    imageBox.Size = titleBarIconSize;
+        //    imageBox.SizeMode = PictureBoxSizeMode.CenterImage;
+        //    //imageBox.MouseClick += new MouseEventHandler(closeBox_MouseClick);
+        //    //imageBox.Left = this.DisplayRectangle.Width - imageBox.Width - 17;
+        //    imageBox.Top = (int)Math.Floor((decimal) (titleBarHeight - titleBarIconSize.Height) / 2) + borderWidth;
+        //    imageBox.Anchor = (AnchorStyles.Top | AnchorStyles.Right);
+        //    imageBox.Padding = new Padding(0);
+
+        //    return imageBox;
+        //}
+
+        //private void exitToolStripMenuItem_Click(object sender, EventArgs e) => this.Close();
+
+        //private void notifyIcon1_MouseClick(object sender, MouseEventArgs e)
+        //{
+        //    if (e.Button == MouseButtons.Left)
+        //    {
+        //        this.Visible = !this.Visible;
+        //    }
+
+        //    //notifyIcon1.Visible = !this.Visible;
+        //}
+
+
+    }
+}
\ No newline at end of file
diff --git a/RyzStudio/Windows/Forms/TForm.resx b/RyzStudio/Windows/Forms/TForm.resx
new file mode 100644
index 0000000..b723165
--- /dev/null
+++ b/RyzStudio/Windows/Forms/TForm.resx
@@ -0,0 +1,424 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="notifyIcon1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <metadata name="contextMenuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>130, 17</value>
+  </metadata>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="notifyIcon1.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAABAAQAMDAAAAEAIACoJQAARgAAACAgAAABACAAqBAAAO4lAAAYGAAAAQAgAIgJAACWNgAAEBAAAAEA
+        IABoBAAAHkAAACgAAAAwAAAAYAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGxc
+        VU5rW1Tna1tU22paU5BsXVVCgEBABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAaltTZWtbVPxrW1T/a1tU/2tbVP9rW1T/a1tU7mtbU6VrXFNWbVtbDgAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAABqWlR/a1tU/2tbVP9rW1T/a1tU/2tbVP9rW1T/a1tU/2tbVP9rW1T/a1tU+Wta
+        VLprW1Nrb15VHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAVVVVA2tbVJhrW1T/a1tU/2tbVP+NgXz/2NPR/6+mov+Bc23/a1tU/2tb
+        VP9rW1T/a1tU/2tbVP9rW1T/a1tU/2tbVc1sXFSAa1xSMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABtSUkHa1xUqmtbVP9rW1T/a1tU/5iNiP/6+fn/////////
+        ////////6+no/7+4tf+Sh4L/bV5X/2tbVP9rW1T/a1tU/2tbVP9rW1T/a1tU/2tbVOFrXFOZallTTW1J
+        SQcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGlaWhFqW1TCa1tU/2tbVP9rW1T/o5mV//38
+        /P//////////////////////////////////////9PPy/8jDwP+cko3/c2Nd/2tbVP9rW1T/a1tU/2tb
+        VP9rW1T/a1tU/2tbVPVrW1SzalxUXmlaWhEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAalhYHWtbVNRrW1T/a1tU/2tb
+        VP+1rar/////////////////////////////////////////////////////////////////+vn5/9LN
+        y/+lm5f/eGpj/2tbVP9rW1T/a1tU/2tbVP9rW1T/a1tU/2tbVPtrWlS9bFxVb2xdVSEAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABrWVMra1tU42tb
+        VP9rW1T/bV1W/8S9u///////////////////////////////////////////////////////////////
+        /////////////////////////v7+/97a2f+xqKT/g3Zw/2tbVP9rW1T/a1tU/2tbVP9rW1T/a1tU/2tb
+        VP5qW1V4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGpZ
+        VTxrW1Tua1tU/2tbVP9wYVr/0czK////////////////////////////////////////////////////
+        /////////////////////////////////////////////////////////////+ro5/+8tbL/j4N+/21d
+        Vv9rW1T/a1tU/2tbVP9rW1TpAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAbFxTUGtbVPZrW1T/a1tU/3VnYP/d2df/////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        //////////////Tz8v/Iw8D/dmdh/2tbVP9rW1T/blpTJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAABsXFRha1tU+2tbVP9rW1T/emxl/+Th4P//////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////m5CL/2tbVP9rW1T/a1tTXwAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGtaVHdrW1T/a1tU/2tbVP+DdnD/7uzs/////////////Pvw//z6
+        7v/8+u7//Pru//z67v/8+u7//Pru//z67v/9/PT///////////////////////z4+f/79fX/+/X1//v1
+        9f/79fX/+/X1//v19f/79fX//Pb2////////////////////////////vLWy/2tbVP9rW1T/a1xTmQAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVVVUDa1tUmGtbVP9rW1T/a1tU/4t/ev/08/L/////////
+        ///cyT7/0bcA/9G3AP/RtwD/0bcA/9G3AP/RtwD/0bcA/9G3AP/RtwD/6Nt+////////////4bG1/8Rl
+        bP/EZWz/xGVs/8RlbP/EZWz/xGVs/8RlbP/EZWz/xGVs/9KKkP//////////////////////3tvZ/2tb
+        VP9rW1T/a1tU1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG1JSQdrW1Sra1tU/2tbVP9rW1T/mY6J//r5
+        +f////////////389f/RtwD/0bcA/9G3AP/RtwD/0bcA/9G3AP/RtwD/0bcA/9G3AP/RtwD/28Y1////
+        ////////0IWL/8RlbP/EZWz/xGVs/8RlbP/EZWz/xGVs/8RlbP/EZWz/xGVs/8RlbP/9+fn/////////
+        /////////Pz8/3BhWv9rW1T/a1tU/nFVVRIAAAAAAAAAAAAAAAAAAAAAaVpaEWtcVMNrW1T/a1tU/2tb
+        VP+kmpb//fz8//////////////////389P/RtwD/0bcA/+TVbP/w56r/8Oeq//Dnqv/w56r/8Oeq/93K
+        Qv/RtwD/28Y1////////////0IWL/8RlbP/TjZL/68zO/+vMzv/rzM7/68zO/+vMzv/dpqr/xGVs/8Rl
+        bP/8+Pn//////////////////////46CfP9rW1T/a1tU/2xbVEkAAAAAAAAAAAAAAABsWFgaa1xU0Wtb
+        VP9rW1T/a1tU/7CopP////////////////////////////389P/RtwD/0bcA/+7lov//////////////
+        /////////////+PTY//RtwD/28Y1////////////0IWL/8RlbP/boaX/////////////////////////
+        ///px8n/xGVs/8RlbP/8+Pn//////////////////////7CopP9rW1T/a1tU/2tbVIMAAAAAAAAAAAAA
+        AABqXFTOa1tU/2tbVP9tXlf/xr+9//////////////////////////////////389P/RtwD/0bcA/+7l
+        ov///////////////////////////+PTY//RtwD/28Y1////////////0IWL/8RlbP/boaX/////////
+        ///////////////////px8n/xGVs/8RlbP/8+Pn//////////////////////9LNy/9rW1T/a1tU/2tb
+        VL8AAAAAAAAAAAAAAABrW1Tva1tU/2tbVP/KxML///////////////////////////////////////38
+        9P/RtwD/0bcA/+7lov///////////////////////////+PTY//RtwD/28Y1////////////0IWL/8Rl
+        bP/boaX////////////////////////////px8n/xGVs/8RlbP/8+Pn///////////////////////Py
+        8v9sXFX/a1tU/2tbVPRmZmYFAAAAAAAAAABrW1W4a1tU/2tbVP/Oycf/////////////////////////
+        //////////////389P/RtwD/0bcA/+7lov///////////////////////////+PTY//RtwD/28Y1////
+        ////////0IWL/8RlbP/boaX////////////////////////////px8n/xGVs/8RlbP/8+Pn/////////
+        //////////////////+CdG7/a1tU/2tbVP9sXVM0AAAAAAAAAABqWlR/a1tU/2tbVP+tpKD/////////
+        //////////////////////////////389P/RtwD/0bcA/+7lov///////////////////////////+PT
+        Y//RtwD/28Y1////////////0IWL/8RlbP/boaX////////////////////////////px8n/xGVs/8Rl
+        bP/8+Pn///////////////////////////+jmZX/a1tU/2tbVP9rWlNuAAAAAAAAAABtWlNEa1tU/2tb
+        VP+Lfnn///////////////////////////////////////389P/RtwD/0bcA/93JQf/j1Gb/49Rm/+PU
+        Zv/j1Gb/49Rm/9jCJ//RtwD/28Y1////////////0IWL/8RlbP/NfYL/3KOn/9yjp//co6f/3KOn/9yj
+        p//TjJH/xGVs/8RlbP/8+Pn////////////////////////////Fv7z/a1tU/2tbVP9qW1OoAAAAAAAA
+        AABqVVUMa1tU+2tbVP9uXlf/+fn4//////////////////////////////////389P/RtwD/0bcA/9G3
+        AP/RtwD/0bcA/9G3AP/RtwD/0bcA/9G3AP/RtwD/28c5////////////0IWL/8RlbP/EZWz/xGVs/8Rl
+        bP/EZWz/xGVs/8RlbP/EZWz/xGVs/8Rmbf/9+vr////////////////////////////n5eT/a1tU/2tb
+        VP9rW1TkAAAAAAAAAAAAAAAAa1tUz2tbVP9rW1T/3NjW//////////////////////////////////38
+        9v/axTP/2sUz/9rFM//axTP/2sUz/9rFM//axTP/2sUz/9rFM//bxzj/8Ois////////////2p2i/9CE
+        if/QhIn/0ISJ/9CEif/QhIn/0ISJ/9CEif/QhIn/0ISJ/+GwtP//////////////////////////////
+        ///+/v7/dWdg/2tbVP9rW1T/alhYHQAAAAAAAAAAa1tUlGtbVP9rW1T/ubKv////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////l4uG/2tbVP9rW1T/a1pUWAAAAAAAAAAAbFtVWmtbVP9rW1T/mI2I////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////uLGt/2tbVP9rW1T/a1tUkgAAAAAAAAAAa1pSH2tb
+        VP9rW1T/dmdh//7+/v////////////////////////////////+rnPH/fGTp/3xk6f98ZOn/fGTp/3xk
+        6f98ZOn/fGTp/3xk6f9/aOr/ysD2////////////rOH9/zi4+v8ztvr/M7b6/zO2+v8ztvr/M7b6/zO2
+        +v8ztvr/M7b6/33R/P//////////////////////////////////////2tbV/2tbVP9rW1T/a1tVzQAA
+        AAAAAAAAAAAAAGtbVONrW1T/a1tU/+jm5f////////////////////////////r5/v9cPuT/Wz3k/1s9
+        5P9bPeT/Wz3k/1s95P9bPeT/Wz3k/1s95P9bPeT/gGjq////////////Obj6/wCk+f8ApPn/AKT5/wCk
+        +f8ApPn/AKT5/wCk+f8ApPn/AKT5/wGk+f/3/P//////////////////////////////////+vn5/25f
+        WP9rW1T/a1tU/GpVVQwAAAAAAAAAAGtcVKprW1T/a1tU/8bAvf////////////////////////////j3
+        /v9bPeT/Wz3k/4Vu6/+di+//nYvv/52L7/+di+//nYvv/3Rb6P9bPeT/fWXq////////////Nbf6/wCk
+        +f8nsvr/Zsj7/2bI+/9myPv/Zsj7/2bI+/9Bu/v/AKT5/wCk+f/0+///////////////////////////
+        /////////////4p9eP9rW1T/a1tU/2xdVUIAAAAAAAAAAGtbVHBrW1T/a1tU/6Sblv//////////////
+        //////////////j3/v9bPeT/Wz3k/8O49f///////////////////////////5uI7v9bPeT/fWXq////
+        ////////Nbf6/wCk+f9jx/v///////////////////////////+i3v3/AKT5/wCk+f/0+///////////
+        /////////////////////////////6yjn/9rW1T/a1tU/2pcVH0AAAAAAAAAAGxdUzRrW1T/a1tU/4J0
+        bv////////////////////////////j3/v9bPeT/Wz3k/8O49f///////////////////////////5uI
+        7v9bPeT/fWXq////////////Nbf6/wCk+f9jx/v///////////////////////////+i3v3/AKT5/wCk
+        +f/0+////////////////////////////////////////87Jx/9rW1T/a1tU/2tbVbgAAAAAAAAAAGZm
+        ZgVrW1T0a1tU/2xcVf/z8vL///////////////////////j3/v9bPeT/Wz3k/8O49f//////////////
+        /////////////5uI7v9bPeT/fWXq////////////Nbf6/wCk+f9jx/v/////////////////////////
+        //+i3v3/AKT5/wCk+f/0+////////////////////////////////////////8rEwv9rW1T/a1tU/2tb
+        VO8AAAAAAAAAAAAAAABrW1S/a1tU/2tbVP/Szcv///////////////////////j3/v9bPeT/Wz3k/8O4
+        9f///////////////////////////5uI7v9bPeT/fWXq////////////Nbf6/wCk+f9jx/v/////////
+        //////////////////+i3v3/AKT5/wCk+f/0+///////////////////////////////////xr+9/21e
+        V/9rW1T/a1tU/2pcVM4AAAAAAAAAAAAAAABrWlSFa1tU/2tbVP+xqaX///////////////////////j3
+        /v9bPeT/Wz3k/8O49f///////////////////////////5uI7v9bPeT/fWXq////////////Nbf6/wCk
+        +f9jx/v///////////////////////////+i3v3/AKT5/wCk+f/0+///////////////////////////
+        //+6sq//bFxV/2tbVP9rW1T/a1tT1m9eVR4AAAAAAAAAAAAAAABpXFVLa1tU/2tbVP+Pg37/////////
+        //////////////j3/v9bPeT/Wz3k/6CP7//Ivvb/yL72/8i+9v/Ivvb/yL72/4Vv6/9bPeT/fWXq////
+        ////////Nbf6/wCk+f9CvPv/quH9/6rh/f+q4f3/quH9/6rh/f9sy/z/AKT5/wCk+f/0+///////////
+        /////////f39/6ifmv9rW1T/a1tU/2tbVP9rW1TIZllZFAAAAAAAAAAAAAAAAAAAAABpWloRa1tU/Wtb
+        VP9wYVr//Pv7//////////////////j3/v9bPeT/Wz3k/1s95P9bPeT/Wz3k/1s95P9bPeT/Wz3k/1s9
+        5P9bPeT/fWXq////////////Nbf6/wCk+f8ApPn/AKT5/wCk+f8ApPn/AKT5/wCk+f8ApPn/AKT5/wCk
+        +f/1+//////////////7+vr/nZKO/2tbVP9rW1T/a1tU/2tcVbJmZk0KAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAa1tT1mtbVP9rW1T/4Nzb//////////////////j3/v9bPeT/Wz3k/1s95P9bPeT/Wz3k/1s9
+        5P9bPeT/Wz3k/1s95P9bPeT/rJ3x////////////Nbf6/wCk+f8ApPn/AKT5/wCk+f8ApPn/AKT5/wCk
+        +f8ApPn/AKT5/z66+v////////////b19P+Pg37/a1tU/2tbVP9rW1T/a1tTn4BAQAQAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAa1pUm2tbVP9rW1T/vbaz//////////////////7+///08v3/9PL9//Ty
+        /f/08v3/9PL9//Ty/f/08v3/9PL9//Ty/f/49/7/////////////////8vr//+75///u+f//7vn//+75
+        ///u+f//7vn//+75///u+f//8Pr/////////////8O/u/4Z5dP9rW1T/a1tU/2tbVP9rXFSIAAAAAQAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbFxUYWtbVP9rW1T/nJGM////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ///////////////////////////////////////////////////n5eT/fG5o/2tbVP9rW1T/a1tU/Gta
+        VWkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAblpTJWtbVP9rW1T/dmdh/8jD
+        wP/08/L/////////////////////////////////////////////////////////////////////////
+        /////////////////////////////////////////////////////////////93Z1/91Z2D/a1tU/2tb
+        VP9rW1T2bFxTUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWtb
+        VOlrW1T/a1tU/2tbVP9tXVb/j4N+/7y1sv/q6Of/////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////0czK/3Bh
+        Wv9rW1T/a1tU/2tbVO5qWVU8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAGpbVXhrW1T+a1tU/2tbVP9rW1T/a1tU/2tbVP9rW1T/g3Zw/7GopP/e2tn//v7+////
+        ////////////////////////////////////////////////////////////////////////////////
+        ///Evbv/bV1W/2tbVP9rW1T/a1tU42tZUysAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsXVUhbFxVb2taVL1rW1T7a1tU/2tbVP9rW1T/a1tU/2tb
+        VP9rW1T/eGpj/6Wbl//Szcv/+vn5////////////////////////////////////////////////////
+        /////////////7Wtqv9rW1T/a1tU/2tbVP9rW1TUalhYHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABpWloRbFpUVWtb
+        U6JrW1Twa1tU/2tbVP9rW1T/a1tU/2tbVP9rW1T/cGFa/5KHgv+/uLX/8O/u////////////////////
+        ///////////////////9/f3/p56a/2tbVP9rW1T/a1tU/2pbVcdmWVkUAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAABVVVUDallVPGtbVJFrW1Pia1tU/2tbVP9rW1T/a1tU/2tbVP9rW1T/bFxV/4l8
+        dv+1ran/4d7d//////////////////v6+v+cko3/a1tU/2tbVP9rW1T/a1tUsXFVVQkAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa1xSMmxcVIBrW1XNa1tU/2tb
+        VP9rW1T/a1tU/2tbVP9rW1T/a1tU/4Fzbf+vpqL/2NPR/42BfP9rW1T/a1tU/2tbVP9rW1SYVVVVAwAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAb15VHmtbU2trWlS6a1tU+WtbVP9rW1T/a1tU/2tbVP9rW1T/a1tU/2tbVP9rW1T/a1tU/2pa
+        VH8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbVtbDmtcU1ZrW1Ola1tU7mtbVP9rW1T/a1tU/2tb
+        VP9rW1T8altTZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgEBABGxd
+        VUJqWlOQa1tU22tbVOdsXFVOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//4H///+sEP//AD///6wQ//4AB///rBD/+AAA//+sEP/w
+        AAAP/6wQ/+AAAAH/rBD/wAAAAD+sEP+AAAAAH6wQ/wAAAAAPrBD+AAAAAA+sEPwAAAAAD6wQ+AAAAAAP
+        rBDgAAAAAA+sEMAAAAAAB6wQgAAAAAAHrBAAAAAAAAesEAAAAAAAB6wQAAAAAAADrBAAAAAAAAOsEAAA
+        AAAAA6wQAAAAAAADrBAAAAAAAAOsEIAAAAAAAawQgAAAAAABrBCAAAAAAAGsEIAAAAAAAawQwAAAAAAA
+        rBDAAAAAAACsEMAAAAAAAKwQwAAAAAAArBDAAAAAAACsEOAAAAAAAKwQ4AAAAAAArBDgAAAAAAGsEOAA
+        AAAAA6wQ8AAAAAAHrBDwAAAAAA+sEPAAAAAAP6wQ8AAAAAB/rBDwAAAAAP+sEPgAAAAB/6wQ/AAAAAP/
+        rBD/gAAAB/+sEP/wAAAP/6wQ//8AAB//rBD//+AAf/+sEP///AD//6wQ////gf//rBAoAAAAIAAAAEAA
+        AAABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAABsXFRha1tU7GtbVcFqW1RzalxVJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAbFtVe2tbVP5rW1T/a1tU/2tbVP9rW1T/a1tT1mtcVIhrWVU5gICAAgAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAVVVVA2xbVJVrW1T/bV5X/8K7uf/RzMr/pJqW/3hpY/9rW1T/a1tU/2tb
+        VP9rW1TpalxTnGxcVU5mZk0KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAG1JSQdrW1Spa1tU/29fWf/Oycf//////////////////v7+/+He
+        3f+1ran/iXx2/2tbVP9rW1T/a1tU/2tbVPZqW1W7bFxVb2xYWBoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwYFAQbFxUwGtbVP91ZmD+3trZ////////////////////
+        ////////////////////////6efm/7y0sf+Ogn3/bV1W/2tbVP9rW1T/a1tU/WtbVMZrWlR3ZlVVDwAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaF5VG2tbVNJrW1T/fW9p/+fl5P//////////////
+        ///////////////////////////////////////////////////z8vL/x8G//5uQi/9xYlv/a1tU/2tb
+        VP9rW1SPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGpdVylrW1Tha1tU/4V4cv/w7u7/////////
+        //////////////////////////////////////////////////////////////////////////////r6
+        +v/Evbv/a1tU/2xbVMwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABrXVM3a1tU62tbVP+MgHr/9PPy////
+        ////////////////////////////////////////////////////////////////////////////////
+        //////////////v6+v9vX1n/a1tU+2pVVQwAAAAAAAAAAAAAAAAAAAAAallTTWtbVPVrW1T/mY6K//r5
+        +f///v3/1r8d/9G3AP/RtwD/0bcA/9G3AP/RtwD/07oL//r34//57u//x2xy/8RlbP/EZWz/xGVs/8Rl
+        bP/EZWz/y3d9///+/v///////////4yAev9rW1T/alpSQQAAAAAAAAAAAAAAAGpaVWBrW1T7a1tU/6mg
+        nP/+/v7///////799//RtwD/2cMr/+PUZv/j1Gb/49Rm/9zIPP/RtwD/9vHM//Pg4v/EZWz/0omP/9yj
+        p//co6f/3KOn/85/hf/EZWz//fr6////////////rqai/2tbVP9sW1V7AAAAAAAAAABrW1R5a1tU/2xc
+        Vf+4sa3//////////////////v33/9G3AP/k1Wz/////////////////7OGW/9G3AP/28cz/8+Di/8Rl
+        bP/nwML/////////////////3aaq/8RlbP/9+vr////////////RzMn/a1tU/2pbVLYAAAAAAAAAAGtb
+        VO5rW1T/w726///////////////////////+/ff/0bcA/+TVbP/////////////////s4Zb/0bcA//bx
+        zP/z4OL/xGVs/+fAwv/////////////////dpqr/xGVs//36+v////////////Lw8P9rW1T/a1tU74CA
+        gAIAAAAAa1tUxWtbVP/Z1dP///////////////////////799//RtwD/5NVs/////////////////+zh
+        lv/RtwD/9vHM//Pg4v/EZWz/58DC/////////////////92mqv/EZWz//fr6/////////////////4By
+        bP9rW1T/aF1RLAAAAABqXFSLa1tU/7iwrf///////////////////////v33/9G3AP/dyUH/7eKZ/+3i
+        mf/t4pn/4dBa/9G3AP/28cz/8+Di/8RlbP/Zm6D/58HE/+fBxP/nwcT/04yR/8RlbP/9+vr/////////
+        ////////opeT/2tbVP9qW1NlAAAAAGtbVVFrW1T/louG///////////////////////+/ff/0bcA/9G3
+        AP/RtwD/0bcA/9G3AP/RtwD/0bcB//n12//z4OL/xGVs/8RlbP/EZWz/xGVs/8RlbP/EZWz/x2xy//79
+        /f/////////////////Dvbr/a1tU/2tbU58AAAAAaF1RFmtbVP90ZV///v7+///////////////////+
+        /f/28cz/9vHM//bxzP/28cz/9vHM//bxzP/49dr///////35+f/z4OL/8+Di//Pg4v/z4OL/8+Di//Pg
+        4v/47e7//////////////////////+Xi4f9rW1T/altU2gAAAAAAAAAAa1xT3GtbVP/m4+L/////////
+        /////////////+zp/P/e2Pr/3tj6/97Y+v/e2Pr/3tj6/+fj+////////////9ry/v/M7f7/zO3+/8zt
+        /v/M7f7/zO3+/+L1/v///////////////////////v7+/3VmX/9rW1T+aF1RFgAAAABsWlSha1tU/8S+
+        u//////////////////8/P//YkXl/1s95P9bPeT/Wz3k/1s95P9bPeT/XD7k/+jk+//b8v7/AaT5/wCk
+        +f8ApPn/AKT5/wCk+f8ApPn/C6j5//v+////////////////////////lYmE/2tbVP9rWlRPAAAAAGpc
+        VGdrW1T/o5mU//////////////////r5/v9bPeT/hW7r/72x9P+9sfT/vbH0/5WB7v9bPeT/3tj6/8zt
+        /v8ApPn/WsT7/5nb/f+Z2/3/mdv9/0G7+/8ApPn/9/z///////////////////////+2r6v/a1tU/2pb
+        VIkAAAAAaF1RLGtbVP+Acmz/////////////////+vn+/1s95P+gj+//////////////////u6/0/1s9
+        5P/e2Pr/zO3+/wCk+f+W2v3/////////////////bMv8/wCk+f/3/P///////////////////////9nV
+        0/9rW1T/a1tUxQAAAACAgIACa1tU72tbVP/y8PD////////////6+f7/Wz3k/6CP7///////////////
+        //+7r/T/Wz3k/97Y+v/M7f7/AKT5/5ba/f////////////////9sy/z/AKT5//f8////////////////
+        ////////w726/2tbVP9rW1TuAAAAAAAAAABqW1S2a1tU/9HMyf////////////r5/v9bPeT/oI/v////
+        /////////////7uv9P9bPeT/3tj6/8zt/v8ApPn/ltr9/////////////////2zL/P8ApPn/9/z/////
+        /////////////7ixrf9sXFX/a1tU/2tbVHkAAAAAAAAAAGpcVH1rW1T/r6ej////////////+vn+/1s9
+        5P93Xun/nYvv/52L7/+di+//gmvq/1s95P/e2Pr/zO3+/wCk+f88ufr/Zsj7/2bI+/9myPv/K7P6/wCk
+        +f/3/P////////7+/v+upaH/a1tU/2tbVPxqXFRnAAAAAAAAAAAAAAAAa1tUQ2tbVP+NgXz/////////
+        ///6+f7/Wz3k/1s95P9bPeT/Wz3k/1s95P9bPeT/YkXl/+3q/P/M7f7/AKT5/wCk+f8ApPn/AKT5/wCk
+        +f8ApPn/Ha76//3+///7+vr/nZOO/2tbVP9rWlT4altVVAAAAAAAAAAAAAAAAAAAAAB0XV0La1tU+29f
+        Wf/7+vr/////////////////////////////////////////////////////////////////////////
+        ////////////////////////9vX0/5CEfv9rW1T/bFxU72pZVTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AABsW1TMa1tU/8S9u//6+vr/////////////////////////////////////////////////////////
+        //////////////////////////////Du7v+FeHL/a1tU/2tbVOFqXVcpAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAGtbVI9rW1T/a1tU/3FiW/+bkIv/x8G///Py8v//////////////////////////////
+        ///////////////////////////////////n5eT/fW9p/2tbVP9rW1TSaF5VGwAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAZlVVD2taVHdrW1TGa1tU/WtbVP9rW1T/bV1W/46Cff+8tLH/6efm////
+        ////////////////////////////////////////3trZ/3ZnYf9rW1T/bFxUwHBgUBAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmWVkUalxUXmtcVKprW1Tya1tU/2tb
+        VP9rW1T/f3Fr/6uinv/Y09H//fz8/////////////////9LNy/9xYVv/a1tU/2paVa9xVVUJAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGZm
+        TQpsXFVOalxTnGtbVOlrW1T/a1tU/2tbVP94aWP/pJqW/9HMyv/Cu7n/bV5X/2tbVP9sW1SVVVVVAwAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAgICAAmtZVTlrXFSIa1tT1mtbVP9rW1T/a1tU/2tbVP9rW1T+bFtVewAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAalxVJGpbVHNrW1XBa1tU7Gxc
+        VGEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/g////wA///wAB//4A
+        AD/8AAAH+AAAB/AAAAfgAAADwAAAA4AAAAMAAAADAAAAAQAAAAEAAAABAAAAAQAAAAGAAAAAgAAAAIAA
+        AACAAAAAgAAAAMAAAADAAAABwAAAA8AAAAfgAAAP4AAAH+AAAD/8AAB//4AA///wA////wf/KAAAABgA
+        AAAwAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAa1tTa2xcVfBsXFW1bFpVZmZcUhkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFrWlSFa1tU/4+Dfv+AcWv8a1tU/2tb
+        VP5tXlbMa1xUemxbVS0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAVVVVA2xbVJprW1T/qqCc//7+/v//////6+no/7+4tf+RhoH9bF1W/mtbVP9tXlbia1xTmWpZ
+        U02AVVUGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0XV0LbFxVtWxcVf+5sq//////////
+        ////////////////////////8/Hx/8bAvf+Zjor/cGBa/WtbVP9tXVbxaltUo2heVRsAAAAAAAAAAAAA
+        AAAAAAAAAAAAAGZZWRRtXFbKbV1W/sjCv///////////////////////////////////////////////
+        ////////+vn5/9LNy/+mnJj/bV1W/WtbVIMAAAAAAAAAAAAAAAAAAAAAaFhYIG1eV9pvYFn808/N////
+        ////////////////////////////////////////////////////////////////////////in55/W1d
+        Vr4AAAAAAAAAAAAAAABoXVEsbV5X53NlXvzd2tj//v78/9S8EP/RtwD/0bcA/9G3AP/RtwD/8Oit/+zN
+        0P/EZWz/xGVs/8RlbP/EZWz/yG91//79/f//////raSg/2xcVfaAQEAEAAAAAGxcVEBtXVbzfG5n++jm
+        5f///////v35/9G3AP/v5qf/9vHM//bxzP/Ywij/7eKZ/+fBxP/NfYP/8+Di//Pg4v/rysz/xGVs//77
+        /P//////z8rH/2tbVP9rXFIyAAAAAG1dVe2CdW/98O/u/////////////v35/9G3AP/38tH/////////
+        ///axTL/7eKZ/+fBxP/Qg4n////////////04+T/xGVs//77/P//////8fDv/2tbVP9sW1RtAAAAAG5e
+        Vs+ViYT+/////////////////v35/9G3AP/38tH////////////axTL/7eKZ/+fBxP/Qg4n/////////
+        ///04+T/xGVs//77/P///////////31waftqW1OoAAAAAGxaU5NyY138/v7+/////////////v35/9G3
+        AP/Zwyr/2sUz/9rFM//Tugr/7eOb/+fBxP/Ga3L/0ISJ/9CEif/OfoT/xGVs//78/P///////////6CW
+        kv9tXlflAAAAAGpcU1lrW1T/5ePh//////////////79/+3imf/t4pn/7eKZ/+3imf/t4pr/+/nr//bm
+        5//nwcT/58HE/+fBxP/nwcT/7M3P/////////////////8K7uf9rW1T/alhYHW9eVR5rW1T/w726////
+        /////////////8rA9v+9sfT/vbH0/72x9P++svT/8vD9/+v4//+a2/3/mdv9/5nb/f+Z2/3/rOH9////
+        /////////////+Th4P9rW1T/bFtVVwAAAABtXlfnopeT/////////////Pv+/1s95P92Xej/fGTp/3xk
+        6f9hReX/v7P0/5vb/f8KqPn/M7b6/zO2+v8qs/r/AKT5//r9//////////////7+/v9yY1z8a1tUkQAA
+        AABqW1OofXBp+///////////+/r+/1s95P/h3Pr///////////97Y+n/vbH0/5nb/f8ytvr/////////
+        ///R7/7/AKT5//n9//////////////////+ViYT+bl5WzwAAAABsW1Rta1tU//Hw7///////+/r+/1s9
+        5P/h3Pr///////////97Y+n/vbH0/5nb/f8ytvr////////////R7/7/AKT5//n9//////////////Dv
+        7v+CdW/9bV1V7QAAAABsXVM0a1tU/9DLyf//////+/r+/1s95P/GvPb/3tj6/97Y+v91W+j/vbH0/5nb
+        /f8osvr/zO3+/8zt/v+n4P3/AKT5//n9////////6+no/35wavxsXVX1altURgAAAACAQEAEbV1W9q6m
+        ov//////+/r+/1s95P9bPeT/Wz3k/1s95P9bPeT/ysH2/5nb/f8ApPn/AKT5/wCk+f8ApPn/EKr5//z+
+        ///g3dv/dmdh/G1dVuptWFMxAAAAAAAAAAAAAAAAbFxVv4x/ev3/////////////////////////////
+        /////////////////////////////////////////////9jT0f9xYVv8bV5W32pcVSQAAAAAAAAAAAAA
+        AAAAAAAAa1tUg21dVv2mnJj/0s3L//r5+f//////////////////////////////////////////////
+        ////////yMK//21dVv5tXFbKZllZFAAAAAAAAAAAAAAAAAAAAAAAAAAAaF5VG2pbVKNsXFXwa1tU/3Bg
+        Wv2Zjor+xsC9//Px8f////////////////////////////////+5sq//bFxV/2xcVbV0XV0LAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVVVUDallVPGtcVIhtXVbba1tU/2tbVP6Ie3X9ta2p/+He
+        3f///////v7+/66mov9rW1T/bFpUoWZmZgUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAbFtVLWtcVHpsXVXLa1tU/mtbVP9/cWv7j4N+/2tbVP9rWlSFAAAAAQAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAZlxSGWxaVWZsXFW1bFxV8GtbU2sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8H
+        /0H8AP9B+AAPQfAAA0HgAANBwAADQYAAAUEAAAFBAAABQQAAAUEAAAFBAAAAQQAAAEGAAABBgAAAQYAA
+        AEGAAABBgAABQcAAA0HAAAdBwAAPQfAAH0H/AD9B/+D/QSgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJhW3tvYFn0dWZgsmxbVVdmVVUPAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgICAAnFiW5eCdG705OHg/8a/vf+UiYT0cWFa+Xdo
+        YcptXFVsb15VHgAAAAAAAAAAAAAAAAAAAAAAAAAAbUlJB3NkXbKMgHr09/b2//////////////////r5
+        +f/Szcv/oJeS9XNlXfZzZV7baVxVJwAAAAAAAAAAbVtbDnNjXciZj4n1+/r6////////////////////
+        ///////////////////+/v7/pJqW+WxdVnYAAAAAamBVGHJkXdmnnpn2/f37/9S8E//axTP/2MIo/+XX
+        cP/eqa3/zX2D/9CEif/IcHf//v39/83Ixf92Z2C8AAAAAHJjXOC5sK36//////7++//bxjb///////Xw
+        yv/k1Gf/3KOn//Pf4P//////0IaL//79/f/w7u7/cWFb8gAAAAF0Zl/i4+Df///////+/vv/2cMr//bx
+        zP/u5aL/5NRn/9yjp//px8n/8+Di/85/hf/+/f3//////3hpYvNuWlMldGReo8K7uf////////79/+PU
+        Zv/j1Gb/49Rm//Dorv/qyMv/3KOn/9yjp//eqKz///7+//////+ajoryalxUXmpaVWCbkYzz//////7+
+        //+ikfD/nYvv/52L7//Lwfb/ruL9/2bI+/9myPv/b8z8//7/////////wbq3/3RlXqJuWlMleGli8///
+        ///8/P//d17p/97Y+v/DuPX/nYvv/2fJ+/+i3v3/zO3+/yuz+v/7/v///////+Pg3/90Zl/iAAAAAXFh
+        W/Lw7u7//Pz//35m6v//////3df5/52L7/9nyfv/yuz+//////82t/r/+/7///////+5sK36cmNc4AAA
+        AAB2Z2G+zsnH//z8//9iReX/fGTp/3Vb6P+jkvD/Z8n7/yiy+v8ztvr/E6v5//v9/v+to5/4c2Nd3m1b
+        UhwAAAAAbF1WdqSalvn+/v7///////////////////////////////////////v6+v+Zj4r2c2ReyW1b
+        Ww4AAAAAAAAAAGlcVSdzZV7bc2Vd9qCXkvXSzcv/+vn5//////////////////f29v+MgHr0c2Rdsm1J
+        SQcAAAAAAAAAAAAAAAAAAAAAAAAAAG9eVR5rW1NrdGRexnBhWfiShoHvxr+9/uTh4P+CdG70c2RdmYCA
+        gAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmVVUPbFtVV3VmYLJvYFn0cmFbewAA
+        AAAAAAAAAAAAAAAAAAAAAAAA+D+sQeAHrEHAAaxBgAGsQQABrEEAAKxBAACsQQAArEEAAKxBAACsQQAA
+        rEGAAKxBgAGsQYADrEHgB6xB/B+sQQ==
+</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/RyzStudio/Windows/Forms/THorizontalSeparator.Designer.cs b/RyzStudio/Windows/Forms/THorizontalSeparator.Designer.cs
new file mode 100644
index 0000000..1058088
--- /dev/null
+++ b/RyzStudio/Windows/Forms/THorizontalSeparator.Designer.cs
@@ -0,0 +1,37 @@
+namespace RyzStudio.Windows.Forms
+{
+    partial class THorizontalSeparator
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Component Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            components = new System.ComponentModel.Container();
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+        }
+
+        #endregion
+    }
+}
diff --git a/RyzStudio/Windows/Forms/THorizontalSeparator.cs b/RyzStudio/Windows/Forms/THorizontalSeparator.cs
new file mode 100644
index 0000000..1be87f2
--- /dev/null
+++ b/RyzStudio/Windows/Forms/THorizontalSeparator.cs
@@ -0,0 +1,101 @@
+using System.ComponentModel;
+using System.Drawing;
+using System.Windows.Forms;
+
+namespace RyzStudio.Windows.Forms
+{
+    public partial class THorizontalSeparator : System.Windows.Forms.UserControl
+    {
+        public THorizontalSeparator()
+        {
+            InitializeComponent();
+
+            this.BackColor = Color.Transparent;
+            this.Margin = new Padding(10, 0, 10, 0);
+            this.MaximumSize = new Size(SystemInformation.VirtualScreen.Width, 22);
+            this.MinimumSize = new Size(0, 22);
+            this.Padding = new Padding(0, 10, 0, 10);
+        }
+
+        protected override void OnPaintBackground(PaintEventArgs e)
+        {
+            base.OnPaintBackground(e);
+
+            Graphics g = e.Graphics;
+
+            g.FillRectangle(new SolidBrush(Color.FromArgb(213, 223, 229)), new Rectangle(this.DisplayRectangle.Left, 11, this.DisplayRectangle.Width, 1));
+            g.FillRectangle(new SolidBrush(Color.FromArgb(249, 251, 253)), new Rectangle(this.DisplayRectangle.Left, 12, this.DisplayRectangle.Width, 1));
+        }
+
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public override Image BackgroundImage { get => base.BackgroundImage; set => base.BackgroundImage = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public override ImageLayout BackgroundImageLayout { get => base.BackgroundImageLayout; set => base.BackgroundImageLayout = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public new BorderStyle BorderStyle { get => base.BorderStyle; set => base.BorderStyle = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public override Cursor Cursor { get => base.Cursor; set => base.Cursor = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public override Font Font { get => base.Font; set => base.Font = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public override Color BackColor { get => base.BackColor; set => base.BackColor = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public override Color ForeColor { get => base.ForeColor; set => base.ForeColor = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public override RightToLeft RightToLeft { get => base.RightToLeft; set => base.RightToLeft = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public new bool UseWaitCursor { get => base.UseWaitCursor; set => base.UseWaitCursor = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public override bool AllowDrop { get => base.AllowDrop; set => base.AllowDrop = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public override AutoValidate AutoValidate { get => base.AutoValidate; set => base.AutoValidate = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public override ContextMenuStrip ContextMenuStrip { get => base.ContextMenuStrip; set => base.ContextMenuStrip = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public new ImeMode ImeMode { get => base.ImeMode; set => base.ImeMode = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public override bool AutoScroll { get => base.AutoScroll; set => base.AutoScroll = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public new Size AutoScrollMargin { get => base.AutoScrollMargin; set => base.AutoScrollMargin = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public new Size AutoScrollMinSize { get => base.AutoScrollMinSize; set => base.AutoScrollMinSize = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public override bool AutoSize { get => base.AutoSize; set => base.AutoSize = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public new AutoSizeMode AutoSizeMode { get => base.AutoSizeMode; set => base.AutoSizeMode = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public override Size MaximumSize { get => base.MaximumSize; set => base.MaximumSize = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public override Size MinimumSize { get => base.MinimumSize; set => base.MinimumSize = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public new Padding Margin { get => base.Margin; set => base.Margin = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public new Padding Padding { get => base.Padding; set => base.Padding = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public new DockStyle Dock { get => base.Dock; set => base.Dock = value; }
+
+    }
+}
diff --git a/RyzStudio/Windows/Forms/THorizontalSeparator.resx b/RyzStudio/Windows/Forms/THorizontalSeparator.resx
new file mode 100644
index 0000000..1af7de1
--- /dev/null
+++ b/RyzStudio/Windows/Forms/THorizontalSeparator.resx
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file
diff --git a/RyzStudio/Windows/Forms/TImageBox.cs b/RyzStudio/Windows/Forms/TImageBox.cs
new file mode 100644
index 0000000..09f7bbe
--- /dev/null
+++ b/RyzStudio/Windows/Forms/TImageBox.cs
@@ -0,0 +1,84 @@
+using System;
+using System.ComponentModel;
+using System.Drawing;
+
+namespace RyzStudio.Windows.Forms
+{
+    public class TImageBox : System.Windows.Forms.PictureBox
+    {
+        public TImageBox() : base()
+        {
+            this.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
+            this.ErrorImage = null;
+            this.InitialImage = null;
+            this.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
+        }
+
+        protected override void OnCreateControl()
+        {
+            OnMouseLeave(null);
+
+            base.OnCreateControl();
+        }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public new Color BackColor { get => base.BackColor; set => base.BackColor = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public new Image Image { get => base.Image; set => base.Image = value; }
+
+        [Category("Appearance"), Browsable(true)]
+        public Color BackColorNormal { get; set; } = Color.Transparent;
+
+        [Category("Appearance"), Browsable(true)]
+        public Color BackColorHover { get; set; } = Color.Transparent;
+
+        [Category("Appearance"), Browsable(true)]
+        public Color BackColorSelected { get; set; } = Color.Transparent;
+
+        [Category("Appearance"), Browsable(true)]
+        public Image ImageNormal { get; set; }
+
+        [Category("Appearance"), Browsable(true)]
+        public Image ImageHover { get; set; }
+
+        [Category("Appearance"), Browsable(true)]
+        public Image ImageSelected { get; set; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public Image NormalImage { get => this.ImageNormal; set => this.ImageNormal = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public Image HoverImage { get => this.ImageHover; set => this.ImageHover = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public Image SelectedImage { get => this.ImageSelected; set => this.ImageSelected = value; }
+
+        public bool IsSelected { get; set; } = false;
+
+        protected override void OnMouseEnter(EventArgs e)
+        {
+            this.Image = this.ImageHover;
+            this.BackColor = this.BackColorHover;
+
+            base.OnMouseEnter(e);
+        }
+
+        protected override void OnMouseLeave(EventArgs e)
+        {
+            this.Image = (this.IsSelected ? this.ImageSelected : this.ImageNormal);
+            this.BackColor = (this.IsSelected ? this.BackColorSelected : this.BackColorNormal);
+
+            base.OnMouseLeave(e);
+        }
+
+        protected override void OnLostFocus(EventArgs e)
+        {
+            this.Image = (this.IsSelected ? this.ImageSelected : this.ImageNormal);
+            this.BackColor = (this.IsSelected ? this.BackColorSelected : this.BackColorNormal);
+
+            base.OnLostFocus(e);
+        }
+
+    }
+}
diff --git a/RyzStudio/Windows/Forms/TPanelBook.cs b/RyzStudio/Windows/Forms/TPanelBook.cs
new file mode 100644
index 0000000..eae6a0f
--- /dev/null
+++ b/RyzStudio/Windows/Forms/TPanelBook.cs
@@ -0,0 +1,258 @@
+namespace RyzStudio.Windows.Forms
+{
+    using System;
+    using System.Collections;
+    using System.ComponentModel;
+    using System.Drawing;
+    using System.Windows.Forms;
+
+    [ToolboxItem(true)]
+    public class TPanelBook : UserControl
+    {
+        public class PanelCollection : CollectionBase
+        {
+            protected TPanelBook panelBook = null;
+
+            public PanelCollection(TPanelBook parentPanelBook) : base()
+            {
+                panelBook = parentPanelBook;
+            }
+
+            public TPanelBook Parent => panelBook;
+
+            public Panel this[int index] { get => (Panel)List[index]; set => List[index] = value; }
+
+            public int Add(Panel value) => List.Add(value);
+
+            public void AddRange(Panel[] pages) => Array.ForEach(pages, x => this.Add(x));
+
+            public bool Contains(Panel value) => List.Contains(value);
+
+            public int IndexOf(Panel value) => List.IndexOf(value);
+
+            public void Insert(int index, Panel value) => List.Insert(index, value);
+
+            public void Remove(Panel value) => List.Remove(value);
+
+            protected override void OnInsertComplete(int index, object value)
+            {
+                base.OnInsertComplete(index, value);
+
+                if (panelBook != null)
+                {
+                    panelBook.PageIndex = index;
+                }
+            }
+
+            protected override void OnRemoveComplete(int index, object value)
+            {
+                base.OnRemoveComplete(index, value);
+
+                if (panelBook != null)
+                {
+                    if (panelBook.PageIndex == index)
+                    {
+                        if (index < InnerList.Count)
+                        {
+                            panelBook.PageIndex = index;
+                        }
+                        else
+                        {
+                            panelBook.PageIndex = InnerList.Count - 1;
+                        }
+                    }
+                }
+            }
+
+        }
+
+        private System.ComponentModel.IContainer components = null;
+
+        protected PanelCollection panelCollection = null;
+
+        public TPanelBook()
+        {
+            InitializeComponent();
+
+            panelCollection = new PanelCollection(this);
+        }
+
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+
+            base.Dispose(disposing);
+        }
+
+        protected void InitializeComponent()
+        {
+            components = new System.ComponentModel.Container();
+        }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public Panel ActivePanel { get; protected set; } = null;
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public override bool AutoScroll { get => base.AutoScroll; set => base.AutoScroll = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public new Size AutoScrollMargin { get => base.AutoScrollMargin; set => base.AutoScrollMargin = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public new Size AutoScrollMinSize { get => base.AutoScrollMinSize; set => base.AutoScrollMinSize = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public override Image BackgroundImage { get => base.BackgroundImage; set => base.BackgroundImage = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public override ImageLayout BackgroundImageLayout { get => base.BackgroundImageLayout; set => base.BackgroundImageLayout = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public new ImeMode ImeMode { get => base.ImeMode; set => base.ImeMode = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public override RightToLeft RightToLeft { get => base.RightToLeft; set => base.RightToLeft = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public new bool UseWaitCursor { get => base.UseWaitCursor; set => base.UseWaitCursor = value; }
+
+        [Category("Collection")]
+        [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
+        public PanelCollection Pages => panelCollection;
+
+        [Category("Collection")]
+        public int SelectedIndex
+        {
+            get => (panelCollection.Count <= 0) ? -1 : panelCollection.IndexOf(this.ActivePanel);
+            set
+            {
+                if (panelCollection.Count <= 0) return;
+                if (value < 0) return;
+                if (value > (panelCollection.Count - 1)) return;
+                if (value == this.SelectedIndex) return;
+
+                ActivatePage(value);
+            }
+        }
+
+        protected internal int PageIndex
+        {
+            get => panelCollection.IndexOf(this.ActivePanel);
+            set
+            {
+                if (panelCollection.Count <= 0)
+                {
+                    ActivatePage(-1);
+                    return;
+                }
+
+                if ((value < -1) || (value >= panelCollection.Count))
+                {
+                    throw new ArgumentOutOfRangeException("PageIndex", value, "The page index must be between 0 and " + Convert.ToString(panelCollection.Count - 1));
+                }
+
+                ActivatePage(value);
+            }
+        }
+
+        protected internal void ActivatePage(int index)
+        {
+            if ((panelCollection.Count == 0) && (index >= panelCollection.Count) && (index <= 0))
+            {
+                return;
+            }
+
+            Panel p = (Panel)panelCollection[index];
+
+            ActivatePage(p);
+        }
+
+        protected internal void ActivatePage(Panel page)
+        {
+            if (this.ActivePanel != null)
+            {
+                if (this.ActivePanel.InvokeRequired)
+                {
+                    this.ActivePanel.Invoke(new MethodInvoker(() => {
+                        this.ActivePanel.Visible = false;
+                    }));
+                }
+                else
+                {
+                    this.ActivePanel.Visible = false;
+                }
+            }
+
+            this.ActivePanel = page;
+            if (this.ActivePanel != null)
+            {
+                this.ActivePanel.Parent = this;
+                if (!this.Contains(this.ActivePanel))
+                {
+                    this.Container.Add(this.ActivePanel);
+                }
+
+                if (this.ActivePanel.InvokeRequired)
+                {
+                    this.ActivePanel.Invoke(new MethodInvoker(() => {
+                        this.ActivePanel.Dock = DockStyle.Fill;
+                        this.ActivePanel.Visible = true;
+                        this.ActivePanel.BringToFront();
+                    }));
+                }
+                else
+                {
+                    this.ActivePanel.Dock = DockStyle.Fill;
+                    this.ActivePanel.Visible = true;
+                    this.ActivePanel.BringToFront();
+                }
+            }
+
+            if (this.ActivePanel != null)
+            {
+                if (this.ActivePanel.InvokeRequired)
+                {
+                    this.ActivePanel.Invoke(new MethodInvoker(() => {
+                        this.ActivePanel.Invalidate();
+                    }));
+                }
+                else
+                {
+                    this.ActivePanel.Invalidate();
+                }
+            }
+            else
+            {
+                this.Invalidate();
+            }
+        }
+
+#if DEBUG
+
+        protected override void OnResize(EventArgs e)
+        {
+            base.OnResize(e);
+
+            if (this.DesignMode)
+            {
+                this.Invalidate();
+            }
+        }
+
+#endif
+
+        protected override void DestroyHandle()
+        {
+            base.DestroyHandle();
+
+            foreach (Panel p in panelCollection)
+            {
+                p.Dispose();
+            }
+        }
+
+    }
+}
\ No newline at end of file
diff --git a/RyzStudio/Windows/Forms/TUserControl.cs b/RyzStudio/Windows/Forms/TUserControl.cs
new file mode 100644
index 0000000..8a22585
--- /dev/null
+++ b/RyzStudio/Windows/Forms/TUserControl.cs
@@ -0,0 +1,73 @@
+using System.ComponentModel;
+using System.Drawing;
+using System.Windows.Forms;
+
+namespace RyzStudio.Windows.Forms
+{
+    public class TUserControl : UserControl
+    {
+
+        public TUserControl() : base()
+        {
+
+        }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public override Image BackgroundImage { get => base.BackgroundImage; set => base.BackgroundImage = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public override ImageLayout BackgroundImageLayout { get => base.BackgroundImageLayout; set => base.BackgroundImageLayout = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public new BorderStyle BorderStyle { get => base.BorderStyle; set => base.BorderStyle = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public override Cursor Cursor { get => base.Cursor; set => base.Cursor = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public override Font Font { get => base.Font; set => base.Font = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public override Color ForeColor { get => base.ForeColor; set => base.ForeColor = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public override RightToLeft RightToLeft { get => base.RightToLeft; set => base.RightToLeft = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public new bool UseWaitCursor { get => base.UseWaitCursor; set => base.UseWaitCursor = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public override bool AllowDrop { get => base.AllowDrop; set => base.AllowDrop = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public override AutoValidate AutoValidate { get => base.AutoValidate; set => base.AutoValidate = value; }
+
+        //[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        //public override ContextMenuStrip ContextMenuStrip { get => base.ContextMenuStrip; set => base.ContextMenuStrip = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public new ImeMode ImeMode { get => base.ImeMode; set => base.ImeMode = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public override bool AutoScroll { get => base.AutoScroll; set => base.AutoScroll = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public new Size AutoScrollMargin { get => base.AutoScrollMargin; set => base.AutoScrollMargin = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public new Size AutoScrollMinSize { get => base.AutoScrollMinSize; set => base.AutoScrollMinSize = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public override bool AutoSize { get => base.AutoSize; set => base.AutoSize = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public new AutoSizeMode AutoSizeMode { get => base.AutoSizeMode; set => base.AutoSizeMode = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public override Size MaximumSize { get => base.MaximumSize; set => base.MaximumSize = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public override Size MinimumSize { get => base.MinimumSize; set => base.MinimumSize = value; }
+
+    }
+}
\ No newline at end of file
diff --git a/RyzStudio/Windows/Forms/ThreadControl.cs b/RyzStudio/Windows/Forms/ThreadControl.cs
new file mode 100644
index 0000000..49220fb
--- /dev/null
+++ b/RyzStudio/Windows/Forms/ThreadControl.cs
@@ -0,0 +1,571 @@
+using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace RyzStudio.Windows.Forms
+{
+    public class ThreadControl
+    {
+        public static void Add(Control control, Control value)
+        {
+            if (control.InvokeRequired)
+            {
+                control.Invoke(new MethodInvoker(() =>
+                {
+                    control.Controls.Add(value);
+                }));
+            }
+            else
+            {
+                control.Controls.Add(value);
+            }
+        }
+
+        public static void Add(ListBox control, string value)
+        {
+            if (control.InvokeRequired)
+            {
+                control.Invoke(new MethodInvoker(() => {
+                    control.Items.Add(value);
+                }));
+            }
+            else
+            {
+                control.Items.Add(value);
+            }
+        }
+
+        //public static void Add(FlowLayoutPanel control, Control value)
+        //{
+        //    if (control.InvokeRequired)
+        //    {
+        //        control.Invoke(new MethodInvoker(() => {
+        //            control.Controls.Add(value);
+        //        }));
+        //    }
+        //    else
+        //    {
+        //        control.Controls.Add(value);
+        //    }
+        //}
+
+        public static int Add(TreeView control, TreeNode value)
+        {
+            int n = -1;
+
+            if (control.InvokeRequired)
+            {
+                control.Invoke(new MethodInvoker(() => {
+                    n = control.Nodes.Add(value);
+                }));
+            }
+            else
+            {
+                n = control.Nodes.Add(value);
+            }
+
+            return n;
+        }
+
+        public static int Add(TreeNode control, TreeNode value)
+        {
+            int n = -1;
+
+            if (control.TreeView.InvokeRequired)
+            {
+                control.TreeView.Invoke(new MethodInvoker(() => {
+                    n = control.Nodes.Add(value);
+                }));
+            }
+            else
+            {
+                n = control.Nodes.Add(value);
+            }
+
+            return n;
+        }
+
+        public static int Add(DataGridView control, object[] value)
+        {
+            int n = -1;
+
+            if (control.InvokeRequired)
+            {
+                control.Invoke(new MethodInvoker(() => {
+                    n = control.Rows.Add(value);
+                }));
+            }
+            else
+            {
+                n = control.Rows.Add(value);
+            }
+
+            return n;
+        }
+
+        public static int Add(DataGridView control, object[] value, object tag)
+        {
+            int n = -1;
+
+            if (control.InvokeRequired)
+            {
+                control.Invoke(new MethodInvoker(() => {
+                    n = control.Rows.Add(value);
+                    control.Rows[n].Tag = tag;
+                }));
+            }
+            else
+            {
+                n = control.Rows.Add(value);
+                control.Rows[n].Tag = tag;
+            }
+
+            return n;
+        }
+
+        public static TreeNode Add(TreeView control, string key, string text)
+        {
+            TreeNode rv = null;
+
+            if (control.InvokeRequired)
+            {
+                control.Invoke(new MethodInvoker(() => {
+                    rv = control.Nodes.Add(key, text);
+                }));
+            }
+            else
+            {
+                rv = control.Nodes.Add(key, text);
+            }
+
+            return rv;
+        }
+
+        public static TreeNode Add(TreeNode control, string key, string text)
+        {
+            TreeNode rv = null;
+
+            if (control.TreeView.InvokeRequired)
+            {
+                control.TreeView.Invoke(new MethodInvoker(() => {
+                    rv = control.Nodes.Add(key, text);
+                }));
+            }
+            else
+            {
+                rv = control.Nodes.Add(key, text);
+            }
+
+            return rv;
+        }
+
+        public static void AddLine(RichTextBox control, string text)
+        {
+            if (control.InvokeRequired)
+            {
+                control.Invoke(new MethodInvoker(() =>
+                {
+                    control.Text += text + Environment.NewLine;
+                }));
+            }
+            else
+            {
+                control.Text += text + Environment.NewLine;
+            }
+        }
+
+        public static void Clear(ListBox control)
+        {
+            if (control.InvokeRequired)
+            {
+                control.Invoke(new MethodInvoker(() => {
+                    control.Items.Clear();
+                }));
+            }
+            else
+            {
+                control.Items.Clear();
+            }
+        }
+
+        public static void Clear(FlowLayoutPanel control)
+        {
+            if (control.InvokeRequired)
+            {
+                control.Invoke(new MethodInvoker(() => {
+                    control.Controls.Clear();
+                }));
+            }
+            else
+            {
+                control.Controls.Clear();
+            }
+        }
+
+        public static void Clear(TreeView control)
+        {
+            if (control.InvokeRequired)
+            {
+                control.Invoke(new MethodInvoker(() => {
+                    control.Nodes.Clear();
+                }));
+            }
+            else
+            {
+                control.Nodes.Clear();
+            }
+        }
+
+        public static void Clear(Label control) => SetText(control, string.Empty);
+
+        public static void Clear(PictureBox control)
+        {
+            if (control.InvokeRequired)
+            {
+                control.Invoke(new MethodInvoker(() =>
+                {
+                    control.Image = null;
+                }));
+            }
+            else
+            {
+                control.Image = null;
+            }
+        }
+
+        public static void Clear(DataGridView control)
+        {
+            if (control.InvokeRequired)
+            {
+                control.Invoke(new MethodInvoker(() =>
+                {
+                    control.Rows.Clear();
+                }));
+            }
+            else
+            {
+                control.Rows.Clear();
+            }
+        }
+
+        public static List<T> FindChildControl<T>(Control control) where T : Control
+        {
+            List<T> rs = new List<T>();
+
+            foreach (Control item in control.Controls)
+            {
+                var ctr = item as T;
+                if (ctr == null)
+                {
+                    rs.AddRange(FindChildControl<T>(item));
+                }
+                else
+                {
+                    rs.Add(ctr);
+                }
+            }
+
+            return rs;
+        }
+
+        public static string GetText(Control control, bool doTrim = true)
+        {
+            string rv = string.Empty;
+
+            if (control.InvokeRequired)
+            {
+                control.Invoke(new MethodInvoker(() => {
+                    rv = (doTrim ? control.Text?.Trim() : control.Text);
+                }));
+            }
+            else
+            {
+                rv = (doTrim ? control.Text?.Trim() : control.Text);
+            }
+
+            return rv;
+        }
+
+        public static void SetChecked(ToolStripMenuItem control, bool value)
+        {
+            if (control.GetCurrentParent().InvokeRequired)
+            {
+                control.GetCurrentParent().Invoke(new MethodInvoker(() =>
+                {
+                    control.Checked = value;
+                }));
+            }
+            else
+            {
+                control.Checked = value;
+            }
+        }
+
+        public static void SetEnable(Control control, bool value)
+        {
+            if (control.InvokeRequired)
+            {
+                control.Invoke(new MethodInvoker(() =>
+                {
+                    control.Enabled = value;
+                }));
+            }
+            else
+            {
+                control.Enabled = value;
+            }
+        }
+
+        public static void SetFocus(Control control)
+        {
+            if (control.InvokeRequired)
+            {
+                control.Invoke(new MethodInvoker(() =>
+                {
+                    control.Focus();
+                }));
+            }
+            else
+            {
+                control.Focus();
+            }
+        }
+
+        public static int GetValue(NumericUpDown sender)
+        {
+            int rv = 0;
+
+            if (sender.InvokeRequired)
+            {
+                sender.Invoke(new MethodInvoker(() => {
+                    rv = (int)sender.Value;
+                }));
+            }
+            else
+            {
+                rv = (int)sender.Value;
+            }
+
+            return rv;
+        }
+
+        public static string GetSelectedValue(ListBox sender)
+        {
+            string rv = string.Empty;
+
+            if (sender.InvokeRequired)
+            {
+                sender.Invoke(new MethodInvoker(() => {
+                    rv = (sender.SelectedItem == null) ? string.Empty : sender.SelectedItem.ToString();
+                }));
+            }
+            else
+            {
+                rv = (sender.SelectedItem == null) ? string.Empty : sender.SelectedItem.ToString();
+            }
+
+            return rv;
+        }
+
+        public static void SetHeight(Control control, int value)
+        {
+            if (control.InvokeRequired)
+            {
+                control.Invoke(new MethodInvoker(() => {
+                    control.Height = value;
+                }));
+            }
+            else
+            {
+                control.Height = value;
+            }
+        }
+
+        public static void SetLocation(Control control, Point value)
+        {
+            if (control.InvokeRequired)
+            {
+                control.Invoke(new MethodInvoker(() => {
+                    control.Location = value;
+                }));
+            }
+            else
+            {
+                control.Location = value;
+            }
+        }
+
+        public static void ClientSize(Control control, int width, int height) => ClientSize(control, new Size(width, height));
+
+        public static void ClientSize(Control control, Size value)
+        {
+            if (control.InvokeRequired)
+            {
+                control.Invoke(new MethodInvoker(() => {
+                    control.ClientSize = value;
+                }));
+            }
+            else
+            {
+                control.ClientSize = value;
+            }
+        }
+
+        public static void SetSize(Control control, int width, int height) => SetSize(control, new Size(width, height));
+
+        public static void SetSize(Control control, Size value)
+        {
+            if (control.InvokeRequired)
+            {
+                control.Invoke(new MethodInvoker(() => {
+                    control.Size = value;
+                }));
+            }
+            else
+            {
+                control.Size = value;
+            }
+        }
+
+        public static void SetText(Control control, string text)
+        {
+            if (control.InvokeRequired)
+            {
+                control.Invoke(new MethodInvoker(() =>
+                {
+                    control.Text = text;
+                }));
+            }
+            else
+            {
+                control.Text = text;
+            }
+        }
+
+        public static void SetTopMost(Form control, bool value)
+        {
+            if (control.InvokeRequired)
+            {
+                control.Invoke(new MethodInvoker(() => {
+                    control.TopMost = value;
+                }));
+            }
+            else
+            {
+                control.TopMost = value;
+            }
+        }
+
+        public static void SetValue(Control control, string value)
+        {
+            if (control.InvokeRequired)
+            {
+                control.Invoke(new MethodInvoker(() => {
+                    control.Text = value;
+                }));
+            }
+            else
+            {
+                control.Text = value;
+            }
+        }
+
+        public static void SetValue(PictureBox control, Image value)
+        {
+            if (control.InvokeRequired)
+            {
+                control.Invoke(new MethodInvoker(() =>
+                {
+                    control.Image = value;
+                }));
+            }
+            else
+            {
+                control.Image = value;
+            }
+        }
+
+        public static void SetVisible(Control control, bool value)
+        {
+            if (control.InvokeRequired)
+            {
+                control.Invoke(new MethodInvoker(() => {
+                    control.Visible = value;
+                }));
+            }
+            else
+            {
+                control.Visible = value;
+            }
+        }
+
+        public static void SetVisible(Form control, bool value)
+        {
+            if (control.InvokeRequired)
+            {
+                control.Invoke(new MethodInvoker(() => {
+                    if (value)
+                    {
+                        //control.ShowInTaskbar = value;
+                        //control.Opacity = 100;
+                        control.Visible = value;
+                    }
+                    else
+                    {
+                        control.Visible = value;
+                        //control.ShowInTaskbar = value;
+                        //control.Opacity = 0;
+                    }
+                }));
+            }
+            else
+            {
+                if (value)
+                {
+                    //control.ShowInTaskbar = value;
+                    //control.Opacity = 100;
+                    control.Visible = value;
+                }
+                else
+                {
+                    control.Visible = value;
+                    //control.ShowInTaskbar = value;
+                    //control.Opacity = 0;
+                }
+            }
+        }
+
+        public static void SetWidth(Control control, int value)
+        {
+            if (control.InvokeRequired)
+            {
+                control.Invoke(new MethodInvoker(() => {
+                    control.Width = value;
+                }));
+            }
+            else
+            {
+                control.Width = value;
+            }
+        }
+
+        public static void SetClientWidth(Control control, int value)
+        {
+            if (control.InvokeRequired)
+            {
+                control.Invoke(new MethodInvoker(() => {
+                    control.ClientSize = new Size(value, control.ClientSize.Height);
+                }));
+            }
+            else
+            {
+                control.ClientSize = new Size(value, control.ClientSize.Height);
+            }
+        }
+
+    }
+}
\ No newline at end of file
diff --git a/RyzStudio/Windows/ThemedForms/BorderlessForm.Designer.cs b/RyzStudio/Windows/ThemedForms/BorderlessForm.Designer.cs
new file mode 100644
index 0000000..d39ad3c
--- /dev/null
+++ b/RyzStudio/Windows/ThemedForms/BorderlessForm.Designer.cs
@@ -0,0 +1,193 @@
+using RyzStudio.Windows.Forms;
+
+namespace RyzStudio.Windows.ThemedForms
+{
+  partial class BorderlessForm
+  {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary>
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing)
+    {
+      if (disposing && (components != null))
+      {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Windows Form Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent()
+    {
+            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(BorderlessForm));
+            this.label1 = new System.Windows.Forms.Label();
+            this.panel1 = new System.Windows.Forms.Panel();
+            this.area1 = new System.Windows.Forms.Panel();
+            this.pictureBox4 = new RyzStudio.Windows.Forms.TImageBox();
+            this.pictureBox2 = new RyzStudio.Windows.Forms.TImageBox();
+            this.pictureBox1 = new RyzStudio.Windows.Forms.TImageBox();
+            this.pictureBox3 = new RyzStudio.Windows.Forms.TImageBox();
+            ((System.ComponentModel.ISupportInitialize)(this.pictureBox4)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).BeginInit();
+            this.SuspendLayout();
+            // 
+            // label1
+            // 
+            this.label1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.label1.BackColor = System.Drawing.Color.Transparent;
+            this.label1.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+            this.label1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(241)))), ((int)(((byte)(241)))), ((int)(((byte)(241)))));
+            this.label1.Location = new System.Drawing.Point(1, 1);
+            this.label1.Name = "label1";
+            this.label1.Padding = new System.Windows.Forms.Padding(48, 0, 0, 0);
+            this.label1.Size = new System.Drawing.Size(454, 48);
+            this.label1.TabIndex = 148;
+            this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+            this.label1.DoubleClick += new System.EventHandler(this.label1_DoubleClick);
+            this.label1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.label1_MouseClick);
+            this.label1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.label1_MouseDown);
+            this.label1.MouseMove += new System.Windows.Forms.MouseEventHandler(this.label1_MouseMove);
+            this.label1.MouseUp += new System.Windows.Forms.MouseEventHandler(this.label1_MouseUp);
+            // 
+            // panel1
+            // 
+            this.panel1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+            this.panel1.BackColor = System.Drawing.Color.Transparent;
+            this.panel1.Cursor = System.Windows.Forms.Cursors.SizeNWSE;
+            this.panel1.Location = new System.Drawing.Point(594, 674);
+            this.panel1.Name = "panel1";
+            this.panel1.Size = new System.Drawing.Size(6, 6);
+            this.panel1.TabIndex = 150;
+            this.panel1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.panel1_MouseDown);
+            this.panel1.MouseMove += new System.Windows.Forms.MouseEventHandler(this.panel1_MouseMove);
+            this.panel1.MouseUp += new System.Windows.Forms.MouseEventHandler(this.panel1_MouseUp);
+            // 
+            // area1
+            // 
+            this.area1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.area1.BackColor = System.Drawing.Color.Transparent;
+            this.area1.Cursor = System.Windows.Forms.Cursors.SizeNS;
+            this.area1.Location = new System.Drawing.Point(1, 674);
+            this.area1.Name = "area1";
+            this.area1.Size = new System.Drawing.Size(592, 6);
+            this.area1.TabIndex = 152;
+            this.area1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.panel2_MouseDown);
+            this.area1.MouseMove += new System.Windows.Forms.MouseEventHandler(this.panel2_MouseMove);
+            this.area1.MouseUp += new System.Windows.Forms.MouseEventHandler(this.panel2_MouseUp);
+            // 
+            // pictureBox4
+            // 
+            this.pictureBox4.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+            this.pictureBox4.BackColor = System.Drawing.Color.Transparent;
+            this.pictureBox4.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
+            this.pictureBox4.ErrorImage = null;
+            this.pictureBox4.ImageHover = global::hiim.dply.Properties.Resources.form20_menu2;
+            this.pictureBox4.Image = global::hiim.dply.Properties.Resources.form20_menu;
+            this.pictureBox4.InitialImage = null;
+            this.pictureBox4.Location = new System.Drawing.Point(460, 11);
+            this.pictureBox4.Name = "pictureBox4";
+            this.pictureBox4.NormalImage = global::hiim.dply.Properties.Resources.form20_menu;
+            this.pictureBox4.Size = new System.Drawing.Size(28, 28);
+            this.pictureBox4.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
+            this.pictureBox4.TabIndex = 149;
+            this.pictureBox4.TabStop = false;
+            // 
+            // pictureBox2
+            // 
+            this.pictureBox2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+            this.pictureBox2.BackColor = System.Drawing.Color.Transparent;
+            this.pictureBox2.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
+            this.pictureBox2.ErrorImage = null;
+            this.pictureBox2.ImageHover = global::hiim.dply.Properties.Resources.form20_maximise2;
+            this.pictureBox2.Image = global::hiim.dply.Properties.Resources.form20_maximise;
+            this.pictureBox2.InitialImage = null;
+            this.pictureBox2.Location = new System.Drawing.Point(528, 11);
+            this.pictureBox2.Name = "pictureBox2";
+            this.pictureBox2.NormalImage = global::hiim.dply.Properties.Resources.form20_maximise;
+            this.pictureBox2.Size = new System.Drawing.Size(28, 28);
+            this.pictureBox2.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
+            this.pictureBox2.TabIndex = 147;
+            this.pictureBox2.TabStop = false;
+            // 
+            // pictureBox1
+            // 
+            this.pictureBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+            this.pictureBox1.BackColor = System.Drawing.Color.Transparent;
+            this.pictureBox1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
+            this.pictureBox1.ErrorImage = null;
+            this.pictureBox1.ImageHover = global::hiim.dply.Properties.Resources.form20_minimise2;
+            this.pictureBox1.Image = global::hiim.dply.Properties.Resources.form20_minimise;
+            this.pictureBox1.InitialImage = null;
+            this.pictureBox1.Location = new System.Drawing.Point(494, 11);
+            this.pictureBox1.Name = "pictureBox1";
+            this.pictureBox1.NormalImage = global::hiim.dply.Properties.Resources.form20_minimise;
+            this.pictureBox1.Size = new System.Drawing.Size(28, 28);
+            this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
+            this.pictureBox1.TabIndex = 146;
+            this.pictureBox1.TabStop = false;
+            // 
+            // pictureBox3
+            // 
+            this.pictureBox3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+            this.pictureBox3.BackColor = System.Drawing.Color.Transparent;
+            this.pictureBox3.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
+            this.pictureBox3.ErrorImage = null;
+            this.pictureBox3.ImageHover = global::hiim.dply.Properties.Resources.form20_close2;
+            this.pictureBox3.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox3.Image")));
+            this.pictureBox3.InitialImage = null;
+            this.pictureBox3.Location = new System.Drawing.Point(562, 11);
+            this.pictureBox3.Name = "pictureBox3";
+            this.pictureBox3.NormalImage = ((System.Drawing.Image)(resources.GetObject("pictureBox3.NormalImage")));
+            this.pictureBox3.Size = new System.Drawing.Size(28, 28);
+            this.pictureBox3.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
+            this.pictureBox3.TabIndex = 145;
+            this.pictureBox3.TabStop = false;
+            // 
+            // BorderlessForm
+            // 
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
+            this.BackColor = System.Drawing.Color.WhiteSmoke;
+            this.ClientSize = new System.Drawing.Size(600, 680);
+            this.Controls.Add(this.area1);
+            this.Controls.Add(this.panel1);
+            this.Controls.Add(this.pictureBox4);
+            this.Controls.Add(this.label1);
+            this.Controls.Add(this.pictureBox2);
+            this.Controls.Add(this.pictureBox1);
+            this.Controls.Add(this.pictureBox3);
+            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
+            this.Name = "BorderlessForm";
+            ((System.ComponentModel.ISupportInitialize)(this.pictureBox4)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).EndInit();
+            this.ResumeLayout(false);
+
+    }
+
+        #endregion
+
+        protected internal TImageBox pictureBox2;
+        protected internal TImageBox pictureBox1;
+        protected internal TImageBox pictureBox3;
+        protected internal System.Windows.Forms.Label label1;
+        protected internal TImageBox pictureBox4;
+        protected internal System.Windows.Forms.Panel panel1;
+        protected internal System.Windows.Forms.Panel area1;
+    }
+}
\ No newline at end of file
diff --git a/RyzStudio/Windows/ThemedForms/BorderlessForm.cs b/RyzStudio/Windows/ThemedForms/BorderlessForm.cs
new file mode 100644
index 0000000..840d970
--- /dev/null
+++ b/RyzStudio/Windows/ThemedForms/BorderlessForm.cs
@@ -0,0 +1,409 @@
+namespace RyzStudio.Windows.ThemedForms
+{
+    using System;
+    using System.ComponentModel;
+    using System.Drawing;
+    using System.Drawing.Design;
+    using System.Windows.Forms;
+
+    public partial class BorderlessForm : System.Windows.Forms.Form
+    {
+        protected bool isBusy = false;
+
+        protected Color topFillColour = Color.FromArgb(15, 15, 15);
+        protected int topFillHeight = 48;
+        protected Color bottomFillColour = Color.FromArgb(15, 15, 15);
+        protected int bottomFillMargin = 19;
+        protected int bottomLeftMargin = 20;
+        protected int borderWidth = 1;
+        protected int menuFillWidth = 160;
+        protected Color menuFillColour = Color.FromArgb(179, 179, 179);
+
+        private bool windowDragging = false;
+        private Point windowOffset = new Point();
+        private Point windowSize = new Point();
+
+        public BorderlessForm() : base()
+        {
+            this.InitializeComponent();
+
+            this.BackColor = Color.FromArgb(247, 247, 247);
+            this.FormBorderStyle = FormBorderStyle.None;
+            this.Padding = new Padding(1);
+
+			this.topFillColour = Color.FromArgb(51, 51, 51);
+			this.topFillHeight = 48;
+			this.bottomFillColour = Color.FromArgb(0, 152, 167);
+			this.bottomFillMargin = 6;
+
+            pictureBox1.Click += pictureBox1_Click;
+            pictureBox2.Click += pictureBox2_Click;
+            pictureBox3.Click += pictureBox3_Click;
+            pictureBox4.Click += pictureBox4_Click;
+
+            updatePictureBox2Image();
+        }
+
+        protected override void OnClosing(CancelEventArgs e)
+        {
+            base.OnClosing(e);
+
+            if (this.IsBusy)
+            {
+                e.Cancel = true;
+            }
+        }
+
+        protected override void OnPaint(PaintEventArgs e)
+        {
+            base.OnPaint(e);
+
+            Graphics g = e.Graphics;
+
+            Rectangle areaTop = new Rectangle(this.DisplayRectangle.Left, this.Padding.Top, this.DisplayRectangle.Width, topFillHeight);
+            Rectangle areaBottom = new Rectangle(this.DisplayRectangle.Left, (this.DisplayRectangle.Height - bottomFillMargin + this.Padding.Top), this.DisplayRectangle.Width, bottomFillMargin);
+            Rectangle areaBorder = new Rectangle(this.ClientRectangle.X, this.ClientRectangle.Y, this.ClientRectangle.Width - borderWidth, this.ClientRectangle.Height - borderWidth);
+
+            Rectangle areaMenu = new Rectangle(this.DisplayRectangle.Left, this.DisplayRectangle.Top + topFillHeight, menuFillWidth, (this.DisplayRectangle.Height - bottomFillMargin - topFillHeight));
+
+            // draw header
+            if (topFillHeight > 0)
+            {
+                g.FillRectangle(new SolidBrush(topFillColour), areaTop);
+            }
+
+            // fill menu
+            g.FillRectangle(new SolidBrush(menuFillColour), areaMenu);
+
+            // draw footer
+            if (bottomFillMargin > 0)
+            {
+                g.FillRectangle(new SolidBrush(bottomFillColour), areaBottom);
+            }
+
+            // draw logo
+            if (this.TitleLogo != null)
+            {
+                g.DrawImageUnscaled(this.TitleLogo, this.Padding.Left, this.Padding.Top);
+            }
+
+            if (this.Banner != null)
+            {
+                g.DrawImageUnscaled(this.Banner, this.Padding.Left + bottomLeftMargin, (this.DisplayRectangle.Height - this.Banner.Height - bottomFillMargin + this.Padding.Top), (this.DisplayRectangle.Width - (this.Padding.Left + this.Padding.Right)), this.Banner.Height);
+            }
+
+            g.DrawRectangle(new Pen(Color.Black, borderWidth), areaBorder);
+        }
+
+        protected override void OnResize(EventArgs e)
+        {
+            base.OnResize(e);
+
+            updatePictureBox2Image();
+
+            this.Invalidate();
+        }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public new Color BackColor { get => base.BackColor; set => base.BackColor = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public new FormBorderStyle FormBorderStyle { get => base.FormBorderStyle; set => base.FormBorderStyle = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public new Padding Padding { get => base.Padding; set => base.Padding = value; }
+
+        [Category("Appearance"), Browsable(true)]
+        public string Description
+        {
+            get
+            {
+                return label1.Text?.Replace("\n", "\\n");
+            }
+            set
+            {
+                label1.Text = value?.Replace("\\n", "\n");
+            }
+        }
+
+        [Category("Appearance"), Browsable(true)]
+        public Image TitleLogo { get; set; }
+
+        [Category("Appearance"), Browsable(true)]
+        public Image Banner { get; set; }
+
+        [Category("Appearance"), Browsable(true)]
+        public bool ShowMenuButton { get => pictureBox4.Visible; set => pictureBox4.Visible = value; }
+
+        protected virtual bool IsBusy { get => isBusy; set => isBusy = value; }
+
+        private void pictureBox4_Click(object sender, System.EventArgs e)
+        {
+            //this.WindowState = FormWindowState.Minimized;
+        }
+
+        private void pictureBox1_Click(object sender, System.EventArgs e)
+        {
+            MouseEventArgs mouseEvent = (MouseEventArgs)e;
+            if (mouseEvent != null)
+            {
+                if (mouseEvent.Button != MouseButtons.Left)
+                {
+                    return;
+                }
+            }
+
+            this.WindowState = FormWindowState.Minimized;
+        }
+
+        private void pictureBox2_Click(object sender, System.EventArgs e)
+        {
+            MouseEventArgs mouseEvent = (MouseEventArgs)e;
+            if (mouseEvent != null)
+            {
+                if (mouseEvent.Button != MouseButtons.Left)
+                {
+                    return;
+                }
+            }
+
+            if (this.WindowState == FormWindowState.Maximized)
+            {
+                this.WindowState = FormWindowState.Normal;
+                pictureBox2.NormalImage = Resources.form20_maximise;
+                pictureBox2.HighlightImage = Resources.form20_maximise2;
+            }
+            else
+            {
+                this.WindowState = FormWindowState.Maximized;
+                pictureBox2.NormalImage = Resources.form20_restore;
+                pictureBox2.HighlightImage = Resources.form20_restore2;
+            }
+        }
+
+        private void pictureBox3_Click(object sender, System.EventArgs e)
+        {
+            MouseEventArgs mouseEvent = (MouseEventArgs)e;
+            if (mouseEvent != null)
+            {
+                if (mouseEvent.Button != MouseButtons.Left)
+                {
+                    return;
+                }
+            }
+
+            this.Close();
+        }
+
+        public void SetValue(Label sender, string value)
+        {
+            if (sender.InvokeRequired)
+            {
+                sender.Invoke(new MethodInvoker(() => { sender.Text = value; }));
+            }
+            else
+            {
+                sender.Text = value;
+            }
+        }
+
+        public void SetValue(GroupBox sender, string value)
+        {
+            if (sender.InvokeRequired)
+            {
+                sender.Invoke(new MethodInvoker(() => { sender.Text = value; }));
+            }
+            else
+            {
+                sender.Text = value;
+            }
+        }
+
+        public void AddValue(ListBox sender, string value)
+        {
+            if (sender.InvokeRequired)
+            {
+                sender.Invoke(new MethodInvoker(() => { sender.Items.Add(value); }));
+            }
+            else
+            {
+                sender.Items.Add(value);
+            }
+        }
+
+        public void AddControl(FlowLayoutPanel sender, Control value)
+        {
+            if (sender.InvokeRequired)
+            {
+                sender.Invoke(new MethodInvoker(() =>
+                {
+                    sender.Controls.Add(value);
+                }));
+            }
+            else
+            {
+                sender.Controls.Add(value);
+            }
+        }
+
+        public void ClearValues(ListBox sender)
+        {
+            if (sender.InvokeRequired)
+            {
+                sender.Invoke(new MethodInvoker(() => { sender.Items.Clear(); }));
+            }
+            else
+            {
+                sender.Items.Clear();
+            }
+        }
+
+        public string GetValue(ListBox sender)
+        {
+            string rv = string.Empty;
+
+            if (sender.InvokeRequired)
+            {
+                sender.Invoke(new MethodInvoker(() => { rv = (sender.SelectedItem == null) ? string.Empty : sender.SelectedItem.ToString(); }));
+            }
+            else
+            {
+                rv = (sender.SelectedItem == null) ? string.Empty : sender.SelectedItem.ToString();
+            }
+
+            return rv;
+        }
+
+        public string GetValue(TextBox sender)
+        {
+            string rv = string.Empty;
+
+            if (sender.InvokeRequired)
+            {
+                sender.Invoke(new MethodInvoker(() => { rv = sender.Text.Trim(); }));
+            }
+            else
+            {
+                rv = sender.Text.Trim();
+            }
+
+            return rv;
+        }
+
+        public int GetValue(NumericUpDown sender)
+        {
+            int rv = 0;
+
+            if (sender.InvokeRequired)
+            {
+                sender.Invoke(new MethodInvoker(() => { rv = (int)sender.Value; }));
+            }
+            else
+            {
+                rv = (int)sender.Value;
+            }
+
+            return rv;
+        }
+
+        protected void updatePictureBox2Image()
+        {
+            if (this.WindowState == FormWindowState.Maximized)
+            {
+                pictureBox2.NormalImage = Resources.form20_restore;
+                pictureBox2.HighlightImage = Resources.form20_restore2;
+            }
+            else
+            {
+                pictureBox2.NormalImage = Resources.form20_maximise;
+                pictureBox2.HighlightImage = Resources.form20_maximise2;
+            }
+        }
+
+        private void label1_MouseDown(object sender, MouseEventArgs e)
+        {
+            if (e.Button != MouseButtons.Left)
+            {
+                return;
+            }
+
+            windowDragging = true;
+            windowOffset = e.Location;
+        }
+
+        private void label1_MouseUp(object sender, MouseEventArgs e)
+        {
+            windowDragging = false;
+        }
+
+        private void label1_MouseMove(object sender, MouseEventArgs e)
+        {
+            if (windowDragging)
+            {
+                Point currentScreenPos = PointToScreen(e.Location);
+                Location = new Point(currentScreenPos.X - windowOffset.X, currentScreenPos.Y - windowOffset.Y);
+            }
+        }
+
+        private void label1_DoubleClick(object sender, EventArgs e) => pictureBox2_Click(sender, e);
+
+        private void label1_MouseClick(object sender, MouseEventArgs e)
+        {
+            if (e.Button == MouseButtons.Middle)
+            {
+                this.TopMost = !this.TopMost;
+            }
+        }
+
+        private void panel1_MouseDown(object sender, MouseEventArgs e)
+        {
+            if (e.Button != MouseButtons.Left)
+            {
+                return;
+            }
+
+            windowDragging = true;
+            windowOffset = e.Location;
+            windowSize = new Point(this.Width, this.Height);
+        }
+
+        private void panel1_MouseUp(object sender, MouseEventArgs e)
+        {
+            windowDragging = false;
+        }
+
+        private void panel1_MouseMove(object sender, MouseEventArgs e)
+        {
+            if (windowDragging)
+            {
+                this.Size = new Size(e.X - windowOffset.X + this.Width, e.Y - windowOffset.Y + this.Height);
+            }
+        }
+
+        private void panel2_MouseDown(object sender, MouseEventArgs e)
+        {
+            if (e.Button != MouseButtons.Left)
+            {
+                return;
+            }
+
+            windowDragging = true;
+            windowOffset = e.Location;
+            windowSize = new Point(this.Width, this.Height);
+        }
+
+        private void panel2_MouseUp(object sender, MouseEventArgs e)
+        {
+            windowDragging = false;
+        }
+
+        private void panel2_MouseMove(object sender, MouseEventArgs e)
+        {
+            if (windowDragging)
+            {
+                this.Size = new Size(windowSize.X, e.Y - windowOffset.Y + this.Height);
+            }
+        }
+
+    }
+}
\ No newline at end of file
diff --git a/RyzStudio/Windows/ThemedForms/BorderlessForm.resx b/RyzStudio/Windows/ThemedForms/BorderlessForm.resx
new file mode 100644
index 0000000..db173e1
--- /dev/null
+++ b/RyzStudio/Windows/ThemedForms/BorderlessForm.resx
@@ -0,0 +1,158 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="label1.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="pictureBox4.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="pictureBox2.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="pictureBox1.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="pictureBox3.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="pictureBox3.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+        xAAADsQBlSsOGwAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAADnSURBVDhP1ZVB
+        DoIwEEW7whNo9Cri/QCv5Y4YEoTWxK71Gvqn+W2AgEkbNvxkYPgzfWkpKcpau9NaX/u+/yC+iSFjK3Ay
+        RdhcU0qUChc3s67rzipRGJ8T+JYHR2ctWYGzXSC8Gzbs3rbtgZaSXDyp0QoKnJBMBK8WH5vVCUhCcvbX
+        bAuivwxsmmaP2TxYfyE3zJ/Ij2wLYu3/OxQoah4kYedgIt8TDTTGnFgeyfcsAodLxn205Dlo4IRkInjr
+        bgq8dT+bWG0L6A/WnLVo4b1eyHDHV8WHNaJwvwAkJeI9KMSGjC201tkP+AimzgF8cMEAAAAASUVORK5C
+        YII=
+</value>
+  </data>
+  <data name="pictureBox3.NormalImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+        xAAADsQBlSsOGwAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAADnSURBVDhP1ZVB
+        DoIwEEW7whNo9Cri/QCv5Y4YEoTWxK71Gvqn+W2AgEkbNvxkYPgzfWkpKcpau9NaX/u+/yC+iSFjK3Ay
+        RdhcU0qUChc3s67rzipRGJ8T+JYHR2ctWYGzXSC8Gzbs3rbtgZaSXDyp0QoKnJBMBK8WH5vVCUhCcvbX
+        bAuivwxsmmaP2TxYfyE3zJ/Ij2wLYu3/OxQoah4kYedgIt8TDTTGnFgeyfcsAodLxn205Dlo4IRkInjr
+        bgq8dT+bWG0L6A/WnLVo4b1eyHDHV8WHNaJwvwAkJeI9KMSGjC201tkP+AimzgF8cMEAAAAASUVORK5C
+        YII=
+</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/RyzStudio/Windows/ThemedForms/BorderlessToolForm.Designer.cs b/RyzStudio/Windows/ThemedForms/BorderlessToolForm.Designer.cs
new file mode 100644
index 0000000..75f86a0
--- /dev/null
+++ b/RyzStudio/Windows/ThemedForms/BorderlessToolForm.Designer.cs
@@ -0,0 +1,191 @@
+namespace RyzStudio.Windows.ThemedForms
+{
+  partial class BorderlessToolForm
+    {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary>
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing)
+    {
+      if (disposing && (components != null))
+      {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Windows Form Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent()
+    {
+            this.lblDescription = new System.Windows.Forms.Label();
+            this.panel1 = new System.Windows.Forms.Panel();
+            this.imgbxMenu = new RyzStudio.Windows.Forms.ImageBox();
+            this.imgbxMaximise = new RyzStudio.Windows.Forms.ImageBox();
+            this.imgbxMinimise = new RyzStudio.Windows.Forms.ImageBox();
+            this.imgbxClose = new RyzStudio.Windows.Forms.ImageBox();
+            this.area1 = new System.Windows.Forms.Panel();
+            ((System.ComponentModel.ISupportInitialize)(this.imgbxMenu)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.imgbxMaximise)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.imgbxMinimise)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.imgbxClose)).BeginInit();
+            this.SuspendLayout();
+            // 
+            // lblDescription
+            // 
+            this.lblDescription.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.lblDescription.BackColor = System.Drawing.Color.Transparent;
+            this.lblDescription.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+            this.lblDescription.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(241)))), ((int)(((byte)(241)))), ((int)(((byte)(241)))));
+            this.lblDescription.Location = new System.Drawing.Point(1, 1);
+            this.lblDescription.Name = "lblDescription";
+            this.lblDescription.Padding = new System.Windows.Forms.Padding(10, 0, 0, 0);
+            this.lblDescription.Size = new System.Drawing.Size(194, 30);
+            this.lblDescription.TabIndex = 148;
+            this.lblDescription.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+            this.lblDescription.DoubleClick += new System.EventHandler(this.label1_DoubleClick);
+            this.lblDescription.MouseClick += new System.Windows.Forms.MouseEventHandler(this.label1_MouseClick);
+            this.lblDescription.MouseDown += new System.Windows.Forms.MouseEventHandler(this.label1_MouseDown);
+            this.lblDescription.MouseMove += new System.Windows.Forms.MouseEventHandler(this.label1_MouseMove);
+            this.lblDescription.MouseUp += new System.Windows.Forms.MouseEventHandler(this.label1_MouseUp);
+            // 
+            // panel1
+            // 
+            this.panel1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+            this.panel1.BackColor = System.Drawing.Color.Transparent;
+            this.panel1.Cursor = System.Windows.Forms.Cursors.SizeNWSE;
+            this.panel1.Location = new System.Drawing.Point(335, 595);
+            this.panel1.Name = "panel1";
+            this.panel1.Size = new System.Drawing.Size(5, 5);
+            this.panel1.TabIndex = 150;
+            this.panel1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.panel1_MouseDown);
+            this.panel1.MouseMove += new System.Windows.Forms.MouseEventHandler(this.panel1_MouseMove);
+            this.panel1.MouseUp += new System.Windows.Forms.MouseEventHandler(this.panel1_MouseUp);
+            // 
+            // imgbxMenu
+            // 
+            this.imgbxMenu.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+            this.imgbxMenu.BackColor = System.Drawing.Color.Transparent;
+            this.imgbxMenu.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
+            this.imgbxMenu.ErrorImage = null;
+            this.imgbxMenu.HighlightImage = global::AppLauncher.Properties.Resources.form16_menu2;
+            this.imgbxMenu.Image = global::AppLauncher.Properties.Resources.form16_menu;
+            this.imgbxMenu.InitialImage = null;
+            this.imgbxMenu.Location = new System.Drawing.Point(224, 4);
+            this.imgbxMenu.Name = "imgbxMenu";
+            this.imgbxMenu.NormalImage = global::AppLauncher.Properties.Resources.form16_menu;
+            this.imgbxMenu.Size = new System.Drawing.Size(24, 24);
+            this.imgbxMenu.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
+            this.imgbxMenu.TabIndex = 149;
+            this.imgbxMenu.TabStop = false;
+            // 
+            // imgbxMaximise
+            // 
+            this.imgbxMaximise.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+            this.imgbxMaximise.BackColor = System.Drawing.Color.Transparent;
+            this.imgbxMaximise.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
+            this.imgbxMaximise.ErrorImage = null;
+            this.imgbxMaximise.HighlightImage = global::AppLauncher.Properties.Resources.form16_maximise2;
+            this.imgbxMaximise.Image = global::AppLauncher.Properties.Resources.form16_maximise;
+            this.imgbxMaximise.InitialImage = null;
+            this.imgbxMaximise.Location = new System.Drawing.Point(280, 4);
+            this.imgbxMaximise.Name = "imgbxMaximise";
+            this.imgbxMaximise.NormalImage = global::AppLauncher.Properties.Resources.form16_maximise;
+            this.imgbxMaximise.Size = new System.Drawing.Size(24, 24);
+            this.imgbxMaximise.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
+            this.imgbxMaximise.TabIndex = 147;
+            this.imgbxMaximise.TabStop = false;
+            // 
+            // imgbxMinimise
+            // 
+            this.imgbxMinimise.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+            this.imgbxMinimise.BackColor = System.Drawing.Color.Transparent;
+            this.imgbxMinimise.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
+            this.imgbxMinimise.ErrorImage = null;
+            this.imgbxMinimise.HighlightImage = global::AppLauncher.Properties.Resources.form16_minimise2;
+            this.imgbxMinimise.Image = global::AppLauncher.Properties.Resources.form16_minimise;
+            this.imgbxMinimise.InitialImage = null;
+            this.imgbxMinimise.Location = new System.Drawing.Point(252, 4);
+            this.imgbxMinimise.Name = "imgbxMinimise";
+            this.imgbxMinimise.NormalImage = global::AppLauncher.Properties.Resources.form16_minimise;
+            this.imgbxMinimise.Size = new System.Drawing.Size(24, 24);
+            this.imgbxMinimise.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
+            this.imgbxMinimise.TabIndex = 146;
+            this.imgbxMinimise.TabStop = false;
+            // 
+            // imgbxClose
+            // 
+            this.imgbxClose.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+            this.imgbxClose.BackColor = System.Drawing.Color.Transparent;
+            this.imgbxClose.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
+            this.imgbxClose.ErrorImage = null;
+            this.imgbxClose.HighlightImage = global::AppLauncher.Properties.Resources.form16_close2;
+            this.imgbxClose.Image = global::AppLauncher.Properties.Resources.form16_close;
+            this.imgbxClose.InitialImage = null;
+            this.imgbxClose.Location = new System.Drawing.Point(308, 4);
+            this.imgbxClose.Name = "imgbxClose";
+            this.imgbxClose.NormalImage = global::AppLauncher.Properties.Resources.form16_close;
+            this.imgbxClose.Size = new System.Drawing.Size(24, 24);
+            this.imgbxClose.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
+            this.imgbxClose.TabIndex = 145;
+            this.imgbxClose.TabStop = false;
+            // 
+            // area1
+            // 
+            this.area1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.area1.BackColor = System.Drawing.Color.Transparent;
+            this.area1.Cursor = System.Windows.Forms.Cursors.SizeNS;
+            this.area1.Location = new System.Drawing.Point(0, 595);
+            this.area1.Name = "area1";
+            this.area1.Size = new System.Drawing.Size(334, 5);
+            this.area1.TabIndex = 151;
+            this.area1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.panel2_MouseDown);
+            this.area1.MouseMove += new System.Windows.Forms.MouseEventHandler(this.panel2_MouseMove);
+            this.area1.MouseUp += new System.Windows.Forms.MouseEventHandler(this.panel2_MouseUp);
+            // 
+            // BorderlessToolForm
+            // 
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
+            this.BackColor = System.Drawing.Color.WhiteSmoke;
+            this.ClientSize = new System.Drawing.Size(340, 600);
+            this.Controls.Add(this.area1);
+            this.Controls.Add(this.panel1);
+            this.Controls.Add(this.imgbxMenu);
+            this.Controls.Add(this.lblDescription);
+            this.Controls.Add(this.imgbxMaximise);
+            this.Controls.Add(this.imgbxMinimise);
+            this.Controls.Add(this.imgbxClose);
+            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
+            this.MinimumSize = new System.Drawing.Size(40, 0);
+            this.Name = "BorderlessToolForm";
+            ((System.ComponentModel.ISupportInitialize)(this.imgbxMenu)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.imgbxMaximise)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.imgbxMinimise)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.imgbxClose)).EndInit();
+            this.ResumeLayout(false);
+
+    }
+
+        #endregion
+
+        protected internal Forms.ImageBox imgbxMaximise;
+        protected internal Forms.ImageBox imgbxMinimise;
+        protected internal Forms.ImageBox imgbxClose;
+        protected internal System.Windows.Forms.Label lblDescription;
+        protected internal Forms.ImageBox imgbxMenu;
+        protected internal System.Windows.Forms.Panel panel1;
+        protected internal System.Windows.Forms.Panel area1;
+    }
+}
\ No newline at end of file
diff --git a/RyzStudio/Windows/ThemedForms/BorderlessToolForm.cs b/RyzStudio/Windows/ThemedForms/BorderlessToolForm.cs
new file mode 100644
index 0000000..3c17b0b
--- /dev/null
+++ b/RyzStudio/Windows/ThemedForms/BorderlessToolForm.cs
@@ -0,0 +1,394 @@
+namespace RyzStudio.Windows.ThemedForms
+{
+    using System;
+    using System.ComponentModel;
+    using System.Drawing;
+    using System.Drawing.Design;
+    using System.Windows.Forms;
+    using Resources = AppLauncher.Properties.Resources;
+
+    public partial class BorderlessToolForm : System.Windows.Forms.Form
+    {
+        protected bool isBusy = false;
+
+        protected Color topFillColour = Color.FromArgb(15, 15, 15);
+        protected int topFillHeight = 32;
+        protected int borderWidth = 1;
+
+        private bool windowDragging = false;
+        private Point windowOffset = new Point();
+        private Point windowSize = new Point();
+
+        public BorderlessToolForm() : base()
+        {
+            this.InitializeComponent();
+
+            this.BackColor = Color.FromArgb(246, 246, 246);
+            this.Padding = new Padding(1);
+
+			this.topFillColour = Color.FromArgb(51, 51, 51);
+			this.topFillHeight = 32;
+
+			this.BackColor = Color.FromArgb(179, 179, 179);
+            this.FormBorderStyle = FormBorderStyle.None;
+
+            imgbxMinimise.Click += pictureBox1_Click;
+            imgbxMaximise.Click += pictureBox2_Click;
+            imgbxClose.Click += pictureBox3_Click;
+            imgbxMenu.Click += pictureBox4_Click;
+
+            updatePictureBox2Image();
+        }
+
+        protected override void OnClosing(CancelEventArgs e)
+        {
+            base.OnClosing(e);
+
+            if (this.IsBusy)
+            {
+                e.Cancel = true;
+            }
+        }
+
+        protected override void OnPaint(PaintEventArgs e)
+        {
+            base.OnPaint(e);
+
+            Graphics g = e.Graphics;
+
+            Rectangle areaTop = new Rectangle(this.DisplayRectangle.Left, this.Padding.Top, this.DisplayRectangle.Width, topFillHeight);
+            Rectangle areaBorder = new Rectangle(this.ClientRectangle.X, this.ClientRectangle.Y, this.ClientRectangle.Width - borderWidth, this.ClientRectangle.Height - borderWidth);
+
+            // draw header
+            if (topFillHeight > 0)
+            {
+                g.FillRectangle(new SolidBrush(topFillColour), areaTop);
+            }
+
+            // draw logo
+            //if (this.TitleLogo != null)
+            //{
+            //    g.DrawImageUnscaled(this.TitleLogo, this.Padding.Left, this.Padding.Top);
+            //}
+
+            g.DrawRectangle(new Pen(Color.Black, borderWidth), areaBorder);
+        }
+
+        protected override void OnResize(EventArgs e)
+        {
+            base.OnResize(e);
+
+            updatePictureBox2Image();
+
+            this.Invalidate();
+        }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public new Color BackColor { get => base.BackColor; set => base.BackColor = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public new FormBorderStyle FormBorderStyle { get => base.FormBorderStyle; set => base.FormBorderStyle = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public new Padding Padding { get => base.Padding; set => base.Padding = value; }
+
+        [Category("Appearance"), Browsable(true)]
+        public string Description
+        {
+            get
+            {
+                return lblDescription.Text?.Replace("\n", "\\n");
+            }
+            set
+            {
+                lblDescription.Text = value?.Replace("\\n", "\n");
+            }
+        }
+
+        //[Category("Appearance"), Browsable(true)]
+        //public Image TitleLogo { get; set; }
+
+        [Category("Appearance"), Browsable(true)]
+        public Image Banner { get; set; }
+
+        [Category("Appearance"), Browsable(true)]
+        public bool ShowMenuButton { get => imgbxMenu.Visible; set => imgbxMenu.Visible = value; }
+
+        [Category("Appearance"), Browsable(true)]
+        public bool ShowMinimiseButton { get => imgbxMinimise.Visible; set => imgbxMinimise.Visible = value; }
+
+        [Category("Appearance"), Browsable(true)]
+        public bool ShowMaximiseButton { get => imgbxMaximise.Visible; set => imgbxMaximise.Visible = value; }
+
+        protected virtual bool IsBusy { get => isBusy; set => isBusy = value; }
+
+        private void pictureBox4_Click(object sender, System.EventArgs e)
+        {
+            //this.WindowState = FormWindowState.Minimized;
+        }
+
+        private void pictureBox1_Click(object sender, System.EventArgs e)
+        {
+            MouseEventArgs mouseEvent = (MouseEventArgs)e;
+            if (mouseEvent != null)
+            {
+                if (mouseEvent.Button != MouseButtons.Left)
+                {
+                    return;
+                }
+            }
+
+            this.WindowState = FormWindowState.Minimized;
+        }
+
+        private void pictureBox2_Click(object sender, System.EventArgs e)
+        {
+            MouseEventArgs mouseEvent = (MouseEventArgs)e;
+            if (mouseEvent != null)
+            {
+                if (mouseEvent.Button != MouseButtons.Left)
+                {
+                    return;
+                }
+            }
+
+            if (this.WindowState == FormWindowState.Maximized)
+            {
+                this.WindowState = FormWindowState.Normal;
+                imgbxMaximise.NormalImage = Resources.form16_maximise;
+                imgbxMaximise.HighlightImage = Resources.form16_maximise2;
+            }
+            else
+            {
+                this.WindowState = FormWindowState.Maximized;
+                imgbxMaximise.NormalImage = Resources.form16_restore;
+                imgbxMaximise.HighlightImage = Resources.form16_restore2;
+            }
+        }
+
+        private void pictureBox3_Click(object sender, System.EventArgs e)
+        {
+            MouseEventArgs mouseEvent = (MouseEventArgs)e;
+            if (mouseEvent != null)
+            {
+                if (mouseEvent.Button != MouseButtons.Left)
+                {
+                    return;
+                }
+            }
+
+            this.Close();
+        }
+
+        public void SetValue(Label sender, string value)
+        {
+            if (sender.InvokeRequired)
+            {
+                sender.Invoke(new MethodInvoker(() => { sender.Text = value; }));
+            }
+            else
+            {
+                sender.Text = value;
+            }
+        }
+
+        public void SetValue(GroupBox sender, string value)
+        {
+            if (sender.InvokeRequired)
+            {
+                sender.Invoke(new MethodInvoker(() => { sender.Text = value; }));
+            }
+            else
+            {
+                sender.Text = value;
+            }
+        }
+
+        public void AddValue(ListBox sender, string value)
+        {
+            if (sender.InvokeRequired)
+            {
+                sender.Invoke(new MethodInvoker(() => { sender.Items.Add(value); }));
+            }
+            else
+            {
+                sender.Items.Add(value);
+            }
+        }
+
+        public void AddControl(FlowLayoutPanel sender, Control value)
+        {
+            if (sender.InvokeRequired)
+            {
+                sender.Invoke(new MethodInvoker(() =>
+                {
+                    sender.Controls.Add(value);
+                }));
+            }
+            else
+            {
+                sender.Controls.Add(value);
+            }
+        }
+
+        public void ClearValues(ListBox sender)
+        {
+            if (sender.InvokeRequired)
+            {
+                sender.Invoke(new MethodInvoker(() => { sender.Items.Clear(); }));
+            }
+            else
+            {
+                sender.Items.Clear();
+            }
+        }
+
+        public string GetValue(ListBox sender)
+        {
+            string rv = string.Empty;
+
+            if (sender.InvokeRequired)
+            {
+                sender.Invoke(new MethodInvoker(() => { rv = (sender.SelectedItem == null) ? string.Empty : sender.SelectedItem.ToString(); }));
+            }
+            else
+            {
+                rv = (sender.SelectedItem == null) ? string.Empty : sender.SelectedItem.ToString();
+            }
+
+            return rv;
+        }
+
+        public string GetValue(TTextBox sender)
+        {
+            string rv = string.Empty;
+
+            if (sender.InvokeRequired)
+            {
+                sender.Invoke(new MethodInvoker(() => { rv = sender.Text.Trim(); }));
+            }
+            else
+            {
+                rv = sender.Text.Trim();
+            }
+
+            return rv;
+        }
+
+        public int GetValue(NumericUpDown sender)
+        {
+            int rv = 0;
+
+            if (sender.InvokeRequired)
+            {
+                sender.Invoke(new MethodInvoker(() => { rv = (int)sender.Value; }));
+            }
+            else
+            {
+                rv = (int)sender.Value;
+            }
+
+            return rv;
+        }
+
+        protected void updatePictureBox2Image()
+        {
+            if (this.WindowState == FormWindowState.Maximized)
+            {
+                imgbxMaximise.NormalImage = Resources.form16_restore;
+                imgbxMaximise.HighlightImage = Resources.form16_restore2;
+            }
+            else
+            {
+                imgbxMaximise.NormalImage = Resources.form16_maximise;
+                imgbxMaximise.HighlightImage = Resources.form16_maximise2;
+            }
+        }
+
+        private void label1_MouseDown(object sender, MouseEventArgs e)
+        {
+            if (e.Button != MouseButtons.Left)
+            {
+                return;
+            }
+
+            windowDragging = true;
+            windowOffset = e.Location;
+        }
+
+        private void label1_MouseUp(object sender, MouseEventArgs e)
+        {
+            windowDragging = false;
+        }
+
+        private void label1_MouseMove(object sender, MouseEventArgs e)
+        {
+            if (windowDragging)
+            {
+                Point currentScreenPos = PointToScreen(e.Location);
+                Location = new Point(currentScreenPos.X - windowOffset.X, currentScreenPos.Y - windowOffset.Y);
+            }
+        }
+
+        private void label1_DoubleClick(object sender, EventArgs e) => pictureBox2_Click(sender, e);
+
+        private void label1_MouseClick(object sender, MouseEventArgs e)
+        {
+            if (e.Button == MouseButtons.Middle)
+            {
+                this.TopMost = !this.TopMost;
+            }
+        }
+
+        private void panel1_MouseDown(object sender, MouseEventArgs e)
+        {
+            if (e.Button != MouseButtons.Left)
+            {
+                return;
+            }
+
+            windowDragging = true;
+            windowOffset = e.Location;
+            windowSize = new Point(this.Width, this.Height);
+        }
+
+        private void panel1_MouseUp(object sender, MouseEventArgs e)
+        {
+            windowDragging = false;
+        }
+
+        private void panel1_MouseMove(object sender, MouseEventArgs e)
+        {
+            if (windowDragging)
+            {
+                this.Size = new Size(e.X - windowOffset.X + this.Width, e.Y - windowOffset.Y + this.Height);
+            }
+        }
+
+        private void panel2_MouseDown(object sender, MouseEventArgs e)
+        {
+            if (e.Button != MouseButtons.Left)
+            {
+                return;
+            }
+
+            windowDragging = true;
+            windowOffset = e.Location;
+            windowSize = new Point(this.Width, this.Height);
+        }
+
+        private void panel2_MouseUp(object sender, MouseEventArgs e)
+        {
+            windowDragging = false;
+
+        }
+
+        private void panel2_MouseMove(object sender, MouseEventArgs e)
+        {
+            if (windowDragging)
+            {
+                this.Size = new Size(windowSize.X, e.Y - windowOffset.Y + this.Height);
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/RyzStudio/Windows/ThemedForms/BorderlessToolForm.resx b/RyzStudio/Windows/ThemedForms/BorderlessToolForm.resx
new file mode 100644
index 0000000..8c98a25
--- /dev/null
+++ b/RyzStudio/Windows/ThemedForms/BorderlessToolForm.resx
@@ -0,0 +1,138 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="lblDescription.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="panel1.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="imgbxMenu.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="imgbxMaximise.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="imgbxMinimise.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="imgbxClose.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+</root>
\ No newline at end of file
diff --git a/RyzStudio/Windows/ThemedForms/PickerBox/TPickerBox.cs b/RyzStudio/Windows/ThemedForms/PickerBox/TPickerBox.cs
new file mode 100644
index 0000000..255f98c
--- /dev/null
+++ b/RyzStudio/Windows/ThemedForms/PickerBox/TPickerBox.cs
@@ -0,0 +1,98 @@
+namespace RyzStudio.Windows.ThemedForms
+{
+    using RyzStudio.Drawing;
+    using System;
+	using System.ComponentModel;
+	using System.Drawing;
+    using System.Windows.Forms;
+
+    public partial class TPickerBox : RyzStudio.Windows.ThemedForms.TUserControl
+	{
+        protected readonly Padding textboxPadding = new Padding(6, 2, 4, 2);
+
+		public TPickerBox() : base()
+        {
+            InitializeComponent();
+
+            this.Font = new Font(this.Font, FontStyle.Regular);
+            this.Margin = new Padding(10, 4, 10, 4);
+
+            comboBox1.Font = this.Font;
+            comboBox1.DropDownStyle = ComboBoxStyle.DropDownList;
+            comboBox1.PreviewKeyDown += textBox_PreviewKeyDown;
+        }
+
+        protected override void OnResize(EventArgs e)
+        {
+            base.OnResize(e);
+
+            int b = (styleActive.BorderWidth + 1) + styleActive.BorderPadding;
+
+            this.Height = comboBox1.Height + (b + textboxPadding.Top) + ((b - 1) + textboxPadding.Bottom);
+        }
+
+        protected override void OnGotFocus(EventArgs e)
+        {
+            base.OnGotFocus(e);
+
+            comboBox1.Focus();
+        }
+
+        protected void textBox_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
+        {
+            switch (e.KeyCode)
+            {
+                case Keys.Enter:
+                    if (this.SubmitButton != null)
+                    {
+                        this.SubmitButton.PerformClick();
+                    }
+
+                    break;
+                case Keys.Escape:
+                    close();
+                    break;
+                default: break;
+            }
+        }
+
+        [Browsable(true), EditorBrowsable(EditorBrowsableState.Advanced)]
+        [Category("Appearance")]
+        public System.Windows.Forms.ComboBox ComboBox { get => comboBox1; set => comboBox1 = value; }
+
+        //[Browsable(true), EditorBrowsable(EditorBrowsableState.Advanced)]
+        //[Category("Appearance")]
+        //public new string Text
+        //{
+        //    get => textBox1.Text;
+        //    set
+        //    {
+        //        textBox1.Text = value;
+        //        textBox1.SelectionStart = textBox1.Text.Length;
+        //    }
+        //}
+
+        //[Browsable(true)]
+        //[Category("Appearance")]
+        //public ComboBox.ObjectCollection Items { get => comboBox1.Items; set => comboBox1.Items = value; }
+
+        [Browsable(true), EditorBrowsable(EditorBrowsableState.Advanced)]
+        [Category("Appearance")]
+        public TButton SubmitButton { get; set; } = null;
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public new Padding Margin { get => base.Margin; set => base.Margin = value; }
+
+        protected override void updateBackground(Graphics g, ThemeStyle style)
+        {
+            int b = (styleActive.BorderWidth + 1) + styleActive.BorderPadding;
+
+            this.Padding = new Padding((b + textboxPadding.Left), (b + textboxPadding.Top), ((b - 1) + textboxPadding.Right), ((b - 1) + textboxPadding.Bottom));
+
+            Rectangoid area = new Rectangoid(this.ClientRectangle, style.BorderRadius, style.BorderWidth);
+            g.FillPath(new SolidBrush(style.BackColour), area.ToGraphicsPath());
+            g.DrawPath(new Pen(new SolidBrush(style.BorderColour), style.BorderWidth), area.ToGraphicsPath());
+        }
+
+    }
+}
\ No newline at end of file
diff --git a/RyzStudio/Windows/ThemedForms/PickerBox/TPickerBox.designer.cs b/RyzStudio/Windows/ThemedForms/PickerBox/TPickerBox.designer.cs
new file mode 100644
index 0000000..760329f
--- /dev/null
+++ b/RyzStudio/Windows/ThemedForms/PickerBox/TPickerBox.designer.cs
@@ -0,0 +1,59 @@
+namespace RyzStudio.Windows.ThemedForms
+{
+    partial class TPickerBox
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Component Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.comboBox1 = new System.Windows.Forms.ComboBox();
+            this.SuspendLayout();
+            // 
+            // comboBox1
+            // 
+            this.comboBox1.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.comboBox1.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
+            this.comboBox1.FormattingEnabled = true;
+            this.comboBox1.Location = new System.Drawing.Point(4, 4);
+            this.comboBox1.Name = "comboBox1";
+            this.comboBox1.Size = new System.Drawing.Size(121, 21);
+            this.comboBox1.TabIndex = 0;
+            // 
+            // PickerBox
+            // 
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
+            this.Controls.Add(this.comboBox1);
+            this.Name = "PickerBox";
+            this.Padding = new System.Windows.Forms.Padding(4, 4, 3, 3);
+            this.Size = new System.Drawing.Size(128, 32);
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.ComboBox comboBox1;
+    }
+}
diff --git a/RyzStudio/Windows/ThemedForms/PickerBox/TPickerBox.resx b/RyzStudio/Windows/ThemedForms/PickerBox/TPickerBox.resx
new file mode 100644
index 0000000..1af7de1
--- /dev/null
+++ b/RyzStudio/Windows/ThemedForms/PickerBox/TPickerBox.resx
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file
diff --git a/RyzStudio/Windows/ThemedForms/PickerBox/TYesNoPickerBox.cs b/RyzStudio/Windows/ThemedForms/PickerBox/TYesNoPickerBox.cs
new file mode 100644
index 0000000..89225ee
--- /dev/null
+++ b/RyzStudio/Windows/ThemedForms/PickerBox/TYesNoPickerBox.cs
@@ -0,0 +1,17 @@
+namespace RyzStudio.Windows.ThemedForms
+{
+    public class TYesNoPickerBox : TPickerBox
+    {
+
+        public TYesNoPickerBox() : base()
+        {
+            this.ComboBox.Items.Clear();
+
+            this.ComboBox.Items.AddRange(new string[] { "No", "Yes" });
+            if (this.ComboBox.Items.Count > 0) this.ComboBox.SelectedIndex = 0;
+        }
+
+        public bool Value { get => (this.ComboBox.SelectedIndex == 1); set =>this.ComboBox.SelectedIndex = (value ? 1 : 0); }
+
+    }
+}
diff --git a/RyzStudio/Windows/ThemedForms/TButton.cs b/RyzStudio/Windows/ThemedForms/TButton.cs
new file mode 100644
index 0000000..b6e4d93
--- /dev/null
+++ b/RyzStudio/Windows/ThemedForms/TButton.cs
@@ -0,0 +1,170 @@
+namespace RyzStudio.Windows.ThemedForms
+{
+    using System;
+    using System.ComponentModel;
+    using System.Drawing;
+    using System.Windows.Forms;
+
+    public partial class TButton : RyzStudio.Windows.ThemedForms.TUserControl
+	{
+        public class ButtonStyle
+        {
+            public Color BackColour { get; set; } = Color.Transparent;
+            public Color PenColour { get; set; } = Color.Transparent;
+            public Image ForeImage { get; set; } = null;
+        }
+
+        public enum ButtonState
+        {
+            Idle = 0,
+            Hover,
+            Down
+        }
+
+        protected ButtonState controlState = ButtonState.Idle;
+        protected bool isSelected = false;
+
+        public TButton() : base()
+        {
+            InitializeComponent();
+
+            this.Margin = new Padding(10);
+
+            this.StyleDefault = new ButtonStyle()
+            {
+                BackColour = Color.White,
+                PenColour = Color.Black,
+                ForeImage = this.DefaultImage
+            };
+            this.StyleDown = new ButtonStyle()
+            {
+                BackColour = Color.FromArgb(0, 183, 209),
+                PenColour = Color.Black,
+                ForeImage = this.DownImage
+            };
+            this.StyleOver = new ButtonStyle()
+            {
+                BackColour = Color.FromArgb(108, 101, 196),
+                PenColour = Color.White,
+                ForeImage = this.OverImage
+            };
+            this.StyleSelected = new ButtonStyle()
+            {
+                BackColour = Color.FromArgb(51, 51, 51),
+                PenColour = Color.White,
+                ForeImage = this.OverImage
+            };
+
+            label1.ImageAlign = ContentAlignment.MiddleCenter;
+            label1.Click += delegate { this.OnClick(null); };
+			label1.MouseEnter += delegate { this.VisualState = ButtonState.Hover; };
+			label1.MouseLeave += delegate { this.VisualState = ButtonState.Idle; };
+			label1.MouseDown += delegate { this.VisualState = ButtonState.Down; };
+			label1.MouseUp += delegate { this.VisualState = ButtonState.Idle; };
+		}
+
+        protected override void OnLoad(EventArgs e)
+        {
+            base.OnLoad(e);
+
+			this.VisualState = ButtonState.Idle;
+        }
+
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public new Padding Margin { get => base.Margin; set => base.Margin = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public new Padding Padding { get => base.Padding; set => base.Padding = value; }
+
+
+        protected ButtonState VisualState
+		{
+			get { return controlState; }
+			set
+			{
+				switch (value)
+				{
+					case ButtonState.Idle:
+						if (this.VisualState == ButtonState.Down)
+						{
+							updateButton(StyleOver);
+						}
+						else
+						{
+                            if (this.IsSelected)
+                            {
+                                updateButton(StyleSelected);
+                            }
+                            else
+                            {
+                                updateButton(StyleDefault);
+                            }
+                        }
+
+						break;
+					case ButtonState.Hover:
+						updateButton(StyleOver);
+						break;
+					case ButtonState.Down:
+						updateButton(StyleDown);
+						break;
+					default:
+                        if (this.IsSelected)
+                        {
+                            updateButton(StyleSelected);
+                        }
+                        else
+                        {
+                            updateButton(StyleDefault);
+                        }
+
+                        break;
+				}
+
+				controlState = value;
+			}
+		}
+
+		protected void updateButton(ButtonStyle style)
+		{
+			label1.ForeColor = style.PenColour;
+			label1.BackColor = style.BackColour;
+			label1.Image = style.ForeImage;
+        }
+
+        [Browsable(true)]
+		[Category("Appearance")]
+		public string LabelText { get => label1.Text; set => label1.Text = value; }
+
+		[Browsable(true)]
+		[Category("Appearance")]
+		public Image OverImage { get; set; } = null;
+
+		[Browsable(true)]
+		[Category("Appearance")]
+		public Image DownImage { get; set; } = null;
+
+		[Browsable(true)]
+		[Category("Appearance")]
+		public Image DefaultImage { get; set; } = null;
+
+        public bool IsSelected
+        {
+            get => isSelected;
+            set
+            {
+                isSelected = value;
+
+                this.VisualState = this.VisualState;
+            }
+        }
+
+        protected ButtonStyle StyleOver { get; set; } = new ButtonStyle();
+        protected ButtonStyle StyleDown { get; set; } = new ButtonStyle();
+        protected ButtonStyle StyleDefault { get; set; } = new ButtonStyle();
+        protected ButtonStyle StyleSelected { get; set; } = new ButtonStyle();
+
+        public void PerformClick() => this.OnClick(null);
+	}
+}
\ No newline at end of file
diff --git a/RyzStudio/Windows/ThemedForms/TButton.designer.cs b/RyzStudio/Windows/ThemedForms/TButton.designer.cs
new file mode 100644
index 0000000..5bf79d6
--- /dev/null
+++ b/RyzStudio/Windows/ThemedForms/TButton.designer.cs
@@ -0,0 +1,61 @@
+namespace RyzStudio.Windows.ThemedForms
+{
+  partial class TButton
+  {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing)
+    {
+      if (disposing && (components != null))
+      {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent()
+    {
+            this.label1 = new System.Windows.Forms.Label();
+            this.SuspendLayout();
+            // 
+            // label1
+            // 
+            this.label1.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.label1.Location = new System.Drawing.Point(4, 4);
+            this.label1.Margin = new System.Windows.Forms.Padding(0);
+            this.label1.Name = "label1";
+            this.label1.Size = new System.Drawing.Size(121, 25);
+            this.label1.TabIndex = 0;
+            this.label1.Text = "label1";
+            this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+            // 
+            // Button
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.label1);
+            this.Name = "Button";
+            this.Padding = new System.Windows.Forms.Padding(4, 4, 3, 3);
+            this.Size = new System.Drawing.Size(128, 32);
+            this.ResumeLayout(false);
+
+    }
+
+		#endregion
+
+		private System.Windows.Forms.Label label1;
+	}
+}
diff --git a/RyzStudio/Windows/ThemedForms/TButton.resx b/RyzStudio/Windows/ThemedForms/TButton.resx
new file mode 100644
index 0000000..1af7de1
--- /dev/null
+++ b/RyzStudio/Windows/ThemedForms/TButton.resx
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file
diff --git a/RyzStudio/Windows/ThemedForms/TDialogForm.Designer.cs b/RyzStudio/Windows/ThemedForms/TDialogForm.Designer.cs
new file mode 100644
index 0000000..0133a0e
--- /dev/null
+++ b/RyzStudio/Windows/ThemedForms/TDialogForm.Designer.cs
@@ -0,0 +1,47 @@
+namespace RyzStudio.Windows.ThemedForms
+{
+  partial class TDialogForm
+    {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary>
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing)
+    {
+      if (disposing && (components != null))
+      {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Windows Form Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent()
+    {
+            this.SuspendLayout();
+            // 
+            // TDialogForm
+            // 
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
+            this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(248)))), ((int)(((byte)(249)))), ((int)(((byte)(250)))));
+            this.ClientSize = new System.Drawing.Size(340, 600);
+            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
+            this.MinimumSize = new System.Drawing.Size(40, 0);
+            this.Name = "TDialogForm";
+            this.ResumeLayout(false);
+
+    }
+
+        #endregion
+    }
+}
\ No newline at end of file
diff --git a/RyzStudio/Windows/ThemedForms/TDialogForm.cs b/RyzStudio/Windows/ThemedForms/TDialogForm.cs
new file mode 100644
index 0000000..05dc0e4
--- /dev/null
+++ b/RyzStudio/Windows/ThemedForms/TDialogForm.cs
@@ -0,0 +1,117 @@
+using System.ComponentModel;
+using System.Drawing;
+using System.Windows.Forms;
+
+namespace RyzStudio.Windows.ThemedForms
+{
+    public partial class TDialogForm : Form
+    {
+        public TDialogForm()
+        {
+            this.InitializeComponent();
+
+            this.BackColor = Color.FromArgb(254, 254, 254);
+            this.FormBorderStyle = FormBorderStyle.Sizable;
+            this.MaximizeBox = false;
+            this.MinimizeBox = false;
+            this.Padding = new Padding(5, 10, 5, 10);
+            this.ShowIcon = false;
+            this.ShowInTaskbar = false;
+            this.StartPosition = FormStartPosition.CenterParent;
+            this.TopMost = true;
+            this.SizeGripStyle = SizeGripStyle.Hide;
+            this.AutoScaleMode = AutoScaleMode.Font;
+        }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public override Color BackColor { get => base.BackColor; set => base.BackColor = value; }
+
+        [Browsable(false)]
+        public override Image BackgroundImage { get => base.BackgroundImage; set => base.BackgroundImage = value; }
+
+        [Browsable(false)]
+        public override ImageLayout BackgroundImageLayout { get => base.BackgroundImageLayout; set => base.BackgroundImageLayout = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public new FormBorderStyle FormBorderStyle { get => base.FormBorderStyle; set => base.FormBorderStyle = value; }
+
+        //[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        //public override Size MaximumSize { get => base.MaximumSize; set => base.MaximumSize = value; }
+
+        //[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        //public override Size MinimumSize { get => base.MinimumSize; set => base.MinimumSize = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public new Padding Padding { get => base.Padding; set => base.Padding = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public new bool ShowIcon { get => base.ShowIcon; set => base.ShowIcon = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public new bool ShowInTaskbar { get => base.ShowInTaskbar; set => base.ShowInTaskbar = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public new FormStartPosition StartPosition { get => base.StartPosition; set => base.StartPosition = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public new bool TopMost { get => base.TopMost; set => base.TopMost = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public override Cursor Cursor { get => base.Cursor; set => base.Cursor = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public override RightToLeft RightToLeft { get => base.RightToLeft; set => base.RightToLeft = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public override bool RightToLeftLayout { get => base.RightToLeftLayout; set => base.RightToLeftLayout = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public new bool UseWaitCursor { get => base.UseWaitCursor; set => base.UseWaitCursor = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public new ImeMode ImeMode { get => base.ImeMode; set => base.ImeMode = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public override bool AutoSize { get => base.AutoSize; set => base.AutoSize = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public new AutoSizeMode AutoSizeMode { get => base.AutoSizeMode; set => base.AutoSizeMode = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public new bool MinimizeBox { get => base.MinimizeBox; set => base.MinimizeBox = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public new bool MaximizeBox { get => base.MaximizeBox; set => base.MaximizeBox = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public new bool ControlBox { get => base.ControlBox; set => base.ControlBox = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public new bool HelpButton { get => base.HelpButton; set => base.HelpButton = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public new MenuStrip MainMenuStrip { get => base.MainMenuStrip; set => base.MainMenuStrip = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public new SizeGripStyle SizeGripStyle { get => base.SizeGripStyle; set => base.SizeGripStyle = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public new AutoScaleMode AutoScaleMode { get => base.AutoScaleMode; set => base.AutoScaleMode = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public new bool AutoScroll { get => base.AutoScroll; set => base.AutoScroll = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public new Size AutoScrollMargin { get => base.AutoScrollMargin; set => base.AutoScrollMargin = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public new Size AutoScrollMinSize { get => base.AutoScrollMinSize; set => base.AutoScrollMinSize = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public new Point AutoScrollOffset { get => base.AutoScrollOffset; set => base.AutoScrollOffset = value; }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public new FormWindowState WindowState { get => base.WindowState; set => base.WindowState = value; }
+
+    }
+}
\ No newline at end of file
diff --git a/RyzStudio/Windows/ThemedForms/TDialogForm.resx b/RyzStudio/Windows/ThemedForms/TDialogForm.resx
new file mode 100644
index 0000000..f298a7b
--- /dev/null
+++ b/RyzStudio/Windows/ThemedForms/TDialogForm.resx
@@ -0,0 +1,60 @@
+<root>
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file
diff --git a/RyzStudio/Windows/ThemedForms/TListBox.cs b/RyzStudio/Windows/ThemedForms/TListBox.cs
new file mode 100644
index 0000000..2ddc41b
--- /dev/null
+++ b/RyzStudio/Windows/ThemedForms/TListBox.cs
@@ -0,0 +1,233 @@
+using RyzStudio.Drawing;
+using System;
+using System.ComponentModel;
+using System.Drawing;
+using System.Windows.Forms;
+using UIResource = FizzyLauncher.UIResource;
+
+namespace RyzStudio.Windows.ThemedForms
+{
+    public partial class TListBox : RyzStudio.Windows.ThemedForms.TUserControl
+	{
+        protected readonly Padding textboxPadding = new Padding(6, 2, 4, 2);
+
+		public TListBox() : base()
+        {
+            InitializeComponent();
+
+            this.Font = new Font(this.Font, FontStyle.Regular);
+            this.Margin = new Padding(10, 4, 10, 4);
+
+            listBox1.Font = this.Font;
+            listBox1.BorderStyle = BorderStyle.None;
+        }
+
+        protected override void OnResize(EventArgs e)
+        {
+            base.OnResize(e);
+
+            //int b = (styleActive.BorderWidth + 1) + styleActive.BorderPadding;
+
+            //this.Height = comboBox1.Height + (b + textboxPadding.Top) + ((b - 1) + textboxPadding.Bottom);
+        }
+
+        protected override void OnGotFocus(EventArgs e)
+        {
+            base.OnGotFocus(e);
+
+            listBox1.Focus();
+        }
+
+        [Browsable(true), EditorBrowsable(EditorBrowsableState.Advanced)]
+        [Category("Appearance")]
+        public System.Windows.Forms.ListBox ListBox { get => listBox1; set => listBox1 = value; }
+
+        [Browsable(true), EditorBrowsable(EditorBrowsableState.Advanced)]
+        [Category("Appearance")]
+        public TButton SubmitButton { get; set; } = null;
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public new Padding Margin { get => base.Margin; set => base.Margin = value; }
+
+        [Category("Action")]
+        [Browsable(true)]
+        public event EventHandler OnAdd;
+
+        [Category("Action")]
+        [Browsable(true)]
+        public event EventHandler OnEdit;
+
+        protected override void updateBackground(Graphics g, ThemeStyle style)
+        {
+            int b = (styleActive.BorderWidth + 1) + styleActive.BorderPadding;
+
+            this.Padding = new Padding((b + textboxPadding.Left), (b + textboxPadding.Top), ((b - 1) + textboxPadding.Right), ((b - 1) + textboxPadding.Bottom));
+
+            Rectangoid area = new Rectangoid(this.ClientRectangle, style.BorderRadius, style.BorderWidth);
+            g.FillPath(new SolidBrush(style.BackColour), area.ToGraphicsPath());
+            g.DrawPath(new Pen(new SolidBrush(style.BorderColour), style.BorderWidth), area.ToGraphicsPath());
+        }
+
+        /// <summary>
+        /// Add
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
+        private void imageBox1_MouseClick(object sender, MouseEventArgs e)
+        {
+            if (e.Button != MouseButtons.Left)
+            {
+                return;
+            }
+
+            this.OnAdd?.Invoke(sender, e);
+        }
+
+        /// <summary>
+        /// Edit
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
+        private void imageBox5_MouseClick(object sender, MouseEventArgs e)
+        {
+            if (e.Button != MouseButtons.Left)
+            {
+                return;
+            }
+
+            this.OnEdit?.Invoke(sender, e);
+        }
+
+        /// <summary>
+        /// Remove
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
+        private void imageBox2_MouseClick(object sender, MouseEventArgs e)
+        {
+            if (e.Button != MouseButtons.Left)
+            {
+                return;
+            }
+
+            if (listBox1.SelectedIndex < 0)
+            {
+                return;
+            }
+
+            int pos = listBox1.SelectedIndex;
+
+            listBox1.Items.RemoveAt(pos);
+
+            if (pos > (listBox1.Items.Count - 1))
+            {
+                pos = (listBox1.Items.Count - 1);
+            }
+
+            listBox1.SelectedIndex = pos;
+        }
+
+        /// <summary>
+        /// Move up
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
+        private void imageBox3_MouseClick(object sender, MouseEventArgs e)
+        {
+            if (e != null)
+            {
+                if (e.Button != MouseButtons.Left)
+                {
+                    return;
+                }
+            }
+
+            if (listBox1.SelectedIndex <= 0)
+            {
+                return;
+            }
+
+            if (listBox1.SelectedItem == null)
+            {
+                return;
+            }
+
+            object item = listBox1.SelectedItem;
+            int pos = listBox1.SelectedIndex;
+
+            listBox1.Items.RemoveAt(pos);
+            listBox1.Items.Insert((pos - 1), item);
+
+            listBox1.SelectedIndex = (pos - 1);
+        }
+
+        /// <summary>
+        /// Move down
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
+        private void imageBox4_MouseClick(object sender, MouseEventArgs e)
+        {
+            if (e != null)
+            {
+                if (e.Button != MouseButtons.Left)
+                {
+                    return;
+                }
+            }
+
+            if (listBox1.SelectedIndex >= (listBox1.Items.Count - 1))
+            {
+                return;
+            }
+
+            if (listBox1.SelectedItem == null)
+            {
+                return;
+            }
+
+            object item = listBox1.SelectedItem;
+            int pos = listBox1.SelectedIndex;
+
+            listBox1.Items.RemoveAt(pos);
+            listBox1.Items.Insert((pos + 1), item);
+
+            listBox1.SelectedIndex = (pos + 1);
+        }
+
+        private void listBox1_MouseDoubleClick(object sender, MouseEventArgs e) => imageBox5_MouseClick(sender, e);
+
+        private void listBox1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
+        {
+            switch (e.KeyCode)
+            {
+                case Keys.Enter:
+                    if (this.SubmitButton != null)
+                    {
+                        this.SubmitButton.PerformClick();
+                    }
+
+                    break;
+                case Keys.Escape:
+                    close();
+                    break;
+                case Keys.Up:
+                    if (e.Alt)
+                    {
+                        imageBox3_MouseClick(sender, null);
+                    }
+
+                    break;
+                case Keys.Down:
+                    if (e.Alt)
+                    {
+                        imageBox4_MouseClick(sender, null);
+                    }
+
+                    break;
+                default: break;
+            }
+        }
+
+    }
+}
\ No newline at end of file
diff --git a/RyzStudio/Windows/ThemedForms/TListBox.designer.cs b/RyzStudio/Windows/ThemedForms/TListBox.designer.cs
new file mode 100644
index 0000000..469e7b0
--- /dev/null
+++ b/RyzStudio/Windows/ThemedForms/TListBox.designer.cs
@@ -0,0 +1,182 @@
+namespace RyzStudio.Windows.ThemedForms
+{
+    partial class TListBox
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Component Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.listBox1 = new System.Windows.Forms.ListBox();
+            this.imageBox5 = new RyzStudio.Windows.Forms.TImageBox();
+            this.imageBox4 = new RyzStudio.Windows.Forms.TImageBox();
+            this.imageBox3 = new RyzStudio.Windows.Forms.TImageBox();
+            this.imageBox2 = new RyzStudio.Windows.Forms.TImageBox();
+            this.imageBox1 = new RyzStudio.Windows.Forms.TImageBox();
+            ((System.ComponentModel.ISupportInitialize)(this.imageBox5)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.imageBox4)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.imageBox3)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.imageBox2)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.imageBox1)).BeginInit();
+            this.SuspendLayout();
+            // 
+            // listBox1
+            // 
+            this.listBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
+            | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.listBox1.FormattingEnabled = true;
+            this.listBox1.Location = new System.Drawing.Point(4, 4);
+            this.listBox1.Name = "listBox1";
+            this.listBox1.Size = new System.Drawing.Size(121, 82);
+            this.listBox1.TabIndex = 0;
+            this.listBox1.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.listBox1_MouseDoubleClick);
+            this.listBox1.PreviewKeyDown += new System.Windows.Forms.PreviewKeyDownEventHandler(this.listBox1_PreviewKeyDown);
+            // 
+            // imageBox5
+            // 
+            this.imageBox5.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+            this.imageBox5.BackColor = System.Drawing.Color.Transparent;
+            this.imageBox5.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
+            this.imageBox5.ErrorImage = null;
+            this.imageBox5.ImageHover = global::FizzyLauncher.UIResource.edit2;
+            this.imageBox5.Image = global::FizzyLauncher.UIResource.edit;
+            this.imageBox5.InitialImage = null;
+            this.imageBox5.Location = new System.Drawing.Point(52, 94);
+            this.imageBox5.Name = "imageBox5";
+            this.imageBox5.ImageNormal = global::FizzyLauncher.UIResource.edit;
+            this.imageBox5.Size = new System.Drawing.Size(18, 25);
+            this.imageBox5.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
+            this.imageBox5.TabIndex = 6;
+            this.imageBox5.TabStop = false;
+            this.imageBox5.MouseClick += new System.Windows.Forms.MouseEventHandler(this.imageBox5_MouseClick);
+            this.imageBox5.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.imageBox5_MouseClick);
+            // 
+            // imageBox4
+            // 
+            this.imageBox4.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+            this.imageBox4.BackColor = System.Drawing.Color.Transparent;
+            this.imageBox4.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
+            this.imageBox4.ErrorImage = null;
+            this.imageBox4.ImageHover = global::FizzyLauncher.UIResource.arrow_down2;
+            this.imageBox4.Image = global::FizzyLauncher.UIResource.arrow_down;
+            this.imageBox4.InitialImage = null;
+            this.imageBox4.Location = new System.Drawing.Point(100, 94);
+            this.imageBox4.Name = "imageBox4";
+            this.imageBox4.ImageNormal = global::FizzyLauncher.UIResource.arrow_down;
+            this.imageBox4.Size = new System.Drawing.Size(18, 25);
+            this.imageBox4.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
+            this.imageBox4.TabIndex = 5;
+            this.imageBox4.TabStop = false;
+            this.imageBox4.MouseClick += new System.Windows.Forms.MouseEventHandler(this.imageBox4_MouseClick);
+            this.imageBox4.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.imageBox4_MouseClick);
+            // 
+            // imageBox3
+            // 
+            this.imageBox3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+            this.imageBox3.BackColor = System.Drawing.Color.Transparent;
+            this.imageBox3.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
+            this.imageBox3.ErrorImage = null;
+            this.imageBox3.ImageHover = global::FizzyLauncher.UIResource.arrow_up2;
+            this.imageBox3.Image = global::FizzyLauncher.UIResource.arrow_up;
+            this.imageBox3.InitialImage = null;
+            this.imageBox3.Location = new System.Drawing.Point(76, 94);
+            this.imageBox3.Name = "imageBox3";
+            this.imageBox3.ImageNormal = global::FizzyLauncher.UIResource.arrow_up;
+            this.imageBox3.Size = new System.Drawing.Size(18, 25);
+            this.imageBox3.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
+            this.imageBox3.TabIndex = 4;
+            this.imageBox3.TabStop = false;
+            this.imageBox3.MouseClick += new System.Windows.Forms.MouseEventHandler(this.imageBox3_MouseClick);
+            this.imageBox3.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.imageBox3_MouseClick);
+            // 
+            // imageBox2
+            // 
+            this.imageBox2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+            this.imageBox2.BackColor = System.Drawing.Color.Transparent;
+            this.imageBox2.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
+            this.imageBox2.ErrorImage = null;
+            this.imageBox2.ImageHover = global::FizzyLauncher.UIResource.minus2;
+            this.imageBox2.Image = global::FizzyLauncher.UIResource.minus;
+            this.imageBox2.InitialImage = null;
+            this.imageBox2.Location = new System.Drawing.Point(28, 94);
+            this.imageBox2.Name = "imageBox2";
+            this.imageBox2.ImageNormal = global::FizzyLauncher.UIResource.minus;
+            this.imageBox2.Size = new System.Drawing.Size(18, 25);
+            this.imageBox2.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
+            this.imageBox2.TabIndex = 3;
+            this.imageBox2.TabStop = false;
+            this.imageBox2.MouseClick += new System.Windows.Forms.MouseEventHandler(this.imageBox2_MouseClick);
+            this.imageBox2.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.imageBox2_MouseClick);
+            // 
+            // imageBox1
+            // 
+            this.imageBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+            this.imageBox1.BackColor = System.Drawing.Color.Transparent;
+            this.imageBox1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
+            this.imageBox1.ErrorImage = null;
+            this.imageBox1.ImageHover = global::FizzyLauncher.UIResource.plus2;
+            this.imageBox1.Image = global::FizzyLauncher.UIResource.plus;
+            this.imageBox1.InitialImage = null;
+            this.imageBox1.Location = new System.Drawing.Point(4, 94);
+            this.imageBox1.Name = "imageBox1";
+            this.imageBox1.ImageNormal = global::FizzyLauncher.UIResource.plus;
+            this.imageBox1.Size = new System.Drawing.Size(18, 25);
+            this.imageBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
+            this.imageBox1.TabIndex = 2;
+            this.imageBox1.TabStop = false;
+            this.imageBox1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.imageBox1_MouseClick);
+            this.imageBox1.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.imageBox1_MouseClick);
+            // 
+            // TListBox
+            // 
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
+            this.Controls.Add(this.imageBox5);
+            this.Controls.Add(this.imageBox4);
+            this.Controls.Add(this.imageBox3);
+            this.Controls.Add(this.imageBox2);
+            this.Controls.Add(this.imageBox1);
+            this.Controls.Add(this.listBox1);
+            this.Name = "TListBox";
+            this.Padding = new System.Windows.Forms.Padding(4, 4, 3, 3);
+            this.Size = new System.Drawing.Size(128, 120);
+            ((System.ComponentModel.ISupportInitialize)(this.imageBox5)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.imageBox4)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.imageBox3)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.imageBox2)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.imageBox1)).EndInit();
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.ListBox listBox1;
+        private Forms.TImageBox imageBox1;
+        private Forms.TImageBox imageBox2;
+        private Forms.TImageBox imageBox3;
+        private Forms.TImageBox imageBox4;
+        private Forms.TImageBox imageBox5;
+    }
+}
diff --git a/RyzStudio/Windows/ThemedForms/TListBox.resx b/RyzStudio/Windows/ThemedForms/TListBox.resx
new file mode 100644
index 0000000..1af7de1
--- /dev/null
+++ b/RyzStudio/Windows/ThemedForms/TListBox.resx
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file
diff --git a/RyzStudio/Windows/ThemedForms/TUserControl.cs b/RyzStudio/Windows/ThemedForms/TUserControl.cs
new file mode 100644
index 0000000..56bea24
--- /dev/null
+++ b/RyzStudio/Windows/ThemedForms/TUserControl.cs
@@ -0,0 +1,106 @@
+using System;
+using System.Drawing;
+using System.Windows.Forms;
+using RyzStudio.Drawing;
+using System.ComponentModel;
+
+namespace RyzStudio.Windows.ThemedForms
+{
+    public partial class TUserControl : System.Windows.Forms.UserControl
+    {
+        public class ThemeStyle
+        {
+            public int BorderWidth;
+            public int BorderRadius;
+            public int BorderPadding;
+            public Color BorderColour;
+            public Color BackColour;
+            public Color ForeColour;
+
+            public ThemeStyle(int borderWidth, int borderRadius, int borderPadding, Color borderColour, Color backColour)
+            {
+                this.BorderWidth = borderWidth;
+                this.BorderRadius = borderRadius;
+                this.BorderPadding = borderPadding;
+                this.BorderColour = borderColour;
+                this.BackColour = backColour;
+                this.ForeColour = Color.Black;
+            }
+
+            public ThemeStyle(int borderWidth, int borderRadius, int borderPadding, Color borderColour, Color backColour, Color foreColour)
+            {
+                this.BorderWidth = borderWidth;
+                this.BorderRadius = borderRadius;
+                this.BorderPadding = borderPadding;
+                this.BorderColour = borderColour;
+                this.BackColour = backColour;
+                this.ForeColour = foreColour;
+            }
+        }
+
+        protected ThemeStyle styleActive = new ThemeStyle(1, 3, 2, Color.FromArgb(212, 212, 212), Color.White);
+
+        public TUserControl()
+        {
+            InitializeComponent();
+        }
+
+        protected override void OnLoad(EventArgs e)
+        {
+            base.OnLoad(e);
+
+			this.BackColor = Color.Transparent;
+		}
+
+		protected override void OnPaintBackground(PaintEventArgs e)
+        {
+            base.OnPaintBackground(e);
+
+			Graphics g = e.Graphics;
+            //g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
+            //g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
+            //g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
+            //g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
+
+            updateBackground(g, styleActive);
+        }
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public new Padding Padding { get => base.Padding; set => base.Padding = value; }
+
+        protected virtual void updateBackground(Graphics g, ThemeStyle style)
+		{
+			int b = (styleActive.BorderWidth + 1) + styleActive.BorderPadding;
+
+			this.Padding = new Padding(b, b, (b - 1), (b - 1));
+
+			Rectangoid area = new Rectangoid(this.ClientRectangle, style.BorderRadius, style.BorderWidth);
+			g.FillPath(new SolidBrush(style.BackColour), area.ToGraphicsPath());
+			g.DrawPath(new Pen(new SolidBrush(style.BorderColour), style.BorderWidth), area.ToGraphicsPath());
+		}
+
+        protected virtual void close()
+        {
+            if (this.Parent == null)
+            {
+                return;
+            }
+
+            if (this.Parent is Form)
+            {
+                (this.Parent as Form).Close();
+                return;
+            }
+
+            if (this.Parent.GetType().IsSubclassOf(typeof(System.Windows.Forms.Form)))
+            {
+                System.Windows.Forms.Form parentForm = (System.Windows.Forms.Form)this.Parent;
+                if (parentForm != null)
+                {
+                    parentForm.Close();
+                }
+            }
+        }
+
+    }
+}
\ No newline at end of file
diff --git a/RyzStudio/Windows/ThemedForms/TUserControl.designer.cs b/RyzStudio/Windows/ThemedForms/TUserControl.designer.cs
new file mode 100644
index 0000000..6f57544
--- /dev/null
+++ b/RyzStudio/Windows/ThemedForms/TUserControl.designer.cs
@@ -0,0 +1,37 @@
+namespace RyzStudio.Windows.ThemedForms
+{
+    partial class TUserControl
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Component Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            components = new System.ComponentModel.Container();
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+        }
+
+        #endregion
+    }
+}
diff --git a/RyzStudio/Windows/ThemedForms/TextBox/TButtonTextBox.cs b/RyzStudio/Windows/ThemedForms/TextBox/TButtonTextBox.cs
new file mode 100644
index 0000000..dbe7d77
--- /dev/null
+++ b/RyzStudio/Windows/ThemedForms/TextBox/TButtonTextBox.cs
@@ -0,0 +1,127 @@
+namespace RyzStudio.Windows.ThemedForms
+{
+    using RyzStudio.Drawing;
+    using System;
+	using System.ComponentModel;
+	using System.Drawing;
+    using System.Windows.Forms;
+
+    public partial class TButtonTextBox : RyzStudio.Windows.ThemedForms.TUserControl
+	{
+        protected readonly Padding textboxPadding = new Padding(6, 6, 6, 6);
+
+		public TButtonTextBox() : base()
+        {
+            InitializeComponent();
+
+            //this.Margin = new Padding(10, 6, 10, 6);
+            this.Margin = new Padding(10, 3, 3, 3);
+            this.Font = new Font(this.Font, FontStyle.Regular);
+
+            textBox1.Font = this.Font;
+            textBox1.Left = this.Margin.Left;
+            textBox1.PreviewKeyDown += textBox_PreviewKeyDown;
+
+            imageBox1.Click += imageBox1_Click;
+
+            OnResize(null);
+        }
+
+        protected override void OnResize(EventArgs e)
+        {
+            base.OnResize(e);
+
+            int b = (styleActive.BorderWidth + 1) + styleActive.BorderPadding;
+
+            this.Height = textBox1.Height + (b + textboxPadding.Top) + ((b - 1) + textboxPadding.Bottom);
+
+            imageBox1.Width = 18;
+            imageBox1.Height = textBox1.Height + textboxPadding.Top + textboxPadding.Bottom;
+            imageBox1.Left = this.Width - (this.Margin.Right + b + imageBox1.Width);
+
+            textBox1.Left = this.Margin.Left;
+            textBox1.Width = imageBox1.Left - textBox1.Left - 3;
+            textBox1.Top = (int)Math.Ceiling(decimal.Divide((this.Height - textBox1.Height), 2));
+        }
+
+        protected override void OnGotFocus(EventArgs e)
+        {
+            base.OnGotFocus(e);
+
+            textBox1.Focus();
+        }
+
+        protected void textBox_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
+        {
+            switch (e.KeyCode)
+            {
+                case Keys.Enter:
+                    if (this.SubmitButton != null)
+                    {
+                        this.SubmitButton.PerformClick();
+                    }
+
+                    break;
+                case Keys.Escape:
+                    close();
+                    break;
+                default: break;
+            }
+        }
+
+        protected virtual void imageBox1_Click(object sender, EventArgs e) => OnButtonClick?.Invoke(sender, e);
+
+        [Category("Action")]
+        [Browsable(true)]
+        public event EventHandler OnButtonClick;
+
+        [Browsable(true), EditorBrowsable(EditorBrowsableState.Advanced)]
+        [Category("Appearance")]
+        public Forms.TImageBox InnerImageBox { get => imageBox1; set => imageBox1 = value; }
+
+        [Browsable(true), EditorBrowsable(EditorBrowsableState.Advanced)]
+		[Category("Appearance")]
+		public System.Windows.Forms.TextBox InnerTextBox { get => textBox1; set => textBox1 = value; }
+
+        [Category("Appearance"), Browsable(true)]
+        public Image NormalImage { get => imageBox1.ImageNormal; set => imageBox1.ImageNormal = value; }
+
+        [Category("Appearance"), Browsable(true)]
+        public Image HighlightImage { get => imageBox1.ImageHover; set => imageBox1.ImageHover = value; }
+
+        [Browsable(true), EditorBrowsable(EditorBrowsableState.Advanced)]
+        [Category("Appearance")]
+        public new string Text
+        {
+            get => textBox1.Text;
+            set
+            {
+                textBox1.Text = value;
+                textBox1.SelectionStart = textBox1.Text.Length;
+            }
+        }
+
+        [Browsable(true), EditorBrowsable(EditorBrowsableState.Advanced)]
+        [Category("Appearance")]
+        public bool UseSystemPasswordChar { get => textBox1.UseSystemPasswordChar; set => textBox1.UseSystemPasswordChar = value; }
+
+        [Browsable(true), EditorBrowsable(EditorBrowsableState.Advanced)]
+        [Category("Appearance")]
+        public TButton SubmitButton { get; set; } = null;
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public new Padding Margin { get => base.Margin; set => base.Margin = value; }
+
+        protected override void updateBackground(Graphics g, ThemeStyle style)
+        {
+            int b = (styleActive.BorderWidth + 1) + styleActive.BorderPadding;
+
+            this.Padding = new Padding((b + textboxPadding.Left), (b + textboxPadding.Top), ((b - 1) + textboxPadding.Right), ((b - 1) + textboxPadding.Bottom));
+
+            Rectangoid area = new Rectangoid(this.ClientRectangle, style.BorderRadius, style.BorderWidth);
+            g.FillPath(new SolidBrush(style.BackColour), area.ToGraphicsPath());
+            g.DrawPath(new Pen(new SolidBrush(style.BorderColour), style.BorderWidth), area.ToGraphicsPath());
+        }
+
+    }
+}
\ No newline at end of file
diff --git a/RyzStudio/Windows/ThemedForms/TextBox/TButtonTextBox.designer.cs b/RyzStudio/Windows/ThemedForms/TextBox/TButtonTextBox.designer.cs
new file mode 100644
index 0000000..6a37b71
--- /dev/null
+++ b/RyzStudio/Windows/ThemedForms/TextBox/TButtonTextBox.designer.cs
@@ -0,0 +1,81 @@
+namespace RyzStudio.Windows.ThemedForms
+{
+    partial class TButtonTextBox
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Component Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.textBox1 = new System.Windows.Forms.TextBox();
+            this.imageBox1 = new RyzStudio.Windows.Forms.TImageBox();
+            ((System.ComponentModel.ISupportInitialize)(this.imageBox1)).BeginInit();
+            this.SuspendLayout();
+            //
+            // textBox1
+            //
+            this.textBox1.BackColor = System.Drawing.SystemColors.Window;
+            this.textBox1.BorderStyle = System.Windows.Forms.BorderStyle.None;
+            this.textBox1.HideSelection = false;
+            this.textBox1.Location = new System.Drawing.Point(7, 7);
+            this.textBox1.Name = "textBox1";
+            this.textBox1.Size = new System.Drawing.Size(68, 13);
+            this.textBox1.TabIndex = 0;
+            //
+            // imageBox1
+            //
+            this.imageBox1.BackColor = System.Drawing.Color.Transparent;
+            this.imageBox1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
+            this.imageBox1.ErrorImage = null;
+            this.imageBox1.ImageHover = null;
+            this.imageBox1.Image = null;
+            this.imageBox1.InitialImage = null;
+            this.imageBox1.Location = new System.Drawing.Point(107, 4);
+            this.imageBox1.Name = "imageBox1";
+            this.imageBox1.ImageNormal = null;
+            this.imageBox1.Size = new System.Drawing.Size(18, 25);
+            this.imageBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
+            this.imageBox1.TabIndex = 1;
+            this.imageBox1.TabStop = false;
+            //
+            // TextBox2
+            //
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
+            this.Controls.Add(this.imageBox1);
+            this.Controls.Add(this.textBox1);
+            this.Name = "TextBox2";
+            this.Padding = new System.Windows.Forms.Padding(4, 4, 3, 3);
+            this.Size = new System.Drawing.Size(128, 32);
+            ((System.ComponentModel.ISupportInitialize)(this.imageBox1)).EndInit();
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.TextBox textBox1;
+        private Forms.TImageBox imageBox1;
+    }
+}
diff --git a/RyzStudio/Windows/ThemedForms/TextBox/TButtonTextBox.resx b/RyzStudio/Windows/ThemedForms/TextBox/TButtonTextBox.resx
new file mode 100644
index 0000000..1af7de1
--- /dev/null
+++ b/RyzStudio/Windows/ThemedForms/TextBox/TButtonTextBox.resx
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file
diff --git a/RyzStudio/Windows/ThemedForms/TextBox/TFolderTextBox - Copy.resx b/RyzStudio/Windows/ThemedForms/TextBox/TFolderTextBox - Copy.resx
new file mode 100644
index 0000000..1af7de1
--- /dev/null
+++ b/RyzStudio/Windows/ThemedForms/TextBox/TFolderTextBox - Copy.resx	
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file
diff --git a/RyzStudio/Windows/ThemedForms/TextBox/TFolderTextBox.cs b/RyzStudio/Windows/ThemedForms/TextBox/TFolderTextBox.cs
new file mode 100644
index 0000000..341b480
--- /dev/null
+++ b/RyzStudio/Windows/ThemedForms/TextBox/TFolderTextBox.cs
@@ -0,0 +1,42 @@
+using System;
+using System.IO;
+using System.Windows.Forms;
+using UIResources = FizzyLauncher.UIResource;
+
+namespace RyzStudio.Windows.ThemedForms
+{
+    public class TFolderTextBox : TButtonTextBox
+    {
+        public TFolderTextBox() : base()
+        {
+            this.NormalImage = UIResources.folder;
+            this.HighlightImage = UIResources.folder2;
+            this.Text = string.Empty;
+        }
+
+        public FolderBrowserDialog FolderDialog { get; set; } = null;
+
+        protected override void imageBox1_Click(object sender, EventArgs e)
+        {
+            if (this.FolderDialog == null)
+            {
+                this.FolderDialog = new FolderBrowserDialog();
+                this.FolderDialog.Description = "Choose a directory";
+            }
+
+            if (!string.IsNullOrWhiteSpace(this.Text))
+            {
+                if (Directory.Exists(this.Text))
+                {
+                    this.FolderDialog.SelectedPath = this.Text;
+                }
+            }
+
+            if (this.FolderDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
+            {
+                this.Text = this.FolderDialog.SelectedPath;
+            }
+        }
+
+    }
+}
diff --git a/RyzStudio/Windows/ThemedForms/TextBox/TFolderTextBox.resx b/RyzStudio/Windows/ThemedForms/TextBox/TFolderTextBox.resx
new file mode 100644
index 0000000..1af7de1
--- /dev/null
+++ b/RyzStudio/Windows/ThemedForms/TextBox/TFolderTextBox.resx
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file
diff --git a/RyzStudio/Windows/ThemedForms/TextBox/TKeyCodeTextBox.cs b/RyzStudio/Windows/ThemedForms/TextBox/TKeyCodeTextBox.cs
new file mode 100644
index 0000000..08e9f2f
--- /dev/null
+++ b/RyzStudio/Windows/ThemedForms/TextBox/TKeyCodeTextBox.cs
@@ -0,0 +1,92 @@
+using System;
+using System.Text;
+using System.Windows.Forms;
+using UIResources = FizzyLauncher.UIResource;
+
+namespace RyzStudio.Windows.ThemedForms
+{
+    public class TKeyCodeTextBox : TButtonTextBox
+    {
+        public class Results
+        {
+            public bool IsCtrl { get; set; } = false;
+            public bool IsAlt { get; set; } = false;
+            public bool IsShift { get; set; } = false;
+            public Keys Key { get; set; } = Keys.None;
+
+            public int ModifierCode => ((this.IsAlt ? 1 : 0) + (this.IsCtrl ? 2 : 0) + (this.IsShift ? 4 : 0));
+
+            public int KeyCode => (int)this.Key;
+
+            public string DisplayText
+            {
+                get
+                {
+                    StringBuilder sb = new StringBuilder();
+
+                    if (this.IsCtrl) sb.Append("Ctrl+");
+                    if (this.IsShift) sb.Append("Shift+");
+                    if (this.IsAlt) sb.Append("Alt+");
+
+                    sb.Append(this.Key.ToString());
+
+                    return sb.ToString();
+                }
+            }
+
+            public void Clear()
+            {
+                this.IsCtrl = false;
+                this.IsAlt = false;
+                this.IsShift = false;
+                this.Key = Keys.None;
+            }
+        }
+
+
+        public Results KeyCodeResults { get; set; } = new Results();
+
+
+        public TKeyCodeTextBox() : base()
+        {
+            this.NormalImage = UIResources.trash;
+            this.HighlightImage = UIResources.trash2;
+            this.Text = string.Empty;
+
+            this.InnerTextBox.ReadOnly = true;
+            this.InnerTextBox.PreviewKeyDown += textBox1_PreviewKeyDown;
+        }
+
+        private void textBox1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
+        {
+            if (e.KeyCode == Keys.ControlKey) return;
+            if (e.KeyCode == Keys.ShiftKey) return;
+            if (e.KeyCode == Keys.Menu) return;
+
+            this.KeyCodeResults.IsCtrl = e.Control;
+            this.KeyCodeResults.IsAlt = e.Alt;
+            this.KeyCodeResults.IsShift = e.Shift;
+            this.KeyCodeResults.Key = e.KeyCode;
+
+            this.Text = this.KeyCodeResults.DisplayText;
+        }
+
+        protected override void imageBox1_Click(object sender, EventArgs e)
+        {
+            this.KeyCodeResults.Clear();
+
+            this.Text = this.KeyCodeResults.DisplayText;
+        }
+
+        public void UpdateKeyCode(bool isCtrl, bool isAlt, bool isShift, Keys key)
+        {
+            this.KeyCodeResults.IsCtrl = isCtrl;
+            this.KeyCodeResults.IsAlt = isAlt;
+            this.KeyCodeResults.IsShift = isShift;
+            this.KeyCodeResults.Key = key;
+
+            this.Text = this.KeyCodeResults.DisplayText;
+        }
+
+    }
+}
diff --git a/RyzStudio/Windows/ThemedForms/TextBox/TOpenFileTextBox.cs b/RyzStudio/Windows/ThemedForms/TextBox/TOpenFileTextBox.cs
new file mode 100644
index 0000000..0fb3daa
--- /dev/null
+++ b/RyzStudio/Windows/ThemedForms/TextBox/TOpenFileTextBox.cs
@@ -0,0 +1,43 @@
+using System;
+using System.IO;
+using System.Windows.Forms;
+using UIResources = FizzyLauncher.UIResource;
+
+namespace RyzStudio.Windows.ThemedForms
+{
+    public class TOpenFileTextBox : TButtonTextBox
+    {
+        public TOpenFileTextBox() : base()
+        {
+            this.NormalImage = UIResources.file;
+            this.HighlightImage = UIResources.file2;
+            this.Text = string.Empty;
+        }
+
+        public OpenFileDialog FileDialog { get; set; } = null;
+
+        protected override void imageBox1_Click(object sender, EventArgs e)
+        {
+            if (this.FileDialog == null)
+            {
+                this.FileDialog = new OpenFileDialog();
+                this.FileDialog.Title = "Choose a file";
+                this.FileDialog.Filter = "All files|*";
+            }
+
+            if (!string.IsNullOrWhiteSpace(this.Text))
+            {
+                if (File.Exists(this.Text))
+                {
+                    this.FileDialog.InitialDirectory = Path.GetDirectoryName(this.Text);
+                }
+            }
+
+            if (this.FileDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
+            {
+                this.Text = this.FileDialog.FileName;
+            }
+        }
+
+    }
+}
diff --git a/RyzStudio/Windows/ThemedForms/TextBox/TTextBox.cs b/RyzStudio/Windows/ThemedForms/TextBox/TTextBox.cs
new file mode 100644
index 0000000..be72ccd
--- /dev/null
+++ b/RyzStudio/Windows/ThemedForms/TextBox/TTextBox.cs
@@ -0,0 +1,100 @@
+using RyzStudio.Drawing;
+using System;
+using System.ComponentModel;
+using System.Drawing;
+using System.Windows.Forms;
+
+namespace RyzStudio.Windows.ThemedForms
+{
+    public partial class TTextBox : RyzStudio.Windows.ThemedForms.TUserControl
+	{
+        protected readonly Padding textboxPadding = new Padding(6, 6, 6, 6);
+
+
+		public TTextBox() : base()
+        {
+            InitializeComponent();
+
+            this.Margin = new Padding(10, 6, 10, 6);
+            this.Font = new Font(this.Font, FontStyle.Regular);
+
+            textBox1.Font = this.Font;
+            textBox1.PreviewKeyDown += textBox_PreviewKeyDown;
+        }
+
+        protected override void OnResize(EventArgs e)
+        {
+            base.OnResize(e);
+
+            int b = (styleActive.BorderWidth + 1) + styleActive.BorderPadding;
+
+            this.Height = textBox1.Height + (b + textboxPadding.Top) + ((b - 1) + textboxPadding.Bottom);
+
+            this.Invalidate();
+        }
+
+        protected override void OnGotFocus(EventArgs e)
+        {
+            base.OnGotFocus(e);
+
+            textBox1.Focus();
+        }
+
+        protected void textBox_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
+        {
+            switch (e.KeyCode)
+            {
+                case Keys.Enter:
+                    if (this.SubmitButton != null)
+                    {
+                        this.SubmitButton.PerformClick();
+                    }
+
+                    break;
+                case Keys.Escape:
+                    close();
+                    break;
+                default: break;
+            }
+        }
+
+        [Browsable(true), EditorBrowsable(EditorBrowsableState.Advanced)]
+		[Category("Appearance")]
+		public System.Windows.Forms.TextBox InnerTextBox { get => textBox1; set => textBox1 = value; }
+
+        [Browsable(true), EditorBrowsable(EditorBrowsableState.Advanced)]
+        [Category("Appearance")]
+        public new string Text
+        {
+            get => textBox1.Text;
+            set
+            {
+                textBox1.Text = value;
+                textBox1.SelectionStart = textBox1.Text.Length;
+            }
+        }
+
+        [Browsable(true), EditorBrowsable(EditorBrowsableState.Advanced)]
+        [Category("Appearance")]
+        public bool UseSystemPasswordChar { get => textBox1.UseSystemPasswordChar; set => textBox1.UseSystemPasswordChar = value; }
+
+        [Browsable(true), EditorBrowsable(EditorBrowsableState.Advanced)]
+        [Category("Appearance")]
+        public TButton SubmitButton { get; set; } = null;
+
+        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+        public new Padding Margin { get { return base.Margin; } set { base.Margin = value; } }
+
+        protected override void updateBackground(Graphics g, ThemeStyle style)
+        {
+            int b = (styleActive.BorderWidth + 1) + styleActive.BorderPadding;
+
+            this.Padding = new Padding((b + textboxPadding.Left), (b + textboxPadding.Top), ((b - 1) + textboxPadding.Right), ((b - 1) + textboxPadding.Bottom));
+
+            Rectangoid area = new Rectangoid(this.ClientRectangle, style.BorderRadius, style.BorderWidth);
+            g.FillPath(new SolidBrush(style.BackColour), area.ToGraphicsPath());
+            g.DrawPath(new Pen(new SolidBrush(style.BorderColour), style.BorderWidth), area.ToGraphicsPath());
+        }
+
+    }
+}
\ No newline at end of file
diff --git a/RyzStudio/Windows/ThemedForms/TextBox/TTextBox.designer.cs b/RyzStudio/Windows/ThemedForms/TextBox/TTextBox.designer.cs
new file mode 100644
index 0000000..752557d
--- /dev/null
+++ b/RyzStudio/Windows/ThemedForms/TextBox/TTextBox.designer.cs
@@ -0,0 +1,60 @@
+namespace RyzStudio.Windows.ThemedForms
+{
+    partial class TTextBox
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Component Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.textBox1 = new System.Windows.Forms.TextBox();
+            this.SuspendLayout();
+            // 
+            // textBox1
+            // 
+            this.textBox1.BorderStyle = System.Windows.Forms.BorderStyle.None;
+            this.textBox1.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.textBox1.HideSelection = false;
+            this.textBox1.Location = new System.Drawing.Point(4, 4);
+            this.textBox1.Name = "textBox1";
+            this.textBox1.Size = new System.Drawing.Size(121, 13);
+            this.textBox1.TabIndex = 0;
+            // 
+            // TextBox
+            // 
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
+            this.Controls.Add(this.textBox1);
+            this.Name = "TextBox";
+            this.Padding = new System.Windows.Forms.Padding(4, 4, 3, 3);
+            this.Size = new System.Drawing.Size(128, 32);
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.TextBox textBox1;
+    }
+}
diff --git a/RyzStudio/Windows/ThemedForms/TextBox/TTextBox.resx b/RyzStudio/Windows/ThemedForms/TextBox/TTextBox.resx
new file mode 100644
index 0000000..1af7de1
--- /dev/null
+++ b/RyzStudio/Windows/ThemedForms/TextBox/TTextBox.resx
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file
diff --git a/Text/Json/JsonPointConverter.cs b/Text/Json/JsonPointConverter.cs
new file mode 100644
index 0000000..e787cdc
--- /dev/null
+++ b/Text/Json/JsonPointConverter.cs
@@ -0,0 +1,40 @@
+using System;
+using System.Drawing;
+using System.Text.Json;
+using System.Text.Json.Serialization;
+
+namespace FizzyLauncher.Text.Json
+{
+    public class JsonPointConverter : JsonConverter<Point>
+    {
+        public override Point Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            Point rs = new Point(0, 0);
+
+            if (reader.TokenType == JsonTokenType.String)
+            {
+                string[] parts = reader.GetString().Split(',');
+                if (parts.Length != 2)
+                {
+                    return rs;
+                }
+
+                int x = 0;
+                int y = 0;
+
+                if (!int.TryParse(parts[0].Trim(), out x)) x = 0;
+                if (!int.TryParse(parts[1].Trim(), out y)) y = 0;
+
+                return new Point(x, y);
+            }
+
+            return rs;
+        }
+
+        public override void Write(Utf8JsonWriter writer, Point value, JsonSerializerOptions options)
+        {
+            writer.WriteStringValue(string.Format("{0}, {1}", value.X.ToString(), value.Y.ToString()));
+        }
+
+    }
+}
diff --git a/Text/Json/JsonSizeConverter.cs b/Text/Json/JsonSizeConverter.cs
new file mode 100644
index 0000000..eb763fa
--- /dev/null
+++ b/Text/Json/JsonSizeConverter.cs
@@ -0,0 +1,40 @@
+using System;
+using System.Drawing;
+using System.Text.Json;
+using System.Text.Json.Serialization;
+
+namespace FizzyLauncher.Text.Json
+{
+    public class JsonSizeConverter : JsonConverter<Size>
+    {
+        public override Size Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            Size rs = new Size(0, 0);
+
+            if (reader.TokenType == JsonTokenType.String)
+            {
+                string[] parts = reader.GetString().Split(',');
+                if (parts.Length != 2)
+                {
+                    return rs;
+                }
+
+                int w = 0;
+                int h = 0;
+
+                if (!int.TryParse(parts[0].Trim(), out w)) w = 0;
+                if (!int.TryParse(parts[1].Trim(), out h)) h = 0;
+
+                return new Size(w, h);
+            }
+
+            return rs;
+        }
+
+        public override void Write(Utf8JsonWriter writer, Size value, JsonSerializerOptions options)
+        {
+            writer.WriteStringValue(string.Format("{0}, {1}", value.Width.ToString(), value.Height.ToString()));
+        }
+
+    }
+}
diff --git a/UIResource.Designer.cs b/UIResource.Designer.cs
new file mode 100644
index 0000000..0f0a495
--- /dev/null
+++ b/UIResource.Designer.cs
@@ -0,0 +1,243 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.42000
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace FizzyLauncher {
+    using System;
+    
+    
+    /// <summary>
+    ///   A strongly-typed resource class, for looking up localized strings, etc.
+    /// </summary>
+    // This class was auto-generated by the StronglyTypedResourceBuilder
+    // class via a tool like ResGen or Visual Studio.
+    // To add or remove a member, edit your .ResX file then rerun ResGen
+    // with the /str option, or rebuild your VS project.
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    internal class UIResource {
+        
+        private static global::System.Resources.ResourceManager resourceMan;
+        
+        private static global::System.Globalization.CultureInfo resourceCulture;
+        
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+        internal UIResource() {
+        }
+        
+        /// <summary>
+        ///   Returns the cached ResourceManager instance used by this class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager {
+            get {
+                if (object.ReferenceEquals(resourceMan, null)) {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("FizzyLauncher.UIResource", typeof(UIResource).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+        
+        /// <summary>
+        ///   Overrides the current thread's CurrentUICulture property for all
+        ///   resource lookups using this strongly typed resource class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture {
+            get {
+                return resourceCulture;
+            }
+            set {
+                resourceCulture = value;
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized resource of type System.Drawing.Bitmap.
+        /// </summary>
+        internal static System.Drawing.Bitmap arrow_down {
+            get {
+                object obj = ResourceManager.GetObject("arrow_down", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized resource of type System.Drawing.Bitmap.
+        /// </summary>
+        internal static System.Drawing.Bitmap arrow_down2 {
+            get {
+                object obj = ResourceManager.GetObject("arrow_down2", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized resource of type System.Drawing.Bitmap.
+        /// </summary>
+        internal static System.Drawing.Bitmap arrow_up {
+            get {
+                object obj = ResourceManager.GetObject("arrow_up", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized resource of type System.Drawing.Bitmap.
+        /// </summary>
+        internal static System.Drawing.Bitmap arrow_up2 {
+            get {
+                object obj = ResourceManager.GetObject("arrow_up2", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized resource of type System.Drawing.Bitmap.
+        /// </summary>
+        internal static System.Drawing.Bitmap close {
+            get {
+                object obj = ResourceManager.GetObject("close", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized resource of type System.Drawing.Bitmap.
+        /// </summary>
+        internal static System.Drawing.Bitmap close2 {
+            get {
+                object obj = ResourceManager.GetObject("close2", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized resource of type System.Drawing.Bitmap.
+        /// </summary>
+        internal static System.Drawing.Bitmap edit {
+            get {
+                object obj = ResourceManager.GetObject("edit", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized resource of type System.Drawing.Bitmap.
+        /// </summary>
+        internal static System.Drawing.Bitmap edit2 {
+            get {
+                object obj = ResourceManager.GetObject("edit2", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized resource of type System.Drawing.Bitmap.
+        /// </summary>
+        internal static System.Drawing.Bitmap file {
+            get {
+                object obj = ResourceManager.GetObject("file", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized resource of type System.Drawing.Bitmap.
+        /// </summary>
+        internal static System.Drawing.Bitmap file2 {
+            get {
+                object obj = ResourceManager.GetObject("file2", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized resource of type System.Drawing.Bitmap.
+        /// </summary>
+        internal static System.Drawing.Bitmap folder {
+            get {
+                object obj = ResourceManager.GetObject("folder", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized resource of type System.Drawing.Bitmap.
+        /// </summary>
+        internal static System.Drawing.Bitmap folder2 {
+            get {
+                object obj = ResourceManager.GetObject("folder2", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized resource of type System.Drawing.Bitmap.
+        /// </summary>
+        internal static System.Drawing.Bitmap minus {
+            get {
+                object obj = ResourceManager.GetObject("minus", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized resource of type System.Drawing.Bitmap.
+        /// </summary>
+        internal static System.Drawing.Bitmap minus2 {
+            get {
+                object obj = ResourceManager.GetObject("minus2", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized resource of type System.Drawing.Bitmap.
+        /// </summary>
+        internal static System.Drawing.Bitmap plus {
+            get {
+                object obj = ResourceManager.GetObject("plus", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized resource of type System.Drawing.Bitmap.
+        /// </summary>
+        internal static System.Drawing.Bitmap plus2 {
+            get {
+                object obj = ResourceManager.GetObject("plus2", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized resource of type System.Drawing.Bitmap.
+        /// </summary>
+        internal static System.Drawing.Bitmap trash {
+            get {
+                object obj = ResourceManager.GetObject("trash", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized resource of type System.Drawing.Bitmap.
+        /// </summary>
+        internal static System.Drawing.Bitmap trash2 {
+            get {
+                object obj = ResourceManager.GetObject("trash2", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+    }
+}
diff --git a/UIResource.resx b/UIResource.resx
new file mode 100644
index 0000000..96b7c2a
--- /dev/null
+++ b/UIResource.resx
@@ -0,0 +1,175 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="arrow_down" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>Resources\UI\arrow_down.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="arrow_down2" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>Resources\UI\arrow_down2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="arrow_up" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>Resources\UI\arrow_up.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="arrow_up2" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>Resources\UI\arrow_up2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="close" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>Resources\UI\close.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="close2" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>Resources\UI\close2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="edit" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>Resources\UI\edit.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="edit2" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>Resources\UI\edit2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="file" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>Resources\UI\file.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="file2" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>Resources\UI\file2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="folder" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>Resources\UI\folder.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="folder2" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>Resources\UI\folder2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="minus" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>Resources\UI\minus.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="minus2" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>Resources\UI\minus2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="plus" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>Resources\UI\plus.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="plus2" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>Resources\UI\plus2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="trash" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>Resources\UI\trash.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="trash2" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>Resources\UI\trash2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/Windows/Forms/EditGroupForm.cs b/Windows/Forms/EditGroupForm.cs
new file mode 100644
index 0000000..c3108d9
--- /dev/null
+++ b/Windows/Forms/EditGroupForm.cs
@@ -0,0 +1,177 @@
+using FizzyLauncher.Models;
+using RyzStudio.Windows.ThemedForms;
+using System;
+
+namespace FizzyLauncher.Windows.Forms
+{
+    public class EditGroupForm : TDialogForm
+    {
+        public static void ShowDialog(TilePanelLayout control)
+        {
+            EditGroupForm form = new EditGroupForm();
+            form.TilePanelLayout = control;
+            form.ShowDialog();
+        }
+
+
+        private System.Windows.Forms.Label label2;
+        private System.Windows.Forms.Label label1;
+        private TButton button1;
+        private TPickerBox pickerBox1;
+        private RyzStudio.Windows.Forms.THorizontalSeparator horizontalSeparator2;
+        private TTextBox textBox1;
+
+
+        public EditGroupForm() : base()
+        {
+            InitializeComponent();
+
+            pickerBox1.ComboBox.Items.Clear();
+            pickerBox1.ComboBox.Items.AddRange(new string[] { "No", "Yes" });
+            if (pickerBox1.ComboBox.Items.Count > 0) pickerBox1.ComboBox.SelectedIndex = 0;
+        }
+
+        private void InitializeComponent()
+        {
+            this.textBox1 = new RyzStudio.Windows.ThemedForms.TTextBox();
+            this.label2 = new System.Windows.Forms.Label();
+            this.label1 = new System.Windows.Forms.Label();
+            this.button1 = new RyzStudio.Windows.ThemedForms.TButton();
+            this.pickerBox1 = new RyzStudio.Windows.ThemedForms.TPickerBox();
+            this.horizontalSeparator2 = new RyzStudio.Windows.Forms.THorizontalSeparator();
+            this.SuspendLayout();
+            //
+            // textBox1
+            //
+            this.textBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.textBox1.BackColor = System.Drawing.Color.Transparent;
+            this.textBox1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
+            this.textBox1.Location = new System.Drawing.Point(192, 20);
+            this.textBox1.Margin = new System.Windows.Forms.Padding(10, 6, 10, 6);
+            this.textBox1.Name = "textBox1";
+            this.textBox1.Padding = new System.Windows.Forms.Padding(10, 10, 9, 9);
+            this.textBox1.Size = new System.Drawing.Size(177, 35);
+            this.textBox1.SubmitButton = null;
+            this.textBox1.TabIndex = 152;
+            this.textBox1.UseSystemPasswordChar = false;
+            //
+            // label2
+            //
+            this.label2.AutoSize = true;
+            this.label2.BackColor = System.Drawing.Color.Transparent;
+            this.label2.ForeColor = System.Drawing.SystemColors.ControlText;
+            this.label2.Location = new System.Drawing.Point(10, 62);
+            this.label2.Name = "label2";
+            this.label2.Padding = new System.Windows.Forms.Padding(0, 9, 0, 10);
+            this.label2.Size = new System.Drawing.Size(119, 34);
+            this.label2.TabIndex = 155;
+            this.label2.Text = "Show Only Expanded";
+            this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+            //
+            // label1
+            //
+            this.label1.AutoSize = true;
+            this.label1.BackColor = System.Drawing.Color.Transparent;
+            this.label1.ForeColor = System.Drawing.SystemColors.ControlText;
+            this.label1.Location = new System.Drawing.Point(10, 21);
+            this.label1.Margin = new System.Windows.Forms.Padding(0);
+            this.label1.Name = "label1";
+            this.label1.Padding = new System.Windows.Forms.Padding(0, 9, 0, 10);
+            this.label1.Size = new System.Drawing.Size(29, 34);
+            this.label1.TabIndex = 153;
+            this.label1.Text = "Title";
+            this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+            //
+            // button1
+            //
+            this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+            this.button1.BackColor = System.Drawing.Color.Transparent;
+            this.button1.DefaultImage = null;
+            this.button1.DownImage = null;
+            this.button1.IsSelected = false;
+            this.button1.LabelText = "&OK";
+            this.button1.Location = new System.Drawing.Point(241, 469);
+            this.button1.Margin = new System.Windows.Forms.Padding(10);
+            this.button1.Name = "button1";
+            this.button1.OverImage = null;
+            this.button1.Padding = new System.Windows.Forms.Padding(4, 4, 3, 3);
+            this.button1.Size = new System.Drawing.Size(128, 32);
+            this.button1.TabIndex = 173;
+            this.button1.Click += new System.EventHandler(this.button1_Click);
+            //
+            // pickerBox1
+            //
+            this.pickerBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+            this.pickerBox1.BackColor = System.Drawing.Color.Transparent;
+            this.pickerBox1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
+            this.pickerBox1.Location = new System.Drawing.Point(285, 62);
+            this.pickerBox1.Margin = new System.Windows.Forms.Padding(10, 6, 10, 6);
+            this.pickerBox1.Name = "pickerBox1";
+            this.pickerBox1.Padding = new System.Windows.Forms.Padding(10, 6, 7, 5);
+            this.pickerBox1.Size = new System.Drawing.Size(84, 34);
+            this.pickerBox1.SubmitButton = null;
+            this.pickerBox1.TabIndex = 174;
+            //
+            // horizontalSeparator2
+            //
+            this.horizontalSeparator2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.horizontalSeparator2.AutoScrollMargin = new System.Drawing.Size(0, 0);
+            this.horizontalSeparator2.AutoScrollMinSize = new System.Drawing.Size(0, 0);
+            this.horizontalSeparator2.BackColor = System.Drawing.Color.Transparent;
+            this.horizontalSeparator2.Location = new System.Drawing.Point(10, 437);
+            this.horizontalSeparator2.Margin = new System.Windows.Forms.Padding(10, 0, 10, 0);
+            this.horizontalSeparator2.MaximumSize = new System.Drawing.Size(4920, 2);
+            this.horizontalSeparator2.MinimumSize = new System.Drawing.Size(0, 22);
+            this.horizontalSeparator2.Name = "horizontalSeparator2";
+            this.horizontalSeparator2.Padding = new System.Windows.Forms.Padding(0, 10, 0, 10);
+            this.horizontalSeparator2.Size = new System.Drawing.Size(364, 22);
+            this.horizontalSeparator2.TabIndex = 182;
+            //
+            // EditGroupForm
+            //
+            this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
+            this.ClientSize = new System.Drawing.Size(384, 521);
+            this.Controls.Add(this.horizontalSeparator2);
+            this.Controls.Add(this.pickerBox1);
+            this.Controls.Add(this.button1);
+            this.Controls.Add(this.label2);
+            this.Controls.Add(this.label1);
+            this.Controls.Add(this.textBox1);
+            this.MinimumSize = new System.Drawing.Size(400, 560);
+            this.Name = "EditGroupForm";
+            this.Text = "Edit Group";
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        protected override void OnShown(EventArgs e)
+        {
+            base.OnShown(e);
+
+            if (this.TilePanelLayout != null)
+            {
+                textBox1.Text = this.TilePanelLayout.Model.Title;
+                pickerBox1.ComboBox.SelectedIndex = (this.TilePanelLayout.Model.IsExclusive ? 1 : 0);
+            }
+        }
+
+
+        public TilePanelLayout TilePanelLayout { get; set; } = null;
+
+
+        private void button1_Click(object sender, EventArgs e)
+        {
+            TileGroupModel model = this.TilePanelLayout.Model;
+            model.Title = textBox1.Text?.Trim();
+            model.IsExclusive = (pickerBox1.ComboBox.SelectedIndex == 1);
+
+            this.TilePanelLayout.UpdateModel(model);
+
+            this.Close();
+        }
+
+    }
+}
diff --git a/Windows/Forms/EditGroupForm.resx b/Windows/Forms/EditGroupForm.resx
new file mode 100644
index 0000000..f298a7b
--- /dev/null
+++ b/Windows/Forms/EditGroupForm.resx
@@ -0,0 +1,60 @@
+<root>
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file
diff --git a/Windows/Forms/EditTileFolderForm.cs b/Windows/Forms/EditTileFolderForm.cs
new file mode 100644
index 0000000..a16b75e
--- /dev/null
+++ b/Windows/Forms/EditTileFolderForm.cs
@@ -0,0 +1,384 @@
+using FizzyLauncher.Models;
+using RyzStudio.Windows.ThemedForms;
+using System;
+using System.Diagnostics;
+using System.Drawing;
+using System.IO;
+using System.Linq;
+using System.Windows.Forms;
+
+namespace FizzyLauncher.Windows.Forms
+{
+    public class EditTileFolderForm : TDialogForm
+    {
+        public static void ShowAddDialog(TilePanelLayout control, Point coord)
+        {
+            EditTileFolderForm form = new EditTileFolderForm(DialogModeType.Add);
+            form.TilePanelLayout = control;
+            form.AimCoord = coord;
+            form.ShowDialog();
+        }
+
+        public static void ShowEditDialog(TilePanel control)
+        {
+            EditTileFolderForm form = new EditTileFolderForm(DialogModeType.Edit);
+            form.TilePanel = control;
+            form.ShowDialog();
+        }
+
+
+        private System.Windows.Forms.Label label1;
+        private TButton button1;
+        private RyzStudio.Windows.Forms.THorizontalSeparator horizontalSeparator2;
+        private TTextBox textBox1;
+        private TListBox listBox1;
+        private RyzStudio.Windows.Forms.THorizontalSeparator tHorizontalSeparator1;
+        private System.Windows.Forms.Label label2;
+
+
+        public enum DialogModeType
+        {
+            Add = 0,
+            Edit
+        }
+
+
+        protected DialogModeType dialogMode = DialogModeType.Add;
+
+
+        public EditTileFolderForm(DialogModeType dialogMode) : base()
+        {
+            InitializeComponent();
+
+            this.DialogMode = dialogMode;
+        }
+
+        private void InitializeComponent()
+        {
+            this.textBox1 = new RyzStudio.Windows.ThemedForms.TTextBox();
+            this.label1 = new System.Windows.Forms.Label();
+            this.button1 = new RyzStudio.Windows.ThemedForms.TButton();
+            this.horizontalSeparator2 = new RyzStudio.Windows.Forms.THorizontalSeparator();
+            this.listBox1 = new RyzStudio.Windows.ThemedForms.TListBox();
+            this.label2 = new System.Windows.Forms.Label();
+            this.tHorizontalSeparator1 = new RyzStudio.Windows.Forms.THorizontalSeparator();
+            this.SuspendLayout();
+            // 
+            // textBox1
+            // 
+            this.textBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.textBox1.BackColor = System.Drawing.Color.Transparent;
+            this.textBox1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
+            this.textBox1.Location = new System.Drawing.Point(192, 20);
+            this.textBox1.Margin = new System.Windows.Forms.Padding(10, 6, 10, 6);
+            this.textBox1.Name = "textBox1";
+            this.textBox1.Padding = new System.Windows.Forms.Padding(10, 10, 9, 9);
+            this.textBox1.Size = new System.Drawing.Size(177, 35);
+            this.textBox1.SubmitButton = null;
+            this.textBox1.TabIndex = 152;
+            this.textBox1.UseSystemPasswordChar = false;
+            // 
+            // label1
+            // 
+            this.label1.AutoSize = true;
+            this.label1.BackColor = System.Drawing.Color.Transparent;
+            this.label1.ForeColor = System.Drawing.SystemColors.ControlText;
+            this.label1.Location = new System.Drawing.Point(10, 21);
+            this.label1.Margin = new System.Windows.Forms.Padding(0);
+            this.label1.Name = "label1";
+            this.label1.Padding = new System.Windows.Forms.Padding(0, 9, 0, 10);
+            this.label1.Size = new System.Drawing.Size(29, 34);
+            this.label1.TabIndex = 153;
+            this.label1.Text = "Title";
+            this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+            // 
+            // button1
+            // 
+            this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+            this.button1.BackColor = System.Drawing.Color.Transparent;
+            this.button1.DefaultImage = null;
+            this.button1.DownImage = null;
+            this.button1.IsSelected = false;
+            this.button1.LabelText = "&OK";
+            this.button1.Location = new System.Drawing.Point(241, 469);
+            this.button1.Margin = new System.Windows.Forms.Padding(10);
+            this.button1.Name = "button1";
+            this.button1.OverImage = null;
+            this.button1.Padding = new System.Windows.Forms.Padding(4, 4, 3, 3);
+            this.button1.Size = new System.Drawing.Size(128, 32);
+            this.button1.TabIndex = 173;
+            this.button1.Click += new System.EventHandler(this.button1_Click);
+            // 
+            // horizontalSeparator2
+            // 
+            this.horizontalSeparator2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.horizontalSeparator2.AutoScrollMargin = new System.Drawing.Size(0, 0);
+            this.horizontalSeparator2.AutoScrollMinSize = new System.Drawing.Size(0, 0);
+            this.horizontalSeparator2.BackColor = System.Drawing.Color.Transparent;
+            this.horizontalSeparator2.Location = new System.Drawing.Point(10, 61);
+            this.horizontalSeparator2.Margin = new System.Windows.Forms.Padding(10, 0, 10, 0);
+            this.horizontalSeparator2.MaximumSize = new System.Drawing.Size(4920, 2);
+            this.horizontalSeparator2.MinimumSize = new System.Drawing.Size(0, 22);
+            this.horizontalSeparator2.Name = "horizontalSeparator2";
+            this.horizontalSeparator2.Padding = new System.Windows.Forms.Padding(0, 10, 0, 10);
+            this.horizontalSeparator2.Size = new System.Drawing.Size(364, 22);
+            this.horizontalSeparator2.TabIndex = 177;
+            // 
+            // listBox1
+            // 
+            this.listBox1.AllowDrop = true;
+            this.listBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
+            | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.listBox1.BackColor = System.Drawing.Color.Transparent;
+            this.listBox1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
+            this.listBox1.Location = new System.Drawing.Point(109, 87);
+            this.listBox1.Margin = new System.Windows.Forms.Padding(10, 4, 10, 4);
+            this.listBox1.Name = "listBox1";
+            this.listBox1.Padding = new System.Windows.Forms.Padding(10, 6, 7, 5);
+            this.listBox1.Size = new System.Drawing.Size(260, 346);
+            this.listBox1.SubmitButton = null;
+            this.listBox1.TabIndex = 180;
+            this.listBox1.OnAdd += new System.EventHandler(this.listBox1_OnAdd);
+            this.listBox1.OnEdit += new System.EventHandler(this.listBox1_OnEdit);
+            this.listBox1.DragDrop += new System.Windows.Forms.DragEventHandler(this.listBox1_DragDrop);
+            this.listBox1.DragOver += new System.Windows.Forms.DragEventHandler(this.listBox1_DragOver);
+            // 
+            // label2
+            // 
+            this.label2.AutoSize = true;
+            this.label2.BackColor = System.Drawing.Color.Transparent;
+            this.label2.ForeColor = System.Drawing.SystemColors.ControlText;
+            this.label2.Location = new System.Drawing.Point(8, 87);
+            this.label2.Name = "label2";
+            this.label2.Padding = new System.Windows.Forms.Padding(0, 9, 0, 10);
+            this.label2.Size = new System.Drawing.Size(25, 34);
+            this.label2.TabIndex = 181;
+            this.label2.Text = "List";
+            this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+            // 
+            // tHorizontalSeparator1
+            // 
+            this.tHorizontalSeparator1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.tHorizontalSeparator1.AutoScrollMargin = new System.Drawing.Size(0, 0);
+            this.tHorizontalSeparator1.AutoScrollMinSize = new System.Drawing.Size(0, 0);
+            this.tHorizontalSeparator1.BackColor = System.Drawing.Color.Transparent;
+            this.tHorizontalSeparator1.Location = new System.Drawing.Point(10, 437);
+            this.tHorizontalSeparator1.Margin = new System.Windows.Forms.Padding(10, 0, 10, 0);
+            this.tHorizontalSeparator1.MaximumSize = new System.Drawing.Size(4920, 2);
+            this.tHorizontalSeparator1.MinimumSize = new System.Drawing.Size(0, 22);
+            this.tHorizontalSeparator1.Name = "tHorizontalSeparator1";
+            this.tHorizontalSeparator1.Padding = new System.Windows.Forms.Padding(0, 10, 0, 10);
+            this.tHorizontalSeparator1.Size = new System.Drawing.Size(364, 22);
+            this.tHorizontalSeparator1.TabIndex = 182;
+            // 
+            // AddTileFolderForm
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
+            this.ClientSize = new System.Drawing.Size(384, 521);
+            this.Controls.Add(this.tHorizontalSeparator1);
+            this.Controls.Add(this.label2);
+            this.Controls.Add(this.listBox1);
+            this.Controls.Add(this.horizontalSeparator2);
+            this.Controls.Add(this.button1);
+            this.Controls.Add(this.label1);
+            this.Controls.Add(this.textBox1);
+            this.MinimumSize = new System.Drawing.Size(400, 560);
+            this.Name = "AddTileFolderForm";
+            this.Text = "Add List Tile";
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        protected override void OnShown(EventArgs e)
+        {
+            base.OnShown(e);
+
+            if (this.DialogMode == DialogModeType.Edit)
+            {
+                listBox1.ListBox.Items.Clear();
+
+                if (this.TilePanel == null) return;
+                if (this.TilePanel.ModelInfo == null) return;
+
+                textBox1.Text = this.TilePanel.ModelInfo.Title;
+
+                if (this.TilePanel.ModelInfo.Items != null)
+                {
+                    foreach (TileModel item in this.TilePanel.ModelInfo.Items)
+                    {
+                        if (item.IsGroup)
+                        {
+                            continue;
+                        }
+
+                        listBox1.ListBox.Items.Add(item);
+                    }
+                }
+            }
+        }
+
+
+        public TilePanelLayout TilePanelLayout { get; set; } = null;
+
+        public TilePanel TilePanel { get; set; } = null;
+
+        public Point AimCoord { get; set; } = new Point(-1, -1);
+
+        public DialogModeType DialogMode
+        {
+            get => dialogMode;
+            set
+            {
+                dialogMode = value;
+
+                switch (dialogMode)
+                {
+                    case DialogModeType.Add:
+                        this.Text = "Add Tile List";
+                        break;
+                    case DialogModeType.Edit:
+                        this.Text = "Edit Tile List";
+                        break;
+                    default: break;
+                }
+            }
+        }
+
+
+        private void button1_Click(object sender, EventArgs e)
+        {
+            TileModel model = new TileModel()
+            {
+                Title = textBox1.Text?.Trim(),
+                IsGroup = true
+            };
+
+            switch (this.DialogMode)
+            {
+                case DialogModeType.Add:
+                    if (!this.AimCoord.Equals(new Point(-1, -1)))
+                    {
+                        model.Position = this.AimCoord;
+                    }
+
+                    model.Items = new System.Collections.Generic.List<TileModel>();
+
+                    foreach (TileModel item in listBox1.ListBox.Items.OfType<TileModel>())
+                    {
+                        if (item.IsGroup)
+                        {
+                            continue;
+                        }
+
+                        model.Items.Add(item);
+                    }
+
+                    this.TilePanelLayout.AddTile(model);
+
+                    break;
+                case DialogModeType.Edit:
+                    model.Items = new System.Collections.Generic.List<TileModel>();
+
+                    foreach (TileModel item in listBox1.ListBox.Items.OfType<TileModel>())
+                    {
+                        if (item.IsGroup)
+                        {
+                            continue;
+                        }
+
+                        model.Items.Add(item);
+                    }
+
+                    this.TilePanel.LoadInfo(model);
+
+                    break;
+                default: break;
+            }
+
+            this.Close();
+        }
+
+        private void listBox1_OnAdd(object sender, EventArgs e) => EditTileForm.ShowAddDialog(listBox1);
+
+        private void listBox1_OnEdit(object sender, EventArgs e)
+        {
+            if (listBox1.ListBox.Items.Count <= 0)
+            {
+                return;
+            }
+
+            EditTileForm.ShowEditDialog(listBox1);
+        }
+
+        private void listBox1_DragOver(object sender, System.Windows.Forms.DragEventArgs e)
+        {
+            if (e.Data.GetDataPresent(DataFormats.FileDrop))
+            {
+                e.Effect = DragDropEffects.Link;
+            }
+            else
+            {
+                e.Effect = DragDropEffects.None;
+            }
+        }
+
+        private void listBox1_DragDrop(object sender, DragEventArgs e)
+        {
+            string[] fileList = e.Data.GetData(DataFormats.FileDrop) as string[];
+            if (fileList == null)
+            {
+                return;
+            }
+
+            if (fileList.Length <= 0)
+            {
+                return;
+            }
+
+            if (string.IsNullOrWhiteSpace(fileList[0]))
+            {
+                return;
+            }
+
+            TileModel model = new TileModel()
+            {
+                ProcessFilename = fileList[0],
+                Title = Path.GetFileName(fileList[0])
+            };
+
+            // exe
+            if (Path.GetExtension(fileList[0]).Equals(".exe", StringComparison.CurrentCultureIgnoreCase))
+            {
+                if (File.Exists(fileList[0]))
+                {
+                    try
+                    {
+                        FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(fileList[0]);
+                        if (fvi != null)
+                        {
+                            model.Title = fvi.ProductName;
+                        }
+                    }
+                    catch
+                    {
+                        // do nothing
+                    }
+                }
+
+
+                if (string.IsNullOrWhiteSpace(model.Title))
+                {
+                    model.Title = Path.GetFileNameWithoutExtension(fileList[0]);
+                }
+            }
+
+            listBox1.ListBox.Items.Add(model);
+        }
+
+    }
+}
\ No newline at end of file
diff --git a/Windows/Forms/EditTileFolderForm.resx b/Windows/Forms/EditTileFolderForm.resx
new file mode 100644
index 0000000..f298a7b
--- /dev/null
+++ b/Windows/Forms/EditTileFolderForm.resx
@@ -0,0 +1,60 @@
+<root>
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file
diff --git a/Windows/Forms/EditTileForm.cs b/Windows/Forms/EditTileForm.cs
new file mode 100644
index 0000000..4c962c7
--- /dev/null
+++ b/Windows/Forms/EditTileForm.cs
@@ -0,0 +1,483 @@
+using FizzyLauncher.Models;
+using RyzStudio.Windows.ThemedForms;
+using System;
+using System.Drawing;
+
+namespace FizzyLauncher.Windows.Forms
+{
+    public class EditTileForm : TDialogForm
+    {
+        public static void ShowAddDialog(TilePanelLayout control, Point coord)
+        {
+            EditTileForm form = new EditTileForm(DialogModeType.Add);
+            form.TilePanelLayout = control;
+            form.AimCoord = coord;
+            form.ShowDialog();
+        }
+
+        public static void ShowAddDialog(TListBox control)
+        {
+            EditTileForm form = new EditTileForm(DialogModeType.Add);
+            form.ListBox = control;
+            form.ShowDialog();
+        }
+
+        public static void ShowEditDialog(TilePanel control)
+        {
+            EditTileForm form = new EditTileForm(DialogModeType.Edit);
+            form.TilePanel = control;
+            form.ShowDialog();
+        }
+
+        public static void ShowEditDialog(TListBox control)
+        {
+            EditTileForm form = new EditTileForm(DialogModeType.Edit);
+            form.ListBox = control;
+            form.ShowDialog();
+        }
+
+
+        private System.Windows.Forms.Label label6;
+        private System.Windows.Forms.Label label7;
+        private System.Windows.Forms.Label label4;
+        private System.Windows.Forms.Label label3;
+        private System.Windows.Forms.Label label2;
+        private System.Windows.Forms.Label label1;
+        private TOpenFileTextBox textBox2;
+        private TTextBox textBox3;
+        private TFolderTextBox textBox4;
+        private TButton button1;
+        private TPickerBox pickerBox1;
+        private TPickerBox pickerBox2;
+        private RyzStudio.Windows.Forms.THorizontalSeparator horizontalSeparator1;
+        private RyzStudio.Windows.Forms.THorizontalSeparator horizontalSeparator2;
+        private TTextBox textBox1;
+
+
+        public enum DialogModeType
+        {
+            Add = 0,
+            Edit
+        }
+
+
+        protected DialogModeType dialogMode = DialogModeType.Add;
+
+
+        public EditTileForm(DialogModeType dialogMode) : base()
+        {
+            InitializeComponent();
+
+            this.DialogMode = dialogMode;
+
+            pickerBox1.ComboBox.Items.Clear();
+            pickerBox1.ComboBox.Items.AddRange(new string[] { "Normal", "Hidden", "Minimized", "Maximized" });
+            if (pickerBox1.ComboBox.Items.Count > 0) pickerBox1.ComboBox.SelectedIndex = 0;
+
+            pickerBox2.ComboBox.Items.Clear();
+            pickerBox2.ComboBox.Items.AddRange(new string[] { "No", "Yes" });
+            if (pickerBox2.ComboBox.Items.Count > 0) pickerBox2.ComboBox.SelectedIndex = 0;
+        }
+
+        private void InitializeComponent()
+        {
+            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(EditTileForm));
+            this.textBox1 = new RyzStudio.Windows.ThemedForms.TTextBox();
+            this.label6 = new System.Windows.Forms.Label();
+            this.label7 = new System.Windows.Forms.Label();
+            this.label4 = new System.Windows.Forms.Label();
+            this.label3 = new System.Windows.Forms.Label();
+            this.label2 = new System.Windows.Forms.Label();
+            this.label1 = new System.Windows.Forms.Label();
+            this.textBox2 = new RyzStudio.Windows.ThemedForms.TOpenFileTextBox();
+            this.textBox3 = new RyzStudio.Windows.ThemedForms.TTextBox();
+            this.textBox4 = new RyzStudio.Windows.ThemedForms.TFolderTextBox();
+            this.button1 = new RyzStudio.Windows.ThemedForms.TButton();
+            this.pickerBox1 = new RyzStudio.Windows.ThemedForms.TPickerBox();
+            this.pickerBox2 = new RyzStudio.Windows.ThemedForms.TPickerBox();
+            this.horizontalSeparator1 = new RyzStudio.Windows.Forms.THorizontalSeparator();
+            this.horizontalSeparator2 = new RyzStudio.Windows.Forms.THorizontalSeparator();
+            this.SuspendLayout();
+            //
+            // textBox1
+            //
+            this.textBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.textBox1.BackColor = System.Drawing.Color.Transparent;
+            this.textBox1.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
+            this.textBox1.Location = new System.Drawing.Point(192, 20);
+            this.textBox1.Margin = new System.Windows.Forms.Padding(10, 6, 10, 6);
+            this.textBox1.Name = "textBox1";
+            this.textBox1.Padding = new System.Windows.Forms.Padding(10, 10, 9, 9);
+            this.textBox1.Size = new System.Drawing.Size(177, 35);
+            this.textBox1.SubmitButton = null;
+            this.textBox1.TabIndex = 152;
+            this.textBox1.UseSystemPasswordChar = false;
+            //
+            // label6
+            //
+            this.label6.AutoSize = true;
+            this.label6.BackColor = System.Drawing.Color.Transparent;
+            this.label6.ForeColor = System.Drawing.SystemColors.ControlText;
+            this.label6.Location = new System.Drawing.Point(10, 250);
+            this.label6.Name = "label6";
+            this.label6.Padding = new System.Windows.Forms.Padding(0, 9, 0, 10);
+            this.label6.Size = new System.Drawing.Size(83, 34);
+            this.label6.TabIndex = 163;
+            this.label6.Text = "Run As Admin";
+            this.label6.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+            //
+            // label7
+            //
+            this.label7.AutoSize = true;
+            this.label7.BackColor = System.Drawing.Color.Transparent;
+            this.label7.ForeColor = System.Drawing.SystemColors.ControlText;
+            this.label7.Location = new System.Drawing.Point(10, 209);
+            this.label7.Name = "label7";
+            this.label7.Padding = new System.Windows.Forms.Padding(0, 9, 0, 10);
+            this.label7.Size = new System.Drawing.Size(79, 34);
+            this.label7.TabIndex = 161;
+            this.label7.Text = "Window Style";
+            this.label7.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+            //
+            // label4
+            //
+            this.label4.AutoSize = true;
+            this.label4.BackColor = System.Drawing.Color.Transparent;
+            this.label4.ForeColor = System.Drawing.SystemColors.ControlText;
+            this.label4.Location = new System.Drawing.Point(10, 144);
+            this.label4.Name = "label4";
+            this.label4.Padding = new System.Windows.Forms.Padding(0, 9, 0, 10);
+            this.label4.Size = new System.Drawing.Size(103, 34);
+            this.label4.TabIndex = 159;
+            this.label4.Text = "Working Directory";
+            this.label4.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+            //
+            // label3
+            //
+            this.label3.AutoSize = true;
+            this.label3.BackColor = System.Drawing.Color.Transparent;
+            this.label3.ForeColor = System.Drawing.SystemColors.ControlText;
+            this.label3.Location = new System.Drawing.Point(10, 103);
+            this.label3.Name = "label3";
+            this.label3.Padding = new System.Windows.Forms.Padding(0, 9, 0, 10);
+            this.label3.Size = new System.Drawing.Size(61, 34);
+            this.label3.TabIndex = 157;
+            this.label3.Text = "Argument";
+            this.label3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+            //
+            // label2
+            //
+            this.label2.AutoSize = true;
+            this.label2.BackColor = System.Drawing.Color.Transparent;
+            this.label2.ForeColor = System.Drawing.SystemColors.ControlText;
+            this.label2.Location = new System.Drawing.Point(10, 62);
+            this.label2.Name = "label2";
+            this.label2.Padding = new System.Windows.Forms.Padding(0, 9, 0, 10);
+            this.label2.Size = new System.Drawing.Size(55, 34);
+            this.label2.TabIndex = 155;
+            this.label2.Text = "Filename";
+            this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+            //
+            // label1
+            //
+            this.label1.AutoSize = true;
+            this.label1.BackColor = System.Drawing.Color.Transparent;
+            this.label1.ForeColor = System.Drawing.SystemColors.ControlText;
+            this.label1.Location = new System.Drawing.Point(10, 21);
+            this.label1.Margin = new System.Windows.Forms.Padding(0);
+            this.label1.Name = "label1";
+            this.label1.Padding = new System.Windows.Forms.Padding(0, 9, 0, 10);
+            this.label1.Size = new System.Drawing.Size(29, 34);
+            this.label1.TabIndex = 153;
+            this.label1.Text = "Title";
+            this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+            //
+            // textBox2
+            //
+            this.textBox2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.textBox2.BackColor = System.Drawing.Color.Transparent;
+            this.textBox2.FileDialog = null;
+            this.textBox2.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
+            this.textBox2.HighlightImage = ((System.Drawing.Image)(resources.GetObject("textBox2.HighlightImage")));
+            this.textBox2.Location = new System.Drawing.Point(192, 61);
+            this.textBox2.Margin = new System.Windows.Forms.Padding(10, 3, 3, 3);
+            this.textBox2.Name = "textBox2";
+            this.textBox2.NormalImage = ((System.Drawing.Image)(resources.GetObject("textBox2.NormalImage")));
+            this.textBox2.Padding = new System.Windows.Forms.Padding(10, 10, 9, 9);
+            this.textBox2.Size = new System.Drawing.Size(177, 35);
+            this.textBox2.SubmitButton = null;
+            this.textBox2.TabIndex = 170;
+            this.textBox2.UseSystemPasswordChar = false;
+            //
+            // textBox3
+            //
+            this.textBox3.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.textBox3.BackColor = System.Drawing.Color.Transparent;
+            this.textBox3.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
+            this.textBox3.Location = new System.Drawing.Point(192, 102);
+            this.textBox3.Margin = new System.Windows.Forms.Padding(10, 6, 10, 6);
+            this.textBox3.Name = "textBox3";
+            this.textBox3.Padding = new System.Windows.Forms.Padding(10, 10, 9, 9);
+            this.textBox3.Size = new System.Drawing.Size(177, 35);
+            this.textBox3.SubmitButton = null;
+            this.textBox3.TabIndex = 171;
+            this.textBox3.UseSystemPasswordChar = false;
+            //
+            // textBox4
+            //
+            this.textBox4.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.textBox4.BackColor = System.Drawing.Color.Transparent;
+            this.textBox4.FolderDialog = null;
+            this.textBox4.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
+            this.textBox4.HighlightImage = ((System.Drawing.Image)(resources.GetObject("textBox4.HighlightImage")));
+            this.textBox4.Location = new System.Drawing.Point(192, 143);
+            this.textBox4.Margin = new System.Windows.Forms.Padding(10, 3, 3, 3);
+            this.textBox4.Name = "textBox4";
+            this.textBox4.NormalImage = ((System.Drawing.Image)(resources.GetObject("textBox4.NormalImage")));
+            this.textBox4.Padding = new System.Windows.Forms.Padding(10, 10, 9, 9);
+            this.textBox4.Size = new System.Drawing.Size(177, 35);
+            this.textBox4.SubmitButton = null;
+            this.textBox4.TabIndex = 172;
+            this.textBox4.UseSystemPasswordChar = false;
+            //
+            // button1
+            //
+            this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+            this.button1.BackColor = System.Drawing.Color.Transparent;
+            this.button1.DefaultImage = null;
+            this.button1.DownImage = null;
+            this.button1.IsSelected = false;
+            this.button1.LabelText = "&OK";
+            this.button1.Location = new System.Drawing.Point(241, 469);
+            this.button1.Margin = new System.Windows.Forms.Padding(10);
+            this.button1.Name = "button1";
+            this.button1.OverImage = null;
+            this.button1.Padding = new System.Windows.Forms.Padding(4, 4, 3, 3);
+            this.button1.Size = new System.Drawing.Size(128, 32);
+            this.button1.TabIndex = 173;
+            this.button1.Click += new System.EventHandler(this.button1_Click);
+            //
+            // pickerBox1
+            //
+            this.pickerBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+            this.pickerBox1.BackColor = System.Drawing.Color.Transparent;
+            this.pickerBox1.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
+            this.pickerBox1.Location = new System.Drawing.Point(241, 209);
+            this.pickerBox1.Margin = new System.Windows.Forms.Padding(10, 6, 10, 6);
+            this.pickerBox1.Name = "pickerBox1";
+            this.pickerBox1.Padding = new System.Windows.Forms.Padding(10, 6, 7, 5);
+            this.pickerBox1.Size = new System.Drawing.Size(128, 34);
+            this.pickerBox1.SubmitButton = null;
+            this.pickerBox1.TabIndex = 174;
+            //
+            // pickerBox2
+            //
+            this.pickerBox2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+            this.pickerBox2.BackColor = System.Drawing.Color.Transparent;
+            this.pickerBox2.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
+            this.pickerBox2.Location = new System.Drawing.Point(285, 250);
+            this.pickerBox2.Margin = new System.Windows.Forms.Padding(10, 6, 10, 6);
+            this.pickerBox2.Name = "pickerBox2";
+            this.pickerBox2.Padding = new System.Windows.Forms.Padding(10, 6, 7, 5);
+            this.pickerBox2.Size = new System.Drawing.Size(84, 34);
+            this.pickerBox2.SubmitButton = null;
+            this.pickerBox2.TabIndex = 175;
+            //
+            // horizontalSeparator1
+            //
+            this.horizontalSeparator1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.horizontalSeparator1.AutoScrollMargin = new System.Drawing.Size(0, 0);
+            this.horizontalSeparator1.AutoScrollMinSize = new System.Drawing.Size(0, 0);
+            this.horizontalSeparator1.BackColor = System.Drawing.Color.Transparent;
+            this.horizontalSeparator1.Location = new System.Drawing.Point(10, 181);
+            this.horizontalSeparator1.Margin = new System.Windows.Forms.Padding(10, 0, 10, 0);
+            this.horizontalSeparator1.MaximumSize = new System.Drawing.Size(4920, 2);
+            this.horizontalSeparator1.MinimumSize = new System.Drawing.Size(0, 22);
+            this.horizontalSeparator1.Name = "horizontalSeparator1";
+            this.horizontalSeparator1.Padding = new System.Windows.Forms.Padding(0, 10, 0, 10);
+            this.horizontalSeparator1.Size = new System.Drawing.Size(364, 22);
+            this.horizontalSeparator1.TabIndex = 176;
+            //
+            // horizontalSeparator2
+            //
+            this.horizontalSeparator2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.horizontalSeparator2.AutoScrollMargin = new System.Drawing.Size(0, 0);
+            this.horizontalSeparator2.AutoScrollMinSize = new System.Drawing.Size(0, 0);
+            this.horizontalSeparator2.BackColor = System.Drawing.Color.Transparent;
+            this.horizontalSeparator2.Location = new System.Drawing.Point(10, 437);
+            this.horizontalSeparator2.Margin = new System.Windows.Forms.Padding(10, 0, 10, 0);
+            this.horizontalSeparator2.MaximumSize = new System.Drawing.Size(4920, 2);
+            this.horizontalSeparator2.MinimumSize = new System.Drawing.Size(0, 22);
+            this.horizontalSeparator2.Name = "horizontalSeparator2";
+            this.horizontalSeparator2.Padding = new System.Windows.Forms.Padding(0, 10, 0, 10);
+            this.horizontalSeparator2.Size = new System.Drawing.Size(364, 22);
+            this.horizontalSeparator2.TabIndex = 177;
+            //
+            // AddTileForm
+            //
+            this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
+            this.ClientSize = new System.Drawing.Size(384, 521);
+            this.Controls.Add(this.horizontalSeparator2);
+            this.Controls.Add(this.horizontalSeparator1);
+            this.Controls.Add(this.pickerBox2);
+            this.Controls.Add(this.pickerBox1);
+            this.Controls.Add(this.button1);
+            this.Controls.Add(this.textBox4);
+            this.Controls.Add(this.textBox3);
+            this.Controls.Add(this.textBox2);
+            this.Controls.Add(this.label6);
+            this.Controls.Add(this.label7);
+            this.Controls.Add(this.label4);
+            this.Controls.Add(this.label3);
+            this.Controls.Add(this.label2);
+            this.Controls.Add(this.label1);
+            this.Controls.Add(this.textBox1);
+            this.MinimumSize = new System.Drawing.Size(400, 560);
+            this.Name = "AddTileForm";
+            this.Text = "Add Tile";
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        protected override void OnShown(EventArgs e)
+        {
+            base.OnShown(e);
+
+            if (this.DialogMode == DialogModeType.Edit)
+            {
+                if (this.TilePanel != null)
+                {
+                    updateModel(this.TilePanel.ModelInfo);
+                }
+                else if (this.ListBox != null)
+                {
+                    if (this.ListBox.ListBox.SelectedItem != null)
+                    {
+                        TileModel model = (this.ListBox.ListBox.SelectedItem as TileModel);
+                        if (model != null)
+                        {
+                            updateModel(model);
+                        }
+                    }
+                }
+            }
+        }
+
+
+        public TilePanelLayout TilePanelLayout { get; set; } = null;
+
+        public TilePanel TilePanel { get; set; } = null;
+
+        public TListBox ListBox { get; set; } = null;
+
+        public Point AimCoord { get; set; } = new Point(-1, -1);
+
+        public DialogModeType DialogMode
+        {
+            get => dialogMode;
+            set
+            {
+                dialogMode = value;
+
+                switch (dialogMode)
+                {
+                    case DialogModeType.Add:
+                        this.Text = "Add Tile";
+                        break;
+                    case DialogModeType.Edit:
+                        this.Text = "Edit Tile";
+                        break;
+                    default: break;
+                }
+            }
+        }
+
+
+        private void button1_Click(object sender, EventArgs e)
+        {
+            TileModel model = buildModel();
+
+            switch (this.DialogMode)
+            {
+                case DialogModeType.Add:
+                    if (this.TilePanelLayout != null)
+                    {
+                        this.TilePanelLayout.AddTile(model);
+                    }
+                    else if (this.ListBox != null)
+                    {
+                        int n = this.ListBox.ListBox.Items.Add(model);
+                        this.ListBox.ListBox.SelectedIndex = n;
+                    }
+
+                    break;
+                case DialogModeType.Edit:
+                    if (this.TilePanel != null)
+                    {
+                        this.TilePanel.LoadInfo(model);
+                    }
+                    else if (this.ListBox != null)
+                    {
+                        int n = this.ListBox.ListBox.SelectedIndex;
+                        if (n >= 0)
+                        {
+                            this.ListBox.ListBox.Items.RemoveAt(n);
+                            this.ListBox.ListBox.Items.Insert(n, model);
+                            this.ListBox.ListBox.SelectedIndex = n;
+                        }
+                    }
+
+                    break;
+                default: break;
+            }
+
+            this.Close();
+        }
+
+        protected TileModel buildModel()
+        {
+            TileModel rs = new TileModel()
+            {
+                Title = textBox1.Text?.Trim(),
+                ProcessFilename = textBox2.Text?.Trim(),
+                ProcessArgument = textBox3.Text?.Trim(),
+                ProcessWorkingDirectory = textBox4.Text?.Trim(),
+                ProcessWindowStyle = (System.Diagnostics.ProcessWindowStyle)pickerBox1.ComboBox.SelectedIndex,
+                ProcessAsAdmin = (pickerBox2.ComboBox.SelectedIndex == 1)
+            };
+
+            if (this.DialogMode == DialogModeType.Add)
+            {
+                if (!this.AimCoord.Equals(new Point(-1, -1)))
+                {
+                    rs.Position = this.AimCoord;
+                }
+            }
+
+            return rs;
+        }
+
+        protected void updateModel(TileModel model)
+        {
+            if (model == null)
+            {
+                return;
+            }
+
+            textBox1.Text = model.Title;
+            textBox2.Text = model.ProcessFilename;
+            textBox3.Text = model.ProcessArgument;
+            textBox4.Text = model.ProcessWorkingDirectory;
+            pickerBox1.ComboBox.SelectedIndex = (int)model.ProcessWindowStyle;
+            pickerBox2.ComboBox.SelectedIndex = (model.ProcessAsAdmin ? 1 : 0);
+        }
+
+    }
+}
diff --git a/Windows/Forms/EditTileForm.resx b/Windows/Forms/EditTileForm.resx
new file mode 100644
index 0000000..0fa2bef
--- /dev/null
+++ b/Windows/Forms/EditTileForm.resx
@@ -0,0 +1,97 @@
+<root>
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="textBox2.HighlightImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+        vwAADr8BOAVTJAAAAK9JREFUOE/t0zsKwkAURuGp1BWJK3EhIrgAV+EOLLWwtRQLwQdiIbbiIkwynj+O
+        IVwnyhR2XvjyInNIkXHee8f0cEQBPbDOaKEarSvXhsAJO4wirlB4jipiA3phoIvIrLFChhnKiA3o8Ckw
+        RR93LNBODVwwwRL62kNKYIxNzQ1FSsDOEHk08HrYJMw/8KtA06/cCef6KJDZgDbTFrHNZO3x9idqOyui
+        m2+07bvPgHcPXOhtG3D6cUIAAAAASUVORK5CYII=
+</value>
+  </data>
+  <data name="textBox2.NormalImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+        vwAADr8BOAVTJAAAAMZJREFUOE/tk7sNwjAQQF3BRohJGAQhMQBTsAElFLSUiAKJTxIXhBZlCILNuyRG
+        iXEQKeg46fmsO/slhU9Za5XWehiXYcD6JElygZ6qhdwTioVDGo4wDXDjsohXdYkvMDTHVa8R9Hb0tpCz
+        XzqJL5Df/CRYRFE0Yn8nr9M07XcSwBXmXN6QDfncRTCjt6+Rgfla4Adfn3D+ERS4Yht/wY8FxVN2xTac
+        gLP5qyYLAhmmA4SGyeeEoPkSq3EWydsoB4gRDEqBVU/p15ajstHKCgAAAABJRU5ErkJggg==
+</value>
+  </data>
+  <data name="textBox4.HighlightImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+        wQAADsEBuJFr7QAAAJtJREFUOE/t0zEKwkAQheEpvILHSLySlTeJ6AnEzpPYi0ERPIKWKtZKNv9LNS5x
+        E6xS+OCDJew8tsgYmeCECsGZo1dKXLBwtnghQ2fe0JDPGHecsW6xwgwjNM8tdIgyxQ0qij2gORV9LejK
+        Bk8dfi3QjGY/C0IISS7/gkEVtP3KfbKEZm0PLZM++IVK0d0rdrAcR8TrnKK7BzPLa7Wb+WX/Nb8PAAAA
+        AElFTkSuQmCC
+</value>
+  </data>
+  <data name="textBox4.NormalImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+        wQAADsEBuJFr7QAAALZJREFUOE/tkzEKwjAYRjt4BY9hvZKTN1HsCYqbJzGzKBGb9gY6qjgrxvdJK7ZS
+        Gpwc/ODBnzTvg0AT5Xk+hB3cwVc456ZRSIqi2MAeafbGEq5Zlg3KY+1Bvkkql89Ya/vsnUCZN8FJYWyM
+        6ekKnsWkdF9hb8S3I6ioyRnkpa0FXcFbwOXrAjlyawXe+06q/At+qoDh41cOCU4iV8OaQY8pUVEgOnuA
+        VcSzjRm2UHvOHeisdc7FDwDnJKIbLgP9AAAAAElFTkSuQmCC
+</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/Windows/Forms/TilePanel.Designer.cs b/Windows/Forms/TilePanel.Designer.cs
new file mode 100644
index 0000000..6334cd0
--- /dev/null
+++ b/Windows/Forms/TilePanel.Designer.cs
@@ -0,0 +1,82 @@
+namespace FizzyLauncher.Windows.Forms
+{
+    partial class TilePanel
+    {
+        /// <summary> 
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary> 
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Component Designer generated code
+
+        /// <summary> 
+        /// Required method for Designer support - do not modify 
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.components = new System.ComponentModel.Container();
+            this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components);
+            this.editToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.removeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
+            this.contextMenuStrip1.SuspendLayout();
+            this.SuspendLayout();
+            // 
+            // contextMenuStrip1
+            // 
+            this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.editToolStripMenuItem,
+            this.removeToolStripMenuItem});
+            this.contextMenuStrip1.Name = "contextMenuStrip1";
+            this.contextMenuStrip1.Size = new System.Drawing.Size(118, 48);
+            // 
+            // editToolStripMenuItem
+            // 
+            this.editToolStripMenuItem.Name = "editToolStripMenuItem";
+            this.editToolStripMenuItem.Size = new System.Drawing.Size(117, 22);
+            this.editToolStripMenuItem.Text = "&Edit";
+            this.editToolStripMenuItem.Click += new System.EventHandler(this.editToolStripMenuItem_Click);
+            // 
+            // removeToolStripMenuItem
+            // 
+            this.removeToolStripMenuItem.Name = "removeToolStripMenuItem";
+            this.removeToolStripMenuItem.Size = new System.Drawing.Size(117, 22);
+            this.removeToolStripMenuItem.Text = "&Remove";
+            this.removeToolStripMenuItem.Click += new System.EventHandler(this.removeToolStripMenuItem_Click);
+            // 
+            // TTilePanel
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(234)))), ((int)(((byte)(234)))), ((int)(((byte)(234)))));
+            this.Margin = new System.Windows.Forms.Padding(4, 3, 0, 0);
+            this.MaximumSize = new System.Drawing.Size(82, 81);
+            this.MinimumSize = new System.Drawing.Size(82, 81);
+            this.Name = "TTilePanel";
+            this.Size = new System.Drawing.Size(82, 81);
+            this.contextMenuStrip1.ResumeLayout(false);
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+        private System.Windows.Forms.ContextMenuStrip contextMenuStrip1;
+        private System.Windows.Forms.ToolStripMenuItem editToolStripMenuItem;
+        private System.Windows.Forms.ToolStripMenuItem removeToolStripMenuItem;
+        private System.Windows.Forms.ToolTip toolTip1;
+    }
+}
diff --git a/Windows/Forms/TilePanel.cs b/Windows/Forms/TilePanel.cs
new file mode 100644
index 0000000..237b67d
--- /dev/null
+++ b/Windows/Forms/TilePanel.cs
@@ -0,0 +1,491 @@
+using FizzyLauncher.Models;
+using RyzStudio.Windows.Forms;
+using System;
+using System.ComponentModel;
+using System.Diagnostics;
+using System.Drawing;
+using System.IO;
+using System.Windows.Forms;
+using AppResource = FizzyLauncher.AppResource;
+
+namespace FizzyLauncher.Windows.Forms
+{
+    public partial class TilePanel : TUserControl
+    {
+        protected bool isDragging = false;
+        protected Point startPosition = new Point();
+
+        protected int imageLeft = 0;
+        protected int imageTop = 11;
+        protected int labelMargin = 3;
+        protected int labelTop = 47;
+        protected Rectangle labelRectangle = new Rectangle();
+
+        protected string title = "";
+        protected Image icon = null;
+        protected ContextMenuStrip groupContextMenu = null;
+        protected TileModel modelInfo = new TileModel();
+
+
+        public TilePanel() : base()
+        {
+            InitializeComponent();
+
+            this.AllowDrop = true;
+            this.AutoSize = false;
+            this.BackColor = Color.FromArgb(250, 250, 250);
+            this.ContextMenuStrip = contextMenuStrip1;
+            this.DoubleBuffered = true;
+            this.Font = new Font(this.Font.FontFamily, 8.25F);
+            this.ForeColor = Color.FromArgb(99, 105, 119);
+            this.Size = new Size(70, 70);
+            this.MaximumSize = this.MinimumSize = this.Size;
+        }
+
+        protected override void OnLoad(EventArgs e)
+        {
+            base.OnLoad(e);
+
+            this.AllowDrop = true;
+            this.AutoSize = false;
+            this.BackColor = Color.FromArgb(250, 250, 250);
+            this.ContextMenuStrip = contextMenuStrip1;
+            this.DoubleBuffered = true;
+            this.Font = new Font(this.Font.FontFamily, 8.25F);
+            this.Size = new Size(70, 70);
+            this.MaximumSize = this.MinimumSize = this.Size;
+        }
+
+        protected override void OnPaint(PaintEventArgs e)
+        {
+            base.OnPaint(e);
+
+            Graphics g = e.Graphics;
+
+
+            if (this.Image != null)
+            {
+                g.DrawImage(this.Image, new Point(imageLeft, imageTop));
+            }
+
+            if (!string.IsNullOrWhiteSpace(this.Title))
+            {
+                TextRenderer.DrawText(e.Graphics, this.Title, this.Font, labelRectangle, this.ForeColor, TextFormatFlags.HorizontalCenter | TextFormatFlags.NoPadding | TextFormatFlags.EndEllipsis);
+            }
+
+            g.DrawRectangle(new Pen(Color.FromArgb(204, 206, 218), 1), new Rectangle(this.DisplayRectangle.X, this.DisplayRectangle.Y, (this.DisplayRectangle.Width - 1), (this.DisplayRectangle.Height - 1)));
+
+        }
+
+        [Category("Tile"), Browsable(true)]
+        public Image Image
+        {
+            get => icon;
+            protected set
+            {
+                icon = value;
+
+                if (icon == null)
+                {
+                    imageLeft = 0;
+                }
+                else
+                {
+                    imageLeft = (this.Width - icon.Width) / 2;
+                }
+            }
+        }
+
+        [Category("Tile"), Browsable(true)]
+        public string Title
+        {
+            get => title;
+            protected set
+            {
+                title = value;
+
+                labelRectangle = new Rectangle(labelMargin, labelTop, (this.Width - (labelMargin * 2)), (this.Height - labelTop - 1));
+            }
+        }
+
+
+        [Browsable(false)]
+        public TileModel ModelInfo => modelInfo;
+
+        public TilePanelLayout PanelContainer
+        {
+            get
+            {
+                if (this.Parent == null)
+                {
+                    return null;
+                }
+
+                if (this.Parent.GetType() != typeof(TilePanelLayout))
+                {
+                    return null;
+                }
+
+                return (TilePanelLayout)this.Parent;
+            }
+        }
+
+        protected override void OnDragDrop(DragEventArgs e)
+        {
+            string[] fileList = e.Data.GetData(DataFormats.FileDrop) as string[];
+
+            if (this.ModelInfo.IsGroup)
+            {
+                this.DropFileList(fileList);
+
+                invalidateGroupMenu(this.ModelInfo);
+            }
+            else
+            {
+                if (this.PanelContainer != null)
+                {
+                    this.PanelContainer.DropFileList(fileList);
+                }
+            }
+        }
+
+        protected override void OnDragOver(DragEventArgs e)
+        {
+            base.OnDragDrop(e);
+
+            e.Effect = (e.Data.GetDataPresent(DataFormats.FileDrop)) ? DragDropEffects.Link : DragDropEffects.None;
+        }
+
+        protected override void OnMouseUp(MouseEventArgs e)
+        {
+            base.OnMouseUp(e);
+
+            isDragging = false;
+        }
+
+        protected override void OnMouseDown(MouseEventArgs e)
+        {
+            base.OnMouseDown(e);
+
+            TilePanelLayout container = this.PanelContainer;
+            if (container == null)
+            {
+                return;
+            }
+
+            this.BringToFront();
+
+            if (((e.Button == MouseButtons.Left) && (Control.ModifierKeys == Keys.Control)) || (e.Button == MouseButtons.Right))
+            {
+                isDragging = true;
+                startPosition = e.Location;
+            }
+        }
+
+        protected override void OnMouseClick(MouseEventArgs e)
+        {
+            base.OnMouseClick(e);
+
+            if (Control.ModifierKeys == Keys.Control) return;
+            if (this.ModelInfo == null) return;
+
+            if (e.Button == MouseButtons.Left)
+            {
+                if (this.ModelInfo.IsGroup)
+                {
+                    if (groupContextMenu != null)
+                    {
+                        invalidateGroupMenuSize();
+
+                        groupContextMenu.Show(this, e.Location);
+                    }
+                }
+                else
+                {
+                    OnMouseDoubleClick(e);
+                }
+            }
+        }
+
+        protected override void OnMouseDoubleClick(MouseEventArgs e)
+        {
+            base.OnMouseDoubleClick(e);
+
+            if (Control.ModifierKeys == Keys.Control) return;
+
+            if (e.Button == MouseButtons.Left)
+            {
+                execute(this.ModelInfo);
+            }
+        }
+
+        protected override void OnMouseMove(MouseEventArgs e)
+        {
+            base.OnMouseMove(e);
+
+            if (isDragging)
+            {
+                TilePanelLayout layoutPanel = this.PanelContainer;
+                if (layoutPanel == null)
+                {
+                    return;
+                }
+
+                int x = (this.Location.X + (e.Location.X - startPosition.X));
+                int y = (this.Location.Y + (e.Location.Y - startPosition.Y));
+
+                layoutPanel.MoveTile(this, x, y);
+            }
+        }
+
+
+        public void DropFileList(string[] fileList)
+        {
+            if (fileList == null)
+            {
+                return;
+            }
+
+            if (fileList.Length <= 0)
+            {
+                return;
+            }
+
+            if (string.IsNullOrWhiteSpace(fileList[0]))
+            {
+                return;
+            }
+
+            TileModel model = new TileModel()
+            {
+                ProcessFilename = fileList[0],
+                Title = Path.GetFileName(fileList[0])
+            };
+
+            // exe
+            if (Path.GetExtension(fileList[0]).Equals(".exe", StringComparison.CurrentCultureIgnoreCase))
+            {
+                if (File.Exists(fileList[0]))
+                {
+                    try
+                    {
+                        FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(fileList[0]);
+                        if (fvi != null)
+                        {
+                            model.Title = fvi.ProductName;
+                        }
+                    }
+                    catch
+                    {
+                        // do nothing
+                    }
+                }
+
+                if (string.IsNullOrWhiteSpace(model.Title))
+                {
+                    model.Title = Path.GetFileNameWithoutExtension(fileList[0]);
+                }
+            }
+
+            this.ModelInfo.Items.Add(model);
+        }
+
+        public void LoadInfo(TileModel model)
+        {
+            this.modelInfo = model;
+
+            this.Image = null;
+            this.Title = model.Title;
+
+            if (this.modelInfo.IsGroup)
+            {
+                this.Image = AppResource.folder_32;
+
+                invalidateGroupMenu(this.modelInfo);
+            }
+            else
+            {
+                this.Image = getIcon(model);
+            }
+
+            toolTip1.SetToolTip(this, this.Title);
+        }
+
+        private void editToolStripMenuItem_Click(object sender, EventArgs e)
+        {
+            if (this.ModelInfo.IsGroup)
+            {
+                EditTileFolderForm.ShowEditDialog(this);
+            }
+            else
+            {
+                EditTileForm.ShowEditDialog(this);
+            }
+        }
+
+        private void removeToolStripMenuItem_Click(object sender, EventArgs e)
+        {
+            if (this.PanelContainer == null)
+            {
+                return;
+            }
+
+            this.PanelContainer.Remove(this);
+        }
+
+        protected void execute(TileModel model)
+        {
+            if (model == null)
+            {
+                return;
+            }
+
+            if (model.IsGroup)
+            {
+                return;
+            }
+
+            if (string.IsNullOrWhiteSpace(model.CleanProcessFilename))
+            {
+                return;
+            }
+
+            if (!File.Exists(model.CleanProcessFilename))
+            {
+                return;
+            }
+
+            ProcessStartInfo p = new ProcessStartInfo();
+            p.FileName = model.CleanProcessFilename;
+            p.WindowStyle = model.ProcessWindowStyle;
+            if (!string.IsNullOrWhiteSpace(model.CleanProcessArgument)) p.Arguments = model.CleanProcessArgument;
+            if (!string.IsNullOrWhiteSpace(model.CleanProcessWorkingDirectory)) p.WorkingDirectory = model.CleanProcessWorkingDirectory;
+            if (model.ProcessAsAdmin) p.Verb = "runas";
+
+            MainForm parentForm = findMainForm();
+            if (parentForm != null)
+            {
+                if (parentForm.CurrentSession != null)
+                {
+                    if (parentForm.CurrentSession.HideOnClick)
+                    {
+                        parentForm.Visible = false;
+                    }
+                }
+            }
+
+            try
+            {
+                Process.Start(p);
+            }
+            catch (Exception exc)
+            {
+                MessageBox.Show(exc.Message);
+            }
+        }
+
+        protected Image getIcon(TileModel model)
+        {
+            if (!File.Exists(model.CleanProcessFilename))
+            {
+                return null;
+            }
+
+            try
+            {
+                return Icon.ExtractAssociatedIcon(model.CleanProcessFilename)?.ToBitmap();
+            }
+            catch
+            {
+                // do nothing
+            }
+
+            return null;
+        }
+
+        protected void invalidateGroupMenu(TileModel model)
+        {
+            if (groupContextMenu == null)
+            {
+                groupContextMenu = new ContextMenuStrip();
+            }
+
+            groupContextMenu.Items.Clear();
+
+            if (model.Items == null)
+            {
+                return;
+            }
+
+            foreach (TileModel item in model.Items)
+            {
+                ToolStripItem toolItem = groupContextMenu.Items.Add(item.Title);
+                toolItem.Image = getIcon(item);
+                toolItem.Tag = item;
+                toolItem.Click += toolItem_Click;
+            }
+        }
+
+        protected void invalidateGroupMenuSize()
+        {
+            if (this.PanelContainer != null)
+            {
+                if (this.PanelContainer.MainForm != null)
+                {
+                    if (this.PanelContainer.MainForm.CurrentSession != null)
+                    {
+                        if (this.PanelContainer.MainForm.CurrentSession.EnableBigIconInFolder)
+                        {
+                            groupContextMenu.ImageScalingSize = new Size(24, 24);
+                            return;
+                        }
+                    }
+                }
+            }
+
+            groupContextMenu.ImageScalingSize = new Size(16, 16);
+        }
+
+        protected MainForm findMainForm()
+        {
+            Control item = this;
+
+            while (true)
+            {
+                item = item.Parent;
+                if (item == null)
+                {
+                    return null;
+                }
+
+                if (item.GetType() == typeof(MainForm))
+                {
+                    return (item as MainForm);
+                }
+            }
+        }
+
+        private void toolItem_Click(object sender, EventArgs e)
+        {
+            if (sender.GetType() != typeof(ToolStripMenuItem))
+            {
+                return;
+            }
+
+            ToolStripMenuItem item = (sender as ToolStripMenuItem);
+            if (item.Tag == null)
+            {
+                return;
+            }
+
+            if (item.Tag.GetType() != typeof(TileModel))
+            {
+                return;
+            }
+
+            TileModel model = (item.Tag as TileModel);
+            execute(model);
+        }
+
+    }
+}
\ No newline at end of file
diff --git a/Windows/Forms/TilePanel.resx b/Windows/Forms/TilePanel.resx
new file mode 100644
index 0000000..60ff723
--- /dev/null
+++ b/Windows/Forms/TilePanel.resx
@@ -0,0 +1,66 @@
+<root>
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="contextMenuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>172, 17</value>
+  </metadata>
+</root>
\ No newline at end of file
diff --git a/Windows/Forms/TilePanelLayout.Designer.cs b/Windows/Forms/TilePanelLayout.Designer.cs
new file mode 100644
index 0000000..9da7f33
--- /dev/null
+++ b/Windows/Forms/TilePanelLayout.Designer.cs
@@ -0,0 +1,222 @@
+namespace FizzyLauncher.Windows.Forms
+{
+    partial class TilePanelLayout
+    {
+        /// <summary> 
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary> 
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Component Designer generated code
+
+        /// <summary> 
+        /// Required method for Designer support - do not modify 
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.components = new System.ComponentModel.Container();
+            this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components);
+            this.addToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.addListToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.contextMenuStrip2 = new System.Windows.Forms.ContextMenuStrip(this.components);
+            this.toolStripMenuItem2 = new System.Windows.Forms.ToolStripMenuItem();
+            this.toolStripMenuItem5 = new System.Windows.Forms.ToolStripMenuItem();
+            this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
+            this.removeRowToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
+            this.toolStripMenuItem4 = new System.Windows.Forms.ToolStripMenuItem();
+            this.topToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.upToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.downToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.bottomToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
+            this.toolStripMenuItem3 = new System.Windows.Forms.ToolStripMenuItem();
+            this.label1 = new System.Windows.Forms.Label();
+            this.contextMenuStrip1.SuspendLayout();
+            this.contextMenuStrip2.SuspendLayout();
+            this.SuspendLayout();
+            // 
+            // contextMenuStrip1
+            // 
+            this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.addToolStripMenuItem,
+            this.addListToolStripMenuItem});
+            this.contextMenuStrip1.Name = "contextMenuStrip1";
+            this.contextMenuStrip1.Size = new System.Drawing.Size(181, 70);
+            // 
+            // addToolStripMenuItem
+            // 
+            this.addToolStripMenuItem.Name = "addToolStripMenuItem";
+            this.addToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
+            this.addToolStripMenuItem.Text = "&Add Tile";
+            this.addToolStripMenuItem.Click += new System.EventHandler(this.addTileMenuItem_Click);
+            // 
+            // addListToolStripMenuItem
+            // 
+            this.addListToolStripMenuItem.Name = "addListToolStripMenuItem";
+            this.addListToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
+            this.addListToolStripMenuItem.Text = "Add &Folder";
+            this.addListToolStripMenuItem.Click += new System.EventHandler(this.addListTileMenuItem_Click);
+            // 
+            // contextMenuStrip2
+            // 
+            this.contextMenuStrip2.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.toolStripMenuItem2,
+            this.toolStripMenuItem5,
+            this.toolStripMenuItem1,
+            this.removeRowToolStripMenuItem,
+            this.toolStripSeparator2,
+            this.toolStripMenuItem4,
+            this.toolStripSeparator1,
+            this.toolStripMenuItem3});
+            this.contextMenuStrip2.Name = "contextMenuStrip1";
+            this.contextMenuStrip2.Size = new System.Drawing.Size(144, 148);
+            // 
+            // toolStripMenuItem2
+            // 
+            this.toolStripMenuItem2.Name = "toolStripMenuItem2";
+            this.toolStripMenuItem2.Size = new System.Drawing.Size(143, 22);
+            this.toolStripMenuItem2.Text = "&Add Group";
+            this.toolStripMenuItem2.Click += new System.EventHandler(this.addGroupMenuItem_Click);
+            // 
+            // toolStripMenuItem5
+            // 
+            this.toolStripMenuItem5.Name = "toolStripMenuItem5";
+            this.toolStripMenuItem5.Size = new System.Drawing.Size(143, 22);
+            this.toolStripMenuItem5.Text = "Add &Row";
+            this.toolStripMenuItem5.Click += new System.EventHandler(this.addRowMenuItem_Click);
+            // 
+            // toolStripMenuItem1
+            // 
+            this.toolStripMenuItem1.Name = "toolStripMenuItem1";
+            this.toolStripMenuItem1.Size = new System.Drawing.Size(143, 22);
+            this.toolStripMenuItem1.Text = "&Edit";
+            this.toolStripMenuItem1.Click += new System.EventHandler(this.editGroupMenuItem_Click);
+            // 
+            // removeRowToolStripMenuItem
+            // 
+            this.removeRowToolStripMenuItem.Name = "removeRowToolStripMenuItem";
+            this.removeRowToolStripMenuItem.Size = new System.Drawing.Size(143, 22);
+            this.removeRowToolStripMenuItem.Text = "Remo&ve Row";
+            this.removeRowToolStripMenuItem.Click += new System.EventHandler(this.removeRowToolStripMenuItem_Click);
+            // 
+            // toolStripSeparator2
+            // 
+            this.toolStripSeparator2.Name = "toolStripSeparator2";
+            this.toolStripSeparator2.Size = new System.Drawing.Size(140, 6);
+            // 
+            // toolStripMenuItem4
+            // 
+            this.toolStripMenuItem4.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.topToolStripMenuItem,
+            this.upToolStripMenuItem,
+            this.downToolStripMenuItem,
+            this.bottomToolStripMenuItem});
+            this.toolStripMenuItem4.Name = "toolStripMenuItem4";
+            this.toolStripMenuItem4.Size = new System.Drawing.Size(143, 22);
+            this.toolStripMenuItem4.Text = "&Move";
+            // 
+            // topToolStripMenuItem
+            // 
+            this.topToolStripMenuItem.Name = "topToolStripMenuItem";
+            this.topToolStripMenuItem.Size = new System.Drawing.Size(114, 22);
+            this.topToolStripMenuItem.Text = "&Top";
+            this.topToolStripMenuItem.Click += new System.EventHandler(this.moveTopMenuItem_Click);
+            // 
+            // upToolStripMenuItem
+            // 
+            this.upToolStripMenuItem.Name = "upToolStripMenuItem";
+            this.upToolStripMenuItem.Size = new System.Drawing.Size(114, 22);
+            this.upToolStripMenuItem.Text = "&Up";
+            this.upToolStripMenuItem.Click += new System.EventHandler(this.moveUpMenuItem_Click);
+            // 
+            // downToolStripMenuItem
+            // 
+            this.downToolStripMenuItem.Name = "downToolStripMenuItem";
+            this.downToolStripMenuItem.Size = new System.Drawing.Size(114, 22);
+            this.downToolStripMenuItem.Text = "&Down";
+            this.downToolStripMenuItem.Click += new System.EventHandler(this.moveDownMenuItem_Click);
+            // 
+            // bottomToolStripMenuItem
+            // 
+            this.bottomToolStripMenuItem.Name = "bottomToolStripMenuItem";
+            this.bottomToolStripMenuItem.Size = new System.Drawing.Size(114, 22);
+            this.bottomToolStripMenuItem.Text = "&Bottom";
+            this.bottomToolStripMenuItem.Click += new System.EventHandler(this.moveBottomMenuItem_Click);
+            // 
+            // toolStripSeparator1
+            // 
+            this.toolStripSeparator1.Name = "toolStripSeparator1";
+            this.toolStripSeparator1.Size = new System.Drawing.Size(140, 6);
+            // 
+            // toolStripMenuItem3
+            // 
+            this.toolStripMenuItem3.Name = "toolStripMenuItem3";
+            this.toolStripMenuItem3.Size = new System.Drawing.Size(143, 22);
+            this.toolStripMenuItem3.Text = "&Remove";
+            this.toolStripMenuItem3.Click += new System.EventHandler(this.removeGroupMenuItem3_Click);
+            // 
+            // label1
+            // 
+            this.label1.AutoSize = true;
+            this.label1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(99)))), ((int)(((byte)(105)))), ((int)(((byte)(119)))));
+            this.label1.Image = global::FizzyLauncher.AppResource.toggle_left_ea_16;
+            this.label1.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
+            this.label1.Location = new System.Drawing.Point(227, 72);
+            this.label1.Margin = new System.Windows.Forms.Padding(0);
+            this.label1.Name = "label1";
+            this.label1.Size = new System.Drawing.Size(0, 13);
+            this.label1.TabIndex = 2;
+            this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+            this.label1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.label1_MouseClick);
+            this.label1.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.label1_MouseClick);
+            // 
+            // TTilePanelLayout
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.BackColor = System.Drawing.Color.Transparent;
+            this.Controls.Add(this.label1);
+            this.Name = "TTilePanelLayout";
+            this.Size = new System.Drawing.Size(370, 150);
+            this.contextMenuStrip1.ResumeLayout(false);
+            this.contextMenuStrip2.ResumeLayout(false);
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+        private System.Windows.Forms.ContextMenuStrip contextMenuStrip1;
+        private System.Windows.Forms.ToolStripMenuItem addToolStripMenuItem;
+        private System.Windows.Forms.ToolStripMenuItem addListToolStripMenuItem;
+        private System.Windows.Forms.ContextMenuStrip contextMenuStrip2;
+        private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem2;
+        private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem5;
+        private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem1;
+        private System.Windows.Forms.ToolStripSeparator toolStripSeparator2;
+        private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem4;
+        private System.Windows.Forms.ToolStripMenuItem topToolStripMenuItem;
+        private System.Windows.Forms.ToolStripMenuItem upToolStripMenuItem;
+        private System.Windows.Forms.ToolStripMenuItem downToolStripMenuItem;
+        private System.Windows.Forms.ToolStripMenuItem bottomToolStripMenuItem;
+        private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
+        private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem3;
+        private System.Windows.Forms.ToolStripMenuItem removeRowToolStripMenuItem;
+        private System.Windows.Forms.Label label1;
+    }
+}
diff --git a/Windows/Forms/TilePanelLayout.cs b/Windows/Forms/TilePanelLayout.cs
new file mode 100644
index 0000000..a975ba2
--- /dev/null
+++ b/Windows/Forms/TilePanelLayout.cs
@@ -0,0 +1,849 @@
+using FizzyLauncher.Models;
+using RyzStudio.Windows.Forms;
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Drawing;
+using System.IO;
+using System.Linq;
+using System.Threading;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using AppResource = FizzyLauncher.AppResource;
+
+namespace FizzyLauncher.Windows.Forms
+{
+    public partial class TilePanelLayout : TUserControl
+    {
+        public static int CalcWidth(int tileCount) => (tileCount * tileSize) + ((tileCount - 1) * margin);
+
+
+        public class Item
+        {
+            public TilePanel Tile { get; set; }
+            public Point Coord { get; set; } = new Point(0, 0);
+        }
+
+
+        protected const int tileSize = 70;
+        protected const int margin = 3;
+        protected const int labelHeight = 20;
+        protected const int collapseIncrement = 6;
+        protected const int expandIncrement = 8;
+
+        protected TileGroupModel groupModel = null;
+        protected List<Item> items = new List<Item>();
+
+        protected int collapseHeight = 0;
+        protected int expandedHeight = 0;
+
+        protected bool isAnimating = false;
+        protected bool isChecked = true;
+        protected Point lastMousePosition = new Point();
+        protected Point gridSize = new Point();
+
+
+        public TilePanelLayout(TileGroupModel model) : base()
+        {
+            InitializeComponent();
+
+            this.AllowDrop = true;
+            this.BackColor = Color.Transparent;
+
+            this.LoadModel(model);
+
+            label1.Location = new Point(0, 4);
+            label1.Margin = new Padding(0);
+            label1.Padding = new Padding(0);
+        }
+
+        protected override void OnDragDrop(DragEventArgs e)
+        {
+            string[] fileList = e.Data.GetData(DataFormats.FileDrop) as string[];
+
+            this.DropFileList(fileList);
+        }
+
+        protected override void OnDragOver(DragEventArgs e)
+        {
+            if (e.Data.GetDataPresent(DataFormats.FileDrop))
+            {
+                e.Effect = DragDropEffects.Link;
+            }
+            else
+            {
+                e.Effect = DragDropEffects.None;
+            }
+        }
+
+        protected override void OnLoad(EventArgs e)
+        {
+            base.OnLoad(e);
+
+            this.Margin = new Padding(0);
+            this.Padding = new Padding(0, 0, 0, 10);
+        }
+
+        protected override async void OnResize(EventArgs e)
+        {
+            base.OnResize(e);
+
+            await this.InvalidateContainer();
+        }
+
+        protected override void OnMouseClick(MouseEventArgs e)
+        {
+            base.OnMouseClick(e);
+
+            lastMousePosition = e.Location;
+
+            bool isLabel = ((e.Location.X >= 0) && (e.Location.X <= this.Width) && (e.Location.Y >= 0) && (e.Location.Y <= 20));
+
+            if (e.Button == MouseButtons.Left)
+            {
+                // do nothing
+            }
+            else if (e.Button == MouseButtons.Right)
+            {
+                if (isLabel)
+                {
+                    contextMenuStrip2.Show(this, e.Location);
+                }
+                else
+                {
+                    contextMenuStrip1.Show(this, e.Location);
+                }
+            }
+        }
+
+        protected override void OnMouseDoubleClick(MouseEventArgs e) => base.OnMouseClick(e);
+
+        public Point GridSize
+        {
+            get => gridSize;
+        }
+
+        public bool EnableAnimation
+        {
+            get
+            {
+                MainForm mainForm = this.MainForm;
+                if (mainForm == null)
+                {
+                    return false;
+                }
+
+                if (mainForm.CurrentSession == null)
+                {
+                    return false;
+                }
+
+                return mainForm.CurrentSession.EnableAnimation;
+            }
+        }
+
+        public int CollapseHeight => labelHeight + collapseHeight;
+
+        public int ExpandedHeight => expandedHeight + this.Padding.Bottom;
+
+        public void DropFileList(string[] fileList)
+        {
+            if (fileList == null)
+            {
+                return;
+            }
+
+            if (fileList.Length <= 0)
+            {
+                return;
+            }
+
+            if (string.IsNullOrWhiteSpace(fileList[0]))
+            {
+                return;
+            }
+
+            TileModel model = new TileModel()
+            {
+                ProcessFilename = fileList[0],
+                Title = Path.GetFileName(fileList[0])
+            };
+
+            // exe
+            if (Path.GetExtension(fileList[0]).Equals(".exe", StringComparison.CurrentCultureIgnoreCase))
+            {
+                if (File.Exists(fileList[0]))
+                {
+                    try
+                    {
+                        FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(fileList[0]);
+                        if (fvi != null)
+                        {
+                            model.Title = fvi.ProductName;
+                        }
+                    }
+                    catch
+                    {
+                        // do nothing
+                    }
+                }
+
+                if (string.IsNullOrWhiteSpace(model.Title))
+                {
+                    model.Title = Path.GetFileNameWithoutExtension(fileList[0]);
+                }
+            }
+
+            this.AddTile(model);
+        }
+
+        public TileGroupModel Model
+        {
+            get
+            {
+                TileGroupModel rs = new TileGroupModel()
+                {
+                    Title = groupModel.Title,
+                    GridSize = new Size(this.GridSize.X, this.GridSize.Y),
+                    IsExpanded = isChecked,
+                    IsExclusive = groupModel.IsExclusive,
+                    Items = this.Tiles
+                };
+
+                return rs;
+            }
+        }
+
+        public FlowLayoutPanel FlowLayoutPanel
+        {
+            get
+            {
+                Control parentControl = this.Parent;
+                while (true)
+                {
+                    if (parentControl == null)
+                    {
+                        return null;
+                    }
+
+                    if (parentControl.GetType() == typeof(FlowLayoutPanel))
+                    {
+                        return parentControl as FlowLayoutPanel;
+                    }
+
+                    parentControl = parentControl.Parent;
+                }
+            }
+        }
+
+        public MainForm MainForm
+        {
+            get
+            {
+                Control parentControl = this.FlowLayoutPanel;
+                while (true)
+                {
+                    if (parentControl == null)
+                    {
+                        return null;
+                    }
+
+                    if (parentControl.GetType() == typeof(MainForm))
+                    {
+                        return parentControl as MainForm;
+                    }
+
+                    parentControl = parentControl.Parent;
+                }
+            }
+        }
+
+        public List<TileModel> Tiles
+        {
+            get
+            {
+                List<TileModel> rs = new List<TileModel>();
+                foreach (Item item in items)
+                {
+                    TileModel model = item.Tile.ModelInfo;
+                    model.Position = item.Coord;
+
+                    rs.Add(model);
+                }
+
+                return rs;
+            }
+        }
+
+        public int TileSize => (tileSize + margin);
+
+        public void AddTile(TileModel tile)
+        {
+            Point gridSize = this.GridSize;
+
+            if (items.Count >= (gridSize.X * gridSize.Y))
+            {
+                this.SetGridSize(gridSize.X, (gridSize.Y + 1));
+            }
+
+            Point? newCoord = tile.Position;
+            if ((newCoord == null) || hasTile(tile.Position))
+            {
+                newCoord = findLastFreeCoord();
+            }
+
+            if (newCoord == null)
+            {
+                return;
+            }
+
+            tile.Position = newCoord.Value;
+
+            TilePanel panel = new TilePanel();
+            panel.LoadInfo(tile);
+            panel.Location = convertCoordToLocation(tile.Position);
+
+            items.Add(new Item()
+            {
+                Tile = panel,
+                Coord = tile.Position
+            });
+
+            this.Controls.Add(panel);
+        }
+
+        public void Clear()
+        {
+            this.Controls.Clear();
+        }
+
+        public async Task Collapse()
+        {
+            await Task.Run(() =>
+            {
+                if (isAnimating) return;
+
+                isAnimating = true;
+                isChecked = false;
+
+                if (this.EnableAnimation)
+                {
+                    while (this.Height > this.CollapseHeight)
+                    {
+                        ThreadControl.SetHeight(this, (this.Height - collapseIncrement));
+
+                        Thread.Sleep(10);
+                    }
+                }
+
+                ThreadControl.SetHeight(this, this.CollapseHeight);
+
+                isAnimating = false;
+
+                this.Invalidate(this.DisplayRectangle, false);
+            });
+        }
+
+        public async Task Expand()
+        {
+            await Task.Run(() =>
+            {
+                if (isAnimating) return;
+
+                isAnimating = true;
+                isChecked = true;
+
+                if (this.EnableAnimation)
+                {
+                    while (this.Height < this.ExpandedHeight)
+                    {
+                        ThreadControl.SetHeight(this, (this.Height + expandIncrement));
+                        Thread.Sleep(10);
+                    }
+                }
+
+                ThreadControl.SetHeight(this, this.ExpandedHeight);
+
+                isAnimating = false;
+
+                this.Invalidate(this.DisplayRectangle, false);
+            });
+        }
+
+        public Point GetTilePosition(int posX, int posY)
+        {
+            int x = (int)Math.Round(decimal.Divide(posX, this.TileSize));
+            int y = (int)Math.Round(decimal.Divide((posY - labelHeight), this.TileSize));
+
+            if (x < 0) x = 0;
+            if (y < 0) y = 0;
+
+            return new Point((x * this.TileSize), ((y * this.TileSize) + labelHeight));
+        }
+
+        public async Task InvalidateContainer()
+        {
+            if (isAnimating)
+            {
+                return;
+            }
+
+            if (isChecked)
+            {
+                await this.Expand();
+            }
+            else
+            {
+                await this.Collapse();
+            }
+        }
+
+        public void AddGroup()
+        {
+            if (this.FlowLayoutPanel == null)
+            {
+                return;
+            }
+
+            this.FlowLayoutPanel.Controls.Add(new TilePanelLayout(new TileGroupModel()
+            {
+                Title = "New Group",
+                GridSize = new Size(8, 1)
+            }));
+        }
+
+        public void AddRow() => this.SetGridSize(gridSize.X, (gridSize.Y + 1));
+
+        public void EditGroup() => EditGroupForm.ShowDialog(this);
+
+        public void LoadModel(TileGroupModel model)
+        {
+            groupModel = model;
+
+            isChecked = groupModel.IsExpanded;
+
+            label1.Text = "        " + groupModel?.Title;
+            label1.Image = (isChecked ? AppResource.toggle_right_ea_16 : AppResource.toggle_left_ea_16);
+
+            this.SetGridSize(groupModel.GridSize.Width, groupModel.GridSize.Height);
+            this.LoadTiles(model.Items);
+            this.SetGridSize(groupModel.GridSize.Width, groupModel.GridSize.Height);
+
+            this.Invalidate();
+        }
+
+        public void UpdateModel(TileGroupModel model)
+        {
+            groupModel = model;
+            isChecked = groupModel.IsExpanded;
+
+            label1.Text = "        " + groupModel?.Title;
+
+            this.Invalidate();
+        }
+
+        public void LoadTiles(List<TileModel> tiles)
+        {
+            if (tiles == null)
+            {
+                return;
+            }
+
+            if (tiles.Count() <= 0)
+            {
+                return;
+            }
+
+            foreach (TileModel item in tiles)
+            {
+                // resolve final grid position
+                Point? confirmedPosition = resolveCoord(item.Position);
+                if (confirmedPosition == null)
+                {
+                    continue;
+                }
+
+                // place control
+                TilePanel panel = new TilePanel();
+                panel.LoadInfo(item);
+                panel.Location = convertCoordToLocation(confirmedPosition.Value);
+
+                items.Add(new Item()
+                {
+                    Tile = panel,
+                    Coord = confirmedPosition.Value
+                });
+
+                this.Controls.Add(panel);
+            }
+        }
+
+        public void MoveTile(TilePanel panel, int posX, int posY)
+        {
+            Item item = items.Where(x => x.Tile.Equals(panel)).FirstOrDefault();
+            if (item == null)
+            {
+                return;
+            }
+
+            Point newPosition = convertLocationToCoord_Nearest(posX, posY);
+            if (!isTileInBounds(newPosition))
+            {
+                return;
+            }
+
+            if (hasTile(newPosition))
+            {
+                Item swapItem = items.Where(x => x.Coord.Equals(newPosition)).FirstOrDefault();
+                if (swapItem != null)
+                {
+                    swapItem.Coord = item.Coord;
+                    swapItem.Tile.Location = convertCoordToLocation(item.Coord);
+                }
+
+                item.Coord = newPosition;
+                panel.Location = convertCoordToLocation(newPosition);
+            }
+            else
+            {
+                item.Coord = newPosition;
+                panel.Location = convertCoordToLocation(newPosition);
+            }
+        }
+
+        public void MoveTop()
+        {
+            if (this.FlowLayoutPanel == null)
+            {
+                return;
+            }
+
+            this.FlowLayoutPanel.Controls.SetChildIndex(this, 0);
+        }
+
+        public void MoveUp()
+        {
+            if (this.FlowLayoutPanel == null)
+            {
+                return;
+            }
+
+            int pos = this.FlowLayoutPanel.Controls.GetChildIndex(this);
+            if (pos <= 0)
+            {
+                return;
+            }
+
+            this.FlowLayoutPanel.Controls.SetChildIndex(this, (pos - 1));
+        }
+
+        public void MoveDown()
+        {
+            if (this.FlowLayoutPanel == null)
+            {
+                return;
+            }
+
+            int pos = this.FlowLayoutPanel.Controls.GetChildIndex(this);
+            if (pos >= (this.FlowLayoutPanel.Controls.Count - 1))
+            {
+                return;
+            }
+
+            this.FlowLayoutPanel.Controls.SetChildIndex(this, (pos + 1));
+        }
+
+        public void MoveBottom()
+        {
+            if (this.FlowLayoutPanel == null)
+            {
+                return;
+            }
+
+            this.FlowLayoutPanel.Controls.SetChildIndex(this, (this.FlowLayoutPanel.Controls.Count - 1));
+        }
+
+        public void Remove()
+        {
+            if (this.FlowLayoutPanel == null)
+            {
+                return;
+            }
+
+            this.FlowLayoutPanel.Controls.Remove(this);
+        }
+
+        public void Remove(TilePanel panel)
+        {
+            Item m = items.Where(x => x.Tile.Equals(panel)).FirstOrDefault();
+            if (m != null)
+            {
+                items.Remove(m);
+            }
+
+            this.Controls.Remove(panel);
+        }
+
+        public void SetGridSize(int width, int height)
+        {
+            gridSize = new Point(width, height);
+
+            groupModel.GridSize = new Size(groupModel.GridSize.Width, height);
+
+            expandedHeight = (this.TileSize * height) + labelHeight;
+
+            int w = CalcWidth(gridSize.X);
+
+            this.Size = new Size(w, (isChecked ? this.ExpandedHeight : this.CollapseHeight));
+        }
+
+        protected Point convertCoordToLocation(Point position) => new Point((position.X * this.TileSize), ((position.Y * this.TileSize) + labelHeight));
+
+        protected Point convertLocationToCoord(int posX, int posY)
+        {
+            int x = (int)Math.Ceiling(decimal.Divide(posX, this.TileSize));
+            int y = (int)Math.Ceiling(decimal.Divide((posY - labelHeight), this.TileSize));
+
+            x--;
+            y--;
+
+            if (x < 0) x = 0;
+            if (y < 0) y = 0;
+
+            return new Point(x, y);
+        }
+
+        protected Point convertLocationToCoord_Nearest(int posX, int posY)
+        {
+            int x = (int)Math.Round(decimal.Divide(posX, this.TileSize));
+            int y = (int)Math.Round(decimal.Divide((posY - labelHeight), this.TileSize));
+
+            if (x < 0) x = 0;
+            if (y < 0) y = 0;
+
+            return new Point(x, y);
+        }
+
+        protected Point? findFirstFreeCoord()
+        {
+            Point gridSize = this.GridSize;
+
+            for (int y = 0; y < gridSize.Y; y++)
+            {
+                for (int x = 0; x < gridSize.X; x++)
+                {
+                    if (hasTile(new Point(x, y)))
+                    {
+                        continue;
+                    }
+
+                    return new Point(x, y);
+                }
+            }
+
+            return null;
+        }
+
+        protected Point? findLastFreeCoord()
+        {
+            Point gridSize = this.GridSize;
+
+            // none available
+            if (items.Count >= (gridSize.X * gridSize.Y))
+            {
+                return null;
+            }
+
+            if (items.Count <= 0)
+            {
+                return findFirstFreeCoord();
+            }
+
+            // only one available
+            if (items.Count >= ((gridSize.X * gridSize.Y) - 1))
+            {
+                return findFirstFreeCoord();
+            }
+
+            Point? rv = null;
+
+            for (int y = (gridSize.Y - 1); y >= 0; y--)
+            {
+                for (int x = (gridSize.X - 1); x >= 0; x--)
+                {
+                    if (hasTile(new Point(x, y)))
+                    {
+                        if (rv.HasValue)
+                        {
+                            return rv;
+                        }
+                    }
+                    else
+                    {
+                        rv = new Point(x, y);
+                    }
+                }
+            }
+
+            return null;
+        }
+
+        protected bool hasTile(Point position)
+        {
+            if (items == null)
+            {
+                return false;
+            }
+
+            if (items.Count <= 0)
+            {
+                return false;
+            }
+
+            return (items.Count(x => x.Coord.Equals(position)) > 0);
+        }
+
+        protected bool isTileInBounds(Point position)
+        {
+            Point gridSize = this.GridSize;
+
+            if (position.X >= gridSize.X)
+            {
+                return false;
+            }
+
+            if (position.Y >= gridSize.Y)
+            {
+                return false;
+            }
+
+            return true;
+        }
+
+        protected Point? resolveCoord(Point coord)
+        {
+            if (!isTileInBounds(coord))
+            {
+                return null;
+            }
+
+            if (!hasTile(coord))
+            {
+                return coord;
+            }
+
+            return resolveNextCoord(coord);
+        }
+
+        protected Point? resolveNextCoord(Point coord)
+        {
+            Point gridSize = this.GridSize;
+            Point newCoord = coord;
+
+            while (true)
+            {
+                newCoord.X++;
+
+                if (newCoord.X >= gridSize.X)
+                {
+                    newCoord.Y++;
+                    newCoord.X = 0;
+                }
+
+                if (!isTileInBounds(newCoord))
+                {
+                    return null;
+                }
+
+                if (hasTile(newCoord))
+                {
+                    continue;
+                }
+
+                return newCoord;
+            }
+        }
+
+        private void addTileMenuItem_Click(object sender, EventArgs e)
+        {
+            Point coord = convertLocationToCoord(lastMousePosition.X, lastMousePosition.Y);
+
+            EditTileForm.ShowAddDialog(this, coord);
+        }
+
+        private void addListTileMenuItem_Click(object sender, EventArgs e)
+        {
+            Point coord = convertLocationToCoord(lastMousePosition.X, lastMousePosition.Y);
+
+            EditTileFolderForm.ShowAddDialog(this, coord);
+        }
+
+        private void addGroupMenuItem_Click(object sender, EventArgs e) => this.AddGroup();
+
+        private void addRowMenuItem_Click(object sender, EventArgs e) => this.AddRow();
+
+        private void editGroupMenuItem_Click(object sender, EventArgs e) => this.EditGroup();
+
+        private void moveTopMenuItem_Click(object sender, EventArgs e) => this.MoveTop();
+
+        private void moveUpMenuItem_Click(object sender, EventArgs e) => this.MoveUp();
+
+        private void moveDownMenuItem_Click(object sender, EventArgs e) => this.MoveDown();
+
+        private void moveBottomMenuItem_Click(object sender, EventArgs e) => this.MoveBottom();
+
+        private void removeGroupMenuItem3_Click(object sender, EventArgs e) => this.Remove();
+
+        private void removeRowToolStripMenuItem_Click(object sender, EventArgs e)
+        {
+            bool rs = items.Exists(x => x.Coord.Y.Equals(gridSize.Y - 1));
+            if (!rs)
+            {
+                this.SetGridSize(gridSize.X, (gridSize.Y - 1));
+            }
+        }
+
+        private async void label1_MouseClick(object sender, MouseEventArgs e)
+        {
+            if (isAnimating) return;
+
+            if (e.Button == MouseButtons.Left)
+            {
+                isChecked = !isChecked;
+
+                label1.Image = (isChecked ? AppResource.toggle_right_ea_16 : AppResource.toggle_left_ea_16);
+
+                this.Invalidate();
+
+                await this.InvalidateContainer();
+
+                // exclusivity
+                if (isChecked)
+                {
+                    if (this.Model.IsExclusive)
+                    {
+                        if (this.FlowLayoutPanel != null)
+                        {
+                            foreach (TilePanelLayout item in this.FlowLayoutPanel.Controls.OfType<TilePanelLayout>())
+                            {
+                                if (item.Equals(this))
+                                {
+                                    continue;
+                                }
+
+                                await item.Collapse();
+                            }
+                        }
+                    }
+                }
+
+                label1.Image = (isChecked ? AppResource.toggle_right_ea_16 : AppResource.toggle_left_ea_16);
+            }
+            else if (e.Button == MouseButtons.Right)
+            {
+                contextMenuStrip2.Show(this, e.Location);
+            }
+        }
+
+    }
+}
diff --git a/Windows/Forms/TilePanelLayout.resx b/Windows/Forms/TilePanelLayout.resx
new file mode 100644
index 0000000..8baf68f
--- /dev/null
+++ b/Windows/Forms/TilePanelLayout.resx
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="contextMenuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <metadata name="contextMenuStrip2.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>172, 17</value>
+  </metadata>
+</root>
\ No newline at end of file
diff --git a/favicon.ico b/favicon.ico
new file mode 100644
index 0000000000000000000000000000000000000000..5d60ade9d37ee6deb89e358cb4d6cac929ebef26
GIT binary patch
literal 17542
zcmd5^32;<LdVUI<sA8vrl1*)SlXxLjN!eK^RgQPpyRLF<<Q!G5)NXc}87$3=gk(U#
z%;?|-8=>J00t`mB!9v(z3CtzH;00qYiAx9}aoYw7uns^H2x$<~pwS$i|Ld84>UncX
z=Ip9p{f_SbzrSA}|Is5wiBo>0y!fI*`A}u!KPk$8D~d97Xy86UQQGO*Gtc<%7yh}T
ztaw>b66iU~kNc6L{A`$_JWq9~2_=mP&mU&8nGL_Qn)J;?brz%UeOrp*4g0WRgyhLj
z7L#ra;r0+Q4YgZMy7gAGZbYWZ^p{VfBo?DSPlH)2gSdBDjrzSLk2O2h@UzD)i@{(R
zM7TeevA;KaCcAk4EZhEhF`GRpQ{aw}8)|H3z1?aa{?enCCG*WU<E>`>W*Pg(?=57#
zE*F#2t=1M+wr3YB_`f+UGxe<qa_}+NKx3@XlC1kJ+J2bwj5iwp%3{(Vma&%<e#E>U
zj|@HJy6bKyt2|Q9Ru{a-CXGsoCQCQ9{iVgMPX(_BDT^g3=~-&~f{cCF*3BVUV?Drk
zI#+X&tuI>1rdviulf_MQ<^Zj2*|eVh!~Mu&P1e0YxSIs_%#;!A=z)E)pvHXf^ZD4-
z+DmN5#&vA&)SPIt_$(&F^dBOFCE4&Q;ik3Fzdq)q8`;_Fs+ib*NP(Lz&20a!oow0M
zSqyz7cn0!T!XGyf8Ej_V@2Rd+v@>OF8oP4oyB`8=z;(o&nL0LIl_Sfjqn*2diPpDt
z!tEB=-?5Eh*Ba^vjN^VQ6urM##ZUXk$o`<Gc{5GmMvk%B-qxl<@wgq#)7u`Ayq+$#
zthn&>xR|@UJ0f|UPEj-{$9Ph)&^j9pf4F^Vao#%&-%_N@CthP`zfxjSOWiC{g*EKh
z#g2}##iVnK-dF30i>q~)`tZ~G7YRS#mrVLCs;t!Sg-i2;_9d^UJ0@-+TV2Jk1O#?w
z{^FR}g?wJkKIoyn1#3nCmv4f>@Yh-yuvgHYdPK&)Zq<sAeF@`2;JfyXjX9b(htQR(
zH+Y$F_|Lyrz;0Ea3ZW~XZ&u~QIMb%3b7l(s%x2QRDdV>#CH*a7KPzMZg4W}3NyguP
zy*OME)^vVUMErH1tq)tL_4tXX_<={lH&@0_d-W;t4th#O*@3V;@bGcr$9^p^QeGzG
zr~3}^uIlLFh}a(|{=1!>jPwX0Lsv#d#-9oqtR}-Af&bKr<4+`hfSNNoOW<d=6x}Zc
ze%S`ux^C?giywNf=x3`@mnHCL8g>6Eo-dv?qu=<ioJeF%7cxTV;^F5a&fl8cIqY)D
zh7dZxWO>y23sA?(_N(~GX5A?8TMUN3ApBfU$fEh{a`i-%L7u;29gURN9e+h_r{C*;
zMke$2_Nw*di{|UsRQ!bZn!t~o?oW$vaQWi5a<!mqugA%1kNqMh)gAv0bF`GIb!$H<
zW@qN*$E1cY{;1Z`UO?A|{wQ$59uYFovk%4duXk?OR()dbS1w+l;wK#~N#M7c3`T(;
zw(OId_Uzc&hu@?x5csXe;X?#|=-c>Kk<ymcci7C)tx+j&+)Y+h-ltENHh9@@_Vlt}
z?2b;kXQSKEwcmat;WyL>{KyHvY9F@TxE>aMugk~GuU%uNe~(Rel0l?b2)nY*6_etq
z%)KZgz;@0WnIvTJVC@ky$Uc#Z^6)xD&pn@teSX$0_Q~Ro5Snai;bn5i^x^;2SAP7@
z?d)Y4mF^Hq+~-zh>v9XJ!{>`~rwjbFj~U)j@tgEHVhpV-S`oIgjQ_}<?yzNw7Pd#k
zKk9gRaK%@>{l;HfvPQ*Ex?8Tmk3Cu7$6g&SJqh@s;|QG4eFT2!MD)B1@1QF|XVRu8
z0Y7xiKK%L)fgd?NFB9*evue}h#t+?I_C-SX55jNM&lmW2YznnC9w+|2w697!G<^fz
zw_0EJc(dVu1b+CCv`NOlc3B6jJm?Ie`PsK3&fhooyV+*i3$$cA>4`Xhy<RWdxMr0+
zW^i4Zk(~TDa^K^c+rcKi7c#(R_PB%B3mJc`Js{lr*`Gb2TVm-ZUG9^DrNP+EhMgH1
zzkN!JUEJflh;LATxi07v3<Q7aCwJ7kV*QVW|Fyk+x~H?di~A7;7Jsf=6Dux7dQp+6
zb71$EDh6CYt?26X#w5ror%r;^PHu&0<miLW93Aa!!Hmh8e%CLgK91@C4EPOs-POyN
z$S@wsHT3+MS>t5v9;?wXUW|`eIees||Dnqv?jZZ$9;OiR4a+({;c&u-91FANeH_(m
z6*3@)FB|I-e39^RKa2#QyyRy?|F^?;uff)@Tf_>ezE74xzJ@;+F$csRqUqZGl@qZL
zjlaJMF_V6QjZg?N8^mr9!y)XdA6=FM*N6cj7KHs;8^h}le#D?OZC;RV!wB#O^cees
z&8Rof+FDG!92$Nqe|&$$8xeQJ8WJsGU)u0#@V-Rf{dl;2X+U6O6o!vI5K~%C@-#-0
z1$%w|%&BbG)=jM8>Xjf-urDDNsj0hze9Lqi;?X9=pm{9XWT?^L3Bre%He%a|aU<5P
zDf=<{<<TM!<pzC<zKNCQ44oCwyEGWJnE5^Yf1xcs{wFxIfwLPV&w7$WjbBPKd2sgQ
z@gt3m06Gh7Rh+FM{B=alG(Ub9yJqYXjLoLGRhqz<@;c9bN<7bd6ouywMH!6u^`v|t
zFQ+zNr`%5Y5Xvc22A3xI0=XxUQ+58lK9H9qk1tKI2XbV%56TAx?xW;(REP_-6DBXm
zd!;lXR$h-{R4yo|_V_*VC$Tv`o|Ak$C%Ji^7sy#@0^~%$K<+`5qhI2YQ$gNu)ImdV
zPaT-YbC17YdB>L~;GEV_qG3c2>YP?U2W%tz`VgJ>m}D^<{*ju0B#C^9@6z}TqdSmY
zVAe0RCL3O{+wFhypuu4Mq}bd?nBTB*5AXY$pHn~_ar*d>a~`c0vu-u!P&8YnzZe6t
z*G=G^Ju;bT<2cZfu!mtU!=8q65;<w#-3MI-vBduJ6y<W#exE?!yBzIJ$w>1-CySL@
zn{TlFf84>A&dJs4U9deXX#Jm-VK599JR;@eQVoAc<<Eh4ZuWQv-G877exBop${5ZW
zOnBQQ_sg<KeDU0p^432S-v;oWKYb!|v`5!>`h%;N^a|*rXp_cLbtL}Q6y2|>%q^5#
zVh=ta&>ue0%0Rcl7^1e_vVT=z!8tK{hjUgG-(Td{S$$siZP~MGY+R1%oZtI2>%G^+
zT<sm~xNV{uXA<#x<R_=)`i<KFFvx`VEym%Af-iE5(U1mQc(-ZoYE}35dGB%FmyWy;
z6c4*x`6_?zyi?8Y);DtA=kk{Y#lKGF&F9bMxY0J!lfVOOiQrH7Gx#&o3lRs9li-gt
z0di_<SP{a%xjZ;VEMosM|FhL6{PLUhyCwcyhd6Rzugrp9KWP4)4hQE?@^*-|lCF<I
z{!8DSf9U+dz&_E&F^o(3!@uxvZ`Lmc|2<y>_dUuA`4JPn-B_qn!x=g&MrUQ@?|-Ri
zEo(k>R3#Dnl=~lT7O(su@D2Pr8tr9&0RI&f!_p?fUmo{;*Ky3%U8jyedEAR@%nKjc
zLvq4*20zjt*Fb*iho9hn@|cn8xL3>5{DX|)sHeM@7sI(2%z<#!b31hHy586jkY8V`
zjzP2TGBDg|YE)T^i?&t|yLz!VgqoZB9D22#K307@lp4E({Z(j_$2&7d0)r2-0|VKh
zpMn3;gZl(qp5yrF+y8Z4jqS+3NyMvKuDMwq@kV?poDc8mjdZpv6axDwf1dvv81?@P
z{^YM73;rdA9|rM9Tns!BQ#!DtOQnxy`(rWa7sw6X#-nalSm#wq#E!zny>@TkBECUB
z_+u`BKjwy<1b_IH<+N{m7sn;@Ur`%8&V=tc9DmGp@FO|~{#Xm>nxA*U8X?ld;@>w1
z^zGn}MEc}zV8R+H(!=17H6A{Ifc!K3-1!*D#k1`jN(6h_1O4BBT54-hJaLZoW=Q|P
z`gL#&@r5t_u|?7U828)Oe<t{PFy;hr<iz_wz#lfeNP@pS?!`6c#qFCOb^L`J|Icpg
zWnLQp+~58|z~64v_mEzwmwDrQa!Sh6#NQ1a0p%Z5g1`Lzd9%3Oq)&E4^BqDrLLWd^
zg3ffm3A!6}IJ8OB0NqY2w|q}!mIcakoe{btbjWZq!&um$vqE<bw090Vt;{RjHFRU>
z$W*6-h{tPCA3jXz)X=S=W5-I+)y4T>=<v|x!|{vu4E{PAqp5-TduKonE>GSBE89~1
zDfc;P&-laNIU(JzZ<AiP{XzK7U`xTKf^9`Of_&hx!C;HQPYv5l#35m`Jq+I$Un|Mh
z<Tj@ilal(!C+nBd`uIV-gAEQ_95y*&XoHPDkak%;ji&O!<fe&Z<ZF4I{0;Hsdx$4D
zLwr5C9?FUAM2epfCki5Zr)a61o)N_np?-Wlxh#l=5TX4%@?|jQ7(|TY8T=H_5WPrr
zKYj}M7io+*h<4eGhKvmJ@SjqX4<g0UoaFIq#9HhVtl~FazRc7S)ie&?q3`{#KZH@h
zx3CIhXR~DYh~M}uUohKiOBum^9>l9r{GP{dF#K68ept_WU(j9`?d;gyJ9ik))xhS<
zNi*^_ht``rG^R=-tyx$bGR-5ZsGP6za9OP7NPRDUBlG#{kFlnKSJ0VZ$TTh~X(-L%
z+U&Gs&-v3eYTbceESfdLOFRzB{RBOW+HRgSCe?GL_9E$`9(G}W0=Fgl^m>KP_-$ov
zHD^L>+RE%Hsy>f1snowt5%;BeH;nk*otZV(EzVi_ye{5$$BhlD4uA3R^W2Vstx}Ua
zSJm5ZRaJ9-KDYm%)ak0gd6vL$(K1sEx93dB_R8@W(f+;8vugL$9(ze`|IFNc^?6s*
zwV?LzI6C-RPU~bQ`Y0=P#A(utgS6%QX&;PpbH=;HnNpik_rb(bDIPhlC)&Ss<mc+y
z%kz7mVz--$xE)tvov5CzJT+^cAHVdQvb8G;u-;z>e%c$7F^{e{HK;Pv$5L&^KKpSM
zbGvRa=Z$97Rupz)Tg~adx^#v81Z^Vj=8s|MnbuCnc|O@TIJmQmbvnH479E#eCD{Y8
z4RGF1PWaso+Nbs7Ey#ee3Hwwe4;e4e_ok+_sOJjPN$)HBvWpc_dry&lBhC)~JfLs(
zN-WUV6Gxe`UM=T+MCW_)O+@?dUVr-ym-}?BcSp5yd4TsNI+rNY*$%&*<C5CPJB%5O
z9kh?J1bHyFknXpAjCG88jD6mI;4IpilYSdPv|q8`soJMg=$s$E2k<{n=lX<Qx}n~G
z7Ea*D8ape;;-UCQH?4K}DYSyQOmo-?Kaq@I=-eW&I^^W-Yjy5~%`WDl8B~9z4*Hje
z+PayUr299tEfTF6WlQqj(exr`*RMZ_^O1h#q5a_daQ=7d|GC81i#2wjv1hF1RM&^K
zJyN_Ddjj?bl7q*Kv1icU;lmz+y(Ch?9z=COyRbKj{)m)gZ{+b@^6e8Q#HKJ;d<);5
z;+12!+^!OSJ@O;Szk!I<cDU!*!}(sGVmJvt;759{8+$(IO*#P8gYI+R3Azb%6!e9^
zA9dDPjgqRAND-dI9%XQ%Lm8A<PgG81SK<;0mWC9%SLmIV;&`2MC7yD$GbEA1bBUw_
zCPEK`kua2KpnBNEbkn=EUw2WQU?<kH{`mNb4fi{cZ+<16EA7Hsh;xJ==FjVzkZyEM
z8<$>{X*SrjXYo)E39*q$qf>U0Pr2)!<~Mpm&se*%pnKAo6esQXb##XBIe$&6OEFyf
zy>VsXvi$B?wl2mO*%vO-!=|FXCC%{6#L+32Hhfy>^m^T-Km3^QUD(&Jf0x6qZraNC
zb^I=%GG`js7iubx(Rz@!AN6THuK)Urt$bni`N)4&@iLz>-Hs}D?ZQ~@!@m1Hlyb(-
zELhCz!;Ymn-$~WuCTEOnY^wjBzej!e#^E2t@4iHR{B8^WK={Cg|8e^Gx9{Q%)a22r
zCD_;e4S0k6>W-Fe>}KUj)sKF4BmLHa<VRYybWtblLHO#6mM^)BXLwb-+@bnLPSU!#
zt<kHVqt34OFriQ!+WQsxI8%#(0a#EUTRD6y@MGcJGtO;~J>h0Jw~TcgJ`~}<gUpZ}
zeSp3|pP>G%4F7rVE8n@)`c-Xyt}oO1Zc!h7j=rb*3a!lt5la*PMV#BmzEM)(;QX;~
zU|;?57V;mG17&N;njRW2S2In+{~q-*7BD7cT?X=K6UJ8IvPI5Gqf<}F|LXx`5n~c#
z6Js>oI*l=nv5hev>G%8MTm^m8ik$T1o`MClJ7^C1Fqbf=sBR(bRbY;lFlRA$F^4gi
qF{i`T>3O|0u|B>uu{^Fc(N07$b6RV{lbxQUjD3*5j%P?|;{OB00kg6I

literal 0
HcmV?d00001


From f54bb1c38a6f211e29595663ada7409d51b2cb9f Mon Sep 17 00:00:00 2001
From: Ray <sympatheticfire@gmail.com>
Date: Fri, 23 Jul 2021 01:19:27 +0100
Subject: [PATCH 3/7] Added: icons to main menu

---
 FizzyLauncher.csproj   |   1 +
 MainForm.Designer.cs   |  37 +++++----
 Resources/UI/cog.png   | Bin 0 -> 713 bytes
 Resources/UI/cog2.png  | Bin 0 -> 467 bytes
 Resources/UI/disk.png  | Bin 0 -> 439 bytes
 Resources/UI/disk2.png | Bin 0 -> 347 bytes
 Resources/UI/help.png  | Bin 0 -> 670 bytes
 Resources/UI/help2.png | Bin 0 -> 436 bytes
 Resources/UI/icons.svg | 168 +++++++++++++++++++++++++++++++++++++++++
 UIResource.Designer.cs |  60 +++++++++++++++
 UIResource.resx        |  18 +++++
 11 files changed, 268 insertions(+), 16 deletions(-)
 create mode 100644 Resources/UI/cog.png
 create mode 100644 Resources/UI/cog2.png
 create mode 100644 Resources/UI/disk.png
 create mode 100644 Resources/UI/disk2.png
 create mode 100644 Resources/UI/help.png
 create mode 100644 Resources/UI/help2.png
 create mode 100644 Resources/UI/icons.svg

diff --git a/FizzyLauncher.csproj b/FizzyLauncher.csproj
index 47ac8db..97db607 100644
--- a/FizzyLauncher.csproj
+++ b/FizzyLauncher.csproj
@@ -14,6 +14,7 @@
     <Copyright>Ray Lam</Copyright>
     <AssemblyVersion>0.2.1.055</AssemblyVersion>
     <FileVersion>0.2.1.055</FileVersion>
+    <Version>0.2.1.055</Version>
   </PropertyGroup>
 
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
diff --git a/MainForm.Designer.cs b/MainForm.Designer.cs
index 16b56d0..92961d9 100644
--- a/MainForm.Designer.cs
+++ b/MainForm.Designer.cs
@@ -126,58 +126,61 @@
             // 
             // newToolStripMenuItem
             // 
+            this.newToolStripMenuItem.Image = global::FizzyLauncher.UIResource.file2;
             this.newToolStripMenuItem.Name = "newToolStripMenuItem";
-            this.newToolStripMenuItem.Size = new System.Drawing.Size(123, 22);
+            this.newToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
             this.newToolStripMenuItem.Text = "&New";
             this.newToolStripMenuItem.Click += new System.EventHandler(this.newToolStripMenuItem_Click);
             // 
             // openToolStripMenuItem
             // 
+            this.openToolStripMenuItem.Image = global::FizzyLauncher.UIResource.folder2;
             this.openToolStripMenuItem.Name = "openToolStripMenuItem";
-            this.openToolStripMenuItem.Size = new System.Drawing.Size(123, 22);
+            this.openToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
             this.openToolStripMenuItem.Text = "&Open";
             this.openToolStripMenuItem.Click += new System.EventHandler(this.openToolStripMenuItem_Click);
             // 
             // toolStripMenuItem13
             // 
             this.toolStripMenuItem13.Name = "toolStripMenuItem13";
-            this.toolStripMenuItem13.Size = new System.Drawing.Size(120, 6);
+            this.toolStripMenuItem13.Size = new System.Drawing.Size(177, 6);
             // 
             // closeToolStripMenuItem
             // 
             this.closeToolStripMenuItem.Name = "closeToolStripMenuItem";
-            this.closeToolStripMenuItem.Size = new System.Drawing.Size(123, 22);
+            this.closeToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
             this.closeToolStripMenuItem.Text = "&Close";
             this.closeToolStripMenuItem.Click += new System.EventHandler(this.closeToolStripMenuItem_Click);
             // 
             // toolStripMenuItem14
             // 
             this.toolStripMenuItem14.Name = "toolStripMenuItem14";
-            this.toolStripMenuItem14.Size = new System.Drawing.Size(120, 6);
+            this.toolStripMenuItem14.Size = new System.Drawing.Size(177, 6);
             // 
             // saveToolStripMenuItem
             // 
+            this.saveToolStripMenuItem.Image = global::FizzyLauncher.UIResource.disk2;
             this.saveToolStripMenuItem.Name = "saveToolStripMenuItem";
-            this.saveToolStripMenuItem.Size = new System.Drawing.Size(123, 22);
+            this.saveToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
             this.saveToolStripMenuItem.Text = "&Save";
             this.saveToolStripMenuItem.Click += new System.EventHandler(this.saveToolStripMenuItem_Click);
             // 
             // saveAsToolStripMenuItem
             // 
             this.saveAsToolStripMenuItem.Name = "saveAsToolStripMenuItem";
-            this.saveAsToolStripMenuItem.Size = new System.Drawing.Size(123, 22);
+            this.saveAsToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
             this.saveAsToolStripMenuItem.Text = "Save &As...";
             this.saveAsToolStripMenuItem.Click += new System.EventHandler(this.saveAsToolStripMenuItem_Click);
             // 
             // toolStripMenuItem15
             // 
             this.toolStripMenuItem15.Name = "toolStripMenuItem15";
-            this.toolStripMenuItem15.Size = new System.Drawing.Size(120, 6);
+            this.toolStripMenuItem15.Size = new System.Drawing.Size(177, 6);
             // 
             // exitToolStripMenuItem2
             // 
             this.exitToolStripMenuItem2.Name = "exitToolStripMenuItem2";
-            this.exitToolStripMenuItem2.Size = new System.Drawing.Size(123, 22);
+            this.exitToolStripMenuItem2.Size = new System.Drawing.Size(180, 22);
             this.exitToolStripMenuItem2.Text = "E&xit";
             this.exitToolStripMenuItem2.Click += new System.EventHandler(this.exitToolStripMenuItem2_Click);
             // 
@@ -194,21 +197,21 @@
             // showBigIconsToolStripMenuItem
             // 
             this.showBigIconsToolStripMenuItem.Name = "showBigIconsToolStripMenuItem";
-            this.showBigIconsToolStripMenuItem.Size = new System.Drawing.Size(173, 22);
+            this.showBigIconsToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
             this.showBigIconsToolStripMenuItem.Text = "Show &Big Icons";
             this.showBigIconsToolStripMenuItem.Click += new System.EventHandler(this.showBigIconsToolStripMenuItem_Click);
             // 
             // enableAnimationsToolStripMenuItem
             // 
             this.enableAnimationsToolStripMenuItem.Name = "enableAnimationsToolStripMenuItem";
-            this.enableAnimationsToolStripMenuItem.Size = new System.Drawing.Size(173, 22);
+            this.enableAnimationsToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
             this.enableAnimationsToolStripMenuItem.Text = "Enable &Animations";
             this.enableAnimationsToolStripMenuItem.Click += new System.EventHandler(this.enableAnimationsToolStripMenuItem_Click);
             // 
             // alwaysOnTopToolStripMenuItem
             // 
             this.alwaysOnTopToolStripMenuItem.Name = "alwaysOnTopToolStripMenuItem";
-            this.alwaysOnTopToolStripMenuItem.Size = new System.Drawing.Size(173, 22);
+            this.alwaysOnTopToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
             this.alwaysOnTopToolStripMenuItem.Text = "Always On &Top";
             this.alwaysOnTopToolStripMenuItem.Click += new System.EventHandler(this.alwaysOnTopToolStripMenuItem_Click);
             // 
@@ -222,8 +225,9 @@
             // 
             // optionsToolStripMenuItem
             // 
+            this.optionsToolStripMenuItem.Image = global::FizzyLauncher.UIResource.cog2;
             this.optionsToolStripMenuItem.Name = "optionsToolStripMenuItem";
-            this.optionsToolStripMenuItem.Size = new System.Drawing.Size(116, 22);
+            this.optionsToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
             this.optionsToolStripMenuItem.Text = "&Options";
             this.optionsToolStripMenuItem.Click += new System.EventHandler(this.optionsToolStripMenuItem_Click);
             // 
@@ -239,20 +243,21 @@
             // 
             // viewHelpToolStripMenuItem1
             // 
+            this.viewHelpToolStripMenuItem1.Image = global::FizzyLauncher.UIResource.help2;
             this.viewHelpToolStripMenuItem1.Name = "viewHelpToolStripMenuItem1";
-            this.viewHelpToolStripMenuItem1.Size = new System.Drawing.Size(127, 22);
+            this.viewHelpToolStripMenuItem1.Size = new System.Drawing.Size(180, 22);
             this.viewHelpToolStripMenuItem1.Text = "&View Help";
             this.viewHelpToolStripMenuItem1.Click += new System.EventHandler(this.viewHelpToolStripMenuItem1_Click);
             // 
             // toolStripMenuItem16
             // 
             this.toolStripMenuItem16.Name = "toolStripMenuItem16";
-            this.toolStripMenuItem16.Size = new System.Drawing.Size(124, 6);
+            this.toolStripMenuItem16.Size = new System.Drawing.Size(177, 6);
             // 
             // aboutToolStripMenuItem1
             // 
             this.aboutToolStripMenuItem1.Name = "aboutToolStripMenuItem1";
-            this.aboutToolStripMenuItem1.Size = new System.Drawing.Size(127, 22);
+            this.aboutToolStripMenuItem1.Size = new System.Drawing.Size(180, 22);
             this.aboutToolStripMenuItem1.Text = "&About";
             this.aboutToolStripMenuItem1.Click += new System.EventHandler(this.aboutToolStripMenuItem1_Click);
             // 
diff --git a/Resources/UI/cog.png b/Resources/UI/cog.png
new file mode 100644
index 0000000000000000000000000000000000000000..7a63c8ff497a06e19075ce81b066f66cccff3621
GIT binary patch
literal 713
zcmV;)0yh1LP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10#->x
zK~y-6g_ALe+(j70e{c36f*7kDVrxYBf4hqi!B{B7GN?sj@WAH4$O$3@v<V8S(r8K%
zk0V5j*j%vEU}=-a0|U1+<DLgWurNl&1TD<M&9lgV*Fy|`@WEHid-J{bX2gA})_T0P
zwhoX|TI;&*>VKU}^TD=CDTk-i=|cdmwRK6?BwcH*eGD+2P9H6$JZW2Voc4h?fs>N%
z*uDguk#w}RwkK%|_!L+H4ggn%!{Mm~LC<>K_6eYqbQ1U?BF+KioZn6<y#Rb>`#0c9
zYwfY|czk0CK+?~)@1~TNBjP-8{$Elr^i9tBJ>d3WFt`P<1kiQePo<R0wpW04fbH$=
z(O@t*-CwZLbzSbsP5_@o#Ge4El=6Jex!PU@z5<v`CgYUSH@2U({akBptJXT~3BCl*
z<eY!3wH{BlF9P4El#WHj`+aP$0n><hDk6>mJGM^)M8r8sN9XA*^{(FD+uQp^lK1J>
zeP*}T_U<VY33v;5Nm4DPoSkb1o+zb!TS~bu>2YAAH}M@wTauoUv^IYSsn+^oYwhXL
zXmkXi);gT84Qxb2=_CKz_7B71aCNcM?(Xivob#Q@Wb!WmQ>B!(obz9$lt&gZ&StY^
z;2=;ZlgS$?r4`#(BjN)|E~T8ceG2&8_IJR6*4i>~b74--c@uaUxGU+h?bVdhG26e|
zF2F~UUbX!&uo)4rNc!hf*jCPYlv27C5jS(r71#xS2VRVbLpwV=56)(@L*w!I#vHe_
v$mw2$+xz6cDe0o^2W-DCsR4iVy{NwdQgAt!(Cb<q00000NkvXXu0mjfl2=wW

literal 0
HcmV?d00001

diff --git a/Resources/UI/cog2.png b/Resources/UI/cog2.png
new file mode 100644
index 0000000000000000000000000000000000000000..d40221fa7261d14fea5ed6726e357a90bfd498de
GIT binary patch
literal 467
zcmV;^0WAKBP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10bof)
zK~y-6jnX|!mT?pY@So4pP`D-L(2$!whJz3^1hyqKnBO7$0F_8i`T^1*H^EV~!EaDY
zV`fWBU|<lH;R`~!$kXt@?#H_u9`wMU``qW{Ixp9uw@l(&-ej+!zJ@-GpEyb4`}pqR
zCWbJ8Pv|s(-o$u>SJCfcJo*|=qi;4l8H-~IFR_h<0Qcb;-r)(R6ML%;a3kn5y=JY+
zJPvWK=~%_v+W#n)^V&80c1G;V1AN9AW@Ed9zX|>ry#iUx2wir*Vhi`3v$CATR^ASl
z;%h0(UB_MvSCq}~`=6R7#g%l@ZPzx9gE;15Yp3lUh4VkS9pCfB?%`nt(!vTp)GD>p
z_EIgGLg$)>^y65$fs15Dp?t8aOgYbfg^j1F@}f59oWjUFek*$$Xd-WBwo~OM&J<=w
zVt=hHyMv7iyt(O7{KAiP^F_J3N4Sow`R-m~R1*pOj>o-%{sE_RS^{qBODF&U002ov
JPDHLkV1n}Z*WUmD

literal 0
HcmV?d00001

diff --git a/Resources/UI/disk.png b/Resources/UI/disk.png
new file mode 100644
index 0000000000000000000000000000000000000000..7355b964686b0062baebd248f6857423282e052b
GIT binary patch
literal 439
zcmV;o0Z9IdP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10Yphe
zK~y-6t&_b<LqQaTXEw1&={rc2Y_1jttwj_Y1qBPWGldW1JEX9P5J3obS_q<GVPUvu
zNh658BBb?(vAK~X-28}6dG^e=a}K*~wOaGJT&@OS1wbBSMDi8DruY8kr)Fjk02WC$
zB<-a2%M8CGc_itB<XR6xGy5WW=Dn|m5S{?Qdtb>)5XbR`bFSGBaRBm?l5x>{ilXR-
z<Q9NgNw*<{xq+D_2|&fnl;Q6<=N3w((p?<KyUw{Lfa_tvDarM$+evl`g~DeqNeH1X
zsX73NqNo9&G0ixVx&Yv&X&$G61ZGwTa4^AhUM`mpGXW%vlHQU14gg?}WN~DI6!PZ1
zKgn{35SE8)f8N2r01`<vzcr?wgl2XRU`f&i$?f!f<PuZ!70G=7&uq8b#csD-1F(t-
h-?>i-fJf)t@i+5WfNW!=EV}>z002ovPDHLkV1k?dw_^YR

literal 0
HcmV?d00001

diff --git a/Resources/UI/disk2.png b/Resources/UI/disk2.png
new file mode 100644
index 0000000000000000000000000000000000000000..29b59a4edfdd5e1c25cd3912d2772c20c4b8e8c7
GIT binary patch
literal 347
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9F5he4R}c>anMprB-l
zYeY$Kep*R+Vo@qXd3m{BW?pu2a$-TMUVc&f>~}U&Kt(S+T^vI!de>gI^<r@pV0~~t
z^&3N*o7%q=wRsLM21WusJiInN>Ngw?bDDi%l9pJp;Dum{qmSst11WCT60!?2w%<+t
z>UhyNbbq*g$YHB>fr%zZ+afL=a++X%;dtDS^M75~+ba%=$<1<Ty}aXo`_m20{5Gaj
zO9B@BYrS%eVRyt4S7jq7eYra)zyEJrx@1z~#1xBzWoo~z<D#cdvG8L3mALuA<c~c6
zT0$0>)QX=nQ_M}|J+Jnj@y+qsYZz=EStxIqY4xv`t(f!5i*pCxF48OLZZ6O}esi|R
r&%XJr&)YtRtUvQ@uJr1H&a3+7+TP-o%(d-6KQnl``njxgN@xNA{ppR@

literal 0
HcmV?d00001

diff --git a/Resources/UI/help.png b/Resources/UI/help.png
new file mode 100644
index 0000000000000000000000000000000000000000..88b4864006518565fd2c8e5e5072b0fd688d4466
GIT binary patch
literal 670
zcmV;P0%84$P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10xL;G
zK~y-6ZBsE!6hRbyZ*C(6LSv4^!e|5LZp@wqHCTvZOo*}4&O{1rY!n(S1Y<)mCdQzN
z7aP0N7!wN-D8#~888>%xr%-5!4RlIybL4KG%^q16UN!mu&HVq~pHE~^uh&mW8kaNz
z;CK@L1z?F}*;?z;e0C1bxkHj30k{F+4}b+ps{lZ90Kh28UP(_$-nQ26>^_iOeh*-X
z<o!5~=LQD{|D`KMQPgdWnJ~uOm9#?gg0*%h0Dz?O5P-|p+IIl3wzk&WY&M4h>~wW?
zeeCb=-v)5cIro+18}I!bfLly7e*-XMt)1!k;Jsf2a5Rzdqt$AiEtN{Y0iaf^O_Q7g
z5SqlWzi}MTb=vjb&jN_O_o4UxjHDw$5KMRS?RI-s(w3xgleoQ*)=csRfGc4bR>Lq{
z0kG`7Ki$cfN~P_@<dFctF-fn|hFNQ013;xx$rTEPYXB}KkEXFo@?wx4WfsL^@g;z(
zlHN9(&546J0f6;n&ig=ep5(J)vH0nL+(}962EZbK(I|?#v!u<<%`Y1p8=tdr=iFgQ
z=K(Akl4X*;#+ZFA=JWY-UteEVJ0wk#>>*hO0Mu%=C(gN+b8ak6Y&04JjYeaSJm=h)
zbFNjbRv!bIuS{}S(t~!pJ)4Yb7f}>-=W@A8l2hrgoL#1eByUREBKg64|2;_;NS-6v
z<Gr6Z#@yMnOqmv~r0bGKNS**dNk2(0lYDNit*80_0l3*9LkBA%6#xJL07*qoM6N<$
Ef@ifV(f|Me

literal 0
HcmV?d00001

diff --git a/Resources/UI/help2.png b/Resources/UI/help2.png
new file mode 100644
index 0000000000000000000000000000000000000000..ae6856d5c6b56a20463394d6a61dedf2a39150b0
GIT binary patch
literal 436
zcmV;l0ZaagP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10YOPb
zK~y-6b<;6RT|p29;7^n%`1Jh(Yr#BI+J&T38?Dk<+az^jE73l=L5!&aqM(*m5(|HV
z)iV%;v}pp7s30U4wAhKR>wO0Xc4yA)-8uIxk1>Uh_=c;9Q&i}d<biD63eqe5!B?C`
zZ31)X;4|LfucG-F|FD9QhMTqV4s~!_dGS*;&u6(#>}N5Y<rm_R^?c?!zMSWN;wIud
z#<Tir^gJO6_Pe<DA%5T~Uf>tL6yu!Z14-@OV&0dS&h~paDL8xR!G$DF69%z_Ye}aZ
ztGF2Q@K=`D!6FW@+>g{W!hbx&^FFnG$zUo;#C8K|D5AuuBw|IfXRTR>Eo?XB*P`dn
z+8dErD2NjgIUX5_dn?zHx=rJ>-5co6%H?BvkJq@wk>o&_#0<u;iMNW!l%p#-tQQAe
e#kvyK&2bCW*-VSlT)WW#0000<MNUMnLSTYumc^$4

literal 0
HcmV?d00001

diff --git a/Resources/UI/icons.svg b/Resources/UI/icons.svg
new file mode 100644
index 0000000..998bbb6
--- /dev/null
+++ b/Resources/UI/icons.svg
@@ -0,0 +1,168 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
+   sodipodi:docname="icons.svg"
+   id="svg8"
+   version="1.1"
+   class="feather feather-save"
+   stroke-linejoin="round"
+   stroke-linecap="round"
+   stroke-width="2"
+   stroke="currentColor"
+   fill="none"
+   viewBox="0 0 24 24"
+   height="24"
+   width="24">
+  <metadata
+     id="metadata14">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs12" />
+  <sodipodi:namedview
+     inkscape:current-layer="svg8"
+     inkscape:window-maximized="1"
+     inkscape:window-y="845"
+     inkscape:window-x="1072"
+     inkscape:cy="32.669404"
+     inkscape:cx="34.52045"
+     inkscape:zoom="8.8541667"
+     showgrid="false"
+     id="namedview10"
+     inkscape:window-height="1017"
+     inkscape:window-width="1920"
+     inkscape:pageshadow="2"
+     inkscape:pageopacity="0"
+     guidetolerance="10"
+     gridtolerance="10"
+     objecttolerance="10"
+     borderopacity="1"
+     bordercolor="#666666"
+     pagecolor="#ffffff" />
+  <g
+     inkscape:export-ydpi="96"
+     inkscape:export-xdpi="96"
+     transform="matrix(0.80171614,0,0,0.7982539,-19.821146,-4.9600081)"
+     id="g842">
+    <path
+       d="M 19,21 H 5 A 2,2 0 0 1 3,19 V 5 A 2,2 0 0 1 5,3 h 11 l 5,5 v 11 a 2,2 0 0 1 -2,2 z"
+       id="path2" />
+    <polyline
+       points="17 21 17 13 7 13 7 21"
+       id="polyline4" />
+    <polyline
+       points="7 3 7 8 15 8"
+       id="polyline6" />
+  </g>
+  <g
+     inkscape:export-ydpi="96"
+     inkscape:export-xdpi="96"
+     transform="matrix(0.65647058,0,0,0.65647058,-38.541176,18.042352)"
+     id="g894"
+     style="fill:none;stroke:#d4d4d4;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1">
+    <circle
+       style="stroke:#d4d4d4;stroke-opacity:1"
+       cx="12"
+       cy="12"
+       r="3"
+       id="circle880" />
+    <path
+       style="stroke:#d4d4d4;stroke-opacity:1"
+       d="m 19.4,15 a 1.65,1.65 0 0 0 0.33,1.82 l 0.06,0.06 a 2,2 0 0 1 0,2.83 2,2 0 0 1 -2.83,0 L 16.9,19.65 a 1.65,1.65 0 0 0 -1.82,-0.33 1.65,1.65 0 0 0 -1,1.51 V 21 a 2,2 0 0 1 -2,2 2,2 0 0 1 -2,-2 V 20.91 A 1.65,1.65 0 0 0 9,19.4 1.65,1.65 0 0 0 7.18,19.73 l -0.06,0.06 a 2,2 0 0 1 -2.83,0 2,2 0 0 1 0,-2.83 L 4.35,16.9 a 1.65,1.65 0 0 0 0.33,-1.82 1.65,1.65 0 0 0 -1.51,-1 H 3 a 2,2 0 0 1 -2,-2 2,2 0 0 1 2,-2 H 3.09 A 1.65,1.65 0 0 0 4.6,9 1.65,1.65 0 0 0 4.27,7.18 L 4.21,7.12 a 2,2 0 0 1 0,-2.83 2,2 0 0 1 2.83,0 L 7.1,4.35 A 1.65,1.65 0 0 0 8.92,4.68 H 9 A 1.65,1.65 0 0 0 10,3.17 V 3 a 2,2 0 0 1 2,-2 2,2 0 0 1 2,2 v 0.09 a 1.65,1.65 0 0 0 1,1.51 1.65,1.65 0 0 0 1.82,-0.33 l 0.06,-0.06 a 2,2 0 0 1 2.83,0 2,2 0 0 1 0,2.83 L 19.65,7.1 A 1.65,1.65 0 0 0 19.32,8.92 V 9 a 1.65,1.65 0 0 0 1.51,1 H 21 a 2,2 0 0 1 2,2 2,2 0 0 1 -2,2 h -0.09 a 1.65,1.65 0 0 0 -1.51,1 z"
+       id="path882" />
+  </g>
+  <g
+     inkscape:export-ydpi="96"
+     inkscape:export-xdpi="96"
+     style="stroke:#d4d4d4;stroke-opacity:1"
+     id="g842-8"
+     transform="matrix(0.80171614,0,0,0.7982539,-39.211182,-4.9484586)">
+    <path
+       style="stroke:#d4d4d4;stroke-opacity:1"
+       id="path2-6"
+       d="M 19,21 H 5 A 2,2 0 0 1 3,19 V 5 A 2,2 0 0 1 5,3 h 11 l 5,5 v 11 a 2,2 0 0 1 -2,2 z" />
+    <polyline
+       style="stroke:#d4d4d4;stroke-opacity:1"
+       id="polyline4-7"
+       points="17 21 17 13 7 13 7 21" />
+    <polyline
+       style="stroke:#d4d4d4;stroke-opacity:1"
+       id="polyline6-7"
+       points="7 3 7 8 15 8" />
+  </g>
+  <g
+     inkscape:export-ydpi="96"
+     inkscape:export-xdpi="96"
+     style="fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round"
+     id="g894-2"
+     transform="matrix(0.65647058,0,0,0.65647058,-18.832941,20.583529)">
+    <circle
+       id="circle880-3"
+       r="3"
+       cy="12"
+       cx="12" />
+    <path
+       id="path882-5"
+       d="m 19.4,15 a 1.65,1.65 0 0 0 0.33,1.82 l 0.06,0.06 a 2,2 0 0 1 0,2.83 2,2 0 0 1 -2.83,0 L 16.9,19.65 a 1.65,1.65 0 0 0 -1.82,-0.33 1.65,1.65 0 0 0 -1,1.51 V 21 a 2,2 0 0 1 -2,2 2,2 0 0 1 -2,-2 V 20.91 A 1.65,1.65 0 0 0 9,19.4 1.65,1.65 0 0 0 7.18,19.73 l -0.06,0.06 a 2,2 0 0 1 -2.83,0 2,2 0 0 1 0,-2.83 L 4.35,16.9 a 1.65,1.65 0 0 0 0.33,-1.82 1.65,1.65 0 0 0 -1.51,-1 H 3 a 2,2 0 0 1 -2,-2 2,2 0 0 1 2,-2 H 3.09 A 1.65,1.65 0 0 0 4.6,9 1.65,1.65 0 0 0 4.27,7.18 L 4.21,7.12 a 2,2 0 0 1 0,-2.83 2,2 0 0 1 2.83,0 L 7.1,4.35 A 1.65,1.65 0 0 0 8.92,4.68 H 9 A 1.65,1.65 0 0 0 10,3.17 V 3 a 2,2 0 0 1 2,-2 2,2 0 0 1 2,2 v 0.09 a 1.65,1.65 0 0 0 1,1.51 1.65,1.65 0 0 0 1.82,-0.33 l 0.06,-0.06 a 2,2 0 0 1 2.83,0 2,2 0 0 1 0,2.83 L 19.65,7.1 A 1.65,1.65 0 0 0 19.32,8.92 V 9 a 1.65,1.65 0 0 0 1.51,1 H 21 a 2,2 0 0 1 2,2 2,2 0 0 1 -2,2 h -0.09 a 1.65,1.65 0 0 0 -1.51,1 z" />
+  </g>
+  <g
+     inkscape:export-ydpi="96"
+     inkscape:export-xdpi="96"
+     transform="matrix(0.7484492,0,0,0.7484492,12.533904,-3.390802)"
+     id="g958"
+     style="fill:none;stroke:#d4d4d4;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1">
+    <circle
+       style="stroke:#d4d4d4;stroke-opacity:1"
+       cx="12"
+       cy="12"
+       r="10"
+       id="circle941" />
+    <path
+       style="stroke:#d4d4d4;stroke-opacity:1"
+       d="m 9.09,9 a 3,3 0 0 1 5.83,1 c 0,2 -3,3 -3,3"
+       id="path943" />
+    <line
+       style="stroke:#d4d4d4;stroke-opacity:1"
+       x1="12"
+       y1="17"
+       x2="12.01"
+       y2="17"
+       id="line945" />
+  </g>
+  <g
+     inkscape:export-ydpi="96"
+     inkscape:export-xdpi="96"
+     style="fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round"
+     id="g958-4"
+     transform="matrix(0.7484492,0,0,0.7484492,31.790374,-3.2213904)">
+    <circle
+       id="circle941-9"
+       r="10"
+       cy="12"
+       cx="12" />
+    <path
+       id="path943-1"
+       d="m 9.09,9 a 3,3 0 0 1 5.83,1 c 0,2 -3,3 -3,3" />
+    <line
+       id="line945-3"
+       y2="17"
+       x2="12.01"
+       y1="17"
+       x1="12" />
+  </g>
+</svg>
diff --git a/UIResource.Designer.cs b/UIResource.Designer.cs
index 0f0a495..90f6194 100644
--- a/UIResource.Designer.cs
+++ b/UIResource.Designer.cs
@@ -120,6 +120,46 @@ namespace FizzyLauncher {
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized resource of type System.Drawing.Bitmap.
+        /// </summary>
+        internal static System.Drawing.Bitmap cog {
+            get {
+                object obj = ResourceManager.GetObject("cog", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized resource of type System.Drawing.Bitmap.
+        /// </summary>
+        internal static System.Drawing.Bitmap cog2 {
+            get {
+                object obj = ResourceManager.GetObject("cog2", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized resource of type System.Drawing.Bitmap.
+        /// </summary>
+        internal static System.Drawing.Bitmap disk {
+            get {
+                object obj = ResourceManager.GetObject("disk", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized resource of type System.Drawing.Bitmap.
+        /// </summary>
+        internal static System.Drawing.Bitmap disk2 {
+            get {
+                object obj = ResourceManager.GetObject("disk2", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
         /// <summary>
         ///   Looks up a localized resource of type System.Drawing.Bitmap.
         /// </summary>
@@ -180,6 +220,26 @@ namespace FizzyLauncher {
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized resource of type System.Drawing.Bitmap.
+        /// </summary>
+        internal static System.Drawing.Bitmap help {
+            get {
+                object obj = ResourceManager.GetObject("help", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized resource of type System.Drawing.Bitmap.
+        /// </summary>
+        internal static System.Drawing.Bitmap help2 {
+            get {
+                object obj = ResourceManager.GetObject("help2", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
         /// <summary>
         ///   Looks up a localized resource of type System.Drawing.Bitmap.
         /// </summary>
diff --git a/UIResource.resx b/UIResource.resx
index 96b7c2a..03adecf 100644
--- a/UIResource.resx
+++ b/UIResource.resx
@@ -136,6 +136,18 @@
   <data name="close2" type="System.Resources.ResXFileRef, System.Windows.Forms">
     <value>Resources\UI\close2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
   </data>
+  <data name="cog" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>Resources\UI\cog.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="cog2" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>Resources\UI\cog2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="disk" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>Resources\UI\disk.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="disk2" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>Resources\UI\disk2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
   <data name="edit" type="System.Resources.ResXFileRef, System.Windows.Forms">
     <value>Resources\UI\edit.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
   </data>
@@ -154,6 +166,12 @@
   <data name="folder2" type="System.Resources.ResXFileRef, System.Windows.Forms">
     <value>Resources\UI\folder2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
   </data>
+  <data name="help" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>Resources\UI\help.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="help2" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>Resources\UI\help2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
   <data name="minus" type="System.Resources.ResXFileRef, System.Windows.Forms">
     <value>Resources\UI\minus.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
   </data>

From 639152e3e44b09156b057ca6c1a676a894744190 Mon Sep 17 00:00:00 2001
From: Ray <sympatheticfire@gmail.com>
Date: Fri, 23 Jul 2021 02:19:03 +0100
Subject: [PATCH 4/7] Added: publish profiles

---
 FizzyLauncher.csproj                            |  5 +++++
 FizzyLauncher.csproj.user                       |  1 +
 Properties/PublishProfiles/Release x64.pubxml   | 17 +++++++++++++++++
 .../PublishProfiles/Release x64.pubxml.user     |  9 +++++++++
 Properties/PublishProfiles/Release x86.pubxml   | 17 +++++++++++++++++
 .../PublishProfiles/Release x86.pubxml.user     |  9 +++++++++
 6 files changed, 58 insertions(+)
 create mode 100644 Properties/PublishProfiles/Release x64.pubxml
 create mode 100644 Properties/PublishProfiles/Release x64.pubxml.user
 create mode 100644 Properties/PublishProfiles/Release x86.pubxml
 create mode 100644 Properties/PublishProfiles/Release x86.pubxml.user

diff --git a/FizzyLauncher.csproj b/FizzyLauncher.csproj
index 97db607..511af66 100644
--- a/FizzyLauncher.csproj
+++ b/FizzyLauncher.csproj
@@ -21,6 +21,11 @@
     <OutputPath>bin\Debug\</OutputPath>
   </PropertyGroup>
 
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
+    <DebugType>none</DebugType>
+    <DebugSymbols>false</DebugSymbols>
+  </PropertyGroup>
+
   <ItemGroup>
     <Compile Remove="#\**" />
     <Compile Remove="RyzStudio\Data\**" />
diff --git a/FizzyLauncher.csproj.user b/FizzyLauncher.csproj.user
index 3091f15..ff4db01 100644
--- a/FizzyLauncher.csproj.user
+++ b/FizzyLauncher.csproj.user
@@ -2,6 +2,7 @@
 <Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <PropertyGroup>
     <ShowAllFiles>false</ShowAllFiles>
+    <_LastSelectedProfileId>L:\gitlab-hiimray\fizzy-launcher\Properties\PublishProfiles\Release x86.pubxml</_LastSelectedProfileId>
   </PropertyGroup>
   <ItemGroup>
     <Compile Update="MainForm.cs">
diff --git a/Properties/PublishProfiles/Release x64.pubxml b/Properties/PublishProfiles/Release x64.pubxml
new file mode 100644
index 0000000..23a6044
--- /dev/null
+++ b/Properties/PublishProfiles/Release x64.pubxml	
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+https://go.microsoft.com/fwlink/?LinkID=208121. 
+-->
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration>Release</Configuration>
+    <Platform>Any CPU</Platform>
+    <PublishDir>bin\Release\64\</PublishDir>
+    <PublishProtocol>FileSystem</PublishProtocol>
+    <TargetFramework>net5.0-windows</TargetFramework>
+    <RuntimeIdentifier>win-x64</RuntimeIdentifier>
+    <SelfContained>false</SelfContained>
+    <PublishSingleFile>True</PublishSingleFile>
+    <PublishReadyToRun>False</PublishReadyToRun>
+  </PropertyGroup>
+</Project>
\ No newline at end of file
diff --git a/Properties/PublishProfiles/Release x64.pubxml.user b/Properties/PublishProfiles/Release x64.pubxml.user
new file mode 100644
index 0000000..dfee95b
--- /dev/null
+++ b/Properties/PublishProfiles/Release x64.pubxml.user	
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+https://go.microsoft.com/fwlink/?LinkID=208121. 
+-->
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <History>True|2021-07-23T00:58:59.4046567Z;</History>
+  </PropertyGroup>
+</Project>
\ No newline at end of file
diff --git a/Properties/PublishProfiles/Release x86.pubxml b/Properties/PublishProfiles/Release x86.pubxml
new file mode 100644
index 0000000..56c7547
--- /dev/null
+++ b/Properties/PublishProfiles/Release x86.pubxml	
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+https://go.microsoft.com/fwlink/?LinkID=208121. 
+-->
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration>Release</Configuration>
+    <Platform>Any CPU</Platform>
+    <PublishDir>bin\Release\86\</PublishDir>
+    <PublishProtocol>FileSystem</PublishProtocol>
+    <TargetFramework>net5.0-windows</TargetFramework>
+    <RuntimeIdentifier>win-x86</RuntimeIdentifier>
+    <SelfContained>false</SelfContained>
+    <PublishSingleFile>True</PublishSingleFile>
+    <PublishReadyToRun>False</PublishReadyToRun>
+  </PropertyGroup>
+</Project>
\ No newline at end of file
diff --git a/Properties/PublishProfiles/Release x86.pubxml.user b/Properties/PublishProfiles/Release x86.pubxml.user
new file mode 100644
index 0000000..a3ff1d7
--- /dev/null
+++ b/Properties/PublishProfiles/Release x86.pubxml.user	
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+https://go.microsoft.com/fwlink/?LinkID=208121. 
+-->
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <History>True|2021-07-23T00:59:33.9680448Z;True|2021-07-23T01:52:28.5639205+01:00;True|2021-07-23T01:49:36.9865426+01:00;True|2021-07-23T01:48:31.0435665+01:00;</History>
+  </PropertyGroup>
+</Project>
\ No newline at end of file

From e441034c9f8576bc75ec908a31c89fd88c40c6f4 Mon Sep 17 00:00:00 2001
From: Ray <sympatheticfire@gmail.com>
Date: Fri, 23 Jul 2021 02:29:34 +0100
Subject: [PATCH 5/7] Changed: re-enable hotkeys

---
 .gitignore                                    |  3 +
 FizzyLauncher.csproj.user                     | 69 -------------------
 MainForm.cs                                   | 10 +--
 .../PublishProfiles/Release x64.pubxml.user   |  9 ---
 .../PublishProfiles/Release x86.pubxml.user   |  9 ---
 5 files changed, 8 insertions(+), 92 deletions(-)
 delete mode 100644 FizzyLauncher.csproj.user
 delete mode 100644 Properties/PublishProfiles/Release x64.pubxml.user
 delete mode 100644 Properties/PublishProfiles/Release x86.pubxml.user

diff --git a/.gitignore b/.gitignore
index 28bcb4a..30a047b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,6 @@
 /.vs
 /bin
 /obj
+*.user
+*.pubxml.user
+*.csproj.user
diff --git a/FizzyLauncher.csproj.user b/FizzyLauncher.csproj.user
deleted file mode 100644
index ff4db01..0000000
--- a/FizzyLauncher.csproj.user
+++ /dev/null
@@ -1,69 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <PropertyGroup>
-    <ShowAllFiles>false</ShowAllFiles>
-    <_LastSelectedProfileId>L:\gitlab-hiimray\fizzy-launcher\Properties\PublishProfiles\Release x86.pubxml</_LastSelectedProfileId>
-  </PropertyGroup>
-  <ItemGroup>
-    <Compile Update="MainForm.cs">
-      <SubType>Form</SubType>
-    </Compile>
-    <Compile Update="RyzStudio\Windows\Forms\THorizontalSeparator.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Update="RyzStudio\Windows\Forms\TImageBox.cs">
-      <SubType>Component</SubType>
-    </Compile>
-    <Compile Update="RyzStudio\Windows\Forms\TUserControl.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Update="RyzStudio\Windows\ThemedForms\TButton.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Update="RyzStudio\Windows\ThemedForms\TextBox\TButtonTextBox.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Update="RyzStudio\Windows\ThemedForms\TDialogForm.cs">
-      <SubType>Form</SubType>
-    </Compile>
-    <Compile Update="RyzStudio\Windows\ThemedForms\TextBox\TFolderTextBox.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Update="RyzStudio\Windows\ThemedForms\TListBox.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Update="RyzStudio\Windows\ThemedForms\TextBox\TOpenFileTextBox.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Update="RyzStudio\Windows\ThemedForms\PickerBox\TPickerBox.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Update="RyzStudio\Windows\ThemedForms\TextBox\TTextBox.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Update="RyzStudio\Windows\ThemedForms\TUserControl.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Update="RyzStudio\Windows\ThemedForms\PickerBox\TYesNoPickerBox.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Update="OptionsForm.cs">
-      <SubType>Form</SubType>
-    </Compile>
-    <Compile Update="Windows\Forms\EditTileFolderForm.cs">
-      <SubType>Form</SubType>
-    </Compile>
-    <Compile Update="Windows\Forms\EditTileForm.cs">
-      <SubType>Form</SubType>
-    </Compile>
-    <Compile Update="Windows\Forms\EditGroupForm.cs">
-      <SubType>Form</SubType>
-    </Compile>
-    <Compile Update="Windows\Forms\TilePanel.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Update="Windows\Forms\TilePanelLayout.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-  </ItemGroup>
-</Project>
\ No newline at end of file
diff --git a/MainForm.cs b/MainForm.cs
index bd47082..1ddb62c 100644
--- a/MainForm.cs
+++ b/MainForm.cs
@@ -123,7 +123,7 @@ namespace FizzyLauncher
             {
                 if (this.CurrentSession.HotKey.KeyCode != Keys.None)
                 {
-                    // UnregisterHotKey((IntPtr)Handle, 1);
+                    UnregisterHotKey((IntPtr)Handle, 1);
                 }
             }
 
@@ -193,12 +193,12 @@ namespace FizzyLauncher
             {
                 this.Invoke(new MethodInvoker(() =>
                 {
-                    // UnregisterHotKey((IntPtr)Handle, 1);
+                    UnregisterHotKey((IntPtr)Handle, 1);
                 }));
             }
             else
             {
-                // UnregisterHotKey((IntPtr)Handle, 1);
+                UnregisterHotKey((IntPtr)Handle, 1);
             }
 
             if (this.CurrentSession.HotKey != null)
@@ -209,12 +209,12 @@ namespace FizzyLauncher
                     {
                         this.Invoke(new MethodInvoker(() =>
                         {
-                            // RegisterHotKey((IntPtr)Handle, 1, this.CurrentSession.HotKey.ModifierCode, this.CurrentSession.HotKey.Key);
+                            RegisterHotKey((IntPtr)Handle, 1, this.CurrentSession.HotKey.ModifierCode, this.CurrentSession.HotKey.Key);
                         }));
                     }
                     else
                     {
-                        // RegisterHotKey((IntPtr)Handle, 1, this.CurrentSession.HotKey.ModifierCode, this.CurrentSession.HotKey.Key);
+                        RegisterHotKey((IntPtr)Handle, 1, this.CurrentSession.HotKey.ModifierCode, this.CurrentSession.HotKey.Key);
                     }
                 }
             }
diff --git a/Properties/PublishProfiles/Release x64.pubxml.user b/Properties/PublishProfiles/Release x64.pubxml.user
deleted file mode 100644
index dfee95b..0000000
--- a/Properties/PublishProfiles/Release x64.pubxml.user	
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-https://go.microsoft.com/fwlink/?LinkID=208121. 
--->
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <PropertyGroup>
-    <History>True|2021-07-23T00:58:59.4046567Z;</History>
-  </PropertyGroup>
-</Project>
\ No newline at end of file
diff --git a/Properties/PublishProfiles/Release x86.pubxml.user b/Properties/PublishProfiles/Release x86.pubxml.user
deleted file mode 100644
index a3ff1d7..0000000
--- a/Properties/PublishProfiles/Release x86.pubxml.user	
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-https://go.microsoft.com/fwlink/?LinkID=208121. 
--->
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <PropertyGroup>
-    <History>True|2021-07-23T00:59:33.9680448Z;True|2021-07-23T01:52:28.5639205+01:00;True|2021-07-23T01:49:36.9865426+01:00;True|2021-07-23T01:48:31.0435665+01:00;</History>
-  </PropertyGroup>
-</Project>
\ No newline at end of file

From 515b81920f04ff9aef3fa18842fec74658c634a3 Mon Sep 17 00:00:00 2001
From: Ray <sympatheticfire@gmail.com>
Date: Fri, 23 Jul 2021 13:27:15 +0100
Subject: [PATCH 6/7] Added: installer build scripts

---
 installer-64.iss | 49 ++++++++++++++++++++++++++++++++++++++++++++++++
 installer-86.iss | 49 ++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 98 insertions(+)
 create mode 100644 installer-64.iss
 create mode 100644 installer-86.iss

diff --git a/installer-64.iss b/installer-64.iss
new file mode 100644
index 0000000..0928c3f
--- /dev/null
+++ b/installer-64.iss
@@ -0,0 +1,49 @@
+; Script generated by the Inno Setup Script Wizard.
+; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
+
+#define MyAppName "Fizzy Launcher"
+#define MyAppVersion "0.2.1.055"
+#define MyAppPublisher "Hi, I'm Ray"
+#define MyAppURL "https://www.hiimray.co.uk/software-fizzy-launcher"
+#define MyAppExeName "fizzylauncher.exe"
+
+[Setup]
+; NOTE: The value of AppId uniquely identifies this application. Do not use the same AppId value in installers for other applications.
+; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
+AppId={{472ED37C-C4FC-4B72-8BC3-C281A6E0D2F9}
+AppName={#MyAppName}
+AppVersion={#MyAppVersion}
+;AppVerName={#MyAppName} {#MyAppVersion}
+AppPublisher={#MyAppPublisher}
+AppPublisherURL={#MyAppURL}
+AppSupportURL={#MyAppURL}
+AppUpdatesURL={#MyAppURL}
+DefaultDirName={autopf}\{#MyAppName}
+DefaultGroupName={#MyAppName}
+DisableProgramGroupPage=yes
+; Remove the following line to run in administrative install mode (install for all users.)
+PrivilegesRequired=lowest
+OutputDir=L:\gitlab-hiimray\fizzy-launcher\bin
+OutputBaseFilename=fizzy-launcher-64
+Compression=lzma
+SolidCompression=yes
+WizardStyle=modern
+
+[Languages]
+Name: "english"; MessagesFile: "compiler:Default.isl"
+
+[Tasks]
+Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
+
+[Files]
+Source: "L:\gitlab-hiimray\fizzy-launcher\bin\Release\64\fizzylauncher.exe"; DestDir: "{app}"; Flags: ignoreversion
+; NOTE: Don't use "Flags: ignoreversion" on any shared system files
+
+[Icons]
+Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
+Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"
+Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon
+
+[Run]
+Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent
+
diff --git a/installer-86.iss b/installer-86.iss
new file mode 100644
index 0000000..55499af
--- /dev/null
+++ b/installer-86.iss
@@ -0,0 +1,49 @@
+; Script generated by the Inno Setup Script Wizard.
+; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
+
+#define MyAppName "Fizzy Launcher"
+#define MyAppVersion "0.2.1.055"
+#define MyAppPublisher "Hi, I'm Ray"
+#define MyAppURL "https://www.hiimray.co.uk/software-fizzy-launcher"
+#define MyAppExeName "fizzylauncher.exe"
+
+[Setup]
+; NOTE: The value of AppId uniquely identifies this application. Do not use the same AppId value in installers for other applications.
+; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
+AppId={{472ED37C-C4FC-4B72-8BC3-C281A6E0D2F9}
+AppName={#MyAppName}
+AppVersion={#MyAppVersion}
+;AppVerName={#MyAppName} {#MyAppVersion}
+AppPublisher={#MyAppPublisher}
+AppPublisherURL={#MyAppURL}
+AppSupportURL={#MyAppURL}
+AppUpdatesURL={#MyAppURL}
+DefaultDirName={autopf}\{#MyAppName}
+DefaultGroupName={#MyAppName}
+DisableProgramGroupPage=yes
+; Remove the following line to run in administrative install mode (install for all users.)
+PrivilegesRequired=lowest
+OutputDir=L:\gitlab-hiimray\fizzy-launcher\bin
+OutputBaseFilename=fizzy-launcher-86
+Compression=lzma
+SolidCompression=yes
+WizardStyle=modern
+
+[Languages]
+Name: "english"; MessagesFile: "compiler:Default.isl"
+
+[Tasks]
+Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
+
+[Files]
+Source: "L:\gitlab-hiimray\fizzy-launcher\bin\Release\86\fizzylauncher.exe"; DestDir: "{app}"; Flags: ignoreversion
+; NOTE: Don't use "Flags: ignoreversion" on any shared system files
+
+[Icons]
+Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
+Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"
+Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon
+
+[Run]
+Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent
+

From dd32aee9d99385788f2d96a3eb73072ec58d435d Mon Sep 17 00:00:00 2001
From: Ray <sympatheticfire@gmail.com>
Date: Fri, 23 Jul 2021 14:38:07 +0100
Subject: [PATCH 7/7] Fixed: session file writing bad format

---
 MainForm.cs              | 17 +++++++++++++++--
 Models/TileGroupModel.cs |  9 ++++++++-
 Models/TileModel.cs      | 12 +++++++++++-
 3 files changed, 34 insertions(+), 4 deletions(-)

diff --git a/MainForm.cs b/MainForm.cs
index 1ddb62c..cd9b259 100644
--- a/MainForm.cs
+++ b/MainForm.cs
@@ -277,7 +277,16 @@ namespace FizzyLauncher
                 options.Converters.Add(new JsonPointConverter());
                 options.Converters.Add(new JsonSizeConverter());
 
-                this.CurrentSession = JsonSerializer.Deserialize<LauncherSession>(sourceCode, options);
+                try
+                {
+                    this.CurrentSession = JsonSerializer.Deserialize<LauncherSession>(sourceCode, options);
+                }
+                catch (Exception exc)
+                {
+                    MessageBox.Show("Unable to read session", "Load session");
+                    return;
+                }
+
                 if (this.CurrentSession == null)
                 {
                     this.CurrentSession = new LauncherSession();
@@ -361,9 +370,13 @@ namespace FizzyLauncher
                 this.CurrentSession.Groups.Add(container.Model);
             }
 
+            var options = new JsonSerializerOptions();
+            options.Converters.Add(new JsonPointConverter());
+            options.Converters.Add(new JsonSizeConverter());
+
             try
             {
-                File.WriteAllText(filename, JsonSerializer.Serialize(this.CurrentSession));
+                File.WriteAllText(filename, JsonSerializer.Serialize(this.CurrentSession, options));
 
                 if (showNotices)
                 {
diff --git a/Models/TileGroupModel.cs b/Models/TileGroupModel.cs
index cdf04a6..6f69481 100644
--- a/Models/TileGroupModel.cs
+++ b/Models/TileGroupModel.cs
@@ -1,14 +1,21 @@
-using System.Collections.Generic;
+using FizzyLauncher.Text.Json;
+using System.Collections.Generic;
 using System.Drawing;
+using System.Text.Json.Serialization;
 
 namespace FizzyLauncher.Models
 {
     public class TileGroupModel
     {
         public string Title { get; set; }
+
         public bool IsExpanded { get; set; } = false;
+
         public bool IsExclusive { get; set; } = false;
+
         public List<TileModel> Items { get; set; } = new List<TileModel>();
+
+        [JsonConverter(typeof(JsonSizeConverter))]
         public Size GridSize { get; set; } = new Size(0, 0);
     }
 }
\ No newline at end of file
diff --git a/Models/TileModel.cs b/Models/TileModel.cs
index 72f8411..9e47756 100644
--- a/Models/TileModel.cs
+++ b/Models/TileModel.cs
@@ -1,21 +1,31 @@
-using System;
+using FizzyLauncher.Text.Json;
+using System;
 using System.Collections.Generic;
 using System.Diagnostics;
 using System.Drawing;
+using System.Text.Json.Serialization;
 
 namespace FizzyLauncher.Models
 {
     public class TileModel
     {
         public string Title { get; set; }
+
         public string ProcessFilename { get; set; }
+
         public string ProcessArgument { get; set; }
+
         public string ProcessWorkingDirectory { get; set; }
+
         public ProcessWindowStyle ProcessWindowStyle { get; set; } = ProcessWindowStyle.Normal;
+
         public bool ProcessAsAdmin { get; set; } = false;
+
+        [JsonConverter(typeof(JsonPointConverter))]
         public Point Position { get; set; }
 
         public bool IsGroup { get; set; } = false;
+
         public List<TileModel> Items { get; set; } = new List<TileModel>();
 
         public override string ToString() => this.Title ?? string.Empty;