diff --git a/FizzyLauncher.UI/FizzyLauncher.UI.csproj b/FizzyLauncher.UI/FizzyLauncher.UI.csproj index 34ecce2..7334c5e 100644 --- a/FizzyLauncher.UI/FizzyLauncher.UI.csproj +++ b/FizzyLauncher.UI/FizzyLauncher.UI.csproj @@ -229,5 +229,20 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/FizzyLauncher.UI/Properties/Resources20.Designer.cs b/FizzyLauncher.UI/Properties/Resources20.Designer.cs index 8614271..017f654 100644 --- a/FizzyLauncher.UI/Properties/Resources20.Designer.cs +++ b/FizzyLauncher.UI/Properties/Resources20.Designer.cs @@ -80,6 +80,46 @@ namespace AppLauncher.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap close3 { + get { + object obj = ResourceManager.GetObject("close3", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap empty { + get { + object obj = ResourceManager.GetObject("empty", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap empty2 { + get { + object obj = ResourceManager.GetObject("empty2", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap empty3 { + get { + object obj = ResourceManager.GetObject("empty3", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// @@ -129,5 +169,15 @@ namespace AppLauncher.Properties { return ((System.Drawing.Bitmap)(obj)); } } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap minimise3 { + get { + object obj = ResourceManager.GetObject("minimise3", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } } } diff --git a/FizzyLauncher.UI/Properties/Resources20.resx b/FizzyLauncher.UI/Properties/Resources20.resx index ec8e6d8..9a0d447 100644 --- a/FizzyLauncher.UI/Properties/Resources20.resx +++ b/FizzyLauncher.UI/Properties/Resources20.resx @@ -124,6 +124,18 @@ ..\Resources\20\close2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\20\close3.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\20\empty.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\20\empty2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\20\empty3.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Resources\20\maximise.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -139,4 +151,7 @@ ..\Resources\20\minimise2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\20\minimise3.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/FizzyLauncher.UI/Resources/20/close.png b/FizzyLauncher.UI/Resources/20/close.png index a1cfe41..fb4f049 100644 Binary files a/FizzyLauncher.UI/Resources/20/close.png and b/FizzyLauncher.UI/Resources/20/close.png differ diff --git a/FizzyLauncher.UI/Resources/20/close2.png b/FizzyLauncher.UI/Resources/20/close2.png index 14e88b0..e2a3277 100644 Binary files a/FizzyLauncher.UI/Resources/20/close2.png and b/FizzyLauncher.UI/Resources/20/close2.png differ diff --git a/FizzyLauncher.UI/Resources/20/close3.png b/FizzyLauncher.UI/Resources/20/close3.png new file mode 100644 index 0000000..14e88b0 Binary files /dev/null and b/FizzyLauncher.UI/Resources/20/close3.png differ diff --git a/FizzyLauncher.UI/Resources/20/empty.png b/FizzyLauncher.UI/Resources/20/empty.png new file mode 100644 index 0000000..8b7e377 Binary files /dev/null and b/FizzyLauncher.UI/Resources/20/empty.png differ diff --git a/FizzyLauncher.UI/Resources/20/empty2.png b/FizzyLauncher.UI/Resources/20/empty2.png new file mode 100644 index 0000000..61de605 Binary files /dev/null and b/FizzyLauncher.UI/Resources/20/empty2.png differ diff --git a/FizzyLauncher.UI/Resources/20/empty3.png b/FizzyLauncher.UI/Resources/20/empty3.png new file mode 100644 index 0000000..b98cb46 Binary files /dev/null and b/FizzyLauncher.UI/Resources/20/empty3.png differ diff --git a/FizzyLauncher.UI/Resources/20/maximise.png b/FizzyLauncher.UI/Resources/20/maximise.png index 9dc88fb..b2e90e2 100644 Binary files a/FizzyLauncher.UI/Resources/20/maximise.png and b/FizzyLauncher.UI/Resources/20/maximise.png differ diff --git a/FizzyLauncher.UI/Resources/20/maximise2.png b/FizzyLauncher.UI/Resources/20/maximise2.png index 490190a..4c4c813 100644 Binary files a/FizzyLauncher.UI/Resources/20/maximise2.png and b/FizzyLauncher.UI/Resources/20/maximise2.png differ diff --git a/FizzyLauncher.UI/Resources/20/maximise3.png b/FizzyLauncher.UI/Resources/20/maximise3.png index fa1dcec..77ae4ee 100644 Binary files a/FizzyLauncher.UI/Resources/20/maximise3.png and b/FizzyLauncher.UI/Resources/20/maximise3.png differ diff --git a/FizzyLauncher.UI/Resources/20/minimise.png b/FizzyLauncher.UI/Resources/20/minimise.png index ee67015..338d63d 100644 Binary files a/FizzyLauncher.UI/Resources/20/minimise.png and b/FizzyLauncher.UI/Resources/20/minimise.png differ diff --git a/FizzyLauncher.UI/Resources/20/minimise2.png b/FizzyLauncher.UI/Resources/20/minimise2.png index c1221e3..f7b44a8 100644 Binary files a/FizzyLauncher.UI/Resources/20/minimise2.png and b/FizzyLauncher.UI/Resources/20/minimise2.png differ diff --git a/FizzyLauncher.UI/Resources/20/minimise3.png b/FizzyLauncher.UI/Resources/20/minimise3.png new file mode 100644 index 0000000..2174ece Binary files /dev/null and b/FizzyLauncher.UI/Resources/20/minimise3.png differ diff --git a/FizzyLauncher.UI/RyzStudio/Windows/Forms/TForm.cs b/FizzyLauncher.UI/RyzStudio/Windows/Forms/TForm.cs index 5e172fa..2c73278 100644 --- a/FizzyLauncher.UI/RyzStudio/Windows/Forms/TForm.cs +++ b/FizzyLauncher.UI/RyzStudio/Windows/Forms/TForm.cs @@ -1,36 +1,54 @@ -using System; +using RyzStudio.Windows.Forms; +using System; using System.ComponentModel; using System.Drawing; using System.Windows.Forms; +using Resources = AppLauncher.Properties.Resources20; namespace AppLauncher.Windows.Forms { public class TForm : Form { - protected readonly Color borderColour = Color.FromArgb(232, 231, 236); + protected readonly Color borderColour = Color.FromArgb(235, 234, 233); protected readonly int borderWidth = 1; - protected readonly Color backColour = Color.FromArgb(254, 254, 254); + protected readonly int resizeBorderWidth = 3; - protected readonly Color titleBarColour = Color.FromArgb(237, 240, 247); - protected readonly Color titleBorderColour = Color.FromArgb(232, 231, 236); - protected readonly Color titleColour = Color.FromArgb(32, 32, 33); - protected readonly int titleBarHeight = 56; + protected readonly Color backColour = Color.FromArgb(255, 255, 255); - private bool isDragging = false; - private Point startPosition = new Point(); + 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 = 54; + protected Font titleFont = null; + protected int titleFontTop = 0; + + protected readonly int titleBarIconSize = 20; + protected readonly int titleBarIconMargin = 8; + + protected bool isDragging = false; + protected Point startPosition = new Point(); + protected Point startWindowSize = new Point(); protected bool isBusy = false; - protected internal RyzStudio.Windows.Forms.TImageBox imageBox3; - protected internal RyzStudio.Windows.Forms.TImageBox imageBox2; - protected internal RyzStudio.Windows.Forms.TImageBox imageBox1; - private NotifyIcon notifyIcon1; - private Panel panel1; - private ContextMenuStrip contextMenuStrip1; - private ToolStripMenuItem exitToolStripMenuItem; + protected Image appIcon = null; + protected int appIconTop = 0; + + protected bool isMinimiseEnabled = true; + protected bool isMaximiseEnabled = true; + protected bool closeOnMinimise = false; + protected bool enableMinimiseMenu = true; + protected bool enableMaximiseMenu = true; + protected bool enableCloseMenu = true; + + protected MouseEventHandler minimiseMenuEvent = null; + protected MouseEventHandler maximiseMenuEvent = null; + protected MouseEventHandler closeMenuEvent = null; + private IContainer components; + public TForm() : base() { InitializeComponent(); @@ -41,42 +59,29 @@ namespace AppLauncher.Windows.Forms this.StartPosition = FormStartPosition.Manual; } + this.AutoScaleMode = AutoScaleMode.None; this.BackColor = backColour; this.Padding = new Padding(0); + this.DoubleBuffered = true; - notifyIcon1.Text = Application.ProductName; + 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.SuspendLayout(); + this.Text = Application.ProductName; - imageBox3.Left = this.DisplayRectangle.Width - imageBox3.Width - 17; - imageBox3.Top = 18; - imageBox3.Anchor = (AnchorStyles.Top | AnchorStyles.Right); + initialiseLoadComponent(); - imageBox2.Left = imageBox3.Left - imageBox2.Width - 8; - imageBox2.Top = 18; - imageBox2.Anchor = (AnchorStyles.Top | AnchorStyles.Right); + 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; - imageBox1.Left = imageBox2.Left - imageBox1.Width - 8; - imageBox1.Top = 18; - imageBox1.Anchor = (AnchorStyles.Top | AnchorStyles.Right); - - panel1.Left = this.DisplayRectangle.Left; - panel1.Top = this.DisplayRectangle.Height - panel1.Height; - panel1.Width = this.DisplayRectangle.Width; - panel1.Anchor = (AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Bottom); - - if (this.DesignMode) - { - imageBox1.Visible = imageBox2.Visible = imageBox3.Visible = false; - panel1.Visible = false; - } - - this.ResumeLayout(); } protected override void OnMouseClick(MouseEventArgs e) @@ -112,40 +117,6 @@ namespace AppLauncher.Windows.Forms } } - protected override void OnMouseDown(MouseEventArgs e) - { - base.OnMouseDown(e); - - if (e.Button != MouseButtons.Left) - { - return; - } - - 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 = validateFormLocation(x, 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); @@ -158,13 +129,15 @@ namespace AppLauncher.Windows.Forms area.Inflate((-1 * borderWidth), (-1 * borderWidth)); - g.FillRectangle(new SolidBrush(titleBarColour), area.X, area.Y, (area.Width + area.X), titleBarHeight); + g.FillRectangle(new SolidBrush(titleBackColour), area.X, area.Y, (area.Width + area.X), titleBarHeight); g.DrawLine(new Pen(titleBorderColour, 1), area.X, (titleBarHeight + 1), (area.Width + area.X), (titleBarHeight + 1)); - if (!DesignMode) g.DrawImageUnscaled(this.AppIcon, 17, 13); - - if (!DesignMode) TextRenderer.DrawText(g, Application.ProductName, new Font(this.Font.FontFamily, 14F), new Point(58, 17), titleColour); + if (!DesignMode) + { + g.DrawImageUnscaled(appIcon, 17, appIconTop); + TextRenderer.DrawText(g, this.Text, titleFont, new Point(58, titleFontTop), titleColour); + } } protected override void OnResize(EventArgs e) @@ -186,224 +159,313 @@ namespace AppLauncher.Windows.Forms [Category("Appearance")] public ContextMenuStrip TitleContextMenuStrip { get; set; } = null; - [Browsable(false)] - public Image AppIcon { get; set; } = null; + //[Browsable(false)] + //public Image AppIcon { get; set; } = null; - protected Point DefaultLocation - { - get - { - Point newPosition = new Point(Cursor.Position.X, Cursor.Position.Y); - newPosition.X -= (this.Width / 2); - newPosition.Y -= (this.Height / 2); + //[Browsable(false)] + //public bool IsMaximiseEnabled { get; set; } = false; - newPosition.X = Math.Max(newPosition.X, Screen.PrimaryScreen.WorkingArea.Left); - newPosition.Y = Math.Max(newPosition.Y, Screen.PrimaryScreen.WorkingArea.Top); + //protected Point DefaultLocation + //{ + // get + // { + // Point newPosition = new Point(Cursor.Position.X, Cursor.Position.Y); + // newPosition.X -= (this.Width / 2); + // newPosition.Y -= (this.Height / 2); - return newPosition; - } - } + // 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.imageBox3 = new RyzStudio.Windows.Forms.TImageBox(); - this.imageBox2 = new RyzStudio.Windows.Forms.TImageBox(); - this.imageBox1 = new RyzStudio.Windows.Forms.TImageBox(); - this.notifyIcon1 = new System.Windows.Forms.NotifyIcon(this.components); - this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); - this.exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.panel1 = new System.Windows.Forms.Panel(); - ((System.ComponentModel.ISupportInitialize)(this.imageBox3)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.imageBox2)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.imageBox1)).BeginInit(); - this.contextMenuStrip1.SuspendLayout(); this.SuspendLayout(); // - // imageBox3 - // - this.imageBox3.BackColor = System.Drawing.Color.Transparent; - this.imageBox3.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center; - this.imageBox3.ErrorImage = null; - this.imageBox3.Image = global::AppLauncher.Properties.Resources20.close; - this.imageBox3.ImageHover = global::AppLauncher.Properties.Resources20.close2; - this.imageBox3.ImageNormal = global::AppLauncher.Properties.Resources20.close; - this.imageBox3.ImageSelected = null; - this.imageBox3.InitialImage = null; - this.imageBox3.IsSelected = false; - this.imageBox3.Location = new System.Drawing.Point(169, 12); - this.imageBox3.Name = "imageBox3"; - this.imageBox3.Size = new System.Drawing.Size(20, 20); - this.imageBox3.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; - this.imageBox3.TabIndex = 146; - this.imageBox3.TabStop = false; - this.imageBox3.MouseClick += new System.Windows.Forms.MouseEventHandler(this.imageBox3_MouseClick); - // - // imageBox2 - // - this.imageBox2.BackColor = System.Drawing.Color.Transparent; - this.imageBox2.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center; - this.imageBox2.ErrorImage = null; - this.imageBox2.Image = global::AppLauncher.Properties.Resources20.maximise; - this.imageBox2.ImageHover = global::AppLauncher.Properties.Resources20.maximise; - this.imageBox2.ImageNormal = global::AppLauncher.Properties.Resources20.maximise; - this.imageBox2.ImageSelected = global::AppLauncher.Properties.Resources20.maximise2; - this.imageBox2.InitialImage = null; - this.imageBox2.IsSelected = false; - this.imageBox2.Location = new System.Drawing.Point(139, 12); - this.imageBox2.Name = "imageBox2"; - this.imageBox2.Size = new System.Drawing.Size(20, 20); - this.imageBox2.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; - this.imageBox2.TabIndex = 147; - this.imageBox2.TabStop = false; - this.imageBox2.MouseClick += new System.Windows.Forms.MouseEventHandler(this.imageBox2_MouseClick); - // - // imageBox1 - // - this.imageBox1.BackColor = System.Drawing.Color.Transparent; - this.imageBox1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center; - this.imageBox1.ErrorImage = null; - this.imageBox1.Image = global::AppLauncher.Properties.Resources20.minimise; - this.imageBox1.ImageHover = global::AppLauncher.Properties.Resources20.minimise2; - this.imageBox1.ImageNormal = global::AppLauncher.Properties.Resources20.minimise; - this.imageBox1.ImageSelected = null; - this.imageBox1.InitialImage = null; - this.imageBox1.IsSelected = false; - this.imageBox1.Location = new System.Drawing.Point(109, 12); - this.imageBox1.Name = "imageBox1"; - this.imageBox1.Size = new System.Drawing.Size(20, 20); - this.imageBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; - this.imageBox1.TabIndex = 148; - this.imageBox1.TabStop = false; - this.imageBox1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.imageBox1_MouseClick); - // - // notifyIcon1 - // - this.notifyIcon1.ContextMenuStrip = this.contextMenuStrip1; - this.notifyIcon1.Icon = ((System.Drawing.Icon)(resources.GetObject("notifyIcon1.Icon"))); - this.notifyIcon1.Visible = true; - this.notifyIcon1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.notifyIcon1_MouseClick); - this.notifyIcon1.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.notifyIcon1_MouseClick); - // - // contextMenuStrip1 - // - this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.exitToolStripMenuItem}); - this.contextMenuStrip1.Name = "contextMenuStrip1"; - this.contextMenuStrip1.Size = new System.Drawing.Size(94, 26); - // - // exitToolStripMenuItem - // - this.exitToolStripMenuItem.Name = "exitToolStripMenuItem"; - this.exitToolStripMenuItem.Size = new System.Drawing.Size(93, 22); - this.exitToolStripMenuItem.Text = "E&xit"; - this.exitToolStripMenuItem.Click += new System.EventHandler(this.exitToolStripMenuItem_Click); - // - // panel1 - // - this.panel1.BackColor = System.Drawing.Color.Transparent; - this.panel1.Cursor = System.Windows.Forms.Cursors.SizeNS; - this.panel1.Location = new System.Drawing.Point(109, 114); - this.panel1.Margin = new System.Windows.Forms.Padding(0); - this.panel1.Name = "panel1"; - this.panel1.Size = new System.Drawing.Size(200, 2); - this.panel1.TabIndex = 149; - 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); - // // AForm // - this.ClientSize = new System.Drawing.Size(421, 321); - this.Controls.Add(this.panel1); - this.Controls.Add(this.imageBox1); - this.Controls.Add(this.imageBox2); - this.Controls.Add(this.imageBox3); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; - this.Name = "AForm"; - ((System.ComponentModel.ISupportInitialize)(this.imageBox3)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.imageBox2)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.imageBox1)).EndInit(); - this.contextMenuStrip1.ResumeLayout(false); + this.Name = "Form"; this.ResumeLayout(false); - } - private void imageBox1_MouseClick(object sender, MouseEventArgs e) - { - if (e.Button == MouseButtons.Left) - { - //this.WindowState = FormWindowState.Minimized; - this.Visible = false; - //notifyIcon1.Visible = true; - } - } - - private void imageBox2_MouseClick(object sender, MouseEventArgs e) - { - if (e.Button == MouseButtons.Left) - { - //this.WindowState = ((this.WindowState == FormWindowState.Maximized) ? FormWindowState.Normal : FormWindowState.Maximized); - - //imageBox2.IsSelected = (this.WindowState == FormWindowState.Maximized); - } - else if (e.Button == MouseButtons.Right) - { - this.TopMost = !this.TopMost; - - if (this.TopMost) - { - imageBox2.Image = imageBox2.ImageNormal = Properties.Resources20.maximise3; - } - else - { - imageBox2.Image = imageBox2.ImageNormal = Properties.Resources20.maximise; - } - } - } - - protected virtual void imageBox3_MouseClick(object sender, MouseEventArgs e) - { - if (e.Button == MouseButtons.Left) - { - this.Close(); - } - } - - private void panel1_MouseDown(object sender, MouseEventArgs e) + 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 panel1_MouseUp(object sender, MouseEventArgs e) + 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 panel1_MouseMove(object sender, MouseEventArgs e) + private void form_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) { - if (isDragging) + if (e.KeyCode == Keys.Escape) { - this.Size = new Size(this.Width, e.Y - startPosition.Y + this.Height); + Application.Exit(); } } - private void exitToolStripMenuItem_Click(object sender, EventArgs e) => this.Close(); - - private void notifyIcon1_MouseClick(object sender, MouseEventArgs e) + protected virtual void initialiseLoadComponent() { - if (e.Button == MouseButtons.Left) + if (DesignMode) return; + + // close + TImageBox closeBox = generateToolbarImageBox(); + if (enableCloseMenu) { - this.Visible = !this.Visible; + closeBox.Image = closeBox.ImageNormal = Resources.close; + closeBox.ImageHover = Resources.close3; + //closeBox.ImageSelected = null; + closeBox.MouseClick += delegate (object sender, MouseEventArgs e) + { + if (e.Button != MouseButtons.Left) return; + + if (closeMenuEvent != null) + { + closeMenuEvent(sender, e); + return; + } + + this.Close(); + }; + } + else + { + closeBox.Image = closeBox.ImageNormal = closeBox.ImageHover = closeBox.ImageSelected = Resources.close; } - //notifyIcon1.Visible = !this.Visible; + closeBox.Left = this.DisplayRectangle.Width - closeBox.Width - 17; + + this.Controls.Add(closeBox); + + // maximise + TImageBox maximiseBox = generateToolbarImageBox(); + if (enableMaximiseMenu) + { + maximiseBox.Image = maximiseBox.ImageNormal = (isMaximiseEnabled) ? Resources.maximise : Resources.empty; + maximiseBox.ImageHover = (isMaximiseEnabled) ? Resources.maximise2 : Resources.empty; + maximiseBox.ImageSelected = Resources.maximise3; + maximiseBox.MouseClick += delegate (object sender, MouseEventArgs e) + { + if (!(sender is TImageBox)) return; + + TImageBox imageBox2 = (sender as TImageBox); + + if (imageBox2 == null) return; + + if (maximiseMenuEvent != null) + { + maximiseMenuEvent(sender, e); + return; + } + + if (e.Button == MouseButtons.Left) + { + if (isMaximiseEnabled) + { + if (this.WindowState == FormWindowState.Maximized) + { + this.WindowState = FormWindowState.Normal; + imageBox2.Image = imageBox2.ImageNormal = Resources.maximise; + } + else + { + this.WindowState = FormWindowState.Maximized; + imageBox2.Image = imageBox2.ImageNormal = Resources.maximise2; + } + } + } + else if (e.Button == MouseButtons.Right) + { + this.TopMost = !this.TopMost; + + if (this.TopMost) + { + imageBox2.Image = imageBox2.ImageNormal = Resources.maximise3; + imageBox2.ImageHover = (isMaximiseEnabled) ? Resources.maximise2 : Resources.maximise3; + } + else + { + imageBox2.Image = imageBox2.ImageNormal = (isMaximiseEnabled) ? Resources.maximise : Resources.empty; + imageBox2.ImageHover = (isMaximiseEnabled) ? Resources.maximise2 : Resources.empty; + } + } + }; + } + else + { + maximiseBox.Image = maximiseBox.ImageNormal = maximiseBox.ImageHover = maximiseBox.ImageSelected = Resources.maximise; + } + + maximiseBox.Left = closeBox.Left - maximiseBox.Width - titleBarIconMargin; + + this.Controls.Add(maximiseBox); + + // minimise + TImageBox minimiseBox = generateToolbarImageBox(); + if (enableMinimiseMenu) + { + minimiseBox.Image = minimiseBox.ImageNormal = (isMinimiseEnabled) ? Resources.minimise : Resources.empty; + minimiseBox.ImageHover = (isMinimiseEnabled) ? Resources.minimise2 : Resources.empty; + //minimiseBox.ImageSelected = null; + minimiseBox.MouseClick += delegate (object sender, MouseEventArgs e) + { + if (!isMinimiseEnabled) return; + if (e.Button != MouseButtons.Left) return; + + if (minimiseMenuEvent != null) + { + minimiseMenuEvent(sender, e); + return; + } + + if (closeOnMinimise) + { + this.Close(); + } + else + { + this.WindowState = FormWindowState.Minimized; + } + }; + } + else + { + minimiseBox.Image = minimiseBox.ImageNormal = minimiseBox.ImageHover = minimiseBox.ImageSelected = Resources.minimise; + } + + 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.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 = new System.Drawing.Size(titleBarIconSize, 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) / 2); + imageBox.Anchor = (AnchorStyles.Top | AnchorStyles.Right); + + 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/MainForm.Designer.cs b/MainForm.Designer.cs index e535976..8a17426 100644 --- a/MainForm.Designer.cs +++ b/MainForm.Designer.cs @@ -47,35 +47,18 @@ 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.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel(); this.saveFileDialog1 = new System.Windows.Forms.SaveFileDialog(); this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog(); - this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); - ((System.ComponentModel.ISupportInitialize)(this.imageBox3)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.imageBox2)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.imageBox1)).BeginInit(); + 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.contextMenuStrip1.SuspendLayout(); + this.contextMenuStrip2.SuspendLayout(); this.SuspendLayout(); // - // imageBox3 - // - this.imageBox3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.imageBox3.Image = ((System.Drawing.Image)(resources.GetObject("imageBox3.Image"))); - this.imageBox3.Location = new System.Drawing.Point(-71, 18); - // - // imageBox2 - // - this.imageBox2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.imageBox2.Image = ((System.Drawing.Image)(resources.GetObject("imageBox2.Image"))); - this.imageBox2.Location = new System.Drawing.Point(-99, 18); - // - // imageBox1 - // - this.imageBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.imageBox1.Image = ((System.Drawing.Image)(resources.GetObject("imageBox1.Image"))); - this.imageBox1.Location = new System.Drawing.Point(-127, 18); - // // contextMenuStrip1 // this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { @@ -84,7 +67,7 @@ this.toolStripMenuItem9, this.helpToolStripMenuItem}); this.contextMenuStrip1.Name = "contextMenuStrip1"; - this.contextMenuStrip1.Size = new System.Drawing.Size(181, 114); + this.contextMenuStrip1.Size = new System.Drawing.Size(102, 92); this.contextMenuStrip1.Opening += new System.ComponentModel.CancelEventHandler(this.contextMenuStrip1_Opening); // // toolStripMenuItem4 @@ -100,7 +83,7 @@ this.toolStripMenuItem10, this.exitToolStripMenuItem}); this.toolStripMenuItem4.Name = "toolStripMenuItem4"; - this.toolStripMenuItem4.Size = new System.Drawing.Size(180, 22); + this.toolStripMenuItem4.Size = new System.Drawing.Size(101, 22); this.toolStripMenuItem4.Text = "&File"; // // toolStripMenuItem5 @@ -165,7 +148,7 @@ this.toolStripMenuItem3.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.toolStripMenuItem1}); this.toolStripMenuItem3.Name = "toolStripMenuItem3"; - this.toolStripMenuItem3.Size = new System.Drawing.Size(180, 22); + this.toolStripMenuItem3.Size = new System.Drawing.Size(101, 22); this.toolStripMenuItem3.Text = "&View"; // // toolStripMenuItem1 @@ -180,7 +163,7 @@ this.toolStripMenuItem9.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.optionToolStripMenuItem}); this.toolStripMenuItem9.Name = "toolStripMenuItem9"; - this.toolStripMenuItem9.Size = new System.Drawing.Size(180, 22); + this.toolStripMenuItem9.Size = new System.Drawing.Size(101, 22); this.toolStripMenuItem9.Text = "&Tools"; // // optionToolStripMenuItem @@ -197,20 +180,25 @@ this.toolStripSeparator1, this.aboutToolStripMenuItem}); this.helpToolStripMenuItem.Name = "helpToolStripMenuItem"; - this.helpToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + 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(180, 22); + 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(180, 22); + this.aboutToolStripMenuItem.Size = new System.Drawing.Size(127, 22); this.aboutToolStripMenuItem.Text = "&About"; this.aboutToolStripMenuItem.Click += new System.EventHandler(this.aboutToolStripMenuItem_Click); // @@ -239,10 +227,27 @@ this.openFileDialog1.Filter = "Session files|*.jsonfig"; this.openFileDialog1.Title = "Choose session file"; // - // toolStripSeparator1 + // notifyIcon1 // - this.toolStripSeparator1.Name = "toolStripSeparator1"; - this.toolStripSeparator1.Size = new System.Drawing.Size(177, 6); + 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(181, 48); + // + // exitToolStripMenuItem1 + // + this.exitToolStripMenuItem1.Name = "exitToolStripMenuItem1"; + this.exitToolStripMenuItem1.Size = new System.Drawing.Size(180, 22); + this.exitToolStripMenuItem1.Text = "E&xit"; + this.exitToolStripMenuItem1.Click += new System.EventHandler(this.exitToolStripMenuItem1_Click); // // MainForm // @@ -252,20 +257,13 @@ this.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None; this.ClientSize = new System.Drawing.Size(633, 400); this.Controls.Add(this.flowLayoutPanel1); - this.DoubleBuffered = true; this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.MinimumSize = new System.Drawing.Size(633, 280); this.Name = "MainForm"; this.Text = "Launcher"; this.TitleContextMenuStrip = this.contextMenuStrip1; - this.Controls.SetChildIndex(this.flowLayoutPanel1, 0); - this.Controls.SetChildIndex(this.imageBox3, 0); - this.Controls.SetChildIndex(this.imageBox2, 0); - this.Controls.SetChildIndex(this.imageBox1, 0); - ((System.ComponentModel.ISupportInitialize)(this.imageBox3)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.imageBox2)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.imageBox1)).EndInit(); this.contextMenuStrip1.ResumeLayout(false); + this.contextMenuStrip2.ResumeLayout(false); this.ResumeLayout(false); } @@ -293,6 +291,9 @@ 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; } } diff --git a/MainForm.cs b/MainForm.cs index a5fd747..01a34f2 100644 --- a/MainForm.cs +++ b/MainForm.cs @@ -29,13 +29,19 @@ namespace AppLauncher protected OptionsForm optionsForm = null; protected string sessionFilename = null; + protected bool requestExit = false; public MainForm() : base() { InitializeComponent(); - this.AppIcon = Properties.Resources.app_icon_32; + notifyIcon1.Text = Application.ProductName; + this.StartPosition = FormStartPosition.WindowsDefaultBounds; + + appIcon = Properties.Resources.app_icon_32; + enableMaximiseMenu = false; + closeOnMinimise = true; } protected override void OnLoad(EventArgs e) @@ -67,6 +73,15 @@ namespace AppLauncher 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 @@ -243,7 +258,11 @@ namespace AppLauncher private void toolStripMenuItem1_Click(object sender, EventArgs e) => this.TopMost = !this.TopMost; - private void exitToolStripMenuItem_Click(object sender, EventArgs e) => this.Close(); + private void exitToolStripMenuItem_Click(object sender, EventArgs e) + { + requestExit = true; + this.Close(); + } private void optionToolStripMenuItem_Click(object sender, EventArgs e) { @@ -253,28 +272,6 @@ namespace AppLauncher invalidateHotKey(); } - protected override void imageBox3_MouseClick(object sender, MouseEventArgs e) - { - if (e.Button == MouseButtons.Left) - { - if (this.CurrentSession == null) - { - this.Close(); - } - else - { - if (this.CurrentSession.HideOnClose) - { - this.Visible = !this.Visible; - } - else - { - this.Close(); - } - } - } - } - protected async Task collapseWindow(int width, int increment = 6) { await Task.Run(() => @@ -542,5 +539,19 @@ namespace AppLauncher 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(); + } + } } diff --git a/MainForm.resx b/MainForm.resx index 98f90b3..12b1ad5 100644 --- a/MainForm.resx +++ b/MainForm.resx @@ -117,36 +117,6 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - wwAADsMBx2+oZAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAD9SURBVDhP1ZVN - CsIwEIWz0hMoehX1fv4s3Ui1ScTlpHXpBdyJKwsKuq7XqJl0HLREobEbHzx4mUk+WhqmYj7ftVc6mcXa - 3GNliiCXZ6cA0BIO5tsU5ol4PtlSmYEIVLxOhwTMBYWCesFizv8CbW1vfVxstl0qCcxYwx6VWMhAfwRK - BYeyBxmCShhkWMMebWMxh0NFSkFnpcypBJhrrJIz5YvW0KNtLOZw8MhBJTiQszQ3HwzFHA4eVYFSwi2K - 0j6138QcDhV9e2UflDkcKmr8o9has9emrv4J+BysdgRRr7bsdRoR0I2vKS1+ttTJ2P0C7AKh+WuzpvHs - BABaDyfvLuW63njGAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - wwAADsMBx2+oZAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAACTSURBVDhPY5g0 - aRv77PlruubMX/1szrzV/8nCEL2dq1atYmMAG4ZNEXm4gwHmslnzVlsxkAnmLFhrDTXwKQOU8R8qRzaA - m0MXA4H8wzBxPPgwVDkYwMTpYyA5YNTAUQPJAEPJQFjBCiyCoHIkg7lzV9lADQQXX51QDsV47vw17eAq - AMgBGfoUWZJEDNLbsWrVKjYA+HjZeiQ05EUAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - wwAADsMBx2+oZAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAACTSURBVDhPY5g0 - aRv77PlruubMX/1szrzV/8nCEL2dq1atYmMAG4ZNEXm4gwHmslnzVlsxkAnmLFhrDTXwKQOU8R8qRzaA - mzNqINlg1MChZiCQfxgmjgcfhioHA5g4fQwkB9DQQFjBCiyCoHIkg7lzV9lADQQXX51QDsV47vw17eAq - AMgBGfoUWZJEDNLbsWrVKjYA+QjZeove9ZMAAAAASUVORK5CYII= - - 17, 17 @@ -156,6 +126,310 @@ 308, 17 + + 448, 17 + + + 561, 17 + + + + + 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== + + AAABAAQAMDAAAAEAIACoJQAARgAAACAgAAABACAAqBAAAO4lAAAYGAAAAQAgAIgJAACWNgAAEBAAAAEA diff --git a/Properties/AssemblyInfo.cs b/Properties/AssemblyInfo.cs index 735590f..5fb28ec 100644 --- a/Properties/AssemblyInfo.cs +++ b/Properties/AssemblyInfo.cs @@ -33,4 +33,4 @@ using System.Runtime.InteropServices; // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("0.1.1.113")] +[assembly: AssemblyFileVersion("0.1.1.144")]