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) {