From 9ff59e15a4211b6bfc6e4ea1c6f86952d4f27674 Mon Sep 17 00:00:00 2001 From: Belim Date: Wed, 30 Oct 2024 21:33:40 +0100 Subject: [PATCH] Init-0.14 --- FlybyScript/AppIcon.ico | Bin 36534 -> 1396 bytes FlybyScript/AppIcon.png | Bin 0 -> 2447 bytes FlybyScript/Experience/ActivityHistory.cs | 71 +++ FlybyScript/Experience/FeaturePanel.cs | 6 +- FlybyScript/Experience/LocationTracking.cs | 69 ++ FlybyScript/FlybyScript.csproj | 12 +- FlybyScript/MainForm.Designer.cs | 71 +-- FlybyScript/MainForm.cs | 137 ++-- FlybyScript/MainForm.resx | 633 +------------------ FlybyScript/Patcher/ScriptPatcher.cs | 2 +- FlybyScript/PluginsForm.Designer.cs | 217 +++++++ FlybyScript/PluginsForm.cs | 220 +++++++ FlybyScript/PluginsForm.resx | 120 ++++ FlybyScript/Properties/AssemblyInfo.cs | 4 +- FlybyScript/USBManagement.cs | 51 +- FlybyScript/Views/ExperienceView.Designer.cs | 4 +- FlybyScript/Views/ExperienceView.cs | 3 +- FlybyScript/Views/MediaView.Designer.cs | 258 +++++--- FlybyScript/Views/MediaView.cs | 83 ++- FlybyScript/Views/MediaView.resx | 6 + 20 files changed, 1152 insertions(+), 815 deletions(-) create mode 100644 FlybyScript/AppIcon.png create mode 100644 FlybyScript/Experience/ActivityHistory.cs create mode 100644 FlybyScript/Experience/LocationTracking.cs create mode 100644 FlybyScript/PluginsForm.Designer.cs create mode 100644 FlybyScript/PluginsForm.cs create mode 100644 FlybyScript/PluginsForm.resx diff --git a/FlybyScript/AppIcon.ico b/FlybyScript/AppIcon.ico index fe67c5fe02112c7cce9a9810b6463c162d55f61a..55de7fdf2ecfc89de484d587cc0e85b2d76fefa5 100644 GIT binary patch literal 1396 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 + Component - + @@ -81,6 +82,12 @@ MainForm.cs + + Form + + + PluginsForm.cs + @@ -104,6 +111,9 @@ MainForm.cs Designer + + PluginsForm.cs + ResXFileCodeGenerator Resources.Designer.cs diff --git a/FlybyScript/MainForm.Designer.cs b/FlybyScript/MainForm.Designer.cs index 25c4c51..c57eb2b 100644 --- a/FlybyScript/MainForm.Designer.cs +++ b/FlybyScript/MainForm.Designer.cs @@ -29,7 +29,6 @@ private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm)); - this.treeSettings = new System.Windows.Forms.TreeView(); this.rtbDescription = new System.Windows.Forms.RichTextBox(); this.btnTogglePatch = new System.Windows.Forms.Button(); this.linkGitHub = new System.Windows.Forms.LinkLabel(); @@ -38,6 +37,7 @@ this.linkLabel1 = new System.Windows.Forms.LinkLabel(); this.linkLabel2 = new System.Windows.Forms.LinkLabel(); this.panelMain = new System.Windows.Forms.Panel(); + this.treeSettings = new System.Windows.Forms.TreeView(); this.checkInstallationMedia = new System.Windows.Forms.CheckBox(); this.linkChangeExperience = new System.Windows.Forms.LinkLabel(); this.panelForm = new System.Windows.Forms.Panel(); @@ -45,31 +45,6 @@ this.panelForm.SuspendLayout(); this.SuspendLayout(); // - // treeSettings - // - this.treeSettings.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.treeSettings.BackColor = System.Drawing.Color.White; - this.treeSettings.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.treeSettings.CheckBoxes = true; - this.treeSettings.Font = new System.Drawing.Font("Segoe UI Variable Text Light", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.treeSettings.ForeColor = System.Drawing.Color.Black; - this.treeSettings.FullRowSelect = true; - this.treeSettings.Indent = 20; - this.treeSettings.ItemHeight = 25; - this.treeSettings.Location = new System.Drawing.Point(36, 168); - this.treeSettings.Name = "treeSettings"; - this.treeSettings.ShowLines = false; - this.treeSettings.ShowNodeToolTips = true; - this.treeSettings.ShowPlusMinus = false; - this.treeSettings.ShowRootLines = false; - this.treeSettings.Size = new System.Drawing.Size(865, 172); - this.treeSettings.TabIndex = 200; - this.treeSettings.TabStop = false; - this.treeSettings.AfterCheck += new System.Windows.Forms.TreeViewEventHandler(this.treeSettings_AfterCheck); - this.treeSettings.NodeMouseClick += new System.Windows.Forms.TreeNodeMouseClickEventHandler(this.treeSettings_NodeMouseClick); - // // rtbDescription // this.rtbDescription.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) @@ -95,7 +70,7 @@ this.btnTogglePatch.FlatAppearance.BorderSize = 2; this.btnTogglePatch.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(112)))), ((int)(((byte)(192))))); this.btnTogglePatch.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.btnTogglePatch.Font = new System.Drawing.Font("Segoe UI Variable Small", 10F); + this.btnTogglePatch.Font = new System.Drawing.Font("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.btnTogglePatch.Location = new System.Drawing.Point(629, 484); this.btnTogglePatch.Name = "btnTogglePatch"; this.btnTogglePatch.Size = new System.Drawing.Size(222, 40); @@ -133,7 +108,7 @@ this.btnMountRun.FlatAppearance.BorderSize = 2; this.btnMountRun.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(112)))), ((int)(((byte)(192))))); this.btnMountRun.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.btnMountRun.Font = new System.Drawing.Font("Segoe UI Variable Small", 10F); + this.btnMountRun.Font = new System.Drawing.Font("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.btnMountRun.Location = new System.Drawing.Point(403, 484); this.btnMountRun.Name = "btnMountRun"; this.btnMountRun.Size = new System.Drawing.Size(220, 40); @@ -149,7 +124,7 @@ | System.Windows.Forms.AnchorStyles.Right))); this.lblHeader.AutoEllipsis = true; this.lblHeader.Font = new System.Drawing.Font("Segoe UI Variable Small Light", 21.25F); - this.lblHeader.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(112)))), ((int)(((byte)(192))))); + this.lblHeader.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(35)))), ((int)(((byte)(115)))), ((int)(((byte)(193))))); this.lblHeader.Location = new System.Drawing.Point(30, 38); this.lblHeader.Name = "lblHeader"; this.lblHeader.Size = new System.Drawing.Size(780, 82); @@ -184,20 +159,20 @@ this.linkLabel2.LinkColor = System.Drawing.Color.FromArgb(((int)(((byte)(127)))), ((int)(((byte)(186)))), ((int)(((byte)(0))))); this.linkLabel2.Location = new System.Drawing.Point(233, 558); this.linkLabel2.Name = "linkLabel2"; - this.linkLabel2.Size = new System.Drawing.Size(44, 16); + this.linkLabel2.Size = new System.Drawing.Size(51, 16); this.linkLabel2.TabIndex = 208; this.linkLabel2.TabStop = true; - this.linkLabel2.Text = "0.13.81"; + this.linkLabel2.Text = "0.14.107"; // // panelMain // + this.panelMain.Controls.Add(this.treeSettings); this.panelMain.Controls.Add(this.checkInstallationMedia); this.panelMain.Controls.Add(this.linkLabel2); this.panelMain.Controls.Add(this.linkChangeExperience); this.panelMain.Controls.Add(this.lblHeader); this.panelMain.Controls.Add(this.linkLabel1); this.panelMain.Controls.Add(this.rtbDescription); - this.panelMain.Controls.Add(this.treeSettings); this.panelMain.Controls.Add(this.btnMountRun); this.panelMain.Controls.Add(this.btnTogglePatch); this.panelMain.Controls.Add(this.linkGitHub); @@ -207,14 +182,36 @@ this.panelMain.Size = new System.Drawing.Size(943, 592); this.panelMain.TabIndex = 209; // + // treeSettings + // + this.treeSettings.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.treeSettings.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.treeSettings.CheckBoxes = true; + this.treeSettings.Font = new System.Drawing.Font("Segoe UI Variable Text Light", 11.25F); + this.treeSettings.FullRowSelect = true; + this.treeSettings.HotTracking = true; + this.treeSettings.Location = new System.Drawing.Point(36, 168); + this.treeSettings.Name = "treeSettings"; + this.treeSettings.ShowLines = false; + this.treeSettings.ShowNodeToolTips = true; + this.treeSettings.ShowPlusMinus = false; + this.treeSettings.Size = new System.Drawing.Size(865, 172); + this.treeSettings.TabIndex = 210; + this.treeSettings.AfterCheck += new System.Windows.Forms.TreeViewEventHandler(this.treeSettings_AfterCheck); + this.treeSettings.NodeMouseClick += new System.Windows.Forms.TreeNodeMouseClickEventHandler(this.treeSettings_NodeMouseClick); + // // checkInstallationMedia // this.checkInstallationMedia.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); this.checkInstallationMedia.AutoSize = true; + this.checkInstallationMedia.Cursor = System.Windows.Forms.Cursors.Hand; + this.checkInstallationMedia.Font = new System.Drawing.Font("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.checkInstallationMedia.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(112)))), ((int)(((byte)(192))))); - this.checkInstallationMedia.Location = new System.Drawing.Point(34, 528); + this.checkInstallationMedia.Location = new System.Drawing.Point(34, 527); this.checkInstallationMedia.Name = "checkInstallationMedia"; - this.checkInstallationMedia.Size = new System.Drawing.Size(245, 17); + this.checkInstallationMedia.Size = new System.Drawing.Size(249, 18); this.checkInstallationMedia.TabIndex = 209; this.checkInstallationMedia.Text = "I want to create Windows 11 installation media"; this.checkInstallationMedia.UseVisualStyleBackColor = true; @@ -255,7 +252,8 @@ this.Controls.Add(this.panelForm); this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.Name = "MainForm"; - this.Text = "Flyby11"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Flyby11 Upgrading Assistant"; this.Load += new System.EventHandler(this.MainForm_Load); this.panelMain.ResumeLayout(false); this.panelMain.PerformLayout(); @@ -265,8 +263,6 @@ } #endregion - - private System.Windows.Forms.TreeView treeSettings; public System.Windows.Forms.RichTextBox rtbDescription; private System.Windows.Forms.Button btnTogglePatch; private System.Windows.Forms.LinkLabel linkGitHub; @@ -278,6 +274,7 @@ private System.Windows.Forms.LinkLabel linkChangeExperience; private System.Windows.Forms.Panel panelForm; private System.Windows.Forms.CheckBox checkInstallationMedia; + private System.Windows.Forms.TreeView treeSettings; } } diff --git a/FlybyScript/MainForm.cs b/FlybyScript/MainForm.cs index 75e4aa1..03565c0 100644 --- a/FlybyScript/MainForm.cs +++ b/FlybyScript/MainForm.cs @@ -25,6 +25,8 @@ namespace FlybyScript // Set the default view to the main panel SwitchView.DefaultView = panelMain; + // Subscribe to the AfterSelect event for importing plugins + treeSettings.AfterSelect += TreeSettings_AfterSelect; } private async void MainForm_Load(object sender, EventArgs e) @@ -34,21 +36,57 @@ namespace FlybyScript treeSettings.Nodes.Add(nativePatcherNode); // Add Method 1 as a child of NativePatcher - TreeNode method1Node = new TreeNode("(Method 1) Inplace Upgrade via Server Setup"); - method1Node.Tag = "Method1"; + TreeNode method1Node = new TreeNode("(Method 1) Inplace Upgrade via Server Setup") + { + Tag = "Method1", + BackColor = Color.LightBlue + }; nativePatcherNode.Nodes.Add(method1Node); - // Add ScriptPatcher parent node + // Load plugins await ScriptPatcher.LoadPlugins("upgraider", treeSettings.Nodes, logger); - // Add PSPatcher parent node (for Dependencies) + // Load PowerShell plugins PSPatcher = new PSPatcher(); PSPatcher.LoadPowerShellPlugins(treeSettings); + // Add the Import node at the end + TreeNode importNode = new TreeNode("Import [...]") + { + NodeFont = new Font(treeSettings.Font, FontStyle.Italic), + Checked = false, + ForeColor = Color.Black + }; + treeSettings.Nodes.Add(importNode); + // Expand all nodes ExpandAllNodes(treeSettings.Nodes); } + private void TreeSettings_AfterSelect(object sender, TreeViewEventArgs e) + { + if (e.Node.Text == "Import [...]") + { + OpenPluginsForm(); + } + } + + private void OpenPluginsForm() + { + var pluginsForm = new PluginsForm(this); + pluginsForm.ShowDialog(); + } + + // Refresh the tree view + public void RefreshTreeView() + { + treeSettings.Nodes.Clear(); + + // Reload + MainForm_Load(this, EventArgs.Empty); + } + + // Expand all nodes private void ExpandAllNodes(TreeNodeCollection nodes) { foreach (TreeNode node in nodes) @@ -58,49 +96,12 @@ namespace FlybyScript } } - private void treeSettings_AfterCheck(object sender, TreeViewEventArgs e) - { - // Check if the node's checked status has changed - if (e.Node.Checked) - { - // Add the node and set its status to true (enabled) - pendingChanges[e.Node] = true; - e.Node.BackColor = Color.LightGreen; // Mark the node as active - - // Check the type of node (either JSONPluginLoader/Patch or PowerShell script) - if (e.Node.Tag is ScriptPatcher jsonPlugin) - { - logger.Log($"Patch activated: {jsonPlugin.PlugID}", Color.Black); - } - else if (e.Node.Tag is string psScriptPath) - { - logger.Log($"PowerShell script activated: {Path.GetFileName(psScriptPath)}", Color.Black); - } - } - else - { - // Add the node and set its status to false (disabled) - pendingChanges[e.Node] = false; - e.Node.BackColor = Color.LightGray; // Mark the node as inactive - - // Check the type of node again (either JSONPluginLoader or PowerShell script) - if (e.Node.Tag is ScriptPatcher jsonPlugin) - { - logger.Log($"Patch deactivated: {jsonPlugin.PlugID}", Color.Crimson); - } - else if (e.Node.Tag is string psScriptPath) - { - logger.Log($"PowerShell script deactivated: {Path.GetFileName(psScriptPath)}", Color.Crimson); - } - } - } - private async void btnTogglePatch_Click(object sender, EventArgs e) { btnTogglePatch.Enabled = false; foreach (var entry in pendingChanges) { - var node = entry.Key; // So, The TreeNode + var node = entry.Key; // The TreeNode bool shouldApply = entry.Value; // Whether this patch should be applied (true) or undone (false) // Check if the entry is Method2 and if the patch is enabled @@ -161,6 +162,49 @@ namespace FlybyScript btnTogglePatch.Enabled = true; } + private void treeSettings_AfterCheck(object sender, TreeViewEventArgs e) + { + // Check if the node's checked status has changed + if (e.Node.Checked) + { + // Add the node and set its status to true (enabled) + pendingChanges[e.Node] = true; + e.Node.BackColor = Color.LightGreen; // Mark the node as active + + // Check the type of node (either JSONPluginLoader/Patch or PowerShell script) + if (e.Node.Tag is ScriptPatcher jsonPlugin) + { + logger.Log($"Patch activated: {jsonPlugin.PlugID}", Color.Black); + } + else if (e.Node.Tag is string psScriptPath) + { + logger.Log($"PowerShell script activated: {Path.GetFileName(psScriptPath)}", Color.Black); + } + } + else + { + // Add the node and set its status to false (disabled) + pendingChanges[e.Node] = false; + e.Node.BackColor = Color.LightGray; // Mark the node as inactive + + // Check the type of node again (either JSONPluginLoader or PowerShell script) + if (e.Node.Tag is ScriptPatcher jsonPlugin) + { + logger.Log($"Patch deactivated: {jsonPlugin.PlugID}", Color.Crimson); + } + else if (e.Node.Tag is string psScriptPath) + { + logger.Log($"PowerShell script deactivated: {Path.GetFileName(psScriptPath)}", Color.Crimson); + } + } + + // Synchronize parent-child node states, so when a child node is checked or unchecked, its parent node automatically reflects this change + if (e.Node.Parent != null) + { + e.Node.Parent.Checked = e.Node.Checked; + } + } + private void treeSettings_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) { TreeNode node = treeSettings.GetNodeAt(e.Location); @@ -186,15 +230,14 @@ namespace FlybyScript string pluginInfo = $"ID: {plugin.PlugID}\nHow-to:\n{plugin.PlugInfo}"; rtbDescription.Text = pluginInfo; } - else if (node.Tag is string psScriptPath) // Handle PowerShell script description + else if (node.Tag is string psScriptPath) // Handle PowerShell script description { rtbDescription.Clear(); string scriptInfo = $"PowerShell Script: {Path.GetFileName(psScriptPath)}\nPath: {psScriptPath}"; rtbDescription.Text = scriptInfo; } - else + else // Clear description if no node is hovered { - // Clear description if no node is hovered rtbDescription.Clear(); } } @@ -213,7 +256,7 @@ namespace FlybyScript private void linkChangeExperience_Paint(object sender, PaintEventArgs e) { - // Linkoption gains focus so trigger a vivid focus rectangle + // Linkoption gains focus, so trigger a vivid focus rectangle ControlPaint.DrawFocusRectangle(e.Graphics, linkChangeExperience.ClientRectangle); } @@ -229,7 +272,5 @@ namespace FlybyScript MediaView installMediaView = new MediaView(); SwitchView.SetView(installMediaView, panelForm); } - - } } \ No newline at end of file diff --git a/FlybyScript/MainForm.resx b/FlybyScript/MainForm.resx index 063f8e5..5f4edc6 100644 --- a/FlybyScript/MainForm.resx +++ b/FlybyScript/MainForm.resx @@ -120,615 +120,30 @@ - AAABAAEAXl4AAAEAIACgjgAAFgAAACgAAABeAAAAvAAAAAEAIAAAAAAAEIoAABMLAAATCwAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAr5J1AP+PGAD/7csA//W3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+h0AKGWcQAAAAAA58qHAP/y6QD2+mIA+v6gAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/9WOAP/sagDLuXgB+uCRA//y - rwP+u34D8PSDAPD/tgD45ZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//usAP/z - qAD46ooC//+XAPnulwD/+5wA/+6cALA3UwDy0KsA+NmnAP/osQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA/7+qAP/qtgD92JUE8t2CAOnKhBn23oyO+N+NvPbekH3lto0J5aiPAPTXkwH+7H8AAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA/+mOAP//sQD98ZkD9deCAOvMgSv55pLV/uyW//3kkf/97JX//euVi/j5 - mgD7uXwC//+fAP6ehwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADx150Ar8UPAKCdYgD/344E8dyHAOzPgTX65JDk/uiT//zh - jvn84Iz5/OOM/v/qkPP+5Y8p/+qSAP/soAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD17NwA2aqOAJBWAAD/95ED8t6KAOzQ - g0X65I/u/ueT//zhjfv94o3//eGM//zfiPv95Yv//u6Rcf/zjgD+86IC/f+5AP//sgAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2y5kA6OfcANzB - jQD/7YYD9uiRAO3SglP65I/2/uWT//zhjvv84oz//OGL/v3hiv/834f8/eSJ//7ojMS4y8cB////APP/ - aAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAD32IAA67BjAOHEgQH//8sD//SSAO7SgmD65I/8/uSS//zijvv84o3//eGL/vzgif794If+/OCG/vze - g//954r3/e+TNv3+nwD+5I0C/tKBAP/QfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD85GcA8NJjAOSvSgH//7EB//yUAPHWg2795pD//uWT//3ij/z94o3//eKL/vzh - iv/94If//N+F/vzghP/63oH7/uaG//3liIb+5oYA/cZzBP7//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/+o0A+/ODAOzWfwL//6AB//+mAPHXhHv96JL//uWS/v3i - jvz9447//OGL/v3hif/84Ij+/OCG/vzghP7834L/+96A+/zdf//96IfM//OfC/8A/wD+95YBAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKWlWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//Z0A+OSHAOzNdgIAAAAA///AAPDY - hIn96ZP//+WS/f3ij/3+447//eKL/vziiv/94Yf+/eCF//3fhP/934L//N6B/vzdfv773n39/+iD+v7l - hUT/5H8A/8t0BP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/s0IAFf//AP8i - AAB3+rIC/r5Zs/OjQv/dkzP745Eu/+mhOP/qrUP/8blM//fEVv/6y17t+tVu3PjYecT43YOi+N6FfPfZ - f1P0zHg17st7bvfikub+65v//+WT+/7kkf//5Y/+/uSN/v3jjP7+44n+/eKH//7hhf/94YP//OCB//3f - f//93n3//N57//vdeP/83Hb/+9t1//zbc//72nH++9pu/vrYbP3+5HP//eJzY//gdAD+33IE//dpAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA/wBtAPL3ZADW/9sA1NaSB/m3U8/3lTr/4ok0+9iKMPzZfiT734wr+uWaMfrppTn87K4///G8 - Tf/71Wr//umF//70lv/+85v//uuW/f32q///9rT//+yf+/7mkv/+5Y/+/+SN/v7ki/7944r//uKI//7i - hv/94YP//eCB//zfgP/9333//d57//zdeP/73Hf//Nx0//vbcv/82nH++9pu/vvZbP762Gv7/d1t//3i - cK3/71IA/8lpA/rldAD+r3QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA/6FYAP+hVQD6t2AB7NhzAPPafhj3slHp9po9/+9+Lf7khTL/2Icu/9p7 - I//fiCn+45Iu/uWaM/3ooTf87rNE+/nOYPv/4H38/+mO/f/tlf7+8J/8/vSy/f7xqf//6Zb+/uSN/v/k - jP/+44n+/eOI//3ihf/+4YP//eCB//3gf//8337//d97//3eef/83Xf/+9x1//zbcv/72nD//Npu//vZ - bP/62Gr++tdo/fvaaP/+5W7n/NxsKPzVdgD93m4C//8uAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/VfQD/1n4A+sxsAfnMYgD40W0y+bNP/PWd - QP/xiTL+7nQo/+GCMP7Xgiv+2ngh/t6DJv7ijSr+5ZUv/+ecM//vtUT/+tJh///he//+6In+/+qM///w - nv/+9K/+/+2f//7mj/7/44r+/uKI//7ihv/94oP//eGC//7ggP/9337//N97//3eef/93Xf//Nx1//vc - cv/723H//Npu//vZbP/62Wr++9ho/vrXZv7612X6/dxn//zfaWv62mUA/OZqA///QgD//18AAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/qlYA/6pWAPq8 - XAL90WYA+MtmUfy2UP/1oUH985I3//B9K/7sbyb+4H8v/9aAKf/ZdR/+3oEk/+KLKf7lkiz+5pow/vC3 - Q/781GH+/+N7//7ohv7+6ov+//Gj//7yqf7+6pX//+SK//7ihv/94oT//uKC//3hgf/+4H7//d97//zf - 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 - JP/raCD/6GQg/9t3KP/UcR//2XAb/959IP/hhCL/5Ism/++sNf/80VP//+Fu//7ldf/+6oT///Cb//7p - iv//4nv//t92//3edf/+3XL//d1v//zcbf/922r//Npo//vZZv/82GP/+9hh//zXXv/71lv/+tRZ//vU - Vv7601T++tNS/vvUUvr92VH//NlTiPrSRgD93j8E+daBAP//JwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ykUA9sdjA+7IeADzxmc+/Mdc8vm4T//4tEv9965E/vam - Pf71mzb/848v//GDKv/veSb/7HEj/+tlH//nYx//2XQn/9RvHv/ZcBv/3n0g/+GDIv/kjCX/8rI4//3V - V///4m3//uVz///si//+7pT//+Z///7fdf/93nL//d1w//3cbf/822v//dto//zaZf/72WP/+9hh//zX - Xv/71lz/+9ZZ//rUVv/701T/+tNS/vrST//60k77+9RN//7eUc3001ES7LVDAPrUUAH//1wAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/IQAA/i0AAPauUgTyymgA9MRiVvzE - Wv/4uU/8+LVL/vewRf72qT//9aA4//SWMv/yii3/8H8o/+53JP/sbiH/6mMe/+ZgH//Zcib/020c/9lv - G//efB//4YEh/+WPJv/0ujv//tlZ///jbP/+5nT//+6P///riv/+4Xb//t1w//3dbv/93Gv//Nto//3a - Z//82WT//Nlg//vYXv/811v/+9ZZ//rVV//71FT/+9NQ//rST//50Uz++tFL/vvTSvz92Ev/+dVORvvU - SAD94EED//8AAP//JgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/6gzAPf/ - /wD1t00F8bxVAPTGY3T7v1j/97hR+ve2TP73s0b+96xB//alOv/0nDT/8pEv//GGKv/vfSX/7XQh/+ts - IP/pYR3/5WAe/9dwJP/Tahv/2m8a/958H//hgCD/55Qn//fBP///3Fz//uNp//7oef/+7o///+d+//7f - b//93Gv//dtp//zbZv/82mP//Nlh//zYXv/711v//NZZ//vVVv/61FT/+9NS//rST//60Uz++dBJ/vrQ - SP/60Ef7/NZG//7dSpP/+UoA/+s/Av+7CwD/yjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP/AhQDr0GwA/rlYA/64QgD2xGGV+L1W//e5Uvr4uE3+97RI/vevQv/2qDz/9KA3//OX - Mf/yjiz/8IMo/+56I//scSH/62of/+hfHP/kXh3/1m4j/9JnGv/abxr/3nse/+CAH//pmSj/+sdC///f - Xf/+42f//up+///siP/+43P//txp//3bZ//82mT//dph//zZXv/72Fz//NdZ//zWVv/71VT/+tRR//vS - T//60kz/+dFJ//rQR/76z0X/+tBD/fzTQ//91UPg+tFHE/f/bAD+uzMA/0gAAP9nAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+/1sA8r9uAP//JgG786EE/Mhisfm9V//2uVL7+LdO//e1 - SP72sEP/9qs+//WkOP/0nDT/85Qu//GKKv/vgSb/7nci/+xvIP/pZx7/6F0a/+NcHf/VayL/0WYY/9pu - Gf/eeh3/4IAe/+ugK//8zkb//99d//7kaf/+7IL//+l+//7eav/922T//Npi//3ZXv/82Fz//NdZ//vW - Vv/81VP/+9RR//rTT//70kz/+tFJ//rQR//5z0T/+c5C/vrPQf/6zj/9/dc///zZRFb92UUA/NlAAv3m - RAD/60YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+716APLIWwGx2mgA47poEfzK - Y8r5v1j/9rlT+/e4UP/2tkr+9rJF//atQP/1pzr/9KA1//OZMP/ykCz/8Icn/+9/JP/tdSL/620e/+lm - HP/nWxn/4Vsc/9NpIP/RYxf/2m0Y/915G//ggB7/76kt//7USf//4F3//uVt//7rgv//5XL//ttj//3Z - X//82Vz//NhZ//zXVv/71lT/+9VR//zUTv/700z/+9FJ//rRRv/60ET/+s5B//nNP/76zj7/+s48+/3T - O//80zyp/881AP3gPgP33nwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5bx0AOOt - gQDjuWwD16xVAOi/aSvzwl7z971X/va6VP33uVD/9rZL/vazR//1r0L/9ak8//SjN//znDL/8pUu//GN - Kv/whSX/7nwj/+1zIP/rax3/6GQb/+VYGP/fWhz/0mcf/9BhFv/ZbRj/3Xcb/+GCHv/ysC///9dL//7h - XP/+53L//+p7///gZv/92Vz//Nla//zXVv/81lT/+9VR//vUT//800z/+9NJ//rRR//70EP/+s9B//nO - P/75zTz++sw6/vrNOf37zTf//dY55PjUPyLz3S8A+dM+AvzGWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAz75VAKmMJACwTxIA//+3Av//hADpvGSa8MZi/+2+V/vzu1P/9bhQ/va2Tf71tEj/9q9D//Wr - Pf/1pjn/8580//KZL//xkyv/8Ysn/++CJP/teiH/7HEe/+ppHP/nYRr/5VUX/99YG//QZB7/0F8V/9ls - GP/cdhr/4oUe//a6Mv//203//uFd//7pdP//53D//ttc//3XV//911T//NZS//vVTv/81Ev//NNJ//vS - R//60ET/+89B//rPPv/5zTz/+s05//nLN/76zDb++sw0+/3SNP/60DZk+84tAPzTLAT/9gAA/vwpAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA8M1RALyhWwC+lVAB//+0Af//rQDhs2R289F4//DMbP3qw17+7L9X//C6 - UP70t0z/9rRJ//WxRP/1rT//9Kg6//SjNv/ynDL/8ZYt//GQKf/wiSX/74Ei/+14IP/qcB3/6Gca/+Zf - Gf/kVBb/3Vca/89iG//QXhP/2WwX/9xzGf/lix//+cI1///cTP/+4mD//uhy///iY//92FX//NZR//zV - Tv/71Uz//NNI//zSRv/70UT/+tBB//vPPv/6zjv/+c05//rLN/76yzX/+csz//rLMfr7zC///dMysPLr - ewL//2EB+sYuAP/+VwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyJ5lANWiQADDlU4B////Af//2QDfsGF89t2K///s - mf7734f99NFz/+3FYf7qv1b/7bpO/vG1Sf/1sUX/9a5B//OpPf/zpDj/858z//KaL//xlCv/8I4n/++H - JP/ufyL/7Hce/+puG//oZBj/5V0X/+JRFf/cVRn/zl4b/89cEv/Yahb/23IX/+iTIP/7yTf//91O//7k - Zf//52v//t1X//3WTv/81Uz/+9RJ//zTRv/80kT/+9FB//rPPv/7zjv/+s05//nMNv/6yjT/+coy/vrK - MP/5yS/9+8ws//7RLe/3yjEq+8IqAP7UJAL//wAA//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmohoAK2GUwC8hjgCJgAAAP// - /wDis2WI+OCO///xof3+65r9/+uX//7ljv752X3/8Mpn/uq/V//quU3/7rNG//OuQv/0qz//86c6//Oi - Nf/ynDH/8Zct//CRKf/viyb/74Uj/+5+IP/rdRz/6mwa/+diGP/kWhf/4k8U/9pUGf/MXBn/z1sR/9hq - Ff/bcxf/65sh//3ROv//3lH//uVm//7jX//92E7//NVI//zURv/70kP//NFB//vQPv/6zzv/+844//rM - Nv/5yzT/+soy//nJL/75yC3++sos//rHKfv8yyj//tMtbv/dLQD/vBAD/rAAAP+1AAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr5xrAMOn - cgDGm10DYwAAAP///wDluGmW++ST///xovv+65v9/uuZ//7rl/7/6pX//+mQ/v3hhP/20nD/7cNb/+i4 - Tf/rskT/8Kw///OoO//yozj/8aA0//GZL//xlCv/8I8o/++KJf/uhCH/7Xwe/+tzG//pahn/5mAX/+NY - Ff/gTRP/2FIY/8tZF//PWhH/12kU/9x0Fv/vpiT//9U8//7fVf/+5WL//t5S//3UR//800P/+9JB//zR - Pv/80Dv/+844//vNNv/6zDT/+csx//rJL//5yC3/+ccq/vrIKf/5xyb8/Mwk//3OJsLDp0YC/88AAN// - bAD/RA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA3a5pAMOhXADRoFoDrDIAAA0AAATpvG2j/eiX///xovz+65v+/+yZ///smP7+65b//uqT/v7q - kf//6o///+aI//vbef/yy2P/6btP/+iyQ//sqjz/8aQ5//KgNf/xnDH/8Jct//CSKv/vjSf/7ogi/+6C - H//sexz/6nIa/+hoGP/kXxX/4VYU/95LEf/WUBj/yVcW/85ZD//XZxP/3XYV//OwJv//2ED//uBY///j - Wf/+2Uj//NJA//vRPv/80Dv/+885//rONv/7zDT/+ssx//nKLv/6ySz/+ccq//jGKP75xyb++sgk/vnF - If/9zCH3+9IrNP3cNwD8yR0C/70CAP+7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA5rBbAP7ObQDUrVoDwWkpAHwmAAzov3Cy/uyb///xo/r+7Jv+/+2b//7s - mf7/7Jb//uuV/v/rkv//6pD//umO//7pjP//6In//uKA//jVbf/uwlb/57JF/+epO//tojb/8J0z//CZ - MP/vlCz/748o/++LJP/uhiH/7YAe/+t5G//qcRn/52cW/+RdFP/gVRP/3UkR/9ROF//IVBT/zlgO/9Zl - Ev/fexb/97oo///aRP/+4Fb//99N//3UPv/80Tv//NA4//vONv/6zTP/+8ww//rLLv/5ySz/+sgq//nG - KP/4xSX/+cUj/vrGIf/4xB/8/csf//vLIoX6xSEA+cscA/HeAAD/8wMAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/9aAAP/XfgDuumgEw3YtAKlSFxTow3PB/u+e///x - pPr+7Jz+/+6c//7tmv7+7Jf//+yW/v/rlP//65H//uqP///pjf/+6Yr//uiI///ohv//5oH//d52//TM - YP/quEr/5ak7/+mgM//umjH/75Yu/+6RKv/ujSf/7okj/+2EIP/sfx3/63gb/+lwGP/nZhX/41wT/99S - Ev/bRhD/0k0W/8dSEv/OVw3/1mMR/+ODF//6xCz//9tG//7gT//+20L//dE5//vPNf/8zjP/+8ww//vL - Lf/6yiv/+ckp//rHJ//5xST/+MQi/vjEIP76xSD++cQf/PvFHv/8yyHM9M44CwAAAAD61CgBAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC+fD0A3aZgAO29bwDdqmAE0Y0/ALht - KB/qxXbN//Gh///xpPr+7Z3//+6d/v7tm///7Zn+/+yW/v/slP//65L//+uQ///qjf/+6ov//umI///p - hv/+6IP//ueB///nf//+43n/+tdq//DCUv/mrT7/5J8z/+mWL//tki3/7Y8p/+2LJv/thiL/7IIf/+x9 - HP/qdxn/6W4W/+ZlFP/jWhP/3lAR/9lFEP/QSxX/xk8R/81WDf/WYhD/5o0Y//3LMP//20j//t5G//7V - OP/8zjL/+84w//vLLf/7yiv/+skp//nIJv/6xiT/+cUi//jDIP/5wx//+cQg/vnDH/74xB79/csg+vjF - JEX2vyYA+b8hA+4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxYlKAP// - xgDltGgE3qFUAMF3MijryHnZ//Oj///xpfr+7p7//++e/v7um/7/7pr+/u6Y///tlf//7JP//+yQ///r - jv//64z//+qK///ph//+6YX//+iC//7nf//+5n3//uZ7///leP/932//9s5b/+u3Rf/joTT/5ZQt/+qP - Kv/tiij/64gl/+uEIf/rgB//6nsc/+l1GP/obhb/5mQT/+JZEv/dThD/10QP/85KFP/ETQ//zVUM/9Zj - EP/smRv//9I0///bQ//+2jv//dAx//vMLf/7yyv/+8oo//vJJv/6xyP/+sUh//nEIP/5wh//+MIg/vjD - IP74wx/++MIe+vrEHv/8yyOM/cQMAP29BQP452cA/rsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AACKZjcAQxcAAAAAAADuxnYE5KRQAMWFPjXty3zi//Sm//7xpPr+76D///Ce/v7unP7/75r//u6Y///t - lv//7ZT//+yR///sj///643//+uL///qiP//6Yb//+mE//7ogP/+533//+d7//7mef/+5Xb//+V0///j - cP/82WP/8sRP/+apOf/hlS3/5osp/+qHJ//qhST/6oIh/+p9Hv/qeRv/6XMX/+dsFf/lZBP/4VgQ/9xN - D//WQg7/zEcU/8NLDv/NVAv/12YQ//CmHv//1DX//to8//7WMv/8zCr/+sso//vJJf/6yCL/+sYh//nF - IP/5xB//+MIg//fCH//4wh/++cMf//fBHvz5xR7//soh1vC5JhDzrS0A+r0oAfzZAwAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/zHkD3bNgAMqLQkLuzn/s//Wn//7xpfr+8KH///Cg/v7v - nv//75v+/+6Z/v/ul///7Zb//+2T///skP//647//+uM///rif//6of//+mE///pgv//6H///ud8//7n - ev/+5nf//+V0//7kcv/+42///+Ns//7gZv/50Vf/7LdB/+GbL//hiif/5oQm/+mCI//pfyD/6Hod/+h2 - Gv/ochf/52wU/+VjEv/gWBD/2ksO/9NADv/JRRL/wUkM/8xSCv/abBH/9LIh///WM//+2DT//tAq//vJ - Jf/6ySL/+scg//rGH//5xR//+cMg//jCIP/3wR//+MEg/vjCH//3wR7+98Ae/PnEHv/5ySZI98UjAPnW - EwL/2AAA/84AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3MCUAAAAAADx14cD98tyAM+SSU/w0oT0//aq///y - pfr+8KL///Gh/v7wnv7/8J3+/++a///vmP//7pb//+2U///ukv//7I7//+yM///riv//64j//+qE///p - gv//6YD//+h9///nev//53j//+Z1//7lc///5G///uNs//7jav/+4mf//+Fk//3bW//0xkn/5qg1/9+N - J//igST/538j/+h8H//neB3/53Qa/+dvF//mahT/42IS/99XD//YSg3/0j4N/8ZDEv/ASAz/zFIL/952 - E//5vCP//9Uv//7VKv/8yyL/+scg//rGIP/6xSD/+cQg//jDH//4wiD/98Ef//fAH//4wR/++MEf//a/ - Hvv8xx7/+8kinP/WGQD/qAwC8fcAANn/AwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD//7oB8ct0ANid - UV3z2Ir7//es//7xpvv+8aP///Ki/v7wn///8Z3//vCc/v/wmf//75f//+6V///uk///7ZD//+2N///s - i///7In//+uG///rg///6oD//+l9///oe///53n//+d2///mc///5XD//uVt///kav/+42f//uJk//7g - Yf//4F7//99a//vUT//vuT3/4Zcr/96CI//jeyH/5nkg/+V2Hf/lcRn/5W0X/+RoFP/iYBH/3lYP/9hJ - Df/PPQ7/w0IS/79IC//MUw3/4YAW//zEJP//0yr//dEj//vHH//6xiD/+sUg//nEH//4wx//98Eg//fA - H//2vx/+98Af/vfAH//2vx79+L8d//nCH+XyyS8W//9oAOCvHAG4iQAAu40AAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqpYAMHm - iADeu3MC77lpAN2nWk333o/7//mu//7ypvv+8qX///Gi/v7yof//8Z/+//Cc///wmv//75n//++W///v - lP//7pH//+2P///tjP//7Ir//+yH///rhf//6oL//+p////pe///6Xn//+d3///mdP//5nD//+Vt///k - a///5Gj//uNk//7iYf//4V7//uBa//7fV///31X//ttP//fJQ//opzH/3Icj/954H//jdh7/5HMc/+Nv - Gv/jaxf/42YU/+FgEv/dVhD/1kkN/8w9Dv/AQRL/vUYM/8tUD//mjxr//con///SJ//9zCD/+sYf//nF - IP/5wyD/+MIf//fBH//3wB//9r8f//e/H/72vx/+974e/vW8Hf38xR//+MQjX/nGJQD2xB0D7rECAO+0 - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAADpxW4A//+9A///zgD54pOz/ves//7yqPn/8qX///Kk/v7yov7+8p/+//Ge//7x - nP7/8Jn///CW///wlP//75L//+6Q///ujf//7Yr//+yI///shf//64P//+qA///qff//6Xn//+h3///o - df//53L//+Zv///la///5Gj//+Nl///jYv//4l///uBb///fWP/+31T//t5Q//7dTv//3Ev//NVF//G7 - N//hlCf/23oe/99yHf/icRv/4W0Z/+FpFv/hZRT/4F8S/9tWEf/USQ//yj4P/7xAEv+6RQz/zFoR/+ud - Hv/+zCf//s8l//vHIP/5xB//+MMg//jCH//3wB7/9r8e//a+Hv/2vR7/9r4f/va9Hv/1vR37+b8d//zD - IKr/sQAA/7sAA/nIMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/vewAP/9swP//bAA//mxqf72q//+8qX1/vGk/f/z - ov7/86H///Ke//7ynP7+8Zr+//CY//7wlf7/75P+/++R///vj///7oz//+2I///thf//7IT//+uB///q - fv//6nv//+l4///odv//6HL//+dv///mbf//5Wn//+Vl///kYv//417//+Jc///gWf/+4FX//t9S//7e - Tv/+3Ur//ttI///bRf//2kH/+cs5/+moLP/bgiD/2nAb/99uGv/gaxj/4GcW/99jFf/eXxT/2lcT/9JJ - EP/HPRH/uT8S/7lFDf/QYhX/8Kkh//7NJv/9zCL/+cQg//jDH//4wR//98Af//e/H//2vR7/9bwf/va+ - H//1vR7+9bwd/fa8Hf/9xR/m8b4kKO7HMAD3xCMC+nEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//+VAP75hwD++K0C/fi1AP76 - tkP++7T0/vSm//71pf/+8qD7/vCd/P7xnP3/8pv///GY//7xlv7+8JT+/++S/v7vj/7/743+/u6L///t - h/7/7IT//+yC///sf///63z//+p5///qdv//6XP//+dw///nbf//5mn//+Vn///kY///5GD//+Nc///i - Wf//4Vb//+BS///fT//+3kv//91H//7cRf/+2kH//tk+///ZO//+1Tj/87wv/+GSI//Xchv/22kZ/99p - GP/eZhf/3WIX/9xfFv/YVxX/z0oT/8Q9E/+3PhL/uUYP/9NsGf/0tCT//s0l//vIIP/4wh//+MIf//fA - H//2vh//9r0e//W8Hv/1vB/+9rwe/vW7Hf70uxz6+L4c//nAImb7uxcA+8MPA7YA/wD+3gAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAD//wAA4oT/AP71bwH/9KMA/fSoQ//7raP/+6rh/vWj//74ov/+8pv//u+X/P7wlvv/8JX9//CT/v7w - kP//8I7//u+L/v7uiP7+7oX+/+2C//7tgP7/7H3//+t6///qd///6nT//+lw///obv//52r//+dm///l - ZP//5GD//+Rd///jWf//4lb//+FS///gTv//30v//91I//7dRf/+3EH//9o+//7ZOv/+1zj//9Y1///X - Mv/8zS7/66om/9p+Hf/WaBj/22YY/9xmGP/bYxj/2l8Y/9dYF//OSxX/wj4V/7Q9Ev+5RhH/2nkc//i9 - JP/9zCP/+cQf//fBH//3vx7/9r4f//W8H//1ux7/9bse//W7Hv71ux3/87kc+/e8Hf/9wyC0vZArBAD/ - /wDo2EUA+J4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP74/wD/+IYA//arAvzxnQD/9bIA/uyfG//6qVP/+qal//Wf6f77 - oP/+85f//vCT//7xkPr/7oz6/u6K/f/vif//74b//+6D//7tgP7/7H7+/+x7///reP7/6nT//+py///p - bv//6Gr//+dn///mZf//5WH//+Rd///kWf//4lb//+JS///gT///30z//99I///eRf//3EH//9s+//7a - O//+2Tf//9g0//7WMf/+1S7//9Us///UKv/3vyX/4pMe/9RtGf/WYxn/2mUZ/9ljGf/YXxr/1loZ/85N - F//APhb/sTwT/7pJE//fhh//+sMl//zIIv/3wB//9r8f//a+H//1vB//9Lse//S6Hv/0uh7+9bod//O4 - Hf71uRz++Lwd9vS/Jyv0wyYA/7kTAemVAADjkwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//EAAP/fAAD99asD//mKA/7r - ngD/96oA///PAP//phf++aBf/vWaq/78m+H+9ZL///KN//7xif/+7IT8/uyB/P7tgP3/7X7+/u17/v/s - eP7+63b+/uty/v/qb/7/6Wz+/+ho///oZf7/5mL//+Ve///lWv//5Ff//+NT///iT///4Ez//+BI///f - RP//3UH//9w+///bO///2jj//9k0//7YMf//1i7//tUs//7TKf/+0ib//9Mj//3NIv/vrCD/2Hwc/9Bj - Gv/WYxv/2GMb/9dgG//VWxv/zU4Z/78/F/+vPBP/vE0W/+aUIf/7xyT/+sMg//a+H//1vR7/9bwe//S6 - Hv/0uR//9Lke//S4Hf70uB3/8bYc/Pu+Hf/7wCN4/8MmAOe4FQP/8gwA//8BAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA//PqAP/81AD+9KYB//mWA///fwH//80A/v+jAP3rhAD+85cj/vOSYP79lKb/9Yzr/vSH//7z - hP/+7H3//+t5/P/rePv+6nX9/+ty/v/qcP//6mz//+lp/v7oZv7+6GL+/+de///lW/7/5Vf//+RT///j - UP//4k3//+FJ///fQ///30H//94+///cOv//2zf//9k0///YMP//2C7//tYr//7VKP//0yb//tIj//7P - If//zyD//9Eh//jBIf/jlR//0Gsc/9BgHP/WYxz/12Ec/9RcHP/NTxr/vj8Y/646E//AVBf/7KMj//zH - Iv/3vh7/9bwf//W7H//0uh//87ge//O4Hf7zuB3+87cd//G2HPz2uBz/9rkdyvDOfgLJUAAB27YgAJZh - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//nwA//+nAP//fAD/+18A//eWAf7tmwP+9Y0D/v+mAP3u - kQDtkWAB/uyKH//6jGH+9IS1/vSA7P72fv/+7HX//+xy//7pbfr/52v7/+ho/v/pZf//6GL//+de/v7m - W/7+5lf+/+VU///kUP7/4kz//+JJ///hRf//30H//989///eO///3Df//9s0///ZMf//2C3//9cr///V - J//+1ST//tMi//7RIf//0CH//s8g//3NIP/+ziD//c0h//CxIP/XfR7/zGAd/9JhHf/WYh3/01wc/8xP - Gv+9Pxj/qzkT/8VeGf/ysCP/+sQg//W7Hv/0uh//9Lke//O3Hv/ztx7/8rce//K2Hf7ytRz+8LMb//u8 - HvX3vCY9/70tAPGwHQPaqwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+/4QA//dnAP/q - egD/1JAA//iiAP72lgL+8pEE//+4Af7ofQD//5QA//+eAP/6hiL98Xxt/vN5s//3dun+7G3//+1q///p - ZP7/5WD7/uZd/P/mWv3+5Vf+/+VT///kUP/+40z+/uJJ/v/hRf7+4UH//98+/v/eOv//3Tf//9w0///b - Mf//2S7//9gq///XJ///1ST//9Qi///SIP/+0SD//9Ah//7PIf/+ziH//Mwg//zLIP/+ziH/+cMg/+SZ - H//Oax7/zF0e/9NhHv/TXR3/zFAb/7o+GP+qORP/zGsb//e6Iv/4wB//9Lke//O4Hf/zth7/8rYe//K2 - Hf7ytRz+8rQc/vGzG/r2thz/87UgiPu2EAD6rg4E2MVaAPuHAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD+7HgA/8qOAAAAAAAAAAAA+du0AP3ufQD++YIB/uiHAv/rbAH//4oA/f1+APq5 - YAD+63Ir//Bwaf71bbb+7GT1/+9i///qW//+5FX//+RR+v7jTvr+4kv9/+JH///iRP/+4EH//uA9/v7f - Ov7/3jb//90z/v/cMP//2y3//9kq///YJ///1yP//9Uh///UIf//0yH//tEh///RIP/+0CH//s4h//3N - IP/8yyD/+8kh//vKIP/9zCD/8rQf/9d/H//JXx7/zl0e/9NeHf/MURv/uT0Y/6o4E//VfB7/+cEi//W5 - Hv/zth7/8rYd//K1Hv/ytR3+8rQd/vGzHP/wshz78bIa//q6Hs3utSwR4KVXAPS2KAH/zAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+rAD//6gA/lv/AP7X - ggD/sTYA//F/Af3phQT+v2sD/ulpAP7pbQD+uU4E/vBmJf/0Y3H+61rA/+9X7v7rUf/+5Ur//+RH/v7g - Q/r+3j/8/988/v/fOv//3Tb//t0y/v/cL/7/2y3//top/v/ZJv7/1yL//9Yh/v/VIv/+1CL//9Mh//7R - If//0CD//tAh//7OIP/9zSH//Msg//zLIP/7yCD/+sYf//zJIP/5xCD/5Zwf/8tqH//JWR7/0Fwe/81T - HP+3PBj/rTsU/9+NH//6wSH/8rUe//K1Hv/xtB3/8bMe//GzHf/xshv+8LAc/vGwG/z2tBz/77MiRfK1 - HgD3nBYD/wAAAP8xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD/14EA/8lbAP/mhAD/oX0A//+NAP/waAL+7mYD//8wAP7nbgD//2gA/+FaAP/y - Vi3+6E91/u5MuP/rRvP+5UH//uU9///eOP/+3DX8/twx/P/bLv7/2yv+/top///YJv//1yP+/9Yh/v/V - Iv7+1SH//9Qi/v7TIf/+0SH//9Eg//7QIP/+ziD//c0h//zLIP/8yiD/+8kg//rHH//5xSD/+cUf//vI - H//yth//2IMe/8ZcH//LWB7/zVUd/7Y8F/+vQBX/550h//i+H//xsh3/8bMe//CyHv/xsR3+8LEc/vCw - G//urhv687Ab//i3IZT/xw0A/6sAAv+nAAD/sQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/6HwA/qGZAP/GPAD/+gAA/v8AAP7Z - YAD++VMB/+JeA//qRAL//FcA/uxNAP/pOAX+5kIx/u1Bcv7pPML/5Tb4/uYz//7dLv//2ir//tkn+v/X - JPv+1yH+/tYh///VIv/+1CL+/tQi/v7TIv7+0iH//9Eh/v7QIP/+zyH//s4h//3MIf/8yyD//Mof//vJ - H//6xyD/+sYg//nEH//4wR//+cUf//nDHv/noB7/zGse/8VVHv/LVR7/tTsX/7VKF//vrCH/9bke//Cv - Hf/wsR7/8LAd/++vHP7wrhv/7q0b/fOuGv/1sh3f57EwEuKiMwD0zRsA//8AAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP//UAD//3QA//8xAP/SWAD+/0QA/+xWAv7nTQT+/3oA/t89AP/xRgD4yzIE//E2Lv/l - MH7+4izG/uUp8f/cJP/+2SL//9ch/f/TIPv+1CD8/9Qg/v/SIP/+0iD+/9Ah/v7PIf7+ziD+/c4g/v3N - IP/8zCD+/Mog//zJH//7ySD/+scf//nGH//5xB//+MIe//fAHv/2vx//+MMe//K3H//Yhx7/xFsf/8dR - Hv+0Ohj/vlkZ//S1IP/xsh3/768e/++vHf/vrh3/760c/u6sG//sqRr99bAc//a0I1T4uyoA96wYAvur - BwD/qQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//MgD+0VgA//8NAP7YVwD//1EA/upPAP7m - OQL/9EkD6jMAAP/tNQD+5iwA7/8oAf7iJjv/4CN//+Ujwf7aIfz+2iH//9ch//7RH//+0R/7/9Af/P7P - IP7+zyD+/c4g//3MH//8zCD+/Mog/vvJH//7ySD++8gg/vrGH//6xR//+cQf//jCHv/4wR7/978e//W8 - H//1vR7/98Ae/+ejHv/Mbh7/xFEf/7I2GP/Jaxv/9rkf/+6tHf/urh7/7q0d/+6sHP7uqxv/7Kka/POt - G//xrR2o/qgNAPisDgLc/04AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP/+QAAAAAAA//9KAPzKAAD/9D0B/uo3A//jOgH+6CYA/9YjAP/bIQv93SE3/uQif/7Z - Ic/+2SH6/9gh//7PH//9zx/9/Mwf+vzLH/z8yx/+/Msf//vJH//6yB/++sYf/vrGH//5xB/++cMf//jC - Hv/4wR//98Af//a+H//2vR//9bse//O4Hv/2vR7/8rUd/9uKHv/EWh7/rzUZ/9V+HP/1uB//7Kkd/+6s - Hf7tqhz+7akb/uyoG/3sphr/9q4c4vSzKh3qs0YA87MjAvm3CgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//QgD//ocA//9CAP7+WgD+9DAA/uEoA//c - GwT/slsA/dIiAP74NAD91igF/+MjO//WIIz+2CHN/tch+f3PH//8zx//+8oe/frHHvv6xx79+sce/vnF - Hv/5wx7++MId/vjCHv73wB7+9r8e/va+Hv/1vB7+9bwe//S7Hv/zuR7/8rUe//O2Hf/0uh3/6aYe/81v - Hv+yPRr/3Iwd//O0Hv/spx3/7akc/+yoG/7sphv+66Qa+/OqG//spx5h7aodAPGhGAT/AAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+ - PgD//2IA/v9GAP/QKAD+8EAA/9wsAf7cHAL/yQ8C9f+gAP/1NQD/0yEA/+klC/3SH0X/1yCH/9Yhz/7N - H//8zh//+8ge//jEHf74wx37+MId/PfBHv73wR7/9r8d//W9Hf71vB3+9bsd/vS5Hf/zuB3+8rYd//K1 - Hv/xsx7/8LEe//K0Hf/ytB7/24oe/75WG//jmB3/760d/+umHP7rphv+66Qb/+qjGvrsoxn/86oeqP+P - AAD/mQAC5bIzAP6VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v0AAP/9AAD//wAA/6YAAP7AHAD+zRcC/9seA/xM - AAD8ziMA/8MiAP3GHQ//2SI8/9UhjP7LH9j+zh/5/MYd//fBHf/3wB379b0c+vS8HP31vB3/9Lod//O5 - Hf/ytx3+8rYd/vG0Hf7xsh3/8LEd/u+wHf/urR3/7asd//KzHf/mnh3/14Ac/+ulHf/rpxz/66Qb/uqj - G//poRr97KIZ//KnHOnloR8k5KwiAOyjHQL6bQcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v8AAP+u - AAD+OgAA/7AAAP/eAAD/3SAB/dEfA/7bFgP+1zMA/9AmAP/WIAD/6S8J/9IfR/3HHpT+yyDR/cQe//i+ - Hf/3vh3/87kc/PK3HPvythz98rYc/vGzHP/wshz/8LAc/++uHf7urR3+7awd/+2pHf7rphz/7aod/+yn - Hf/poR3/6qUc/+qjG/7poRr+6aAa/ueeGfvsoBn/76UgZvSmFwD3nQkD/34AAP+FAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+1AAAAAAAA/9IAAP+QDAD+wTYA/9QrAP7gFQL/6A4Csf8AAP/a - KwD8wRoA/9UkFPvEHkr/ySCQ/cIe3Pi8Hf/5vB3/8rQb//CyG/3vsRz67q8b/O+uHP7urRz/7aoc/+yq - HP7rqBz+66Yc/+miHP/pohz+6aEc/+mgHP/poRz/6Z8a/uieGf/lnBn87aAZ/++iHbj/0wAA/1cAAPIA - JQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8AAP/M - AQD//wAA//8AAP//GwD+vhkD/LMTBP/cYAD6vCAA/7IgAPW9GhH/zB9I/MAenPm5Hd78uh3987Ac//Cu - G//urBv66qgb++uoG/3spxv/6qUb/+mjG/7ooRv+6J8b/ueeGv7mnBv+5pwb/uedGv7nnRr/5psZ/uWZ - GP/qmxn16qYlKvG7MgDpmhcB6nQAAOhxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA//8AAP//AAD//wAA/7oHAP//PAD/ziMB/M0ZBP3FBgL82SUA/8wkAP/E - IgD/4CgR+rweVfi2HZ39uB7Z9K0c//KrG//upxv/56Ia/eihGvzooRv9558b/uedG//mnBv/5Zka/+SY - Gv7lmBn+5ZgZ/uWZGf/klhj87ZsZ/+qcHnjumxsA4YgUBLuGAACzmwMAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+xAAD/jQgAAAAAAP// - AAD/n/8A69EhAOS2DwL/vRsC////APq9HwDsmRIA9LofG/m2HVL/th6e9asb5fSoHP/woxv/5pwa/+ac - Gvvkmhr645ga/OSXGv7jlRn/4pQa/+OVGf7jlBj/45UY++WVGP/olxrE0emwAv9MAAHpmSgA/zUAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD//wAA9dMAAP9FAADGqgAA/7INAP/HGQH6txsD8bgPA/PCLAD0rxwA/5Y1APnF - HRX+tR5X86cbqPSkHOHyoRv/5pca/+aXGf/hkxn735EZ++CQGf3hkRn/4ZEY/+COGP3ikBf/7Zga8uWX - IDncjiEA5JkaA9S0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyKoAAP+sAgD/qwAA/6QEAP+/ - JwD5uyMB9agUA/+gAAH0oCcA/7smAPCNGAD/xSQY8KYcWvOjHKDznhvf6JQZ/+mTGf/gjRj/3IoY/d6M - GPvfjBf83YoW+eKMF//kkh1/6IYMAPGbBwSoWG8A/8gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD//wUA/qcAAPygAAD/YwAA+b4SAf2uEwLvpxMD//9mAPOmGwDfVAIA6qkcHfWk - HVT0nRuj55Ea6OqPGf/iiRj/3YgX/9yIF/ffiBb/6Y8axM6MKgv/4/8A7JEuANGJAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+rQAA/6UAAP/QAAD/rwEA//8eAPC8 - HQHxjBUE6HcBA/yrJwDxjhkA/3kmAPm2IxTynBxb544ZqOuOGeDliRf/5ogX/+uOG5UAAJoA/7UAAdN+ - LAD1pAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAD/1wAA/KwAAAAAAACsuQQA4gAAAPLFOAD8rB0B1Z4OA/GEAgHuxzAA85kiANpmCADuox4f548ZXeSK - GmTVhiQN14UaANiDHQHOdBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8ogAASAAAAKiuAADs7gAA95IRAfSf - FQPgewoD5ME2AOOFEgDdexIAs99TANxqGQHbYxkA4jANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAC6rAAA7dQAAP5tAAD/sgMA/903AO6ZHALkgxEE4owQBOKNIgHifRoA4oAVAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/cAAA/7AAAAAAAAD/hw0A//9wAAAAAAD/ajMAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAD//gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA///////////////8///////////////8///////////////8///////////////8//////// - ///////8///////////////8///////////////8///////////////8/////////h/////8//////// - /f/////8////////+gv////8////////9Av////8////////6AX////8////////0AX////8//////// - oAP////8///////+QAL////8///////8gAL////8///////5AAF////8///////2AAF////8///////s - AAF////8////x//QAAC////8/////B+gAAC////8////g+BAAAC////8///+gB+AAABf///8////AAAA - AABf///8////AAAAAABf///8///9AAAAAAAv///8///9AAAAAAAv///8///9AAAAAAAf///8///9AAAA - AAAX///8///9AAAAAAAX///8///9AAAAAAAH///8///6AAAAAAAL///8///6AAAAAAAL///8///6AAAA - AAAF///8///6AAAAAAAF///8///6AAAAAAAF///8///6AAAAAAAD///8///4AAAAAAAC///8///0AAAA - AAAC///8///0AAAAAAABf//8///0AAAAAAABf//8///IAAAAAAAAf//8//+QAAAAAAAAv//8//9gAAAA - AAAAv//8//7AAAAAAAAAf//8//0AAAAAAAAAX//8//oAAAAAAAAAX//8//QAAAAAAAAAL//8/+gAAAAA - AAAAL//8/9AAAAAAAAAAL//8/6AAAAAAAAAAF//8/0AAAAAAAAAAF//8/oAAAAAAAAAAF//8/QAAAAAA - AAAAC//8+gAAAAAAAAAAC//8+gAAAAAAAAAAC//8+gAAAAAAAAAABf/8+gAAAAAAAAAABf/8/QAAAAAA - AAAAA//8/sAAAAAAAAAAAv/8/zgAAAAAAAAAAv/8/8cAAAAAAAAAAP/8//jAAAAAAAAAAX/8//8cAAAA - AAAAAX/8///jgAAAAAAAAL/8///8YAAAAAAAAL/8////ngAAAAAAAL/8////8YAAAAAAAH/8/////nAA - AAAAAF/8/////84AAAAAAF/8//////jAAAAAAC/8//////84AAAAAC/8///////HAAAAAC/8///////8 - 4AAAABf8////////HAAAABf8////////84AAAB/8/////////nAAAAv8/////////44AAAv8//////// - //nAAAP8//////////44AAX8///////////HAAX8///////////44AP8////////////HAX8//////// - ////44X8/////////////Hv8/////////////4f8///////////////8///////////////8//////// - ///////8///////////////8///////////////8///////////////8///////////////8 + AAABAAEAAAAAAAEAIABeBQAAFgAAAIlQTkcNChoKAAAADUlIRFIAAAEAAAABAAgGAAAAXHKoZgAAAAFv + ck5UAc+id5oAAAUYSURBVHja7dwxSsNQAMfhgJObbp7AE/QOgmKrYCk4ODg4CgXBWhGxi4jg4Kg36KCD + DQrSRVwERw/h6A1q3uYamtr3wveH35gML823NVlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZma13kZvtNw6 + zTtKp2Y/b5R9zuEaZ5dW4d2cOQDhh1E0UTpt9kd3ZZ9zuMbZJVcDAAIAAP4PgM5grAjbPnupDIBwL2ca + Z3MH4Pr5RxF2cPtZGQDhXs40zgAgAAAAAAIAAAAgAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAQAAABAAAAAAAUAAEAAE + AAFAABAABAABQAAQAAQAAUAAEAAEAAFAABAABAABQAAQAAQAAUAAEAAEAAFAABAABAABQAAQAAQAAABA + AAAAAAQAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAIAAAAgAAAAAAKAACAACAACgAAgAAgAAoAAIAAIAAKAACAA + CAACgAAgAAgAAoAAIAAIAAKAACAACAACgAAgAAgAAoAAIAAIAAAAgAAAAAAIAAAAgAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJwpAAAA + AAEAAAAQAAAAAAHAQwCAACAACAACgAAgAAgAAoAAIAAIAAKAACAACAACgOoAwN7VuyJs5+K1MgDCvZxp + nM0dAMXftAAomQAgAABghls/Gq0UP45jpVOr/7RW9jmHa5xdWoV3MzMzMzMzMzMzMzMzMzMzMzMzMzMz + MzMzM/u7rV6+2jwZjZVU3bLPOVzj3NIqvJszB8Dfgf0dWL4H4LABIADkk8P7L0XY7uVbZQCEeznTOPNR + UPkoqI+CAkAAAAAABAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAIAAAAAACAAAAIAAIAAKAACAACAACgAAgAAgAAoAAIAAI + AAKAACAACAACgAAgAAgAAoAAIAAIAAKAACAACAACgAAgAAgAAoAAAAAACAAAAIAAAAAACAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAABAAAAEAAAAAABAAAAEAAEAAEAAFAABAABAABQAAQAAQAAUAAEAAEAAFAABAABAABQAAQAAQAAUAA + EAAEAAFAABAABAABQAAQAAQAAQAAABAAAAAAAQAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAzBQAAACAAAAAAAgAAACAAeAgAEAAE + AAFAABAABAABQAAQAAQAAUAAEAAEAAFAAFAdABg8fCvC9m8+KgMg3MuZxtncAVD8TQuAkgkAAgAAACAA + AGAWa7eHC63zxyWlU7s7XCz9nItrnF1iz7l4NzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM6v1fgFi3pGw + zf9AVwAAAABJRU5ErkJggg== \ No newline at end of file diff --git a/FlybyScript/Patcher/ScriptPatcher.cs b/FlybyScript/Patcher/ScriptPatcher.cs index b3b09fe..68b753a 100644 --- a/FlybyScript/Patcher/ScriptPatcher.cs +++ b/FlybyScript/Patcher/ScriptPatcher.cs @@ -171,7 +171,7 @@ namespace FlybyScript { existingCategory = new TreeNode(category) { - BackColor = System.Drawing.Color.LightBlue, + // BackColor = System.Drawing.Color.LightBlue, ForeColor = System.Drawing.Color.Black }; pluginCategory.Add(existingCategory); diff --git a/FlybyScript/PluginsForm.Designer.cs b/FlybyScript/PluginsForm.Designer.cs new file mode 100644 index 0000000..0040f01 --- /dev/null +++ b/FlybyScript/PluginsForm.Designer.cs @@ -0,0 +1,217 @@ +namespace FlybyScript +{ + partial class PluginsForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.checkedListBoxPlugins = new System.Windows.Forms.CheckedListBox(); + this.textDescription = new System.Windows.Forms.TextBox(); + this.btnDownload = new System.Windows.Forms.Button(); + this.progressBar = new System.Windows.Forms.ProgressBar(); + this.lblHeader = new System.Windows.Forms.Label(); + this.btnUninstall = new System.Windows.Forms.Button(); + this.label1 = new System.Windows.Forms.Label(); + this.btnImport = new System.Windows.Forms.Button(); + this.panelBottom = new System.Windows.Forms.Panel(); + this.linkPluginsDirectory = new System.Windows.Forms.LinkLabel(); + this.panelBottom.SuspendLayout(); + this.SuspendLayout(); + // + // checkedListBoxPlugins + // + this.checkedListBoxPlugins.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.checkedListBoxPlugins.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(240)))), ((int)(((byte)(240)))), ((int)(((byte)(240))))); + this.checkedListBoxPlugins.Font = new System.Drawing.Font("Segoe UI Variable Text Light", 10.25F); + this.checkedListBoxPlugins.ForeColor = System.Drawing.Color.Black; + this.checkedListBoxPlugins.FormattingEnabled = true; + this.checkedListBoxPlugins.Location = new System.Drawing.Point(-1, 50); + this.checkedListBoxPlugins.Name = "checkedListBoxPlugins"; + this.checkedListBoxPlugins.Size = new System.Drawing.Size(275, 340); + this.checkedListBoxPlugins.TabIndex = 0; + this.checkedListBoxPlugins.ThreeDCheckBoxes = true; + this.checkedListBoxPlugins.SelectedIndexChanged += new System.EventHandler(this.checkedListBoxPlugins_SelectedIndexChanged); + // + // textDescription + // + this.textDescription.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.textDescription.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(252)))), ((int)(((byte)(252)))), ((int)(((byte)(252))))); + this.textDescription.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.textDescription.Font = new System.Drawing.Font("Segoe UI Variable Small Light", 9.75F); + this.textDescription.Location = new System.Drawing.Point(281, 50); + this.textDescription.Multiline = true; + this.textDescription.Name = "textDescription"; + this.textDescription.Size = new System.Drawing.Size(348, 309); + this.textDescription.TabIndex = 1; + // + // btnDownload + // + this.btnDownload.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.btnDownload.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(221)))), ((int)(((byte)(221)))), ((int)(((byte)(221))))); + this.btnDownload.FlatAppearance.BorderColor = System.Drawing.Color.Gray; + this.btnDownload.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnDownload.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.btnDownload.ForeColor = System.Drawing.Color.Black; + this.btnDownload.Location = new System.Drawing.Point(536, 9); + this.btnDownload.Name = "btnDownload"; + this.btnDownload.Size = new System.Drawing.Size(93, 24); + this.btnDownload.TabIndex = 2; + this.btnDownload.Text = "Install"; + this.btnDownload.UseVisualStyleBackColor = false; + this.btnDownload.Click += new System.EventHandler(this.btnDownload_Click); + // + // progressBar + // + this.progressBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.progressBar.Location = new System.Drawing.Point(281, 360); + this.progressBar.Name = "progressBar"; + this.progressBar.Size = new System.Drawing.Size(348, 23); + this.progressBar.TabIndex = 3; + // + // lblHeader + // + this.lblHeader.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.lblHeader.AutoEllipsis = true; + this.lblHeader.Font = new System.Drawing.Font("Segoe UI Variable Small", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.lblHeader.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.lblHeader.Location = new System.Drawing.Point(277, 15); + this.lblHeader.Name = "lblHeader"; + this.lblHeader.Size = new System.Drawing.Size(356, 30); + this.lblHeader.TabIndex = 206; + this.lblHeader.Text = "Welcome to Plugins Manager"; + // + // btnUninstall + // + this.btnUninstall.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.btnUninstall.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(221)))), ((int)(((byte)(221)))), ((int)(((byte)(221))))); + this.btnUninstall.FlatAppearance.BorderColor = System.Drawing.Color.Gray; + this.btnUninstall.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnUninstall.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.btnUninstall.Location = new System.Drawing.Point(437, 9); + this.btnUninstall.Name = "btnUninstall"; + this.btnUninstall.Size = new System.Drawing.Size(93, 24); + this.btnUninstall.TabIndex = 207; + this.btnUninstall.Text = "Uninstall"; + this.btnUninstall.UseVisualStyleBackColor = false; + this.btnUninstall.Click += new System.EventHandler(this.btnUninstall_Click); + // + // label1 + // + this.label1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(65)))), ((int)(((byte)(65)))), ((int)(((byte)(65))))); + this.label1.Font = new System.Drawing.Font("Segoe UI Variable Text", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label1.ForeColor = System.Drawing.Color.White; + this.label1.Location = new System.Drawing.Point(-1, 18); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(100, 33); + this.label1.TabIndex = 208; + this.label1.Text = "Available"; + this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // btnImport + // + this.btnImport.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnImport.Font = new System.Drawing.Font("Segoe UI Variable Text", 9F); + this.btnImport.Location = new System.Drawing.Point(96, 18); + this.btnImport.Name = "btnImport"; + this.btnImport.Size = new System.Drawing.Size(100, 33); + this.btnImport.TabIndex = 209; + this.btnImport.Text = "Import"; + this.btnImport.UseVisualStyleBackColor = true; + this.btnImport.Click += new System.EventHandler(this.btnImport_Click); + // + // panelBottom + // + this.panelBottom.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(238)))), ((int)(((byte)(238))))); + this.panelBottom.Controls.Add(this.linkPluginsDirectory); + this.panelBottom.Controls.Add(this.btnUninstall); + this.panelBottom.Controls.Add(this.btnDownload); + this.panelBottom.Dock = System.Windows.Forms.DockStyle.Bottom; + this.panelBottom.Location = new System.Drawing.Point(0, 401); + this.panelBottom.Name = "panelBottom"; + this.panelBottom.Size = new System.Drawing.Size(646, 45); + this.panelBottom.TabIndex = 210; + // + // linkPluginsDirectory + // + this.linkPluginsDirectory.ActiveLinkColor = System.Drawing.Color.RoyalBlue; + this.linkPluginsDirectory.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.linkPluginsDirectory.AutoEllipsis = true; + this.linkPluginsDirectory.AutoSize = true; + this.linkPluginsDirectory.Font = new System.Drawing.Font("Segoe UI Variable Small", 8.75F); + this.linkPluginsDirectory.LinkBehavior = System.Windows.Forms.LinkBehavior.HoverUnderline; + this.linkPluginsDirectory.LinkColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(112)))), ((int)(((byte)(192))))); + this.linkPluginsDirectory.Location = new System.Drawing.Point(12, 17); + this.linkPluginsDirectory.Name = "linkPluginsDirectory"; + this.linkPluginsDirectory.Size = new System.Drawing.Size(97, 16); + this.linkPluginsDirectory.TabIndex = 208; + this.linkPluginsDirectory.TabStop = true; + this.linkPluginsDirectory.Text = "Plugins directory"; + this.linkPluginsDirectory.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkPluginsDirectory_LinkClicked); + // + // PluginsForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(248)))), ((int)(((byte)(248)))), ((int)(((byte)(248))))); + this.ClientSize = new System.Drawing.Size(646, 446); + this.Controls.Add(this.panelBottom); + this.Controls.Add(this.btnImport); + this.Controls.Add(this.label1); + this.Controls.Add(this.lblHeader); + this.Controls.Add(this.progressBar); + this.Controls.Add(this.textDescription); + this.Controls.Add(this.checkedListBoxPlugins); + this.Name = "PluginsForm"; + this.ShowIcon = false; + this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Show; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Plugins-Manager"; + this.panelBottom.ResumeLayout(false); + this.panelBottom.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.CheckedListBox checkedListBoxPlugins; + private System.Windows.Forms.TextBox textDescription; + private System.Windows.Forms.Button btnDownload; + private System.Windows.Forms.ProgressBar progressBar; + private System.Windows.Forms.Label lblHeader; + private System.Windows.Forms.Button btnUninstall; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button btnImport; + private System.Windows.Forms.Panel panelBottom; + private System.Windows.Forms.LinkLabel linkPluginsDirectory; + } +} \ No newline at end of file diff --git a/FlybyScript/PluginsForm.cs b/FlybyScript/PluginsForm.cs new file mode 100644 index 0000000..baf62b3 --- /dev/null +++ b/FlybyScript/PluginsForm.cs @@ -0,0 +1,220 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Net.Http; +using System.Threading.Tasks; +using System.Windows.Forms; +using Newtonsoft.Json; +using static System.Windows.Forms.VisualStyles.VisualStyleElement; + +namespace FlybyScript +{ + public partial class PluginsForm : Form + { + private const string PluginJsonUrl = "https://raw.githubusercontent.com/builtbybel/Flyby11/main/plugins/plugins_manifest.json"; + private const string PluginBaseUrl = "https://github.com/builtbybel/Flyby11/raw/main/plugins/"; + + // Dictionary to store plugin filenames and descriptions + private Dictionary pluginDescriptions; + + private readonly string pluginsDirectory = Path.Combine(Application.StartupPath, "upgraider"); + + + private MainForm _mainForm; + + public PluginsForm(MainForm mainForm) + { + InitializeComponent(); + _mainForm = mainForm; + + LoadPlugins(); + } + + private async void LoadPlugins() + { + try + { + var json = await DownloadJsonAsync(PluginJsonUrl); + pluginDescriptions = JsonConvert.DeserializeObject>(json); + + foreach (var pluginFileName in pluginDescriptions.Keys) + { + // Add each plugin to the CheckedListBox + bool isInstalled = File.Exists(Path.Combine(pluginsDirectory, pluginFileName)); + int index = checkedListBoxPlugins.Items.Add(pluginFileName); + + // Check the item if the plugin is installed + checkedListBoxPlugins.SetItemChecked(index, isInstalled); + } + } + catch (Exception ex) + { + MessageBox.Show($"Error loading plugins: {ex.Message}"); + } + } + + private async Task DownloadJsonAsync(string url) + { + using (HttpClient client = new HttpClient()) + { + return await client.GetStringAsync(url); + } + } + + private void checkedListBoxPlugins_SelectedIndexChanged(object sender, EventArgs e) + { + var selectedPlugin = checkedListBoxPlugins.SelectedItem?.ToString(); + if (selectedPlugin != null && pluginDescriptions.ContainsKey(selectedPlugin)) + { + textDescription.Text = pluginDescriptions[selectedPlugin]; + } + } + + private async void btnDownload_Click(object sender, EventArgs e) + { + var selectedPlugins = new List(); + foreach (var plugin in checkedListBoxPlugins.CheckedItems) + { + selectedPlugins.Add(plugin.ToString()); + } + + if (selectedPlugins.Count > 0) + { + await DownloadPluginsAsync(selectedPlugins); + } + else + { + MessageBox.Show("Please select at least one plugin to download."); + } + } + + private async Task DownloadPluginsAsync(List plugins) + { + progressBar.Value = 0; + progressBar.Maximum = plugins.Count; + + using (HttpClient client = new HttpClient()) + { + foreach (var pluginFileName in plugins) + { + try + { + var pluginUrl = $"{PluginBaseUrl}{pluginFileName}"; + var downloadPath = Path.Combine(pluginsDirectory, pluginFileName); + + var data = await client.GetByteArrayAsync(pluginUrl); + await WriteAllBytesAsync(downloadPath, data); + + progressBar.Value += 1; + } + catch (Exception ex) + { + MessageBox.Show($"Failed to download {pluginFileName}: {ex.Message}"); + } + } + } + + MessageBox.Show("All selected plugins have been downloaded."); + } + + private async Task WriteAllBytesAsync(string path, byte[] data) + { + using (var fs = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.None, 4096, useAsync: true)) + { + await fs.WriteAsync(data, 0, data.Length); + } + } + + protected override void OnFormClosing(FormClosingEventArgs e) + { + base.OnFormClosing(e); + _mainForm.RefreshTreeView(); + } + + private void btnUninstall_Click(object sender, EventArgs e) + { + var pluginsToRemove = new List(); + foreach (var plugin in checkedListBoxPlugins.CheckedItems) + { + pluginsToRemove.Add(plugin.ToString()); + } + + foreach (var pluginFileName in pluginsToRemove) + { + try + { + var filePath = Path.Combine("upgraider", pluginFileName); + if (File.Exists(filePath)) + { + File.Delete(filePath); + checkedListBoxPlugins.Items.Remove(pluginFileName); + } + } + catch (Exception ex) + { + MessageBox.Show($"Failed to uninstall {pluginFileName}: {ex.Message}"); + } + } + + MessageBox.Show("Selected plugins have been uninstalled."); + checkedListBoxPlugins.Items.Clear(); + LoadPlugins(); // Refresh the list of plugins + } + + private void btnImport_Click(object sender, EventArgs e) + { + using (var folderBrowserDialog = new FolderBrowserDialog()) + { + // Open the folder browser dialog to select the source directory + if (folderBrowserDialog.ShowDialog() == DialogResult.OK) + { + string sourceDirectory = folderBrowserDialog.SelectedPath; + string[] files = Directory.GetFiles(sourceDirectory, "*.*", SearchOption.TopDirectoryOnly) + .Where(file => file.EndsWith(".json") || file.EndsWith(".ps1")).ToArray(); + + List importedPlugins = new List(); // List to store imported plugin names + + foreach (var file in files) + { + try + { + string fileName = Path.GetFileName(file); + string destinationPath = Path.Combine(pluginsDirectory, fileName); + File.Copy(file, destinationPath, true); // Overwrite if file exists + importedPlugins.Add(fileName); // Add to the imported plugins list + } + catch (Exception ex) + { + MessageBox.Show($"Failed to import {file}: {ex.Message}"); + } + } + + // Show message box with the names of the imported plugins + if (importedPlugins.Count > 0) + { + string message = "Imported Plugins:\n" + string.Join("\n", importedPlugins); + MessageBox.Show(message, "Import Completed", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + else + { + MessageBox.Show("No plugins were imported.", "Import Completed", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + } + } + } + + private void linkPluginsDirectory_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + try + { + Process.Start("explorer.exe", pluginsDirectory); + } + catch (Exception ex) + { + MessageBox.Show($"Failed to open plugins directory: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } +} \ No newline at end of file diff --git a/FlybyScript/PluginsForm.resx b/FlybyScript/PluginsForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/FlybyScript/PluginsForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/FlybyScript/Properties/AssemblyInfo.cs b/FlybyScript/Properties/AssemblyInfo.cs index 93e86be..1fe3d41 100644 --- a/FlybyScript/Properties/AssemblyInfo.cs +++ b/FlybyScript/Properties/AssemblyInfo.cs @@ -28,5 +28,5 @@ using System.Runtime.InteropServices; // Buildnummer // Revision // -[assembly: AssemblyVersion("0.13.81")] -[assembly: AssemblyFileVersion("0.13.81")] \ No newline at end of file +[assembly: AssemblyVersion("0.14.107")] +[assembly: AssemblyFileVersion("0.14.107")] \ No newline at end of file diff --git a/FlybyScript/USBManagement.cs b/FlybyScript/USBManagement.cs index e53041a..59c0e58 100644 --- a/FlybyScript/USBManagement.cs +++ b/FlybyScript/USBManagement.cs @@ -73,7 +73,7 @@ namespace FlybyScript /// /// Diskpart Device ID /// - public async Task FormatDriveAsync(string diskNumber) + public async Task FormatDriveAsync(string diskNumber, string partitionScheme) { await Task.Run(() => { @@ -98,12 +98,20 @@ namespace FlybyScript UpdateStatusLabel(); // Updates to 1/5 - Format and Boot USB Drive // Send commands to DiskPart - writer.WriteLine($"select disk {diskNumber}"); // Select the disk based on user input + writer.WriteLine($"select disk {diskNumber}"); // Select the disk UpdateProgress(10); // Update progress writer.WriteLine("clean"); // Clean the disk - - writer.WriteLine("convert mbr"); // Convert to MBR + + // Check partition scheme selection + if (partitionScheme == "GPT") + { + writer.WriteLine("convert gpt"); // Convert to GPT + } + else if (partitionScheme == "MBR") + { + writer.WriteLine("convert mbr"); // Convert to MBR + } UpdateProgress(20); writer.WriteLine("create partition primary"); // Create a new partition @@ -113,14 +121,13 @@ namespace FlybyScript UpdateProgress(60); writer.WriteLine("format fs=fat32 quick label=\"FlybyWin11\""); // Quick format to FAT32 - // writer.WriteLine("assign letter=W"); // Assign drive letter writer.WriteLine("exit"); // Exit DiskPart UpdateProgress(100); // Final progress } } string output = process.StandardOutput.ReadToEnd(); // Get the output from DiskPart - process.WaitForExit(); // Wait for the process to exit + process.WaitForExit(); _logger.Log($"Formatting completed: {output}", Color.Black); } } @@ -131,6 +138,7 @@ namespace FlybyScript }); } + /// /// Copies the contents of the specified ISO file to the USB drive using Robocopy. /// @@ -287,29 +295,27 @@ namespace FlybyScript } /// - /// Downloads the Microsoft Media Creation Tool from https://go.microsoft.com/fwlink/?linkid=2156295 + /// Downloads a specified tool (Media Creation Tool or Installation Assistant) from a provided URL. /// - /// The URL of the Media Creation Tool. + /// The URL of the tool to download. + /// The name of the file to save. /// A task representing the asynchronous operation. - public async Task DownloadMediaCreationTool() + public async Task DownloadMediaTool(string downloadUrl, string fileName) { - string downloadUrl = "https://go.microsoft.com/fwlink/?linkid=2156295"; - using (SaveFileDialog saveFileDialog = new SaveFileDialog()) { saveFileDialog.Filter = "Executable Files (*.exe)|*.exe"; - saveFileDialog.Title = "Save Media Creation Tool"; - saveFileDialog.FileName = "MediaCreationTool.exe"; + saveFileDialog.Title = $"Save {fileName}"; + saveFileDialog.FileName = fileName; - if (saveFileDialog.ShowDialog() == DialogResult.OK) { string destinationPath = saveFileDialog.FileName; try { - _logger.Log("Preparing to download Media Creation Tool...", Color.Black); - _logger.Log("Download may take some time, please wait...", Color.Orange); + _logger.Log($"Preparing to download {fileName}...", Color.Black); + _logger.Log("Download may take some time, please wait...", Color.RoyalBlue); var response = await httpClient.GetAsync(downloadUrl); response.EnsureSuccessStatusCode(); @@ -319,28 +325,29 @@ namespace FlybyScript await response.Content.CopyToAsync(fileStream); } - _logger.Log("Download completed successfully!", Color.Green); + _logger.Log($"{fileName} download completed successfully!", Color.Green); - // Start the downloaded Media Creation Tool - _logger.Log("Starting Media Creation Tool...", Color.Black); + // Start the downloaded tool + _logger.Log($"Starting {fileName}...", Color.Black); Process.Start(new ProcessStartInfo { FileName = destinationPath, - UseShellExecute = true // run .exe files + UseShellExecute = true // To run .exe files }); } catch (Exception ex) { - _logger.Log($"An error occurred while downloading: {ex.Message}", Color.Red); + _logger.Log($"An error occurred while downloading {fileName}: {ex.Message}", Color.Red); } } else { - _logger.Log("Download canceled by user.", Color.Red); + _logger.Log($"{fileName} download canceled by user.", Color.Red); } } } + /// /// Calculates progress based on Robocopy output /// diff --git a/FlybyScript/Views/ExperienceView.Designer.cs b/FlybyScript/Views/ExperienceView.Designer.cs index 186d5d7..474b6a4 100644 --- a/FlybyScript/Views/ExperienceView.Designer.cs +++ b/FlybyScript/Views/ExperienceView.Designer.cs @@ -117,7 +117,7 @@ this.btnRevert.FlatAppearance.BorderSize = 2; this.btnRevert.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(112)))), ((int)(((byte)(192))))); this.btnRevert.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.btnRevert.Font = new System.Drawing.Font("Segoe UI Variable Small", 10F); + this.btnRevert.Font = new System.Drawing.Font("Arial", 9.75F); this.btnRevert.Location = new System.Drawing.Point(473, 565); this.btnRevert.Name = "btnRevert"; this.btnRevert.Size = new System.Drawing.Size(220, 40); @@ -136,7 +136,7 @@ this.btnApply.FlatAppearance.BorderSize = 2; this.btnApply.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(112)))), ((int)(((byte)(192))))); this.btnApply.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.btnApply.Font = new System.Drawing.Font("Segoe UI Variable Small", 10F); + this.btnApply.Font = new System.Drawing.Font("Arial", 9.75F); this.btnApply.Location = new System.Drawing.Point(699, 565); this.btnApply.Name = "btnApply"; this.btnApply.Size = new System.Drawing.Size(222, 40); diff --git a/FlybyScript/Views/ExperienceView.cs b/FlybyScript/Views/ExperienceView.cs index 104f420..1fb821b 100644 --- a/FlybyScript/Views/ExperienceView.cs +++ b/FlybyScript/Views/ExperienceView.cs @@ -35,8 +35,9 @@ namespace Views // Initialize the list of features features = new List { - new FindMyDevice(logger), new PrivacyExperience(logger), + new ActivityHistory(logger), + new LocationTracking(logger), new Telemetry(logger), new FileExplorerAds(logger), new FinishSetupAds(logger), diff --git a/FlybyScript/Views/MediaView.Designer.cs b/FlybyScript/Views/MediaView.Designer.cs index f4cd03f..482e587 100644 --- a/FlybyScript/Views/MediaView.Designer.cs +++ b/FlybyScript/Views/MediaView.Designer.cs @@ -28,13 +28,14 @@ /// private void InitializeComponent() { + this.components = new System.ComponentModel.Container(); this.btnBack = new System.Windows.Forms.Button(); this.rtbLog = new System.Windows.Forms.RichTextBox(); this.comboBoxDrives = new System.Windows.Forms.ComboBox(); this.btnStart = new System.Windows.Forms.Button(); - this.label1 = new System.Windows.Forms.Label(); - this.label2 = new System.Windows.Forms.Label(); - this.label5 = new System.Windows.Forms.Label(); + this.lblDriveInfo = new System.Windows.Forms.Label(); + this.lblDeviceIDInfo = new System.Windows.Forms.Label(); + this.lblStatusInfo = new System.Windows.Forms.Label(); this.btnSelect = new System.Windows.Forms.Button(); this.label6 = new System.Windows.Forms.Label(); this.btnMCT = new System.Windows.Forms.Button(); @@ -45,7 +46,13 @@ this.comboBoxDriveLetters = new System.Windows.Forms.ComboBox(); this.linkShowDiskList = new System.Windows.Forms.LinkLabel(); this.label3 = new System.Windows.Forms.Label(); - this.label4 = new System.Windows.Forms.Label(); + this.lblDriveLetterInfo = new System.Windows.Forms.Label(); + this.lblPartitionSchemeInfo = new System.Windows.Forms.Label(); + this.comboBoxPartitionScheme = new System.Windows.Forms.ComboBox(); + this.btnInstallAssistant = new System.Windows.Forms.Button(); + this.tt = new System.Windows.Forms.ToolTip(this.components); + this.label1 = new System.Windows.Forms.Label(); + this.linkPCHealthCheckApp = new System.Windows.Forms.LinkLabel(); this.SuspendLayout(); // // btnBack @@ -71,6 +78,7 @@ | System.Windows.Forms.AnchorStyles.Right))); this.rtbLog.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(230)))), ((int)(((byte)(230)))), ((int)(((byte)(230))))); this.rtbLog.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.rtbLog.Enabled = false; this.rtbLog.Font = new System.Drawing.Font("Segoe UI Variable Small Light", 9.75F); this.rtbLog.Location = new System.Drawing.Point(59, 362); this.rtbLog.Name = "rtbLog"; @@ -80,9 +88,10 @@ // // comboBoxDrives // + this.comboBoxDrives.Enabled = false; this.comboBoxDrives.Font = new System.Drawing.Font("Segoe UI Variable Small", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.comboBoxDrives.FormattingEnabled = true; - this.comboBoxDrives.Location = new System.Drawing.Point(59, 98); + this.comboBoxDrives.Location = new System.Drawing.Point(59, 258); this.comboBoxDrives.Name = "comboBoxDrives"; this.comboBoxDrives.Size = new System.Drawing.Size(121, 25); this.comboBoxDrives.TabIndex = 235; @@ -92,11 +101,12 @@ this.btnStart.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.btnStart.BackColor = System.Drawing.Color.White; this.btnStart.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnStart.Enabled = false; this.btnStart.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(112)))), ((int)(((byte)(192))))); this.btnStart.FlatAppearance.BorderSize = 2; this.btnStart.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(112)))), ((int)(((byte)(192))))); this.btnStart.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.btnStart.Font = new System.Drawing.Font("Segoe UI Variable Small", 10F); + this.btnStart.Font = new System.Drawing.Font("Arial", 9.75F); this.btnStart.Location = new System.Drawing.Point(671, 562); this.btnStart.Name = "btnStart"; this.btnStart.Size = new System.Drawing.Size(205, 40); @@ -107,57 +117,60 @@ this.btnStart.UseVisualStyleBackColor = false; this.btnStart.Click += new System.EventHandler(this.btnStart_Click); // - // label1 + // lblDriveInfo // - this.label1.AutoEllipsis = true; - this.label1.Font = new System.Drawing.Font("Segoe UI Variable Small", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(112)))), ((int)(((byte)(192))))); - this.label1.Location = new System.Drawing.Point(55, 34); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(182, 32); - this.label1.TabIndex = 237; - this.label1.Tag = ""; - this.label1.Text = "Drive Properties"; + this.lblDriveInfo.AutoEllipsis = true; + this.lblDriveInfo.Enabled = false; + this.lblDriveInfo.Font = new System.Drawing.Font("Segoe UI Variable Small", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.lblDriveInfo.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(112)))), ((int)(((byte)(192))))); + this.lblDriveInfo.Location = new System.Drawing.Point(55, 194); + this.lblDriveInfo.Name = "lblDriveInfo"; + this.lblDriveInfo.Size = new System.Drawing.Size(182, 32); + this.lblDriveInfo.TabIndex = 237; + this.lblDriveInfo.Tag = ""; + this.lblDriveInfo.Text = "Drive Properties"; // - // label2 + // lblDeviceIDInfo // - this.label2.AutoEllipsis = true; - this.label2.Font = new System.Drawing.Font("Segoe UI Variable Small", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label2.Location = new System.Drawing.Point(57, 80); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(79, 15); - this.label2.TabIndex = 238; - this.label2.Tag = ""; - this.label2.Text = "Device ID"; + this.lblDeviceIDInfo.AutoEllipsis = true; + this.lblDeviceIDInfo.Font = new System.Drawing.Font("Segoe UI Variable Small", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.lblDeviceIDInfo.Location = new System.Drawing.Point(57, 240); + this.lblDeviceIDInfo.Name = "lblDeviceIDInfo"; + this.lblDeviceIDInfo.Size = new System.Drawing.Size(79, 15); + this.lblDeviceIDInfo.TabIndex = 238; + this.lblDeviceIDInfo.Tag = ""; + this.lblDeviceIDInfo.Text = "Device ID"; // - // label5 + // lblStatusInfo // - this.label5.AutoEllipsis = true; - this.label5.Font = new System.Drawing.Font("Segoe UI Variable Small", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label5.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(112)))), ((int)(((byte)(192))))); - this.label5.Location = new System.Drawing.Point(55, 328); - this.label5.Name = "label5"; - this.label5.Size = new System.Drawing.Size(114, 31); - this.label5.TabIndex = 241; - this.label5.Tag = ""; - this.label5.Text = "Status"; + this.lblStatusInfo.AutoEllipsis = true; + this.lblStatusInfo.Enabled = false; + this.lblStatusInfo.Font = new System.Drawing.Font("Segoe UI Variable Small", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.lblStatusInfo.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(112)))), ((int)(((byte)(192))))); + this.lblStatusInfo.Location = new System.Drawing.Point(55, 328); + this.lblStatusInfo.Name = "lblStatusInfo"; + this.lblStatusInfo.Size = new System.Drawing.Size(114, 31); + this.lblStatusInfo.TabIndex = 241; + this.lblStatusInfo.Tag = ""; + this.lblStatusInfo.Text = "Status"; // // btnSelect // - this.btnSelect.AutoEllipsis = true; this.btnSelect.BackColor = System.Drawing.Color.White; this.btnSelect.Cursor = System.Windows.Forms.Cursors.Hand; this.btnSelect.FlatAppearance.BorderColor = System.Drawing.Color.Gray; this.btnSelect.FlatAppearance.BorderSize = 2; this.btnSelect.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(112)))), ((int)(((byte)(192))))); this.btnSelect.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.btnSelect.Font = new System.Drawing.Font("Segoe UI Variable Small", 9F); - this.btnSelect.Location = new System.Drawing.Point(59, 241); + this.btnSelect.Font = new System.Drawing.Font("Arial", 8.75F); + this.btnSelect.Location = new System.Drawing.Point(60, 114); this.btnSelect.Name = "btnSelect"; - this.btnSelect.Size = new System.Drawing.Size(132, 28); + this.btnSelect.Size = new System.Drawing.Size(132, 36); this.btnSelect.TabIndex = 242; this.btnSelect.TabStop = false; this.btnSelect.Text = "Select"; + this.tt.SetToolTip(this.btnSelect, "This built-in method prepares a USB drive for a clean install, enabling a fresh r" + + "einstallation of your system."); this.btnSelect.UseCompatibleTextRendering = true; this.btnSelect.UseVisualStyleBackColor = false; this.btnSelect.Click += new System.EventHandler(this.btnSelect_Click); @@ -166,7 +179,7 @@ // this.label6.AutoSize = true; this.label6.Font = new System.Drawing.Font("Segoe UI Variable Small", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label6.Location = new System.Drawing.Point(57, 223); + this.label6.Location = new System.Drawing.Point(58, 96); this.label6.Name = "label6"; this.label6.Size = new System.Drawing.Size(76, 15); this.label6.TabIndex = 243; @@ -175,20 +188,23 @@ // // btnMCT // - this.btnMCT.AutoEllipsis = true; - this.btnMCT.BackColor = System.Drawing.Color.White; + this.btnMCT.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(103)))), ((int)(((byte)(180))))); this.btnMCT.Cursor = System.Windows.Forms.Cursors.Hand; - this.btnMCT.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(241)))), ((int)(((byte)(65)))), ((int)(((byte)(17))))); + this.btnMCT.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(103)))), ((int)(((byte)(180))))); this.btnMCT.FlatAppearance.BorderSize = 2; - this.btnMCT.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(112)))), ((int)(((byte)(192))))); + this.btnMCT.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(103)))), ((int)(((byte)(160))))); this.btnMCT.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.btnMCT.Font = new System.Drawing.Font("Segoe UI Variable Small", 9F); - this.btnMCT.Location = new System.Drawing.Point(235, 241); + this.btnMCT.Font = new System.Drawing.Font("Arial", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.btnMCT.ForeColor = System.Drawing.Color.White; + this.btnMCT.Location = new System.Drawing.Point(463, 114); this.btnMCT.Name = "btnMCT"; - this.btnMCT.Size = new System.Drawing.Size(205, 28); + this.btnMCT.Size = new System.Drawing.Size(214, 36); this.btnMCT.TabIndex = 244; this.btnMCT.TabStop = false; this.btnMCT.Text = "Media Creation Tool (Microsoft)"; + this.tt.SetToolTip(this.btnMCT, "If you want to perform a reinstall or clean install of Windows 11 on a new or use" + + "d PC, use this option to download the media creation tool to make a bootable USB" + + " or DVD."); this.btnMCT.UseCompatibleTextRendering = true; this.btnMCT.UseVisualStyleBackColor = false; this.btnMCT.Click += new System.EventHandler(this.btnMCT_Click); @@ -197,7 +213,7 @@ // this.label7.AutoSize = true; this.label7.Font = new System.Drawing.Font("Segoe UI Variable Small", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label7.Location = new System.Drawing.Point(232, 223); + this.label7.Location = new System.Drawing.Point(233, 96); this.label7.Name = "label7"; this.label7.Size = new System.Drawing.Size(85, 15); this.label7.TabIndex = 245; @@ -208,6 +224,7 @@ // this.progressBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); + this.progressBar.Enabled = false; this.progressBar.Location = new System.Drawing.Point(60, 516); this.progressBar.Name = "progressBar"; this.progressBar.Size = new System.Drawing.Size(834, 23); @@ -232,10 +249,10 @@ this.checkCreateUnattend.AutoEllipsis = true; this.checkCreateUnattend.FlatAppearance.BorderColor = System.Drawing.Color.Gray; this.checkCreateUnattend.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.checkCreateUnattend.Font = new System.Drawing.Font("Segoe UI Variable Small", 8F); - this.checkCreateUnattend.Location = new System.Drawing.Point(72, 275); + this.checkCreateUnattend.Font = new System.Drawing.Font("Arial", 8.75F); + this.checkCreateUnattend.Location = new System.Drawing.Point(73, 156); this.checkCreateUnattend.Name = "checkCreateUnattend"; - this.checkCreateUnattend.Size = new System.Drawing.Size(194, 25); + this.checkCreateUnattend.Size = new System.Drawing.Size(214, 25); this.checkCreateUnattend.TabIndex = 250; this.checkCreateUnattend.Text = "Skip Hardware limits and go local"; this.checkCreateUnattend.UseVisualStyleBackColor = true; @@ -245,17 +262,19 @@ // comboBoxDriveLetters // this.comboBoxDriveLetters.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboBoxDriveLetters.Enabled = false; this.comboBoxDriveLetters.Font = new System.Drawing.Font("Segoe UI Variable Small", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.comboBoxDriveLetters.FormattingEnabled = true; - this.comboBoxDriveLetters.Location = new System.Drawing.Point(210, 98); + this.comboBoxDriveLetters.Location = new System.Drawing.Point(210, 258); this.comboBoxDriveLetters.Name = "comboBoxDriveLetters"; this.comboBoxDriveLetters.Size = new System.Drawing.Size(121, 25); this.comboBoxDriveLetters.TabIndex = 251; // // linkShowDiskList // + this.linkShowDiskList.Enabled = false; this.linkShowDiskList.LinkColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(112)))), ((int)(((byte)(192))))); - this.linkShowDiskList.Location = new System.Drawing.Point(60, 126); + this.linkShowDiskList.Location = new System.Drawing.Point(60, 286); this.linkShowDiskList.Name = "linkShowDiskList"; this.linkShowDiskList.Size = new System.Drawing.Size(177, 16); this.linkShowDiskList.TabIndex = 252; @@ -268,31 +287,114 @@ this.label3.AutoEllipsis = true; this.label3.Font = new System.Drawing.Font("Segoe UI Variable Small", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.label3.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(112)))), ((int)(((byte)(192))))); - this.label3.Location = new System.Drawing.Point(55, 177); + this.label3.Location = new System.Drawing.Point(55, 25); this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(182, 32); + this.label3.Size = new System.Drawing.Size(232, 32); this.label3.TabIndex = 253; this.label3.Tag = ""; - this.label3.Text = "Create Media"; + this.label3.Text = "Create Installation Media"; // - // label4 + // lblDriveLetterInfo // - this.label4.AutoEllipsis = true; - this.label4.Font = new System.Drawing.Font("Segoe UI Variable Small", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label4.Location = new System.Drawing.Point(207, 80); - this.label4.Name = "label4"; - this.label4.Size = new System.Drawing.Size(79, 15); - this.label4.TabIndex = 254; - this.label4.Tag = ""; - this.label4.Text = "Device Letter"; + this.lblDriveLetterInfo.AutoEllipsis = true; + this.lblDriveLetterInfo.Enabled = false; + this.lblDriveLetterInfo.Font = new System.Drawing.Font("Segoe UI Variable Small", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.lblDriveLetterInfo.Location = new System.Drawing.Point(207, 240); + this.lblDriveLetterInfo.Name = "lblDriveLetterInfo"; + this.lblDriveLetterInfo.Size = new System.Drawing.Size(79, 15); + this.lblDriveLetterInfo.TabIndex = 254; + this.lblDriveLetterInfo.Tag = ""; + this.lblDriveLetterInfo.Text = "Device Letter"; // - // InstallationMediaView + // lblPartitionSchemeInfo + // + this.lblPartitionSchemeInfo.AutoEllipsis = true; + this.lblPartitionSchemeInfo.Enabled = false; + this.lblPartitionSchemeInfo.Font = new System.Drawing.Font("Segoe UI Variable Small", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.lblPartitionSchemeInfo.Location = new System.Drawing.Point(361, 240); + this.lblPartitionSchemeInfo.Name = "lblPartitionSchemeInfo"; + this.lblPartitionSchemeInfo.Size = new System.Drawing.Size(109, 15); + this.lblPartitionSchemeInfo.TabIndex = 255; + this.lblPartitionSchemeInfo.Tag = ""; + this.lblPartitionSchemeInfo.Text = "Partition scheme"; + // + // comboBoxPartitionScheme + // + this.comboBoxPartitionScheme.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboBoxPartitionScheme.Enabled = false; + this.comboBoxPartitionScheme.Font = new System.Drawing.Font("Segoe UI Variable Small", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.comboBoxPartitionScheme.FormattingEnabled = true; + this.comboBoxPartitionScheme.Location = new System.Drawing.Point(364, 258); + this.comboBoxPartitionScheme.Name = "comboBoxPartitionScheme"; + this.comboBoxPartitionScheme.Size = new System.Drawing.Size(126, 25); + this.comboBoxPartitionScheme.TabIndex = 256; + // + // btnInstallAssistant + // + this.btnInstallAssistant.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(103)))), ((int)(((byte)(180))))); + this.btnInstallAssistant.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnInstallAssistant.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(103)))), ((int)(((byte)(180))))); + this.btnInstallAssistant.FlatAppearance.BorderSize = 2; + this.btnInstallAssistant.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(103)))), ((int)(((byte)(160))))); + this.btnInstallAssistant.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnInstallAssistant.Font = new System.Drawing.Font("Arial", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.btnInstallAssistant.ForeColor = System.Drawing.Color.White; + this.btnInstallAssistant.Location = new System.Drawing.Point(236, 114); + this.btnInstallAssistant.Name = "btnInstallAssistant"; + this.btnInstallAssistant.Size = new System.Drawing.Size(214, 36); + this.btnInstallAssistant.TabIndex = 257; + this.btnInstallAssistant.TabStop = false; + this.btnInstallAssistant.Text = "Installation Assistant (Microsoft)"; + this.tt.SetToolTip(this.btnInstallAssistant, "This is the best option for installing Windows 11 on the device you’re currently " + + "using."); + this.btnInstallAssistant.UseCompatibleTextRendering = true; + this.btnInstallAssistant.UseVisualStyleBackColor = false; + this.btnInstallAssistant.Click += new System.EventHandler(this.btnInstallAssistant_Click); + // + // 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.AutoEllipsis = true; + this.label1.Font = new System.Drawing.Font("Segoe UI Variable Small", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label1.Location = new System.Drawing.Point(60, 57); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(846, 15); + this.label1.TabIndex = 258; + this.label1.Tag = ""; + this.label1.Text = "There are 3 options below for installing or creating Windows 11 media. Check out " + + "each one to determine the best option for you."; + // + // linkPCHealthCheckApp + // + this.linkPCHealthCheckApp.ActiveLinkColor = System.Drawing.Color.RoyalBlue; + this.linkPCHealthCheckApp.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.linkPCHealthCheckApp.AutoEllipsis = true; + this.linkPCHealthCheckApp.Font = new System.Drawing.Font("Segoe UI Variable Small Semilig", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.linkPCHealthCheckApp.LinkBehavior = System.Windows.Forms.LinkBehavior.HoverUnderline; + this.linkPCHealthCheckApp.LinkColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.linkPCHealthCheckApp.Location = new System.Drawing.Point(44, 605); + this.linkPCHealthCheckApp.Name = "linkPCHealthCheckApp"; + this.linkPCHealthCheckApp.Size = new System.Drawing.Size(566, 16); + this.linkPCHealthCheckApp.TabIndex = 260; + this.linkPCHealthCheckApp.TabStop = true; + this.linkPCHealthCheckApp.Text = "Before installing, please refer to the WhyNotWin11 app to confirm your device mee" + + "ts the minimum system requirements"; + this.linkPCHealthCheckApp.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkPCHealthCheckApp_LinkClicked); + // + // MediaView // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.AutoScroll = true; this.BackColor = System.Drawing.Color.White; - this.Controls.Add(this.label4); + this.Controls.Add(this.linkPCHealthCheckApp); + this.Controls.Add(this.label1); + this.Controls.Add(this.btnInstallAssistant); + this.Controls.Add(this.comboBoxPartitionScheme); + this.Controls.Add(this.lblPartitionSchemeInfo); + this.Controls.Add(this.lblDriveLetterInfo); this.Controls.Add(this.label3); this.Controls.Add(this.linkShowDiskList); this.Controls.Add(this.comboBoxDriveLetters); @@ -303,14 +405,14 @@ this.Controls.Add(this.btnMCT); this.Controls.Add(this.label6); this.Controls.Add(this.btnSelect); - this.Controls.Add(this.label5); - this.Controls.Add(this.label2); - this.Controls.Add(this.label1); + this.Controls.Add(this.lblStatusInfo); + this.Controls.Add(this.lblDeviceIDInfo); + this.Controls.Add(this.lblDriveInfo); this.Controls.Add(this.btnStart); this.Controls.Add(this.comboBoxDrives); this.Controls.Add(this.rtbLog); this.Controls.Add(this.btnBack); - this.Name = "InstallationMediaView"; + this.Name = "MediaView"; this.Size = new System.Drawing.Size(959, 631); this.ResumeLayout(false); this.PerformLayout(); @@ -323,9 +425,9 @@ private System.Windows.Forms.RichTextBox rtbLog; private System.Windows.Forms.ComboBox comboBoxDrives; private System.Windows.Forms.Button btnStart; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.Label label5; + private System.Windows.Forms.Label lblDriveInfo; + private System.Windows.Forms.Label lblDeviceIDInfo; + private System.Windows.Forms.Label lblStatusInfo; private System.Windows.Forms.Button btnSelect; private System.Windows.Forms.Label label6; private System.Windows.Forms.Button btnMCT; @@ -336,6 +438,12 @@ private System.Windows.Forms.ComboBox comboBoxDriveLetters; private System.Windows.Forms.LinkLabel linkShowDiskList; private System.Windows.Forms.Label label3; - private System.Windows.Forms.Label label4; + private System.Windows.Forms.Label lblDriveLetterInfo; + private System.Windows.Forms.Label lblPartitionSchemeInfo; + private System.Windows.Forms.ComboBox comboBoxPartitionScheme; + private System.Windows.Forms.Button btnInstallAssistant; + private System.Windows.Forms.ToolTip tt; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.LinkLabel linkPCHealthCheckApp; } } diff --git a/FlybyScript/Views/MediaView.cs b/FlybyScript/Views/MediaView.cs index 8f534ed..68d24d0 100644 --- a/FlybyScript/Views/MediaView.cs +++ b/FlybyScript/Views/MediaView.cs @@ -66,10 +66,15 @@ namespace Views } else { - //MessageBox.Show("No removable drives found.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); - comboBoxDriveLetters.Enabled = - comboBoxDrives.Enabled = false; + // MessageBox.Show("No removable drives found.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); + comboBoxDriveLetters.Enabled = comboBoxDrives.Enabled = false; } + + // Initialize partition schemes + comboBoxPartitionScheme.Items.Clear(); + comboBoxPartitionScheme.Items.Add("GPT"); + comboBoxPartitionScheme.Items.Add("MBR"); + comboBoxPartitionScheme.SelectedIndex = 0; // default to gpt } private async Task ShowDiskList() @@ -139,10 +144,10 @@ namespace Views btnStart.Enabled = false; // Disable the Start button // Validate Disk Number - if (string.IsNullOrEmpty(comboBoxDrives.Text) || !int.TryParse(comboBoxDrives.Text, out _)) + if (string.IsNullOrEmpty(comboBoxDrives.Text) || !int.TryParse(comboBoxDrives.Text, out int diskNumber)) { logger.Log("Please enter a valid Disk Number.", Color.Red); - btnStart.Enabled = true; // Re-enable the button + btnStart.Enabled = true; return; } @@ -154,21 +159,33 @@ namespace Views return; } - string diskNumber = comboBoxDrives.Text.Trim(); // Get the disk number from the ComboBox - string driveLetter = comboBoxDriveLetters.SelectedItem.ToString().Trim(); // Get the selected drive letter - - logger.Log($"Starting to format Disk {diskNumber} and copy to Drive {driveLetter}...", Color.Black); + // Get the selected drive letter and partition scheme + string driveLetter = comboBoxDriveLetters.SelectedItem.ToString().Trim(); + string partitionScheme = comboBoxPartitionScheme.SelectedItem.ToString().Trim(); // Get the selected partition scheme try { - // Format the drive using the disk number - await usbManagement.FormatDriveAsync(diskNumber); // Pass the disk number + // Check if the selected drive is a USB stick + DriveInfo selectedDrive = DriveInfo.GetDrives() + .FirstOrDefault(d => d.Name.StartsWith(driveLetter)); + + if (selectedDrive == null || selectedDrive.DriveType != DriveType.Removable) + { + logger.Log("Selected drive is not a compatible USB stick. Only USB sticks are supported.", Color.Red); + btnStart.Enabled = true; + return; + } + + logger.Log($"Starting to format Disk {diskNumber} ({driveLetter}) as {partitionScheme}...", Color.Black); + + // Format the drive with the selected partition scheme + await usbManagement.FormatDriveAsync(diskNumber.ToString(), partitionScheme); // Pass the disk number and selected partition scheme logger.Log($"Disk {diskNumber} formatted successfully.", Color.Black); logger.Log($"Disk {diskNumber} is now bootable.", Color.Black); // Copy ISO and create unattend.xml if checked bool createUnattend = checkCreateUnattend.Checked; - await usbManagement.CopyISOWithUnattendAsync(driveLetter, selectedIsoPath, createUnattend); // Use the drive letter for copying + await usbManagement.CopyISOWithUnattendAsync(driveLetter, selectedIsoPath, createUnattend); logger.Log("Process completed!", Color.Green); } @@ -194,15 +211,38 @@ namespace Views selectedIsoPath = openFileDialog.FileName; logger.Log($"Selected ISO file: {selectedIsoPath}", Color.Black); - checkCreateUnattend.Visible = true; // Show the checkbox to create unattend.xml + ToggleIsoControls(true); } else { logger.Log("ISO file selection was cancelled.", Color.Red); + ToggleIsoControls(false); // Disable ISO-related controls if selection is canceled } + + // MCT and Install Assistant buttons are always enabled + btnMCT.Enabled = true; + btnInstallAssistant.Enabled = true; } } + // Helper method to toggle ISO-related controls + private void ToggleIsoControls(bool isEnabled) + { + checkCreateUnattend.Visible = isEnabled; + comboBoxDrives.Enabled = isEnabled; + comboBoxDriveLetters.Enabled = isEnabled; + comboBoxPartitionScheme.Enabled = isEnabled; + lblDeviceIDInfo.Enabled = isEnabled; + lblDriveInfo.Enabled = isEnabled; + rtbLog.Enabled = isEnabled; + lblDriveLetterInfo.Enabled = isEnabled; + lblPartitionSchemeInfo.Enabled = isEnabled; + lblStatusInfo.Enabled = isEnabled; + linkShowDiskList.Enabled = isEnabled; + btnStart.Enabled = isEnabled; + } + + private void checkCreateUnattend_CheckedChanged(object sender, EventArgs e) { if (checkCreateUnattend.Checked) @@ -235,12 +275,27 @@ namespace Views private async void btnMCT_Click(object sender, EventArgs e) { - await usbManagement.DownloadMediaCreationTool(); + string mediaCreationToolUrl = "https://go.microsoft.com/fwlink/?linkid=2156295"; + await usbManagement.DownloadMediaTool(mediaCreationToolUrl, "MediaCreationTool.exe"); + } + + private async void btnInstallAssistant_Click(object sender, EventArgs e) + { + string installAssistantUrl = "https://go.microsoft.com/fwlink/?linkid=2171764"; + await usbManagement.DownloadMediaTool(installAssistantUrl, "Windows11InstallationAssistant.exe"); + } + + private async void linkPCHealthCheckApp_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + string installAssistantUrl = "https://github.com/rcmaehl/WhyNotWin11/releases/download/2.6.1.1/WhyNotWin11.exe"; + await usbManagement.DownloadMediaTool(installAssistantUrl, "WhyNotWin11.exe"); } private void btnBack_Click(object sender, EventArgs e) { SwitchView.GoBack(this.Parent as Panel); } + + } } \ No newline at end of file diff --git a/FlybyScript/Views/MediaView.resx b/FlybyScript/Views/MediaView.resx index 1af7de1..4978a90 100644 --- a/FlybyScript/Views/MediaView.resx +++ b/FlybyScript/Views/MediaView.resx @@ -117,4 +117,10 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 17, 17 + + + 17, 17 + \ No newline at end of file