diff --git a/Program.cs b/Program.cs
index c6deb3e..c8690c7 100644
--- a/Program.cs
+++ b/Program.cs
@@ -6,17 +6,28 @@ static class Program
/// The main entry point for the application.
///
[STAThread]
- static void Main()
+ static void Main(string[] argv)
{
-#if DEBUG
- Utils.AllocConsole();
Utils.AttachConsole(-1);
-#endif
- // To customize application configuration such as set high DPI settings or default font,
- // see https://aka.ms/applicationconfiguration.
+
Velvet.ConsoleWriteLine("Loading ApplicationConfiguration...");
ApplicationConfiguration.Initialize();
+ CommandLineResult cmdResult = HandleCommandLine(argv);
+
Velvet.ConsoleWriteLine("Starting App...");
Application.Run(new MainForm());
- }
+ }
+
+ static CommandLineResult HandleCommandLine(string[] argv)
+ {
+ foreach(string arg in argv)
+ {
+ if(arg.StartsWith(Utils.Scheme))
+ {
+ GameBanana.HandleCommandLine(arg[(Utils.Scheme.Length + 1)..]);
+ return CommandLineResult.GameBanana;
+ }
+ }
+ return CommandLineResult.None;
+ }
}
\ No newline at end of file
diff --git a/forms/AboutWindow.Designer.cs b/forms/AboutForm.Designer.cs
similarity index 55%
rename from forms/AboutWindow.Designer.cs
rename to forms/AboutForm.Designer.cs
index 99125af..85b514e 100644
--- a/forms/AboutWindow.Designer.cs
+++ b/forms/AboutForm.Designer.cs
@@ -1,6 +1,6 @@
namespace ThemModdingHerds.VelvetBeautifier
{
- partial class AboutWindow
+ partial class AboutForm
{
///
/// Required designer variable.
@@ -28,10 +28,14 @@ protected override void Dispose(bool disposing)
///
private void InitializeComponent()
{
- System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AboutWindow));
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AboutForm));
VelvetPicture = new PictureBox();
Title = new Label();
GitHubLink = new LinkLabel();
+ GameBananaLink = new LinkLabel();
+ ByLabel = new Label();
+ NightTheFoxLink = new LinkLabel();
+ VelvetQuote = new Label();
((System.ComponentModel.ISupportInitialize)VelvetPicture).BeginInit();
SuspendLayout();
//
@@ -66,16 +70,63 @@ private void InitializeComponent()
GitHubLink.Text = "GitHub";
GitHubLink.LinkClicked += GitHubLink_LinkClicked;
//
- // AboutWindow
+ // GameBananaLink
+ //
+ GameBananaLink.AutoSize = true;
+ GameBananaLink.Location = new Point(660, 426);
+ GameBananaLink.Name = "GameBananaLink";
+ GameBananaLink.Size = new Size(77, 15);
+ GameBananaLink.TabIndex = 3;
+ GameBananaLink.TabStop = true;
+ GameBananaLink.Text = "GameBanana";
+ GameBananaLink.LinkClicked += GameBananaLink_LinkClicked;
+ //
+ // ByLabel
+ //
+ ByLabel.AutoSize = true;
+ ByLabel.Font = new Font("Segoe UI", 9F, FontStyle.Italic);
+ ByLabel.Location = new Point(526, 79);
+ ByLabel.Name = "ByLabel";
+ ByLabel.Size = new Size(20, 15);
+ ByLabel.TabIndex = 4;
+ ByLabel.Text = "by";
+ //
+ // NightTheFoxLink
+ //
+ NightTheFoxLink.AutoSize = true;
+ NightTheFoxLink.Font = new Font("Segoe UI", 9F, FontStyle.Italic);
+ NightTheFoxLink.Location = new Point(543, 79);
+ NightTheFoxLink.Name = "NightTheFoxLink";
+ NightTheFoxLink.Size = new Size(79, 15);
+ NightTheFoxLink.TabIndex = 5;
+ NightTheFoxLink.TabStop = true;
+ NightTheFoxLink.Text = "Night The Fox";
+ NightTheFoxLink.LinkClicked += NightTheFoxLink_LinkClicked;
+ //
+ // VelvetQuote
+ //
+ VelvetQuote.AutoSize = true;
+ VelvetQuote.Font = new Font("French Script MT", 23F, FontStyle.Italic);
+ VelvetQuote.Location = new Point(348, 141);
+ VelvetQuote.Name = "VelvetQuote";
+ VelvetQuote.Size = new Size(440, 35);
+ VelvetQuote.TabIndex = 6;
+ VelvetQuote.Text = "\"Want some more? Of course you do.\" - Velvet";
+ //
+ // AboutForm
//
AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(800, 450);
+ Controls.Add(VelvetQuote);
+ Controls.Add(NightTheFoxLink);
+ Controls.Add(ByLabel);
+ Controls.Add(GameBananaLink);
Controls.Add(GitHubLink);
Controls.Add(Title);
Controls.Add(VelvetPicture);
Icon = (Icon)resources.GetObject("$this.Icon");
- Name = "AboutWindow";
+ Name = "AboutForm";
Text = "About";
((System.ComponentModel.ISupportInitialize)VelvetPicture).EndInit();
ResumeLayout(false);
@@ -87,5 +138,9 @@ private void InitializeComponent()
private PictureBox VelvetPicture;
private Label Title;
private LinkLabel GitHubLink;
+ private LinkLabel GameBananaLink;
+ private Label ByLabel;
+ private LinkLabel NightTheFoxLink;
+ private Label VelvetQuote;
}
}
\ No newline at end of file
diff --git a/forms/AboutForm.cs b/forms/AboutForm.cs
new file mode 100644
index 0000000..028b088
--- /dev/null
+++ b/forms/AboutForm.cs
@@ -0,0 +1,16 @@
+namespace ThemModdingHerds.VelvetBeautifier
+{
+ public partial class AboutForm : Form
+ {
+ public AboutForm()
+ {
+ InitializeComponent();
+ }
+
+ private void GitHubLink_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) => Utils.OpenLink("https://github.com/ThemModdingHerds/velvet-beautifier");
+
+ private void GameBananaLink_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) => Utils.OpenLink("https://gamebanana.com/tools/15674");
+
+ private void NightTheFoxLink_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) => Utils.OpenLink("https://github.com/N1ghtTheF0x");
+ }
+}
diff --git a/forms/AboutWindow.resx b/forms/AboutForm.resx
similarity index 98%
rename from forms/AboutWindow.resx
rename to forms/AboutForm.resx
index 78460ee..b211acc 100644
--- a/forms/AboutWindow.resx
+++ b/forms/AboutForm.resx
@@ -127,7 +127,7 @@
lxxLuF+4I2XZkh9MFjmleE2xlV0xf+6pXhhetKenlC6zjTHGiTGJhsEKy2Qp0COrLYpLXPajFfytvn9S
XIa4ljHFMUIOC933o/7gd7duuq+3mBSOQvWT5711Qs0WfG163ueh530dQegRLuySP3cAg++ib5a0jn1o
XIezy5JmbMP5BrQ85HVH96WQzGA6Da8n8k0z0HQNdXPF3n72Ob6DhHQ1cQW7e9CVkez5Cu+uLe/tzzN+
- f0S/Aaj2crwH4K75AAAACXBIWXMAAAsPAAALDwGS+QOlAAAAB3RJTUUH5wwWDicOQPTWsAAAiGtJREFU
+ f0S/Aaj2crwH4K75AAAACXBIWXMAAAsMAAALDAE/QCLIAAAAB3RJTUUH5wwWDicOQPTWsAAAiGtJREFU
eF7tvWeQFMeWNrz/31+7Efvni/je3Y3vxruvhADpXulKWokrLyRgRg7hER4hEN4jJBohEEYghADhBw8C
BjN47wY3w8C47nE90z3eMiAkEOju3vzqya6szq7O7qnqru5pk0/EEzDd5boq86mTJ0+e808SEjxsKU/O
snV74sic7h1Kbe91/mPxx88S/Ev/Vj7H9+qmEhISEtEFhGj1gJfITwP/S0h8t2rgiwTbqbtISEhIRB6w
diff --git a/forms/AboutWindow.cs b/forms/AboutWindow.cs
deleted file mode 100644
index 184ae80..0000000
--- a/forms/AboutWindow.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-namespace ThemModdingHerds.VelvetBeautifier
-{
- public partial class AboutWindow : Form
- {
- public AboutWindow()
- {
- InitializeComponent();
- }
-
- private void GitHubLink_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) => Utils.OpenLink("https://github.com/ThemModdingHerds/velvet-beautifier");
- }
-}
diff --git a/forms/DownloadForm.Designer.cs b/forms/DownloadForm.Designer.cs
new file mode 100644
index 0000000..0a05b45
--- /dev/null
+++ b/forms/DownloadForm.Designer.cs
@@ -0,0 +1,100 @@
+namespace ThemModdingHerds.VelvetBeautifier
+{
+ partial class DownloadForm
+ {
+ ///
+ /// 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()
+ {
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DownloadForm));
+ ModNameLabel = new Label();
+ ModAuthorLabel = new Label();
+ ModDescriptionBox = new TextBox();
+ InstallButton = new Button();
+ SuspendLayout();
+ //
+ // ModNameLabel
+ //
+ ModNameLabel.AutoSize = true;
+ ModNameLabel.Font = new Font("Segoe UI", 15F);
+ ModNameLabel.Location = new Point(12, 9);
+ ModNameLabel.Name = "ModNameLabel";
+ ModNameLabel.Size = new Size(106, 28);
+ ModNameLabel.TabIndex = 0;
+ ModNameLabel.Text = "ModName";
+ //
+ // ModAuthorLabel
+ //
+ ModAuthorLabel.AutoSize = true;
+ ModAuthorLabel.Font = new Font("Segoe UI", 9F, FontStyle.Italic);
+ ModAuthorLabel.Location = new Point(21, 37);
+ ModAuthorLabel.Name = "ModAuthorLabel";
+ ModAuthorLabel.Size = new Size(69, 15);
+ ModAuthorLabel.TabIndex = 1;
+ ModAuthorLabel.Text = "by someone";
+ //
+ // ModDescriptionBox
+ //
+ ModDescriptionBox.Location = new Point(12, 55);
+ ModDescriptionBox.Multiline = true;
+ ModDescriptionBox.Name = "ModDescriptionBox";
+ ModDescriptionBox.ReadOnly = true;
+ ModDescriptionBox.Size = new Size(776, 318);
+ ModDescriptionBox.TabIndex = 2;
+ //
+ // InstallButton
+ //
+ InstallButton.Font = new Font("Segoe UI", 20F);
+ InstallButton.Location = new Point(12, 379);
+ InstallButton.Name = "InstallButton";
+ InstallButton.Size = new Size(776, 59);
+ InstallButton.TabIndex = 3;
+ InstallButton.Text = "Install";
+ InstallButton.UseVisualStyleBackColor = true;
+ //
+ // DownloadForm
+ //
+ AutoScaleDimensions = new SizeF(7F, 15F);
+ AutoScaleMode = AutoScaleMode.Font;
+ ClientSize = new Size(800, 450);
+ Controls.Add(InstallButton);
+ Controls.Add(ModDescriptionBox);
+ Controls.Add(ModAuthorLabel);
+ Controls.Add(ModNameLabel);
+ Icon = (Icon)resources.GetObject("$this.Icon");
+ Name = "DownloadForm";
+ Text = "DownloadForm";
+ ResumeLayout(false);
+ PerformLayout();
+ }
+
+ #endregion
+
+ private Label ModNameLabel;
+ private Label ModAuthorLabel;
+ private TextBox ModDescriptionBox;
+ private Button InstallButton;
+ }
+}
\ No newline at end of file
diff --git a/forms/DownloadForm.cs b/forms/DownloadForm.cs
new file mode 100644
index 0000000..b2d72c1
--- /dev/null
+++ b/forms/DownloadForm.cs
@@ -0,0 +1,41 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Security.Policy;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace ThemModdingHerds.VelvetBeautifier
+{
+ public partial class DownloadForm : Form
+ {
+ private string? Url {get;}
+ private string? UnzippedPath {get;}
+ public DownloadForm(GameBananaMod mod,string url)
+ {
+ InitializeComponent();
+ Url = url;
+ Text = "Install " + mod.ModName + '?';
+ ModNameLabel.Text = mod.ModName;
+ ModAuthorLabel.Text = "by " + mod.OwnerName;
+ ModDescriptionBox.Text = mod.Body;
+ }
+ public DownloadForm(Mod mod,string unzippedpath)
+ {
+ InitializeComponent();
+ UnzippedPath = unzippedpath;
+ Text = "Install " + mod.Info.Name;
+ ModNameLabel.Text = mod.Info.Name;
+ ModAuthorLabel.Text = "by " + mod.Info.Author;
+ ModDescriptionBox.Text = mod.Info.Description;
+ }
+ public DownloadForm(GameBananaMod mod): this(mod,mod.Files.Values.ToArray()[0].DownloadUrl)
+ {
+
+ }
+ }
+}
diff --git a/forms/DownloadForm.resx b/forms/DownloadForm.resx
new file mode 100644
index 0000000..a8de6f5
--- /dev/null
+++ b/forms/DownloadForm.resx
@@ -0,0 +1,781 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
+
+
+
+
+ AAABAAEAuLgAAAEACAComQAAFgAAACgAAAC4AAAAcAEAAAEACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAOPYEAK0OAACBEggAhSIAAKEmBAChMfgAvS4IAL01+ACpPgQAwT4AALFCDADJQggA1U4UANlKLADFW
+ iQA0VpAAM1iMADpclwA4WKYAN1qiADZcnQAzWakAMlukACpM1wA1WK4ALUreADdXtAAwWbAAN1+bADxf
+ mgA0VroAMli1AD5enwAuV7wAMVbCADNVyAA+Y5gAJ1DdADdXwwAxUtUALVbKADlkmgAqT+MANlTRADBV
+ 0QA8ZKEAQF60AC9YzQArV9MALlXZADxnnQBBZ5wAMVTfAC1S5wBIaJ0AKljdACxW4wBHY7IAP2ilAC5V
+ 6QA/aqEAKVbsAC5Z5gA+XNoAKljtAE1togBOaqwAQW+gACtZ7wBSb54ATXCfAERh1gAtW/EAP3OmADRf
+ 7QBGdKUAV3SjAC5g7wBCd6kAfYB/AFt4pwBEe6cAW3ukAGJ7pgBcd7YAWXPMAEh/qwBTcN8AXHbPAEuC
+ rgA8b/IAZ4KqAIiLiQBHhLMAZYWvAHGGrQBJibEAY3riAEWA1wB0ibEAQXvzAE2NtgB2jq8AaYLgAJSX
+ lQBjkbcAS5O4AFGSuwCAkrIARYXzAH2UtwBziOIAUJm9AEmM9ACIm7UAhJXLAIqcvABLkfIAVp/DAFCi
+ wwCipaMAWaLGAI+fxwBUpsUAg5jmAJWkvQBXqckAk6u3AFWl3wCrrqwAVKL1AFWvzwBcr88AlKPqAJ+v
+ wQCgrscAV7PNAKexwQBYqvMAYbTUALS3tQBct9IAYrfRAJ6s6gBeudQArLfHALm8ugBhvdgAXrT2AKq5
+ 0gCruNgAXL/bAFvB1gBguPUAvsG/AGTA2wCzvs4AXsHeAF/F2gBoxOAAvMLQAGnI3QBjyd4Av8fOALrF
+ 1gBlyeUAtL/wAGbM4gCBzN4Ays3LAMvM0QBlyfsAwMvcAMbN1QDH0NAAa9HnAL3I7wDO0c8AntHdALbR
+ 1wDJzt0Az9DWAMPS1ADV0dQAv8ryANDT0QBpz/sAvtPXAMXQ4QCE1OYAvtTYAG/V6wB81ekA2NXRANLV
+ 0wDM1dUAmdXjAGnW7QBq0/gAzdTbALTW3QCj1uIA1NXaAKrY3QDU19UAr9jdAGzV+gDP1OMApdrgANzZ
+ 1QDW2dcAytjeAHPa8ABt2/IA2NneAG/a+QCe3eQA39zXANnc2gBv3+8Afd7vAM/W9QB34PAAi+DsAJLg
+ 6wDh39oAcuHyANvf3ACF4e4A1t3lAOXi3QB75PQAdeP7AN/j4AB25fcA2970AOjm4QDc5OsAeen6AI3p
+ 9wDr6OQAiOr6AJXq9wDt6uYAquz1ALft8wDj6PgAvu7xAO/t6ADq7usA0vDuAO7w9QD29/wA+vz/AP//
+ /wAAAAAA/////////////////////////////////////////////////////////////0+3sfj4+Pj4
+ +PjCzPj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+OnCscHh+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+Pj4+P////////////////////////////////////////////////////////////9PwbH4
+ +Pj4+Pj4ufj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+ePBsbHM6fj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+Pj4+Pj4+Pj/////////////////////////////////////////////////////////////
+ /4yp7Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj46dHBqbnZ+Pj4+Pj4+Pj4
+ +Pj4+Pj4+Pj4+Pj4+Pj4+Pj4////////////////////////////////////////////////////////
+ //////9ot9n4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj44bGxqcHh+Pj4+Pj4
+ +Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+P//////////////////////////////////////////////////
+ ////////////T6qu+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pjp0rGpwbn4+Pj4
+ +Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj/////////////////////////////////////////////
+ //////////////////+Mwen4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+OnMwbGxseHs
+ +Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4////////////////////////////////////////
+ ////////////////////////aMHj+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj57Omxwamp
+ wdn4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pjz+f//////////////////////////////////
+ /////////////////////////////0+psfj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj40bXB
+ qbHB2ez4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pn449H/////////////////////////////
+ ////////////////////////////////////aLfs+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Onj
+ t7exwbXB4fj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+PDs0am3////////////////////////
+ //////////////////////////////////////////+SzPj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ 7KqxwampqrHh+fj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj5+PP48Lm5qam3sf//////////////////
+ ////////////////////////////////////////////////eKna+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj48/j4
+ +OnStbGxqcGpqaORtczw+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+fDm4bGpt7e3t4z/////////////
+ /////////////////////////////////////////////////////1y3sez4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pns2rXBwcGxqbmxiVMkEBE2W3Lp+fj4+Pj4+Pj4+Pj4+Pj4+Pj4+fn47NG5sam3t7GxgU//////////
+ ////////////////////////////////////////////////////////////wbGp7Pj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ 8/j46drMwampwampscHZ7OyRclMdEREdEVOq6fj4+Pj4+Pj4+Pj4+Pj48OPZwampqbe3t4xo////////
+ /////////////////////////////////////////////////////////////////7Gxwbns+Pj4+Pj4
+ +Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pn4+PnMtbG1qbHBwamx4+Hs+Pj4+Pjp438REBEREUx9+Pj4+Pj4+fj4+Ozhwrmxt7e3t7exgU//////
+ ///////////////////////////////////////////////////////////////////////BqbHMzOP4
+ +Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj48OPM0bGpqbGpqcHBucKu+Pj4+Pj4+Pj4+Pj47Il9UhAkJBFmrezs6ePM4bm3t7e3t7eagWhPT///
+ //////////////////////////////////////////////////////////////////////////9PqcHm
+ +Ozs+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj4+Pj57MzBqrHBt8GqwcG54eb4+Pj4+Pj4+Pj4+Pj4+Pj4+OGcEBERETZTo8HBt7e3sbGSeFxP////
+ ////////////////////////////////////////////////////////////////////////////////
+ eKnj+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+OzjucGpqbHBqbGxudHp+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+PiGXxEdERERbKmSeFz/////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////aMHB+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+Pj4+Pj47Ozm4dmxqcGpsbGj5vj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+OyuEBEdESQE////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////gbGx7Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+OGuwcGpwcHM2vP4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+OyGUhAR
+ EQf/////////////////////////////////////////////////////////////////////////////
+ ////////////T6mp2vj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pnp2amxqbm54/j4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +OxTJA8kEQT/////////////////////////////////////////////////////////////////////
+ /////////////////4HBwvj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+Pj4+OHh7Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj448zBsbfM6fj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+K42JBERDAP/////////////////////////////////////////////////////////////
+ /////////////////////0+pqez4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+Pj4+Pj4+Pj4wrHp+fj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pjs4bGxqcHa+Pj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+Pj4+Pj47HIdHRAQBf//////////////////////////////////////////////////////
+ //////////////////////////+Bwdn4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+PP4+Pj4+Pj4+Pj4+PjSwdnm+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4wbHBudr4+Pj4+Pj4
+ +Pj4+Pj4+Pj4+Pj4+Pj4+Pj4iUYQEREH////////////////////////////////////////////////
+ //////////////////////////////9PwbHa+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+Pj4+PPa7Pj4+Pj4+Pj4+Pj4+Om5ueP4+fj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+PjhtbHB+Pj4
+ +Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+PjMNhEREQf/////////////////////////////////////////
+ ////////////////////////////////////gbHC7Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+Pj4+Pj4+Pj47LHs+Pj4+Pj4+Pj4+Pj47Lmx0ePz8/j4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj47NGp
+ qcz4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+OlsJB0RC///////////////////////////////////
+ ////////////////////////////////////////T6mxsfj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+OPBsfD4+Pj4+Pj4+Pj4+Pj44anBsez48/j4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +PjawcHB+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj46UYQHREM////////////////////////////
+ /////////////////////////////////////////////0+pweH4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj46eGxwbHC6fj4+Pj4+Pj4+Pj4+Pja2anB4dr5+Pj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+bGxwun4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4ZhEdEQT/////////////////////
+ //////////////////////////////////////////////////9cwbH4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj47MG1t8q3tbXh+Pj4+Pj4+Pj4+Pj4+Ozjqam5wen4+PP4+Pj4
+ +Pj4+Pj4+Pj4+PCxscHs+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+PhFEBAkBv//////////////
+ ////////////////////////////////////////////////////////eLGx+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj447G3tbfJ8dS+ucf4+Pj4+Pj4+Pj4+Pj4+ObjsbG10dbj
+ +fn4+Pj4+Pj4+Pj4+PjasanM6fj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+GYREREF////////
+ /////////////////////////////////////////////////////////////4yp2fj4+Pj4+Pjm+Pj4
+ +Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj5yre3ytby7u7o8dPB4/j4+Pj4+Pj4+Pj4+Pj4+OzC
+ qbHBwcHR+Pj5+Pj4+PP4+PjhsanBsfj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4NhERJAb/
+ //////////////////////////////////////////////////////////////////+aseH4+Pj4+Pj4
+ wfj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4wsG31sjx7uju7u7xs7XR7Pj4+Pj4+Pj4+Pj4
+ +Pj4+NHBwbe3t7e1ytnj4dLa4dGxqbHBwez4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Phm
+ ER0RA///////////////////////////////////////////////////////////////////sbHh+Pj4
+ +Pj46ePs+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+PjptcG3t8vo7uju7u7u7ujNwrn5+Pj4+Pj4
+ +Pj4+Pj4+PjssbXIyNbWt7e3t7XBwbGxt8Gxuez4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj47CQQHQr//////////////////////////////////////////////////////////////////7Gp
+ 5vj4+Pj4+OOx7Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pjs0cHRz/Lu7u7u7u7u7u7u8cS3t9Hs
+ +Pj4+Pj4+Pj4+Pj4+KrKyO7uwL31zb7Wt9bKysq+0Ob4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+PiuNhEQ////////////////////////////////////////////////////////////////
+ //+pweb4+Pj4+Pjjwfj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pjpt7XKx+ju7u7o7uju6O7u7uju
+ 8sq5ten4+fj4+Pj4+Pj4+Piqt8ju6O7o7u7u7u7u6O7u7vH5+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+Pj4+Pj4+JEREST/////////////////////////////////////////////////////////
+ ////////qcHj+Pj4+Pj446n4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+PjpubfWs/Hu7u7u7u7u7u7x
+ 6O7u7ujAvrW50dbw+PP4+Pj4+PjssbX37u7u7u7u8eju7u7u7vH3+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4o5FT
+ EREPERERUnSR6fn4+Pj4rV8RERERCv//////////////////////////////////////////////////
+ /////////////7Gp4fj4+Pj4+NnB+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pnpwbe3yO7u6O7o7u7u
+ 7uju6O7u7ujx7u7Tt6mpweH5+Pjz+Pn44cHB4O7u7uju6O7o7u7u7uju9/j4+Pj4+Pj4+Pj4+Pj4+Pjp
+ RhEQJBApHCkQEREdEUXz+Pj4hhERESQkEREH////////////////////////////////////////////
+ ///////////////////BqeP4+Pj4+PixzPj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pjs0bfP9e7o7u7u
+ 7u7x6O7u7u7u6O7u7u7o8b2tt7epscHS4eHa0am15e7u6O7u7u7u7uju7u7u8ff4+Pj4+Pj4+Pj4+Pj4
+ +OmHHQ8RJEWGnJySoF8kEBERELX4rRERJJHMkREkEAb/////////////////////////////////////
+ ////////////////////////msHB+Pj4+PjsweH4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pn4taq3ye7u
+ 7u7u6O7o7u7u7u7u7u7u7uju7u7u7ve1t7exwbGxt7W3t8no6O7u7u7u7u7u7u7u7u73+Pj4+Pj4+Pj4
+ +Pj4+OkRJBAkRuH4+Pj4+Pj44zYdEREQ6UUkNuz4+Pk2Dx0F////////////////////////////////
+ /////////////////////////////4Gqqfj4+Pj5wrHs+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj40bnK
+ 9e7u6O7o7u7u7u7o7u7u7uju6O7u7u7x6O7o3PTTyre5tbW1t/Xu7u7o7uju7uju6O7u7ujx9/j4+Pj4
+ +Pj4+Pj4+OxTEREzkez4+Pj4+Pj4+PjsoxAkEVsREan4+Pj4whERC///////////////////////////
+ //////////////////////////////////9owbfs+Pj48Myx7Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ 48rKye7u6O7u7u7u7u7u7u7u6O7o7u7u7uju7uju7u7u7vLJz8fHs/Lx6O7o7u7u7u7u7u7u7uju7vf4
+ +Pj4+Pj4+Pj4+PiRECRG0vj4+Pj4+Pj4+Pj4+PjjRREdJEb4+Pj4+PhmEREG////////////////////
+ ////////////////////////////////////////T6mx0vj4+Oyxsez4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj42rm3yPHo7u7u7vHo7u7u6O7o7u7u7u7u7u7u7u7u7u7u7uju7u7u7u7u7u7u7u7o7uju6O7u6O7u
+ 7uj3+Pj4+Pj4+Pj4+PjMDyRb4fj4+Pj4+Pj4+Pj4+Pj4+OxmJBDh+Pj4+Pj4hhEkBf//////////////
+ /////////////////////////////////////////////0+3qsLs+Ozawanh+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+LfKyO7u7u7u7uju7u7u6O7u7u7u6O7o7u7u7u7o7uju6O7u7u7o7u7u7uju7u7u7u7u7u7u
+ 7uju7u7u7vj4+Pj4+Pj4+Pj4bBwk2vj4+Pj4+Pj4+Pj4+Pj4+Pj47EZM+Pj4+Pj4+MoQEQv/////////
+ ////////////////////////////////////////////////////aKnB0dbCtaqp2fj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+Pj47Lm10/Hu7uju7u7u7u7o7u7u6O7o7u7u7vHo7uju7u7u7u7u7u7u7u7u6O7u7u7u6O7o
+ 7u7u7u7u7u7u7u74+Pj4+Pj4+Pj47FMcmvj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pjjo/j4+Pj4+Pj4EBERBf//
+ //////////////////////////////////////////////////////////+Mqampt6nBqcL4+Pj4+Pj4
+ +Pj4+Pj4+Pj4+Pj4+Na3yvHo7u7u7u7u7uju7u7u6PHu7u7u6O7o7u7u7u7o7u7u7uju6O7u6PHu7uju
+ 6O7u7u7u6O7u6O7u7u7u8fj4+Pj4+Pj4+MwRZvn4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj48+zp6YcR
+ EQT/////////////////////////////////////////////////////////////T7e3t7epwbHB7Pj4
+ +Pj4+Pj4+Pj4+Pj4+Pj4+Oy31uDu6PHo7uju6O7x6O7o7u7u7u7u7u7u7u7u7uju7u7u6O7u7u7o7u7u
+ 6O7u7u7u6PHo7u7u7u7u8ejo7vH4+Pj4+Pj4+PjSHK74+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4824R
+ EVOgJBEF//////////////////////////////////////////////////////////////9PXHiSwamq
+ qfj4+Pj4+Pj4+Pj4+Pj4+Pj4+Om1ysnu7u7u7u7u7u7u7u7u7u7u6O7o7u7u7u7u6O7u7u7o7u7u7uju
+ 6O7u6O7u7uju6O7u7u7u6O7o7u7o7u7u9/j4+Pj4+Pj40nL4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +KMQERAdERERCf//////////////////////////////////////////////////////////////////
+ /0+1tcHj+Pj4+Pj4+Pj4+Pj4+Pj4+PjRysju7u7u6O7o7u7u7u7o7u7u7u7u7u7o7u7u7u7u7u7u7u7u
+ 6O7u7u7u7u7u6O7u7u7u6O7o7u7u7u7u7uju7u/4+Pj4+Pj4+MPj+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj4+PjsrpEkERFGEQ7/////////////////////////////////////////////////////////////
+ ////////mrGxufj4+Pj4+Pj4+Pj4+Pj4+Pjhtcrc7u7o7u7u7u7u6O7u7u7u7u7u6O7o7u7u6O7o7uju
+ 6O7u6PHu7ujx7ujx6O7u7u7u7u7u7u7u6PHu6O7u7u7u8f74+Pj4+Pjs+Pj4+Pj4+Pj4+Ozp4en4+Pj4
+ +Pj4+Pj4+Pj4+Pj4+EYdUxEJ////////////////////////////////////////////////////////
+ /////////////4HBqbn4+Pj4+Pj4+Pj4+Pj4+Pjmtcry7uju8eju7u7o7u7o8eju6O7o7u7u7u7o7u7u
+ 7u7u7u7o7u7u6O7u6O7u7u7u7u7u7u7u7u7u7u7o7u7o7uju7vH6+Pj4+Pj4+Pj4+Pj4+Pj4+KNfERB9
+ +Pj4+Pj4+Pj4+Pj4+Pj4+PigJEURB///////////////////////////////////////////////////
+ //////////////////94qcHR+Pj4+Pj4+Pj4+Pj4+Pj41rfL6O7u7u7u7u7o7u7u6O7u7u7u7u7u6O7u
+ 7u7u6O7o7uju7u7u6O7u7u7u7u7u7u7u7uju7u7u7u7u7u7u6O7u7u7u7vj4+Pj4+Pj4+Pj4+Pj4+K0d
+ ESQRffj4+Pj4+Pj4+Pj4+Pj4+PPs4xEdHQT/////////////////////////////////////////////
+ ////////////////////////XMGxwun4+Pj4+Pj4+Pj4+Pj42re36O7u7u7u7uju7u7u7u7u7uju7u7o
+ 7u7u7u7u7u7u7u7u7ujo7u7u7u7u7u7u7u7u7u7u8eju7u7o7u7u7u7u7uju7u70+Pj4+Pj4+Pj4+Pj4
+ +NE2ERAkZuP4+Pj4+Pj4+Pj4+Pj47JFsUhERHRAF////////////////////////////////////////
+ /////////////////////////////0+xqbns+Pj4+Pj4+Pj4+Pj47Le17+7u7u7o7u7o7u7o7u7u7uju
+ 7u7o8e7u7u7o7uju6O7u7ujx7u7u7u7u7u7u7uju7uju7u7u7u7u7u7u7u7u7ujx7u7o8fX4+Pj4+Pj4
+ +Pj4+PicJCRb7Pj4+Pj4+Pj4+fj47OOjUxEQJBEREQkE////////////////////////////////////
+ ////////////////////////////////////t6rB7Pj4+Pj4+Pj4+Pj4+dLK9+ju7u7u7u7u7u7u7u7u
+ 6O7u7u7u7u7u7uju7u7u7u7x6O7u7u7u7u7u7u7o7u7u7u7u7uju7u7u8eju7u7u7u7u7u7u7u7o9Pj4
+ +Pj4+Pj4+PjsbBBm7Pj4+Pj4+Pj4+PjWbGYdEREcEREcCf//////////////////////////////////
+ /////////////////////////////////////////5LBqeH4+Pj4+Pj4+Pj4+PC1tdTu7u7o8e7u6O7o
+ 7u7u6O7u7uju7u7o7u7u7u7o7uju7uju7u7u7u7u6O7o7u7o7u7o7u7u6Oju6Oju6PHu6Oju7u7o7u7u
+ 7vH9+Pj4+Pj4+Pj4+ClS+Pj4+fj4+PDp1n0RECQRERERDAcEAf//////////////////////////////
+ //////////////////////////////////////////////94sbHM+Pj4+Pj4+Pj4+PnMyvTu7uju7u7o
+ 7u7u7u7u7u7x6O7u7u7u7u7o7uju7u7u6O7u7u7u7u7u7u7u7u7u7u7o7u7o7u7u7uju7u7u6Oju7u7u
+ 7u7u6O7u7/T4+Pj4+Pj4+PgR0vj4+PPz+IlmRhEQEREREQoF////////////////////////////////
+ ////////////////////////////////////////////////////XKmxwfj4+Pj4+Pj4+PjWt8jo7u7u
+ 7u7o7u7u6O7o7uju6O7u7uju6O7o7u7u7u7o8eju7u7u7u7u7uju7uju7uju7uju7uju7u7u7u7u7uLe
+ r6Gf7u7o7uju7uju9f74+Pj4+Pj4fez4+PjsoCQdJB0kHSBBHQT/////////////////////////////
+ /////////////////////////////////////////////////////////0/Bt6n5+Pj4+Pj4+Pj447fy
+ 7u7u8eju7u7u7u7u7u7u7u7u6O7u7u7u7u7o7uju7u7u7u7u7u7o7ujo5+ju7u7u7u7u7u7u8eju6q9+
+ al1RQx0dOu7u7u7u7u7u7u70+Pj4+Pj4+On4+PjWZhERHSQSLCcXVA3/////////////////////////
+ ////////////////////////////////////////////////////////////////krHB0fj4+Pj4+Pj4
+ 6bfN6O7u6O7o7u7u6O7u6O7o7uju7u7u7uju6O7o8e7u7u7u7u7u7u7o7u7u7u7u6O7o6O7q7u7qv6J7
+ UREREREkEREdEB3o7u7o7uju7u7u6O76/Pj4+Pj4+PjmZhERIBo1NTs1F1QK////////////////////
+ /////////////////////////////////////////////////////////////////////3iqqa74+Pj4
+ +Pj488LH6O7o7u7u7uju7u7o7u7u7u7u7u7u6O7u7u7u7u7u7u7u7u7u7u7u7u7x6O7u7u7u7u7u3otl
+ Vh0RHRERJCQkIC4aORAg5+7u7u7u7u7o7u7u6O/v8vLy7/LyWREdekdKNTU7GSpUCf//////////////
+ //////////////////////////////////////////////////////////////////////////9cwcHR
+ +Pj4+Pj4+MPKxPHu7u7u7u7u7u7u7u7u6O7u7u7u7ujx7u7u7u7u7u7u7u7u7u7u6Oju7u7u7u7u6r+O
+ VhEREREkHSAuGisnNTsXFyYRHdfu7uju6O7o7u7u6PHu7u7u6PHup0MknN0nNTU1Oyo0VAn/////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /7epuez4+Pj4+PjD1vHu7u7u7u7o7u7u7u7o7u7u7uju6O7u7u7u6O7u7u7o7u7u6O7o6O7u7u7u7u7U
+ flYzHR0dHSQuIzQ0NUo1SjU7GSorER2f7u7u7u7u7u7o7u7u7u7u7u7u7qEkaby4JzU1NTsqFxH/////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////+Mt8Hp+Pj4+PjptcTu7uju7u7u6O7u7uju7u7u7u7u7u7u7uju6PHu6O7u7u7u7u7u7u7u7u7u
+ 1aVZJBEdJB0SGiw1NTU1NTU1NTU1NUoZLBEgn+7u6O7u7u7u7u7u6O7u7u7u7u7UWR37uD81NTU1NBcR
+ BP//////////////////////////////////////////////////////////////////////////////
+ ////////////aKmx6fj4+PjzudPx7u7u6O7o7u7o7u7x6O7o7uju8eju6O7u7u7u7ujx6O7o7ujo5+ju
+ 7ufVdksRHREdEyM0NTVKNTVKNUo1SjVKNUo1OzEgNp/o7u7x6O7u6PHo7u7u7uju7uju6Fkz/Lg0NTU1
+ OyUXEP//////////////////////////////////////////////////////////////////////////
+ /////////////////0+3qdH4+Pj41sfE7uju7u7u7u7u7u7u7u7u7u7u7u7o7u7u7uju7u7u7u7u7u7u
+ 7u7u6r+DQxERESAaJzs1NTU1NTVKNTU1NTU1NTU1OzsnEB2f7u7u7u7u7u7u7u7u6O7u7u7u6N48W/y4
+ JzU1OzU0FxEC////////////////////////////////////////////////////////////////////
+ ////////////////////////jKnB8Pj4+NrW8eju7uju6O7o7vHo7uju6O7u7u7u7u7u6O7u7u7o7u7u
+ 7u7u7u7u6HdDJBERRSYnPjVKNUo1SjVKNTU1SjVKNTVKNTs7JxEgn+7o7uju6O7u6O7o7u7u7ujx6O7e
+ SWz9uCc1Ozs1F1UL////////////////////////////////////////////////////////////////
+ /////////////////////////////2ipteP4+Pm3xO7u7u7u7u7u7u7u6O7u7u7u7uju7u7o8eju7u7u
+ 7u7u7ujo7u7ur2ARHBFmllcXNBk7NTU1NTU1NTVKNTU1NTVKNTU1NTEkHZ/u7u7u7u7u7uju7u7u7u7u
+ 6O7uvzNy/Lg0NTs7KhcRBf//////////////////////////////////////////////////////////
+ //////////////////////////////////9Pt8HS8/jM1uju7u7u7uju7u7u7u7u7u7u6O7u8eju7u7u
+ 7u7u7u7o7u7u7u7uayQREUXW/KZhFzQ1NTVKNUo1SjVKNTU1SjVKNTU1NTsnER2f6O7o8eju6O7u7u7u
+ 7u7u7u7u7r8pbv3dPxk7KhdHEQX/////////////////////////////////////////////////////
+ /////////////////////////////////////////4G1wfnhyrLo7u7u6O7u7u7o7u7u7u7o7u7u7uju
+ 7u7o7u7u7u7u7u7o6O6vWRERRYf+/v6wVxcZO0o1NTU1NTU1NTVKNTU1NTU1SjU1LB0Rn/Hu7u7u7u7u
+ 7uju6O7u7ujo7u6nM17+9j81NSolVREG////////////////////////////////////////////////
+ //////////////////////////////////////////////9Pqanw4crv7u7u7u7o7uju7u7x6O7u7uju
+ 6O7u7uju7u7u7u7o7u7u6O6nQyQRUPv9/vz+sGEXSjU1NUo1SjVKNTVKNTU1SjU1SjU7OygRHdfu7u7o
+ 7u7u7u7u7u7u6O7u7u7onzMz++s/KjgqGXMdB///////////////////////////////////////////
+ /////////////////////////////////////////////////////4zBwsO+6O7u6O7u6O7u7u7o7uju
+ 7ujx7u7u7uju7u7u7u7u7u7o7u6hMx0Rh/v+/f7+/I8XNBk7SjU1NTU1NTVKNTVKNTU1SjU1NTsjERHo
+ 7u7u6O7u6O7u7uju7u7o7u7q3qEpHeX8hTQZF0cNEAr/////////////////////////////////////
+ //////////////////////////////////////////////////////////9ot7G57+7u7u7u7u7u8eju
+ 7u7u7u7u7uju6O7u6O7u7u7o7uju6O6fKR0QrP3+/f7+/Px8GTg7NTU1NUo1SjVKNTU1NTU1SjU1NTU7
+ Jh067vHo7u7u7u7u6O7u7u7u7u7o7uKTLRFb/faFYWeVJBERBwT/////////////////////////////
+ ////////////////////////////////////////////////////////////////T6mx09To7u7u6O7u
+ 7uju7u7o7uju7u7u7u7u7u7u7u7u7u7u7u6hSx02vP39/v3+/f78fCcZGTU7SjU1NTU1NTU1SjVKNTU1
+ NUo1NR4dQe7u7u7u7u7u6PHu7u7u7u7o7urUokMREbT+693rRhEdER0RB///////////////////////
+ //////////////////////////////////////8K/wYHBwsOJBARESQdEREMC/8G/wT///8Mwbnn7u7u
+ 7ujx6O7u7uju7u7u7u7o7uju7u7o7u7u6Oju6O7qJCQd5f39/f3+/f7+/HwXKjtKNTU1SjVKNUo1SjU1
+ NTU1NUo1Oz4bHV3u7uju7uju7u7u6O7u8eju7u7iv6JJHREkpKzThx0RHRAkECQE////////////////
+ //////////////////////////////////////////8HECQRERERHR0dESQdHR02ICAdHR02HQsHU3/D
+ 8u7u7u7u7u7u7u7u7u7u7u7u6O7u7u7o8e7u7u7u7u7uWSkRnP39/f39/v3+/vyFFxcZNTtKNTU1NTU1
+ NTU1SjVKNUo1NTU1Eh156O7u7u7o7u7o7uju7u7u6PHu1K+njhAkHRERERAdERERERERCf//////////
+ ////////////////////////////////////////////BQoPJBEdHRERHBwdOmufn5+fn7+fn86Lazwd
+ ER06QUGL7uju7u7u7u7u7u7u7vHo7u7u7uju7u7u7u7u7ufojh0dh/39/f39/f3+/f78sFclNUo1NTU1
+ SjVKNUo1SjU1NTU1NTU7NREkn+7u7uju7u7u7u7u7u7u6O7u1dSnp59dHREQJBERHRARER0REQT/////
+ /////////////////////////////////////////////wQFHREREREkER12hIvx7u7u7u7u7u7u6O7u
+ 7uju6O7Xn4R5WS1Li5/u6O7o7u7o7uju6O7u6O7o7u7u7uju6O7u20MQUPv9/f39/f39/v7+/t1hFzQ7
+ NUo1SjU1NTU1NTU1NUo1SjU7NSwRHZ/u7u7u7u7o7u7u7uju7u7o7urUp5+njlkREREkEREPCQcF/wP/
+ /////////////////////////////////////////////////wckER0QHSQkIEpKTUpK7u7o7u7u6O7u
+ 7u7u6O7u7u7o7uju7ujo3GUgOovu7uju7u7u7u7o7u7u7u7u7u7u7ujn6HYREc/9/f39/f39/f3+/f72
+ Zyc0OzU1NTU1NUo1SjVKNUo1NTU1OzsbETLU7u7u7uju7u7x6O7u7u7o7u7or6KfoqGek453ThEL////
+ //////////////////////////////////////////////////8HCxERESQRIB4sOztINTtIPTtIO3WC
+ zu7u7u7u7u7u7ujx7u7u7u7u7u7u6O7u7u7u7u7o7uju7u7u6O7u7u7u7u7u7ts8EXT9/f39/f39/f39
+ /v3+/qYnFyo7NUo1SjU1NTU1NTU1NUo1NTsZERFL7u7o6Oju7u7o7uju7u7u7uju4q+hoqGioaKhn2AR
+ Bf////////////////////////////////////////////////////8HDRERESQdHko7SDtIPUhISDs7
+ SDtINUpk7vHo7u7u7u7u6O7o7uju6O7o7u7u7u7u7uju7u7u6O7o7u7u7u7u7uju7u6TERHl/f39/f39
+ /f39/f3+/f7dbxklGTU1NTU1SjVKNUo1NUo1NTU7JxERdu7o7vHu7u7u7u7u7u7u7u7u7uivoaehoqGn
+ oXsQEf///////////////////////////////////////////////////wQLEREREREeMTVIPTtINTtK
+ OztISDtIO0g9SD2Czu7u7u7u7u7u7u7u7u7u7u7u6O7o7uju7u7o8eju7u7u7u7o7u7u6O7nPCRb/P39
+ /f39/f39/f39/v3+/I9HFyo7NTVKNTU1NTU1NUo1NTs7OyIRJNTo8eqN1/Hu6O7o7uju7u7u7u7neaKh
+ p6GioaJdEQn///////////////////////////////////////////////////8dECQRJB1ISEg9SDU7
+ SDtISD09SDs1SDs9SDtKPUju7u7u7u7u7u7o7uju6O7o7u7u7u7u7uju7u7u7uju7u7u7vHo6O7unxEQ
+ pP39/f39/f39/f39/f3+/f77hRcZNDs7NTVKNTVKNUo1NTs1NTsVEVHq7uJZOtzo7u7u7u7u7u7o6O7u
+ oXCnoaKhp6JwEREE////////////////////////////////////////////////BgoREB0RES8+OzU7
+ OztARDtINTs7SDtISDtIO0o9PTVKPXXo7ujo7u7u7u7u7u7u7u7u6PHo7u7o7u7u7u7u7u7u6O7u7u7u
+ 7mscQfz9/f39/f39/f39/f39/v3+/rBvRxkqOzs1OzVKNTU1NTU1OzsnHSSO1HkdHWvo7u7u6O7u6O7o
+ 8e7o7mpwoaehoqGbQxEJ////////////////////////////////////////////////Bx0QERERETFE
+ NTtAQEA9QEQ7RDtESEg1SDtISDtIPUhKSD1KZO7o7u7u7u7u7u7u6O7o7u7u7uju7u7u7u7u7u7u7u7u
+ 7u7u59VREXL+/f39/f39/f39/f39/f3+/f7+plcXFzQZOzU7NTU1NTs1Ozs1ExEdSxEREVnu6O7u7u7o
+ 7u7u7u7u7u5ZdqKin6eiahER////////////////////////////////////////////////Ch0RERER
+ ESYiGCQPERERJBERGyIoLDs7SDtINTtIOztKPTU7SD07mfHu7uju7u7u7u7u7u7u6O7o7u7u7u7o7u7u
+ 7u7o7u7o7u7UHRG0/f39/f39/f39/f39/f39/v3+/vywVz8XJSUqGTs1OzU1OzU1LBEREBEdPHfU6O7u
+ 7uju6O7u7u7u6O7uWXanoaeheSQRCv//////////////////////////////////////////////CxAR
+ EBERESQRECQpHCkdJB0dHRERERERGD41SDtISDs9SD1ISEg7SDur6O7u7uju7uju7u7u7u7u7u7u7u7u
+ 7u7o7u7u7u7x6O7ohBA2+/39/f39/f39/f39/f39/f3+/f7+/aZvJxcZGTQqJSU1Ozs0Hh0kHREdap3U
+ 8eju6O7u7u7u7u7u7u7u6FlqoZ+ikCkkEQX/////////////////////////////////////////////
+ BhERERERLUtrd3aNi46OjZCNjXtwdlERERERHzBANTtIO0pINTs7SDVISFrX7u7u7ujx7u7u7u7u7u7u
+ 7u7o7u7u7u7u7uju7u7u7kkRW/39/v3+/f39/f39/f39/f39/v3+/v399o9hJxcXFxcnJi5BHBEdEUN7
+ k5+v1Oju7u7u7uju7u7u7u7u7u5ZWaKnjVEREREG////////////////////////////////////////
+ ////BBEkERERap6bmJiTnZOYl52fk5uToZuTn3spKREQFDhIPTs9PUpISEg7SDs1SG3u7u7u7u7u7u7u
+ 7u7u7u7u7vHo7u7u6PHo7u7u6tUQJHT+/f39/f39/v79/v79/v79/v7+/v7+/v7+hScnKxoREREREREd
+ S36np6Gnv+jo7uju6O7u7u7u7uju7u7oWU6XexARERERBv//////////////////////////////////
+ /////////wsRERERWZuTmJuboZOhm5+fmKGYoZeYoZifk35wLRERHj5EO0g9Ozs7SDtISDtIcZTu7u7u
+ 6O7u6O7u7u7u7u7u7ujo7u7u7qF5Th0QERFQboeHlZy0reXt1u3t1u3t1u3t7e3ttKych4duJBAREREd
+ ETxwjpOin5+nn+jn7u7u7u7u7u7o7u7u7ujo7ncRHREREREdEQX/////////////////////////////
+ //////////////8dECQPQ5uenaGfm6GXmJ2fmJ6fnZ+dn5+Xm5ihn5dqJBERNzs9SjtISEg7SDtISDtI
+ SNfu7u7u7ujx6O7u6O7o6O7u7u7u6nYQJBAkEBERHRARESQRJB0REREREQ8RJBERERAkEBERERERJBAR
+ ESQpPHehoaKnp6Gip9To7u7o7uju7u7u7vHo7vHo7u7uMx0QJB0fERAK////////////////////////
+ //////////////////8RER0RUZOek5udl5edn5+fnp+TnpOXm56bn5+fl5ihm4RZESAjRD1IOzs7SDtI
+ NTtIOzs7ce7o7uju7u7u6O7u7u7o7u7un0sRERERERERERERJBEREREQERERHSQkJA8RERERERERERER
+ JBEREU55i6GhoqGnn6Gnoa/U6O7u6O7u7u7u7u7u7u7u7u7u7ttLER0SPh8REQb/////////////////
+ //////////////////////8LECQQHY2dl5OhmJuhn5+Ym56TmKGTmKGYk56emJ6fn5OfmGUpERQxOzs9
+ SEg7PUg7SEpIPUg7uu7u7u7u7u7u7uju7u7onw8RJB0REREREREkEBEREBEdERERHREQERERERERJBER
+ EREkJCk8a5OhoaeioqKhp5+iop/q6O7u7u7u7u7u7uju7u7u7uju7u7eSxAdJ0QjHREH////////////
+ //////////////////////////8GEREREX6Xm5+hl5+en5ien56Tn5uXn5+fn6GTk5uTmJ6hnp+efkMR
+ ESE+Ozs7PTtKPTs9Ozs7SD1adZnu7uju7u7u7u7up0MkJBEQHREREREkEREREREREBERJBAkERERER0k
+ JBERHSRRZXmQoqGip6KhoaGhoqGioaHF1O7o7u7u7u7u7u7u7uju6Oju7u7qZR0dI0REMBAdCv//////
+ //////////////////////////////8HESQdEWufmJ+enpefmJOYn5Obk6Gel6GenpiYl6Ghl6Gfk5eT
+ mJOhaikREB8+RD07PT1ESDtIPUg7O0g7O9fX6Oju6O7xvx0RHR0dICAdHRERERERESQRESQRJBERER0k
+ JDIyPDxddo2ep5+nop+hoqehoaGnoqKnoqGv6O7u7u7u7u7o8eju7u7o7u7u7u7qWRERGDtINSwdEQv/
+ ////////////////////////////////////CBEREEuQm5+Yn5OfmJuhm56hmKGXk5+bk5Obn5+dl5+d
+ nqGfoZuhl5OEZRERER4sPTs7NTs9Ozs7REA7SEQ7RGR1de7u6HkdHR0gIFl5eXl+fnl2eXl2dnl2eXZ2
+ fn5+e4uOk56ioqKhn5+nn6Gnp6Gfoqeioaehn6Gnxeju6O7u7u7u7u7u7u7o7u7o7u7ufh0kETg9O0As
+ EB0F/////////////////////////////////////xERESmNoZ+emJ+ToZifn5edk5efnZ+hnpehoZ+Y
+ npuhmJ+TnZ6dnZ2foZ6EQykRECQfMThNQDs9PUA7Ozs+NTs4MB8RJB1lOkt53O7u7u7u6OfeoqGhoqen
+ oaehoaehoqGnoqKhoaGhoaGnoqGioqGfoqKnn6Gin6enp9Xx7u7u7u7o7u7u7u7u7u7u7u7ujhERFDg9
+ OztAGyQR/////////////////////////////////////wsdERFrn52Ym5+YmJ+fmJ6hm6GfnpuenZOf
+ l52Xm5OYk5+eoZOTm5+bnp2Tnpt+cC0RESQREhohHh4hIR8YExwQHREdHTpLa5/o7u7o7u7o7u7o1K+n
+ oqGfoaKfoqehoqGin6Gnoqeip6eioaGioaeip6ehn6enp6Kfob/o7u7o7u7u7uju7u7o6PHu7urugx0R
+ ERU4QEQ9OBERCf///////////////////////////////////wQQERBDnqGYn5+fl5+fnpifk5uYnZ6T
+ mJOboZ6fk6GXoZ+hnpOdnqGbnpiTk6GTl6GejU5JMhQdERERERERJBERER0dHS06a+7u7u7u7uju7u7u
+ 7tTir52hoaeioaKnn6Knp6Gnop+nn6ehn6GioqGnn6Ghn6eioZ+fp6fq6O7u7vHo7u7u7ujo7u7u6O7u
+ hBERESQQERERDyQREQT///////////////////////////////////8HESQpjZOXn5ienqGXm5ObnqGX
+ m5uTn5+hnp2TmJ6fn5eenZOhk5OXnpOfoZ6doZ+dm5+hk41+d3t7fn5+fn57WR0dHRiA5+ju7uju7u7u
+ 7u7o7uju6OivpaehoaKhn6Khn5+noaenn6efoqKnoaGioaKioqKhoaKioo6f6O7u6O7u7u7o8e7u7u7u
+ 7u7uZSQkEEkgERERJBEREQn/////////////////////////////////////ERERZZuToZ+en5OTk6GY
+ oZ2TnZ+fnqGenpeTm6Gfm5iYn5OToZ2eoZ+ToZiXk5uXnpufmJehn6GYoZ+YmJOQax0dICKC7uju7u7u
+ 7u7u7u7u7u7u7uju3sWioaKnp6enoaKnop+in6GioaKnoZ+ip6GioaehoaGioaEkpe7u7u7u7u7u7u7u
+ 7u7u6O7qZRERIA8NCwcKB/8E/wD/////////////////////////////////////CyQkEZedoZeek56f
+ oZ6fn52foZ+YmJOXk5OfoZ6dnp+bn56hnp2bk5eeoZebn6Gen5OYnp+fnZ6Xn52en5+hUSQRHTc7zuju
+ 6O7u7u7u7u7o7u7u7u7o6Ojn1KWhoZ+hoaenoaGnoaKioaKhn6eip6Gnp6efp6enp6eELe7u7u7u7u7u
+ 7uju6Oju7u6nYBAdEQf/////////////////////////////////////////////////Bh0QHX6Yk5+X
+ n5Ofk5iXk5iYm56dnp+boZ+hn5iXk5uTmJ+ek52Tn56hn5Odn5+el5OYoZ+Tm56bk6Gem5OQKREdHztI
+ Wu7u7u7u7ujx6O7u7u7u7u7u7u7x6OjVkJOinqKioZ+ip6GioaGnoaeioaGfp5+foaKhoaGfWb/u7u7u
+ 8eju6Ojo7u7u7uqfEBEREf///////////////////////////////////////////////////woREU6e
+ n6GYn5ihnp+fn6Gbm5iTk5Oen5eenZifn6Gen5+Yk6GboZiTnZihm5iYk5+hk52YoZiTmJ+Tk56hUSQd
+ HztIO+7u6O7u1Ofu6O7u6O7u7u7o7u7u7u7u7udZa6GhoaKioaGip6eioaKhoaKnop+ioqKhp56ikF3u
+ 7u7o6Oju6O7u7u7u7t5rJBERCf////////////////////////////////////////////////////8d
+ EBF+mJOel5uYn5eTnpienZehm6GYoZOYn5Obn56Yl5OenpuhnZ6Xk6Gbn5+en5uhnpehm5udn6GfnpeX
+ MhEdHkg7PYLu6Oju1BGT6u7u7ujx6O7u7u7u7u7u7u7o6HBOjaGioaGioqGfoaGip6GioaGhoqGhoaKh
+ nx2O7u7u7u7u7u7u7u7u7p8RERERBP//////////////////////////////////////////////////
+ //8LHRFgn5+hk5+fn56foZObk5ufnZ2fn52hm56hnpuTn5+hk5OXnZuTn6GXnpiYk5ifl5Ofl56fm56X
+ mJOhSx0RHzs7SDvO7u7u8WAREFmh7u7u7u7o8eju7u7u7u7u7u7o3FldhKKnoaGnoqKnoZ+ioaeip6Gn
+ oqKhnVFZ7u7o8eju7u7u7u7uoWUcECQRCf//////////////////////////////////////////////
+ //////8GJBAkjZ2emJ2fmJ6ek5iXoZ2hm56fn5iem52Xk5eTnp+emJ+eoZ+fmKGel5+bm5uhn5efoZif
+ m5iYk5+bQxEdEkg7SEg76O7u534QESQREXC/7u7u7u7o7u7o7u7u7u7u7u7oeTxrk6GnoqGhp5+noqen
+ oaGhp6GnkyRL7ujo6O7u7u7u7u6/axERHRAREf//////////////////////////////////////////
+ ////////////BREdVpubk5ubnp+Tk5+fn52bl56TmJ6fk5ifn6GfoZOek5+Yk52enp+dk5+Yn6GdnZ6h
+ npOfmJ+fn6GYYB0dHT41SDs7Pe7u7r9DHR0YHREREV3U7uru7u7o8ejo7u7o8e7u7u7nix1OeaGiop+i
+ n6GfoZ2nnp6ii0kRv+ju7u7u6urq7qFlMx0dHRIsEREJ////////////////////////////////////
+ /////////////////wodEYSdn56hn5iTmKGhnpiem56fk6Gbk5Ohn56enZ6XoZOhnpuhm5OTm5OhmJ+e
+ nZ+bk5OToZifnpuYdxERHDE7SEg9Peju7uIdOh8+SCcYHB0kEHCv6uru7u7u7u7o7u7u7uju7ujncEsd
+ cISTnqKip6eiop2OZRFL1Ojo7u7u7u7UoREREREdFiE7PhUREQP/////////////////////////////
+ /////////////////////wcRD1aem5iTnZefoZOXnZObk5ibmKGdl6GenZuTk5uTn52Ym5OXnZihoZie
+ n5+Yk5OemKGYoZefmJOejiQdER5IPUo7NUro7u5ZHSw7OztIOzQdHRERHWCO6uru7u7u7u7u6Oju7uju
+ 6OjUn1kdJEtZVlFRWVZLER2E2+fu7u7u7o5lSR0dHR0RLDs7SEgaJCT/////////////////////////
+ /////////////////////////wQRESSOn5Oem6GboZiXoZ+boZ2hn5+fl5uhl5OfnqGhmKGem5+XoZ+b
+ n52Xn5uYnpuhmJOfnZ+dn5iboVkRHSBIO0o7PT1A6OpwHRVIO0hISDtIOywfICQRERF2pafV7u7u6O7u
+ 7u7u7u7u7u7u1X5lVkNDQ0M8WWW/7u7q4qehWREREREdHRgePUhIOz09Ih0RBP//////////////////
+ //////////////////////////////8HEREdfpihm52Xnp+bn52em52bl56enp+en5+hmJOXl5+dk56X
+ n52Ynpebn56fm5OXn5+hnpuXm56bnXcRHR0xO0g9PTs7ceqEJB07O0g7OztIO0g7Oz4mJB0dJBEdS1lZ
+ m+Lo7u7u7u7u7u7u7u7u7uq/v9XU3urq1ItgYEsdESQdHR0dHjRIOztKNUg7SjEQHQf/////////////
+ ////////////////////////////////////ChEdER1wk5+Yn5+TmJ+Ym5Oem56fk5OTmJOemJeToZ+f
+ mJuhk6Gen5+ToZiYk56XoZ+emJeTmKGYk5tDER0fOz1IOztIPZShER0sSDtIO0hISDtIO0hIOz0sHxYd
+ JB0dEREREVFwoqGhp6Gnp6enr6GTiI6OWUsRESQQJBERERAdFR8vO0g7SDs9SD1IOz1EEREH////////
+ ////////////////////////////////////////BBERECQQHUtwm56eoZuYn5ihk5ibmJ+hn5+hk5+f
+ oZeYmJuenaGTk56boZ+fn5+Tn52Yk5+foZufn55+JBEdNzs7SEg9NTufJB0dOztIO0g7OztIO0g7O0g7
+ SDU7PjQVJCQkESQdJBERERERERERERERERERHR0dHSQRHREdERERHTg7O0g7SDtIO0pIO0g7OxMRD///
+ //////////////////////////////////////////////8EByQRER0QEWuNk5Odl5+Yn5ehn5+fmJee
+ mJefmJiXn5+fn5ObnaGYk56dnpuYmKGYn5+fm56dn5ieQxEdFUg1PT01OzulERETSDtISDtIO0hISDtI
+ O0hIOz1ISDs7Oz07IyEfGhYgERERHR0dHR0dEREdHREUFBgfISEwOBgkEREiRD1IO0g7SDs9PTVINT0i
+ ERH///////////////////////////////////////////////////8ECRERESQQHXChm6Gbn5efl56e
+ m5+fk5ufnpufn5iem56hnpudn6GTk5OYn5+Xn5ienp6Tm56bhBEdETQ7SEg7QD1iESQdMTtIOztIO0g7
+ OztIO0g7O0g7SjtISEg1Skg1PUg7OzRKPjQ+PjQ0PjRKNDRKPjs7SjVKNTtILCQRFBg7SD07SDtIO0hI
+ PUhINyQkBv////////////////////////////////////////////////////8EChEREREkS3uYn56X
+ oZifk5Oenpihn5iTn56en5OYk5eTnpuXl6GYoZ+bnp+en5OTk6GYkEkkHR5ISEg1NUAxJBEkIkg7SDtI
+ SDtIO0hISDtIO0hIOz09SDs7SDs9SEg7O0o7SEg7SDs7SEg7SEg7SDs7SkhISD1IPTsnESQPJj1KO0g7
+ SDtINUo1OzQREQT///////////////////////////////////////////////////////8FERERERAR
+ S4iTm5+fmJ+hk5OfnZ6foZiTk5ihn6GfoZOYoZ+Xn52YnpOYk56foaGdm4MkERFANTs7REAjJBEdJj07
+ SDtIOztIO0g7OztIO0g7O0g7SDtIPUpIO0o1SD09SDs7SDVISDs7SDs7SDtISD07Ozs7SDtISD4YESQY
+ PUg7SDtIO0g9SEg3EREH//////////////////////////////////////////////////////////8F
+ ChERERERZYiemJ6fnpehn56bk56Xm6Ghm5OYnZ6XoZ+Tnp+en5uToZ+fk5iXnY1DJCAxSDs7QDUfEREd
+ HkhIO0g7SDtISDtIO0hISDtIO0hINT1KSDs7PTs9PT0+SDs7O0hISDtKSEg7SEg7SDtIOztISEg1SDs1
+ OxokESI7O0g7SDU9SDs1OxMRB///////////////////////////////////////////////////////
+ //////8FERERHSQzVpOTmJOfnZiTnp+Tn52dl52hm5uTn52eoZOYk56foZ2emJ+foZBRHREfRDVAQCUU
+ ESQRJj07O0g7SDtIOztIO0g7OztIO0g7O0hIPTtISDtISEpEKDQ9SEhINTtIPTs7SDs7SDtINUg9O0g7
+ SEg9SEhIGh0UL0Q9PTtISEpISD4TJA//////////////////////////////////////////////////
+ //////////////8FCiQQERERYHuboZibn6GbmKGYm5uhm52dnqGem5OXoZ+fk5idm5OfmJhqER0bNUg7
+ QCMgJBEdJkpIO0hIO0g7SDtISDtIO0hISDtIO0hIO0o7SDs7SDs1PSweSDs7O0pISDs7SEg7SEg7PUhI
+ OztINUg1Sjs7OzsVESA+NUo7SDs1PTs7GBER////////////////////////////////////////////
+ //////////////////////8EChERJBEkQ3efnp6dn5+dn56Yn56fn5Odk5ihn52YmKGbm5ihnp9ZESQS
+ PkA1JRMdJB0dLEg9O0g7O0g7SDtIOztIO0g7OztIO0g7O0g9SDtISDtISEg4HR9IPUg9OztISDs7SDs7
+ SDtKNUg9O0g7SD1IPUhKOxMQGEg9SDtISDtIOxgREf//////////////////////////////////////
+ //////////////////////////////8G/woRERERHWp+k5Oenpuem5uen56YoZuhn52em5ufl5+en41Z
+ EBEVNEQ0HiQRHR0VNEhIOztIO0hIO0g7SDtISDtIO0hISDtIOz1IOzs7SDs7SDs1MSAQLz1KOztISDs7
+ SEg7SEg7SD1IO0hIO0g7SDs7Oz0wJBEoSDs7SDs1PTsYERz/////////////////////////////////
+ ////////////////////////////////////////BAkRESQQJENgk5OYk5ibk5OTm5eel56Tk56fmKGe
+ n3cdERETOD4SFCQRJB0hOzs7O0hIO0g7O0g7SDtIOztIO0g7OztIO0hIO0hISDtIPT1ISEQVEREePUhI
+ OztISDs7SDs7SDs7SD1KNUg7SDVISEhKNS8dIDRIPTtIREA9FhEM////////////////////////////
+ /////////////////////////////////////////////////wUKERERERFDanaOm5uemKGXn5Ohk5ih
+ k5ibeTwQJBARIxokEBERHR8sSDs7SEhIOztIO0hIO0g7SDtISDtIO0hISDtIOzVIOzs7SDtKNUg7GBER
+ ESM7O0pISDs7SEg7SEg7PUhKOz1INUg7SDs7Oz1EExAiPTs7SDs7OBwRB///////////////////////
+ /////////////////////////////////////////////////////////wQLERERESQRJDJDZY6XoZih
+ naGfl6F2Qw8kERERESQRHR0dHTQ7OztISDs7O0hIO0g7O0g7SDtIOztIO0g7OztIO0hIO0hISDtIPUhK
+ PSgkJCQQIUQ9OztISDs7SDs7SEo7PTtIO0hISDVISEg7SiIRFD5ERDVIQDQREQT/////////////////
+ /////////////////////////////////////////////////////////////////wX/BQkOERERERER
+ EREyS0lLXWAkEREREREREREkHRQmLEg7SDtISDs7SEhIOztIO0hIO0g7SDtISDtIO0hISD1IOzVIOzs7
+ SDs7Oz0xHTEeEREjOztISDtISEg7SEg7PUhISDVIOzVISDs7Oz07HRERIjs7SDshJBH/////////////
+ /////////////////////////////////////////////////////////////////////////////wYF
+ ChERERERERwQJBAdER0RHRERHR0dFTQ7SDs7SDtIOztISDs7O0hIO0g7O0g7SDtIOztIO0g7OztKO0hI
+ O0hISDVISDtIRBEiNRUdJCI9OztINTs7SDs7SDs7SjtIO0hISjtIPUhISBgREREUITEhEREJ////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////wT/BQcHDA8cEREcECQPJB0vOztKSEg7SEg7SDtISDs7SEhIOztIO0hIO0g7SDtISDtIOz1I
+ SD1IOztIOztISDs7SDUREUpIHhEdIjtISEg7SEg7PUg7SEg9SDtIOzs9SDs7OzUxESQdEREdEBERBP//
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////AQQHDBERJB0jSDtIPTs7SDs7SDtIOztISDs7O0hIO0g7O0g7SDtIOztI
+ O0g7SDs7O0hIO0g9NTtIPTtIEh09OzsVHREfOzs1SDs7SDs7SD07OztIO0hIOztISEhIOxEREBwRERwR
+ Cf//////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////ER0VO0g7SEg7SEg7SEg7SDtISDs7SEhIOztIO0hIO0g7
+ SDtISDtINT1KSEhIOzs9SEpIPUg7QCEdMUhIPSIUESE4PUg7SEg7PUg7SkhISDtIOzVISDs7OzsWHREd
+ DAf/Af//////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////8EJBEdNEg7SDtKPTs7SDs7SDtIOztISDs7O0hIO0g7
+ O0g7SDtIOztIO0hIPTs7O0hIO0o9NTtKPUgwHSw1OztIMCQQETg7RDs7SDtISD07OztIO0hIPTtIPUg7
+ GhAdD///////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////BxEdIkg7O0g7SD1IO0g7SEg7SDtISDs7SEhI
+ OztIO0hIO0g7SDtISDtIO0o7SEhIOztIPUhESD01NBEeSkhISDsxExERKEA7PUg1PUo7O0hISDs9PUo1
+ SDtEOyEREQz/////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////BBEkFTs7SEg7SDs7Skg7SDs7SDtIOztI
+ SDs7O0hIO0g7O0g7SDtIOztIO0g9SDs7O0hIOztKNUg7SDEdHz07OztIO0odERERQDs7SD09SEg7OztI
+ O0o9PUpINUgeEREK////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////wkRHS87SEg7O0g7SEg9O0g7PUg7
+ SDtISDs7SEhIOztIO0hIO0g7SDtISDtIO0g7O0hIOztISD1INT0xERhIO0hISDtIOyIkJBMsPUg1Sjs7
+ O0hISDtIPUg7PT1ELBEkCv//////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////8RJB01SDs7SEg7SDs7O0g9
+ SEg7SDtIOztISDs7O0hIO0g7O0g7SDtIOztIO0g1SEg7O0hIOzs7SEg7OBQSOz07OztIO0g7MB0RJBtE
+ SD1ISEg1OztIOztKPTtKNTAdEQn/////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////8HER0sSEg7SEg7O0g7
+ SEhIO0o7NUg7SDtISDs7SEhIOztIO0hIO0g7SDtISDtIO0g7Oz1IOztIREg1OzcgID5IO0hISDtIOz00
+ HiQRESM7Ozs7O0hISDtISD1IOz03ERAE////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////8GESQTPjs7SDs7
+ SEg7SDs7O0g9SEg7SDtIOztISDs7O0hIO0g7O0g7SDtIOztIO0g7SEhIO0g7SDVISEQ4FhE4NUg7OztI
+ O0g7SDsvHSQPHTBEQEQ7OztIPTs7Sj1IOCQRB///////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////xERGEg7
+ SEg7SEg7O0g7SEhIOzs7Skg7SDtISDs7SEhIOztIO0hIO0g7SDtISDtIO0g7OzVIO0hKPTU7NRURPkhI
+ O0hISDtIO0g7SDQiHSQRISxENUQ9SDVKPUg9OzEREQT/////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////////wYR
+ HTg7SDs7SDs7SEg7SDs7O0hISD07SDtIOztISDs7O0g9O0g7O0g7SDtIOztIO0g7SEhIO0g9PTtIQE0V
+ ETg1O0g1OztIO0g7SDVIOycTHRARETBAOztIPTs7O0AoERH/////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //8LJCBIO0g7SEg7SEg7O0g7SEhIO0g7O0g7SDtISDs7SEhIO0hIOz1IO0g7SDtISDtIO0g7O0o9O0o7
+ PT01FRE+SkhIO0hISDtIOz1ISDVIPSwdESQRFSYxRDtEOz1AHhEkBf//////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////8EER0vO0g7SDs7SDs7SEg7SDs7O0g1SEg7SDtIOztIPTs7O0g1O0hIO0g7SDtIOztIO0g7SEg9
+ O0g9SDtKTRUkND07O0hIOztIO0g7SjtISDs7SCARESQREB0vND0+IR0REf//////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////BxEcMTVIO0g7SEg7SEg7O0g7SEhIO0g7O0g7SDs9SEg7SEhIO0hIOzVIO0g7SDtISDtI
+ O0g7O0hIOzs1RDsSJDhIOz1IOzVISDtIO0g9SDs1REQQEREJEREdEBERJBEdEAn/////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////AiQREkBIO0g7SDs7SDs7SEg7SDs7O0g7SEg7SDtIO0g1SDs7O0g7O0hIO0g7SDtI
+ OztIO0g7SD1KO0hISDs3FBE4O0hIO0hIPTtIO0g7OztISDs4EREK/wYFChERERERCQT/////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////8RERJIO0pIO0g7SEg7SEg7O0g7SEhIO0g7O0g7PTtISkg7PUhIO0hIO0pI
+ O0g7SDtISDtIO0g7Oz1IOzs7JRQkPjVIOzVIO0o1SDtIO0RISDs1FSQRBf////8G/woFBv//////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////8HER0sNUg9O0g7SDs7SDs7SEg7SDs7O0g1SEg7SEhIOz07SDtKPT07
+ O0g9O0g7SDtIOztIO0g7SEhKO0g9QDERHTRIO0hIO0g9SDtIO0g1SDtISB0REQb/////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////CxEkO0hIOztIO0g7SEg7SEg7O0g7SEhIO0g7NUg7NUpIO0g7
+ RD1KNUhIOztIO0g7PUg7SDtINUg7Oz1IPTs0ERE0SDtIOztIO0g1SDtINUg1PTAQEQn/////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////yQRIEg7O0hIO0g7SDs7SDs7SEg7SDs7O0g7SEg7SEg9
+ O0g7SDVIPUQ7Ikg9O0g7SDtKPTtIO0g7SEg7O0o9LyQkODtIO0hIO0hKSDtIO0hISDsiEREE////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////wYRHRg7PUhIOztIO0g7SEg7SEg7O0g7SEhIO0g7
+ SEg7SDtINUg9SDU7SBM7SDtIO0g7SD09SDtIO0g7Oz1EPR8RETQ7SDtIOztIOz07SDtIOzU9ExEN////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////8HJBEvSDVKO0hIO0g7SDs7SDs7SEg7SDs7
+ O0g7SDU7SDVIO0g7SjVIQDQdMTVIO0g7SEo7SjtINUg7SEhINUgREREoPTtIO0hIO0g7SEo9NUhILCQR
+ B///////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////CxEdMDtIOz1IOztIO0g7SEg7SEg7
+ O0g7SEhIO0g7SEg7SD1IOz09REQSHR5KSDtIO0g7PUg9SDtIOz07OzU+EREdEUo7SDtIOztIO0g7PURI
+ OxQQEf//////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////ABEkESdINUhIO0hIO0g7SDs7
+ SDs7SEg7SDs7O0g7SDU7SDVKNUg7SDssJBEUPTtIO0g7SDs7SDtIO0hISERALxAkEB0fPTVIO0g9O0g7
+ SDs1OzEREREB////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////8RHR0wPUhIOzVIOztI
+ O0g7SEg7SEg7O0g7SEhIO0g7SEg7SD1INT01IhERFDs7SDtIO0g7SEg1SDs9OzU7RBgQERERFDtISDs9
+ SDtIOz07REAhESQJ////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////8EEREUNDtKNUhI
+ O0hIO0g7SDs7SDU7SEg7SDs7O0g7SEg7SDVIO0hATRAdHRQ4PTtIO0g7SDU7SDtISEhISDQREREgHBEf
+ NTtIO0pINUg7SDs+JBARBP//////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////xAkFDFI
+ SD1IOztIOztIO0g7SEg7SEg7O0g7SEhIO0g7NUhISDVEOx4RERARLEo7SDtIO0g7SEg7SDs1SDUxESQR
+ CRERECNISDtIPTtINUREFRERCv//////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////////wcR
+ HSA7Ozs7O0hIO0hIO0g7SDs7SDs7SEg7SDs7O0g7SDtINTtINT0REQYRHSI9RDtIO0g7SEg7SDtISDVA
+ EBERCf8EJBEWPjs9NTtINUg9MR0REQb/////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //8FER0VO0o9SEhIOztIOztIO0g7SEg7SEg7O0g7PUhIOz09SDVIRDsoJAv/ChEUPUg1SDtIO0g7NUg1
+ PTs7MBERHAT///8RERg7SERIPTtAOxYREQX/////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////BxEREzs9OztIO0hIO0hIO0g7SDs7SDs7SEg7SEg7O0g7SjtINT1EExEF/wcRHT41SEg9O0g7
+ SEg7SEhEOxgkEQz/////Bx0RHzs1OztAOyEREQr/////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////wsRJBM7SDtISDVIOztIOztINUg7SEg7SEg7O0g7NUhIO0g9SDVAIhERBv8GESQVPUg7
+ SjtIO0g7O0g7NTgUERH///////8dEBEYOEREPSMcERH/////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////8LJBEWPkhIOztIO0hIO0hIO0hISDs7SDs7SD07PUhKPT07OztEOBERBf///wUR
+ FEo7SD1IO0g7SEg7PUAiJBERBP///////xEkEREiKBQkEREJ////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////EREdFDQ1SjtISDtIOztIOztIOzVIO0g7PUg7SEg7NT1KO0hERCIkC///
+ ////JBEsNUg7OztIO0g7Oz1EEREREf////////8ECREREREREREJ////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////wsRERQxSD1IOztIO0hIO0hIO0hISkg9PUg7SDU7SEhIPUg1Oz4R
+ EQX//////w0RGEg9SEg7SD07SD1IIiQREQX///////////8GBQoREQkE////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////8LESQdMT1IOzs7SDtIOztIOztIOzs9O0o7Sj1ISEg7OzVI
+ O0QVEREG//////8HECQwNUo7O0hKOz07PhMQEQv/////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////CR0RHSdINUhIPTtIO0hIO0hIO0hIO0g9SD07SjU7
+ PUhINT0sEREF////////BhERFEQ9SEg7PT07RCwREREF////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////woREB0xPUo9O0g7SDtIOztIOztIOztIO0g7
+ O0g9SEhIOzVAIBAJ/////////wEdEREnOzs7Sj1IOzsRECQR////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////8HHR0dLEg9O0hKPTVIO0hIO0hIO0hI
+ O0g1SEg1O0o9NUhAHyQcBf//////////BR0RFkREPT07NUgYJBERCf//////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////x0QESI9SjtIOz1ISDtIOztI
+ OztIOztIO0g7SkhIPTVALBEREQH///////////8LEBEaOzs7SEQ4EREREQT/////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////wQRER0fSD1IO0g7SjtI
+ O0hIO0hIO0hIO0g7SD07OztIPhUREQT/////////////BhEkFDFAPTUxJBAdEQn/////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////JBARHDVKOztI
+ O0g9SDVIOztIOztIOzVIPUg7O0RERBYRHAf///////////////8FERERGDEiFBERERH/////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////ABERERE9
+ PUg9O0hKOztIO0g9O0hIO0hISDVKPUg1PSEREQz//////////////////wsRESQRJBAdEREF////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////////8N
+ EREkN0g7SjtIOz09SEg9SDtIOztIOzs1SD07RCgRERH/////////////////////ChEREREREREK////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////ByQRESY1SD1IO0g7Skg1O0o9NUg9O0hIRDVIPSccJBEJ//////////////////////8FEREREREF
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////wQdERAuPUg7OztIOz09SkhIPUhIO0g9Ozs7SDUcERERBf////////////////////////8F
+ CgX/////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////EBERFD47SERIO0g7SD07OztKNUg1O0hAQDEcERERBP//////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////wsRER0xOz1INUo9Oz1KO0hISD1INURAOzQgERERBf//////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////8FESQPHz1ISkg9O0hIPUg7Ozs7O0g7PTccERERCf//////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////xEdESRKOzU9SDtINUo7O0hEREBEOygdERERDv//////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////8HEBERFURIO0o9O0g9SD07NTtAOyIcERERDv//////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////BCQRHRExOzVEPTtIOzs7O0BAJSAQJBERCf//
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////8JERARETBEOztAOz1EQEQ1IiQRERER
+ Bf//////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////w8RERERJzVAPUA9OzssDyQR
+ EREdBP//////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////8KJBEkESQbIygjIyER
+ JBEREREKBf//////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////wkRERERDyQR
+ JBEkHREREREF////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////BAsR
+ JBERERERERAdEQr/////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////BRERERERERERHQX/////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////8FBAUJDgkFBAX/////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////AAAAAAAAAAAAAAAAAAAAAAAAP///////AAAAAAAAAAA
+ AAAAAAAAAAAAAP///////gAAAAAAAAAAAAAAAAAAAAAAAP///////gAAAAAAAAAAAAAAAAAAAAAAAP//
+ /////gAAAAAAAAAAAAAAAAAAAAAAAP///////wAAAAAAAAAAAAAAAAAAAAAAAP///////wAAAAAAAAAA
+ AAAAAAAAAAAAAP///////wAAAAAAAAAAAAAAAAAAAAAAAP///////4AAAAAAAAAAAAAAAAAAAAAAAP//
+ /////8AAAAAAAAAAAAAAAAAAAAAAAP///////8AAAAAAAAAAAAAAAAAAAAAAAP///////8AAAAAAAAAA
+ AAAAAAAAAAABAP///////+AAAAAAAAAAAAAAAAAAAAAPAP///////+AAAAAAAAAAAAAAAAAAAAA/AP//
+ /////+AAAAAAAAAAAAAAAAAAAAD/AP///////8AAAAAAAAAAAAAAAAAAAB//AP///////8AAAAAAAAAA
+ AAAAAAAAA///AP///////4AAAAAAAAAAAAAAAAAAH///AP///////wAAAAAAAAAAAAAAAAAAD///AP//
+ /////gAAAAAAAAAAAAAAAAAAA///AP///////gAAAAAAAAAAAAAAAAAAAP//AP///////AAAAAAAAAAA
+ AAAAAAAAAH//AP///////AAAAAAAAAAAAAAAAAAAAD//AP//////+AAAAAAAAAAAAAAAAAAAAB//AP//
+ ////+AAAAAAAAAAAAAAAAAAAAA//AP//////8AAAAAAAAAAAAAAAAAAAAAf/AP//////8AAAAAAAAAAA
+ AAAAAAAAAAP/AP//////8AAAAAAAAAAAAAAAAAAAAAH/AP//////8AAAAAAAAAAAAAAAAAAAAAD/AP//
+ ////8AAAAAAAAAAAAAAAAAAAAAB/AP//////8AAAAAAAAAAAAAAAAAAAAAA/AP//////8AAAAAAAAAAA
+ AAAAAAAAAAA/AP//////8AAAAAAAAAAAAAAAAAAAAAA/AP//////8AAAAAAAAAAAAAAAAAAAAAAfAP//
+ ////8AAAAAAAAAAAAAAAAAAAAAAPAP//////8AAAAAAAAAAAAAAAAAAAAAAHAP//////8AAAAAAAAAAA
+ AAAAAAAAAAADAP//////8AAAAAAAAAAAAAAAAAAAAAADAP//////8AAAAAAAAAAAAAAAAAAAAAADAP//
+ ////8AAAAAAAAAAAAAAAAAAAAAABAP//////8AAAAAAAAAAAAAAAAAAAAAABAP//////8AAAAAAAAAAA
+ AAAAAAAAAAABAP//////+AAAAAAAAAAAAAAAAAAAAAAAAP///////AAAAAAAAAAAAAAAAAAAAAAAAP//
+ /////AAAAAAAAAAAAAAAAAAAAAAAAP///////gAAAAAAAAAAAAAAAAAAAAAAAP///////+AAAAAAAAAA
+ AAAAAAAAAAAAAP////////AAAAAAAAAAAAAAAAAAAAAAAP////////AAAAAAAAAAAAAAAAAAAAAAAP//
+ //////AAAAAAAAAAAAAAAAAAAAAAAP////////AAAAAAAAAAAAAAAAAAAAAAAP////////AAAAAAAAAA
+ AAAAAAAAAAABAP////////gAAAAAAAAAAAAAAAAAAAAPAP////////gAAAAAAAAAAAAAAAAAAAAfAP//
+ //////gAAAAAAAAAAAAAAAAAAAP/AP////////gAAAAAAAAAAAAAAAAAAA//AP////////gAAAAAAAAA
+ AAAAAAAAAB//AP////////wAAAAAAAAAAAAAAAAAAB//AP////////wAAAAAAAAAAAAAAAAAAB//AP//
+ //////wAAAAAAAAAAAAAAAAAAB//AP////////4AAAAAAAAAAAAAAAAAAD//AP////////4AAAAAAAAA
+ AAAAAAAAAB//AP////////4AAAAAAAAAAAAAAAAAAD//AP////////4AAAAAAAAAAAAAAAAAAB//AP//
+ //////8AAAAAAAAAAAAAAAAAAD//AP////////8AAAAAAAAAAAAAAAAAAD//AP////////8AAAAAAAAA
+ AAAAAAAAAD//AP////////+AAAAAAAAAAAAAAAAAAD//AP////////+AAAAAAAAAAAAAAAAAAD//AP//
+ ///////AAAAAAAAAAAAAAAAAAD//AP/////////AAAAAAAAAAAAAAAAAAA//AP/////////AAAAAAAAA
+ AAAAAAAAAAf/AP/////oAArgAAAAAAAAAAAAAAAAAAP/AP/////AAAAAAAAAAAAAAAAAAAAAAAP/AP//
+ //4AAAAAAAAAAAAAAAAAAAAAAAP/AP////AAAAAAAAAAAAAAAAAAAAAAABf/AP///+AAAAAAAAAAAAAA
+ AAAAAAAAAf//AP///wAAAAAAAAAAAAAAAAAAAAAAAf//AP///gAAAAAAAAAAAAAAAAAAAAAAA///AP//
+ +AAAAAAAAAAAAAAAAAAAAAAAA///AP//+AAAAAAAAAAAAAAAAAAAAAAAA///AP//wAAAAAAAAAAAAAAA
+ AAAAAAAAB///AP//gAAAAAAAAAAAAAAAAAAAAAAAD///AP//AAAAAAAAAAAAAAAAAAAAAAAAD///AP/+
+ AAAAAAAAAAAAAAAAAAAAAAAAD///AP/8AAAAAAAAAAAAAAAAAAAAAAAAD///AP/4AAAAAAAAAAAAAAAA
+ AAAAAAAAD///AP/4AAAAAAAAAAAAAAAAAAAAAAAAD///AP/4AAAAAAAAAAAAAAAAAAAAAAAAD///AP/w
+ AAAAAAAAAAAAAAAAAAAAAAAAB///AP/gAAAAAAAAAAAAAAAAAAAAAAAAB///AP/AAAAAAAAAAAAAAAAA
+ AAAAAAAAB///AP+AAAAAAAAAAAAAAAAAAAAAAAAAB///AP+AAAAAAAAAAAAAAAAAAAAAAAAAB///AP+A
+ AAAAAAAAAAAAAAAAAAAAAAAAD///AP8AAAAAAAAAAAAAAAAAAAAAAAAAD///AP4AAAAAAAAAAAAAAAAA
+ AAAAAAAAD///AP4AAAAAAAAAAAAAAAAAAAAAAAAAH///AP4AAAAAAAAAAAAAAAAAAAAAAAACv///APwA
+ AAAAAAAAAAAAAAAAAAAAAAD/////APgAAAAAAAAAAAAAAAAAAAAAAAP/////APgAAAAAAAAAAAAAAAAA
+ AAAAAAf/////APgAAAAAAAAAAAAAAAAAAAAAAA//////APAAAAAAAAAAAAAAAAAAAAAAAB//////AOAA
+ AAAAAAAAAAAAAAAAAAAAAD//////AOAAAAAAAAAAAAAAAAAAAAAAAB//////AOAAAAAAAAAAAAAAAAAA
+ AAAAAA//////AMAAAAAAAAAAAAAAAAAAAAAAAB//////AIAAAAAAAAAAAAAAAAAAAAAAAA//////AIAA
+ AAAAAAAAAAAAAAAAAAAAAA//////AIAAAAAAAAAAAAAAAAAAAAAAAA//////AAAAAAAAAAAAAAAAAAAA
+ AAAAAA//////AIAAAAAAAAAAAAAAAAAAAAAAAA//////AOAAAAAAAAAAAAAAAAAAAAAAAAf/////APgA
+ AAAAAAAAAAAAAAAAAAAAAAf/////AP4AAAAAAAAAAAAAAAAAAAAAAAf/////AP+AAAAAAAAAAAAAAAAA
+ AAAAAAf/////AP/gAAAAAAAAAAAAAAAAAAAAAAf/////AP/4AAAAAAAAAAAAAAAAAAAAAAf/////AP/+
+ AAAAAAAAAAAAAAAAAAAAAAf/////AP//oAAAAAAAAAAAAAAAAAAAAAf/////AP//8AAAAAAAAAAAAAAA
+ AAAAAAf/////AP///gAAAAAAAAAAAAAAAAAAAAf/////AP///4AAAAAAAAAAAAAAAAAAAAf/////AP//
+ /+gAAAAAAAAAAAAAAAAAAA//////AP////8AAAAAAAAAAAAAAAAAAA//////AP/////6AAAAAAAAAAAA
+ AAAAAA//////AP//////8AAAAAAAAAAAAAAAAB//////AP///////4AAAAAAAAAAAAAAAL//////AP//
+ /////gAAAAAAAAAAAAAAA///////AP///////gAAAAAAAAAAAAAAA///////AP///////AAAAAAAAAAA
+ AAAAA///////AP///////AAAAAAAAAAAAAAAA///////AP///////AAAAAAAAAAAAAAAA///////AP//
+ ////+AAAAAAAAAAAAAAAA///////AP//////8AAAAAAAAAAAAAAAA///////AP//////+AAAAAAAAAAA
+ AAAAA///////AP//////8AAAAAAAAAAAAAAAB///////AP//////8AAAAAAAAAAAAAAAA///////AP//
+ ////4AAAAAAAAAAAAAAAB///////AP//////4AAAAAAAAAAAAAAAB///////AP//////wAAAAAAAAAAA
+ AABAD///////AP//////4AAAAAAAAAAAAAB6P///////AP//////wAAAAAAAAAAAAAB/////////AP//
+ ////wAAAAAAAAAAAAAD/////////AP//////wAAAAAAAAAAAAAD/////////AP//////gAAAAAAAAAAA
+ AAH/////////AP//////gAAAAAAAAAAAAAH/////////AP//////gAAAAAAAAAAAAAP/////////AP//
+ ////AAAAAAAAAAAAAAH/////////AP//////gAAAAAAAAAAAAAP/////////AP//////AAAAAAAAAAAA
+ AAP/////////AP//////gAAAAAAAAAAAAAf/////////AP//////AAAAAAAAAAAgAAf/////////AP//
+ ////AAAAAAAgAAA4AA//////////AP//////AAAAAAAgAAB4AB//////////AP//////AAAAAAAgAAD8
+ AD//////////AP//////AAAAAABwAAB+AD//////////AP//////AAAAAAD4AAD+AH//////////AP//
+ ////AAAAAAD4AAD/gP//////////AP//////AAAAAAD4AAH/////////////AP//////AAAAAAH4AAH/
+ ////////////AP//////AAAAAAP4AAP/////////////AP//////AAAAAAP8AAP/////////////AP//
+ ////gAAAAAP+AAP/////////////AP//////AAAAAAf+AAf/////////////AP//////gAAAAA//AA//
+ ////////////AP//////AAAAAB//gA//////////////AP//////gAAAAD//wB//////////////AP//
+ ////gAAAAD//4D//////////////AP//////gAAAAD//+P//////////////AP//////wAAAAH//////
+ ////////////AP//////wAAAAP//////////////////AP//////wAAAAf//////////////////AP//
+ ////4AAAA///////////////////AP//////4AAAB///////////////////AP//////4AAAD///////
+ ////////////AP//////8AAAH///////////////////AP//////+AAAP///////////////////AP//
+ ////+AAAf///////////////////AP///////AAB////////////////////AP///////gAH////////
+ ////////////AP///////4AP////////////////////AP///////8Af////////////////////AA==
+
+
+
\ No newline at end of file
diff --git a/forms/ExtractionWindow.Designer.cs b/forms/ExtractionForm.Designer.cs
similarity index 95%
rename from forms/ExtractionWindow.Designer.cs
rename to forms/ExtractionForm.Designer.cs
index 5657079..e9a7883 100644
--- a/forms/ExtractionWindow.Designer.cs
+++ b/forms/ExtractionForm.Designer.cs
@@ -1,6 +1,6 @@
namespace ThemModdingHerds.VelvetBeautifier
{
- partial class ExtractionWindow
+ partial class ExtractionForm
{
///
/// Required designer variable.
@@ -28,7 +28,7 @@ protected override void Dispose(bool disposing)
///
private void InitializeComponent()
{
- System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ExtractionWindow));
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ExtractionForm));
FileFormat = new ComboBox();
ExtractButton = new Button();
ExtractSelectFile = new Button();
diff --git a/forms/ExtractionWindow.cs b/forms/ExtractionForm.cs
similarity index 94%
rename from forms/ExtractionWindow.cs
rename to forms/ExtractionForm.cs
index 814419d..23bcde0 100644
--- a/forms/ExtractionWindow.cs
+++ b/forms/ExtractionForm.cs
@@ -2,10 +2,10 @@
namespace ThemModdingHerds.VelvetBeautifier
{
- public partial class ExtractionWindow : Form
+ public partial class ExtractionForm : Form
{
private string extractFilePath = "";
- public ExtractionWindow()
+ public ExtractionForm()
{
InitializeComponent();
ExtractButton.Enabled = false;
diff --git a/forms/ExtractionWindow.resx b/forms/ExtractionForm.resx
similarity index 100%
rename from forms/ExtractionWindow.resx
rename to forms/ExtractionForm.resx
diff --git a/forms/InstallForm.Designer.cs b/forms/InstallForm.Designer.cs
new file mode 100644
index 0000000..e7175e3
--- /dev/null
+++ b/forms/InstallForm.Designer.cs
@@ -0,0 +1,75 @@
+namespace ThemModdingHerds.VelvetBeautifier.forms
+{
+ partial class InstallForm
+ {
+ ///
+ /// 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()
+ {
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(InstallForm));
+ InstallModUrl = new TextBox();
+ FetchButton = new Button();
+ SuspendLayout();
+ //
+ // InstallModUrl
+ //
+ InstallModUrl.Location = new Point(12, 12);
+ InstallModUrl.Name = "InstallModUrl";
+ InstallModUrl.PlaceholderText = "GameBanana or Zip File Link";
+ InstallModUrl.Size = new Size(272, 23);
+ InstallModUrl.TabIndex = 0;
+ InstallModUrl.TextChanged += InstallModUrl_TextChanged;
+ //
+ // FetchButton
+ //
+ FetchButton.Enabled = false;
+ FetchButton.Location = new Point(12, 41);
+ FetchButton.Name = "FetchButton";
+ FetchButton.Size = new Size(270, 23);
+ FetchButton.TabIndex = 1;
+ FetchButton.Text = "Fetch";
+ FetchButton.UseVisualStyleBackColor = true;
+ FetchButton.Click += FetchButton_Click;
+ //
+ // InstallForm
+ //
+ AutoScaleDimensions = new SizeF(7F, 15F);
+ AutoScaleMode = AutoScaleMode.Font;
+ ClientSize = new Size(294, 78);
+ Controls.Add(FetchButton);
+ Controls.Add(InstallModUrl);
+ Icon = (Icon)resources.GetObject("$this.Icon");
+ Name = "InstallForm";
+ Text = "Install Mod";
+ ResumeLayout(false);
+ PerformLayout();
+ }
+
+ #endregion
+
+ private TextBox InstallModUrl;
+ private Button FetchButton;
+ }
+}
\ No newline at end of file
diff --git a/forms/InstallForm.cs b/forms/InstallForm.cs
new file mode 100644
index 0000000..d8bd938
--- /dev/null
+++ b/forms/InstallForm.cs
@@ -0,0 +1,48 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace ThemModdingHerds.VelvetBeautifier.forms
+{
+ public partial class InstallForm : Form
+ {
+ public InstallForm()
+ {
+ InitializeComponent();
+ }
+
+ private void InstallModUrl_TextChanged(object sender, EventArgs e)
+ {
+ FetchButton.Enabled = (Utils.IsUrl(InstallModUrl.Text) && InstallModUrl.Text.EndsWith(".zip")) || GameBanana.ValidUrl(InstallModUrl.Text);
+ }
+
+ private async void FetchButton_Click(object sender, EventArgs e)
+ {
+ string url = InstallModUrl.Text;
+ if(GameBanana.ValidUrl(url))
+ {
+ GameBananaMod? gb_mod = await GameBananaMod.Fetch(GameBanana.GetModId(url));
+ if(gb_mod == null)
+ {
+ Velvet.ShowMessageBox("Couldn't fetch " + url);
+ Close();
+ return;
+ }
+ new DownloadForm(gb_mod).ShowDialog();
+ Close();
+ return;
+ }
+ string unzippedpath = await DownloadManager.GetAndUnzip(url);
+ Mod mod = new(unzippedpath);
+ new DownloadForm(mod,unzippedpath).ShowDialog();
+ Close();
+ return;
+ }
+ }
+}
diff --git a/forms/InstallForm.resx b/forms/InstallForm.resx
new file mode 100644
index 0000000..a8de6f5
--- /dev/null
+++ b/forms/InstallForm.resx
@@ -0,0 +1,781 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
+
+
+
+
+ AAABAAEAuLgAAAEACAComQAAFgAAACgAAAC4AAAAcAEAAAEACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAOPYEAK0OAACBEggAhSIAAKEmBAChMfgAvS4IAL01+ACpPgQAwT4AALFCDADJQggA1U4UANlKLADFW
+ iQA0VpAAM1iMADpclwA4WKYAN1qiADZcnQAzWakAMlukACpM1wA1WK4ALUreADdXtAAwWbAAN1+bADxf
+ mgA0VroAMli1AD5enwAuV7wAMVbCADNVyAA+Y5gAJ1DdADdXwwAxUtUALVbKADlkmgAqT+MANlTRADBV
+ 0QA8ZKEAQF60AC9YzQArV9MALlXZADxnnQBBZ5wAMVTfAC1S5wBIaJ0AKljdACxW4wBHY7IAP2ilAC5V
+ 6QA/aqEAKVbsAC5Z5gA+XNoAKljtAE1togBOaqwAQW+gACtZ7wBSb54ATXCfAERh1gAtW/EAP3OmADRf
+ 7QBGdKUAV3SjAC5g7wBCd6kAfYB/AFt4pwBEe6cAW3ukAGJ7pgBcd7YAWXPMAEh/qwBTcN8AXHbPAEuC
+ rgA8b/IAZ4KqAIiLiQBHhLMAZYWvAHGGrQBJibEAY3riAEWA1wB0ibEAQXvzAE2NtgB2jq8AaYLgAJSX
+ lQBjkbcAS5O4AFGSuwCAkrIARYXzAH2UtwBziOIAUJm9AEmM9ACIm7UAhJXLAIqcvABLkfIAVp/DAFCi
+ wwCipaMAWaLGAI+fxwBUpsUAg5jmAJWkvQBXqckAk6u3AFWl3wCrrqwAVKL1AFWvzwBcr88AlKPqAJ+v
+ wQCgrscAV7PNAKexwQBYqvMAYbTUALS3tQBct9IAYrfRAJ6s6gBeudQArLfHALm8ugBhvdgAXrT2AKq5
+ 0gCruNgAXL/bAFvB1gBguPUAvsG/AGTA2wCzvs4AXsHeAF/F2gBoxOAAvMLQAGnI3QBjyd4Av8fOALrF
+ 1gBlyeUAtL/wAGbM4gCBzN4Ays3LAMvM0QBlyfsAwMvcAMbN1QDH0NAAa9HnAL3I7wDO0c8AntHdALbR
+ 1wDJzt0Az9DWAMPS1ADV0dQAv8ryANDT0QBpz/sAvtPXAMXQ4QCE1OYAvtTYAG/V6wB81ekA2NXRANLV
+ 0wDM1dUAmdXjAGnW7QBq0/gAzdTbALTW3QCj1uIA1NXaAKrY3QDU19UAr9jdAGzV+gDP1OMApdrgANzZ
+ 1QDW2dcAytjeAHPa8ABt2/IA2NneAG/a+QCe3eQA39zXANnc2gBv3+8Afd7vAM/W9QB34PAAi+DsAJLg
+ 6wDh39oAcuHyANvf3ACF4e4A1t3lAOXi3QB75PQAdeP7AN/j4AB25fcA2970AOjm4QDc5OsAeen6AI3p
+ 9wDr6OQAiOr6AJXq9wDt6uYAquz1ALft8wDj6PgAvu7xAO/t6ADq7usA0vDuAO7w9QD29/wA+vz/AP//
+ /wAAAAAA/////////////////////////////////////////////////////////////0+3sfj4+Pj4
+ +PjCzPj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+OnCscHh+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+Pj4+P////////////////////////////////////////////////////////////9PwbH4
+ +Pj4+Pj4ufj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+ePBsbHM6fj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+Pj4+Pj4+Pj/////////////////////////////////////////////////////////////
+ /4yp7Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj46dHBqbnZ+Pj4+Pj4+Pj4
+ +Pj4+Pj4+Pj4+Pj4+Pj4+Pj4////////////////////////////////////////////////////////
+ //////9ot9n4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj44bGxqcHh+Pj4+Pj4
+ +Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+P//////////////////////////////////////////////////
+ ////////////T6qu+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pjp0rGpwbn4+Pj4
+ +Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj/////////////////////////////////////////////
+ //////////////////+Mwen4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+OnMwbGxseHs
+ +Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4////////////////////////////////////////
+ ////////////////////////aMHj+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj57Omxwamp
+ wdn4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pjz+f//////////////////////////////////
+ /////////////////////////////0+psfj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj40bXB
+ qbHB2ez4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pn449H/////////////////////////////
+ ////////////////////////////////////aLfs+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Onj
+ t7exwbXB4fj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+PDs0am3////////////////////////
+ //////////////////////////////////////////+SzPj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ 7KqxwampqrHh+fj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj5+PP48Lm5qam3sf//////////////////
+ ////////////////////////////////////////////////eKna+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj48/j4
+ +OnStbGxqcGpqaORtczw+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+fDm4bGpt7e3t4z/////////////
+ /////////////////////////////////////////////////////1y3sez4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pns2rXBwcGxqbmxiVMkEBE2W3Lp+fj4+Pj4+Pj4+Pj4+Pj4+Pj4+fn47NG5sam3t7GxgU//////////
+ ////////////////////////////////////////////////////////////wbGp7Pj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ 8/j46drMwampwampscHZ7OyRclMdEREdEVOq6fj4+Pj4+Pj4+Pj4+Pj48OPZwampqbe3t4xo////////
+ /////////////////////////////////////////////////////////////////7Gxwbns+Pj4+Pj4
+ +Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pn4+PnMtbG1qbHBwamx4+Hs+Pj4+Pjp438REBEREUx9+Pj4+Pj4+fj4+Ozhwrmxt7e3t7exgU//////
+ ///////////////////////////////////////////////////////////////////////BqbHMzOP4
+ +Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj48OPM0bGpqbGpqcHBucKu+Pj4+Pj4+Pj4+Pj47Il9UhAkJBFmrezs6ePM4bm3t7e3t7eagWhPT///
+ //////////////////////////////////////////////////////////////////////////9PqcHm
+ +Ozs+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj4+Pj57MzBqrHBt8GqwcG54eb4+Pj4+Pj4+Pj4+Pj4+Pj4+OGcEBERETZTo8HBt7e3sbGSeFxP////
+ ////////////////////////////////////////////////////////////////////////////////
+ eKnj+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+OzjucGpqbHBqbGxudHp+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+PiGXxEdERERbKmSeFz/////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////aMHB+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+Pj4+Pj47Ozm4dmxqcGpsbGj5vj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+OyuEBEdESQE////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////gbGx7Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+OGuwcGpwcHM2vP4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+OyGUhAR
+ EQf/////////////////////////////////////////////////////////////////////////////
+ ////////////T6mp2vj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pnp2amxqbm54/j4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +OxTJA8kEQT/////////////////////////////////////////////////////////////////////
+ /////////////////4HBwvj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+Pj4+OHh7Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj448zBsbfM6fj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+K42JBERDAP/////////////////////////////////////////////////////////////
+ /////////////////////0+pqez4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+Pj4+Pj4+Pj4wrHp+fj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pjs4bGxqcHa+Pj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+Pj4+Pj47HIdHRAQBf//////////////////////////////////////////////////////
+ //////////////////////////+Bwdn4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+PP4+Pj4+Pj4+Pj4+PjSwdnm+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4wbHBudr4+Pj4+Pj4
+ +Pj4+Pj4+Pj4+Pj4+Pj4+Pj4iUYQEREH////////////////////////////////////////////////
+ //////////////////////////////9PwbHa+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+Pj4+PPa7Pj4+Pj4+Pj4+Pj4+Om5ueP4+fj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+PjhtbHB+Pj4
+ +Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+PjMNhEREQf/////////////////////////////////////////
+ ////////////////////////////////////gbHC7Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+Pj4+Pj4+Pj47LHs+Pj4+Pj4+Pj4+Pj47Lmx0ePz8/j4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj47NGp
+ qcz4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+OlsJB0RC///////////////////////////////////
+ ////////////////////////////////////////T6mxsfj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+OPBsfD4+Pj4+Pj4+Pj4+Pj44anBsez48/j4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +PjawcHB+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj46UYQHREM////////////////////////////
+ /////////////////////////////////////////////0+pweH4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj46eGxwbHC6fj4+Pj4+Pj4+Pj4+Pja2anB4dr5+Pj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+bGxwun4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4ZhEdEQT/////////////////////
+ //////////////////////////////////////////////////9cwbH4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj47MG1t8q3tbXh+Pj4+Pj4+Pj4+Pj4+Ozjqam5wen4+PP4+Pj4
+ +Pj4+Pj4+Pj4+PCxscHs+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+PhFEBAkBv//////////////
+ ////////////////////////////////////////////////////////eLGx+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj447G3tbfJ8dS+ucf4+Pj4+Pj4+Pj4+Pj4+ObjsbG10dbj
+ +fn4+Pj4+Pj4+Pj4+PjasanM6fj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+GYREREF////////
+ /////////////////////////////////////////////////////////////4yp2fj4+Pj4+Pjm+Pj4
+ +Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj5yre3ytby7u7o8dPB4/j4+Pj4+Pj4+Pj4+Pj4+OzC
+ qbHBwcHR+Pj5+Pj4+PP4+PjhsanBsfj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4NhERJAb/
+ //////////////////////////////////////////////////////////////////+aseH4+Pj4+Pj4
+ wfj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4wsG31sjx7uju7u7xs7XR7Pj4+Pj4+Pj4+Pj4
+ +Pj4+NHBwbe3t7e1ytnj4dLa4dGxqbHBwez4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Phm
+ ER0RA///////////////////////////////////////////////////////////////////sbHh+Pj4
+ +Pj46ePs+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+PjptcG3t8vo7uju7u7u7ujNwrn5+Pj4+Pj4
+ +Pj4+Pj4+PjssbXIyNbWt7e3t7XBwbGxt8Gxuez4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj47CQQHQr//////////////////////////////////////////////////////////////////7Gp
+ 5vj4+Pj4+OOx7Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pjs0cHRz/Lu7u7u7u7u7u7u8cS3t9Hs
+ +Pj4+Pj4+Pj4+Pj4+KrKyO7uwL31zb7Wt9bKysq+0Ob4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+PiuNhEQ////////////////////////////////////////////////////////////////
+ //+pweb4+Pj4+Pjjwfj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pjpt7XKx+ju7u7o7uju6O7u7uju
+ 8sq5ten4+fj4+Pj4+Pj4+Piqt8ju6O7o7u7u7u7u6O7u7vH5+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+Pj4+Pj4+JEREST/////////////////////////////////////////////////////////
+ ////////qcHj+Pj4+Pj446n4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+PjpubfWs/Hu7u7u7u7u7u7x
+ 6O7u7ujAvrW50dbw+PP4+Pj4+PjssbX37u7u7u7u8eju7u7u7vH3+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4o5FT
+ EREPERERUnSR6fn4+Pj4rV8RERERCv//////////////////////////////////////////////////
+ /////////////7Gp4fj4+Pj4+NnB+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pnpwbe3yO7u6O7o7u7u
+ 7uju6O7u7ujx7u7Tt6mpweH5+Pjz+Pn44cHB4O7u7uju6O7o7u7u7uju9/j4+Pj4+Pj4+Pj4+Pj4+Pjp
+ RhEQJBApHCkQEREdEUXz+Pj4hhERESQkEREH////////////////////////////////////////////
+ ///////////////////BqeP4+Pj4+PixzPj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pjs0bfP9e7o7u7u
+ 7u7x6O7u7u7u6O7u7u7o8b2tt7epscHS4eHa0am15e7u6O7u7u7u7uju7u7u8ff4+Pj4+Pj4+Pj4+Pj4
+ +OmHHQ8RJEWGnJySoF8kEBERELX4rRERJJHMkREkEAb/////////////////////////////////////
+ ////////////////////////msHB+Pj4+PjsweH4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pn4taq3ye7u
+ 7u7u6O7o7u7u7u7u7u7u7uju7u7u7ve1t7exwbGxt7W3t8no6O7u7u7u7u7u7u7u7u73+Pj4+Pj4+Pj4
+ +Pj4+OkRJBAkRuH4+Pj4+Pj44zYdEREQ6UUkNuz4+Pk2Dx0F////////////////////////////////
+ /////////////////////////////4Gqqfj4+Pj5wrHs+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj40bnK
+ 9e7u6O7o7u7u7u7o7u7u7uju6O7u7u7x6O7o3PTTyre5tbW1t/Xu7u7o7uju7uju6O7u7ujx9/j4+Pj4
+ +Pj4+Pj4+OxTEREzkez4+Pj4+Pj4+PjsoxAkEVsREan4+Pj4whERC///////////////////////////
+ //////////////////////////////////9owbfs+Pj48Myx7Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ 48rKye7u6O7u7u7u7u7u7u7u6O7o7u7u7uju7uju7u7u7vLJz8fHs/Lx6O7o7u7u7u7u7u7u7uju7vf4
+ +Pj4+Pj4+Pj4+PiRECRG0vj4+Pj4+Pj4+Pj4+PjjRREdJEb4+Pj4+PhmEREG////////////////////
+ ////////////////////////////////////////T6mx0vj4+Oyxsez4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj42rm3yPHo7u7u7vHo7u7u6O7o7u7u7u7u7u7u7u7u7u7u7uju7u7u7u7u7u7u7u7o7uju6O7u6O7u
+ 7uj3+Pj4+Pj4+Pj4+PjMDyRb4fj4+Pj4+Pj4+Pj4+Pj4+OxmJBDh+Pj4+Pj4hhEkBf//////////////
+ /////////////////////////////////////////////0+3qsLs+Ozawanh+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+LfKyO7u7u7u7uju7u7u6O7u7u7u6O7o7u7u7u7o7uju6O7u7u7o7u7u7uju7u7u7u7u7u7u
+ 7uju7u7u7vj4+Pj4+Pj4+Pj4bBwk2vj4+Pj4+Pj4+Pj4+Pj4+Pj47EZM+Pj4+Pj4+MoQEQv/////////
+ ////////////////////////////////////////////////////aKnB0dbCtaqp2fj4+Pj4+Pj4+Pj4
+ +Pj4+Pj4+Pj47Lm10/Hu7uju7u7u7u7o7u7u6O7o7u7u7vHo7uju7u7u7u7u7u7u7u7u6O7u7u7u6O7o
+ 7u7u7u7u7u7u7u74+Pj4+Pj4+Pj47FMcmvj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pjjo/j4+Pj4+Pj4EBERBf//
+ //////////////////////////////////////////////////////////+Mqampt6nBqcL4+Pj4+Pj4
+ +Pj4+Pj4+Pj4+Pj4+Na3yvHo7u7u7u7u7uju7u7u6PHu7u7u6O7o7u7u7u7o7u7u7uju6O7u6PHu7uju
+ 6O7u7u7u6O7u6O7u7u7u8fj4+Pj4+Pj4+MwRZvn4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj48+zp6YcR
+ EQT/////////////////////////////////////////////////////////////T7e3t7epwbHB7Pj4
+ +Pj4+Pj4+Pj4+Pj4+Pj4+Oy31uDu6PHo7uju6O7x6O7o7u7u7u7u7u7u7u7u7uju7u7u6O7u7u7o7u7u
+ 6O7u7u7u6PHo7u7u7u7u8ejo7vH4+Pj4+Pj4+PjSHK74+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4824R
+ EVOgJBEF//////////////////////////////////////////////////////////////9PXHiSwamq
+ qfj4+Pj4+Pj4+Pj4+Pj4+Pj4+Om1ysnu7u7u7u7u7u7u7u7u7u7u6O7o7u7u7u7u6O7u7u7o7u7u7uju
+ 6O7u6O7u7uju6O7u7u7u6O7o7u7o7u7u9/j4+Pj4+Pj40nL4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +KMQERAdERERCf//////////////////////////////////////////////////////////////////
+ /0+1tcHj+Pj4+Pj4+Pj4+Pj4+Pj4+PjRysju7u7u6O7o7u7u7u7o7u7u7u7u7u7o7u7u7u7u7u7u7u7u
+ 6O7u7u7u7u7u6O7u7u7u6O7o7u7u7u7u7uju7u/4+Pj4+Pj4+MPj+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4
+ +Pj4+PjsrpEkERFGEQ7/////////////////////////////////////////////////////////////
+ ////////mrGxufj4+Pj4+Pj4+Pj4+Pj4+Pjhtcrc7u7o7u7u7u7u6O7u7u7u7u7u6O7o7u7u6O7o7uju
+ 6O7u6PHu7ujx7ujx6O7u7u7u7u7u7u7u6PHu6O7u7u7u8f74+Pj4+Pjs+Pj4+Pj4+Pj4+Ozp4en4+Pj4
+ +Pj4+Pj4+Pj4+Pj4+EYdUxEJ////////////////////////////////////////////////////////
+ /////////////4HBqbn4+Pj4+Pj4+Pj4+Pj4+Pjmtcry7uju8eju7u7o7u7o8eju6O7o7u7u7u7o7u7u
+ 7u7u7u7o7u7u6O7u6O7u7u7u7u7u7u7u7u7u7u7o7u7o7uju7vH6+Pj4+Pj4+Pj4+Pj4+Pj4+KNfERB9
+ +Pj4+Pj4+Pj4+Pj4+Pj4+PigJEURB///////////////////////////////////////////////////
+ //////////////////94qcHR+Pj4+Pj4+Pj4+Pj4+Pj41rfL6O7u7u7u7u7o7u7u6O7u7u7u7u7u6O7u
+ 7u7u6O7o7uju7u7u6O7u7u7u7u7u7u7u7uju7u7u7u7u7u7u6O7u7u7u7vj4+Pj4+Pj4+Pj4+Pj4+K0d
+ ESQRffj4+Pj4+Pj4+Pj4+Pj4+PPs4xEdHQT/////////////////////////////////////////////
+ ////////////////////////XMGxwun4+Pj4+Pj4+Pj4+Pj42re36O7u7u7u7uju7u7u7u7u7uju7u7o
+ 7u7u7u7u7u7u7u7u7ujo7u7u7u7u7u7u7u7u7u7u8eju7u7o7u7u7u7u7uju7u70+Pj4+Pj4+Pj4+Pj4
+ +NE2ERAkZuP4+Pj4+Pj4+Pj4+Pj47JFsUhERHRAF////////////////////////////////////////
+ /////////////////////////////0+xqbns+Pj4+Pj4+Pj4+Pj47Le17+7u7u7o7u7o7u7o7u7u7uju
+ 7u7o8e7u7u7o7uju6O7u7ujx7u7u7u7u7u7u7uju7uju7u7u7u7u7u7u7u7u7ujx7u7o8fX4+Pj4+Pj4
+ +Pj4+PicJCRb7Pj4+Pj4+Pj4+fj47OOjUxEQJBEREQkE////////////////////////////////////
+ ////////////////////////////////////t6rB7Pj4+Pj4+Pj4+Pj4+dLK9+ju7u7u7u7u7u7u7u7u
+ 6O7u7u7u7u7u7uju7u7u7u7x6O7u7u7u7u7u7u7o7u7u7u7u7uju7u7u8eju7u7u7u7u7u7u7u7o9Pj4
+ +Pj4+Pj4+PjsbBBm7Pj4+Pj4+Pj4+PjWbGYdEREcEREcCf//////////////////////////////////
+ /////////////////////////////////////////5LBqeH4+Pj4+Pj4+Pj4+PC1tdTu7u7o8e7u6O7o
+ 7u7u6O7u7uju7u7o7u7u7u7o7uju7uju7u7u7u7u6O7o7u7o7u7o7u7u6Oju6Oju6PHu6Oju7u7o7u7u
+ 7vH9+Pj4+Pj4+Pj4+ClS+Pj4+fj4+PDp1n0RECQRERERDAcEAf//////////////////////////////
+ //////////////////////////////////////////////94sbHM+Pj4+Pj4+Pj4+PnMyvTu7uju7u7o
+ 7u7u7u7u7u7x6O7u7u7u7u7o7uju7u7u6O7u7u7u7u7u7u7u7u7u7u7o7u7o7u7u7uju7u7u6Oju7u7u
+ 7u7u6O7u7/T4+Pj4+Pj4+PgR0vj4+PPz+IlmRhEQEREREQoF////////////////////////////////
+ ////////////////////////////////////////////////////XKmxwfj4+Pj4+Pj4+PjWt8jo7u7u
+ 7u7o7u7u6O7o7uju6O7u7uju6O7o7u7u7u7o8eju7u7u7u7u7uju7uju7uju7uju7uju7u7u7u7u7uLe
+ r6Gf7u7o7uju7uju9f74+Pj4+Pj4fez4+PjsoCQdJB0kHSBBHQT/////////////////////////////
+ /////////////////////////////////////////////////////////0/Bt6n5+Pj4+Pj4+Pj447fy
+ 7u7u8eju7u7u7u7u7u7u7u7u6O7u7u7u7u7o7uju7u7u7u7u7u7o7ujo5+ju7u7u7u7u7u7u8eju6q9+
+ al1RQx0dOu7u7u7u7u7u7u70+Pj4+Pj4+On4+PjWZhERHSQSLCcXVA3/////////////////////////
+ ////////////////////////////////////////////////////////////////krHB0fj4+Pj4+Pj4
+ 6bfN6O7u6O7o7u7u6O7u6O7o7uju7u7u7uju6O7o8e7u7u7u7u7u7u7o7u7u7u7u6O7o6O7q7u7qv6J7
+ UREREREkEREdEB3o7u7o7uju7u7u6O76/Pj4+Pj4+PjmZhERIBo1NTs1F1QK////////////////////
+ /////////////////////////////////////////////////////////////////////3iqqa74+Pj4
+ +Pj488LH6O7o7u7u7uju7u7o7u7u7u7u7u7u6O7u7u7u7u7u7u7u7u7u7u7u7u7x6O7u7u7u7u7u3otl
+ Vh0RHRERJCQkIC4aORAg5+7u7u7u7u7o7u7u6O/v8vLy7/LyWREdekdKNTU7GSpUCf//////////////
+ //////////////////////////////////////////////////////////////////////////9cwcHR
+ +Pj4+Pj4+MPKxPHu7u7u7u7u7u7u7u7u6O7u7u7u7ujx7u7u7u7u7u7u7u7u7u7u6Oju7u7u7u7u6r+O
+ VhEREREkHSAuGisnNTsXFyYRHdfu7uju6O7o7u7u6PHu7u7u6PHup0MknN0nNTU1Oyo0VAn/////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /7epuez4+Pj4+PjD1vHu7u7u7u7o7u7u7u7o7u7u7uju6O7u7u7u6O7u7u7o7u7u6O7o6O7u7u7u7u7U
+ flYzHR0dHSQuIzQ0NUo1SjU7GSorER2f7u7u7u7u7u7o7u7u7u7u7u7u7qEkaby4JzU1NTsqFxH/////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////+Mt8Hp+Pj4+PjptcTu7uju7u7u6O7u7uju7u7u7u7u7u7u7uju6PHu6O7u7u7u7u7u7u7u7u7u
+ 1aVZJBEdJB0SGiw1NTU1NTU1NTU1NUoZLBEgn+7u6O7u7u7u7u7u6O7u7u7u7u7UWR37uD81NTU1NBcR
+ BP//////////////////////////////////////////////////////////////////////////////
+ ////////////aKmx6fj4+PjzudPx7u7u6O7o7u7o7u7x6O7o7uju8eju6O7u7u7u7ujx6O7o7ujo5+ju
+ 7ufVdksRHREdEyM0NTVKNTVKNUo1SjVKNUo1OzEgNp/o7u7x6O7u6PHo7u7u7uju7uju6Fkz/Lg0NTU1
+ OyUXEP//////////////////////////////////////////////////////////////////////////
+ /////////////////0+3qdH4+Pj41sfE7uju7u7u7u7u7u7u7u7u7u7u7u7o7u7u7uju7u7u7u7u7u7u
+ 7u7u6r+DQxERESAaJzs1NTU1NTVKNTU1NTU1NTU1OzsnEB2f7u7u7u7u7u7u7u7u6O7u7u7u6N48W/y4
+ JzU1OzU0FxEC////////////////////////////////////////////////////////////////////
+ ////////////////////////jKnB8Pj4+NrW8eju7uju6O7o7vHo7uju6O7u7u7u7u7u6O7u7u7o7u7u
+ 7u7u7u7u6HdDJBERRSYnPjVKNUo1SjVKNTU1SjVKNTVKNTs7JxEgn+7o7uju6O7u6O7o7u7u7ujx6O7e
+ SWz9uCc1Ozs1F1UL////////////////////////////////////////////////////////////////
+ /////////////////////////////2ipteP4+Pm3xO7u7u7u7u7u7u7u6O7u7u7u7uju7u7o8eju7u7u
+ 7u7u7ujo7u7ur2ARHBFmllcXNBk7NTU1NTU1NTVKNTU1NTVKNTU1NTEkHZ/u7u7u7u7u7uju7u7u7u7u
+ 6O7uvzNy/Lg0NTs7KhcRBf//////////////////////////////////////////////////////////
+ //////////////////////////////////9Pt8HS8/jM1uju7u7u7uju7u7u7u7u7u7u6O7u8eju7u7u
+ 7u7u7u7o7u7u7u7uayQREUXW/KZhFzQ1NTVKNUo1SjVKNTU1SjVKNTU1NTsnER2f6O7o8eju6O7u7u7u
+ 7u7u7u7u7r8pbv3dPxk7KhdHEQX/////////////////////////////////////////////////////
+ /////////////////////////////////////////4G1wfnhyrLo7u7u6O7u7u7o7u7u7u7o7u7u7uju
+ 7u7o7u7u7u7u7u7o6O6vWRERRYf+/v6wVxcZO0o1NTU1NTU1NTVKNTU1NTU1SjU1LB0Rn/Hu7u7u7u7u
+ 7uju6O7u7ujo7u6nM17+9j81NSolVREG////////////////////////////////////////////////
+ //////////////////////////////////////////////9Pqanw4crv7u7u7u7o7uju7u7x6O7u7uju
+ 6O7u7uju7u7u7u7o7u7u6O6nQyQRUPv9/vz+sGEXSjU1NUo1SjVKNTVKNTU1SjU1SjU7OygRHdfu7u7o
+ 7u7u7u7u7u7u6O7u7u7onzMz++s/KjgqGXMdB///////////////////////////////////////////
+ /////////////////////////////////////////////////////4zBwsO+6O7u6O7u6O7u7u7o7uju
+ 7ujx7u7u7uju7u7u7u7u7u7o7u6hMx0Rh/v+/f7+/I8XNBk7SjU1NTU1NTVKNTVKNTU1SjU1NTsjERHo
+ 7u7u6O7u6O7u7uju7u7o7u7q3qEpHeX8hTQZF0cNEAr/////////////////////////////////////
+ //////////////////////////////////////////////////////////9ot7G57+7u7u7u7u7u8eju
+ 7u7u7u7u7uju6O7u6O7u7u7o7uju6O6fKR0QrP3+/f7+/Px8GTg7NTU1NUo1SjVKNTU1NTU1SjU1NTU7
+ Jh067vHo7u7u7u7u6O7u7u7u7u7o7uKTLRFb/faFYWeVJBERBwT/////////////////////////////
+ ////////////////////////////////////////////////////////////////T6mx09To7u7u6O7u
+ 7uju7u7o7uju7u7u7u7u7u7u7u7u7u7u7u6hSx02vP39/v3+/f78fCcZGTU7SjU1NTU1NTU1SjVKNTU1
+ NUo1NR4dQe7u7u7u7u7u6PHu7u7u7u7o7urUokMREbT+693rRhEdER0RB///////////////////////
+ //////////////////////////////////////8K/wYHBwsOJBARESQdEREMC/8G/wT///8Mwbnn7u7u
+ 7ujx6O7u7uju7u7u7u7o7uju7u7o7u7u6Oju6O7qJCQd5f39/f3+/f7+/HwXKjtKNTU1SjVKNUo1SjU1
+ NTU1NUo1Oz4bHV3u7uju7uju7u7u6O7u8eju7u7iv6JJHREkpKzThx0RHRAkECQE////////////////
+ //////////////////////////////////////////8HECQRERERHR0dESQdHR02ICAdHR02HQsHU3/D
+ 8u7u7u7u7u7u7u7u7u7u7u7u6O7u7u7o8e7u7u7u7u7uWSkRnP39/f39/v3+/vyFFxcZNTtKNTU1NTU1
+ NTU1SjVKNUo1NTU1Eh156O7u7u7o7u7o7uju7u7u6PHu1K+njhAkHRERERAdERERERERCf//////////
+ ////////////////////////////////////////////BQoPJBEdHRERHBwdOmufn5+fn7+fn86Lazwd
+ ER06QUGL7uju7u7u7u7u7u7u7vHo7u7u7uju7u7u7u7u7ufojh0dh/39/f39/f3+/f78sFclNUo1NTU1
+ SjVKNUo1SjU1NTU1NTU7NREkn+7u7uju7u7u7u7u7u7u6O7u1dSnp59dHREQJBERHRARER0REQT/////
+ /////////////////////////////////////////////wQFHREREREkER12hIvx7u7u7u7u7u7u6O7u
+ 7uju6O7Xn4R5WS1Li5/u6O7o7u7o7uju6O7u6O7o7u7u7uju6O7u20MQUPv9/f39/f39/v7+/t1hFzQ7
+ NUo1SjU1NTU1NTU1NUo1SjU7NSwRHZ/u7u7u7u7o7u7u7uju7u7o7urUp5+njlkREREkEREPCQcF/wP/
+ /////////////////////////////////////////////////wckER0QHSQkIEpKTUpK7u7o7u7u6O7u
+ 7u7u6O7u7u7o7uju7ujo3GUgOovu7uju7u7u7u7o7u7u7u7u7u7u7ujn6HYREc/9/f39/f39/f3+/f72
+ Zyc0OzU1NTU1NUo1SjVKNUo1NTU1OzsbETLU7u7u7uju7u7x6O7u7u7o7u7or6KfoqGek453ThEL////
+ //////////////////////////////////////////////////8HCxERESQRIB4sOztINTtIPTtIO3WC
+ zu7u7u7u7u7u7ujx7u7u7u7u7u7u6O7u7u7u7u7o7uju7u7u6O7u7u7u7u7u7ts8EXT9/f39/f39/f39
+ /v3+/qYnFyo7NUo1SjU1NTU1NTU1NUo1NTsZERFL7u7o6Oju7u7o7uju7u7u7uju4q+hoqGioaKhn2AR
+ Bf////////////////////////////////////////////////////8HDRERESQdHko7SDtIPUhISDs7
+ SDtINUpk7vHo7u7u7u7u6O7o7uju6O7o7u7u7u7u7uju7u7u6O7o7u7u7u7u7uju7u6TERHl/f39/f39
+ /f39/f3+/f7dbxklGTU1NTU1SjVKNUo1NUo1NTU7JxERdu7o7vHu7u7u7u7u7u7u7u7u7uivoaehoqGn
+ oXsQEf///////////////////////////////////////////////////wQLEREREREeMTVIPTtINTtK
+ OztISDtIO0g9SD2Czu7u7u7u7u7u7u7u7u7u7u7u6O7o7uju7u7o8eju7u7u7u7o7u7u6O7nPCRb/P39
+ /f39/f39/f39/v3+/I9HFyo7NTVKNTU1NTU1NUo1NTs7OyIRJNTo8eqN1/Hu6O7o7uju7u7u7u7neaKh
+ p6GioaJdEQn///////////////////////////////////////////////////8dECQRJB1ISEg9SDU7
+ SDtISD09SDs1SDs9SDtKPUju7u7u7u7u7u7o7uju6O7o7u7u7u7u7uju7u7u7uju7u7u7vHo6O7unxEQ
+ pP39/f39/f39/f39/f3+/f77hRcZNDs7NTVKNTVKNUo1NTs1NTsVEVHq7uJZOtzo7u7u7u7u7u7o6O7u
+ oXCnoaKhp6JwEREE////////////////////////////////////////////////BgoREB0RES8+OzU7
+ OztARDtINTs7SDtISDtIO0o9PTVKPXXo7ujo7u7u7u7u7u7u7u7u6PHo7u7o7u7u7u7u7u7u6O7u7u7u
+ 7mscQfz9/f39/f39/f39/f39/v3+/rBvRxkqOzs1OzVKNTU1NTU1OzsnHSSO1HkdHWvo7u7u6O7u6O7o
+ 8e7o7mpwoaehoqGbQxEJ////////////////////////////////////////////////Bx0QERERETFE
+ NTtAQEA9QEQ7RDtESEg1SDtISDtIPUhKSD1KZO7o7u7u7u7u7u7u6O7o7u7u7uju7u7u7u7u7u7u7u7u
+ 7u7u59VREXL+/f39/f39/f39/f39/f3+/f7+plcXFzQZOzU7NTU1NTs1Ozs1ExEdSxEREVnu6O7u7u7o
+ 7u7u7u7u7u5ZdqKin6eiahER////////////////////////////////////////////////Ch0RERER
+ ESYiGCQPERERJBERGyIoLDs7SDtINTtIOztKPTU7SD07mfHu7uju7u7u7u7u7u7u6O7o7u7u7u7o7u7u
+ 7u7o7u7o7u7UHRG0/f39/f39/f39/f39/f39/v3+/vywVz8XJSUqGTs1OzU1OzU1LBEREBEdPHfU6O7u
+ 7uju6O7u7u7u6O7uWXanoaeheSQRCv//////////////////////////////////////////////CxAR
+ EBERESQRECQpHCkdJB0dHRERERERGD41SDtISDs9SD1ISEg7SDur6O7u7uju7uju7u7u7u7u7u7u7u7u
+ 7u7o7u7u7u7x6O7ohBA2+/39/f39/f39/f39/f39/f3+/f7+/aZvJxcZGTQqJSU1Ozs0Hh0kHREdap3U
+ 8eju6O7u7u7u7u7u7u7u6FlqoZ+ikCkkEQX/////////////////////////////////////////////
+ BhERERERLUtrd3aNi46OjZCNjXtwdlERERERHzBANTtIO0pINTs7SDVISFrX7u7u7ujx7u7u7u7u7u7u
+ 7u7o7u7u7u7u7uju7u7u7kkRW/39/v3+/f39/f39/f39/f39/v3+/v399o9hJxcXFxcnJi5BHBEdEUN7
+ k5+v1Oju7u7u7uju7u7u7u7u7u5ZWaKnjVEREREG////////////////////////////////////////
+ ////BBEkERERap6bmJiTnZOYl52fk5uToZuTn3spKREQFDhIPTs9PUpISEg7SDs1SG3u7u7u7u7u7u7u
+ 7u7u7u7u7vHo7u7u6PHo7u7u6tUQJHT+/f39/f39/v79/v79/v79/v7+/v7+/v7+hScnKxoREREREREd
+ S36np6Gnv+jo7uju6O7u7u7u7uju7u7oWU6XexARERERBv//////////////////////////////////
+ /////////wsRERERWZuTmJuboZOhm5+fmKGYoZeYoZifk35wLRERHj5EO0g9Ozs7SDtISDtIcZTu7u7u
+ 6O7u6O7u7u7u7u7u7ujo7u7u7qF5Th0QERFQboeHlZy0reXt1u3t1u3t1u3t7e3ttKych4duJBAREREd
+ ETxwjpOin5+nn+jn7u7u7u7u7u7o7u7u7ujo7ncRHREREREdEQX/////////////////////////////
+ //////////////8dECQPQ5uenaGfm6GXmJ2fmJ6fnZ+dn5+Xm5ihn5dqJBERNzs9SjtISEg7SDtISDtI
+ SNfu7u7u7ujx6O7u6O7o6O7u7u7u6nYQJBAkEBERHRARESQRJB0REREREQ8RJBERERAkEBERERERJBAR
+ ESQpPHehoaKnp6Gip9To7u7o7uju7u7u7vHo7vHo7u7uMx0QJB0fERAK////////////////////////
+ //////////////////8RER0RUZOek5udl5edn5+fnp+TnpOXm56bn5+fl5ihm4RZESAjRD1IOzs7SDtI
+ NTtIOzs7ce7o7uju7u7u6O7u7u7o7u7un0sRERERERERERERJBEREREQERERHSQkJA8RERERERERERER
+ JBEREU55i6GhoqGnn6Gnoa/U6O7u6O7u7u7u7u7u7u7u7u7u7ttLER0SPh8REQb/////////////////
+ //////////////////////8LECQQHY2dl5OhmJuhn5+Ym56TmKGTmKGYk56emJ6fn5OfmGUpERQxOzs9
+ SEg7PUg7SEpIPUg7uu7u7u7u7u7u7uju7u7onw8RJB0REREREREkEBEREBEdERERHREQERERERERJBER
+ EREkJCk8a5OhoaeioqKhp5+iop/q6O7u7u7u7u7u7uju7u7u7uju7u7eSxAdJ0QjHREH////////////
+ //////////////////////////8GEREREX6Xm5+hl5+en5ien56Tn5uXn5+fn6GTk5uTmJ6hnp+efkMR
+ ESE+Ozs7PTtKPTs9Ozs7SD1adZnu7uju7u7u7u7up0MkJBEQHREREREkEREREREREBERJBAkERERER0k
+ JBERHSRRZXmQoqGip6KhoaGhoqGioaHF1O7o7u7u7u7u7u7u7uju6Oju7u7qZR0dI0REMBAdCv//////
+ //////////////////////////////8HESQdEWufmJ+enpefmJOYn5Obk6Gel6GenpiYl6Ghl6Gfk5eT
+ mJOhaikREB8+RD07PT1ESDtIPUg7O0g7O9fX6Oju6O7xvx0RHR0dICAdHRERERERESQRESQRJBERER0k
+ JDIyPDxddo2ep5+nop+hoqehoaGnoqKnoqGv6O7u7u7u7u7o8eju7u7o7u7u7u7qWRERGDtINSwdEQv/
+ ////////////////////////////////////CBEREEuQm5+Yn5OfmJuhm56hmKGXk5+bk5Obn5+dl5+d
+ nqGfoZuhl5OEZRERER4sPTs7NTs9Ozs7REA7SEQ7RGR1de7u6HkdHR0gIFl5eXl+fnl2eXl2dnl2eXZ2
+ fn5+e4uOk56ioqKhn5+nn6Gnp6Gfoqeioaehn6Gnxeju6O7u7u7u7u7u7u7o7u7o7u7ufh0kETg9O0As
+ EB0F/////////////////////////////////////xERESmNoZ+emJ+ToZifn5edk5efnZ+hnpehoZ+Y
+ npuhmJ+TnZ6dnZ2foZ6EQykRECQfMThNQDs9PUA7Ozs+NTs4MB8RJB1lOkt53O7u7u7u6OfeoqGhoqen
+ oaehoaehoqGnoqKhoaGhoaGnoqGioqGfoqKnn6Gin6enp9Xx7u7u7u7o7u7u7u7u7u7u7u7ujhERFDg9
+ OztAGyQR/////////////////////////////////////wsdERFrn52Ym5+YmJ+fmJ6hm6GfnpuenZOf
+ l52Xm5OYk5+eoZOTm5+bnp2Tnpt+cC0RESQREhohHh4hIR8YExwQHREdHTpLa5/o7u7o7u7o7u7o1K+n
+ oqGfoaKfoqehoqGin6Gnoqeip6eioaGioaeip6ehn6enp6Kfob/o7u7o7u7u7uju7u7o6PHu7urugx0R
+ ERU4QEQ9OBERCf///////////////////////////////////wQQERBDnqGYn5+fl5+fnpifk5uYnZ6T
+ mJOboZ6fk6GXoZ+hnpOdnqGbnpiTk6GTl6GejU5JMhQdERERERERJBERER0dHS06a+7u7u7u7uju7u7u
+ 7tTir52hoaeioaKnn6Knp6Gnop+nn6ehn6GioqGnn6Ghn6eioZ+fp6fq6O7u7vHo7u7u7ujo7u7u6O7u
+ hBERESQQERERDyQREQT///////////////////////////////////8HESQpjZOXn5ienqGXm5ObnqGX
+ m5uTn5+hnp2TmJ6fn5eenZOhk5OXnpOfoZ6doZ+dm5+hk41+d3t7fn5+fn57WR0dHRiA5+ju7uju7u7u
+ 7u7o7uju6OivpaehoaKhn6Khn5+noaenn6efoqKnoaGioaKioqKhoaKioo6f6O7u6O7u7u7o8e7u7u7u
+ 7u7uZSQkEEkgERERJBEREQn/////////////////////////////////////ERERZZuToZ+en5OTk6GY
+ oZ2TnZ+fnqGenpeTm6Gfm5iYn5OToZ2eoZ+ToZiXk5uXnpufmJehn6GYoZ+YmJOQax0dICKC7uju7u7u
+ 7u7u7u7u7u7u7uju3sWioaKnp6enoaKnop+in6GioaKnoZ+ip6GioaehoaGioaEkpe7u7u7u7u7u7u7u
+ 7u7u6O7qZRERIA8NCwcKB/8E/wD/////////////////////////////////////CyQkEZedoZeek56f
+ oZ6fn52foZ+YmJOXk5OfoZ6dnp+bn56hnp2bk5eeoZebn6Gen5OYnp+fnZ6Xn52en5+hUSQRHTc7zuju
+ 6O7u7u7u7u7o7u7u7u7o6Ojn1KWhoZ+hoaenoaGnoaKioaKhn6eip6Gnp6efp6enp6eELe7u7u7u7u7u
+ 7uju6Oju7u6nYBAdEQf/////////////////////////////////////////////////Bh0QHX6Yk5+X
+ n5Ofk5iXk5iYm56dnp+boZ+hn5iXk5uTmJ+ek52Tn56hn5Odn5+el5OYoZ+Tm56bk6Gem5OQKREdHztI
+ Wu7u7u7u7ujx6O7u7u7u7u7u7u7x6OjVkJOinqKioZ+ip6GioaGnoaeioaGfp5+foaKhoaGfWb/u7u7u
+ 8eju6Ojo7u7u7uqfEBEREf///////////////////////////////////////////////////woREU6e
+ n6GYn5ihnp+fn6Gbm5iTk5Oen5eenZifn6Gen5+Yk6GboZiTnZihm5iYk5+hk52YoZiTmJ+Tk56hUSQd
+ HztIO+7u6O7u1Ofu6O7u6O7u7u7o7u7u7u7u7udZa6GhoaKioaGip6eioaKhoaKnop+ioqKhp56ikF3u
+ 7u7o6Oju6O7u7u7u7t5rJBERCf////////////////////////////////////////////////////8d
+ EBF+mJOel5uYn5eTnpienZehm6GYoZOYn5Obn56Yl5OenpuhnZ6Xk6Gbn5+en5uhnpehm5udn6GfnpeX
+ MhEdHkg7PYLu6Oju1BGT6u7u7ujx6O7u7u7u7u7u7u7o6HBOjaGioaGioqGfoaGip6GioaGhoqGhoaKh
+ nx2O7u7u7u7u7u7u7u7u7p8RERERBP//////////////////////////////////////////////////
+ //8LHRFgn5+hk5+fn56foZObk5ufnZ2fn52hm56hnpuTn5+hk5OXnZuTn6GXnpiYk5ifl5Ofl56fm56X
+ mJOhSx0RHzs7SDvO7u7u8WAREFmh7u7u7u7o8eju7u7u7u7u7u7o3FldhKKnoaGnoqKnoZ+ioaeip6Gn
+ oqKhnVFZ7u7o8eju7u7u7u7uoWUcECQRCf//////////////////////////////////////////////
+ //////8GJBAkjZ2emJ2fmJ6ek5iXoZ2hm56fn5iem52Xk5eTnp+emJ+eoZ+fmKGel5+bm5uhn5efoZif
+ m5iYk5+bQxEdEkg7SEg76O7u534QESQREXC/7u7u7u7o7u7o7u7u7u7u7u7oeTxrk6GnoqGhp5+noqen
+ oaGhp6GnkyRL7ujo6O7u7u7u7u6/axERHRAREf//////////////////////////////////////////
+ ////////////BREdVpubk5ubnp+Tk5+fn52bl56TmJ6fk5ifn6GfoZOek5+Yk52enp+dk5+Yn6GdnZ6h
+ npOfmJ+fn6GYYB0dHT41SDs7Pe7u7r9DHR0YHREREV3U7uru7u7o8ejo7u7o8e7u7u7nix1OeaGiop+i
+ n6GfoZ2nnp6ii0kRv+ju7u7u6urq7qFlMx0dHRIsEREJ////////////////////////////////////
+ /////////////////wodEYSdn56hn5iTmKGhnpiem56fk6Gbk5Ohn56enZ6XoZOhnpuhm5OTm5OhmJ+e
+ nZ+bk5OToZifnpuYdxERHDE7SEg9Peju7uIdOh8+SCcYHB0kEHCv6uru7u7u7u7o7u7u7uju7ujncEsd
+ cISTnqKip6eiop2OZRFL1Ojo7u7u7u7UoREREREdFiE7PhUREQP/////////////////////////////
+ /////////////////////wcRD1aem5iTnZefoZOXnZObk5ibmKGdl6GenZuTk5uTn52Ym5OXnZihoZie
+ n5+Yk5OemKGYoZefmJOejiQdER5IPUo7NUro7u5ZHSw7OztIOzQdHRERHWCO6uru7u7u7u7u6Oju7uju
+ 6OjUn1kdJEtZVlFRWVZLER2E2+fu7u7u7o5lSR0dHR0RLDs7SEgaJCT/////////////////////////
+ /////////////////////////wQRESSOn5Oem6GboZiXoZ+boZ2hn5+fl5uhl5OfnqGhmKGem5+XoZ+b
+ n52Xn5uYnpuhmJOfnZ+dn5iboVkRHSBIO0o7PT1A6OpwHRVIO0hISDtIOywfICQRERF2pafV7u7u6O7u
+ 7u7u7u7u7u7u1X5lVkNDQ0M8WWW/7u7q4qehWREREREdHRgePUhIOz09Ih0RBP//////////////////
+ //////////////////////////////8HEREdfpihm52Xnp+bn52em52bl56enp+en5+hmJOXl5+dk56X
+ n52Ynpebn56fm5OXn5+hnpuXm56bnXcRHR0xO0g9PTs7ceqEJB07O0g7OztIO0g7Oz4mJB0dJBEdS1lZ
+ m+Lo7u7u7u7u7u7u7u7u7uq/v9XU3urq1ItgYEsdESQdHR0dHjRIOztKNUg7SjEQHQf/////////////
+ ////////////////////////////////////ChEdER1wk5+Yn5+TmJ+Ym5Oem56fk5OTmJOemJeToZ+f
+ mJuhk6Gen5+ToZiYk56XoZ+emJeTmKGYk5tDER0fOz1IOztIPZShER0sSDtIO0hISDtIO0hIOz0sHxYd
+ JB0dEREREVFwoqGhp6Gnp6enr6GTiI6OWUsRESQQJBERERAdFR8vO0g7SDs9SD1IOz1EEREH////////
+ ////////////////////////////////////////BBERECQQHUtwm56eoZuYn5ihk5ibmJ+hn5+hk5+f
+ oZeYmJuenaGTk56boZ+fn5+Tn52Yk5+foZufn55+JBEdNzs7SEg9NTufJB0dOztIO0g7OztIO0g7O0g7
+ SDU7PjQVJCQkESQdJBERERERERERERERERERHR0dHSQRHREdERERHTg7O0g7SDtIO0pIO0g7OxMRD///
+ //////////////////////////////////////////////8EByQRER0QEWuNk5Odl5+Yn5ehn5+fmJee
+ mJefmJiXn5+fn5ObnaGYk56dnpuYmKGYn5+fm56dn5ieQxEdFUg1PT01OzulERETSDtISDtIO0hISDtI
+ O0hIOz1ISDs7Oz07IyEfGhYgERERHR0dHR0dEREdHREUFBgfISEwOBgkEREiRD1IO0g7SDs9PTVINT0i
+ ERH///////////////////////////////////////////////////8ECRERESQQHXChm6Gbn5efl56e
+ m5+fk5ufnpufn5iem56hnpudn6GTk5OYn5+Xn5ienp6Tm56bhBEdETQ7SEg7QD1iESQdMTtIOztIO0g7
+ OztIO0g7O0g7SjtISEg1Skg1PUg7OzRKPjQ+PjQ0PjRKNDRKPjs7SjVKNTtILCQRFBg7SD07SDtIO0hI
+ PUhINyQkBv////////////////////////////////////////////////////8EChEREREkS3uYn56X
+ oZifk5Oenpihn5iTn56en5OYk5eTnpuXl6GYoZ+bnp+en5OTk6GYkEkkHR5ISEg1NUAxJBEkIkg7SDtI
+ SDtIO0hISDtIO0hIOz09SDs7SDs9SEg7O0o7SEg7SDs7SEg7SEg7SDs7SkhISD1IPTsnESQPJj1KO0g7
+ SDtINUo1OzQREQT///////////////////////////////////////////////////////8FERERERAR
+ S4iTm5+fmJ+hk5OfnZ6foZiTk5ihn6GfoZOYoZ+Xn52YnpOYk56foaGdm4MkERFANTs7REAjJBEdJj07
+ SDtIOztIO0g7OztIO0g7O0g7SDtIPUpIO0o1SD09SDs7SDVISDs7SDs7SDtISD07Ozs7SDtISD4YESQY
+ PUg7SDtIO0g9SEg3EREH//////////////////////////////////////////////////////////8F
+ ChERERERZYiemJ6fnpehn56bk56Xm6Ghm5OYnZ6XoZ+Tnp+en5uToZ+fk5iXnY1DJCAxSDs7QDUfEREd
+ HkhIO0g7SDtISDtIO0hISDtIO0hINT1KSDs7PTs9PT0+SDs7O0hISDtKSEg7SEg7SDtIOztISEg1SDs1
+ OxokESI7O0g7SDU9SDs1OxMRB///////////////////////////////////////////////////////
+ //////8FERERHSQzVpOTmJOfnZiTnp+Tn52dl52hm5uTn52eoZOYk56foZ2emJ+foZBRHREfRDVAQCUU
+ ESQRJj07O0g7SDtIOztIO0g7OztIO0g7O0hIPTtISDtISEpEKDQ9SEhINTtIPTs7SDs7SDtINUg9O0g7
+ SEg9SEhIGh0UL0Q9PTtISEpISD4TJA//////////////////////////////////////////////////
+ //////////////8FCiQQERERYHuboZibn6GbmKGYm5uhm52dnqGem5OXoZ+fk5idm5OfmJhqER0bNUg7
+ QCMgJBEdJkpIO0hIO0g7SDtISDtIO0hISDtIO0hIO0o7SDs7SDs1PSweSDs7O0pISDs7SEg7SEg7PUhI
+ OztINUg1Sjs7OzsVESA+NUo7SDs1PTs7GBER////////////////////////////////////////////
+ //////////////////////8EChERJBEkQ3efnp6dn5+dn56Yn56fn5Odk5ihn52YmKGbm5ihnp9ZESQS
+ PkA1JRMdJB0dLEg9O0g7O0g7SDtIOztIO0g7OztIO0g7O0g9SDtISDtISEg4HR9IPUg9OztISDs7SDs7
+ SDtKNUg9O0g7SD1IPUhKOxMQGEg9SDtISDtIOxgREf//////////////////////////////////////
+ //////////////////////////////8G/woRERERHWp+k5Oenpuem5uen56YoZuhn52em5ufl5+en41Z
+ EBEVNEQ0HiQRHR0VNEhIOztIO0hIO0g7SDtISDtIO0hISDtIOz1IOzs7SDs7SDs1MSAQLz1KOztISDs7
+ SEg7SEg7SD1IO0hIO0g7SDs7Oz0wJBEoSDs7SDs1PTsYERz/////////////////////////////////
+ ////////////////////////////////////////BAkRESQQJENgk5OYk5ibk5OTm5eel56Tk56fmKGe
+ n3cdERETOD4SFCQRJB0hOzs7O0hIO0g7O0g7SDtIOztIO0g7OztIO0hIO0hISDtIPT1ISEQVEREePUhI
+ OztISDs7SDs7SDs7SD1KNUg7SDVISEhKNS8dIDRIPTtIREA9FhEM////////////////////////////
+ /////////////////////////////////////////////////wUKERERERFDanaOm5uemKGXn5Ohk5ih
+ k5ibeTwQJBARIxokEBERHR8sSDs7SEhIOztIO0hIO0g7SDtISDtIO0hISDtIOzVIOzs7SDtKNUg7GBER
+ ESM7O0pISDs7SEg7SEg7PUhKOz1INUg7SDs7Oz1EExAiPTs7SDs7OBwRB///////////////////////
+ /////////////////////////////////////////////////////////wQLERERESQRJDJDZY6XoZih
+ naGfl6F2Qw8kERERESQRHR0dHTQ7OztISDs7O0hIO0g7O0g7SDtIOztIO0g7OztIO0hIO0hISDtIPUhK
+ PSgkJCQQIUQ9OztISDs7SDs7SEo7PTtIO0hISDVISEg7SiIRFD5ERDVIQDQREQT/////////////////
+ /////////////////////////////////////////////////////////////////wX/BQkOERERERER
+ EREyS0lLXWAkEREREREREREkHRQmLEg7SDtISDs7SEhIOztIO0hIO0g7SDtISDtIO0hISD1IOzVIOzs7
+ SDs7Oz0xHTEeEREjOztISDtISEg7SEg7PUhISDVIOzVISDs7Oz07HRERIjs7SDshJBH/////////////
+ /////////////////////////////////////////////////////////////////////////////wYF
+ ChERERERERwQJBAdER0RHRERHR0dFTQ7SDs7SDtIOztISDs7O0hIO0g7O0g7SDtIOztIO0g7OztKO0hI
+ O0hISDVISDtIRBEiNRUdJCI9OztINTs7SDs7SDs7SjtIO0hISjtIPUhISBgREREUITEhEREJ////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////wT/BQcHDA8cEREcECQPJB0vOztKSEg7SEg7SDtISDs7SEhIOztIO0hIO0g7SDtISDtIOz1I
+ SD1IOztIOztISDs7SDUREUpIHhEdIjtISEg7SEg7PUg7SEg9SDtIOzs9SDs7OzUxESQdEREdEBERBP//
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////AQQHDBERJB0jSDtIPTs7SDs7SDtIOztISDs7O0hIO0g7O0g7SDtIOztI
+ O0g7SDs7O0hIO0g9NTtIPTtIEh09OzsVHREfOzs1SDs7SDs7SD07OztIO0hIOztISEhIOxEREBwRERwR
+ Cf//////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////ER0VO0g7SEg7SEg7SEg7SDtISDs7SEhIOztIO0hIO0g7
+ SDtISDtINT1KSEhIOzs9SEpIPUg7QCEdMUhIPSIUESE4PUg7SEg7PUg7SkhISDtIOzVISDs7OzsWHREd
+ DAf/Af//////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////8EJBEdNEg7SDtKPTs7SDs7SDtIOztISDs7O0hIO0g7
+ O0g7SDtIOztIO0hIPTs7O0hIO0o9NTtKPUgwHSw1OztIMCQQETg7RDs7SDtISD07OztIO0hIPTtIPUg7
+ GhAdD///////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////BxEdIkg7O0g7SD1IO0g7SEg7SDtISDs7SEhI
+ OztIO0hIO0g7SDtISDtIO0o7SEhIOztIPUhESD01NBEeSkhISDsxExERKEA7PUg1PUo7O0hISDs9PUo1
+ SDtEOyEREQz/////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////BBEkFTs7SEg7SDs7Skg7SDs7SDtIOztI
+ SDs7O0hIO0g7O0g7SDtIOztIO0g9SDs7O0hIOztKNUg7SDEdHz07OztIO0odERERQDs7SD09SEg7OztI
+ O0o9PUpINUgeEREK////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////wkRHS87SEg7O0g7SEg9O0g7PUg7
+ SDtISDs7SEhIOztIO0hIO0g7SDtISDtIO0g7O0hIOztISD1INT0xERhIO0hISDtIOyIkJBMsPUg1Sjs7
+ O0hISDtIPUg7PT1ELBEkCv//////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////8RJB01SDs7SEg7SDs7O0g9
+ SEg7SDtIOztISDs7O0hIO0g7O0g7SDtIOztIO0g1SEg7O0hIOzs7SEg7OBQSOz07OztIO0g7MB0RJBtE
+ SD1ISEg1OztIOztKPTtKNTAdEQn/////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////8HER0sSEg7SEg7O0g7
+ SEhIO0o7NUg7SDtISDs7SEhIOztIO0hIO0g7SDtISDtIO0g7Oz1IOztIREg1OzcgID5IO0hISDtIOz00
+ HiQRESM7Ozs7O0hISDtISD1IOz03ERAE////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////8GESQTPjs7SDs7
+ SEg7SDs7O0g9SEg7SDtIOztISDs7O0hIO0g7O0g7SDtIOztIO0g7SEhIO0g7SDVISEQ4FhE4NUg7OztI
+ O0g7SDsvHSQPHTBEQEQ7OztIPTs7Sj1IOCQRB///////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////xERGEg7
+ SEg7SEg7O0g7SEhIOzs7Skg7SDtISDs7SEhIOztIO0hIO0g7SDtISDtIO0g7OzVIO0hKPTU7NRURPkhI
+ O0hISDtIO0g7SDQiHSQRISxENUQ9SDVKPUg9OzEREQT/////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////////wYR
+ HTg7SDs7SDs7SEg7SDs7O0hISD07SDtIOztISDs7O0g9O0g7O0g7SDtIOztIO0g7SEhIO0g9PTtIQE0V
+ ETg1O0g1OztIO0g7SDVIOycTHRARETBAOztIPTs7O0AoERH/////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //8LJCBIO0g7SEg7SEg7O0g7SEhIO0g7O0g7SDtISDs7SEhIO0hIOz1IO0g7SDtISDtIO0g7O0o9O0o7
+ PT01FRE+SkhIO0hISDtIOz1ISDVIPSwdESQRFSYxRDtEOz1AHhEkBf//////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////8EER0vO0g7SDs7SDs7SEg7SDs7O0g1SEg7SDtIOztIPTs7O0g1O0hIO0g7SDtIOztIO0g7SEg9
+ O0g9SDtKTRUkND07O0hIOztIO0g7SjtISDs7SCARESQREB0vND0+IR0REf//////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////BxEcMTVIO0g7SEg7SEg7O0g7SEhIO0g7O0g7SDs9SEg7SEhIO0hIOzVIO0g7SDtISDtI
+ O0g7O0hIOzs1RDsSJDhIOz1IOzVISDtIO0g9SDs1REQQEREJEREdEBERJBEdEAn/////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////AiQREkBIO0g7SDs7SDs7SEg7SDs7O0g7SEg7SDtIO0g1SDs7O0g7O0hIO0g7SDtI
+ OztIO0g7SD1KO0hISDs3FBE4O0hIO0hIPTtIO0g7OztISDs4EREK/wYFChERERERCQT/////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////8RERJIO0pIO0g7SEg7SEg7O0g7SEhIO0g7O0g7PTtISkg7PUhIO0hIO0pI
+ O0g7SDtISDtIO0g7Oz1IOzs7JRQkPjVIOzVIO0o1SDtIO0RISDs1FSQRBf////8G/woFBv//////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////8HER0sNUg9O0g7SDs7SDs7SEg7SDs7O0g1SEg7SEhIOz07SDtKPT07
+ O0g9O0g7SDtIOztIO0g7SEhKO0g9QDERHTRIO0hIO0g9SDtIO0g1SDtISB0REQb/////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////CxEkO0hIOztIO0g7SEg7SEg7O0g7SEhIO0g7NUg7NUpIO0g7
+ RD1KNUhIOztIO0g7PUg7SDtINUg7Oz1IPTs0ERE0SDtIOztIO0g1SDtINUg1PTAQEQn/////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////yQRIEg7O0hIO0g7SDs7SDs7SEg7SDs7O0g7SEg7SEg9
+ O0g7SDVIPUQ7Ikg9O0g7SDtKPTtIO0g7SEg7O0o9LyQkODtIO0hIO0hKSDtIO0hISDsiEREE////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////wYRHRg7PUhIOztIO0g7SEg7SEg7O0g7SEhIO0g7
+ SEg7SDtINUg9SDU7SBM7SDtIO0g7SD09SDtIO0g7Oz1EPR8RETQ7SDtIOztIOz07SDtIOzU9ExEN////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////8HJBEvSDVKO0hIO0g7SDs7SDs7SEg7SDs7
+ O0g7SDU7SDVIO0g7SjVIQDQdMTVIO0g7SEo7SjtINUg7SEhINUgREREoPTtIO0hIO0g7SEo9NUhILCQR
+ B///////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////CxEdMDtIOz1IOztIO0g7SEg7SEg7
+ O0g7SEhIO0g7SEg7SD1IOz09REQSHR5KSDtIO0g7PUg9SDtIOz07OzU+EREdEUo7SDtIOztIO0g7PURI
+ OxQQEf//////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////ABEkESdINUhIO0hIO0g7SDs7
+ SDs7SEg7SDs7O0g7SDU7SDVKNUg7SDssJBEUPTtIO0g7SDs7SDtIO0hISERALxAkEB0fPTVIO0g9O0g7
+ SDs1OzEREREB////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////8RHR0wPUhIOzVIOztI
+ O0g7SEg7SEg7O0g7SEhIO0g7SEg7SD1INT01IhERFDs7SDtIO0g7SEg1SDs9OzU7RBgQERERFDtISDs9
+ SDtIOz07REAhESQJ////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////8EEREUNDtKNUhI
+ O0hIO0g7SDs7SDU7SEg7SDs7O0g7SEg7SDVIO0hATRAdHRQ4PTtIO0g7SDU7SDtISEhISDQREREgHBEf
+ NTtIO0pINUg7SDs+JBARBP//////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////xAkFDFI
+ SD1IOztIOztIO0g7SEg7SEg7O0g7SEhIO0g7NUhISDVEOx4RERARLEo7SDtIO0g7SEg7SDs1SDUxESQR
+ CRERECNISDtIPTtINUREFRERCv//////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////////wcR
+ HSA7Ozs7O0hIO0hIO0g7SDs7SDs7SEg7SDs7O0g7SDtINTtINT0REQYRHSI9RDtIO0g7SEg7SDtISDVA
+ EBERCf8EJBEWPjs9NTtINUg9MR0REQb/////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //8FER0VO0o9SEhIOztIOztIO0g7SEg7SEg7O0g7PUhIOz09SDVIRDsoJAv/ChEUPUg1SDtIO0g7NUg1
+ PTs7MBERHAT///8RERg7SERIPTtAOxYREQX/////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////BxEREzs9OztIO0hIO0hIO0g7SDs7SDs7SEg7SEg7O0g7SjtINT1EExEF/wcRHT41SEg9O0g7
+ SEg7SEhEOxgkEQz/////Bx0RHzs1OztAOyEREQr/////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////wsRJBM7SDtISDVIOztIOztINUg7SEg7SEg7O0g7NUhIO0g9SDVAIhERBv8GESQVPUg7
+ SjtIO0g7O0g7NTgUERH///////8dEBEYOEREPSMcERH/////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////8LJBEWPkhIOztIO0hIO0hIO0hISDs7SDs7SD07PUhKPT07OztEOBERBf///wUR
+ FEo7SD1IO0g7SEg7PUAiJBERBP///////xEkEREiKBQkEREJ////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////EREdFDQ1SjtISDtIOztIOztIOzVIO0g7PUg7SEg7NT1KO0hERCIkC///
+ ////JBEsNUg7OztIO0g7Oz1EEREREf////////8ECREREREREREJ////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////wsRERQxSD1IOztIO0hIO0hIO0hISkg9PUg7SDU7SEhIPUg1Oz4R
+ EQX//////w0RGEg9SEg7SD07SD1IIiQREQX///////////8GBQoREQkE////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////8LESQdMT1IOzs7SDtIOztIOztIOzs9O0o7Sj1ISEg7OzVI
+ O0QVEREG//////8HECQwNUo7O0hKOz07PhMQEQv/////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////CR0RHSdINUhIPTtIO0hIO0hIO0hIO0g9SD07SjU7
+ PUhINT0sEREF////////BhERFEQ9SEg7PT07RCwREREF////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////woREB0xPUo9O0g7SDtIOztIOztIOztIO0g7
+ O0g9SEhIOzVAIBAJ/////////wEdEREnOzs7Sj1IOzsRECQR////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////8HHR0dLEg9O0hKPTVIO0hIO0hIO0hI
+ O0g1SEg1O0o9NUhAHyQcBf//////////BR0RFkREPT07NUgYJBERCf//////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////x0QESI9SjtIOz1ISDtIOztI
+ OztIOztIO0g7SkhIPTVALBEREQH///////////8LEBEaOzs7SEQ4EREREQT/////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////wQRER0fSD1IO0g7SjtI
+ O0hIO0hIO0hIO0g7SD07OztIPhUREQT/////////////BhEkFDFAPTUxJBAdEQn/////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////JBARHDVKOztI
+ O0g9SDVIOztIOztIOzVIPUg7O0RERBYRHAf///////////////8FERERGDEiFBERERH/////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////ABERERE9
+ PUg9O0hKOztIO0g9O0hIO0hISDVKPUg1PSEREQz//////////////////wsRESQRJBAdEREF////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////////8N
+ EREkN0g7SjtIOz09SEg9SDtIOztIOzs1SD07RCgRERH/////////////////////ChEREREREREK////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////ByQRESY1SD1IO0g7Skg1O0o9NUg9O0hIRDVIPSccJBEJ//////////////////////8FEREREREF
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////wQdERAuPUg7OztIOz09SkhIPUhIO0g9Ozs7SDUcERERBf////////////////////////8F
+ CgX/////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////EBERFD47SERIO0g7SD07OztKNUg1O0hAQDEcERERBP//////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////wsRER0xOz1INUo9Oz1KO0hISD1INURAOzQgERERBf//////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////8FESQPHz1ISkg9O0hIPUg7Ozs7O0g7PTccERERCf//////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////xEdESRKOzU9SDtINUo7O0hEREBEOygdERERDv//////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////8HEBERFURIO0o9O0g9SD07NTtAOyIcERERDv//////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////BCQRHRExOzVEPTtIOzs7O0BAJSAQJBERCf//
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////8JERARETBEOztAOz1EQEQ1IiQRERER
+ Bf//////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////w8RERERJzVAPUA9OzssDyQR
+ EREdBP//////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////8KJBEkESQbIygjIyER
+ JBEREREKBf//////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////wkRERERDyQR
+ JBEkHREREREF////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////BAsR
+ JBERERERERAdEQr/////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////BRERERERERERHQX/////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////8FBAUJDgkFBAX/////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////AAAAAAAAAAAAAAAAAAAAAAAAP///////AAAAAAAAAAA
+ AAAAAAAAAAAAAP///////gAAAAAAAAAAAAAAAAAAAAAAAP///////gAAAAAAAAAAAAAAAAAAAAAAAP//
+ /////gAAAAAAAAAAAAAAAAAAAAAAAP///////wAAAAAAAAAAAAAAAAAAAAAAAP///////wAAAAAAAAAA
+ AAAAAAAAAAAAAP///////wAAAAAAAAAAAAAAAAAAAAAAAP///////4AAAAAAAAAAAAAAAAAAAAAAAP//
+ /////8AAAAAAAAAAAAAAAAAAAAAAAP///////8AAAAAAAAAAAAAAAAAAAAAAAP///////8AAAAAAAAAA
+ AAAAAAAAAAABAP///////+AAAAAAAAAAAAAAAAAAAAAPAP///////+AAAAAAAAAAAAAAAAAAAAA/AP//
+ /////+AAAAAAAAAAAAAAAAAAAAD/AP///////8AAAAAAAAAAAAAAAAAAAB//AP///////8AAAAAAAAAA
+ AAAAAAAAA///AP///////4AAAAAAAAAAAAAAAAAAH///AP///////wAAAAAAAAAAAAAAAAAAD///AP//
+ /////gAAAAAAAAAAAAAAAAAAA///AP///////gAAAAAAAAAAAAAAAAAAAP//AP///////AAAAAAAAAAA
+ AAAAAAAAAH//AP///////AAAAAAAAAAAAAAAAAAAAD//AP//////+AAAAAAAAAAAAAAAAAAAAB//AP//
+ ////+AAAAAAAAAAAAAAAAAAAAA//AP//////8AAAAAAAAAAAAAAAAAAAAAf/AP//////8AAAAAAAAAAA
+ AAAAAAAAAAP/AP//////8AAAAAAAAAAAAAAAAAAAAAH/AP//////8AAAAAAAAAAAAAAAAAAAAAD/AP//
+ ////8AAAAAAAAAAAAAAAAAAAAAB/AP//////8AAAAAAAAAAAAAAAAAAAAAA/AP//////8AAAAAAAAAAA
+ AAAAAAAAAAA/AP//////8AAAAAAAAAAAAAAAAAAAAAA/AP//////8AAAAAAAAAAAAAAAAAAAAAAfAP//
+ ////8AAAAAAAAAAAAAAAAAAAAAAPAP//////8AAAAAAAAAAAAAAAAAAAAAAHAP//////8AAAAAAAAAAA
+ AAAAAAAAAAADAP//////8AAAAAAAAAAAAAAAAAAAAAADAP//////8AAAAAAAAAAAAAAAAAAAAAADAP//
+ ////8AAAAAAAAAAAAAAAAAAAAAABAP//////8AAAAAAAAAAAAAAAAAAAAAABAP//////8AAAAAAAAAAA
+ AAAAAAAAAAABAP//////+AAAAAAAAAAAAAAAAAAAAAAAAP///////AAAAAAAAAAAAAAAAAAAAAAAAP//
+ /////AAAAAAAAAAAAAAAAAAAAAAAAP///////gAAAAAAAAAAAAAAAAAAAAAAAP///////+AAAAAAAAAA
+ AAAAAAAAAAAAAP////////AAAAAAAAAAAAAAAAAAAAAAAP////////AAAAAAAAAAAAAAAAAAAAAAAP//
+ //////AAAAAAAAAAAAAAAAAAAAAAAP////////AAAAAAAAAAAAAAAAAAAAAAAP////////AAAAAAAAAA
+ AAAAAAAAAAABAP////////gAAAAAAAAAAAAAAAAAAAAPAP////////gAAAAAAAAAAAAAAAAAAAAfAP//
+ //////gAAAAAAAAAAAAAAAAAAAP/AP////////gAAAAAAAAAAAAAAAAAAA//AP////////gAAAAAAAAA
+ AAAAAAAAAB//AP////////wAAAAAAAAAAAAAAAAAAB//AP////////wAAAAAAAAAAAAAAAAAAB//AP//
+ //////wAAAAAAAAAAAAAAAAAAB//AP////////4AAAAAAAAAAAAAAAAAAD//AP////////4AAAAAAAAA
+ AAAAAAAAAB//AP////////4AAAAAAAAAAAAAAAAAAD//AP////////4AAAAAAAAAAAAAAAAAAB//AP//
+ //////8AAAAAAAAAAAAAAAAAAD//AP////////8AAAAAAAAAAAAAAAAAAD//AP////////8AAAAAAAAA
+ AAAAAAAAAD//AP////////+AAAAAAAAAAAAAAAAAAD//AP////////+AAAAAAAAAAAAAAAAAAD//AP//
+ ///////AAAAAAAAAAAAAAAAAAD//AP/////////AAAAAAAAAAAAAAAAAAA//AP/////////AAAAAAAAA
+ AAAAAAAAAAf/AP/////oAArgAAAAAAAAAAAAAAAAAAP/AP/////AAAAAAAAAAAAAAAAAAAAAAAP/AP//
+ //4AAAAAAAAAAAAAAAAAAAAAAAP/AP////AAAAAAAAAAAAAAAAAAAAAAABf/AP///+AAAAAAAAAAAAAA
+ AAAAAAAAAf//AP///wAAAAAAAAAAAAAAAAAAAAAAAf//AP///gAAAAAAAAAAAAAAAAAAAAAAA///AP//
+ +AAAAAAAAAAAAAAAAAAAAAAAA///AP//+AAAAAAAAAAAAAAAAAAAAAAAA///AP//wAAAAAAAAAAAAAAA
+ AAAAAAAAB///AP//gAAAAAAAAAAAAAAAAAAAAAAAD///AP//AAAAAAAAAAAAAAAAAAAAAAAAD///AP/+
+ AAAAAAAAAAAAAAAAAAAAAAAAD///AP/8AAAAAAAAAAAAAAAAAAAAAAAAD///AP/4AAAAAAAAAAAAAAAA
+ AAAAAAAAD///AP/4AAAAAAAAAAAAAAAAAAAAAAAAD///AP/4AAAAAAAAAAAAAAAAAAAAAAAAD///AP/w
+ AAAAAAAAAAAAAAAAAAAAAAAAB///AP/gAAAAAAAAAAAAAAAAAAAAAAAAB///AP/AAAAAAAAAAAAAAAAA
+ AAAAAAAAB///AP+AAAAAAAAAAAAAAAAAAAAAAAAAB///AP+AAAAAAAAAAAAAAAAAAAAAAAAAB///AP+A
+ AAAAAAAAAAAAAAAAAAAAAAAAD///AP8AAAAAAAAAAAAAAAAAAAAAAAAAD///AP4AAAAAAAAAAAAAAAAA
+ AAAAAAAAD///AP4AAAAAAAAAAAAAAAAAAAAAAAAAH///AP4AAAAAAAAAAAAAAAAAAAAAAAACv///APwA
+ AAAAAAAAAAAAAAAAAAAAAAD/////APgAAAAAAAAAAAAAAAAAAAAAAAP/////APgAAAAAAAAAAAAAAAAA
+ AAAAAAf/////APgAAAAAAAAAAAAAAAAAAAAAAA//////APAAAAAAAAAAAAAAAAAAAAAAAB//////AOAA
+ AAAAAAAAAAAAAAAAAAAAAD//////AOAAAAAAAAAAAAAAAAAAAAAAAB//////AOAAAAAAAAAAAAAAAAAA
+ AAAAAA//////AMAAAAAAAAAAAAAAAAAAAAAAAB//////AIAAAAAAAAAAAAAAAAAAAAAAAA//////AIAA
+ AAAAAAAAAAAAAAAAAAAAAA//////AIAAAAAAAAAAAAAAAAAAAAAAAA//////AAAAAAAAAAAAAAAAAAAA
+ AAAAAA//////AIAAAAAAAAAAAAAAAAAAAAAAAA//////AOAAAAAAAAAAAAAAAAAAAAAAAAf/////APgA
+ AAAAAAAAAAAAAAAAAAAAAAf/////AP4AAAAAAAAAAAAAAAAAAAAAAAf/////AP+AAAAAAAAAAAAAAAAA
+ AAAAAAf/////AP/gAAAAAAAAAAAAAAAAAAAAAAf/////AP/4AAAAAAAAAAAAAAAAAAAAAAf/////AP/+
+ AAAAAAAAAAAAAAAAAAAAAAf/////AP//oAAAAAAAAAAAAAAAAAAAAAf/////AP//8AAAAAAAAAAAAAAA
+ AAAAAAf/////AP///gAAAAAAAAAAAAAAAAAAAAf/////AP///4AAAAAAAAAAAAAAAAAAAAf/////AP//
+ /+gAAAAAAAAAAAAAAAAAAA//////AP////8AAAAAAAAAAAAAAAAAAA//////AP/////6AAAAAAAAAAAA
+ AAAAAA//////AP//////8AAAAAAAAAAAAAAAAB//////AP///////4AAAAAAAAAAAAAAAL//////AP//
+ /////gAAAAAAAAAAAAAAA///////AP///////gAAAAAAAAAAAAAAA///////AP///////AAAAAAAAAAA
+ AAAAA///////AP///////AAAAAAAAAAAAAAAA///////AP///////AAAAAAAAAAAAAAAA///////AP//
+ ////+AAAAAAAAAAAAAAAA///////AP//////8AAAAAAAAAAAAAAAA///////AP//////+AAAAAAAAAAA
+ AAAAA///////AP//////8AAAAAAAAAAAAAAAB///////AP//////8AAAAAAAAAAAAAAAA///////AP//
+ ////4AAAAAAAAAAAAAAAB///////AP//////4AAAAAAAAAAAAAAAB///////AP//////wAAAAAAAAAAA
+ AABAD///////AP//////4AAAAAAAAAAAAAB6P///////AP//////wAAAAAAAAAAAAAB/////////AP//
+ ////wAAAAAAAAAAAAAD/////////AP//////wAAAAAAAAAAAAAD/////////AP//////gAAAAAAAAAAA
+ AAH/////////AP//////gAAAAAAAAAAAAAH/////////AP//////gAAAAAAAAAAAAAP/////////AP//
+ ////AAAAAAAAAAAAAAH/////////AP//////gAAAAAAAAAAAAAP/////////AP//////AAAAAAAAAAAA
+ AAP/////////AP//////gAAAAAAAAAAAAAf/////////AP//////AAAAAAAAAAAgAAf/////////AP//
+ ////AAAAAAAgAAA4AA//////////AP//////AAAAAAAgAAB4AB//////////AP//////AAAAAAAgAAD8
+ AD//////////AP//////AAAAAABwAAB+AD//////////AP//////AAAAAAD4AAD+AH//////////AP//
+ ////AAAAAAD4AAD/gP//////////AP//////AAAAAAD4AAH/////////////AP//////AAAAAAH4AAH/
+ ////////////AP//////AAAAAAP4AAP/////////////AP//////AAAAAAP8AAP/////////////AP//
+ ////gAAAAAP+AAP/////////////AP//////AAAAAAf+AAf/////////////AP//////gAAAAA//AA//
+ ////////////AP//////AAAAAB//gA//////////////AP//////gAAAAD//wB//////////////AP//
+ ////gAAAAD//4D//////////////AP//////gAAAAD//+P//////////////AP//////wAAAAH//////
+ ////////////AP//////wAAAAP//////////////////AP//////wAAAAf//////////////////AP//
+ ////4AAAA///////////////////AP//////4AAAB///////////////////AP//////4AAAD///////
+ ////////////AP//////8AAAH///////////////////AP//////+AAAP///////////////////AP//
+ ////+AAAf///////////////////AP///////AAB////////////////////AP///////gAH////////
+ ////////////AP///////4AP////////////////////AP///////8Af////////////////////AA==
+
+
+
\ No newline at end of file
diff --git a/forms/MainForm.Designer.cs b/forms/MainForm.Designer.cs
index 0dee0c1..1ef7331 100644
--- a/forms/MainForm.Designer.cs
+++ b/forms/MainForm.Designer.cs
@@ -18,6 +18,7 @@ protected override void Dispose(bool disposing)
components.Dispose();
}
base.Dispose(disposing);
+ Utils.FreeConsole();
}
#region Windows Form Designer generated code
@@ -33,6 +34,7 @@ private void InitializeComponent()
MenuBar = new MenuStrip();
MenuFile = new ToolStripMenuItem();
MenuFileRefreshMods = new ToolStripMenuItem();
+ MenuFileApplyMods = new ToolStripMenuItem();
MenuFileSeperator = new ToolStripSeparator();
MenuFileExit = new ToolStripMenuItem();
MenuTools = new ToolStripMenuItem();
@@ -40,6 +42,7 @@ private void InitializeComponent()
MenuToolsSeperator = new ToolStripSeparator();
MenuToolsConfigure = new ToolStripMenuItem();
MenuToolsConfigureTFHFolder = new ToolStripMenuItem();
+ MenuToolsRegisterScheme = new ToolStripMenuItem();
MenuHelp = new ToolStripMenuItem();
MenuHelpFI = new ToolStripMenuItem();
MenuHelpAbout = new ToolStripMenuItem();
@@ -48,6 +51,7 @@ private void InitializeComponent()
ModNameLabel = new Label();
ModAuthorLabel = new Label();
ModDescriptionBox = new TextBox();
+ MenuFileInstallMod = new ToolStripMenuItem();
MenuBar.SuspendLayout();
SuspendLayout();
//
@@ -67,7 +71,7 @@ private void InitializeComponent()
//
// MenuFile
//
- MenuFile.DropDownItems.AddRange(new ToolStripItem[] { MenuFileRefreshMods, MenuFileSeperator, MenuFileExit });
+ MenuFile.DropDownItems.AddRange(new ToolStripItem[] { MenuFileInstallMod, MenuFileRefreshMods, MenuFileApplyMods, MenuFileSeperator, MenuFileExit });
MenuFile.Name = "MenuFile";
MenuFile.Size = new Size(37, 20);
MenuFile.Text = "File";
@@ -80,6 +84,14 @@ private void InitializeComponent()
MenuFileRefreshMods.Text = "Refresh Mods";
MenuFileRefreshMods.Click += MenuFileRefreshMods_Click;
//
+ // MenuFileApplyMods
+ //
+ MenuFileApplyMods.Name = "MenuFileApplyMods";
+ MenuFileApplyMods.ShortcutKeys = Keys.Control | Keys.S;
+ MenuFileApplyMods.Size = new Size(187, 22);
+ MenuFileApplyMods.Text = "Apply Mods";
+ MenuFileApplyMods.Click += MenuFileApplyMods_Click;
+ //
// MenuFileSeperator
//
MenuFileSeperator.Name = "MenuFileSeperator";
@@ -95,7 +107,7 @@ private void InitializeComponent()
//
// MenuTools
//
- MenuTools.DropDownItems.AddRange(new ToolStripItem[] { MenuToolsExtraction, MenuToolsSeperator, MenuToolsConfigure });
+ MenuTools.DropDownItems.AddRange(new ToolStripItem[] { MenuToolsExtraction, MenuToolsSeperator, MenuToolsConfigure, MenuToolsRegisterScheme });
MenuTools.Name = "MenuTools";
MenuTools.Size = new Size(46, 20);
MenuTools.Text = "Tools";
@@ -104,20 +116,20 @@ private void InitializeComponent()
//
MenuToolsExtraction.Name = "MenuToolsExtraction";
MenuToolsExtraction.ShortcutKeys = Keys.Control | Keys.E;
- MenuToolsExtraction.Size = new Size(167, 22);
+ MenuToolsExtraction.Size = new Size(180, 22);
MenuToolsExtraction.Text = "Extraction";
MenuToolsExtraction.Click += MenuToolsExtraction_Click;
//
// MenuToolsSeperator
//
MenuToolsSeperator.Name = "MenuToolsSeperator";
- MenuToolsSeperator.Size = new Size(164, 6);
+ MenuToolsSeperator.Size = new Size(177, 6);
//
// MenuToolsConfigure
//
MenuToolsConfigure.DropDownItems.AddRange(new ToolStripItem[] { MenuToolsConfigureTFHFolder });
MenuToolsConfigure.Name = "MenuToolsConfigure";
- MenuToolsConfigure.Size = new Size(167, 22);
+ MenuToolsConfigure.Size = new Size(180, 22);
MenuToolsConfigure.Text = "Configure";
//
// MenuToolsConfigureTFHFolder
@@ -127,6 +139,13 @@ private void InitializeComponent()
MenuToolsConfigureTFHFolder.Text = "Install Folder";
MenuToolsConfigureTFHFolder.Click += MenuToolsConfigureTFHFolder_Click;
//
+ // MenuToolsRegisterScheme
+ //
+ MenuToolsRegisterScheme.Name = "MenuToolsRegisterScheme";
+ MenuToolsRegisterScheme.Size = new Size(180, 22);
+ MenuToolsRegisterScheme.Text = "Register Scheme";
+ MenuToolsRegisterScheme.Click += MenuToolsRegisterScheme_Click;
+ //
// MenuHelp
//
MenuHelp.DropDownItems.AddRange(new ToolStripItem[] { MenuHelpFI, MenuHelpAbout });
@@ -155,6 +174,7 @@ private void InitializeComponent()
ModList.Name = "ModList";
ModList.Size = new Size(220, 292);
ModList.TabIndex = 1;
+ ModList.ItemCheck += ModList_ItemCheck;
ModList.SelectedIndexChanged += ModList_SelectedIndexChanged;
//
// ApplyButton
@@ -199,6 +219,14 @@ private void InitializeComponent()
ModDescriptionBox.TabIndex = 5;
ModDescriptionBox.Visible = false;
//
+ // MenuFileInstallMod
+ //
+ MenuFileInstallMod.Name = "MenuFileInstallMod";
+ MenuFileInstallMod.ShortcutKeys = Keys.Control | Keys.I;
+ MenuFileInstallMod.Size = new Size(187, 22);
+ MenuFileInstallMod.Text = "Install Mod";
+ MenuFileInstallMod.Click += MenuFileInstallMod_Click;
+ //
// MainForm
//
AccessibleDescription = "Them's Fightin' Herds Mod Loader";
@@ -244,4 +272,7 @@ private void InitializeComponent()
private Label ModNameLabel;
private Label ModAuthorLabel;
private TextBox ModDescriptionBox;
+ private ToolStripMenuItem MenuFileApplyMods;
+ private ToolStripMenuItem MenuToolsRegisterScheme;
+ private ToolStripMenuItem MenuFileInstallMod;
}
diff --git a/forms/MainForm.cs b/forms/MainForm.cs
index 6f30a41..4c6f4f7 100644
--- a/forms/MainForm.cs
+++ b/forms/MainForm.cs
@@ -1,16 +1,40 @@
+using ThemModdingHerds.VelvetBeautifier.forms;
+
namespace ThemModdingHerds.VelvetBeautifier;
public partial class MainForm : Form
{
- private readonly ExtractionWindow extractionWindow = new();
- private readonly AboutWindow aboutWindow = new();
+ private readonly ExtractionForm extractionForm = new();
+ private readonly AboutForm aboutForm = new();
+ private readonly InstallForm installForm = new();
public MainForm()
{
InitializeComponent();
- extractionWindow.Owner = aboutWindow.Owner = this;
+ extractionForm.Owner = aboutForm.Owner = installForm.Owner = this;
CheckForTFHFolder();
BackupManager.BackupTFHResources();
+ // BackupManager.BackupData01();
RefreshModList();
+#if DEBUG
+ Debug();
+#endif
+ Config.Current.Save();
+ }
+ private void Debug()
+ {
+ ToolStripMenuItem debugItem = new()
+ {
+ Text = "Debug"
+ };
+
+ MenuBar.Items.Add(debugItem);
+
+ ToolStripMenuItem gbTestItem = new()
+ {
+ Text = "Test GameBanana Link"
+ };
+ gbTestItem.Click += (object? sender, EventArgs e) => GameBanana.HandleCommandLine("https://gamebanana.com/mmdl/1108527,Mod,50765");
+ debugItem.DropDownItems.Add(gbTestItem);
}
private void CheckForTFHFolder()
{
@@ -18,25 +42,34 @@ private void CheckForTFHFolder()
{
Velvet.ShowMessageBox("No Them's Fightin' Herds Folder found! Please select the folder", "Didn't find installation folder");
DialogResult result = FindTFHFolder.ShowDialog();
- if (result == DialogResult.OK)
+ if (result != DialogResult.OK)
{
- Config.Current.TfhPath = FindTFHFolder.SelectedPath;
- Config.Current.Save();
- return;
+ Velvet.ShowMessageBox("You need to select a folder, exiting...", "No folder selected");
+ Close();
+ Environment.Exit(1);
}
-
- Velvet.ShowMessageBox("You need to select a folder, exiting...", "No folder selected");
+ Config.Current.TfhPath = FindTFHFolder.SelectedPath;
+ if(!Config.Current.ExistsTFHFolder())
+ {
+ Velvet.ShowMessageBox("Thie folder you selected is invalid","Invalid Folder");
+ Close();
+ Environment.Exit(1);
+ }
+ }
+ if(!Config.Current.ExistsTFHResourcesFolder() || !Config.Current.ExistsData01Folder())
+ {
+ Velvet.ShowMessageBox("The folder you've specified does not contain Them's Fightin' Herds assets","Invalid TFH folder");
+ Config.Current.TfhPath = "";
+ Config.Current.Save();
+ Close();
Environment.Exit(1);
}
}
- private void MenuFileExit_Click(object sender, EventArgs e) => Environment.Exit(0);
-
- private void MenuToolsExtraction_Click(object sender, EventArgs e) => extractionWindow.ShowDialog();
-
- private void MenuHelpAbout_Click(object sender, EventArgs e) => aboutWindow.ShowDialog();
-
+ private void MenuFileExit_Click(object sender, EventArgs e) => Close();
+ private void MenuToolsExtraction_Click(object sender, EventArgs e) => extractionForm.ShowDialog();
+ private void MenuHelpAbout_Click(object sender, EventArgs e) => aboutForm.ShowDialog();
+ private void MenuFileInstallMod_Click(object sender, EventArgs e) => installForm.ShowDialog();
private void MenuHelpFI_Click(object sender, EventArgs e) => Utils.OpenLink("https://github.com/ThemModdingHerds/velvet-beautifier/issues/new/choose");
-
private void MenuToolsConfigureTFHFolder_Click(object sender, EventArgs e)
{
DialogResult result = FindTFHFolder.ShowDialog();
@@ -50,7 +83,11 @@ private void FillModList(List mods)
{
ModList.Items.Clear();
foreach (Mod mod in mods)
- ModList.Items.Add(mod.Info.Name);
+ {
+ int index = ModList.Items.Add(mod.Info.Name);
+ if (Config.Current.IsModEnabled(mod))
+ ModList.SetItemCheckState(index, CheckState.Checked);
+ }
}
private void RefreshModList()
{
@@ -63,8 +100,8 @@ private void RefreshModList()
private void ModList_SelectedIndexChanged(object sender, EventArgs e)
{
- Mod? mod =GetModFromModList(ModList.SelectedIndex);
- if(mod == null)
+ Mod? mod = GetModFromModList(ModList.SelectedIndex);
+ if (mod == null)
return;
ModNameLabel.Visible = ModAuthorLabel.Visible = ModDescriptionBox.Visible = true;
@@ -76,7 +113,7 @@ private void ModList_SelectedIndexChanged(object sender, EventArgs e)
private Mod? GetModFromModList(int index)
{
object? modname_o = ModList.Items[index];
- if(modname_o == null)
+ if (modname_o == null)
return null;
string modname = (string)modname_o;
return ModManager.FindModByName(modname);
@@ -85,44 +122,54 @@ private List GetEnabledMods()
{
List mods = [];
- for(int index = 0;index < ModList.CheckedItems.Count;index++)
+ for (int index = 0; index < ModList.CheckedItems.Count; index++)
{
object? modname_o = ModList.CheckedItems[index];
- if(modname_o == null)
+ if (modname_o == null)
continue;
string modname = (string)modname_o;
Mod? mod = ModManager.FindModByName(modname);
- if(mod != null)
+ if (mod != null)
mods.Add(mod);
}
return mods;
}
- private void ApplyButton_Click(object sender, EventArgs e)
+ private void ApplyButton_Click(object sender, EventArgs e) => ApplyMods();
+ private void MenuFileApplyMods_Click(object sender, EventArgs e) => ApplyMods();
+
+ private void ApplyMods()
{
List mods = GetEnabledMods();
- if(mods.Count == 0)
+ if (mods.Count == 0)
+ {
+ ModManager.RevertMods();
+ Velvet.ShowMessageBox("Mods have been removed");
return;
+ }
- Dictionary> tfhres_mods = [];
+ TFHResourceUtils.ApplyTFHResources(mods);
- foreach(Mod mod in mods)
- {
- foreach(TFHResourceMod resourceMod in mod.TFHResourceMods)
- {
- if(!tfhres_mods.ContainsKey(resourceMod.Resource))
- tfhres_mods.Add(resourceMod.Resource,[]);
- List ts = tfhres_mods[resourceMod.Resource];
- ts.Add(resourceMod);
- }
- }
+ Velvet.ShowMessageBox(mods.Count + " mods have been applied! You can start the game with the modifications", "Done");
+ }
- foreach((string resource,List tfhres) in tfhres_mods)
+ private void MenuToolsRegisterScheme_Click(object sender, EventArgs e) => Utils.CreateURIScheme();
+
+ private void ModList_ItemCheck(object sender, ItemCheckEventArgs e)
+ {
+ Mod? mod = GetModFromModList(e.Index);
+ if (mod == null) return;
+ switch (e.NewValue)
{
- string target_path = Config.Current.GetTFHResourcesFolder(resource);
- TFHResourceMod.ModIt(target_path,tfhres);
+ case CheckState.Checked:
+ Config.Current.EnableMod(mod);
+ break;
+ default:
+ Config.Current.DisableMod(mod);
+ break;
}
- Velvet.ShowMessageBox(mods.Count + " mods have been applied! You can start the game with the modifications","Done");
+ Config.Current.Save();
}
+
}
diff --git a/mod/Mod.cs b/mod/Mod.cs
index 62c28da..4e9241c 100644
--- a/mod/Mod.cs
+++ b/mod/Mod.cs
@@ -12,8 +12,8 @@ public Mod(string folder)
Folder = folder;
string filepath = Path.Combine(folder,"mod.json");
if(!File.Exists(filepath))
- throw new Exception("no mod entry");
- Info = JsonSerializer.Deserialize(File.ReadAllText(filepath)) ?? throw new Exception("couldn't read mod entry");
+ throw new VelvetException("new Mod","no mod entry in " + folder);
+ Info = JsonSerializer.Deserialize(File.ReadAllText(filepath)) ?? throw new VelvetException("new Mod","couldn't read mod entry in " + folder);
TFHResourceMods = ReadTFHResourceMod();
}
private List GetFolders(List filter)
diff --git a/mod/ModManager.cs b/mod/ModManager.cs
index 15daf7f..078518f 100644
--- a/mod/ModManager.cs
+++ b/mod/ModManager.cs
@@ -27,4 +27,17 @@ public static void RefreshMods()
return mod;
return null;
}
+ public static Mod? FindModById(string id)
+ {
+ foreach(Mod mod in Mods.Values)
+ if(mod.Info.Id == id)
+ return mod;
+ return null;
+ }
+ public static void RevertMods()
+ {
+ BackupManager.RevertTFHResources();
+ //BackupManager.RevertData01();
+ Velvet.ConsoleWriteLine("The mods have been disabled");
+ }
}
\ No newline at end of file
diff --git a/tfhres/TFHResourceUtils.cs b/tfhres/TFHResourceUtils.cs
index 19e7264..7d42a22 100644
--- a/tfhres/TFHResourceUtils.cs
+++ b/tfhres/TFHResourceUtils.cs
@@ -59,4 +59,25 @@ public static void Replace(Database dest,Database db)
{
Replace(dest.Path,db);
}
+ public static void ApplyTFHResources(List mods)
+ {
+ Dictionary> tfhres_mods = [];
+
+ foreach (Mod mod in mods)
+ {
+ foreach (TFHResourceMod resourceMod in mod.TFHResourceMods)
+ {
+ if (!tfhres_mods.ContainsKey(resourceMod.Resource))
+ tfhres_mods.Add(resourceMod.Resource, []);
+ List ts = tfhres_mods[resourceMod.Resource];
+ ts.Add(resourceMod);
+ }
+ }
+
+ foreach ((string resource, List tfhres) in tfhres_mods)
+ {
+ string target_path = Config.Current.GetTFHResourcesFolder(resource);
+ TFHResourceMod.ModIt(target_path, tfhres);
+ }
+ }
}
\ No newline at end of file
diff --git a/utils/CommandLineResult.cs b/utils/CommandLineResult.cs
new file mode 100644
index 0000000..f88735d
--- /dev/null
+++ b/utils/CommandLineResult.cs
@@ -0,0 +1,6 @@
+namespace ThemModdingHerds.VelvetBeautifier;
+public enum CommandLineResult
+{
+ None,
+ GameBanana
+}
\ No newline at end of file
diff --git a/utils/Config.cs b/utils/Config.cs
index 0031a48..5291486 100644
--- a/utils/Config.cs
+++ b/utils/Config.cs
@@ -8,6 +8,7 @@ public class Config
public string TfhPath {get; set;} = Utils.GetDefaultTFHPath();
public string ModsFolder {get; set;} = Path.Combine(Environment.CurrentDirectory,"mods");
public string BackupFolder {get; set;} = Path.Combine(Environment.CurrentDirectory,"backup");
+ public List EnabledMods {get; set;} = [];
public static Config Read(string path)
{
if(!Exists(path))
@@ -75,6 +76,10 @@ public string GetTFHResourcesFolder()
{
return Path.Combine(TfhPath,"Scripts","src","Farm","resources");
}
+ public bool ExistsTFHResourcesFolder()
+ {
+ return Directory.Exists(GetTFHResourcesFolder());
+ }
public string GetTFHResourcesFolder(string path)
{
return Path.Combine(GetTFHResourcesFolder(),path);
@@ -83,8 +88,35 @@ public string GetData01Folder()
{
return Path.Combine(TfhPath,"data01");
}
+ public bool ExistsData01Folder()
+ {
+ return Directory.Exists(GetData01Folder());
+ }
public string GetData01Folder(string path)
{
return Path.Combine(GetData01Folder(),path);
}
+ public void EnableMod(Mod mod)
+ {
+ if(!EnabledMods.Contains(mod.Info.Id))
+ EnabledMods.Add(mod.Info.Id);
+ }
+ public void DisableMod(Mod mod)
+ {
+ if(EnabledMods.Contains(mod.Info.Id))
+ EnabledMods.Remove(mod.Info.Id);
+ }
+ public bool IsModEnabled(Mod mod)
+ {
+ return EnabledMods.Contains(mod.Info.Id);
+ }
+ public void ToggleMod(Mod mod)
+ {
+ if(IsModEnabled(mod))
+ {
+ DisableMod(mod);
+ return;
+ }
+ EnableMod(mod);
+ }
}
\ No newline at end of file
diff --git a/utils/DownloadManager.cs b/utils/DownloadManager.cs
new file mode 100644
index 0000000..5342727
--- /dev/null
+++ b/utils/DownloadManager.cs
@@ -0,0 +1,37 @@
+using System.Formats.Asn1;
+using System.Net;
+using System.Net.Http.Json;
+using System.Text.Json;
+
+namespace ThemModdingHerds.VelvetBeautifier;
+public static class DownloadManager
+{
+ public static async Task Get(string url)
+ {
+ HttpClient client = new();
+ return await client.GetByteArrayAsync(url);
+ }
+ public static async Task Get(string url,string path)
+ {
+ byte[] data = await Get(url);
+ await File.WriteAllBytesAsync(path,data);
+ }
+ public static async Task GetAndUnzip(string url,string path)
+ {
+ string temp = Utils.CreateTempFile();
+ await Get(url,temp);
+ Utils.ExtractZip(temp,path);
+ }
+ public static async Task GetAndUnzip(string url)
+ {
+ string temp = Directory.CreateTempSubdirectory().FullName;
+ await GetAndUnzip(url,temp);
+ return temp;
+ }
+ public static async Task GetJSON(string url)
+ {
+ HttpClient client = new();
+ string result = await client.GetStringAsync(url);
+ return JsonSerializer.Deserialize(result);
+ }
+}
\ No newline at end of file
diff --git a/utils/GameBanana.cs b/utils/GameBanana.cs
new file mode 100644
index 0000000..2b74382
--- /dev/null
+++ b/utils/GameBanana.cs
@@ -0,0 +1,115 @@
+using System.Text.Json;
+using System.Text.Json.Serialization;
+
+namespace ThemModdingHerds.VelvetBeautifier;
+public static class GameBanana
+{
+ public static async void HandleCommandLine(string line)
+ {
+ string[] args = line.Split(",");
+ // 0. url
+ // 1. itemtype
+ // 2. id
+ try
+ {
+ string url = args[0];
+ int id = int.Parse(args[2]);
+ GameBananaMod mod = await GameBananaMod.Fetch(id) ?? throw new Exception("Couldn't fetch mod");
+ new DownloadForm(mod,url).Show();
+ }
+ catch(Exception err)
+ {
+ throw new VelvetException("GameBanana.HandleCommandLine",err.ToString());
+ }
+ }
+ public static bool ValidUrl(string url)
+ {
+ return url.StartsWith("http://gamebanana.com") ||
+ url.StartsWith("https://gamebanana.com") ||
+ url.StartsWith("http://www.gamebanana.com") ||
+ url.StartsWith("https://www.gamebanana.com");
+ }
+ public static int GetModId(string url)
+ {
+ if(!ValidUrl(url) && !url.Contains("/mods/")) return -1;
+ try
+ {
+ string id_s = url[(url.IndexOf("mods/") + 5)..];
+ if(id_s.Contains('/'))
+ id_s = id_s[id_s.IndexOf('/')..];
+ return int.Parse(id_s);
+ }
+ catch{}
+ return -1;
+ }
+ public static string CreateCoreItemDataRequestUrl(string itemtype,int id,List fields)
+ {
+ string field = string.Join(',',fields);
+ return $"https://api.gamebanana.com/Core/Item/Data?itemtype={itemtype}&itemid={id}&fields={field}&format=json&return_keys=true";
+ }
+ public static async Task> GetDownloads(int id)
+ {
+ List urls = [];
+ string url = CreateCoreItemDataRequestUrl("Mod",id,["Files().aFiles()"]);
+ JsonDocument? jsonObject = await DownloadManager.GetJSON(url);
+ if(jsonObject == null) return [];
+
+ foreach(JsonElement item in jsonObject.RootElement.EnumerateArray())
+ foreach(JsonProperty downloadInfo in item.EnumerateObject())
+ {
+ JsonElement data = downloadInfo.Value;
+ JsonElement downloadUrlObject = data.GetProperty("_sDownloadUrl");
+ string? downloadUrl = downloadUrlObject.GetString();
+ if(downloadUrl == null) continue;
+ urls.Add(downloadUrl);
+ }
+
+ return urls;
+ }
+}
+public class GameBananaError
+{
+ [JsonPropertyName("error")]
+ public string Error {get;set;} = "";
+ [JsonPropertyName("error_code")]
+ public string ErrorCode {get;set;} = "";
+}
+public class GameBananaModFile
+{
+ [JsonPropertyName("_sFile")]
+ public string Filename {get;set;} = "";
+ [JsonPropertyName("_nFilesize")]
+ public int Filesize {get;set;}
+ [JsonPropertyName("_sDownloadUrl")]
+ public string DownloadUrl {get;set;} = "";
+ [JsonPropertyName("_sDescription")]
+ public string Description {get;set;} = "";
+ [JsonPropertyName("_tsDateAdded")]
+ public int DateAdded {get;set;}
+ [JsonPropertyName("_nDownloadCount")]
+ public int DownloadCount {get;set;}
+}
+public class GameBananaMod
+{
+ [JsonPropertyName("name")]
+ public string ModName {get;set;} = "";
+ [JsonPropertyName("userid")]
+ public int OwnerId {get;set;}
+ [JsonPropertyName("Owner().name")]
+ public string OwnerName {get;set;} = "";
+ [JsonPropertyName("text")]
+ public string Body {get;set;} = "";
+ [JsonPropertyName("Files().aFiles()")]
+ public Dictionary Files {get;set;} = [];
+ public static async Task Fetch(int id)
+ {
+ string url = GameBanana.CreateCoreItemDataRequestUrl("Mod",id,[
+ "name",
+ "userid",
+ "Owner().name",
+ "text",
+ "Files().aFiles()"
+ ]);
+ return await DownloadManager.GetJSON(url);
+ }
+}
\ No newline at end of file
diff --git a/utils/Utils.cs b/utils/Utils.cs
index 4a77abb..0753446 100644
--- a/utils/Utils.cs
+++ b/utils/Utils.cs
@@ -1,10 +1,14 @@
using System.Diagnostics;
+using System.IO.Compression;
+using System.Reflection;
using System.Runtime.InteropServices;
+using System.Security.Policy;
using Microsoft.Win32;
namespace ThemModdingHerds.VelvetBeautifier;
public static class Utils
{
+ public static string Scheme {get;} = "velvetbeautifier";
public static string GetSteamPath()
{
string x32 = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Valve\\Steam";
@@ -40,10 +44,57 @@ public static string CreateTempFile(string path)
Velvet.ConsoleWriteLine("Created temp file from " + path + " to " + tempfile);
return tempfile;
}
- [DllImport("kernel32.dll",SetLastError = true)]
- [return: MarshalAs(UnmanagedType.Bool)]
- public static extern bool AllocConsole();
+ public static string CreateTempFile()
+ {
+ string folder = Directory.CreateTempSubdirectory().FullName;
+ string path = Guid.NewGuid().ToString();
+ string tempfile = Path.Combine(folder,path);
+ File.Create(tempfile).Close();
+ Velvet.ConsoleWriteLine("Created temp file from " + path + " to " + tempfile);
+ return tempfile;
+ }
+ public static void CreateURIScheme()
+ {
+ string name = "Velvet Beautifier";
+ string path = Application.ExecutablePath;
+ string regpath = "SOFTWARE\\CLASSES\\" + Scheme;
+
+ RegistryKey key = Registry.CurrentUser.OpenSubKey(regpath,true) ?? Registry.CurrentUser.CreateSubKey(regpath);
+ key.SetValue("","URL:" + name);
+ key.SetValue("URL Protocol",Scheme);
+
+ RegistryKey iconKey = Registry.CurrentUser.OpenSubKey("DefaultIcon",true) ?? key.CreateSubKey("DefaultIcon");
+ iconKey.SetValue("",'"' + path + "\",1");
+ iconKey.Close();
+
+ RegistryKey openKey = Registry.CurrentUser.OpenSubKey(@"shell\open\command",true) ?? key.CreateSubKey(@"shell\open\command");
+ openKey.SetValue("","\"" + path + "\" \"%1\"");
+ openKey.Close();
+
+ key.Close();
+ Velvet.ShowMessageBox("Registered URI Scheme");
+ }
+ public static bool IsUrl(string url)
+ {
+ return Uri.TryCreate(url,UriKind.RelativeOrAbsolute,out Uri? _);
+ }
+ public static void ExtractZip(string path,string output)
+ {
+ ZipFile.ExtractToDirectory(path,output);
+ }
+ public static void SavePID()
+ {
+ Process cur = Process.GetCurrentProcess();
+ File.WriteAllText(Path.Combine(Environment.CurrentDirectory,".pid"),cur.Id.ToString());
+ }
+ public static bool HasPID()
+ {
+ return File.Exists(Path.Combine(Environment.CurrentDirectory,".pid"));
+ }
[DllImport("kernel32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool AttachConsole(int dwProcessId);
+ [DllImport("kernel32.dll")]
+ [return: MarshalAs(UnmanagedType.Bool)]
+ public static extern bool FreeConsole();
}
\ No newline at end of file
diff --git a/utils/Velvet.cs b/utils/Velvet.cs
index 97c0b12..883dd7a 100644
--- a/utils/Velvet.cs
+++ b/utils/Velvet.cs
@@ -1,17 +1,29 @@
+using System.Diagnostics;
+
namespace ThemModdingHerds.VelvetBeautifier;
public static class Velvet
{
+ private static bool IsDebug {get;} = false;
+ static Velvet()
+ {
+#if DEBUG
+ IsDebug = true;
+#endif
+ }
public static void ShowMessageBox(string text)
{
MessageBox.Show(Velvetify(text));
+ ConsoleWriteLine(text);
}
public static void ShowMessageBox(string text,string caption)
{
MessageBox.Show(Velvetify(text),Velvetify(caption));
+ ConsoleWriteLine(text);
}
public static void ConsoleWriteLine(string text)
{
Console.WriteLine(Velvetify(text));
+ Debug.WriteLineIf(IsDebug,Velvetify(text));
}
public static string Velvetify(string input)
{