diff --git a/App.config b/App.config
new file mode 100644
index 0000000..5754728
--- /dev/null
+++ b/App.config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Form1.Designer.cs b/Form1.Designer.cs
new file mode 100644
index 0000000..cccf8a2
--- /dev/null
+++ b/Form1.Designer.cs
@@ -0,0 +1,166 @@
+namespace GSecPs3Decrypter
+{
+ partial class Main
+ {
+ ///
+ /// 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(Main));
+ this.button1 = new System.Windows.Forms.Button();
+ this.textBox1 = new System.Windows.Forms.TextBox();
+ this.button2 = new System.Windows.Forms.Button();
+ this.listView1 = new System.Windows.Forms.ListView();
+ this.textBox2 = new System.Windows.Forms.TextBox();
+ this.pictureBox1 = new System.Windows.Forms.PictureBox();
+ this.textBox3 = new System.Windows.Forms.TextBox();
+ ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
+ this.SuspendLayout();
+ //
+ // button1
+ //
+ this.button1.Location = new System.Drawing.Point(12, 8);
+ this.button1.Name = "button1";
+ this.button1.Size = new System.Drawing.Size(75, 20);
+ this.button1.TabIndex = 0;
+ this.button1.Text = "Open Save";
+ this.button1.UseVisualStyleBackColor = true;
+ this.button1.Click += new System.EventHandler(this.button1_Click);
+ //
+ // textBox1
+ //
+ this.textBox1.Location = new System.Drawing.Point(12, 34);
+ this.textBox1.Name = "textBox1";
+ this.textBox1.Size = new System.Drawing.Size(513, 20);
+ this.textBox1.TabIndex = 3;
+ //
+ // button2
+ //
+ this.button2.BackColor = System.Drawing.SystemColors.ActiveCaptionText;
+ this.button2.Enabled = false;
+ this.button2.FlatStyle = System.Windows.Forms.FlatStyle.System;
+ this.button2.Location = new System.Drawing.Point(452, 8);
+ this.button2.Name = "button2";
+ this.button2.Size = new System.Drawing.Size(73, 20);
+ this.button2.TabIndex = 4;
+ this.button2.Text = "Decrypt";
+ this.button2.UseVisualStyleBackColor = false;
+ this.button2.Visible = false;
+ this.button2.Click += new System.EventHandler(this.button2_Click);
+ //
+ // listView1
+ //
+ this.listView1.BackColor = System.Drawing.SystemColors.Info;
+ this.listView1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
+ this.listView1.FullRowSelect = true;
+ this.listView1.GridLines = true;
+ this.listView1.HideSelection = false;
+ this.listView1.Location = new System.Drawing.Point(12, 60);
+ this.listView1.Name = "listView1";
+ this.listView1.Size = new System.Drawing.Size(573, 122);
+ this.listView1.TabIndex = 6;
+ this.listView1.UseCompatibleStateImageBehavior = false;
+ this.listView1.View = System.Windows.Forms.View.List;
+ //
+ // textBox2
+ //
+ this.textBox2.BackColor = System.Drawing.SystemColors.InfoText;
+ this.textBox2.BorderStyle = System.Windows.Forms.BorderStyle.None;
+ this.textBox2.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.textBox2.ForeColor = System.Drawing.SystemColors.Menu;
+ this.textBox2.Location = new System.Drawing.Point(93, 10);
+ this.textBox2.Name = "textBox2";
+ this.textBox2.ReadOnly = true;
+ this.textBox2.Size = new System.Drawing.Size(49, 15);
+ this.textBox2.TabIndex = 7;
+ this.textBox2.Text = "Status:";
+ //
+ // pictureBox1
+ //
+ this.pictureBox1.BackColor = System.Drawing.Color.Transparent;
+ this.pictureBox1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
+ this.pictureBox1.Image = global::GSecPs3Decrypter.Properties.Resources.icon;
+ this.pictureBox1.Location = new System.Drawing.Point(531, 4);
+ this.pictureBox1.Name = "pictureBox1";
+ this.pictureBox1.Size = new System.Drawing.Size(54, 50);
+ this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
+ this.pictureBox1.TabIndex = 8;
+ this.pictureBox1.TabStop = false;
+ //
+ // textBox3
+ //
+ this.textBox3.BackColor = System.Drawing.SystemColors.InfoText;
+ this.textBox3.BorderStyle = System.Windows.Forms.BorderStyle.None;
+ this.textBox3.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.7F);
+ this.textBox3.ForeColor = System.Drawing.SystemColors.MenuHighlight;
+ this.textBox3.Location = new System.Drawing.Point(143, 10);
+ this.textBox3.Name = "textBox3";
+ this.textBox3.ReadOnly = true;
+ this.textBox3.Size = new System.Drawing.Size(303, 15);
+ this.textBox3.TabIndex = 9;
+ this.textBox3.Text = "Idle...";
+ //
+ // Main
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.BackColor = System.Drawing.SystemColors.ActiveCaptionText;
+ this.ClientSize = new System.Drawing.Size(597, 192);
+ this.Controls.Add(this.textBox3);
+ this.Controls.Add(this.pictureBox1);
+ this.Controls.Add(this.textBox2);
+ this.Controls.Add(this.listView1);
+ this.Controls.Add(this.button2);
+ this.Controls.Add(this.textBox1);
+ this.Controls.Add(this.button1);
+ this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D;
+ this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+ this.MaximizeBox = false;
+ this.Name = "Main";
+ this.Text = "[GSec] Ps3 Decrypter";
+ this.Load += new System.EventHandler(this.Form1_Load);
+ ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ private void TextBox1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
+ {
+ throw new System.NotImplementedException();
+ }
+
+ #endregion
+
+ private System.Windows.Forms.Button button1;
+ private System.Windows.Forms.TextBox textBox1;
+ private System.Windows.Forms.Button button2;
+ private System.Windows.Forms.ListView listView1;
+ private System.Windows.Forms.TextBox textBox2;
+ private System.Windows.Forms.PictureBox pictureBox1;
+ private System.Windows.Forms.TextBox textBox3;
+ }
+}
+
diff --git a/Form1.cs b/Form1.cs
new file mode 100644
index 0000000..39b2bbe
--- /dev/null
+++ b/Form1.cs
@@ -0,0 +1,179 @@
+using PS3FileSystem;
+using System;
+using System.IO;
+using System.Windows.Forms;
+
+namespace GSecPs3Decrypter
+{
+ public partial class Main : Form
+ {
+ public Main()
+ {
+ InitializeComponent();
+ }
+
+ private void button1_Click(object sender, EventArgs e)
+ {
+ if (this.fbd.ShowDialog() == DialogResult.OK)
+ {
+ this.button2.Enabled = false;
+ this.listView1.Items.Clear();
+ this.dirpath = this.fbd.SelectedPath;
+ this.textBox1.Text = this.fbd.SelectedPath;
+ this.button2.Visible = true;
+ this.button2.Enabled = true;
+ string state;
+ if (File.Exists(this.dirpath + "\\\\~decrypted.txt"))
+ {
+ this.button2.Text = "Encrypt";
+ state = "✓";
+ this.pictureBox1.Image = global::GSecPs3Decrypter.Properties.Resources.unlock;
+ }
+ else
+ {
+ this.button2.Text = "Decrypt";
+ state = "🔒";
+ this.pictureBox1.Image = global::GSecPs3Decrypter.Properties.Resources._lock;
+ }
+ try
+ {
+ Ps3SaveManager ps3SaveManager = new Ps3SaveManager(this.textBox1.Text, this.key);
+ for (int i = 0; i <= ps3SaveManager.Param_PFD.Entries.Length - 1; i++)
+ {
+ this.listView1.Items.Add("[" + state + "] " + ps3SaveManager.Param_PFD.Entries[i].file_name);
+ }
+ this.SetStatus("Loaded directory");
+ }
+ catch(Exception z)
+ {
+ this.listView1.Items.Clear();
+ this.button2.Visible = false;
+ this.button2.Enabled = false;
+ this.SetStatus(z.Message);
+ this.pictureBox1.Image = global::GSecPs3Decrypter.Properties.Resources.icon;
+ }
+ }
+ }
+
+ private void button2_Click(object sender, EventArgs e)
+ {
+ if(this.button2.Text == "Encrypt")
+ {
+ this.listView1.Items.Clear();
+ Ps3SaveManager ps3SaveManager = new Ps3SaveManager(this.dirpath, this.key);
+ this.SetStatus(ps3SaveManager.EncryptAllFiles().ToString() + " Files Encrypted");
+ File.Delete(this.dirpath + "\\\\~decrypted.txt");
+ for (int i = 0; i <= ps3SaveManager.Param_PFD.Entries.Length - 1; i++)
+ {
+ this.listView1.Items.Add("[🔒] " + ps3SaveManager.Param_PFD.Entries[i].file_name);
+ }
+ this.button2.Text = "Decrypt";
+ this.pictureBox1.Image = global::GSecPs3Decrypter.Properties.Resources._lock;
+ }
+ else if(this.button2.Text == "Decrypt")
+ {
+ this.listView1.Items.Clear();
+ Ps3SaveManager ps3SaveManager = new Ps3SaveManager(this.dirpath, this.key);
+ this.SetStatus(ps3SaveManager.DecryptAllFiles().ToString() + " Files Decrypted");
+ string text = "";
+ for (int i = 0; i <= ps3SaveManager.Param_PFD.Entries.Length - 1; i++)
+ {
+ text = text + " " + ps3SaveManager.Param_PFD.Entries[i].file_name;
+ this.listView1.Items.Add("[✓] " + ps3SaveManager.Param_PFD.Entries[i].file_name);
+ }
+ File.WriteAllText(this.dirpath + "\\\\~decrypted.txt", text);
+ this.button2.Text = "Encrypt";
+ this.pictureBox1.Image = global::GSecPs3Decrypter.Properties.Resources.unlock;
+ }
+ }
+
+ public void SetStatus(string text)
+ {
+ this.textBox3.Text = text;
+ }
+
+ public FolderBrowserDialog fbd = new FolderBrowserDialog();
+
+ // Token: 0x0400003F RID: 63
+ private string dirpath;
+
+ // Token: 0x04000040 RID: 64
+ public byte[] key = new byte[]
+ {
+ 202,
+ 239,
+ 174,
+ 185,
+ 39,
+ 34,
+ 167,
+ 203,
+ 83,
+ 93,
+ 82,
+ 135,
+ 34,
+ 250,
+ 104,
+ 221
+ };
+
+ private void Form1_Load(object sender, EventArgs e)
+ {
+ this.textBox1.KeyDown += textBox1_KeyDown;
+ }
+
+ private void textBox1_KeyDown(object sender, KeyEventArgs e)
+ {
+ if (e.KeyCode == Keys.Enter)
+ {
+ if (Directory.Exists(this.textBox1.Text))
+ {
+ this.listView1.Items.Clear();
+ this.dirpath = this.textBox1.Text;
+ this.fbd.SelectedPath = this.textBox1.Text;
+
+ this.button2.Visible = true;
+ this.button2.Enabled = true;
+ string state;
+ if (File.Exists(this.dirpath + "\\\\~decrypted.txt"))
+ {
+ this.button2.Text = "Encrypt";
+ state = "✓";
+ this.pictureBox1.Image = global::GSecPs3Decrypter.Properties.Resources.unlock;
+ }
+ else
+ {
+ this.button2.Text = "Decrypt";
+ state = "🔒";
+ this.pictureBox1.Image = global::GSecPs3Decrypter.Properties.Resources._lock;
+ }
+ try
+ {
+ Ps3SaveManager ps3SaveManager = new Ps3SaveManager(this.textBox1.Text, this.key);
+ for (int i = 0; i <= ps3SaveManager.Param_PFD.Entries.Length - 1; i++)
+ {
+ this.listView1.Items.Add("[" + state + "] " + ps3SaveManager.Param_PFD.Entries[i].file_name);
+ }
+ this.SetStatus("Loaded directory");
+ }
+ catch (Exception z)
+ {
+ this.listView1.Items.Clear();
+ this.button2.Visible = false;
+ this.button2.Enabled = false;
+ this.pictureBox1.Image = global::GSecPs3Decrypter.Properties.Resources.icon;
+ this.SetStatus(z.Message);
+ }
+ }
+ else
+ {
+ this.pictureBox1.Image = global::GSecPs3Decrypter.Properties.Resources.icon;
+ this.listView1.Items.Clear();
+ this.SetStatus("Directory does not exist");
+ }
+
+ }
+ }
+ }
+}
diff --git a/Form1.resx b/Form1.resx
new file mode 100644
index 0000000..a3baac7
--- /dev/null
+++ b/Form1.resx
@@ -0,0 +1,1912 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
+
+
+
+
+ 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
+ BpCKVcuehEL2/kDwYbu2ktatoC0L+1D0aMUYzIWfNAFdzHFjca1BTnZm69wPNz2iRuMnxzBXv+EQ7qvQ
+ 1CxKVsi0C21hhyX1L+0yEPB/x66//aM7PhnuPhhJcARAiMHQABBiMDQAhBgMYwAueWTlusl2nRUMQN5A
+ Mp6AGEEyaQUdLyieQFEB5g1Ulg84Hs+PoA7noUucJWrqBVJUgRwQ5Q/6+rGBXSL3vjOKNRbbTqM+2YRf
+ 2C6OqxRLKbRS3eJ08PF1MvEDu77nia83KHLWcARAiMHQABBiMDQAhBgMYwBp5uEHnoKiezn9gS/adTyR
+ BK0sdbW4RK46j9GWJTZPVJuhO7TvWbvOTsResOtlTyzrGu57OJ/gCIAQg6EBIMRgaAAIMRjGAIYZWZ8g
+ 0hqbY9dJS8+za62sKeISdUJXCl0odFg5I33sDlBaHwdtWftBKn3Arn3aetuuoyV57+D9m7X+fqTBEQAh
+ BkMDQIjB0AAQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQMkr4f237SlVNFD03AAAAAElFTkSu
+ QmCCKAAAAIAAAAAAAQAAAQAgAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAKqAgAaqgIAGn22OPZ9tjj2gbIx2oGyMdp9sjZyfbI2cn2yNxJ9sjcSfbI3dn2yN3Z9sje2f
+ bI3tn2yN+Z9sjfmfbI35n2yN+Z9sje2fbI3tn2yN3Z9sjd2gbY3DoG2Nw59sjZyfbI2coGyMdqBsjHaf
+ bY49n22OPaqAgAaqgIAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqoCABqqAgAafbY49n22OPaBsjHag
+ bIx2n2yNnJ9sjZyfbI3En2yNxJ9sjd2fbI3dn2yN7Z9sje2fbI35n2yN+Z9sjfmfbI35n2yN7Z9sje2f
+ bI3dn2yN3aBtjcOgbY3Dn2yNnJ9sjZygbIx2oGyMdp9tjj2fbY49qoCABqqAgAYAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACddokNnXaJDaFwkmKh
+ cJJin22Nt59tjbefbI31n2yN9Z9sjf+fbI3/n2yN/59sjf+fbI3/n2yN/59sjf+fbI3/n2yN/59sjf+f
+ bI3/n2yN/59sjf+fbI3/n2yN/59sjf+fbI3/n2yN/59sjf+fbI3/n2yN/59sjf+fbI3/n2yN/59sjf+f
+ bI3/n2yN/59sjf+ea471nmuO9Z5sjraebI62oG2NXqBtjV6VapUMlWqVDAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAJ12iQ2ddokNoXCSYqFwkmKfbY23n22Nt59sjfWfbI31n2yN/59sjf+f
+ bI3/n2yN/59sjf+fbI3/n2yN/59sjf+fbI3/n2yN/59sjf+fbI3/n2yN/59sjf+fbI3/n2yN/59sjf+f
+ bI3/n2yN/59sjf+fbI3/n2yN/59sjf+fbI3/n2yN/59sjf+fbI3/n2yN/55rjvWea471nmyOtp5sjrag
+ bY1eoG2NXpVqlQyVapUMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACfbooln26KJaNzkaSjc5GkoG6P+qBuj/qf
+ bI3/n2yN/59sjf+fbI3/n22N/59tjf+cfJ7/nHye/5iTt/+Yk7f/laLI/5WiyP+SsNX/krDV/5C74f+Q
+ u+H/j8Lo/4/C6P+Pxuz/j8bs/4/G7P+Pxuz/j8Ho/4/B6P+Qu+H/kLvh/5Kw1f+SsNX/laLI/5WiyP+Y
+ k7b/mJO2/5x8nv+cfJ7/n22N/59tjf+fbI3/n2yN/59sjf+fbI3/n2yO9Z9sjvWfbI2cn2yNnJxqjiSc
+ ao4kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAJ9uiiWfboolo3ORpKNzkaSgbo/6oG6P+p9sjf+fbI3/n2yN/59sjf+fbY3/n22N/5x8nv+c
+ fJ7/mJO3/5iTt/+Vosj/laLI/5Kw1f+SsNX/kLvh/5C74f+Pwuj/j8Lo/4/G7P+Pxuz/j8bs/4/G7P+P
+ wej/j8Ho/5C74f+Qu+H/krDV/5Kw1f+Vosj/laLI/5iTtv+Yk7b/nHye/5x8nv+fbY3/n22N/59sjf+f
+ bI3/n2yN/59sjf+fbI71n2yO9Z9sjZyfbI2cnGqOJJxqjiQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACca4wfnGuMH6Fvj6ihb4+ooG2O/qBtjv6fbI3/n2yN/59tjf+f
+ bY3/m4Ol/5uDpf+VpMn/laTJ/5DA5v+QwOb/jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+O
+ yO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+O
+ yO//jsjv/47I7/+OyO//jsjv/5DA5v+QwOb/lKTI/5SkyP+bgqT/m4Kk/59tjf+fbY3/n2yN/59sjf+e
+ bY39nm2N/Z9rjaSfa42kom+RHqJvkR4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJxrjB+c
+ a4wfoW+PqKFvj6igbY7+oG2O/p9sjf+fbI3/n22N/59tjf+bg6X/m4Ol/5Wkyf+VpMn/kMDm/5DA5v+O
+ yO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+O
+ yO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//kMDm/5DA5v+U
+ pMj/lKTI/5uCpP+bgqT/n22N/59tjf+fbI3/n2yN/55tjf2ebY39n2uNpJ9rjaSib5Eeom+RHgAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAACqgIAGqoCABp9tjHqfbYx6oG6N+aBujfmfbI3/n2yN/55ukP+ebpD/mJC0/5iQtP+R
+ vOH/kbzh/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+O
+ yO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+O
+ yO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+Qu+H/kLvh/5mQtP+Z
+ kLT/nm6Q/55ukP+fbI3/n2yN/6BtjfagbY32nmuNeZ5rjXmqgIAGqoCABgAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKqAgAaqgIAGn22Mep9tjHqg
+ bo35oG6N+Z9sjf+fbI3/nm6Q/55ukP+YkLT/mJC0/5G84f+RvOH/jsjv/47I7/+OyO//jsjv/47I7/+O
+ yO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+O
+ yO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+O
+ yO//jsjv/47I7/+OyO//jsjv/5C74f+Qu+H/mZC0/5mQtP+ebpD/nm6Q/59sjf+fbI3/oG2N9qBtjfae
+ a415nmuNeaqAgAaqgIAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAKBtiiOgbYojoG6Oz6Bujs+fbI3/n2yN/59tjf+fbY3/mYyw/5mMsP+PvuT/j77k/47I7/+O
+ yO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+O
+ yO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+O
+ yO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+O
+ yO//jsjv/5C95P+QveT/mYyu/5mMrv+fbI3/n2yN/59sjf+fbI3/n2yNzJ9sjcygbYojoG2KIwAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoG2KI6BtiiOgbo7PoG6Oz59sjf+f
+ bI3/n22N/59tjf+ZjLD/mYyw/4++5P+PvuT/jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+O
+ yO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+O
+ yO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+O
+ yO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//kL3k/5C95P+ZjK7/mYyu/59sjf+f
+ bI3/n2yN/59sjf+fbI3Mn2yNzKBtiiOgbYojAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAoWuOUaFrjlGgbY7zoG2O859sjf+fbI3/nXmb/515m/+Tsdb/k7HW/47I7/+OyO//jsjv/47I7/+O
+ yO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsbs/47G7P+Ss9n/krPZ/47H7/+O
+ x+//jsjv/47I7/+OyO//jsjv/47I7/+OyO//m4Kk/5uCpP+bgqT/m4Kk/47I7/+OyO//jsjv/47I7/+O
+ yO//jsjv/47H7/+Ox+//krTa/5K02v+Oxu3/jsbt/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+O
+ yO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//krDV/5Kw1f+deZr/nXma/59sjf+fbI3/oG2O8aBtjvGf
+ bIxQn2yMUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACha45RoWuOUaBtjvOgbY7zn2yN/59sjf+d
+ eZv/nXmb/5Ox1v+Tsdb/jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+O
+ yO//jsjv/47I7/+Oxuz/jsbs/5Kz2f+Ss9n/jsfv/47H7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+b
+ gqT/m4Kk/5uCpP+bgqT/jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsfv/47H7/+StNr/krTa/47G7f+O
+ xu3/jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+S
+ sNX/krDV/515mv+deZr/n2yN/59sjf+gbY7xoG2O8Z9sjFCfbIxQAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACf
+ bI5qn2yOaqBsjv6gbI7+n2yN/59sjf+Ziqz/mYqs/4/C6f+Pwun/jsjv/47I7/+OyO//jsjv/47I7/+O
+ yO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/5ebv/+Xm7//n2yN/59sjf+o
+ sMn/qLDJ/8Td3v/E3d7/3t7A/97ewP/w4bb/8OG2/59sjf+fbI3/n2yN/59sjf/w4bb/8OG2/97ewf/e
+ 3sH/xdnR/8XZ0f+nrMD/p6zA/59sjf+fbI3/lp3B/5adwf+OyO//jsjv/47I7/+OyO//jsjv/47I7/+O
+ yO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//j8Pq/4/D6v+ZjK7/mYyu/59sjf+f
+ bI3/n22N/Z9tjf2ea41pnmuNaQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ9sjmqfbI5qoGyO/qBsjv6fbI3/n2yN/5mKrP+Z
+ iqz/j8Lp/4/C6f+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+O
+ yO//jsjv/47I7/+OyO//l5u//5ebv/+fbI3/n2yN/6iwyf+osMn/xN3e/8Td3v/e3sD/3t7A//Dhtv/w
+ 4bb/n2yN/59sjf+fbI3/n2yN//Dhtv/w4bb/3t7B/97ewf/F2dH/xdnR/6eswP+nrMD/n2yN/59sjf+W
+ ncH/lp3B/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+O
+ yO//jsjv/47I7/+Pw+r/j8Pq/5mMrv+ZjK7/n2yN/59sjf+fbY39n22N/Z5rjWmea41pAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ5tjnye
+ bY58n2yN/59sjf+fbY3/n22N/5adwf+WncH/jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+O
+ yO//jsjv/47I7/+OyO//jsfu/47H7v+OyO//jsjv/5fP8P+Xz/D/v97s/7/e7P/Uu8L/1LvC/59sjf+f
+ bI3/vpip/76Yqf//8uP///Lj///rx///68f//+Os///jrP+fbI3/n2yN/59sjf+fbI3//+Os///jrP//
+ 46z//+Os///jrP//46z/vZGX/72Rl/+fbI3/n2yN/9Szo//Us6P/v9jU/7/Y1P+Wzuz/ls7s/47I7/+O
+ yO//j8Hn/4/B5/+Oxu3/jsbt/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+W
+ nMH/lpzB/59tjf+fbY3/n2yN/59sjf+gbI17oGyNewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnm2OfJ5tjnyfbI3/n2yN/59tjf+fbY3/lp3B/5adwf+O
+ yO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+Ox+7/jsfu/47I7/+O
+ yO//l8/w/5fP8P+/3uz/v97s/9S7wv/Uu8L/n2yN/59sjf++mKn/vpip///y4///8uP//+vH///rx///
+ 46z//+Os/59sjf+fbI3/n2yN/59sjf//46z//+Os///jrP//46z//+Os///jrP+9kZf/vZGX/59sjf+f
+ bI3/1LOj/9Szo/+/2NT/v9jU/5bO7P+Wzuz/jsjv/47I7/+Pwef/j8Hn/47G7f+Oxu3/jsjv/47I7/+O
+ yO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/5acwf+WnMH/n22N/59tjf+fbI3/n2yN/6BsjXug
+ bI17AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoGuNa6BrjWuf
+ bI3/n2yN/59tj/+fbY//lKXL/5Sly/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+O
+ yO//jsjv/47I7/+YlLj/mJS4/59yk/+fcpP/ztDY/87Q2P//8uP///Lj///y4///8uP/8+LZ//Pi2f+f
+ bI3/n2yN/6l6lv+pepb///Lj///y4///8uP///Lj///qyP//6sj/tYeU/7WHlP+2iJT/toiU///jrP//
+ 46z//+Os///jrP//46z//+Os/6p6kP+qepD/n2yN/59sjf/01an/9NWp///jrP//46z//+Os///jrP/O
+ x7r/zse6/59vj/+fb4//mY2w/5mNsP+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+O
+ yO//jsjv/47I7/+Upcr/lKXK/59tj/+fbY//n2yN/59sjf+ea41pnmuNaQAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACga41roGuNa59sjf+fbI3/n22P/59tj/+Upcv/lKXL/47I7/+O
+ yO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/5iUuP+YlLj/n3KT/59yk//O
+ 0Nj/ztDY///y4///8uP///Lj///y4//z4tn/8+LZ/59sjf+fbI3/qXqW/6l6lv//8uP///Lj///y4///
+ 8uP//+rI///qyP+1h5T/tYeU/7aIlP+2iJT//+Os///jrP//46z//+Os///jrP//46z/qnqQ/6p6kP+f
+ bI3/n2yN//TVqf/01an//+Os///jrP//46z//+Os/87Huv/Ox7r/n2+P/59vj/+ZjbD/mY2w/47I7/+O
+ yO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/5Slyv+Upcr/n22P/59tj/+f
+ bI3/n2yN/55rjWmea41pAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACfbYxSn22MUp9sjv6f
+ bI7+n22N/59tjf+Upcv/lKXL/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+O
+ yO//jsjv/5HM8P+RzPD/s6S6/7Okuv+fbI3/n2yN/7aNov+2jaL///Lj///y4///8uP///Lj///y4///
+ 8uP/0bK5/9Gyuf/XusD/17rA///y4///8uP///Lj///y4///8uP///Lj///rx///68f//+Os///jrP//
+ 46z//+Os///jrP//46z//+Os///jrP/duaH/3bmh/9Wvnv/Vr57//+Os///jrP//46z//+Os///jrP//
+ 46z/tomV/7aJlf+fbI3/n2yN/7Kfq/+yn6v/kMvv/5DL7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+O
+ yO//jsjv/47I7/+OyO//jsjv/47I7/+Upcr/lKXK/59tjf+fbY3/n22N/Z9tjf2fbIxQn2yMUAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAJ9tjFKfbYxSn2yO/p9sjv6fbY3/n22N/5Sly/+Upcv/jsjv/47I7/+O
+ yO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//kczw/5HM8P+zpLr/s6S6/59sjf+f
+ bI3/to2i/7aNov//8uP///Lj///y4///8uP///Lj///y4//Rsrn/0bK5/9e6wP/XusD///Lj///y4///
+ 8uP///Lj///y4///8uP//+vH///rx///46z//+Os///jrP//46z//+Os///jrP//46z//+Os/925of/d
+ uaH/1a+e/9Wvnv//46z//+Os///jrP//46z//+Os///jrP+2iZX/tomV/59sjf+fbI3/sp+r/7Kfq/+Q
+ y+//kMvv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/5Slyv+U
+ pcr/n22N/59tjf+fbY39n22N/Z9sjFCfbIxQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJxqjiScao4kn22N8p9tjfKf
+ bI3/n2yN/5adwf+WncH/jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+O
+ yO//nNLv/5zS7//z7+T/8+/k//nq3v/56t7/p3iV/6d4lf+fbI3/n2yN/+3Z0//t2dP///Lj///y4///
+ 8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///qyP//
+ 6sj//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP/x
+ 0qj/8dKo/59sjf+fbI3/p3eQ/6d3kP/53Kr/+dyq//LhtP/y4bT/m8/p/5vP6f+OyO//jsjv/47I7/+O
+ yO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+WnMH/lpzB/59sjf+fbI3/oG2O8aBtjvGg
+ bYojoG2KIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAnGqOJJxqjiSfbY3yn22N8p9sjf+fbI3/lp3B/5adwf+OyO//jsjv/47I7/+O
+ yO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+c0u//nNLv//Pv5P/z7+T/+ere//nq3v+n
+ eJX/p3iV/59sjf+fbI3/7dnT/+3Z0///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///
+ 8uP///Lj///y4///8uP///Lj///y4///8uP//+rI///qyP//46z//+Os///jrP//46z//+Os///jrP//
+ 46z//+Os///jrP//46z//+Os///jrP//46z//+Os//HSqP/x0qj/n2yN/59sjf+nd5D/p3eQ//ncqv/5
+ 3Kr/8uG0//LhtP+bz+n/m8/p/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+O
+ yO//jsjv/5acwf+WnMH/n2yN/59sjf+gbY7xoG2O8aBtiiOgbYojAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkm2SB5JtkgefbI3Nn2yNzZ9sjf+f
+ bI3/mYuv/5mLr/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/5C94/+QveP/laDE/5WgxP+s
+ 0dz/rNHc///qyP//6sj///Lj///y4///8uP///Lj/+fQzf/n0M3/zay3/82st//97+H//e/h///y4///
+ 8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///
+ 8uP///Lj///rx///68f//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//
+ 46z//+Ks///irP/Urp7/1K6e/+jHpf/ox6X//+Os///jrP//46z//+Os///jrP//46z/qsjY/6rI2P+Y
+ lb//mJW//5C95P+QveT/jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+aiq7/moqu/59sjf+f
+ bI3/n2yNzJ9sjcyqgIAGqoCABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAACSbZIHkm2SB59sjc2fbI3Nn2yN/59sjf+Zi6//mYuv/47I7/+OyO//jsjv/47I7/+O
+ yO//jsjv/47I7/+OyO//kL3j/5C94/+VoMT/laDE/6zR3P+s0dz//+rI///qyP//8uP///Lj///y4///
+ 8uP/59DN/+fQzf/NrLf/zay3//3v4f/97+H///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///
+ 8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP//+vH///rx///46z//+Os///jrP//
+ 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//4qz//+Ks/9Sunv/Urp7/6Mel/+jHpf//
+ 46z//+Os///jrP//46z//+Os///jrP+qyNj/qsjY/5iVv/+Ylb//kL3k/5C95P+OyO//jsjv/47I7/+O
+ yO//jsjv/47I7/+OyO//jsjv/5qKrv+aiq7/n2yN/59sjf+fbI3Mn2yNzKqAgAaqgIAGAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKBsjXugbI17n2yN/59sjf+d
+ eZv/nXmb/4/D6v+Pw+r/jsjv/47I7/+OyO//jsjv/47I7/+OyO//kMDm/5DA5v+deZv/nXmb/59sjf+f
+ bI3/4r+j/+K/o///46z//+Os///qyP//6sj///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///
+ 8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///
+ 8uP///Lj///y4///8uP///Lj///qyP//6sj//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//
+ 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os/9auo//W
+ rqP/oWyY/6FsmP+feaX/n3ml/4/B6P+Pwej/jsjv/47I7/+OyO//jsjv/47I7/+OyO//j8Lp/4/C6f+d
+ eZr/nXma/59sjf+fbI3/nmuNeZ5rjXkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAoGyNe6BsjXufbI3/n2yN/515m/+deZv/j8Pq/4/D6v+OyO//jsjv/47I7/+O
+ yO//jsjv/47I7/+QwOb/kMDm/515m/+deZv/n2yN/59sjf/iv6P/4r+j///jrP//46z//+rI///qyP//
+ 8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///
+ 8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP//+rI///qyP//
+ 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//
+ 46z//+Os///jrP//46z//+Os///jrP//46z/1q6j/9auo/+hbJj/oWyY/595pf+feaX/j8Ho/4/B6P+O
+ yO//jsjv/47I7/+OyO//jsjv/47I7/+Pwun/j8Lp/515mv+deZr/n2yN/59sjf+ea415nmuNeQAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAom+RHqJvkR6fbI71n2yO9Z9sjf+f
+ bI3/krDV/5Kw1f+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OxOz/jsTs/5yAov+cgKL/n2yN/59sjf+0
+ iJr/tIia//zfq//836v//+Os///jrP//46z//+Os///qyP//6sj///Lj///y4///8uP///Lj///y4///
+ 8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///
+ 8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///rx///68f//+Os///jrP//46z//+Os///jrP//
+ 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP/7
+ 3qz/+96s/7WFnP+1hZz/oWyY/6FsmP+df6v/nX+r/47G7P+Oxuz/jsjv/47I7/+OyO//jsjv/47I7/+O
+ yO//krLX/5Ky1/+fbY3/n22N/6BtjfagbY32n3CPIJ9wjyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAACib5Eeom+RHp9sjvWfbI71n2yN/59sjf+SsNX/krDV/47I7/+OyO//jsjv/47I7/+O
+ yO//jsjv/47E7P+OxOz/nICi/5yAov+fbI3/n2yN/7SImv+0iJr//N+r//zfq///46z//+Os///jrP//
+ 46z//+rI///qyP//8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///
+ 8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///
+ 8uP//+vH///rx///46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//
+ 46z//+Os///jrP//46z//+Os///jrP//46z//+Os//verP/73qz/tYWc/7WFnP+hbJj/oWyY/51/q/+d
+ f6v/jsbs/47G7P+OyO//jsjv/47I7/+OyO//jsjv/47I7/+Sstf/krLX/59tjf+fbY3/oG2N9qBtjfaf
+ cI8gn3CPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ9sjaifbI2on2yN/59sjf+Z
+ jbD/mY2w/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//mJK0/5iStP+fbI3/n2yN/62Amv+t
+ gJr/9+fc//fn3P//68f//+vH///jrP//46z//+Os///jrP//46z//+Os///qyP//6sj///Lj///y4///
+ 8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///
+ 8uP/9+bb//fm2//Yu8D/2LvA//fm2//35tv///Lj///y4///8uP///Lj///rx///68f//+Os///jrP//
+ 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//
+ 46z//+Os///jrP/32Kr/99iq/658m/+ufJv/oWyY/6FsmP+Zk73/mZO9/47I7/+OyO//jsjv/47I7/+O
+ yO//jsjv/47I7/+OyO//mYyu/5mMrv+fbI3/n2yN/59rjaSfa42kAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAn2yNqJ9sjaifbI3/n2yN/5mNsP+ZjbD/jsjv/47I7/+OyO//jsjv/47I7/+O
+ yO//jsjv/47I7/+YkrT/mJK0/59sjf+fbI3/rYCa/62Amv/359z/9+fc///rx///68f//+Os///jrP//
+ 46z//+Os///jrP//46z//+rI///qyP//8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///
+ 8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4//35tv/9+bb/9i7wP/Yu8D/9+bb//fm2///
+ 8uP///Lj///y4///8uP//+vH///rx///46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//
+ 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os//fYqv/32Kr/rnyb/658m/+h
+ bJj/oWyY/5mTvf+Zk73/jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+ZjK7/mYyu/59sjf+f
+ bI3/n2uNpJ9rjaQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnW+QJ51vkCeebY39nm2N/Z9vkP+f
+ b5D/kL7l/5C+5f+OyO//jsjv/47I7/+OyO//jsjv/47I7/+Tr9T/k6/U/59tjf+fbY3/onCQ/6JwkP/t
+ 2NP/7djT///y4///8uP///Lj///y4///6sj//+rI///jrP//46z//+Os///jrP//46z//+Os///qyP//
+ 6sj///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4//u
+ 2tT/7trU/6t8l/+rfJf/n2yN/59sjf+pe5b/qXuW/+zY0v/s2NL///Lj///y4///8uP///Lj///qyP//
+ 6sj//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//
+ 46z//+Os///jrP//46z//+Os///jrP/tzKj/7cyo/6Rvmf+kb5n/oW2Y/6FtmP+Trtb/k67W/47I7/+O
+ yO//jsjv/47I7/+OyO//jsjv/5C95P+QveT/nm6Q/55ukP+ebY39nm2N/ZxqjiScao4kAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAACdb5AnnW+QJ55tjf2ebY39n2+Q/59vkP+QvuX/kL7l/47I7/+OyO//jsjv/47I7/+O
+ yO//jsjv/5Ov1P+Tr9T/n22N/59tjf+icJD/onCQ/+3Y0//t2NP///Lj///y4///8uP///Lj///qyP//
+ 6sj//+Os///jrP//46z//+Os///jrP//46z//+rI///qyP//8uP///Lj///y4///8uP///Lj///y4///
+ 8uP///Lj///y4///8uP///Lj///y4///8uP///Lj/+7a1P/u2tT/q3yX/6t8l/+fbI3/n2yN/6l7lv+p
+ e5b/7NjS/+zY0v//8uP///Lj///y4///8uP//+rI///qyP//46z//+Os///jrP//46z//+Os///jrP//
+ 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os/+3MqP/t
+ zKj/pG+Z/6Rvmf+hbZj/oW2Y/5Ou1v+Trtb/jsjv/47I7/+OyO//jsjv/47I7/+OyO//kL3k/5C95P+e
+ bpD/nm6Q/55tjf2ebY39nGqOJJxqjiQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKBsjJ6gbIyen2yN/59sjf+Y
+ kbX/mJG1/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47G7P+Oxuz/nXeZ/513mf+fbI3/n2yN/9a5vv/W
+ ub7///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///68f//+vH///jrP//46z//+Os///jrP//
+ 46z//+Os///qyP//6sj///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj/+HIyf/h
+ yMn/pHKR/6Rykf+fbI3/n2yN/6Bxi/+gcYv/n2yN/59sjf+kcpD/pHKQ/+HIyf/hyMn///Lj///y4///
+ 8uP///Lj///rx///68f//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//
+ 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP/VrqP/1a6j/6FsmP+hbJj/nnql/556pf+P
+ xu3/j8bt/47I7/+OyO//jsjv/47I7/+OyO//jsjv/5mQtP+ZkLT/n2yN/59sjf+fbI2cn2yNnAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAoGyMnqBsjJ6fbI3/n2yN/5iRtf+YkbX/jsjv/47I7/+OyO//jsjv/47I7/+O
+ yO//jsbs/47G7P+dd5n/nXeZ/59sjf+fbI3/1rm+/9a5vv//8uP///Lj///y4///8uP///Lj///y4///
+ 8uP///Lj///rx///68f//+Os///jrP//46z//+Os///jrP//46z//+rI///qyP//8uP///Lj///y4///
+ 8uP///Lj///y4///8uP///Lj///y4///8uP/4cjJ/+HIyf+kcpH/pHKR/59sjf+fbI3/oHGL/6Bxi/+f
+ bI3/n2yN/6RykP+kcpD/4cjJ/+HIyf//8uP///Lj///y4///8uP//+vH///rx///46z//+Os///jrP//
+ 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//
+ 46z//+Os/9Wuo//VrqP/oWyY/6FsmP+eeqX/nnql/4/G7f+Pxu3/jsjv/47I7/+OyO//jsjv/47I7/+O
+ yO//mZC0/5mQtP+fbI3/n2yN/59sjZyfbI2cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApG2SDqRtkg6gbY32oG2N9p9tjv+f
+ bY7/kbzh/5G84f+OyO//jsjv/47I7/+OyO//jsjv/47I7/+Vn8P/lZ/D/59sjf+fbI3/sICT/7CAk//9
+ 6Mf//ejH///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///68f//+vH///jrP//
+ 46z//+Os///jrP//46z//+Os///qyP//6sj///Lj///y4///8uP///Lj///y4///8uP/1bi9/9W4vf+g
+ bY7/oG2O/59sjf+fbI3/pI2D/6SNg/+uxHP/rsRz/6WPg/+lj4P/n2yN/59sjf+fbY3/n22N/8+vuP/P
+ r7j///Hj///x4///8uP///Lj///rx///68f//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//
+ 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//uGr//7hq/+xgJv/sYCb/6FsmP+h
+ bJj/lqDJ/5agyf+OyO//jsjv/47I7/+OyO//jsjv/47I7/+Qu+H/kLvh/59tjf+fbY3/nmyO9Z5sjvWV
+ apUMlWqVDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAACkbZIOpG2SDqBtjfagbY32n22O/59tjv+RvOH/kbzh/47I7/+OyO//jsjv/47I7/+O
+ yO//jsjv/5Wfw/+Vn8P/n2yN/59sjf+wgJP/sICT//3ox//96Mf///Lj///y4///8uP///Lj///y4///
+ 8uP///Lj///y4///8uP///Lj///rx///68f//+Os///jrP//46z//+Os///jrP//46z//+rI///qyP//
+ 8uP///Lj///y4///8uP///Lj///y4//VuL3/1bi9/6Btjv+gbY7/n2yN/59sjf+kjYP/pI2D/67Ec/+u
+ xHP/pY+D/6WPg/+fbI3/n2yN/59tjf+fbY3/z6+4/8+vuP//8eP///Hj///y4///8uP//+vH///rx///
+ 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//
+ 46z//+Os///jrP/+4av//uGr/7GAm/+xgJv/oWyY/6FsmP+WoMn/lqDJ/47I7/+OyO//jsjv/47I7/+O
+ yO//jsjv/5C74f+Qu+H/n22N/59tjf+ebI71nmyO9ZVqlQyVapUMAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ9tjWKfbY1in2yN/59sjf+a
+ g6b/moOm/47I7/+OyO//jsjv/47I7/+OyO//jsjv/4/F6/+Pxev/nnOV/55zlf+fbI3/n2yN/+XDpP/l
+ w6T//+Os///jrP//6sj//+rI///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///
+ 68f//+vH///jrP//46z//+Os///jrP//46z//+Os///qyP//6sj//O7h//zu4f/Dnq3/w56t/59sjf+f
+ bI3/n22M/59tjP+nm4D/p5uA/6/Kcv+vynL/r8py/6/Kcv+vynL/r8py/6ihff+ooX3/n22N/59tjf+f
+ bI3/n2yN/8Cbqv/Am6r//O3g//zt4P//8uP///Lj///rx///68f//+Os///jrP//46z//+Os///jrP//
+ 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z/48Cm/+PApv+h
+ bJj/oWyY/593ov+fd6L/jsbt/47G7f+OyO//jsjv/47I7/+OyO//jsjv/47I7/+bgqT/m4Kk/59sjf+f
+ bI3/oG2NXqBtjV4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAn22NYp9tjWKfbI3/n2yN/5qDpv+ag6b/jsjv/47I7/+OyO//jsjv/47I7/+O
+ yO//j8Xr/4/F6/+ec5X/nnOV/59sjf+fbI3/5cOk/+XDpP//46z//+Os///qyP//6sj///Lj///y4///
+ 8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///rx///68f//+Os///jrP//46z//+Os///jrP//
+ 46z//+rI///qyP/87uH//O7h/8Oerf/Dnq3/n2yN/59sjf+fbYz/n22M/6ebgP+nm4D/r8py/6/Kcv+v
+ ynL/r8py/6/Kcv+vynL/qKF9/6ihff+fbY3/n22N/59sjf+fbI3/wJuq/8Cbqv/87eD//O3g///y4///
+ 8uP//+vH///rx///46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//
+ 46z//+Os///jrP//46z//+Os///jrP/jwKb/48Cm/6FsmP+hbJj/n3ei/593ov+Oxu3/jsbt/47I7/+O
+ yO//jsjv/47I7/+OyO//jsjv/5uCpP+bgqT/n2yN/59sjf+gbY1eoG2NXgAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACfbI26n2yNup9sjf+f
+ bI3/lKXK/5Slyv+OyO//jsjv/47I7/+OyO//jsjv/47I7/+UqMz/lKjM/59sjf+fbI3/sYOY/7GDmP//
+ 4qz//+Ks///jrP//46z//+Os///jrP//6sj//+rI///y4///8uP///Lj///y4///8uP///Lj///y4///
+ 8uP///Lj///y4///6sj//+rI///jrP//46z//+Os///jrP/32ar/99mq/7aLnP+2i5z/n2yN/59sjf+g
+ cYz/oHGM/6qtev+qrXr/r8py/6/Kcv+vynL/r8py/6/Kcv+vynL/r8py/6/Kcv+vynL/r8py/6uvef+r
+ r3n/oHGL/6Bxi/+fbI3/n2yN/7SJoP+0iaD/9uXb//bl2///8uP///Lj///qyP//6sj//+Os///jrP//
+ 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///irP//
+ 4qz/soKc/7KCnP+hbJj/oWyY/5So0f+UqNH/jsjv/47I7/+OyO//jsjv/47I7/+OyO//lKTI/5SkyP+f
+ bI3/n2yN/55sjraebI62AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAJ9sjbqfbI26n2yN/59sjf+Upcr/lKXK/47I7/+OyO//jsjv/47I7/+O
+ yO//jsjv/5SozP+UqMz/n2yN/59sjf+xg5j/sYOY///irP//4qz//+Os///jrP//46z//+Os///qyP//
+ 6sj///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///qyP//6sj//+Os///jrP//
+ 46z//+Os//fZqv/32ar/touc/7aLnP+fbI3/n2yN/6BxjP+gcYz/qq16/6qtev+vynL/r8py/6/Kcv+v
+ ynL/r8py/6/Kcv+vynL/r8py/6/Kcv+vynL/q695/6uvef+gcYv/oHGL/59sjf+fbI3/tImg/7SJoP/2
+ 5dv/9uXb///y4///8uP//+rI///qyP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//
+ 46z//+Os///jrP//46z//+Os///jrP//46z//+Ks///irP+ygpz/soKc/6FsmP+hbJj/lKjR/5So0f+O
+ yO//jsjv/47I7/+OyO//jsjv/47I7/+UpMj/lKTI/59sjf+fbI3/nmyOtp5sjrYAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJJtkgeSbZIHn2yN9p9sjfaf
+ bY3/n22N/4/A5/+PwOf/jsjv/47I7/+OyO//jsjv/47I7/+OyO//m4Sn/5uEp/+fbI3/n2yN/9q+wv/a
+ vsL//+vH///rx///46z//+Os///jrP//46z//+Os///jrP//6sj//+rI///y4///8uP///Lj///y4///
+ 8uP///Lj///y4///8uP///Lj///y4///68f//+vH/+7Op//uzqf/q3qQ/6t6kP+fbI3/n2yN/6F2iv+h
+ dor/rLh3/6y4d/+vynL/r8py/6/Kcv+vynL/r8py/6/Kcv+vynL/r8py/6/Kcv+vynL/r8py/6/Kcv+v
+ ynL/r8py/6y5d/+suXf/oXeJ/6F3if+fbI3/n2yN/6l7lv+pe5b/7NjS/+zY0v//8uP///Lj///rx///
+ 68f//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//
+ 46z//+Os/9mzpP/Zs6T/oWyY/6FsmP+ch7H/nIex/47I7/+OyO//jsjv/47I7/+OyO//jsjv/5DA5v+Q
+ wOb/n22N/59tjf+fbI31n2yN9ZJtkgeSbZIHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAkm2SB5JtkgefbI32n2yN9p9tjf+fbY3/j8Dn/4/A5/+OyO//jsjv/47I7/+O
+ yO//jsjv/47I7/+bhKf/m4Sn/59sjf+fbI3/2r7C/9q+wv//68f//+vH///jrP//46z//+Os///jrP//
+ 46z//+Os///qyP//6sj///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///rx///
+ 68f/7s6n/+7Op/+repD/q3qQ/59sjf+fbI3/oXaK/6F2iv+suHf/rLh3/6/Kcv+vynL/r8py/6/Kcv+v
+ ynL/r8py/6/Kcv+vynL/r8py/6/Kcv+vynL/r8py/6/Kcv+vynL/rLl3/6y5d/+hd4n/oXeJ/59sjf+f
+ bI3/qXuW/6l7lv/s2NL/7NjS///y4///8uP//+vH///rx///46z//+Os///jrP//46z//+Os///jrP//
+ 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z/2bOk/9mzpP+hbJj/oWyY/5yHsf+c
+ h7H/jsjv/47I7/+OyO//jsjv/47I7/+OyO//kMDm/5DA5v+fbY3/n22N/59sjfWfbI31km2SB5JtkgcA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACfbItAn2yLQJ9sjf+f
+ bI3/nH6f/5x+n/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+Pwun/j8Lp/59tjv+fbY7/onCP/6Jwj//5
+ 6t7/+ere///y4///8uP//+vH///rx///46z//+Os///jrP//46z//+Os///jrP//6sj//+rI///y4///
+ 8uP///Lj///y4///8uP///Lj///y4///8uP/4cjJ/+HIyf+kco//pHKP/59sjf+fbI3/o4GH/6OBh/+t
+ wnX/rcJ1/6/Kcv+vynL/r8py/6/Kcv+twHX/rcB1/6/Kcv+vynL/r8py/6/Kcv+vynL/r8py/63AdP+t
+ wHT/r8py/6/Kcv+vynL/r8py/63Cdf+twnX/o4GH/6OBh/+fbI3/n2yN/6RykP+kcpD/4cjJ/+HIyf//
+ 8uP///Lj///rx///68f//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//
+ 46z//+Os///jrP/42av/+Nmr/6NumP+jbpj/oW6a/6Fumv+Pwur/j8Lq/47I7/+OyO//jsjv/47I7/+O
+ yO//jsjv/5x8nv+cfJ7/n2yN/59sjf+fbY49n22OPQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAJ9si0CfbItAn2yN/59sjf+cfp//nH6f/47I7/+OyO//jsjv/47I7/+O
+ yO//jsjv/4/C6f+Pwun/n22O/59tjv+icI//onCP//nq3v/56t7///Lj///y4///68f//+vH///jrP//
+ 46z//+Os///jrP//46z//+Os///qyP//6sj///Lj///y4///8uP///Lj///y4///8uP///Lj///y4//h
+ yMn/4cjJ/6Ryj/+kco//n2yN/59sjf+jgYf/o4GH/63Cdf+twnX/r8py/6/Kcv+vynL/r8py/63Adf+t
+ wHX/r8py/6/Kcv+vynL/r8py/6/Kcv+vynL/rcB0/63AdP+vynL/r8py/6/Kcv+vynL/rcJ1/63Cdf+j
+ gYf/o4GH/59sjf+fbI3/pHKQ/6RykP/hyMn/4cjJ///y4///8uP//+vH///rx///46z//+Os///jrP//
+ 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os//jZq//42av/o26Y/6NumP+h
+ bpr/oW6a/4/C6v+Pwur/jsjv/47I7/+OyO//jsjv/47I7/+OyO//nHye/5x8nv+fbI3/n2yN/59tjj2f
+ bY49AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAn2uNd59rjXef
+ bI3/n2yN/5eTt/+Xk7f/jsjv/47I7/+OyO//jsjv/47I7/+OyO//k6vP/5Orz/+fbI3/n2yN/7mQpP+5
+ kKT///Lj///y4///8uP///Lj///y4///8uP//+vH///rx///46z//+Os///jrP//46z//+Os///jrP//
+ 6sj//+rI///y4///8uP///Lj///y4//Ss7r/0rO6/6Btjv+gbY7/n2yN/59sjf+lj4T/pY+E/67Hc/+u
+ x3P/r8py/6/Kcv+vyHP/r8hz/6aQgv+mkIL/n2yN/59sjf+qqXv/qql7/6/Kcv+vynL/qaZ8/6mmfP+f
+ bI3/n2yN/6WPgv+lj4L/r8hy/6/Icv+vynL/r8py/67Hc/+ux3P/pY+E/6WPhP+fbI3/n2yN/6Btjv+g
+ bY7/0rO6/9Kzuv//8uP///Lj///rx///68f//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//
+ 46z//+Os///jrP//46z//+Os///jrP+3iJ3/t4id/6FsmP+hbJj/k63W/5Ot1v+OyO//jsjv/47I7/+O
+ yO//jsjv/47I7/+Yk7b/mJO2/59sjf+fbI3/n22OdZ9tjnUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACfa413n2uNd59sjf+fbI3/l5O3/5eTt/+OyO//jsjv/47I7/+O
+ yO//jsjv/47I7/+Tq8//k6vP/59sjf+fbI3/uZCk/7mQpP//8uP///Lj///y4///8uP///Lj///y4///
+ 68f//+vH///jrP//46z//+Os///jrP//46z//+Os///qyP//6sj///Lj///y4///8uP///Lj/9Kzuv/S
+ s7r/oG2O/6Btjv+fbI3/n2yN/6WPhP+lj4T/rsdz/67Hc/+vynL/r8py/6/Ic/+vyHP/ppCC/6aQgv+f
+ bI3/n2yN/6qpe/+qqXv/r8py/6/Kcv+ppnz/qaZ8/59sjf+fbI3/pY+C/6WPgv+vyHL/r8hy/6/Kcv+v
+ ynL/rsdz/67Hc/+lj4T/pY+E/59sjf+fbI3/oG2O/6Btjv/Ss7r/0rO6///y4///8uP//+vH///rx///
+ 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os/7eInf+3
+ iJ3/oWyY/6FsmP+Trdb/k63W/47I7/+OyO//jsjv/47I7/+OyO//jsjv/5iTtv+Yk7b/n2yN/59sjf+f
+ bY51n22OdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ9rjZ+f
+ a42fn2yN/59sjf+Vo8f/laPH/47I7/+OyO//jsjv/47I7/+OyO//jsjv/5eTt/+Xk7f/n2yN/59sjf/Q
+ rKv/0Kyr///y4///8uP///Lj///y4///8uP///Lj///y4///8uP//+vH///rx///46z//+Os///jrP//
+ 46z//+Os///jrP/858f//OfH/8Oerf/Dnq3/n2yN/59sjf+fbYz/n22M/6ebgP+nm4D/r8lz/6/Jc/+v
+ ynL/r8py/67Gc/+uxnP/o4eG/6OHhv+fbI3/n2yN/59sjf+fbI3/p5uA/6ebgP+vynL/r8py/6ebgP+n
+ m4D/n2yN/59sjf+fbI3/n2yN/6OEh/+jhIf/rsR0/67EdP+vynL/r8py/6/Kcv+vynL/qKF9/6ihff+f
+ bY3/n22N/59sjf+fbI3/wJuq/8Cbqv/87eD//O3g///rx///68f//+Os///jrP//46z//+Os///jrP//
+ 46z//+Os///jrP//46z//+Os///jrP//46z/z6ah/8+mof+hbJj/oWyY/5iXwf+Yl8H/jsjv/47I7/+O
+ yO//jsjv/47I7/+OyO//laLH/5Wix/+fbI3/n2yN/59sjZyfbI2cAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAn2uNn59rjZ+fbI3/n2yN/5Wjx/+Vo8f/jsjv/47I7/+O
+ yO//jsjv/47I7/+OyO//l5O3/5eTt/+fbI3/n2yN/9Csq//QrKv///Lj///y4///8uP///Lj///y4///
+ 8uP///Lj///y4///68f//+vH///jrP//46z//+Os///jrP//46z//+Os//znx//858f/w56t/8Oerf+f
+ bI3/n2yN/59tjP+fbYz/p5uA/6ebgP+vyXP/r8lz/6/Kcv+vynL/rsZz/67Gc/+jh4b/o4eG/59sjf+f
+ bI3/n2yN/59sjf+nm4D/p5uA/6/Kcv+vynL/p5uA/6ebgP+fbI3/n2yN/59sjf+fbI3/o4SH/6OEh/+u
+ xHT/rsR0/6/Kcv+vynL/r8py/6/Kcv+ooX3/qKF9/59tjf+fbY3/n2yN/59sjf/Am6r/wJuq//zt4P/8
+ 7eD//+vH///rx///46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP/P
+ pqH/z6ah/6FsmP+hbJj/mJfB/5iXwf+OyO//jsjv/47I7/+OyO//jsjv/47I7/+Vosf/laLH/59sjf+f
+ bI3/n2yNnJ9sjZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACe
+ bIzGnmyMxp9sjf+fbI3/krLX/5Ky1/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+ahaj/moWo/59sjf+f
+ bI3/48Ci/+PAov//6sj//+rI///y4///8uP///Lj///y4///8uP///Lj///y4///8uP//+vH///rx///
+ 46z//+Os//jaqv/42qr/tYeU/7WHlP+fbI3/n2yN/6BxjP+gcYz/qq16/6qtev+vynL/r8py/6/Kcv+v
+ ynL/rb51/62+df+ifIj/onyI/59sjf+fbI3/n2yN/59sjf+fbI3/n2yN/6ebgP+nm4D/r8py/6/Kcv+n
+ m4D/p5uA/59sjf+fbI3/n2yN/59sjf+fbI3/n2yN/6J7if+ie4n/rb92/62/dv+vynL/r8py/6/Kcv+v
+ ynL/qq16/6qtev+gcYz/oHGM/59sjf+fbI3/tYqh/7WKof/46N3/+Ojd///rx///68f//+Os///jrP//
+ 46z//+Os///jrP//46z//+Os///jrP//46z//+Os/+G9pf/hvaX/oWyY/6FsmP+bh7L/m4ey/47I7/+O
+ yO//jsjv/47I7/+OyO//jsjv/5Kw1f+SsNX/n2yN/59sjf+gbY3DoG2NwwAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ5sjMaebIzGn2yN/59sjf+Sstf/krLX/47I7/+O
+ yO//jsjv/47I7/+OyO//jsjv/5qFqP+ahaj/n2yN/59sjf/jwKL/48Ci///qyP//6sj///Lj///y4///
+ 8uP///Lj///y4///8uP///Lj///y4///68f//+vH///jrP//46z/+Nqq//jaqv+1h5T/tYeU/59sjf+f
+ bI3/oHGM/6BxjP+qrXr/qq16/6/Kcv+vynL/r8py/6/Kcv+tvnX/rb51/6J8iP+ifIj/n2yN/59sjf+f
+ bI3/n2yN/59sjf+fbI3/p5uA/6ebgP+vynL/r8py/6ebgP+nm4D/n2yN/59sjf+fbI3/n2yN/59sjf+f
+ bI3/onuJ/6J7if+tv3b/rb92/6/Kcv+vynL/r8py/6/Kcv+qrXr/qq16/6BxjP+gcYz/n2yN/59sjf+1
+ iqH/tYqh//jo3f/46N3//+vH///rx///46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//
+ 46z/4b2l/+G9pf+hbJj/oWyY/5uHsv+bh7L/jsjv/47I7/+OyO//jsjv/47I7/+OyO//krDV/5Kw1f+f
+ bI3/n2yN/6BtjcOgbY3DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAn2yN4J9sjeCfbI3/n2yN/5C94/+QveP/jsjv/47I7/+OyO//jsjv/47I7/+OyO//nXma/515mv+f
+ bI3/n2yN//HRp//x0af//+Os///jrP//6sj//+rI///y4///8uP///Lj///y4///8uP///Lj///y4///
+ 8uP//+vH///rx//Sq53/0qud/59sjf+fbI3/oXeK/6F3iv+suXf/rLl3/6/Kcv+vynL/r8py/6/Kcv+s
+ uHf/rLh3/6B1iv+gdYr/n2yN/59sjf+wgpf/sIKX/8SZmP/EmZj/n2yN/59sjf+nm4D/p5uA/6/Kcv+v
+ ynL/p5uA/6ebgP+fbI3/n2yN/8Sfrf/En63/sIOc/7CDnP+fbI3/n2yN/6F1i/+hdYv/q7d4/6u3eP+v
+ ynL/r8py/6/Kcv+vynL/rLl3/6y5d/+hd4r/oXeK/59sjf+fbI3/0rO6/9Kzuv//8uP///Lj///rx///
+ 68f//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP/vz6j/78+o/6FsmP+hbJj/nnum/557pv+O
+ yO//jsjv/47I7/+OyO//jsjv/47I7/+Qu+L/kLvi/59sjf+fbI3/n2yN3p9sjd4AAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACfbI3gn2yN4J9sjf+fbI3/kL3j/5C94/+O
+ yO//jsjv/47I7/+OyO//jsjv/47I7/+deZr/nXma/59sjf+fbI3/8dGn//HRp///46z//+Os///qyP//
+ 6sj///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///68f//+vH/9Krnf/Sq53/n2yN/59sjf+h
+ d4r/oXeK/6y5d/+suXf/r8py/6/Kcv+vynL/r8py/6y4d/+suHf/oHWK/6B1iv+fbI3/n2yN/7CCl/+w
+ gpf/xJmY/8SZmP+fbI3/n2yN/6ebgP+nm4D/r8py/6/Kcv+nm4D/p5uA/59sjf+fbI3/xJ+t/8Sfrf+w
+ g5z/sIOc/59sjf+fbI3/oXWL/6F1i/+rt3j/q7d4/6/Kcv+vynL/r8py/6/Kcv+suXf/rLl3/6F3iv+h
+ d4r/n2yN/59sjf/Ss7r/0rO6///y4///8uP//+vH///rx///46z//+Os///jrP//46z//+Os///jrP//
+ 46z//+Os/+/PqP/vz6j/oWyY/6FsmP+ee6b/nnum/47I7/+OyO//jsjv/47I7/+OyO//jsjv/5C74v+Q
+ u+L/n2yN/59sjf+fbI3en2yN3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAJ9sje2fbI3tn2yN/59sjf+Px+v/j8fr/47I7/+OyO//jsjv/47I7/+OyO//jsjv/55vkP+e
+ b5D/n2yN/59sjf/53Kr/+dyq///jrP//46z//+Os///jrP//6sj//+rI///y4///8uP///Lj///y4///
+ 8uP///Lj///y4///8uP/z6uq/8+rqv+fbI3/n2yN/6ebgP+nm4D/r8py/6/Kcv+vynL/r8py/6qwef+q
+ sHn/oHGL/6Bxi/+fbI3/n2yN/7iQpP+4kKT/+ere//nq3v/Pq6r/z6uq/59sjf+fbI3/p5uA/6ebgP+v
+ ynL/r8py/6ebgP+nm4D/n2yN/59sjf/Pr7j/z6+4//rs3v/67N7/upKm/7qSpv+fbI3/n2yN/6BwjP+g
+ cIz/qq16/6qtev+vynL/r8py/6/Kcv+vynL/p5uA/6ebgP+fbI3/n2yN/8+vuP/Pr7j///Lj///y4///
+ 8uP///Lj///rx///68f//+Os///jrP//46z//+Os///jrP//46z/+Nqq//jaqv+hbJj/oWyY/6Bzn/+g
+ c5//jsjv/47I7/+OyO//jsjv/47I7/+OyO//j8fq/4/H6v+fbI3/n2yN/6BtjeugbY3rAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAn2yN7Z9sje2fbI3/n2yN/4/H6/+P
+ x+v/jsjv/47I7/+OyO//jsjv/47I7/+OyO//nm+Q/55vkP+fbI3/n2yN//ncqv/53Kr//+Os///jrP//
+ 46z//+Os///qyP//6sj///Lj///y4///8uP///Lj///y4///8uP///Lj///y4//Pq6r/z6uq/59sjf+f
+ bI3/p5uA/6ebgP+vynL/r8py/6/Kcv+vynL/qrB5/6qwef+gcYv/oHGL/59sjf+fbI3/uJCk/7iQpP/5
+ 6t7/+ere/8+rqv/Pq6r/n2yN/59sjf+nm4D/p5uA/6/Kcv+vynL/p5uA/6ebgP+fbI3/n2yN/8+vuP/P
+ r7j/+uze//rs3v+6kqb/upKm/59sjf+fbI3/oHCM/6BwjP+qrXr/qq16/6/Kcv+vynL/r8py/6/Kcv+n
+ m4D/p5uA/59sjf+fbI3/z6+4/8+vuP//8uP///Lj///y4///8uP//+vH///rx///46z//+Os///jrP//
+ 46z//+Os///jrP/42qr/+Nqq/6FsmP+hbJj/oHOf/6Bzn/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+P
+ x+r/j8fq/59sjf+fbI3/oG2N66BtjesAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAACfbI35n2yN+Z9sjf+fbI3/kNr1/5Da9f+P0fP/j9Hz/47K8P+OyvD/jsjv/47I7/+f
+ bY7/n22O/59sjf+fbI3//uGs//7hrP//46z//+Os///jrP//46z//+Os///jrP//6sj//+rI///y4///
+ 8uP///Lj///y4///8uP///Lj/8+vuP/Pr7j/n2yN/59sjf+nm4D/p5uA/6/Kcv+vynL/qKV8/6ilfP+g
+ bY3/oG2N/59sjf+fbI3/w56t/8Oerf/97+L//e/i///y4///8uP/z6+4/8+vuP+fbI3/n2yN/6ebgP+n
+ m4D/r8py/6/Kcv+nm4D/p5uA/59sjf+fbI3/z6+4/8+vuP//8uP///Lj//3w4f/98OH/xqKw/8aisP+f
+ bI3/n2yN/59tjP+fbYz/qKJ9/6iiff+vynL/r8py/6ebgP+nm4D/n2yN/59sjf/Pr7j/z6+4///y4///
+ 8uP///Lj///y4///8uP///Lj///rx///68f//+Os///jrP//46z//+Os//zgq//84Kv/oWyY/6FsmP+g
+ b5v/oG+b/47I7/+OyO//jsrw/47K8P+P0vT/j9L0/4/a9v+P2vb/n2yN/59sjf+fbI34n2yN+AAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ9sjfmfbI35n2yN/59sjf+Q
+ 2vX/kNr1/4/R8/+P0fP/jsrw/47K8P+OyO//jsjv/59tjv+fbY7/n2yN/59sjf/+4az//uGs///jrP//
+ 46z//+Os///jrP//46z//+Os///qyP//6sj///Lj///y4///8uP///Lj///y4///8uP/z6+4/8+vuP+f
+ bI3/n2yN/6ebgP+nm4D/r8py/6/Kcv+opXz/qKV8/6Btjf+gbY3/n2yN/59sjf/Dnq3/w56t//3v4v/9
+ 7+L///Lj///y4//Pr7j/z6+4/59sjf+fbI3/p5uA/6ebgP+vynL/r8py/6ebgP+nm4D/n2yN/59sjf/P
+ r7j/z6+4///y4///8uP//fDh//3w4f/GorD/xqKw/59sjf+fbI3/n22M/59tjP+oon3/qKJ9/6/Kcv+v
+ ynL/p5uA/6ebgP+fbI3/n2yN/8+vuP/Pr7j///Lj///y4///8uP///Lj///y4///8uP//+vH///rx///
+ 46z//+Os///jrP//46z//OCr//zgq/+hbJj/oWyY/6Bvm/+gb5v/jsjv/47I7/+OyvD/jsrw/4/S9P+P
+ 0vT/j9r2/4/a9v+fbI3/n2yN/59sjfifbI34AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAn2yN+Z9sjfmfbI3/n2yN/5Db9v+Q2/b/j935/4/d+f+P3fn/j935/4/c+P+P
+ 3Pj/n2yN/59sjf+fbI3/n2yN//3hq//94av//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//
+ 6sj//+rI///y4///8uP///Lj///y4//Pr7j/z6+4/59sjf+fbI3/ppt//6abf/+nm4D/p5uA/59sjf+f
+ bI3/n22N/59tjf/Pq6v/z6ur///x4///8eP///Lj///y4///8uP///Lj/8+vuP/Pr7j/n2yN/59sjf+n
+ m4D/p5uA/6/Kcv+vynL/p5uA/6ebgP+fbI3/n2yN/8+rq//Pq6v///Lj///y4///8uP///Lj///y4///
+ 8uP/1bi9/9W4vf+fbY3/n22N/59sjf+fbI3/pZSB/6WUgf+nmoD/p5qA/59sjf+fbI3/z6+4/8+vuP//
+ 8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///rx///68f//+Os///jrP/94az//eGs/6FsmP+h
+ bJj/oHCb/6Bwm/+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P2vb/j9r2/59sjf+fbI3/n2yN+J9sjfgA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACfbI35n2yN+Z9sjf+f
+ bI3/kNv2/5Db9v+P3fn/j935/4/d+f+P3fn/j9z4/4/c+P+fbI3/n2yN/59sjf+fbI3//eGr//3hq///
+ 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///qyP//6sj///Lj///y4///8uP///Lj/8+vuP/P
+ r7j/n2yN/59sjf+mm3//ppt//6ebgP+nm4D/n2yN/59sjf+fbY3/n22N/8+rq//Pq6v///Hj///x4///
+ 8uP///Lj///y4///8uP/z6+4/8+vuP+fbI3/n2yN/6ebgP+nm4D/r8py/6/Kcv+nm4D/p5uA/59sjf+f
+ bI3/z6ur/8+rq///8uP///Lj///y4///8uP///Lj///y4//VuL3/1bi9/59tjf+fbY3/n2yN/59sjf+l
+ lIH/pZSB/6eagP+nmoD/n2yN/59sjf/Pr7j/z6+4///y4///8uP///Lj///y4///8uP///Lj///y4///
+ 8uP//+vH///rx///46z//+Os//3hrP/94az/oWyY/6FsmP+gcJv/oHCb/4/d+f+P3fn/j935/4/d+f+P
+ 3fn/j935/4/a9v+P2vb/n2yN/59sjf+fbI34n2yN+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAJ9sje2fbI3tn2yN/59sjf+Q1fH/kNXx/4/d+f+P3fn/j935/4/d+f+P
+ 3fn/j935/55wkf+ecJH/n2yN/59sjf/63av/+t2r///jrP//46z//+Os///jrP//46z//+Os///jrP//
+ 46z//+Os///jrP//6sj//+rI///y4///8uP/z6+4/8+vuP+fbI3/n2yN/6Bxi/+gcYv/n2yN/59sjf+i
+ b47/om+O/925of/duaH//+Os///jrP//6sj//+rI///y4///8uP///Lj///y4//Pr7j/z6+4/59sjf+f
+ bI3/p5uA/6ebgP+vynL/r8py/6ebgP+nm4D/n2yN/59sjf/Pp53/z6ed///qyP//6sj///Lj///y4///
+ 8uP///Lj///y4///8uP/3MHD/9zBw/+hb4//oW+P/59sjf+fbI3/oHGL/6Bxi/+fbI3/n2yN/8+vuP/P
+ r7j///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///rx///68f/+Nqq//jaqv+h
+ bJj/oWyY/6B1oP+gdaD/j935/4/d+f+P3fn/j935/4/d+f+P3fn/kNTw/5DU8P+fbI3/n2yN/6Btjeug
+ bY3rAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAn2yN7Z9sje2f
+ bI3/n2yN/5DV8f+Q1fH/j935/4/d+f+P3fn/j935/4/d+f+P3fn/nnCR/55wkf+fbI3/n2yN//rdq//6
+ 3av//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///qyP//6sj///Lj///y4//P
+ r7j/z6+4/59sjf+fbI3/oHGL/6Bxi/+fbI3/n2yN/6Jvjv+ib47/3bmh/925of//46z//+Os///qyP//
+ 6sj///Lj///y4///8uP///Lj/8+vuP/Pr7j/n2yN/59sjf+nm4D/p5uA/6/Kcv+vynL/p5uA/6ebgP+f
+ bI3/n2yN/8+nnf/Pp53//+rI///qyP//8uP///Lj///y4///8uP///Lj///y4//cwcP/3MHD/6Fvj/+h
+ b4//n2yN/59sjf+gcYv/oHGL/59sjf+fbI3/z6+4/8+vuP//8uP///Lj///y4///8uP///Lj///y4///
+ 8uP///Lj///y4///8uP//+vH///rx//42qr/+Nqq/6FsmP+hbJj/oHWg/6B1oP+P3fn/j935/4/d+f+P
+ 3fn/j935/4/d+f+Q1PD/kNTw/59sjf+fbI3/oG2N66BtjesAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACfbI3gn2yN4J9sjf+fbI3/kc/s/5HP7P+P3fn/j935/4/d+f+P
+ 3fn/j935/4/d+f+de5z/nXuc/59sjf+fbI3/8dGn//HRp///46z//+Os///jrP//46z//+Os///jrP//
+ 46z//+Os///jrP//46z//+Os///jrP//6sj//+rI/8+vuP/Pr7j/n2yN/59sjf+fbI3/n2yN/6V1k/+l
+ dZP/58u4/+fLuP//46z//+Os///jrP//46z//+Os///jrP//6sj//+rI///y4///8uP/z6+4/8+vuP+f
+ bI3/n2yN/6ebgP+nm4D/r8py/6/Kcv+nm4D/p5uA/59sjf+fbI3/z6ed/8+nnf//46z//+Os///qyP//
+ 6sj///Lj///y4///8uP///Lj///y4///8uP/6dPP/+nTz/+nd5T/p3eU/59sjf+fbI3/n2yN/59sjf/P
+ r7j/z6+4///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj/+/Vv//v
+ 1b//oWyY/6FsmP+efqf/nn6n/4/d+f+P3fn/j935/4/d+f+P3fn/j935/5HO6/+Rzuv/n2yN/59sjf+f
+ bI3en2yN3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ9sjeCf
+ bI3gn2yN/59sjf+Rz+z/kc/s/4/d+f+P3fn/j935/4/d+f+P3fn/j935/517nP+de5z/n2yN/59sjf/x
+ 0af/8dGn///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///qyP//
+ 6sj/z6+4/8+vuP+fbI3/n2yN/59sjf+fbI3/pXWT/6V1k//ny7j/58u4///jrP//46z//+Os///jrP//
+ 46z//+Os///qyP//6sj///Lj///y4//Pr7j/z6+4/59sjf+fbI3/p5uA/6ebgP+vynL/r8py/6ebgP+n
+ m4D/n2yN/59sjf/Pp53/z6ed///jrP//46z//+rI///qyP//8uP///Lj///y4///8uP///Lj///y4//p
+ 08//6dPP/6d3lP+nd5T/n2yN/59sjf+fbI3/n2yN/8+vuP/Pr7j///Lj///y4///8uP///Lj///y4///
+ 8uP///Lj///y4///8uP///Lj///y4///8uP/79W//+/Vv/+hbJj/oWyY/55+p/+efqf/j935/4/d+f+P
+ 3fn/j935/4/d+f+P3fn/kc7r/5HO6/+fbI3/n2yN/59sjd6fbI3eAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnmyMxp5sjMafbI3/n2yN/5PB3v+Twd7/j935/4/d+f+P
+ 3fn/j935/4/d+f+P3fn/m4io/5uIqP+fbI3/n2yN/+PAov/jwKL//+Os///jrP//46z//+Os///jrP//
+ 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP/Tsa3/07Gt/59sjf+fbI3/rH6Y/6x+mP/w
+ 3dX/8N3V///y4///8uP//+vH///rx///46z//+Os///jrP//46z//+Os///jrP//6sj//+rI/8+vuP/P
+ r7j/n2yN/59sjf+nm4D/p5uA/6/Kcv+vynL/p5uA/6ebgP+fbI3/n2yN/8+nnf/Pp53//+Os///jrP//
+ 46z//+Os///qyP//6sj///Lj///y4///8uP///Lj///y4///8uP/79zV/+/c1f+rfJf/q3yX/59sjf+f
+ bI3/0bK6/9Gyuv//8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4//i
+ yMz/4sjM/6FsmP+hbJj/m461/5uOtf+P3fn/j935/4/d+f+P3fn/j935/4/d+f+TwN3/k8Dd/59sjf+f
+ bI3/oG2Nw6BtjcMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACe
+ bIzGnmyMxp9sjf+fbI3/k8He/5PB3v+P3fn/j935/4/d+f+P3fn/j935/4/d+f+biKj/m4io/59sjf+f
+ bI3/48Ci/+PAov//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//
+ 46z//+Os/9Oxrf/Tsa3/n2yN/59sjf+sfpj/rH6Y//Dd1f/w3dX///Lj///y4///68f//+vH///jrP//
+ 46z//+Os///jrP//46z//+Os///qyP//6sj/z6+4/8+vuP+fbI3/n2yN/6ebgP+nm4D/r8py/6/Kcv+n
+ m4D/p5uA/59sjf+fbI3/z6ed/8+nnf//46z//+Os///jrP//46z//+rI///qyP//8uP///Lj///y4///
+ 8uP///Lj///y4//v3NX/79zV/6t8l/+rfJf/n2yN/59sjf/Rsrr/0bK6///y4///8uP///Lj///y4///
+ 8uP///Lj///y4///8uP///Lj///y4///8uP///Lj/+LIzP/iyMz/oWyY/6FsmP+bjrX/m461/4/d+f+P
+ 3fn/j935/4/d+f+P3fn/j935/5PA3f+TwN3/n2yN/59sjf+gbY3DoG2NwwAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ9rjZ+fa42fn2yN/59sjf+VsM7/lbDO/4/d+f+P
+ 3fn/j935/4/d+f+P3fn/j935/5icu/+YnLv/n2yN/59sjf/Qqp3/0Kqd///jrP//46z//+Os///jrP//
+ 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z/+Nuq//jbqv/Usq3/1LKt//fn3P/3
+ 59z///Lj///y4///8uP///Lj///y4///8uP//+vH///rx///46z//+Os///jrP//46z//+Os///jrP/P
+ q6v/z6ur/59sjf+fbI3/p5uA/6ebgP+vynL/r8py/6ebgP+nm4D/n2yN/59sjf/Pq6r/z6uq///jrP//
+ 46z//+Os///jrP//46z//+Os///qyP//6sj///Lj///y4///8uP///Lj///y4///8uP/9+bb//fm2//V
+ uL3/1bi9//jo3f/46N3///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///
+ 8uP/z6+9/8+vvf+hbJj/oWyY/5igxf+YoMX/j935/4/d+f+P3fn/j935/4/d+f+P3fn/lq/N/5avzf+f
+ bI3/n2yN/59sjZyfbI2cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAn2uNn59rjZ+fbI3/n2yN/5Wwzv+VsM7/j935/4/d+f+P3fn/j935/4/d+f+P3fn/mJy7/5icu/+f
+ bI3/n2yN/9Cqnf/Qqp3//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//
+ 46z//+Os///jrP/426r/+Nuq/9Syrf/Usq3/9+fc//fn3P//8uP///Lj///y4///8uP///Lj///y4///
+ 68f//+vH///jrP//46z//+Os///jrP//46z//+Os/8+rq//Pq6v/n2yN/59sjf+nm4D/p5uA/6/Kcv+v
+ ynL/p5uA/6ebgP+fbI3/n2yN/8+rqv/Pq6r//+Os///jrP//46z//+Os///jrP//46z//+rI///qyP//
+ 8uP///Lj///y4///8uP///Lj///y4//35tv/9+bb/9W4vf/VuL3/+Ojd//jo3f//8uP///Lj///y4///
+ 8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4//Pr73/z6+9/6FsmP+hbJj/mKDF/5igxf+P
+ 3fn/j935/4/d+f+P3fn/j935/4/d+f+Wr83/lq/N/59sjf+fbI3/n2yNnJ9sjZwAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACfbIx4n2yMeJ9sjf+fbI3/mJy7/5icu/+P
+ 3fn/j935/4/d+f+P3fn/j935/4/d+f+UtNL/lLTS/59sjf+fbI3/uYyW/7mMlv//46z//+Os///jrP//
+ 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//
+ 6sj//+rI///y4///8uP///Lj///y4///8uP///Lj///y4///8uP//+vH///rx///46z//+Os///jrP//
+ 46z/z6ed/8+nnf+fbI3/n2yN/6ebgP+nm4D/r8py/6/Kcv+nm4D/p5uA/59sjf+fbI3/z6+4/8+vuP//
+ 68f//+vH///jrP//46z//+Os///jrP//46z//+Os///qyP//6sj///Lj///y4///8uP///Lj///y4///
+ 8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///
+ 8uP///Lj/7iNqv+4jar/oWyY/6FsmP+Uu9z/lLvc/4/d+f+P3fn/j935/4/d+f+P3fn/j935/5mcuv+Z
+ nLr/n2yN/59sjf+gbIx2oGyMdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAJ9sjHifbIx4n2yN/59sjf+YnLv/mJy7/4/d+f+P3fn/j935/4/d+f+P3fn/j935/5S00v+U
+ tNL/n2yN/59sjf+5jJb/uYyW///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//
+ 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///qyP//6sj///Lj///y4///8uP///Lj///y4///
+ 8uP///Lj///y4///68f//+vH///jrP//46z//+Os///jrP/Pp53/z6ed/59sjf+fbI3/p5uA/6ebgP+v
+ ynL/r8py/6ebgP+nm4D/n2yN/59sjf/Pr7j/z6+4///rx///68f//+Os///jrP//46z//+Os///jrP//
+ 46z//+rI///qyP//8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///
+ 8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP/uI2q/7iNqv+hbJj/oWyY/5S73P+U
+ u9z/j935/4/d+f+P3fn/j935/4/d+f+P3fn/mZy6/5mcuv+fbI3/n2yN/6BsjHagbIx2AAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoW6NQaFujUGfbI3/n2yN/5yCof+c
+ gqH/j935/4/d+f+P3fn/j935/4/d+f+P3fn/kdLv/5HS7/+fbY7/n22O/6Jvjv+ib47/+dyq//ncqv//
+ 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//
+ 46z//+Os///jrP//6sj//+rI///y4///8uP///Lj///y4///8uP///Lj///y4///8uP//+vH///rx///
+ 46z//+Os/8+nnf/Pp53/n2yN/59sjf+nm4D/p5uA/6/Kcv+vynL/p5uA/6ebgP+fbI3/n2yN/8+vuP/P
+ r7j///Lj///y4///68f//+vH///jrP//46z//+Os///jrP//46z//+Os///qyP//6sj///Lj///y4///
+ 8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///
+ 8uP/+Ojd//jo3f+jb5n/o2+Z/6Fumv+hbpr/kNbz/5DW8/+P3fn/j935/4/d+f+P3fn/j935/4/d+f+c
+ gKD/nICg/59sjf+fbI3/n22OPZ9tjj0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAChbo1BoW6NQZ9sjf+fbI3/nIKh/5yCof+P3fn/j935/4/d+f+P3fn/j935/4/d+f+R
+ 0u//kdLv/59tjv+fbY7/om+O/6Jvjv/53Kr/+dyq///jrP//46z//+Os///jrP//46z//+Os///jrP//
+ 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///qyP//6sj///Lj///y4///
+ 8uP///Lj///y4///8uP///Lj///y4///68f//+vH///jrP//46z/z6ed/8+nnf+fbI3/n2yN/6ebgP+n
+ m4D/r8py/6/Kcv+nm4D/p5uA/59sjf+fbI3/z6+4/8+vuP//8uP///Lj///rx///68f//+Os///jrP//
+ 46z//+Os///jrP//46z//+rI///qyP//8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///
+ 8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4//46N3/+Ojd/6Nvmf+jb5n/oW6a/6Fumv+Q
+ 1vP/kNbz/4/d+f+P3fn/j935/4/d+f+P3fn/j935/5yAoP+cgKD/n2yN/59sjf+fbY49n22OPQAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJJtkgeSbZIHn2yN9p9sjfaf
+ bY3/n22N/5DU8P+Q1PD/j935/4/d+f+P3fn/j935/4/d+f+P3fn/m4am/5uGpv+fbI3/n2yN/9q2oP/a
+ tqD//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//
+ 46z//+Os///jrP//46z//+Os///jrP//6sj//+rI///y4///8uP///Lj///y4///8uP///Lj///y4///
+ 8uP//+vH///rx//Pp53/z6ed/59sjf+fbI3/p5uA/6ebgP+vynL/r8py/6ebgP+nm4D/n2yN/59sjf/P
+ r7j/z6+4///y4///8uP///Lj///y4///68f//+vH///jrP//46z//+Os///jrP//46z//+Os///qyP//
+ 6sj///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///
+ 8uP///Lj/9m8xP/ZvMT/oWyY/6FsmP+cjLP/nIyz/4/d+f+P3fn/j935/4/d+f+P3fn/j935/5HT8P+R
+ 0/D/n22N/59tjf+fbI31n2yN9ZJtkgeSbZIHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAkm2SB5JtkgefbI32n2yN9p9tjf+fbY3/kNTw/5DU8P+P3fn/j935/4/d+f+P
+ 3fn/j935/4/d+f+bhqb/m4am/59sjf+fbI3/2rag/9q2oP//46z//+Os///jrP//46z//+Os///jrP//
+ 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///qyP//
+ 6sj///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///68f//+vH/8+nnf/Pp53/n2yN/59sjf+n
+ m4D/p5uA/6/Kcv+vynL/p5uA/6ebgP+fbI3/n2yN/8+vuP/Pr7j///Lj///y4///8uP///Lj///rx///
+ 68f//+Os///jrP//46z//+Os///jrP//46z//+rI///qyP//8uP///Lj///y4///8uP///Lj///y4///
+ 8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP/2bzE/9m8xP+hbJj/oWyY/5yMs/+c
+ jLP/j935/4/d+f+P3fn/j935/4/d+f+P3fn/kdPw/5HT8P+fbY3/n22N/59sjfWfbI31km2SB5JtkgcA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKBsjLug
+ bIy7n2yN/59sjf+Vs9D/lbPQ/4/d+f+P3fn/j935/4/d+f+P3fn/j935/5WuzP+Vrsz/n2yN/59sjf+y
+ g5P/soOT///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//
+ 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//6sj//+rI///y4///8uP///Lj///y4///
+ 8uP///Lj///y4///8uP/z6uq/8+rqv+fbI3/n2yN/6ebgP+nm4D/r8py/6/Kcv+nm4D/p5uA/59sjf+f
+ bI3/z6+4/8+vuP//8uP///Lj///y4///8uP///Lj///y4///68f//+vH///jrP//46z//+Os///jrP//
+ 46z//+Os///qyP//6sj///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///
+ 8uP///Hj///x4/+yhab/soWm/6FsmP+hbJj/lbXW/5W11v+P3fn/j935/4/d+f+P3fn/j935/4/d+f+V
+ sc//lbHP/59sjf+fbI3/n22Nt59tjbcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoGyMu6BsjLufbI3/n2yN/5Wz0P+Vs9D/j935/4/d+f+P
+ 3fn/j935/4/d+f+P3fn/la7M/5WuzP+fbI3/n2yN/7KDk/+yg5P//+Os///jrP//46z//+Os///jrP//
+ 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//
+ 46z//+Os///qyP//6sj///Lj///y4///8uP///Lj///y4///8uP///Lj///y4//Pq6r/z6uq/59sjf+f
+ bI3/p5uA/6ebgP+vynL/r8py/6ebgP+nm4D/n2yN/59sjf/Pr7j/z6+4///y4///8uP///Lj///y4///
+ 8uP///Lj///rx///68f//+Os///jrP//46z//+Os///jrP//46z//+rI///qyP//8uP///Lj///y4///
+ 8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8eP///Hj/7KFpv+yhab/oWyY/6FsmP+V
+ tdb/lbXW/4/d+f+P3fn/j935/4/d+f+P3fn/j935/5Wxz/+Vsc//n2yN/59sjf+fbY23n22NtwAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACg
+ bI5joGyOY59sjf+fbI3/m4mp/5uJqf+P3fn/j935/4/d+f+P3fn/j935/4/d+f+Q2PT/kNj0/550lf+e
+ dJX/n2yN/59sjf/lw6P/5cOj///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//
+ 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//6sj//+rI///y4///
+ 8uP///Lj///y4///8uP///Lj/8+vuP/Pr7j/n2yN/59sjf+nm4D/p5uA/6/Kcv+vynL/p5uA/6ebgP+f
+ bI3/n2yN/8+vuP/Pr7j///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///68f//+vH///jrP//
+ 46z//+Os///jrP//46z//+Os///qyP//6sj///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///
+ 8uP///Lj/+TMzv/kzM7/oWyY/6FsmP+feKL/n3ii/5Db9/+Q2/f/j935/4/d+f+P3fn/j935/4/d+f+P
+ 3fn/m4io/5uIqP+fbI3/n2yN/55rjl+ea45fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKBsjmOgbI5jn2yN/59sjf+bian/m4mp/4/d+f+P
+ 3fn/j935/4/d+f+P3fn/j935/5DY9P+Q2PT/nnSV/550lf+fbI3/n2yN/+XDo//lw6P//+Os///jrP//
+ 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//
+ 46z//+Os///jrP//46z//+Os///qyP//6sj///Lj///y4///8uP///Lj///y4///8uP/z6+4/8+vuP+f
+ bI3/n2yN/6ebgP+nm4D/r8py/6/Kcv+nm4D/p5uA/59sjf+fbI3/z6+4/8+vuP//8uP///Lj///y4///
+ 8uP///Lj///y4///8uP///Lj///rx///68f//+Os///jrP//46z//+Os///jrP//46z//+rI///qyP//
+ 8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP/5MzO/+TMzv+hbJj/oWyY/594ov+f
+ eKL/kNv3/5Db9/+P3fn/j935/4/d+f+P3fn/j935/4/d+f+biKj/m4io/59sjf+fbI3/nmuOX55rjl8A
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAApG2SDqRtkg6fbI31n2yN9Z9tjv+fbY7/kc7r/5HO6/+P3fn/j935/4/d+f+P3fn/j935/4/d+f+X
+ o8L/l6PC/59sjf+fbI3/sYOS/7GDkv/+4az//uGs///jrP//46z//+Os///jrP//46z//+Os///jrP//
+ 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//
+ 6sj//+rI///y4///8uP///Lj///y4//Pr7j/z6+4/59sjf+fbI3/p5uA/6ebgP+vynL/r8py/6ebgP+n
+ m4D/n2yN/59sjf/Pq6v/z6ur///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///
+ 68f//+vH///jrP//46z//+Os///jrP//46z//+Os///qyP//6sj///Lj///y4///8uP///Lj///y4///
+ 8uP//vDh//7w4f+yhKX/soSl/6FsmP+hbJj/l6rO/5eqzv+P3fn/j935/4/d+f+P3fn/j935/4/d+f+R
+ zer/kc3q/59tjf+fbY3/nmuN9Z5rjfWddokNnXaJDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkbZIOpG2SDp9sjfWfbI31n22O/59tjv+R
+ zuv/kc7r/4/d+f+P3fn/j935/4/d+f+P3fn/j935/5ejwv+Xo8L/n2yN/59sjf+xg5L/sYOS//7hrP/+
+ 4az//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//
+ 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///qyP//6sj///Lj///y4///8uP///Lj/8+vuP/P
+ r7j/n2yN/59sjf+nm4D/p5uA/6/Kcv+vynL/p5uA/6ebgP+fbI3/n2yN/8+rq//Pq6v///Lj///y4///
+ 8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///rx///68f//+Os///jrP//46z//+Os///jrP//
+ 46z//+rI///qyP//8uP///Lj///y4///8uP///Lj///y4//+8OH//vDh/7KEpf+yhKX/oWyY/6FsmP+X
+ qs7/l6rO/4/d+f+P3fn/j935/4/d+f+P3fn/j935/5HN6v+Rzer/n22N/59tjf+ea431nmuN9Z12iQ2d
+ dokNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAoGyMnqBsjJ6fbI3/n2yN/5iauf+Ymrn/j935/4/d+f+P3fn/j935/4/d+f+P
+ 3fn/j9j0/4/Y9P+dd5f/nXeX/59sjf+fbI3/1rCe/9awnv//46z//+Os///jrP//46z//+Os///jrP//
+ 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//
+ 46z//+Os///jrP//6sj//+rI///y4///8uP/z6+4/8+vuP+fbI3/n2yN/6KChv+igob/p5iA/6eYgP+i
+ gob/ooKG/59sjf+fbI3/z6ed/8+nnf//6sj//+rI///y4///8uP///Lj///y4///8uP///Lj///y4///
+ 8uP///Lj///y4///68f//+vH///jrP//46z//+Os///jrP//46z//+Os///qyP//6sj///Lj///y4///
+ 8uP///Lj/9W3wf/Vt8H/oWyY/6FsmP+efKb/nnym/4/a9v+P2vb/j935/4/d+f+P3fn/j935/4/d+f+P
+ 3fn/mZm4/5mZuP+fbI3/n2yN/59sjZyfbI2cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgbIyeoGyMnp9sjf+f
+ bI3/mJq5/5iauf+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P2PT/j9j0/513l/+dd5f/n2yN/59sjf/W
+ sJ7/1rCe///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//
+ 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///qyP//6sj///Lj///y4//P
+ r7j/z6+4/59sjf+fbI3/ooKG/6KChv+nmID/p5iA/6KChv+igob/n2yN/59sjf/Pp53/z6ed///qyP//
+ 6sj///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///rx///68f//+Os///jrP//
+ 46z//+Os///jrP//46z//+rI///qyP//8uP///Lj///y4///8uP/1bfB/9W3wf+hbJj/oWyY/558pv+e
+ fKb/j9r2/4/a9v+P3fn/j935/4/d+f+P3fn/j935/4/d+f+Zmbj/mZm4/59sjf+fbI3/n2yNnJ9sjZwA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAJ1vkCedb5Ann2yN/Z9sjf2fcJH/n3CR/5DR7v+Q0e7/j935/4/d+f+P
+ 3fn/j935/4/d+f+P3fn/lbXT/5W10/+fbI3/n2yN/6Jwjv+icI7/7s6n/+7Op///46z//+Os///jrP//
+ 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//
+ 46z//+Os///jrP//46z//+Os///jrP//6sj//+rI/9Gyuv/Rsrr/n2yN/59sjf+fbI3/n2yN/59sjf+f
+ bI3/n2yN/59sjf+fbI3/n2yN/9Krnf/Sq53//+Os///jrP//6sj//+rI///y4///8uP///Lj///y4///
+ 8uP///Lj///y4///8uP///Lj///y4///68f//+vH///jrP//46z//+Os///jrP//46z//+Os///qyP//
+ 6sj/7djV/+3Y1f+kcZr/pHGa/6FsmP+hbJj/lLzd/5S83f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+Q
+ 0e3/kNHt/59vkP+fb5D/n2yN/J9sjfyfbooln26KJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnW+QJ51vkCef
+ bI39n2yN/Z9wkf+fcJH/kNHu/5DR7v+P3fn/j935/4/d+f+P3fn/j935/4/d+f+VtdP/lbXT/59sjf+f
+ bI3/onCO/6Jwjv/uzqf/7s6n///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//
+ 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///qyP//
+ 6sj/0bK6/9Gyuv+fbI3/n2yN/59sjf+fbI3/n2yN/59sjf+fbI3/n2yN/59sjf+fbI3/0qud/9Krnf//
+ 46z//+Os///qyP//6sj///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///rx///
+ 68f//+Os///jrP//46z//+Os///jrP//46z//+rI///qyP/t2NX/7djV/6Rxmv+kcZr/oWyY/6FsmP+U
+ vN3/lLzd/4/d+f+P3fn/j935/4/d+f+P3fn/j935/5DR7f+Q0e3/n2+Q/59vkP+fbI38n2yN/J9uiiWf
+ boolAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ5tjKmebYypn2yN/59sjf+ZlbX/mZW1/4/d+f+P
+ 3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/mZOx/5mTsf+fbI3/n2yN/65+kf+ufpH/99mq//fZqv//
+ 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//
+ 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP/44cT/+OHE/9O1vP/Ttbz/0rO7/9Kzu//S
+ s7v/0rO7/9Kzu//Ss7v/07Gt/9Oxrf/42qr/+Nqq///jrP//46z//+Os///jrP//6sj//+rI///y4///
+ 8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///6sj//+rI///jrP//46z//+Os///jrP/3
+ 2av/99mr/65+n/+ufp//oWyY/6FsmP+ZnMD/mZzA/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P
+ 3fn/mZS0/5mUtP+fbI3/n2yN/59sjaWfbI2lAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAnm2MqZ5tjKmfbI3/n2yN/5mVtf+ZlbX/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+Z
+ k7H/mZOx/59sjf+fbI3/rn6R/65+kf/32ar/99mq///jrP//46z//+Os///jrP//46z//+Os///jrP//
+ 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//
+ 46z//+Os//jhxP/44cT/07W8/9O1vP/Ss7v/0rO7/9Kzu//Ss7v/0rO7/9Kzu//Tsa3/07Gt//jaqv/4
+ 2qr//+Os///jrP//46z//+Os///qyP//6sj///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///
+ 8uP///Lj///qyP//6sj//+Os///jrP//46z//+Os//fZq//32av/rn6f/65+n/+hbJj/oWyY/5mcwP+Z
+ nMD/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+ZlLT/mZS0/59sjf+fbI3/n2yNpZ9sjaUA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACca4wfnGuMH59sjvWfbI71n22N/59tjf+U
+ wd7/lMHe/4/d+f+P3fn/j935/4/d+f+P3fn/j935/5DW8v+Q1vL/nH+e/5x/nv+fbI3/n2yN/7SGlP+0
+ hpT/+t2r//rdq///46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//
+ 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//6sj//+rI///y4///
+ 8uP///Lj///y4///8uP///Lj///y4///8uP//+vH///rx///46z//+Os///jrP//46z//+Os///jrP//
+ 6sj//+rI///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///68f//+vH//vdq//7
+ 3av/tYWc/7WFnP+hbJj/oWyY/52DrP+dg6z/kNn2/5DZ9v+P3fn/j935/4/d+f+P3fn/j935/4/d+f+T
+ wd7/k8He/59tjf+fbY3/oG6O+aBujvmibIshomyLIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAJxrjB+ca4wfn2yO9Z9sjvWfbY3/n22N/5TB3v+Uwd7/j935/4/d+f+P3fn/j935/4/d+f+P
+ 3fn/kNby/5DW8v+cf57/nH+e/59sjf+fbI3/tIaU/7SGlP/63av/+t2r///jrP//46z//+Os///jrP//
+ 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//
+ 46z//+Os///jrP//46z//+Os///qyP//6sj///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///
+ 68f//+vH///jrP//46z//+Os///jrP//46z//+Os///qyP//6sj///Lj///y4///8uP///Lj///y4///
+ 8uP///Lj///y4///8uP///Lj///rx///68f/+92r//vdq/+1hZz/tYWc/6FsmP+hbJj/nYOs/52DrP+Q
+ 2fb/kNn2/4/d+f+P3fn/j935/4/d+f+P3fn/j935/5PB3v+Twd7/n22N/59tjf+gbo75oG6O+aJsiyGi
+ bIshAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACebY58nm2OfJ9sjf+f
+ bI3/nH2d/5x9nf+Q2PP/kNjz/4/d+f+P3fn/j935/4/d+f+P3fn/j935/5HO6/+Rzuv/nXaW/512lv+f
+ bI3/n2yN/7OFlP+zhZT/99ip//fYqf//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//
+ 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//
+ 6sj//+rI///y4///8uP///Lj///y4///8uP///Lj///y4///8uP//+rI///qyP//46z//+Os///jrP//
+ 46z//+Os///jrP//6sj//+rI///y4///8uP///Lj///y4///8uP///Lj///y4///8uP/+Ojd//jo3f+2
+ iKL/toii/6FsmP+hbJj/n3ul/597pf+R0vD/kdLw/4/d+f+P3fn/j935/4/d+f+P3fn/j935/5DX8/+Q
+ 1/P/nXyc/518nP+fbI3/n2yN/59tjHqfbYx6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAJ5tjnyebY58n2yN/59sjf+cfZ3/nH2d/5DY8/+Q2PP/j935/4/d+f+P
+ 3fn/j935/4/d+f+P3fn/kc7r/5HO6/+ddpb/nXaW/59sjf+fbI3/s4WU/7OFlP/32Kn/99ip///jrP//
+ 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//
+ 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///qyP//6sj///Lj///y4///8uP///Lj///y4///
+ 8uP///Lj///y4///6sj//+rI///jrP//46z//+Os///jrP//46z//+Os///qyP//6sj///Lj///y4///
+ 8uP///Lj///y4///8uP///Lj///y4//46N3/+Ojd/7aIov+2iKL/oWyY/6FsmP+fe6X/n3ul/5HS8P+R
+ 0vD/j935/4/d+f+P3fn/j935/4/d+f+P3fn/kNfz/5DX8/+dfJz/nXyc/59sjf+fbI3/n22Mep9tjHoA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkm2SB5Jtkgee
+ bI3OnmyNzp9sjf+fbI3/mpOz/5qTs/+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/5LK6P+S
+ yuj/nXeX/513l/+fbI3/n2yN/619kf+tfZH/7s6n/+7Op///46z//+Os///jrP//46z//+Os///jrP//
+ 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//
+ 46z//+Os///jrP//6sj//+rI///y4///8uP///Lj///y4///8uP///Lj///y4///8uP//+vH///rx///
+ 46z//+Os///jrP//46z//+Os///jrP//6sj//+rI///y4///8uP///Lj///y4//04tn/9OLZ/65+ov+u
+ fqL/oWyY/6FsmP+ffKb/n3ym/5HO7f+Rzu3/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+Z
+ k7H/mZOx/59sjf+fbI3/oG6Oz6Bujs+qgIAGqoCABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACSbZIHkm2SB55sjc6ebI3On2yN/59sjf+ak7P/mpOz/4/d+f+P
+ 3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/ksro/5LK6P+dd5f/nXeX/59sjf+fbI3/rX2R/619kf/u
+ zqf/7s6n///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//
+ 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///qyP//6sj///Lj///y4///
+ 8uP///Lj///y4///8uP///Lj///y4///68f//+vH///jrP//46z//+Os///jrP//46z//+Os///qyP//
+ 6sj///Lj///y4///8uP///Lj//Ti2f/04tn/rn6i/65+ov+hbJj/oWyY/598pv+ffKb/kc7t/5HO7f+P
+ 3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/5mTsf+Zk7H/n2yN/59sjf+gbo7PoG6Oz6qAgAaq
+ gIAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAn26KJZ9uiiWfbY3yn22N8p9sjf+fbI3/l6rJ/5eqyf+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P
+ 3fn/j935/5HO6v+Rzur/nX6f/51+n/+fbI3/n2yN/6Jvjv+ib47/062e/9Otnv/+4az//uGs///jrP//
+ 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//
+ 46z//+Os///jrP//46z//+Os///jrP//6sj//+rI///y4///8uP///Lj///y4///8uP///Lj///y4///
+ 8uP//+vH///rx///46z//+Os///jrP//46z//+Os///jrP//6sj//+rI///y4///8uP/07bD/9O2w/+h
+ bJj/oWyY/52Erf+dhK3/kNTx/5DU8f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/5epx/+X
+ qcf/n2yN/59sjf+gbo7yoG6O8qBtiiOgbYojAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACfbooln26KJZ9tjfKfbY3yn2yN/59sjf+X
+ qsn/l6rJ/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/kc7q/5HO6v+dfp//nX6f/59sjf+f
+ bI3/om+O/6Jvjv/TrZ7/062e//7hrP/+4az//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//
+ 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///qyP//
+ 6sj///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///68f//+vH///jrP//46z//+Os///jrP//
+ 46z//+Os///qyP//6sj///Lj///y4//TtsP/07bD/6FsmP+hbJj/nYSt/52Erf+Q1PH/kNTx/4/d+f+P
+ 3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/l6nH/5epx/+fbI3/n2yN/6BujvKgbo7yoG2KI6BtiiMA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAnm2MVJ5tjFSfbI39n2yN/Z9tjf+fbY3/lbTR/5W00f+P3fn/j935/4/d+f+P
+ 3fn/j935/4/d+f+P3fn/j935/5DY8/+Q2PP/mZOx/5mTsf+fbI3/n2yN/59sjf+fbI3/r4CS/6+Akv/h
+ vqP/4b6j///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//
+ 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//6sj//+rI///y4///8uP///Lj///y4///
+ 8uP///Lj///y4///8uP//+rI///qyP//46z//+Os/+nHp//px6f/8tOp//LTqf/i59T/4ufU/53b8v+d
+ 2/L/lbjZ/5W42f+Q2fX/kNn1/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/lbPR/5Wz0f+f
+ bY3/n22N/59rjf6fa43+oWuOUaFrjlEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACebYxUnm2MVJ9sjf2f
+ bI39n22N/59tjf+VtNH/lbTR/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/kNjz/5DY8/+Z
+ k7H/mZOx/59sjf+fbI3/n2yN/59sjf+vgJL/r4CS/+G+o//hvqP//+Os///jrP//46z//+Os///jrP//
+ 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//
+ 46z//+Os///qyP//6sj///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///6sj//+rI///jrP//
+ 46z/6cen/+nHp//y06n/8tOp/+Ln1P/i59T/ndvy/53b8v+VuNn/lbjZ/5DZ9f+Q2fX/j935/4/d+f+P
+ 3fn/j935/4/d+f+P3fn/j935/4/d+f+Vs9H/lbPR/59tjf+fbY3/n2uN/p9rjf6ha45RoWuOUQAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAn2yMbZ9sjG2fbI3/n2yN/59tj/+fbY//lbTR/5W00f+P
+ 3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/lLfV/5S31f+edpb/nnaW/59sjf+f
+ bI3/n2yN/59sjf+xgpP/sYKT/9awnv/WsJ7/+Nuq//jbqv//46z//+Os///jrP//46z//+Os///jrP//
+ 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//6sj//+rI///y4///
+ 8uP///Lj///y4///8uP///Lj/97Dyf/ew8n/soOh/7KDof+hbJj/oWyY/6SBpf+kgaX/j935/4/d+f+P
+ 3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+Vs9H/lbPR/59tj/+f
+ bY//n2yN/59sjf+ga41roGuNawAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACf
+ bIxtn2yMbZ9sjf+fbI3/n22P/59tj/+VtNH/lbTR/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P
+ 3fn/j935/4/d+f+Ut9X/lLfV/552lv+edpb/n2yN/59sjf+fbI3/n2yN/7GCk/+xgpP/1rCe/9awnv/4
+ 26r/+Nuq///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//
+ 46z//+Os///jrP//46z//+Os///qyP//6sj///Lj///y4///8uP///Lj///y4///8uP/3sPJ/97Dyf+y
+ g6H/soOh/6FsmP+hbJj/pIGl/6SBpf+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P
+ 3fn/j935/4/d+f+P3fn/j935/5Wz0f+Vs9H/n22P/59tj/+fbI3/n2yN/6BrjWuga41rAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoGuOfqBrjn6fbI3/n2yN/59tjf+f
+ bY3/l6rJ/5eqyf+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/kNjz/5DY8/+X
+ psT/l6bE/55zlP+ec5T/n2yN/59sjf+fbI3/n2yN/6Fujv+hbo7/tYeU/7WHlP/OpZz/zqWc/+C8ov/g
+ vKL/7cyn/+3Mp//42qr/+Nqq//nbqv/526r//uGs//7hrP/22an/9tmp/+7Npv/uzab/6Mak/+jGpP/+
+ 6Mj//ujI///y4///8uP/7dzX/+3c1/+hbJj/oWyY/6FsmP+hbJj/n3ii/594ov+VtNb/lbTW/4/d+f+P
+ 3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/5epx/+Xqcf/n22N/59tjf+f
+ bI3/n2yN/55tjnyebY58AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAACga45+oGuOfp9sjf+fbI3/n22N/59tjf+Xqsn/l6rJ/4/d+f+P3fn/j935/4/d+f+P
+ 3fn/j935/4/d+f+P3fn/j935/4/d+f+Q2PP/kNjz/5emxP+XpsT/nnOU/55zlP+fbI3/n2yN/59sjf+f
+ bI3/oW6O/6Fujv+1h5T/tYeU/86lnP/OpZz/4Lyi/+C8ov/tzKf/7cyn//jaqv/42qr/+duq//nbqv/+
+ 4az//uGs//bZqf/22an/7s2m/+7Npv/oxqT/6Mak//7oyP/+6Mj///Lj///y4//t3Nf/7dzX/6FsmP+h
+ bJj/oWyY/6FsmP+feKL/n3ii/5W01v+VtNb/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P
+ 3fn/j935/4/d+f+P3fn/l6nH/5epx/+fbY3/n22N/59sjf+fbI3/nm2OfJ5tjnwAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoGuNa6BrjWuf
+ bI39n2yN/Z9sjf+fbI3/mpGw/5qRsP+Q1vL/kNby/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P
+ 3fn/j935/4/d+f+P2PT/j9j0/5awzf+WsM3/nIWl/5yFpf+fbY7/n22O/59sjf+fbI3/n2yN/59sjf+f
+ bI3/n2yN/59sjf+fbI3/n2yN/59sjf+fbI3/n2yN/59sjf+fbI3/n2yN/59sjf+fbI3/n2yN/59sjf+f
+ bI3/uK+0/7ivtP+v4ev/r+Hr/5Tb9v+U2/b/mKbK/5imyv+Vt9j/lbfY/4/b9/+P2/f/j935/4/d+f+P
+ 3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/5DY8/+Q2PP/mpOz/5qTs/+fbI3/n2yN/59sjf6f
+ bI3+n2uNcp9rjXIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACga41roGuNa59sjf2fbI39n2yN/59sjf+akbD/mpGw/5DW8v+Q
+ 1vL/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/Y9P+P2PT/lrDN/5awzf+c
+ haX/nIWl/59tjv+fbY7/n2yN/59sjf+fbI3/n2yN/59sjf+fbI3/n2yN/59sjf+fbI3/n2yN/59sjf+f
+ bI3/n2yN/59sjf+fbI3/n2yN/59sjf+fbI3/n2yN/59sjf+4r7T/uK+0/6/h6/+v4ev/lNv2/5Tb9v+Y
+ psr/mKbK/5W32P+Vt9j/j9v3/4/b9/+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P
+ 3fn/kNjz/5DY8/+ak7P/mpOz/59sjf+fbI3/n2yN/p9sjf6fa41yn2uNcgAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAnm2MVJ5tjFSgbI7zoGyO859sjf+fbI3/nH2d/5x9nf+Twd7/k8He/4/d+f+P3fn/j935/4/d+f+P
+ 3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/kNPw/5DT8P+VtNH/lbTR/5mcuv+Z
+ nLr/nIen/5yHp/+eeJn/nniZ/59vkP+fb5D/n2yN/59sjf+fbI3/n2yN/59vkP+fb5D/nXyc/518nP+b
+ iqn/m4qp/5HK5v+Ryub/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P
+ 3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/k8He/5PB3v+dfJz/nXyc/59sjf+fbI3/n22N8p9tjfKf
+ bYxSn22MUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACebYxUnm2MVKBsjvOgbI7zn2yN/59sjf+c
+ fZ3/nH2d/5PB3v+Twd7/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P
+ 3fn/j935/4/d+f+Q0/D/kNPw/5W00f+VtNH/mZy6/5mcuv+ch6f/nIen/554mf+eeJn/n2+Q/59vkP+f
+ bI3/n2yN/59sjf+fbI3/n2+Q/59vkP+dfJz/nXyc/5uKqf+biqn/kcrm/5HK5v+P3fn/j935/4/d+f+P
+ 3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+T
+ wd7/k8He/518nP+dfJz/n2yN/59sjf+fbY3yn22N8p9tjFKfbYxSAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAn26KJZ9uiiWebI3OnmyNzp9sjf+fbI3/n22N/59tjf+ZlbX/mZW1/5DR7v+Q
+ 0e7/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P
+ 3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P
+ 3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P
+ 3fn/j935/4/d+f+P3fn/kdHu/5HR7v+albT/mpW0/59tjf+fbY3/n2yN/59sjf+fbI3Nn2yNzZxqjiSc
+ ao4kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACfbooln26KJZ5sjc6e
+ bI3On2yN/59sjf+fbY3/n22N/5mVtf+ZlbX/kNHu/5DR7v+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P
+ 3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P
+ 3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P
+ 3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+R0e7/kdHu/5qVtP+a
+ lbT/n22N/59tjf+fbI3/n2yN/59sjc2fbI3NnGqOJJxqjiQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkm2SB5JtkgeebY58nm2OfJ9sjfefbI33n2yN/59sjf+f
+ b5D/n2+Q/5iauf+Ymrn/kc7r/5HO6/+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P
+ 3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P
+ 3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P
+ 3fn/kc7q/5HO6v+Zmbn/mZm5/59vkP+fb5D/n2yN/59sjf+fbI33n2yN96BsjXugbI17km2SB5JtkgcA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACS
+ bZIHkm2SB55tjnyebY58n2yN959sjfefbI3/n2yN/59vkP+fb5D/mJq5/5iauf+Rzuv/kc7r/4/d+f+P
+ 3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P
+ 3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P
+ 3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+Rzur/kc7q/5mZuf+Zmbn/n2+Q/59vkP+f
+ bI3/n2yN/59sjfefbI33oGyNe6BsjXuSbZIHkm2SBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACeaY8inmmPIp5tjKme
+ bYypn2yN/Z9sjf2fbI3/n2yN/59tjv+fbY7/moio/5qIqP+Vs9D/lbPQ/5DV8f+Q1fH/j935/4/d+f+P
+ 3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P
+ 3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/5DU8P+Q1PD/lbLQ/5Wy0P+b
+ iKj/m4io/59tjv+fbY7/n2yN/59sjf+fbI39n2yN/Z9sjKefbIynomyLIaJsiyEAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAJ5pjyKeaY8inm2MqZ5tjKmfbI39n2yN/Z9sjf+fbI3/n22O/59tjv+a
+ iKj/moio/5Wz0P+Vs9D/kNXx/5DV8f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P
+ 3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P
+ 3fn/j935/4/d+f+P3fn/kNTw/5DU8P+VstD/lbLQ/5uIqP+biKj/n22O/59tjv+fbI3/n2yN/59sjf2f
+ bI39n2yMp59sjKeibIshomyLIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAJ1vkCedb5AnoGyMnqBsjJ6fbI32n2yN9p9sjf+fbI3/n2yN/59sjf+fbY7/n22O/5yBof+c
+ gaH/mJy7/5icu/+WsM3/lrDN/5PB3v+Twd7/kc7r/5HO6/+Q1fH/kNXx/5Db9v+Q2/b/kNv2/5Db9v+Q
+ 1fH/kNXx/5HO6v+Rzur/k8He/5PB3v+WsM3/lrDN/5icu/+YnLv/nIGh/5yBof+fbY3/n22N/59sjf+f
+ bI3/n2yN/59sjf+fbI32n2yN9p9rjZ2fa42dnW+QJ51vkCcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnW+QJ51vkCegbIyeoGyMnp9sjfaf
+ bI32n2yN/59sjf+fbI3/n2yN/59tjv+fbY7/nIGh/5yBof+YnLv/mJy7/5awzf+WsM3/k8He/5PB3v+R
+ zuv/kc7r/5DV8f+Q1fH/kNv2/5Db9v+Q2/b/kNv2/5DV8f+Q1fH/kc7q/5HO6v+Twd7/k8He/5awzf+W
+ sM3/mJy7/5icu/+cgaH/nIGh/59tjf+fbY3/n2yN/59sjf+fbI3/n2yN/59sjfafbI32n2uNnZ9rjZ2d
+ b5AnnW+QJwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApG2SDqRtkg6fbY1in22NYqBsjLugbIy7n2yN9p9sjfaf
+ bI3/n2yN/59sjf+fbI3/n2yN/59sjf+fbI3/n2yN/59sjf+fbI3/n2yN/59sjf+fbI3/n2yN/59sjf+f
+ bI3/n2yN/59sjf+fbI3/n2yN/59sjf+fbI3/n2yN/59sjf+fbI3/n2yN/59sjf+fbI3/n2yN9p9sjfaf
+ bI26n2yNup5sjmGebI5hpG2SDqRtkg4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACk
+ bZIOpG2SDp9tjWKfbY1ioGyMu6BsjLufbI32n2yN9p9sjf+fbI3/n2yN/59sjf+fbI3/n2yN/59sjf+f
+ bI3/n2yN/59sjf+fbI3/n2yN/59sjf+fbI3/n2yN/59sjf+fbI3/n2yN/59sjf+fbI3/n2yN/59sjf+f
+ bI3/n2yN/59sjf+fbI3/n2yN/59sjf+fbI32n2yN9p9sjbqfbI26nmyOYZ5sjmGkbZIOpG2SDgAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ9ggAif
+ YIAIn2yLQJ9si0CfbIx4n2yMeKBsjJ6gbIyenmyMxp5sjMafbI3en2yN3p9sje6fbI3un2yN+p9sjfqf
+ bI36n2yN+p9sje6fbI3un2yN3p9sjd6ebIzGnmyMxqBsjJ6gbIyen2yMeJ9sjHiebY4/nm2OP5JtkgeS
+ bZIHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAn2CACJ9ggAifbItAn2yLQJ9sjHifbIx4oGyMnqBsjJ6e
+ bIzGnmyMxp9sjd6fbI3en2yN7p9sje6fbI36n2yN+p9sjfqfbI36n2yN7p9sje6fbI3en2yN3p5sjMae
+ bIzGoGyMnqBsjJ6fbIx4n2yMeJ5tjj+ebY4/km2SB5JtkgcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////8AAAAA////////////////AAAA
+ AP//////////////wAAAAAAD/////////////8AAAAAAA/////////////wAAAAAAAA////////////8
+ AAAAAAAAP///////////wAAAAAAAAAP//////////8AAAAAAAAAD//////////wAAAAAAAAAAD//////
+ ///8AAAAAAAAAAA/////////8AAAAAAAAAAAD/////////AAAAAAAAAAAA/////////AAAAAAAAAAAAD
+ ////////wAAAAAAAAAAAA////////wAAAAAAAAAAAAD///////8AAAAAAAAAAAAA///////8AAAAAAAA
+ AAAAAD///////AAAAAAAAAAAAAA///////AAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAA//////wAAA
+ AAAAAAAAAAAD/////8AAAAAAAAAAAAAAA/////8AAAAAAAAAAAAAAAD/////AAAAAAAAAAAAAAAA////
+ /AAAAAAAAAAAAAAAAD////wAAAAAAAAAAAAAAAA////8AAAAAAAAAAAAAAAAP////AAAAAAAAAAAAAAA
+ AD////AAAAAAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAD///8AAAAAAAAAAAAAAAAA////AAAAAAAAAA
+ AAAAAAAP///AAAAAAAAAAAAAAAAAA///wAAAAAAAAAAAAAAAAAP//8AAAAAAAAAAAAAAAAAD///AAAAA
+ AAAAAAAAAAAAA///AAAAAAAAAAAAAAAAAAD//wAAAAAAAAAAAAAAAAAA//8AAAAAAAAAAAAAAAAAAP//
+ AAAAAAAAAAAAAAAAAAD//wAAAAAAAAAAAAAAAAAA//8AAAAAAAAAAAAAAAAAAP/8AAAAAAAAAAAAAAAA
+ AAA//AAAAAAAAAAAAAAAAAAAP/wAAAAAAAAAAAAAAAAAAD/8AAAAAAAAAAAAAAAAAAA//AAAAAAAAAAA
+ AAAAAAAAP/wAAAAAAAAAAAAAAAAAAD/8AAAAAAAAAAAAAAAAAAA//AAAAAAAAAAAAAAAAAAAP/wAAAAA
+ AAAAAAAAAAAAAD/8AAAAAAAAAAAAAAAAAAA//AAAAAAAAAAAAAAAAAAAP/wAAAAAAAAAAAAAAAAAAD/8
+ AAAAAAAAAAAAAAAAAAA//AAAAAAAAAAAAAAAAAAAP/wAAAAAAAAAAAAAAAAAAD/8AAAAAAAAAAAAAAAA
+ AAA//AAAAAAAAAAAAAAAAAAAP/wAAAAAAAAAAAAAAAAAAD/8AAAAAAAAAAAAAAAAAAA//AAAAAAAAAAA
+ AAAAAAAAP/wAAAAAAAAAAAAAAAAAAD/8AAAAAAAAAAAAAAAAAAA//AAAAAAAAAAAAAAAAAAAP/wAAAAA
+ AAAAAAAAAAAAAD/8AAAAAAAAAAAAAAAAAAA//AAAAAAAAAAAAAAAAAAAP/wAAAAAAAAAAAAAAAAAAD/8
+ AAAAAAAAAAAAAAAAAAA//AAAAAAAAAAAAAAAAAAAP/wAAAAAAAAAAAAAAAAAAD/8AAAAAAAAAAAAAAAA
+ AAA//AAAAAAAAAAAAAAAAAAAP/8AAAAAAAAAAAAAAAAAAP//AAAAAAAAAAAAAAAAAAD//wAAAAAAAAAA
+ AAAAAAAA//8AAAAAAAAAAAAAAAAAAP//AAAAAAAAAAAAAAAAAAD//wAAAAAAAAAAAAAAAAAA///AAAAA
+ AAAAAAAAAAAAA///wAAAAAAAAAAAAAAAAAP//8AAAAAAAAAAAAAAAAAD///AAAAAAAAAAAAAAAAAA///
+ 8AAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAD///8AAAAAAAAAAAAAAA
+ AA////wAAAAAAAAAAAAAAAA////8AAAAAAAAAAAAAAAAP////AAAAAAAAAAAAAAAAD////wAAAAAAAAA
+ AAAAAAA/////AAAAAAAAAAAAAAAA/////wAAAAAAAAAAAAAAAP/////AAAAAAAAAAAAAAAP/////wAAA
+ AAAAAAAAAAAD//////AAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAA///////AAAAAAAAAAAAAA/////
+ //wAAAAAAAAAAAAAP///////AAAAAAAAAAAAAP///////wAAAAAAAAAAAAD////////AAAAAAAAAAAAD
+ ////////wAAAAAAAAAAAA/////////AAAAAAAAAAAA/////////wAAAAAAAAAAAP/////////AAAAAAA
+ AAAAP/////////wAAAAAAAAAAD//////////wAAAAAAAAAP//////////8AAAAAAAAAD///////////8
+ AAAAAAAAP////////////AAAAAAAAD/////////////AAAAAAAP/////////////wAAAAAAD////////
+ //////8AAAAA////////////////AAAAAP//////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////ygAAABAAAAAgAAAAAEAIAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAACqgIAGn22OPaBsjHafbI2cn2yNxJ9sjd2fbI3tn2yN+Z9sjfmfbI3tn2yN3aBtjcOf
+ bI2coGyMdp9tjj2qgIAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAnXaJDaFwkmKfbY23n2yN9Z9sjf+fbI3/n2yN/59sjf+fbI3/n2yN/59sjf+f
+ bI3/n2yN/59sjf+fbI3/n2yN/59sjf+fbI3/nmuO9Z5sjragbY1elWqVDAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACfboolo3ORpKBuj/qfbI3/n2yN/59tjf+cfJ7/mJO3/5WiyP+S
+ sNX/kLvh/4/C6P+Pxuz/j8bs/4/B6P+Qu+H/krDV/5WiyP+Yk7b/nHye/59tjf+fbI3/n2yN/59sjvWf
+ bI2cnGqOJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJxrjB+hb4+ooG2O/p9sjf+fbY3/m4Ol/5Wkyf+Q
+ wOb/jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+Q
+ wOb/lKTI/5uCpP+fbY3/n2yN/55tjf2fa42kom+RHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqoCABp9tjHqgbo35n2yN/55ukP+Y
+ kLT/kbzh/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+O
+ yO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//kLvh/5mQtP+ebpD/n2yN/6Btjfaea415qoCABgAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoG2KI6Bujs+f
+ bI3/n22N/5mMsP+PvuT/jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+O
+ yO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//kL3k/5mMrv+f
+ bI3/n2yN/59sjcygbYojAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAoWuOUaBtjvOfbI3/nXmb/5Ox1v+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsbs/5Kz2f+O
+ x+//jsjv/47I7/+OyO//m4Kk/5uCpP+OyO//jsjv/47I7/+Ox+//krTa/47G7f+OyO//jsjv/47I7/+O
+ yO//jsjv/47I7/+OyO//krDV/515mv+fbI3/oG2O8Z9sjFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAn2yOaqBsjv6fbI3/mYqs/4/C6f+OyO//jsjv/47I7/+OyO//jsjv/47I7/+O
+ yO//jsjv/5ebv/+fbI3/qLDJ/8Td3v/e3sD/8OG2/59sjf+fbI3/8OG2/97ewf/F2dH/p6zA/59sjf+W
+ ncH/jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+Pw+r/mYyu/59sjf+fbY39nmuNaQAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnm2OfJ9sjf+fbY3/lp3B/47I7/+OyO//jsjv/47I7/+O
+ yO//jsjv/47H7v+OyO//l8/w/7/e7P/Uu8L/n2yN/76Yqf//8uP//+vH///jrP+fbI3/n2yN///jrP//
+ 46z//+Os/72Rl/+fbI3/1LOj/7/Y1P+Wzuz/jsjv/4/B5/+Oxu3/jsjv/47I7/+OyO//jsjv/47I7/+W
+ nMH/n22N/59sjf+gbI17AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoGuNa59sjf+fbY//lKXL/47I7/+O
+ yO//jsjv/47I7/+OyO//jsjv/5iUuP+fcpP/ztDY///y4///8uP/8+LZ/59sjf+pepb///Lj///y4///
+ 6sj/tYeU/7aIlP//46z//+Os///jrP+qepD/n2yN//TVqf//46z//+Os/87Huv+fb4//mY2w/47I7/+O
+ yO//jsjv/47I7/+OyO//jsjv/5Slyv+fbY//n2yN/55rjWkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAn22MUp9sjv6f
+ bY3/lKXL/47I7/+OyO//jsjv/47I7/+OyO//jsjv/5HM8P+zpLr/n2yN/7aNov//8uP///Lj///y4//R
+ srn/17rA///y4///8uP///Lj///rx///46z//+Os///jrP//46z/3bmh/9Wvnv//46z//+Os///jrP+2
+ iZX/n2yN/7Kfq/+Qy+//jsjv/47I7/+OyO//jsjv/47I7/+OyO//lKXK/59tjf+fbY39n2yMUAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAnGqOJJ9tjfKfbI3/lp3B/47I7/+OyO//jsjv/47I7/+OyO//jsjv/5zS7//z7+T/+ere/6d4lf+f
+ bI3/7dnT///y4///8uP///Lj///y4///8uP///Lj///y4///8uP//+rI///jrP//46z//+Os///jrP//
+ 46z//+Os///jrP/x0qj/n2yN/6d3kP/53Kr/8uG0/5vP6f+OyO//jsjv/47I7/+OyO//jsjv/47I7/+W
+ nMH/n2yN/6BtjvGgbYojAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAkm2SB59sjc2fbI3/mYuv/47I7/+OyO//jsjv/47I7/+QveP/laDE/6zR3P//
+ 6sj///Lj///y4//n0M3/zay3//3v4f//8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///
+ 68f//+Os///jrP//46z//+Os///jrP//46z//+Ks/9Sunv/ox6X//+Os///jrP//46z/qsjY/5iVv/+Q
+ veT/jsjv/47I7/+OyO//jsjv/5qKrv+fbI3/n2yNzKqAgAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKBsjXufbI3/nXmb/4/D6v+OyO//jsjv/47I7/+Q
+ wOb/nXmb/59sjf/iv6P//+Os///qyP//8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///
+ 8uP///Lj///y4///8uP///Lj///qyP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//
+ 46z//+Os/9auo/+hbJj/n3ml/4/B6P+OyO//jsjv/47I7/+Pwun/nXma/59sjf+ea415AAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKJvkR6fbI71n2yN/5Kw1f+O
+ yO//jsjv/47I7/+OxOz/nICi/59sjf+0iJr//N+r///jrP//46z//+rI///y4///8uP///Lj///y4///
+ 8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP//+vH///jrP//46z//+Os///jrP//
+ 46z//+Os///jrP//46z//+Os///jrP/73qz/tYWc/6FsmP+df6v/jsbs/47I7/+OyO//jsjv/5Ky1/+f
+ bY3/oG2N9p9wjyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACf
+ bI2on2yN/5mNsP+OyO//jsjv/47I7/+OyO//mJK0/59sjf+tgJr/9+fc///rx///46z//+Os///jrP//
+ 6sj///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP/9+bb/9i7wP/35tv///Lj///y4///
+ 68f//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os//fYqv+ufJv/oWyY/5mTvf+O
+ yO//jsjv/47I7/+OyO//mYyu/59sjf+fa42kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAACdb5Annm2N/Z9vkP+QvuX/jsjv/47I7/+OyO//k6/U/59tjf+icJD/7djT///y4///
+ 8uP//+rI///jrP//46z//+Os///qyP//8uP///Lj///y4///8uP///Lj///y4///8uP/7trU/6t8l/+f
+ bI3/qXuW/+zY0v//8uP///Lj///qyP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//
+ 46z/7cyo/6Rvmf+hbZj/k67W/47I7/+OyO//jsjv/5C95P+ebpD/nm2N/ZxqjiQAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoGyMnp9sjf+YkbX/jsjv/47I7/+OyO//jsbs/513mf+f
+ bI3/1rm+///y4///8uP///Lj///y4///68f//+Os///jrP//46z//+rI///y4///8uP///Lj///y4///
+ 8uP/4cjJ/6Rykf+fbI3/oHGL/59sjf+kcpD/4cjJ///y4///8uP//+vH///jrP//46z//+Os///jrP//
+ 46z//+Os///jrP//46z//+Os///jrP/VrqP/oWyY/556pf+Pxu3/jsjv/47I7/+OyO//mZC0/59sjf+f
+ bI2cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApG2SDqBtjfafbY7/kbzh/47I7/+O
+ yO//jsjv/5Wfw/+fbI3/sICT//3ox///8uP///Lj///y4///8uP///Lj///rx///46z//+Os///jrP//
+ 6sj///Lj///y4///8uP/1bi9/6Btjv+fbI3/pI2D/67Ec/+lj4P/n2yN/59tjf/Pr7j///Hj///y4///
+ 68f//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//uGr/7GAm/+hbJj/lqDJ/47I7/+O
+ yO//jsjv/5C74f+fbY3/nmyO9ZVqlQwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ9tjWKf
+ bI3/moOm/47I7/+OyO//jsjv/4/F6/+ec5X/n2yN/+XDpP//46z//+rI///y4///8uP///Lj///y4///
+ 8uP//+vH///jrP//46z//+Os///qyP/87uH/w56t/59sjf+fbYz/p5uA/6/Kcv+vynL/r8py/6ihff+f
+ bY3/n2yN/8Cbqv/87eD///Lj///rx///46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP/j
+ wKb/oWyY/593ov+Oxu3/jsjv/47I7/+OyO//m4Kk/59sjf+gbY1eAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAACfbI26n2yN/5Slyv+OyO//jsjv/47I7/+UqMz/n2yN/7GDmP//4qz//+Os///jrP//
+ 6sj///Lj///y4///8uP///Lj///y4///6sj//+Os///jrP/32ar/touc/59sjf+gcYz/qq16/6/Kcv+v
+ ynL/r8py/6/Kcv+vynL/q695/6Bxi/+fbI3/tImg//bl2///8uP//+rI///jrP//46z//+Os///jrP//
+ 46z//+Os///jrP//46z//+Ks/7KCnP+hbJj/lKjR/47I7/+OyO//jsjv/5SkyP+fbI3/nmyOtgAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACSbZIHn2yN9p9tjf+PwOf/jsjv/47I7/+OyO//m4Sn/59sjf/a
+ vsL//+vH///jrP//46z//+Os///qyP//8uP///Lj///y4///8uP///Lj///rx//uzqf/q3qQ/59sjf+h
+ dor/rLh3/6/Kcv+vynL/r8py/6/Kcv+vynL/r8py/6/Kcv+suXf/oXeJ/59sjf+pe5b/7NjS///y4///
+ 68f//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP/Zs6T/oWyY/5yHsf+OyO//jsjv/47I7/+Q
+ wOb/n22N/59sjfWSbZIHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAn2yLQJ9sjf+cfp//jsjv/47I7/+O
+ yO//j8Lp/59tjv+icI//+ere///y4///68f//+Os///jrP//46z//+rI///y4///8uP///Lj///y4//h
+ yMn/pHKP/59sjf+jgYf/rcJ1/6/Kcv+vynL/rcB1/6/Kcv+vynL/r8py/63AdP+vynL/r8py/63Cdf+j
+ gYf/n2yN/6RykP/hyMn///Lj///rx///46z//+Os///jrP//46z//+Os///jrP//46z/+Nmr/6NumP+h
+ bpr/j8Lq/47I7/+OyO//jsjv/5x8nv+fbI3/n22OPQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ9rjXef
+ bI3/l5O3/47I7/+OyO//jsjv/5Orz/+fbI3/uZCk///y4///8uP///Lj///rx///46z//+Os///jrP//
+ 6sj///Lj///y4//Ss7r/oG2O/59sjf+lj4T/rsdz/6/Kcv+vyHP/ppCC/59sjf+qqXv/r8py/6mmfP+f
+ bI3/pY+C/6/Icv+vynL/rsdz/6WPhP+fbI3/oG2O/9Kzuv//8uP//+vH///jrP//46z//+Os///jrP//
+ 46z//+Os///jrP+3iJ3/oWyY/5Ot1v+OyO//jsjv/47I7/+Yk7b/n2yN/59tjnUAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAACfa42fn2yN/5Wjx/+OyO//jsjv/47I7/+Xk7f/n2yN/9Csq///8uP///Lj///y4///
+ 8uP//+vH///jrP//46z//+Os//znx//Dnq3/n2yN/59tjP+nm4D/r8lz/6/Kcv+uxnP/o4eG/59sjf+f
+ bI3/p5uA/6/Kcv+nm4D/n2yN/59sjf+jhIf/rsR0/6/Kcv+vynL/qKF9/59tjf+fbI3/wJuq//zt4P//
+ 68f//+Os///jrP//46z//+Os///jrP//46z/z6ah/6FsmP+Yl8H/jsjv/47I7/+OyO//laLH/59sjf+f
+ bI2cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnmyMxp9sjf+Sstf/jsjv/47I7/+OyO//moWo/59sjf/j
+ wKL//+rI///y4///8uP///Lj///y4///68f//+Os//jaqv+1h5T/n2yN/6BxjP+qrXr/r8py/6/Kcv+t
+ vnX/onyI/59sjf+fbI3/n2yN/6ebgP+vynL/p5uA/59sjf+fbI3/n2yN/6J7if+tv3b/r8py/6/Kcv+q
+ rXr/oHGM/59sjf+1iqH/+Ojd///rx///46z//+Os///jrP//46z//+Os/+G9pf+hbJj/m4ey/47I7/+O
+ yO//jsjv/5Kw1f+fbI3/oG2NwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ9sjeCfbI3/kL3j/47I7/+O
+ yO//jsjv/515mv+fbI3/8dGn///jrP//6sj///Lj///y4///8uP///Lj///rx//Sq53/n2yN/6F3iv+s
+ uXf/r8py/6/Kcv+suHf/oHWK/59sjf+wgpf/xJmY/59sjf+nm4D/r8py/6ebgP+fbI3/xJ+t/7CDnP+f
+ bI3/oXWL/6u3eP+vynL/r8py/6y5d/+hd4r/n2yN/9Kzuv//8uP//+vH///jrP//46z//+Os///jrP/v
+ z6j/oWyY/557pv+OyO//jsjv/47I7/+Qu+L/n2yN/59sjd4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACf
+ bI3tn2yN/4/H6/+OyO//jsjv/47I7/+eb5D/n2yN//ncqv//46z//+Os///qyP//8uP///Lj///y4///
+ 8uP/z6uq/59sjf+nm4D/r8py/6/Kcv+qsHn/oHGL/59sjf+4kKT/+ere/8+rqv+fbI3/p5uA/6/Kcv+n
+ m4D/n2yN/8+vuP/67N7/upKm/59sjf+gcIz/qq16/6/Kcv+vynL/p5uA/59sjf/Pr7j///Lj///y4///
+ 68f//+Os///jrP//46z/+Nqq/6FsmP+gc5//jsjv/47I7/+OyO//j8fq/59sjf+gbY3rAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAn2yN+Z9sjf+Q2vX/j9Hz/47K8P+OyO//n22O/59sjf/+4az//+Os///jrP//
+ 46z//+rI///y4///8uP///Lj/8+vuP+fbI3/p5uA/6/Kcv+opXz/oG2N/59sjf/Dnq3//e/i///y4//P
+ r7j/n2yN/6ebgP+vynL/p5uA/59sjf/Pr7j///Lj//3w4f/GorD/n2yN/59tjP+oon3/r8py/6ebgP+f
+ bI3/z6+4///y4///8uP///Lj///rx///46z//+Os//zgq/+hbJj/oG+b/47I7/+OyvD/j9L0/4/a9v+f
+ bI3/n2yN+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ9sjfmfbI3/kNv2/4/d+f+P3fn/j9z4/59sjf+f
+ bI3//eGr///jrP//46z//+Os///jrP//6sj///Lj///y4//Pr7j/n2yN/6abf/+nm4D/n2yN/59tjf/P
+ q6v///Hj///y4///8uP/z6+4/59sjf+nm4D/r8py/6ebgP+fbI3/z6ur///y4///8uP///Lj/9W4vf+f
+ bY3/n2yN/6WUgf+nmoD/n2yN/8+vuP//8uP///Lj///y4///8uP//+vH///jrP/94az/oWyY/6Bwm/+P
+ 3fn/j935/4/d+f+P2vb/n2yN/59sjfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACfbI3tn2yN/5DV8f+P
+ 3fn/j935/4/d+f+ecJH/n2yN//rdq///46z//+Os///jrP//46z//+Os///qyP//8uP/z6+4/59sjf+g
+ cYv/n2yN/6Jvjv/duaH//+Os///qyP//8uP///Lj/8+vuP+fbI3/p5uA/6/Kcv+nm4D/n2yN/8+nnf//
+ 6sj///Lj///y4///8uP/3MHD/6Fvj/+fbI3/oHGL/59sjf/Pr7j///Lj///y4///8uP///Lj///y4///
+ 68f/+Nqq/6FsmP+gdaD/j935/4/d+f+P3fn/kNTw/59sjf+gbY3rAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAn2yN4J9sjf+Rz+z/j935/4/d+f+P3fn/nXuc/59sjf/x0af//+Os///jrP//46z//+Os///jrP//
+ 46z//+rI/8+vuP+fbI3/n2yN/6V1k//ny7j//+Os///jrP//46z//+rI///y4//Pr7j/n2yN/6ebgP+v
+ ynL/p5uA/59sjf/Pp53//+Os///qyP//8uP///Lj///y4//p08//p3eU/59sjf+fbI3/z6+4///y4///
+ 8uP///Lj///y4///8uP///Lj/+/Vv/+hbJj/nn6n/4/d+f+P3fn/j935/5HO6/+fbI3/n2yN3gAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAJ5sjMafbI3/k8He/4/d+f+P3fn/j935/5uIqP+fbI3/48Ci///jrP//
+ 46z//+Os///jrP//46z//+Os///jrP/Tsa3/n2yN/6x+mP/w3dX///Lj///rx///46z//+Os///jrP//
+ 6sj/z6+4/59sjf+nm4D/r8py/6ebgP+fbI3/z6ed///jrP//46z//+rI///y4///8uP///Lj/+/c1f+r
+ fJf/n2yN/9Gyuv//8uP///Lj///y4///8uP///Lj///y4//iyMz/oWyY/5uOtf+P3fn/j935/4/d+f+T
+ wN3/n2yN/6BtjcMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACfa42fn2yN/5Wwzv+P3fn/j935/4/d+f+Y
+ nLv/n2yN/9Cqnf//46z//+Os///jrP//46z//+Os///jrP//46z/+Nuq/9Syrf/359z///Lj///y4///
+ 8uP//+vH///jrP//46z//+Os/8+rq/+fbI3/p5uA/6/Kcv+nm4D/n2yN/8+rqv//46z//+Os///jrP//
+ 6sj///Lj///y4///8uP/9+bb/9W4vf/46N3///Lj///y4///8uP///Lj///y4///8uP/z6+9/6FsmP+Y
+ oMX/j935/4/d+f+P3fn/lq/N/59sjf+fbI2cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAn2yMeJ9sjf+Y
+ nLv/j935/4/d+f+P3fn/lLTS/59sjf+5jJb//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//
+ 46z//+rI///y4///8uP///Lj///y4///68f//+Os///jrP/Pp53/n2yN/6ebgP+vynL/p5uA/59sjf/P
+ r7j//+vH///jrP//46z//+Os///qyP//8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///
+ 8uP///Lj/7iNqv+hbJj/lLvc/4/d+f+P3fn/j935/5mcuv+fbI3/oGyMdgAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAKFujUGfbI3/nIKh/4/d+f+P3fn/j935/5HS7/+fbY7/om+O//ncqv//46z//+Os///jrP//
+ 46z//+Os///jrP//46z//+Os///jrP//6sj///Lj///y4///8uP///Lj///rx///46z/z6ed/59sjf+n
+ m4D/r8py/6ebgP+fbI3/z6+4///y4///68f//+Os///jrP//46z//+rI///y4///8uP///Lj///y4///
+ 8uP///Lj///y4///8uP///Lj//jo3f+jb5n/oW6a/5DW8/+P3fn/j935/4/d+f+cgKD/n2yN/59tjj0A
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACSbZIHn2yN9p9tjf+Q1PD/j935/4/d+f+P3fn/m4am/59sjf/a
+ tqD//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///qyP//8uP///Lj///y4///
+ 8uP//+vH/8+nnf+fbI3/p5uA/6/Kcv+nm4D/n2yN/8+vuP//8uP///Lj///rx///46z//+Os///jrP//
+ 6sj///Lj///y4///8uP///Lj///y4///8uP///Lj///y4//ZvMT/oWyY/5yMs/+P3fn/j935/4/d+f+R
+ 0/D/n22N/59sjfWSbZIHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKBsjLufbI3/lbPQ/4/d+f+P
+ 3fn/j935/5WuzP+fbI3/soOT///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//
+ 46z//+rI///y4///8uP///Lj///y4//Pq6r/n2yN/6ebgP+vynL/p5uA/59sjf/Pr7j///Lj///y4///
+ 8uP//+vH///jrP//46z//+Os///qyP//8uP///Lj///y4///8uP///Lj///y4///8eP/soWm/6FsmP+V
+ tdb/j935/4/d+f+P3fn/lbHP/59sjf+fbY23AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACg
+ bI5jn2yN/5uJqf+P3fn/j935/4/d+f+Q2PT/nnSV/59sjf/lw6P//+Os///jrP//46z//+Os///jrP//
+ 46z//+Os///jrP//46z//+Os///jrP//6sj///Lj///y4///8uP/z6+4/59sjf+nm4D/r8py/6ebgP+f
+ bI3/z6+4///y4///8uP///Lj///y4///68f//+Os///jrP//46z//+rI///y4///8uP///Lj///y4///
+ 8uP/5MzO/6FsmP+feKL/kNv3/4/d+f+P3fn/j935/5uIqP+fbI3/nmuOXwAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAApG2SDp9sjfWfbY7/kc7r/4/d+f+P3fn/j935/5ejwv+fbI3/sYOS//7hrP//
+ 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///qyP//8uP///Lj/8+vuP+f
+ bI3/p5uA/6/Kcv+nm4D/n2yN/8+rq///8uP///Lj///y4///8uP///Lj///rx///46z//+Os///jrP//
+ 6sj///Lj///y4///8uP//vDh/7KEpf+hbJj/l6rO/4/d+f+P3fn/j935/5HN6v+fbY3/nmuN9Z12iQ0A
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgbIyen2yN/5iauf+P3fn/j935/4/d+f+P
+ 2PT/nXeX/59sjf/WsJ7//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//
+ 46z//+rI///y4//Pr7j/n2yN/6KChv+nmID/ooKG/59sjf/Pp53//+rI///y4///8uP///Lj///y4///
+ 8uP//+vH///jrP//46z//+Os///qyP//8uP///Lj/9W3wf+hbJj/nnym/4/a9v+P3fn/j935/4/d+f+Z
+ mbj/n2yN/59sjZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnW+QJ59sjf2f
+ cJH/kNHu/4/d+f+P3fn/j935/5W10/+fbI3/onCO/+7Op///46z//+Os///jrP//46z//+Os///jrP//
+ 46z//+Os///jrP//46z//+Os///jrP//6sj/0bK6/59sjf+fbI3/n2yN/59sjf+fbI3/0qud///jrP//
+ 6sj///Lj///y4///8uP///Lj///y4///68f//+Os///jrP//46z//+rI/+3Y1f+kcZr/oWyY/5S83f+P
+ 3fn/j935/4/d+f+Q0e3/n2+Q/59sjfyfboolAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAACebYypn2yN/5mVtf+P3fn/j935/4/d+f+P3fn/mZOx/59sjf+ufpH/99mq///jrP//
+ 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os//jhxP/Ttbz/0rO7/9Kzu//S
+ s7v/07Gt//jaqv//46z//+Os///qyP//8uP///Lj///y4///8uP///Lj///qyP//46z//+Os//fZq/+u
+ fp//oWyY/5mcwP+P3fn/j935/4/d+f+P3fn/mZS0/59sjf+fbI2lAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnGuMH59sjvWfbY3/lMHe/4/d+f+P3fn/j935/5DW8v+c
+ f57/n2yN/7SGlP/63av//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//
+ 46z//+rI///y4///8uP///Lj///y4///68f//+Os///jrP//46z//+rI///y4///8uP///Lj///y4///
+ 8uP//+vH//vdq/+1hZz/oWyY/52DrP+Q2fb/j935/4/d+f+P3fn/k8He/59tjf+gbo75omyLIQAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACebY58n2yN/5x9nf+Q
+ 2PP/j935/4/d+f+P3fn/kc7r/512lv+fbI3/s4WU//fYqf//46z//+Os///jrP//46z//+Os///jrP//
+ 46z//+Os///jrP//46z//+Os///jrP//6sj///Lj///y4///8uP///Lj///qyP//46z//+Os///jrP//
+ 6sj///Lj///y4///8uP///Lj//jo3f+2iKL/oWyY/597pf+R0vD/j935/4/d+f+P3fn/kNfz/518nP+f
+ bI3/n22MegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAkm2SB55sjc6fbI3/mpOz/4/d+f+P3fn/j935/4/d+f+Syuj/nXeX/59sjf+tfZH/7s6n///jrP//
+ 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///qyP//8uP///Lj///y4///
+ 8uP//+vH///jrP//46z//+Os///qyP//8uP///Lj//Ti2f+ufqL/oWyY/598pv+Rzu3/j935/4/d+f+P
+ 3fn/j935/5mTsf+fbI3/oG6Oz6qAgAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACfbooln22N8p9sjf+Xqsn/j935/4/d+f+P3fn/j935/5HO6v+d
+ fp//n2yN/6Jvjv/TrZ7//uGs///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//
+ 46z//+rI///y4///8uP///Lj///y4///68f//+Os///jrP//46z//+rI///y4//TtsP/oWyY/52Erf+Q
+ 1PH/j935/4/d+f+P3fn/j935/5epx/+fbI3/oG6O8qBtiiMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ5tjFSfbI39n22N/5W00f+P
+ 3fn/j935/4/d+f+P3fn/kNjz/5mTsf+fbI3/n2yN/6+Akv/hvqP//+Os///jrP//46z//+Os///jrP//
+ 46z//+Os///jrP//46z//+Os///jrP//6sj///Lj///y4///8uP///Lj///qyP//46z/6cen//LTqf/i
+ 59T/ndvy/5W42f+Q2fX/j935/4/d+f+P3fn/j935/5Wz0f+fbY3/n2uN/qFrjlEAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAn2yMbZ9sjf+fbY//lbTR/4/d+f+P3fn/j935/4/d+f+P3fn/lLfV/552lv+fbI3/n2yN/7GCk//W
+ sJ7/+Nuq///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///qyP//8uP///Lj///y4//e
+ w8n/soOh/6FsmP+kgaX/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/5Wz0f+fbY//n2yN/6BrjWsA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACga45+n2yN/59tjf+Xqsn/j935/4/d+f+P3fn/j935/4/d+f+Q
+ 2PP/l6bE/55zlP+fbI3/n2yN/6Fujv+1h5T/zqWc/+C8ov/tzKf/+Nqq//nbqv/+4az/9tmp/+7Npv/o
+ xqT//ujI///y4//t3Nf/oWyY/6FsmP+feKL/lbTW/4/d+f+P3fn/j935/4/d+f+P3fn/j935/5epx/+f
+ bY3/n2yN/55tjnwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKBrjWufbI39n2yN/5qRsP+Q
+ 1vL/j935/4/d+f+P3fn/j935/4/d+f+P2PT/lrDN/5yFpf+fbY7/n2yN/59sjf+fbI3/n2yN/59sjf+f
+ bI3/n2yN/59sjf+fbI3/n2yN/7ivtP+v4ev/lNv2/5imyv+Vt9j/j9v3/4/d+f+P3fn/j935/4/d+f+P
+ 3fn/kNjz/5qTs/+fbI3/n2yN/p9rjXIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAnm2MVKBsjvOfbI3/nH2d/5PB3v+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/kNPw/5W00f+Z
+ nLr/nIen/554mf+fb5D/n2yN/59sjf+fb5D/nXyc/5uKqf+Ryub/j935/4/d+f+P3fn/j935/4/d+f+P
+ 3fn/j935/4/d+f+P3fn/k8He/518nP+fbI3/n22N8p9tjFIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACfboolnmyNzp9sjf+fbY3/mZW1/5DR7v+P3fn/j935/4/d+f+P
+ 3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P
+ 3fn/j935/4/d+f+P3fn/j935/4/d+f+R0e7/mpW0/59tjf+fbI3/n2yNzZxqjiQAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJJtkgeebY58n2yN959sjf+f
+ b5D/mJq5/5HO6/+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P
+ 3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/5HO6v+Zmbn/n2+Q/59sjf+fbI33oGyNe5JtkgcA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAJ5pjyKebYypn2yN/Z9sjf+fbY7/moio/5Wz0P+Q1fH/j935/4/d+f+P3fn/j935/4/d+f+P
+ 3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+Q1PD/lbLQ/5uIqP+fbY7/n2yN/59sjf2f
+ bIynomyLIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ1vkCegbIyen2yN9p9sjf+fbI3/n22O/5yBof+Y
+ nLv/lrDN/5PB3v+Rzuv/kNXx/5Db9v+Q2/b/kNXx/5HO6v+Twd7/lrDN/5icu/+cgaH/n22N/59sjf+f
+ bI3/n2yN9p9rjZ2db5AnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKRtkg6f
+ bY1ioGyMu59sjfafbI3/n2yN/59sjf+fbI3/n2yN/59sjf+fbI3/n2yN/59sjf+fbI3/n2yN/59sjf+f
+ bI3/n2yN/59sjfafbI26nmyOYaRtkg4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACfYIAIn2yLQJ9sjHigbIyenmyMxp9sjd6fbI3un2yN+p9sjfqf
+ bI3un2yN3p5sjMagbIyen2yMeJ5tjj+SbZIHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////////
+ ////////////////////////AAD///////gAAB//////4AAAB/////+AAAAB/////gAAAAB////8AAAA
+ AD////gAAAAAH///8AAAAAAP///gAAAAAAf//8AAAAAAA///gAAAAAAB//8AAAAAAAD//gAAAAAAAH/+
+ AAAAAAAAf/wAAAAAAAA//AAAAAAAAD/4AAAAAAAAH/gAAAAAAAAf8AAAAAAAAA/wAAAAAAAAD/AAAAAA
+ AAAP4AAAAAAAAAfgAAAAAAAAB+AAAAAAAAAH4AAAAAAAAAfgAAAAAAAAB+AAAAAAAAAH4AAAAAAAAAfg
+ AAAAAAAAB+AAAAAAAAAH4AAAAAAAAAfgAAAAAAAAB+AAAAAAAAAH4AAAAAAAAAfgAAAAAAAAB+AAAAAA
+ AAAH4AAAAAAAAAfwAAAAAAAAD/AAAAAAAAAP8AAAAAAAAA/4AAAAAAAAH/gAAAAAAAAf/AAAAAAAAD/8
+ AAAAAAAAP/4AAAAAAAB//gAAAAAAAH//AAAAAAAA//+AAAAAAAH//8AAAAAAA///4AAAAAAH///wAAAA
+ AA////gAAAAAH////AAAAAA////+AAAAAH////+AAAAB/////+AAAAf/////+AAAH///////AAD/////
+ //////////////////////////////8oAAAAMAAAAGAAAAABACAAAAAAAAAkAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAonGLD6BsjUOfbI1un2yNmJ9sjayf
+ bI25n2yNuZ9sjaygbY2Xn2yNbqBsjUOicYsPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACfbooHonKQMaBuj2mfbY25n22O+Z5zlP+d
+ eZv/nH6g/5uBo/+bgqX/m4Kl/5uBo/+cfqD/nXmb/55zlP+ebY/5n2yOuJ9sjmafbI4vnGqOBwAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnGuMBKBujzKgbY6CoG6O3J5zlP6b
+ hKf/l5m9/5Sozf+Ss9n/kL3k/4/D6v+Px+3/j8bt/4/D6v+QveT/krPZ/5Sozf+Xmb3/moSm/55yk/2f
+ bI3ZnmyNgZ9sjjGib5EEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACqgIADn22MdaBtjdaf
+ bY/5mI+z/5Ow1P+QveP/jsft/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+O
+ x+3/kL3j/5Ov1P+Zj7P/nm2P+Z9sjdSfbI10qoCAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoWuOBaBtjTag
+ bY66nnOU/5mNsP+Rt93/jsjv/47I7/+OyO//jsjv/4/F7P+Ox+7/jsjv/47I7/+Qu+H/kLvh/47I7/+O
+ yO//jsfu/4/F7P+OyO//jsjv/47I7/+OyO//kbfd/5mMr/+ec5T/n2yNuKBtjTWfbIwFAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAoGyOUqBsjtCdd5n+laXK/4/C6f+OyO//jsjv/47I7/+OyO//j8Lp/5agxP+asdL/rNPj/7vU1f+m
+ jqf/po6n/7vU1f+t0d7/mq/P/5Whxf+Pwun/jsjv/47I7/+OyO//jsjv/4/C6f+Vpsr/nXia/Z9tjc+f
+ bI1RAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAACebY5Gn2yN45x/of+Tr9T/jsfu/47I7/+OyO//jsjv/47I7/+TzPD/t8/i/7KQp/+y
+ kqj/8uzb//nluv+2ipX/toqV//nisP/y4bT/sY2c/7KNnP+3ys//k8vt/47F7P+Oxuz/jsjv/47I7/+O
+ x+7/k6/U/5x/of+fbI3joGyNRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAn22MBZ9sjVKfbI3jmois/5C74v+OyO//jsjv/47I7/+Pye//n46v/7SYrv/x
+ 5d3//e/h/9Gyuv+yh57///Lj///v2f/Vs6z/1rCf///jrP//46z/tIeU/9Krnv/94Kv/8dit/7SToP+f
+ iaf/jsnv/47I7/+OyO//jsjv/5C74f+aiKv/n2yN459sjVGfbIwFAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnmyNNp9sjdCcf6H/kLvi/47I7/+OyO//jsjv/5LL7/+3
+ 2ev/ybK9/6d3lP/jy8r///Lj//Ti2f/q1dH///Lj///y4///79n//+a3///jrP//46z/7c2m//XWqf//
+ 46z/5cOk/6d2kP/Jq6T/ttPY/5HK7v+OyO//jsjv/47I7/+Qu+H/nH+h/59tjc+gbY01AAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACSbZIEn2yNuZ14mv2Tr9T/jsjv/47I7/+P
+ wuj/mLPT/8XZ2f/37t//9OPZ/8yrtv/r1tH///Lj///y4///8uP///Lj///y4///8uP//+7V///mtv//
+ 46z//+Os///jrP//46z/7s6n/8+onf/01qn/9uGx/8XTzf+Zq9D/j8Lp/47I7/+OyO//k67U/513mv2f
+ bI24qoCAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKJvkQSgbI11nnOU/5Wmyv+O
+ x+7/jsjv/5G84v+bhKf/tYiV//TVqf//57z///He///y4///8uP///Lj///y4///8uP///Lj///y4///
+ 8uP///Lj///v2f//57r//+Os///jrP//46z//+Os///jrP//46z//+Os/+/Pqf+0hJz/nISw/5C85P+O
+ yO//jsfu/5Wlyv+ec5T/n2yNdJ9wjwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ9sjjKf
+ bI7UmYyv/4/C6f+OyO//j8Hn/5iRtP+kdpX/4MO7//7ks///46z//+jB///w3P//8uP///Lj///y4///
+ 8uP///Lj///y4//87uD/79zV//3v4f//79n//+a2///jrP//46z//+Os///jrP//46z//+Os//7irP/g
+ u6X/pXSc/5mRu/+Pwej/jsjv/4/D6f+Zja//n2yN1J9sjTEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAnW+QB55tjYOfbo/5kbfe/47I7/+OyO//labK/59zk//Orbf//vDg///sz///5LH//+Ou///owf//
+ 8d7///Lj///y4///8uP///Lj//np3f/LqbT/sYWd/9e6v//77eD//+7V///mt///46z//+Os///jrP//
+ 46z//+Os///jrP/+4az/z6ai/6Fynf+Vpc7/jsjv/47I7/+Rt93/nm2P+Z5sjYGcao4HAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAoGyNMJ9sjdqYkLP/jsjv/47I7/+Pv+X/n3OU/8Kbp//359r///Lj///y4///
+ 7tP//+Wx///jrP//57z///He///y4///8uP/7NfS/7qRpf+hc4z/o4KG/6Jzjf/Foa//9uXb///v2f//
+ 57r//+Os///jrP//46z//+Os///jrP//46z/99mq/8KWn/+gdaD/kL/n/47I7/+OyO//mY+z/59sjdme
+ bI4vAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoG2NaZ5ylP2TsNX/jsjv/47H7v+XmLz/qnmR/+TEq///
+ 7M////Lj///y4///8uP//+3O///ls///46z//+jB//7v3P/o0s//s4mf/6F4iv+oon7/rcB1/6eagP+g
+ c4v/wZys/+/b1P//79j//+a2///jrP//46z//+Os///jrP//46z//+Os/+TBpv+reZr/l5rE/47I7/+O
+ yO//k6/U/55yk/2fbI5mAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAn2yNu5qEp/+QveT/jsjv/5C84f+c
+ fqD/wJWa//zfq///5LH//+7U///y4///8uP///Lh///sz///5LH//uKt/+DBr/+wg5v/onuJ/6quev+v
+ x3P/r8py/67Fc/+pp3z/onKO/7eNov/s19L//+7V///mt///46z//+Os///jrP//46z//+Os//zeq//A
+ lJ//nX+q/5C85P+OyO//kL3j/5qEpv+fbI64AAAAAAAAAAAAAAAAAAAAAAAAAACcbI0Qn22O+peavf+O
+ x+7/jsjv/5Wix/+fcZL/6dLK///pwP//5K7//+Sx///sz///8uH///Lj///y4//55s7/z6ed/6R0jf+j
+ g4b/rcB1/6/Jcv+vyXL/r8py/6/Jcv+vyXL/q7B5/6J+iP+ldpL/4cnI//vq1f//57r//+Os///jrP//
+ 46z//+Os///jrP/oxqf/oHKd/5akzf+OyO//jsft/5eZvf+fbY75nG2PDwAAAAAAAAAAAAAAAAAAAACf
+ a4xFnnOV/5Sozf+OyO//j8Tq/5iStf+qe5f//e/h///w3P//6cD//+Os///ls///7M////Lj//Ti2f/L
+ qbT/onON/6WRg/+tvnb/rsJ0/6iifv+rsXn/rsZz/6mnfP+pp3z/r8hy/6u1eP+kh4b/qXqW/9W3vf/5
+ 6NP//+a2///jrP//46z//+Os///jrP/836z/qnia/5mSvf+PxOv/jsjv/5Sozf+ec5T/n22OQwAAAAAA
+ AAAAAAAAAAAAAACfa41wnXmb/5K02f+OyO//kLzj/5uDpf+/l6L///Lj///y4///8d7//+i7///jrP//
+ 5LH/8tzJ/7+Yqf+icY//p5qA/67Cdf+uyHP/pY+E/6BxjP+mkoL/rb91/6OFhv+gc4v/qKF+/6/Hc/+t
+ v3X/pIqE/6Z1k//HpLD//ezT///mtv//46z//+Os///jrP//46z/v5Ke/5yEr/+QveX/jsjv/5Kz2f+d
+ eZr/n2yNbgAAAAAAAAAAAAAAAAAAAACebIyZnH6g/5C+5f+OyO//kbfc/513mf/Vrp7//+rI///x4P//
+ 8uP///He///pwP/z1Kr/rHyR/6F5iv+pqHz/r8ly/6y5d/+jhYb/pXOQ/6Ryjv+lj4P/rb52/6OEh/+m
+ dpP/o3OP/6aSg/+tv3X/rsV0/6ecf/+gdIv/v5mq//fk0f//57r//+Os///jrP//46z/1Kyi/554pP+R
+ t9//jsjv/5C95P+cfqD/oG2NlwAAAAAAAAAAAAAAAAAAAACfbI2tm4Kk/4/F6/+OyO//krPZ/55wkf/g
+ vKL//+Sw///qyP//8eD///Lj///w3P/cvLD/oHOL/6mlff+vyHP/q7N4/6ODhv+pe5X/0rG0/7SHl/+l
+ j4P/rb52/6OEh/+/mKn/y6m0/6Z4k/+ki4X/rb91/67Gc/+ml4H/q32Y/+jSzv//79n//+a2///jrP//
+ 46z/37ql/6Bynf+StNz/jsjv/4/F6/+bgaP/oG2NqwAAAAAAAAAAAAAAAAAAAACfbI25m4am/4/S8v+O
+ y/D/krHX/59tjv/lw6T//+Os///ksP//6sj///Lj///y4//bv8D/oXiK/6uzef+rtXj/onqJ/61/mf/f
+ xsf/8uDW/7eNof+lj4P/rb52/6OEh//Dnq3/+eve/9S3vf+nd5P/pImE/6y7dv+pp33/q32Y/+fRzv//
+ 8uP//+7V///mtv//46z/5cKm/6Fumv+Tstr/jsvx/4/S8/+bhqf/n2yNuAAAAAAAAAAAAAAAAAAAAACf
+ bI25m4en/5Db9/+P3fn/k8De/59tjv/lw6T//+Os///jrP//46z//+rI///x4P/bwMP/oHWK/6WQg/+h
+ dYv/uo6Y/+3UxP//8eH/8+HY/7eOo/+lj4P/rb52/6OEh//Dm6H///He///y4//n0c7/q32X/6J7if+l
+ joP/q32Y/+fRzv//8uP///Lj///v2f//57r/5cKn/6Fvmv+TwuL/j935/4/b9/+bh6f/n2yNuAAAAAAA
+ AAAAAAAAAAAAAACfbI2tm4al/5DY9P+P3fn/k8Pg/55xkv/gvKL//+Os///jrP//46z//+Sw///qyP/b
+ v7//n22N/6Fwjv+8kp7/8tOo///ls///7M//8+HY/7eOo/+lj4P/rb52/6OEh//DmJn//+jB///w3P//
+ 8uP/48vK/7SJoP+gb43/q32Y/+fRzv//8uP///Lj///y4///79n/372t/6Bznv+TxOT/j935/5DX8/+b
+ haX/oG2NqwAAAAAAAAAAAAAAAAAAAACebIyZnIKi/5HR7f+P3fn/ksfk/514mf/Vrp7//+Os///jrP//
+ 46z//+Os///ksP/dvrH/oW+P/8Oerf/y39P//+i7///jrP//5LH/893J/7eOo/+lj4P/rb52/6OEh//D
+ mJn//+Ou///owf//8d7//vDi/+vX0f+1i6H/q32Y/+jSzv//8uP///Lj///y4///8uP/1LO9/557pf+S
+ yOf/j935/5HQ7f+cgqL/oG2NlwAAAAAAAAAAAAAAAAAAAACfa41wnXyc/5LE4f+P3fn/kc7r/5uHp/+/
+ lZj//+Os///jrP//46z//+Os///jrP/736v/5cm3//zt3f//8uP///He///pwP//5K7/89Wr/7eLmv+l
+ j4P/rb52/6OEh//DnKX//+Wx///jrP//57z///He///y4//769//5tDN//zu4f//8uP///Lj///y4///
+ 8uP/v5iw/5yJsf+Rz+3/j935/5PE4f+dfJz/n2yNbgAAAAAAAAAAAAAAAAAAAACgbYxFnnWV/5W21P+P
+ 3fn/kNfz/5mYt/+qeZH//eCr///jrP//46z//+Os///jrP//46z//+Sw///qyP//8eD///Lj///w3P//
+ 6cD/89So/7eKlf+lj4P/rb52/6OEh//Dnq3//+3O///ls///46z//+jB///w3P//8uP///Lj///y4///
+ 8uP///Lj///y4//87uH/qnqf/5qbwP+Q2PX/j935/5W20/+edZX/oGyNQwAAAAAAAAAAAAAAAAAAAACd
+ bo4Qn26O+pekwv+P2/f/j9z4/5aty/+fcpL/6cil///jrP//46z//+Os///jrP//46z//+Os///ksP//
+ 6sj///Lj///y4///8d7/89m3/7eKlf+lj4P/rb52/6OEh//Dnq3///Lh///tzv//5bH//+Ou///owf//
+ 8d7///Lj///y4///8uP///Lj///y4//o0tD/oHOd/5aw0v+P3fn/j9v3/5ekwv+fbY75nG2PDwAAAAAA
+ AAAAAAAAAAAAAAAAAAAAoGyNvJuKqv+R0Oz/j935/5HL6P+cgaH/wJWY//zfq///46z//+Os///jrP//
+ 46z//+Os///jrP//46z//+rI///x4P//8uP/8+HW/7eMnf+lj4P/rb52/6OEh//Dnq3///Lj///y4///
+ 7tP//+Wx///jrP//57z///He///y4///8uP///Lj//zt4P/AmbH/nYOr/5HO7P+P3fn/kc/s/5uJqf+f
+ bI25AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoGyOaZ50lP2Tv9z/j935/4/c+P+Yn77/qnqQ/+XDo///
+ 46z//+Os///jrP//46z//+Os///jrP//46z//+Sw///qyP//8eD/8+HY/7eOo/+lj4P/rb52/6OEh//D
+ naj///Lj///y4///8uP//+3O///ls///46z//+jB///w3P//8uP///Lj/+XNzv+se6D/mKTI/4/d+f+P
+ 3fn/k77c/55zlP2ebI1nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoGyNMJ9sjdmYmLf/j935/4/d+f+R
+ z+z/n3ST/8KXmP/32an//+Os///jrP//46z//+Os///jrP//46z//+Os///ksP//6sj/8+HY/7eOo/+i
+ gYf/qJ1//6F6if/DmZz//+7U///y4///8uP///Lh///tzv//5bH//+Ou///owf//8d7/9+fd/8Kcsv+g
+ d6H/kdLv/4/d+f+P3fn/mZi3/59sjdmfbI0vAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnW+QB59sjYOf
+ bo/5kcnm/4/d+f+P3fn/lq3L/59ykv/Pp53//uGs///jrP//46z//+Os///jrP//46z//+Os///jrP//
+ 46z/9t7A/8Oeq/+sfpn/rH6Z/6x+l//QqJ3//+Sx///sz///8uH///Lj///y4///7tP//+Sx///jrP/+
+ 5bz/z628/6F0nv+WsdT/j935/4/d+f+RyeX/n26P+Z9sjYGfbooHAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAJ5tjDKfbI3VmZW0/5DW8v+P3fn/kNPv/5mVtP+kdZH/37yi//7irP//46z//+Os///jrP//
+ 46z//+Os///jrP//46z//uOv//LZvf/p0sz/6dPP/+nSzP/33rz//+Os///ls///7M////Lj///y4///
+ 8uP//+zP//7ks//gu6b/pXad/5qZv/+Q1PL/j935/5DW8v+ZlLP/n22N1qBsjTIAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAJxrjASebY52nnWV/5W00f+P3Pj/j935/5LL6P+bhaX/rH2S/9+7ov/+
+ 4av//+Os///jrP//46z//+Os///jrP//46z//+Os///ksP//6sj///Lj///y4///8d7//+e8///jrP//
+ 5LH//+7U///y4///8uP//vDg/+HDvv+ufZz/nYmx/5LN7P+P3fn/j9z4/5Wz0f+edZX/n22NdaJsiwQA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACSbZIEnmyNup17m/2Uv9z/j935/4/d+f+R
+ 0u//m4al/6R1kf/Pp53/99mp///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+rI///x4P//
+ 8uP///He///pwP//5K7//+Sx///sz///8uH/3MDH/6V2nv+cirL/kNXy/4/d+f+P3fn/k77b/517m/2g
+ bY66qoCAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAn22MN59sjdGc
+ hKT/kc7q/4/d+f+P3fn/ksvn/5mVtP+fcpL/wJaY/+PBo//73qv//+Os///jrP//46z//+Os///jrP//
+ 46z//+Sw///qyP//8eD///Lj///w3P//6cH//OCr//basf/z6dP/sbvS/5mgxf+Rzuz/j935/4/d+f+R
+ zer/nIOj/59sjdCgbY02AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAnm2MBZ9sjFOfbI3kmo+u/5HO6v+P3fn/j935/5DT7/+Vrsz/n3OS/6l5kP+/lJj/58Wk//zgq///
+ 46z//+Os///jrP//46z//+Os///ksP//6sj///Lj///y4//s1s//wZWi/7WMof+pzd3/ktr2/5DY9f+P
+ 3fn/j935/5HN6v+ajq7/n2yN46BrjVKha44FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACga45Hn2yN45yEpP+Uvtz/j9z4/4/d+f+P3fn/kdDs/5igv/+c
+ gaH/n3GS/6h3kP++kZf/0que/965ov/iv6P/5cKk/925of/XsZ//7N/M/+Hl4v+tk7P/nYOs/5eoy/+Q
+ 1fL/j935/4/d+f+P3Pj/lL7c/5yDo/+fbI3lnm2ORgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAn2yNUp9sjdGdepr+lbPR/5DW8v+P
+ 3fn/j935/4/c+P+SzOj/lq3L/5mYt/+ch6b/nniY/59wkf+fbI3/n2yN/59xkv+deZn/o8XW/5je9f+T
+ yOf/kc/s/4/d+f+P3fn/j935/5DW8v+Vs9H/nXub/Z9sjdCfbI1VAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnm2MBZ9tjTee
+ bI26nnWV/5mVtP+Ryeb/j935/4/d+f+P3fn/j9z4/5DX8/+Rzuv/ksfk/5PD4P+Twd7/k8He/5PD4P+S
+ x+T/j9n1/4/d+f+P3fn/j935/4/d+f+P3fn/ksnm/5qVs/+edZX/n2yNuZ5sjTafbYwFAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAACSbZIEnm2Odp9sjdafbo/5mJi3/5O/3P+R0Oz/j9z4/4/d+f+P3fn/j935/4/d+f+P
+ 3fn/j935/4/d+f+P3fn/j935/4/d+f+P2/f/kdDs/5O/3P+ZmLf/n26P+Z9sjdWgbI12km2SBAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnmmPBJ5sjTOfbI2Dn2yN2p5zlP2biqr/l6XD/5W21P+T
+ xOH/kdHt/5DX9P+Q2/f/kNv3/5DX8/+R0e3/k8Th/5W21P+XpML/m4qq/55zlP2fbI3Zn2yNgp9sjDKi
+ bIsEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACdb5AHoGyNMJ9sjWmg
+ bIy7n26O+p51lf+dfJz/nIKi/5uFpf+bh6f/m4en/5uFpf+cgqL/nXyc/551lf+fbo76n2yNu59sjmif
+ a40vnW+QBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAn2mIEZ9sjEWgbIxvnmyMmZ9sja2fbI25n2yNuZ9sja2ebIyZoGyMb59sjUWb
+ bY8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////AAD///////8AAP//wAP/
+ /wAA//wAAD//AAD/8AAAD/8AAP/gAAAH/wAA/4AAAAH/AAD/gAAAAf8AAP8AAAAA/wAA/AAAAAA/AAD8
+ AAAAAD8AAPgAAAAAHwAA8AAAAAAPAADwAAAAAA8AAOAAAAAABwAA4AAAAAAHAADgAAAAAAcAAOAAAAAA
+ BwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADA
+ AAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAA4AAAAAAHAADgAAAAAAcAAOAAAAAA
+ BwAA4AAAAAAHAADwAAAAAA8AAPAAAAAADwAA+AAAAAAfAAD8AAAAAD8AAPwAAAAAPwAA/wAAAAD/AAD/
+ gAAAAf8AAP+AAAAB/wAA/+AAAAf/AAD/8AAAD/8AAP/8AAA//wAA///AA///AAD///////8AAP//////
+ /wAAKAAAACAAAABAAAAAAQAgAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoG+NEZ9sjUWfbI1on2yNep9sjXqf
+ bI1on2yNRaBvjREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACfbooJoXCQa59tjsaecJH9m4Om/5iRtP+X
+ mLz/l5i8/5iRtP+bg6b/nnCS/Z9sjcWfbI5nnGqOCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACqgIACn22NZZ9tjumaiaz/k67T/4/G7f+O
+ yO//jsjv/47I7/+OyO//jsjv/47I7/+Pxu3/k67T/5qJrP+ebY7ooG2NY6qAgAIAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoWuOFKBtjbmcgaP/kbfd/47I7/+O
+ yO//jsju/4/D6v+OyO//kbfc/5G33P+OyO//j8Pq/47I7/+OyO//jsjv/5G23P+bgKL/n2yNuJ9sjBQA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ5tjh+fbI3al5e6/47H7v+O
+ yO//jsjv/5DK7/+uv9f/qYij/+jm0v/Lp5//y6ef/+jfu/+phZz/rrzK/5DK7v+Oxu3/jsjv/47H7v+X
+ l7v/n2yN2aBsjR8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACfbYwVn2yN2pWgxf+O
+ yO//jsjv/4/J7/+ihqX/4dDQ//zu4f+8laf///Lj/+3Uwv/tzKb//+Os/7+Ul//84Kv/4caq/6KCnv+P
+ ye//jsjv/47I7/+VoMX/n2yN2Z9sjBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkm2SAp9sjbmX
+ l7v/jsjv/4/F7P+XwOD/4+fg/+LJyf/WuL7///Lj///y4///8uP///Lj///ryP//46z//+Os///jrP/Z
+ tKD/4r+j/+Pevf+Yu93/j8Xs/47I7/+Xl7v/n2yNuKqAgAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACg
+ bI5km4Cj/47H7v+Ox+7/moms/8ylnf//5bP///Dc///y4///8uP///Lj///y4///8uP///Lj///ryP//
+ 46z//+Os///jrP//46z//+Os/8qfof+bibT/jsju/47H7v+bgaP/n22NZAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAnW+QCp9tjumRt93/jsjv/5aewf+3jaP//e7a///ls///5bP///Dc///y4///8uP///Lj/+TMyv/G
+ orD/+uzf///ryP//46z//+Os///jrP//46z//eCs/7iJnf+Xnsf/jsjv/5G23P+ebY7onGqOCQAAAAAA
+ AAAAAAAAAAAAAACgbY1pmoqs/47I7/+QveP/o3SS//Th0///8uP///Dc///ls///5bP///Dc///y4//V
+ uL7/onaM/6WMhP+xhZ3/8+HY///rx///46z//+Os///jrP//46z/9NWq/6R1nP+QvuX/jsjv/5qJrP+e
+ bI5nAAAAAAAAAAAAAAAAAAAAAJ9sjceTrtT/jsjv/5iTtv/NpZ3//+Wz///w3P//8uP///Dc///ls//9
+ 4rP/xaGu/6J+iP+tvnb/r8py/6iiff+oeZT/6dPQ///ryP//46z//+Os///jrP//46z/zaSi/5mUvv+O
+ yO//k67T/59sjcUAAAAAAAAAAAAAAACebIwSnnGS/Y7G7f+Ox+7/n3OU//Th0///5bP//+Wz///w3P//
+ 8uP/+ObW/7eKlf+kiYX/rsZz/6/Ic/+vynL/r8hz/6qvev+jdY7/3MHE///rx///46z//+Os///jrP/0
+ 1ar/oHSf/47H7v+Pxu3/nnCR/Z5tjhEAAAAAAAAAAJ9rjUabhKb/jsjv/5K02f+yhZr///Lj///w3P//
+ 5bP//+Wz/+/az/+sfpj/p5iB/6/Ic/+mk4L/pIeF/6y1eP+hdYr/rLd4/6y7d/+ieon/zKu1//7qx///
+ 46z//+Os///jrP+ygpz/krXd/47I7/+bg6b/n2yNRAAAAAAAAAAAn2yNapiStf+OyO//laTI/8Wamf//
+ 6sj///Lj///w3P/y1a//pXaO/6mofP+uxnP/pIeF/619kv+jhIf/q7N5/6h5lf+kdpD/qq17/67DdP+j
+ g4f/yKSx///rx///46z//+Os/8WZn/+Vpc7/jsjv/5iRtP+fbI1oAAAAAAAAAACfbI16l56//47L8P+W
+ m7//zaWc///jrP//6sj///Lj/+fQyv+jhIf/rcF1/6J/iP/GorD/5s7J/6OEh/+rs3n/t46j/+zY0v+p
+ e5b/qKJ9/6uzef+3jqP///Lj///rx///46z/zqWh/5edxv+Oy/H/l56//59sjXkAAAAAAAAAAJ9sjXqY
+ osD/j935/5elxP/Nppz//+Os///jrP//6sj/59HO/6F5if+ieYr/062h///w3P/n0c7/o4SH/6uzef+3
+ i5n///Dc//Xk2v+vgpv/o4OG/7eOo///8uP///Lj///rx//OpaL/mKjL/4/d+f+XosD/n2yNeQAAAAAA
+ AAAAn2yNapmauf+P3fn/lq/O/8Wamf//46z//+Os///jrP/oy7b/onGQ/9/Ewf//5bP//+Wz/+fPx/+j
+ hIf/q7N5/7eKlf//5bP///Dc//rq3v+4j6P/uI6j///y4///8uP///Lj/8Wdr/+WstT/j935/5mauf+f
+ bI1oAAAAAAAAAACfa41Gm4mp/4/d+f+Tw+D/soST///jrP//46z//+Os//3hrP/y2r////Lj///w3P//
+ 5bP/58ao/6OEh/+rs3n/t42f///ls///5bP///Dc//3v4f/z4dj///Lj///y4///8uP/soWm/5PF5f+P
+ 3fn/m4mo/59sjUUAAAAAAAAAAKBujRKecpL9j9v3/5Da9/+fdJT/9Nap///jrP//46z//+Os///jrP//
+ 6sj///Lj///w3P/nx6v/o4SH/6uzef+3jqP///Dc///ls///5bP///Dc///y4///8uP///Lj//Ti2v+g
+ daD/j9v4/5Db9/+ecZL9nm2OEQAAAAAAAAAAAAAAAJ9sjceUvtv/j935/5mauf/NpZz//+Os///jrP//
+ 46z//+Os///jrP//6sj///Lj/+fQyv+jhIf/q7N5/7eOo///8uP///Dc///ls///5bP///Dc///y4///
+ 8uP/zqy8/5mdwv+P3fn/lL3a/59sjcUAAAAAAAAAAAAAAAAAAAAAoGyNaJqQsP+P3fn/kc3q/6N1kf/1
+ 1qn//+Os///jrP//46z//+Os///jrP//6sj/59HO/6J9iP+ooH7/t4uZ///w3P//8uP///Dc///ls///
+ 5bP///Dc//Tj2v+ldp//kdDu/4/d+f+akK//nmyNaAAAAAAAAAAAAAAAAAAAAACdb5AKn22O6ZLI5f+P
+ 3fn/l6TD/7eKlf/94az//+Os///jrP//46z//+Os///jrP/y2L3/uZCk/7mQpP/PqaD//+Wz///w3P//
+ 8uP///Dc///ls//94rP/uI2q/5eozP+P3fn/ksjl/59tjuifbooJAAAAAAAAAAAAAAAAAAAAAAAAAACe
+ bI5knIal/4/c+P+P2/f/moyr/8CVmP/94Kv//+Os///jrP//46z//+Os///jrP//6sj///Lj///w3P//
+ 5bP//+Wz///w3P//8uP//e7b/8KWoP+cj7b/j9z4/4/c+P+chqX/oG6NZQAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAJJtkgKfbI25mKLB/4/d+f+Q2PX/m4yr/7eKlf/01an//+Os///jrP//46z//+Os///jrP//
+ 6sj///Lj///w3P//5bP//+Wz///w3P/Gobb/m5C3/5DZ9v+P3fn/mKHA/6BtjbmqgIACAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAJ5tjBWfbI3alq3L/4/d+f+P3Pj/l6XD/6N0kf/MpJz/89So///jrP//
+ 46z//+Os///jrP//6sj///Lj//fk1v/PpqP/wsbH/5TT7/+P3Pj/j935/5asy/+fbI3aoWuOFAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKBrjiCfbI3amKHA/4/b9/+P3fn/kc7q/5mauf+f
+ c5T/sIGT/8OYmf/Mo5z/zaWc/8Wbmf/Z29P/r7LM/5mewv+R0/D/j935/4/c+P+YocD/n2yN3J5tjh8A
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ5tjBWfbI25m4al/5LI5f+P
+ 3fn/j935/4/b9/+Tw9//lq7N/5elxP+XpcT/lrDO/5DY9P+P3fn/j935/4/d+f+SyOX/nIal/59sjbmf
+ bYwVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJJtkgKf
+ bI1ln22O6ZqQsP+Tvdv/j9v3/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/b9/+Uvdv/mpCw/59tjumg
+ bI1lkm2SAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAACdb5AKoGyNaZ9sjceecpL9m4mp/5mauf+YosD/mKLA/5mauf+bian/nnKS/Z9sjcaf
+ bI1onW+QCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ9rihKgbIxGn2yNaZ9sjXqfbI16n2yNaaBsjEad
+ bY4SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/
+ //////AP//+AAf/+AAB//AAAP/gAAB/wAAAP4AAAB+AAAAfAAAADwAAAA8AAAAOAAAABgAAAAYAAAAGA
+ AAABgAAAAYAAAAGAAAABgAAAAcAAAAPAAAADwAAAA+AAAAfgAAAH8AAAD/gAAB/8AAA//gAAf/+AAf//
+ 8A///////ygAAAAQAAAAIAAAAAEAIAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAACgbY0Vn2yNOJ9sjTigbY0VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAqoCAAJ9tjlaaiq3MlaHF/pOu0/+TrtP/laDF/pmKrcqfbY5VqoCAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAnm2OCJx8nqmSsdf/j8jv/5201P+1w8//tcHJ/52z0P+PyO7/krHX/5x8nqmgbI0IAAAAAAAAAAAA
+ AAAAkm2SAJx8nqmQveT/ps7n/862v//u2tP/+urb//rfsf/uzqf/z6+j/6bK3v+QveT/nHyeqaqAgAAA
+ AAAAAAAAAJ9tjlaSsdf/nZ+///LXt///7tT///Lj//jo3f/w287//+Wz///jrP/x0an/np7B/5Kx1/+f
+ bY5VAAAAAAAAAACaiq3Lkbje/9m4rf//8eD//+i9//DZyP+xmpL/q5+E/+HGwf//5bP//+Os/9m0pf+R
+ uOD/mYqtygAAAACfa40WlaHF/pydvf/86tH//+i9/+TMyP+snYP/qqp7/6qvev+ppX7/0rSy///ls//8
+ 36v/nZzB/5Whxf6fbY4Vn2yNOZOx1f+voK///+rI//bizv+omYH/rpuM/7aUmv+tm4r/uZ2d/6mnfP/f
+ xMD//+Wz/7Cgtf+TsdX/n2yNOJ9sjTmUvtv/sKWy///jrP/z2r7/sYmZ//Tauf/Fqqj/sZ6I//zq0f/B
+ oKn/28DD///w3P+wp7z/k73b/59sjTifbI0Wlq3L/p2lv//84Kv//+Os//zmxv//7tP/xaWY/7Ggjf//
+ 6L3//+3T//zu4P/87uH/nafI/5aty/6fbI0VAAAAAJqRsMuSyOX/2bWg///jrP//46z//+rI/8Woqv+w
+ m43///Hg///ovf//7tT/2b7G/5LK6P+akbDLAAAAAAAAAACfbY5Wk8Lf/56lvv/uzqf//+Os///jrP/q
+ zbX/4cfB///ovf//8eD/79O4/5+oyf+Twd//n22OVgAAAAAAAAAAkm2SAJyAoKqR0Oz/nqW//9i0oP/8
+ 36v//+Os///qyP/969L/5NC+/6G41f+R0O3/nICgqaqAgAAAAAAAAAAAAAAAAACga44InICgqpPC3/+S
+ yOX/nKS//6+ksf+wpbL/qtHj/5LL6f+Twt//nICgqp5tjggAAAAAAAAAAAAAAAAAAAAAAAAAAJJtkgCf
+ bY5WmpGwy5aty/6Uvdv/lL3b/5aty/6akbDLn22NVpJtkgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAACfbIwWn2yNOZ9sjTmfbIwWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/D8AAOAHAADA
+ AwAAgAEAAIABAACAAQAAAAAAAAAAAAAAAAAAAAAAAIABAACAAQAAgAEAAMADAADgBwAA/D8AAA==
+
+
+
\ No newline at end of file
diff --git a/GSecPs3Decrypter.csproj b/GSecPs3Decrypter.csproj
new file mode 100644
index 0000000..a340c3f
--- /dev/null
+++ b/GSecPs3Decrypter.csproj
@@ -0,0 +1,127 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {246200F0-C813-4898-BCD8-9B3338735928}
+ WinExe
+ GSecPs3Decrypter
+ GSecPs3Decrypter
+ v4.7.2
+ 512
+ true
+ true
+ publish\
+ true
+ Disk
+ false
+ Foreground
+ 7
+ Days
+ false
+ false
+ true
+ 0
+ 1.0.0.%2a
+ false
+ false
+ true
+
+
+ AnyCPU
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ AnyCPU
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+ icon.ico
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Form
+
+
+ Form1.cs
+
+
+
+
+
+
+
+
+
+
+
+ Form1.cs
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+ Designer
+
+
+ True
+ Resources.resx
+ True
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+ True
+ Settings.settings
+ True
+
+
+
+
+
+
+
+
+
+
+
+
+
+ False
+ Microsoft .NET Framework 4.7.2 %28x86 and x64%29
+ true
+
+
+ False
+ .NET Framework 3.5 SP1
+ false
+
+
+
+
\ No newline at end of file
diff --git a/GSecPs3Decrypter.csproj.user b/GSecPs3Decrypter.csproj.user
new file mode 100644
index 0000000..337aec9
--- /dev/null
+++ b/GSecPs3Decrypter.csproj.user
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+ en-US
+ false
+
+
\ No newline at end of file
diff --git a/GSecPs3Decrypter.sln b/GSecPs3Decrypter.sln
new file mode 100644
index 0000000..4cc042b
--- /dev/null
+++ b/GSecPs3Decrypter.sln
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.29519.181
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GSecPs3Decrypter", "GSecPs3Decrypter.csproj", "{246200F0-C813-4898-BCD8-9B3338735928}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {246200F0-C813-4898-BCD8-9B3338735928}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {246200F0-C813-4898-BCD8-9B3338735928}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {246200F0-C813-4898-BCD8-9B3338735928}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {246200F0-C813-4898-BCD8-9B3338735928}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {4E0E8636-2078-46B4-B5BA-6DAD4688CE4A}
+ EndGlobalSection
+EndGlobal
diff --git a/PS3FileSystem/Delegates.cs b/PS3FileSystem/Delegates.cs
new file mode 100644
index 0000000..68abc92
--- /dev/null
+++ b/PS3FileSystem/Delegates.cs
@@ -0,0 +1,32 @@
+/* Copyright (c) 2013 - 2014 Jappi88 (Jappi88 at Gmail dot com)
+*
+* This(software Is provided) 'as-is', without any express or implied
+* warranty. In no event will the authors be held liable for any damages arising from the use of this software.
+*
+* Permission is granted to anyone to use this software for any purpose,
+* including commercial applications*, and to alter it and redistribute it
+* freely, subject to the following restrictions:
+*
+* 1. The origin of this software must not be misrepresented; you must not
+* claim that you wrote the original software. If you use this software
+* in a product, an acknowledge in the product documentation is required.
+*
+* 2. Altered source versions must be plainly marked as such, and must not
+* be misrepresented as being the original software.
+*
+* 3. This notice may not be removed or altered from any source distribution.
+*
+* *Contact must be made to discuses permission and terms.
+*/
+
+namespace PS3FileSystem
+{
+ public enum MessageType
+ {
+ Info,
+ Warning,
+ Error
+ }
+
+ public delegate void PS3Action(object sender, string message, MessageType type);
+}
\ No newline at end of file
diff --git a/PS3FileSystem/Functions.cs b/PS3FileSystem/Functions.cs
new file mode 100644
index 0000000..1cd8d81
--- /dev/null
+++ b/PS3FileSystem/Functions.cs
@@ -0,0 +1,280 @@
+/* Copyright (c) 2013 - 2014 Jappi88 (Jappi88 at Gmail dot com)
+*
+* This(software Is provided) 'as-is', without any express or implied
+* warranty. In no event will the authors be held liable for any damages arising from the use of this software.
+*
+* Permission is granted to anyone to use this software for any purpose,
+* including commercial applications*, and to alter it and redistribute it
+* freely, subject to the following restrictions:
+*
+* 1. The origin of this software must not be misrepresented; you must not
+* claim that you wrote the original software. If you use this software
+* in a product, an acknowledge in the product documentation is required.
+*
+* 2. Altered source versions must be plainly marked as such, and must not
+* be misrepresented as being the original software.
+*
+* 3. This notice may not be removed or altered from any source distribution.
+*
+* *Contact must be made to discuses permission and terms.
+*/
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Net;
+using System.Security.Cryptography;
+using System.Threading;
+using System.Windows.Forms;
+
+namespace PS3FileSystem
+{
+ internal static class Functions
+ {
+ public static string[] StaticKeys => new[]
+ {
+ "syscon_manager_key=D413B89663E1FE9F75143D3BB4565274",
+ "keygen_key=6B1ACEA246B745FD8F93763B920594CD53483B82",
+ "savegame_param_sfo_key=0C08000E090504040D010F000406020209060D03",
+ "trophy_param_sfo_key=5D5B647917024E9BB8D330486B996E795D7F4392",
+ "tropsys_dat_key=B080C40FF358643689281736A6BF15892CFEA436",
+ "tropusr_dat_key=8711EFF406913F0937F115FAB23DE1A9897A789A",
+ "troptrns_dat_key=91EE81555ACC1C4FB5AAE5462CFE1C62A4AF36A5",
+ "tropconf_sfm_key=E2ED33C71C444EEBC1E23D635AD8E82F4ECA4E94",
+ "fallback_disc_hash_key=D1C1E10B9C547E689B805DCD9710CE8D"
+ };
+
+ public static ushort SwapByteOrder(this ushort value)
+ {
+ return (ushort) ((value & 0xFFU) << 8 | (value & 0xFF00U) >> 8);
+ }
+
+ public static uint SwapByteOrder(this uint value)
+ {
+ return (value & 0x000000FFU) << 24 | (value & 0x0000FF00U) << 8 |
+ (value & 0x00FF0000U) >> 8 | (value & 0xFF000000U) >> 24;
+ }
+
+ public static ulong SwapByteOrder(this ulong value)
+ {
+ return
+ ((value & 0xff00000000000000L) >> 56) |
+ ((value & 0x00ff000000000000L) >> 40) |
+ ((value & 0x0000ff0000000000L) >> 24) |
+ ((value & 0x000000ff00000000L) >> 8) |
+ ((value & 0x00000000ff000000L) << 8) |
+ ((value & 0x0000000000ff0000L) << 24) |
+ ((value & 0x000000000000ff00L) << 40) |
+ ((value & 0x00000000000000ffL) << 56);
+ }
+
+ public static bool CompareBytes(byte[] a, byte[] b)
+ {
+ if (a.Length != b.Length)
+ return false;
+ for (var i = 0; i < a.Length; i++)
+ {
+ if (a[i] != b[i])
+ return false;
+ }
+ return true;
+ }
+
+ public static byte[] DecryptWithPortability(byte[] iv, byte[] data, int data_size)
+ {
+ var x = new AesCryptoServiceProvider();
+ x.Mode = CipherMode.CBC;
+ x.Padding = PaddingMode.Zeros;
+ var key = GetStaticKey("syscon_manager_key");
+ if (iv.Length != 16)
+ Array.Resize(ref iv, 16);
+ return x.CreateDecryptor(key, iv).TransformFinalBlock(data, 0, data_size);
+ }
+
+ public static byte[] EncryptWithPortability(byte[] iv, byte[] data, int data_size)
+ {
+ var x = new AesCryptoServiceProvider();
+ x.Mode = CipherMode.CBC;
+ x.Padding = PaddingMode.Zeros;
+ var key = GetStaticKey("syscon_manager_key");
+ if (iv.Length != 16)
+ Array.Resize(ref iv, 16);
+ return x.CreateEncryptor(key, iv).TransformFinalBlock(data, 0, data_size);
+ }
+
+ public static byte[] StringToByteArray(this string hex)
+ {
+ if (hex.Length%2 != 0) hex = hex.PadLeft(hex.Length + 1, '0');
+ return Enumerable.Range(0, hex.Length)
+ .Where(x => x%2 == 0)
+ .Select(x => Convert.ToByte(hex.Substring(x, 2), 16))
+ .ToArray();
+ }
+
+ public static byte[] GetStaticKey(string name)
+ {
+ foreach (var line in StaticKeys)
+ {
+ var x = line.Split('=')[0];
+ if (x.ToLower() == name.ToLower())
+ {
+ var value = line.Split('=')[1];
+ return StringToByteArray(value);
+ }
+ }
+ return null;
+ }
+
+ private static SecureFileInfo[] xDownloadAldosGameConfig()
+ {
+ try
+ {
+ var text = new WebClient().DownloadString("http://ps3tools.aldostools.org/games.conf");
+ if (text == null || text.Length < 100)
+ return new SecureFileInfo[] {};
+ return ReadConfigFromtext(text);
+ }
+ catch
+ {
+ return new SecureFileInfo[] {};
+ }
+ }
+
+ public static SecureFileInfo[] ReadConfigFromtext(string inputtext)
+ {
+ var files = new List();
+ using (var sr = new StringReader(inputtext))
+ {
+ string line;
+ var s = line = sr.ReadLine();
+ while (s != null && sr.Peek() > -1 && !s.Equals("; -- UNPROTECTED GAMES --"))
+ Application.DoEvents();
+
+ var s1 = line = sr.ReadLine();
+ while (s1 != null && sr.Peek() > -1 && s1.StartsWith(";"))
+ files.Add(new SecureFileInfo(line.Replace(";", ""), "", "", "", false));
+
+ while (sr.Peek() > -1)
+ {
+ var s2 = line = sr.ReadLine();
+ while (s2 != null && sr.Peek() > -1 && s2.StartsWith(";"))
+ {
+ if (line != null)
+ {
+ var name = line.Replace(";", "");
+ var s3 = line = sr.ReadLine();
+ if (s3 != null && s3.StartsWith("["))
+ {
+ var id = line;
+ var readLine = sr.ReadLine();
+ if (readLine != null)
+ {
+ var diskhashkey = readLine.Split('=')[1];
+ var secureid = readLine.Split('=')[1];
+ files.Add(new SecureFileInfo(name, id, secureid, diskhashkey,
+ !string.IsNullOrEmpty(secureid) && secureid.Length == 32));
+ }
+ }
+ }
+ }
+ }
+ sr.Close();
+ }
+ return files.ToArray();
+ }
+
+ public static SecureFileInfo[] DownloadAldosGameConfig()
+ {
+ SecureFileInfo[] x = {};
+ var t = new Thread(() => x = xDownloadAldosGameConfig());
+ t.Start();
+ while (t.ThreadState != ThreadState.Stopped)
+ Application.DoEvents();
+ return x;
+ }
+
+ public static byte[] GetHMACSHA1(byte[] key, byte[] data, int start, int length)
+ {
+ return new HMACSHA1(key).ComputeHash(data, start, length);
+ }
+
+ public static byte[] CalculateFileHMACSha1(string file, byte[] key)
+ {
+ byte[] hash;
+ using (var fs = new FileStream(file, FileMode.Open))
+ {
+ hash = new HMACSHA1(key).ComputeHash(fs);
+ fs.Close();
+ }
+ return hash;
+ }
+
+ public static byte[] CalculateFileHMACSha1(Stream input, byte[] key)
+ {
+ return new HMACSHA1(key).ComputeHash(input);
+ }
+
+ public static byte[] Decrypt(byte[] key, byte[] input, int length)
+ {
+ Array.Resize(ref key, 16);
+ var x1 = Aes.Create();
+ x1.Key = key;
+ x1.BlockSize = 128;
+ x1.Mode = CipherMode.ECB;
+ x1.Padding = PaddingMode.Zeros;
+ var x2 = Aes.Create();
+ x2.Key = key;
+ x1.BlockSize = 128;
+ x2.Mode = CipherMode.ECB;
+ x2.Padding = PaddingMode.Zeros;
+ var nums = length/16;
+ var output = new byte[length];
+ for (var i = 0; i < nums; i++)
+ {
+ var blockdata = new byte[16];
+ Array.Copy(input, i*16, blockdata, 0, 16);
+ var offset = i*16;
+ var buffer = new byte[16];
+ Array.Copy(BitConverter.GetBytes(SwapByteOrder((ulong) i)), 0, buffer, 0, 8);
+ buffer = x1.CreateEncryptor().TransformFinalBlock(buffer, 0, buffer.Length);
+ blockdata = x2.CreateDecryptor().TransformFinalBlock(blockdata, 0, blockdata.Length);
+ for (var j = 0; j < 16; j++)
+ blockdata[j] ^= buffer[j];
+ Array.Copy(blockdata, 0, output, i*16, 16);
+ }
+ return output;
+ }
+
+ public static byte[] Encypt(byte[] key, byte[] input, int length)
+ {
+ Array.Resize(ref key, 16);
+ var x1 = Aes.Create();
+ x1.Key = key;
+ x1.BlockSize = 128;
+ x1.Mode = CipherMode.ECB;
+ x1.Padding = PaddingMode.Zeros;
+ var x2 = Aes.Create();
+ x2.Key = key;
+ x1.BlockSize = 128;
+ x2.Mode = CipherMode.ECB;
+ x2.Padding = PaddingMode.Zeros;
+ var nums = length/16;
+ var output = new byte[length];
+ for (var i = 0; i < nums; i++)
+ {
+ var blockdata = new byte[16];
+ Array.Copy(input, i*16, blockdata, 0, 16);
+ var offset = i*16;
+ var buffer = new byte[16];
+ Array.Copy(BitConverter.GetBytes(SwapByteOrder((ulong) i)), 0, buffer, 0, 8);
+ buffer = x1.CreateEncryptor().TransformFinalBlock(buffer, 0, buffer.Length);
+ for (var j = 0; j < 16; j++)
+ blockdata[j] ^= buffer[j];
+ blockdata = x2.CreateEncryptor().TransformFinalBlock(blockdata, 0, blockdata.Length);
+ Array.Copy(blockdata, 0, output, i*16, 16);
+ }
+ return output;
+ }
+ }
+}
\ No newline at end of file
diff --git a/PS3FileSystem/PARAM_SFO.cs b/PS3FileSystem/PARAM_SFO.cs
new file mode 100644
index 0000000..ce48033
--- /dev/null
+++ b/PS3FileSystem/PARAM_SFO.cs
@@ -0,0 +1,344 @@
+/* Copyright (c) 2013 - 2014 Jappi88 (Jappi88 at Gmail dot com)
+*
+* This(software Is provided) 'as-is', without any express or implied
+* warranty. In no event will the authors be held liable for any damages arising from the use of this software.
+*
+* Permission is granted to anyone to use this software for any purpose,
+* including commercial applications*, and to alter it and redistribute it
+* freely, subject to the following restrictions:
+*
+* 1. The origin of this software must not be misrepresented; you must not
+* claim that you wrote the original software. If you use this software
+* in a product, an acknowledge in the product documentation is required.
+*
+* 2. Altered source versions must be plainly marked as such, and must not
+* be misrepresented as being the original software.
+*
+* 3. This notice may not be removed or altered from any source distribution.
+*
+* *Contact must be made to discuses permission and terms.
+*/
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Text;
+
+namespace PS3FileSystem
+{
+ public class PARAM_SFO
+ {
+ public enum DataTypes : uint
+ {
+ GameData = 0x4744,
+ SaveData = 0x5344,
+ AppPhoto = 0x4150,
+ AppMusic = 0x414D,
+ AppVideo = 0x4156,
+ BroadCastVideo = 0x4256,
+ AppleTV = 4154,
+ WebTV = 5754,
+ CellBE = 0x4342,
+ Home = 0x484D,
+ StoreFronted = 0x5346,
+ HDDGame = 0x4847,
+ DiscGame = 0x4447,
+ AutoInstallRoot = 0x4152,
+ DiscPackage = 0x4450,
+ ExtraRoot = 0x5852,
+ VideoRoot = 0x5652,
+ ThemeRoot = 0x5452,
+ DiscMovie = 0x444D,
+ None
+ }
+
+ public enum FMT : ushort
+ {
+ UTF_8 = 0x0400,
+ ASCII = 0x0402,
+ UINT32 = 0x0404
+ }
+
+ public PARAM_SFO(string filepath)
+ {
+ Init(new FileStream(filepath, FileMode.Open, FileAccess.Read, FileShare.Read));
+ }
+
+ public PARAM_SFO(byte[] inputdata)
+ {
+ Init(new MemoryStream(inputdata));
+ }
+
+ public PARAM_SFO(Stream input)
+ {
+ Init(input);
+ }
+
+ public Table[] Tables { get; private set; }
+
+ public string AccountID
+ {
+ get
+ {
+ if (Tables == null)
+ return "";
+ foreach (var t in Tables)
+ if (t.Name.ToLower() == "account_id")
+ return t.Value;
+ return "";
+ }
+ }
+
+ public DataTypes DataType
+ {
+ get
+ {
+ if (Tables == null)
+ return DataTypes.None;
+ foreach (var t in Tables)
+ if (t.Name == "CATEGORY")
+ return (DataTypes) BitConverter.ToUInt16(Encoding.UTF8.GetBytes(t.Value), 0);
+ return DataTypes.None;
+ }
+ }
+
+ public string Detail
+ {
+ get
+ {
+ if (Tables == null)
+ return "";
+ foreach (var t in Tables)
+ if (t.Name == "DETAIL")
+ return t.Value;
+ return "";
+ }
+ }
+
+ public uint ParentalControl
+ {
+ get
+ {
+ if (Tables == null)
+ return 0;
+ foreach (var t in Tables)
+ if (t.Name == "PARENTAL_LEVEL")
+ return uint.Parse(t.Value);
+ return 0;
+ }
+ }
+
+ public string DirectoryName
+ {
+ get
+ {
+ if (Tables == null)
+ return "";
+ foreach (var t in Tables)
+ if (t.Name == "SAVEDATA_DIRECTORY")
+ return t.Value;
+ return "";
+ }
+ }
+
+ public string TitleID
+ {
+ get
+ {
+ var name = DirectoryName;
+ if (name == "")
+ return "";
+ return name.Split('-')[0];
+ }
+ }
+
+ public string SubTitle
+ {
+ get
+ {
+ if (Tables == null)
+ return "";
+ foreach (var t in Tables)
+ if (t.Name == "SUB_TITLE")
+ return t.Value;
+ return "";
+ }
+ }
+
+ public string Title
+ {
+ get
+ {
+ if (Tables == null)
+ return "";
+ foreach (var t in Tables)
+ if (t.Name == "TITLE")
+ return t.Value;
+ return "";
+ }
+ }
+
+ private string ReadValue(BinaryReader br, index_table table)
+ {
+ br.BaseStream.Position = Header.DataTableStart + table.param_data_offset;
+ switch (table.param_data_fmt)
+ {
+ case FMT.ASCII:
+ return Encoding.ASCII.GetString(br.ReadBytes((int) table.param_data_max_len)).Replace("\0", "");
+ case FMT.UINT32:
+ return br.ReadUInt32().ToString();
+ case FMT.UTF_8:
+ return Encoding.UTF8.GetString(br.ReadBytes((int) table.param_data_max_len)).Replace("\0", "");
+ default:
+ return null;
+ }
+ }
+
+ private string ReadName(BinaryReader br, index_table table)
+ {
+ br.BaseStream.Position = Header.KeyTableStart + table.param_key_offset;
+ var name = "";
+ while ((byte) br.PeekChar() != 0)
+ name += br.ReadChar();
+ br.BaseStream.Position++;
+ return name;
+ }
+
+ private void Init(Stream input)
+ {
+ using (var br = new BinaryReader(input))
+ {
+ Header.Read(br);
+ if (!Functions.CompareBytes(Header.Magic, new byte[] {0, 0x50, 0x53, 0x46}))
+ throw new Exception("Invalid PARAM.SFO Header Magic");
+ var tables = new List();
+ for (var i = 0; i < Header.IndexTableEntries; i++)
+ {
+ var t = new index_table();
+ t.Read(br);
+ tables.Add(t);
+ }
+ var xtables = new List();
+ var count = 0;
+ foreach (var t in tables)
+ {
+ var x = new Table();
+ x.index = count;
+ x.Indextable = t;
+ x.Name = ReadName(br, t);
+ x.Value = ReadValue(br, t);
+ count++;
+ xtables.Add(x);
+ }
+ Tables = xtables.ToArray();
+ br.Close();
+ }
+ }
+
+ public struct Header
+ {
+ public static byte[] Magic = {0, 0x50, 0x53, 0x46};
+ public static byte[] version = {01, 01, 0, 0};
+ public static uint KeyTableStart;
+ public static uint DataTableStart;
+ public static uint IndexTableEntries;
+
+ private static byte[] Buffer
+ {
+ get
+ {
+ var header = new byte[20];
+ Array.Copy(Magic, 0, header, 0, 4);
+ Array.Copy(version, 0, header, 4, 4);
+ Array.Copy(BitConverter.GetBytes(KeyTableStart), 0, header, 8, 4);
+ Array.Copy(BitConverter.GetBytes(DataTableStart), 0, header, 12, 4);
+ Array.Copy(BitConverter.GetBytes(IndexTableEntries), 0, header, 16, 4);
+ return header;
+ }
+ }
+
+ public static void Read(BinaryReader input)
+ {
+ input.BaseStream.Seek(0, SeekOrigin.Begin);
+ input.Read(Magic, 0, 4);
+ input.Read(version, 0, 4);
+ KeyTableStart = input.ReadUInt32();
+ DataTableStart = input.ReadUInt32();
+ IndexTableEntries = input.ReadUInt32();
+ }
+ }
+
+ public struct Table
+ {
+ public int index;
+ public index_table Indextable;
+ public string Name;
+ public string Value;
+
+ private byte[] NameBuffer
+ {
+ get
+ {
+ var buffer = new byte[Name.Length + 1];
+ Array.Copy(Encoding.UTF8.GetBytes(Name), 0, buffer, 0, Name.Length);
+ return buffer;
+ }
+ }
+
+ private byte[] ValueBuffer
+ {
+ get
+ {
+ byte[] buffer;
+ switch (Indextable.param_data_fmt)
+ {
+ case FMT.ASCII:
+ buffer = new byte[Indextable.param_data_max_len];
+ Array.Copy(Encoding.ASCII.GetBytes(Value), 0, buffer, 0, Value.Length);
+ return buffer;
+ case FMT.UINT32:
+ return BitConverter.GetBytes(uint.Parse(Value));
+ case FMT.UTF_8:
+ buffer = new byte[Indextable.param_data_max_len];
+ Array.Copy(Encoding.UTF8.GetBytes(Value), 0, buffer, 0, Value.Length);
+ return buffer;
+ default:
+ return null;
+ }
+ }
+ }
+ }
+
+ public struct index_table
+ {
+ public FMT param_data_fmt; /* param_data data type */
+ public uint param_data_len; /* param_data used bytes */
+ public uint param_data_max_len; /* param_data total reserved bytes */
+ public uint param_data_offset; /* param_data offset (relative to start offset of data_table) */
+ public ushort param_key_offset; /* param_key offset (relative to start offset of key_table) */
+
+ private byte[] Buffer
+ {
+ get
+ {
+ var data = new byte[16];
+ Array.Copy(BitConverter.GetBytes(param_key_offset), 0, data, 0, 2);
+ Array.Copy(BitConverter.GetBytes(((ushort) param_data_fmt).SwapByteOrder()), 0, data, 2, 2);
+ Array.Copy(BitConverter.GetBytes(param_data_len), 0, data, 4, 4);
+ Array.Copy(BitConverter.GetBytes(param_data_max_len), 0, data, 8, 4);
+ Array.Copy(BitConverter.GetBytes(param_data_offset), 0, data, 12, 4);
+ return data;
+ }
+ }
+
+ public void Read(BinaryReader input)
+ {
+ param_key_offset = input.ReadUInt16();
+ param_data_fmt = (FMT) input.ReadUInt16().SwapByteOrder();
+ param_data_len = input.ReadUInt32();
+ param_data_max_len = input.ReadUInt32();
+ param_data_offset = input.ReadUInt32();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/PS3FileSystem/Param_PFD.cs b/PS3FileSystem/Param_PFD.cs
new file mode 100644
index 0000000..202f014
--- /dev/null
+++ b/PS3FileSystem/Param_PFD.cs
@@ -0,0 +1,1196 @@
+/* Copyright (c) 2013 - 2014 Jappi88 (Jappi88 at Gmail dot com)
+*
+* This(software Is provided) 'as-is', without any express or implied
+* warranty. In no event will the authors be held liable for any damages arising from the use of this software.
+*
+* Permission is granted to anyone to use this software for any purpose,
+* including commercial applications*, and to alter it and redistribute it
+* freely, subject to the following restrictions:
+*
+* 1. The origin of this software must not be misrepresented; you must not
+* claim that you wrote the original software. If you use this software
+* in a product, an acknowledge in the product documentation is required.
+*
+* 2. Altered source versions must be plainly marked as such, and must not
+* be misrepresented as being the original software.
+*
+* 3. This notice may not be removed or altered from any source distribution.
+*
+* *Contact must be made to discuses permission and terms.
+*/
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Security.Cryptography;
+using System.Text;
+
+namespace PS3FileSystem
+{
+ public class Param_PFD
+ {
+ #region static variables
+
+ internal static bool pfd_istropy = false;
+ internal static byte[] pfdheaderkey = new byte[16];
+ internal static byte[] pfdkey = new byte[16];
+ internal static byte[] pfdhashkey = new byte[20];
+ internal static byte[] pfdhash = new byte[20];
+ internal static byte[] entrykey = new byte[64];
+ internal static byte[] realkey = new byte[20];
+ internal static byte[] consoleid = new byte[32];
+ internal static byte[] userid = {0, 0, 0, 0, 0, 0, 0, 1};
+ internal static byte[] securefileid;
+ internal static byte[] authenticationid = {0x10, 0x10, 0x00, 0x00, 0x01, 0x00, 0x00, 0x03};
+
+ internal static byte[] dischashkey =
+ {
+ 0xD1, 0xC1, 0xE1, 0x0B, 0x9C, 0x54, 0x7E, 0x68, 0x9B, 0x80, 0x5D, 0xCD,
+ 0x97, 0x10, 0xCE, 0x8D
+ };
+
+ #endregion
+
+ #region internal/Private methods
+
+ internal byte[] GenerateHashkeyForSFO(int hashindex)
+ {
+ if (hashindex > 3)
+ return null;
+ switch (hashindex)
+ {
+ case 0:
+ return Functions.GetStaticKey("savegame_param_sfo_key");
+ case 1:
+ return ConsoleID;
+ case 2:
+ return DiscHashKey;
+ case 3:
+ return AuthenticationID;
+ default:
+ return null;
+ }
+ }
+
+ internal byte[] GerateHashKeyForSecureFileID(byte[] secureid)
+ {
+ if (secureid.Length != 16)
+ throw new Exception("SecureFileID must be 16 bytes in length");
+ var key = new byte[20];
+ Array.Copy(secureid, 0, key, 0, 16);
+ for (int i = 0, j = 0; i < key.Length; i++)
+ {
+ switch (i)
+ {
+ case 1:
+ key[i] = 11;
+ break;
+ case 2:
+ key[i] = 15;
+ break;
+ case 5:
+ key[i] = 14;
+ break;
+ case 8:
+ key[i] = 10;
+ break;
+ default:
+ key[i] = secureid[j++];
+ break;
+ }
+ }
+ return key;
+ }
+
+ internal byte[] GetEntryHashKey(PFDEntry entry, int hashindex)
+ {
+ switch (entry.file_name.ToLower())
+ {
+ case "param.sfo":
+ return GenerateHashkeyForSFO(hashindex);
+ case "tropsys.dat":
+ return Functions.GetStaticKey("tropsys_dat_key");
+ case "tropusr.dat":
+ return Functions.GetStaticKey("tropusr_dat_key");
+ case "troptrns.dat":
+ return Functions.GetStaticKey("troptrns_dat_key");
+ case "tropconf.sfm":
+ return Functions.GetStaticKey("tropconf_sfm_key");
+ default:
+ return GerateHashKeyForSecureFileID(SecureFileID);
+ }
+ }
+
+ internal byte[] GetEntryKey(PFDEntry entry)
+ {
+ var key = GetEntryHashKey(entry, 0);
+ return Functions.DecryptWithPortability(key, entry.key, entry.key.Length);
+ }
+
+ internal byte[] GetTopHash()
+ {
+ var buffer = PFDHashTable.Buffer;
+ buffer = Functions.GetHMACSHA1(realkey, buffer, 0, buffer.Length);
+ return buffer;
+ }
+
+ internal byte[] GetBottomHash()
+ {
+ var buffer = PFDEntrySignatureTable.Buffer;
+ buffer = Functions.GetHMACSHA1(realkey, buffer, 0, buffer.Length);
+ return buffer;
+ }
+
+ internal byte[] GetDefaultHash()
+ {
+ return new HMACSHA1(realkey).ComputeHash(new byte[] {});
+ }
+
+ internal ulong CalculateHashTableEntryIndex(string name)
+ {
+ var len = name.Length;
+ ulong hash = 0;
+ for (var i = 0; i < len; ++i)
+ hash = (hash << 5) - hash + (byte) name[i];
+ return hash%PFDHashTable.capacity;
+ ;
+ }
+
+ internal void Init(Stream input)
+ {
+ DoProgress("Initializing Param.PFD stream..", MessageType.Info);
+ using (var br = new BinaryReader(input))
+ {
+ PFDHeader.magic = br.ReadUInt64().SwapByteOrder();
+ if (PFDHeader.magic != 0x50464442ul)
+ {
+ DoProgress("Invalid PFD File!", MessageType.Error);
+ throw new Exception("Invalid PFD File!");
+ }
+ PFDHeader.version = br.ReadUInt64().SwapByteOrder();
+ if (PFDHeader.version != 3ul && PFDHeader.version != 4ul)
+ {
+ DoProgress("Unsupported PFD version!", MessageType.Error);
+ throw new Exception("Unsupported PFD version!");
+ }
+ DoProgress("Allocating Header Data..", MessageType.Info);
+ pfdheaderkey = br.ReadBytes(16);
+ var header = br.ReadBytes(64);
+ header = Functions.DecryptWithPortability(pfdheaderkey, header, header.Length);
+ PFDSignature.bottom_hash = new byte[20];
+ Array.Copy(header, 0, PFDSignature.bottom_hash, 0, 20);
+ PFDSignature.top_hash = new byte[20];
+ Array.Copy(header, 20, PFDSignature.top_hash, 0, 20);
+ PFDSignature.hash_key = new byte[20];
+ Array.Copy(header, 40, PFDSignature.hash_key, 0, 20);
+ PFDSignature.padding = new byte[4];
+ Array.Copy(header, 60, PFDSignature.padding, 0, 4);
+ header = null;
+
+ if (PFDHeader.version == 4ul)
+ realkey = Functions.GetHMACSHA1(Functions.GetStaticKey("keygen_key"), PFDSignature.hash_key, 0, 20);
+ else
+ realkey = PFDSignature.hash_key;
+ DoProgress("Reading Entries..", MessageType.Info);
+ PFDHashTable.capacity = br.ReadUInt64().SwapByteOrder();
+ PFDHashTable.num_reserved = br.ReadUInt64().SwapByteOrder();
+ PFDHashTable.num_used = br.ReadUInt64().SwapByteOrder();
+ PFDHashTable.entries = new List();
+ DoProgress("Reading table capicity (" + PFDHashTable.capacity + " entries)..", MessageType.Info);
+ for (ulong i = 0; i < PFDHashTable.capacity; i++)
+ PFDHashTable.entries.Add(br.ReadUInt64().SwapByteOrder());
+
+ PFDEntries.entries = new List();
+ DoProgress("Reading used tables (" + PFDHashTable.num_used + " entries)..", MessageType.Info);
+ for (ulong i = 0; i < PFDHashTable.num_used; i++)
+ {
+ var x = new PFDEntry();
+ x.additional_index = br.ReadUInt64().SwapByteOrder();
+ x.file_name = Encoding.ASCII.GetString(br.ReadBytes(65)).Replace("\0", "");
+ x.__padding_0 = br.ReadBytes(7);
+ x.key = br.ReadBytes(64);
+ x.file_hashes = new List();
+ for (var j = 0; j < 4; j++)
+ x.file_hashes.Add(br.ReadBytes(20));
+ x.__padding_1 = br.ReadBytes(40);
+ x.file_size = br.ReadUInt64().SwapByteOrder();
+ PFDEntries.entries.Add(x);
+ }
+ var offset =
+ (long)
+ ((ulong) br.BaseStream.Position + 0x110*(PFDHashTable.num_reserved - PFDHashTable.num_used));
+ br.BaseStream.Position = offset;
+ PFDEntrySignatureTable.hashes = new List();
+ DoProgress("Reading file table hashes (" + PFDHashTable.capacity + " entries)..", MessageType.Info);
+ for (ulong i = 0; i < PFDHashTable.capacity; i++)
+ PFDEntrySignatureTable.hashes.Add(br.ReadBytes(20));
+ br.Close();
+ }
+ }
+
+ internal static int AlignedSize(int size)
+ {
+ return (size + 16 - 1) & ~(16 - 1);
+ }
+
+ internal byte[] GetEntryHash(int entryindex)
+ {
+ if (entryindex >= PFDEntries.entries.Count)
+ throw new Exception("entryindex is out of bounds");
+ var ent = PFDEntries.entries[entryindex];
+ var tableindex = CalculateHashTableEntryIndex(ent.file_name);
+ var currententryindex = PFDHashTable.entries[(int) tableindex];
+
+ if (currententryindex < PFDHashTable.num_reserved)
+ {
+ var sha1 = new HMACSHA1(realkey);
+ var hashdata = new List();
+ while (currententryindex < PFDHashTable.num_reserved)
+ {
+ ent = PFDEntries.entries[(int) currententryindex];
+ hashdata.AddRange(ent.HashData);
+ currententryindex = ent.additional_index;
+ }
+ sha1.ComputeHash(hashdata.ToArray());
+ hashdata.Clear();
+ return sha1.Hash;
+ }
+ return null;
+ }
+
+ private void DoProgress(string message, MessageType type)
+ {
+ ProgressChanged?.Invoke(this, message, type);
+ }
+
+ internal struct PFDEntries
+ {
+ internal static List entries;
+ }
+
+ ///
+ /// A PFD Entry contains child file info
+ ///
+ public class PFDEntry
+ {
+ internal byte[] __padding_0;
+ internal byte[] __padding_1;
+ internal ulong additional_index;
+ internal List file_hashes;
+ internal string file_name;
+ internal ulong file_size;
+ internal byte[] key;
+
+ internal byte[] EntryData
+ {
+ get
+ {
+ var ms = new MemoryStream();
+ using (var bw = new BinaryWriter(ms))
+ {
+ bw.Write(additional_index.SwapByteOrder());
+ var name = new byte[65];
+ Array.Copy(Encoding.ASCII.GetBytes(file_name), 0, name, 0, file_name.Length);
+ bw.Write(name, 0, name.Length);
+ bw.Write(__padding_0, 0, __padding_0.Length);
+ bw.Write(key, 0, key.Length);
+ for (var i = 0; i < file_hashes.Count; i++)
+ bw.Write(file_hashes[i], 0, file_hashes[i].Length);
+ bw.Write(__padding_1, 0, __padding_1.Length);
+ bw.Write(file_size.SwapByteOrder());
+ return ms.ToArray();
+ }
+ }
+ }
+
+ internal byte[] HashData
+ {
+ get
+ {
+ var ms = new MemoryStream();
+ using (var bw = new BinaryWriter(ms))
+ {
+ var name = new byte[65];
+ Array.Copy(Encoding.ASCII.GetBytes(file_name), 0, name, 0, file_name.Length);
+ bw.Write(name, 0, name.Length);
+ bw.Write(key, 0, key.Length);
+ for (var i = 0; i < file_hashes.Count; i++)
+ bw.Write(file_hashes[i], 0, file_hashes[i].Length);
+ bw.Write(__padding_1, 0, __padding_1.Length);
+ bw.Write(file_size.SwapByteOrder());
+ return ms.ToArray();
+ }
+ }
+ }
+ }
+
+ internal struct PFDEntrySignatureTable
+ {
+ internal static List hashes = new List();
+
+ internal static byte[] Buffer
+ {
+ get
+ {
+ var buffer = new byte[hashes.Count*20];
+ for (var i = 0; i < hashes.Count; i++)
+ Array.Copy(hashes[i], 0, buffer, i*20, 20);
+ return buffer;
+ }
+ }
+ }
+
+ internal struct PFDHashTable
+ {
+ public static ulong capacity;
+ public static ulong num_reserved;
+ public static ulong num_used;
+ public static List entries = new List();
+
+ public static byte[] Buffer
+ {
+ get
+ {
+ var ms = new MemoryStream();
+ using (var bw = new BinaryWriter(ms))
+ {
+ bw.Write(capacity.SwapByteOrder());
+ bw.Write(num_reserved.SwapByteOrder());
+ bw.Write(num_used.SwapByteOrder());
+ foreach (var value in entries)
+ bw.Write(value.SwapByteOrder());
+ return ms.ToArray();
+ }
+ }
+ }
+ }
+
+ internal struct PFDHeader
+ {
+ internal static ulong magic;
+ internal static ulong version;
+ }
+
+ internal struct PFDSignature
+ {
+ internal static byte[] bottom_hash;
+ internal static byte[] top_hash;
+ internal static byte[] hash_key;
+ internal static byte[] padding;
+
+ internal static byte[] Buffer
+ {
+ get
+ {
+ var data = new byte[64];
+ Array.Copy(bottom_hash, 0, data, 0, 20);
+ Array.Copy(top_hash, 0, data, 20, 20);
+ Array.Copy(hash_key, 0, data, 40, 20);
+ Array.Copy(padding, 0, data, 60, 4);
+ return data;
+ }
+ }
+ }
+
+ #endregion
+
+ #region Constructors
+
+ ///
+ /// Initialize new PARAM.PFD Instance
+ ///
+ public Param_PFD()
+ {
+ }
+
+ ///
+ /// Initialize new PARAM.PFD Instance
+ ///
+ /// the param.pfd filepath
+ public Param_PFD(string filepath)
+ {
+ Init(new FileStream(filepath, FileMode.Open, FileAccess.Read, FileShare.Read));
+ }
+
+ ///
+ /// Initialize new PARAM.PFD Instance
+ ///
+ /// Param.pfd as byte array
+ public Param_PFD(byte[] inputdata)
+ {
+ Init(new MemoryStream(inputdata));
+ }
+
+ ///
+ /// Initialize new PARAM.PFD Instance
+ ///
+ /// System.IO.Stream for Param.pfd
+ /// nput">
+ ///
+ public Param_PFD(Stream input)
+ {
+ Init(input);
+ }
+
+ #endregion
+
+ #region public methods
+
+ #region Validations
+
+ ///
+ /// Check if Top hash is valid, fix if needed
+ ///
+ /// set 'true' if you wish to fix it if hash is invalid
+ /// true if top hash is valid
+ public bool ValidTopHash(bool fix)
+ {
+ var hash = GetTopHash();
+ if (!Functions.CompareBytes(hash, PFDSignature.top_hash))
+ if (fix)
+ PFDSignature.top_hash = hash;
+ else
+ return false;
+ return true;
+ }
+
+ ///
+ /// Check if Bottom hash is valid, fix if needed
+ ///
+ /// set 'true' if you wish to fix it if hash is invalid
+ /// true if bottom hash is valid
+ public bool ValidBottomHash(bool fix)
+ {
+ var hash = GetBottomHash();
+ if (!Functions.CompareBytes(hash, PFDSignature.bottom_hash))
+ if (fix)
+ PFDSignature.bottom_hash = hash;
+ else
+ return false;
+ return true;
+ }
+
+ ///
+ /// validate all Empty bottom hashes and fix it if needed
+ ///
+ /// set 'true' if you wish to fix all invalid hashes
+ /// true if File CID is valid
+ public bool ValidFileCID(bool fix)
+ {
+ var buffer = GetDefaultHash();
+ if (buffer == null)
+ return false;
+ var indexes = new List();
+ foreach (var ent in PFDEntries.entries)
+ indexes.Add((int) CalculateHashTableEntryIndex(ent.file_name));
+ for (var i = 0; i < PFDEntrySignatureTable.hashes.Count; i++)
+ {
+ if (indexes.IndexOf(i) > -1)
+ continue;
+ if (!Functions.CompareBytes(buffer, PFDEntrySignatureTable.hashes[i]))
+ if (fix)
+ PFDEntrySignatureTable.hashes[i] = buffer;
+ else
+ return false;
+ }
+ return true;
+ }
+
+ ///
+ /// Check if File CID2 is valid, fix if needed
+ ///
+ /// set 'true' if you wish to fix it if hash is invalid
+ /// true if File CID2 is valid
+ public bool ValidDHKCID2(bool fix)
+ {
+ for (var i = 0; i < PFDEntries.entries.Count; i++)
+ {
+ var hash = GetEntryHash(i);
+ var index = (int) CalculateHashTableEntryIndex(PFDEntries.entries[i].file_name);
+ if (!Functions.CompareBytes(hash, PFDEntrySignatureTable.hashes[index]))
+ if (fix)
+ PFDEntrySignatureTable.hashes[index] = hash;
+ else
+ return false;
+ }
+ return true;
+ }
+
+ ///
+ /// Check if entry hash is valid, fix if needed
+ ///
+ /// the input stream of the real file
+ /// filename that is also specified inside the Param.PFD file entries
+ /// set true if you wish to fix the file entry hash if invalid
+ /// true if file entry hash is valid
+ public bool ValidEntryHash(Stream input, string entryname, bool fix)
+ {
+ if (!input.CanRead || !input.CanWrite)
+ throw new Exception("Unable to Access stream");
+ input.Position = 0;
+ foreach (var t in PFDEntries.entries)
+ {
+ if (entryname.ToLower() == t.file_name.ToLower())
+ {
+ if (t.file_name.ToLower() == "param.sfo")
+ {
+ Console.WriteLine("Here!");
+ }
+ for (var i = 0; i < 4; i++)
+ {
+ if (t.file_name.ToLower() == "param.sfo" && i != 0)
+ continue;
+ if (!pfd_istropy && i > 0)
+ continue;
+ var key = GetEntryHashKey(t, i);
+ key = Functions.CalculateFileHMACSha1(input, key);
+ if (!Functions.CompareBytes(key, t.file_hashes[i]))
+ if (fix)
+ t.file_hashes[i] = key;
+ else
+ return false;
+ }
+
+ return true;
+ }
+ }
+ return false;
+ }
+
+ ///
+ /// Check if entry hash is valid, fix if needed
+ ///
+ /// the filepath of the file that is specified inside the Param.PFD file entries
+ /// set true if you wish to fix the file entry hash if invalid
+ /// true if file entry hash is valid
+ public bool ValidEntryHash(string filepath, bool fix)
+ {
+ if (SecureFileID == null)
+ return false;
+ if (!File.Exists(filepath))
+ throw new Exception(filepath + " does not exist!");
+ var filename = new FileInfo(filepath).Name;
+ var x = false;
+ using (var fs = new FileStream(filepath, FileMode.Open, FileAccess.ReadWrite, FileShare.Read))
+ {
+ x = ValidEntryHash(fs, filename, fix);
+ }
+ return x;
+ }
+
+ ///
+ /// Check if all entry hashes are valid, and fix them if needed
+ ///
+ /// The root directory where the PARAM.PFD and al its child files are located
+ /// set true if you wish to fix all invalid entry hashes
+ ///
+ /// true if all file entry hashes are valid<
+ public bool ValidAllEntryHashes(string rootdirectory, bool fix)
+ {
+ for (var i = 0; i < PFDEntries.entries.Count; i++)
+ {
+ var filepath = rootdirectory + "\\" + PFDEntries.entries[i].file_name;
+ if (!File.Exists(filepath))
+ return false;
+ if (!ValidEntryHash(filepath, fix))
+ return false;
+ }
+ return true;
+ }
+
+ ///
+ /// Check if All Param.PFD Hashes are valid,and Fix them if needed
+ ///
+ /// The root directory where the PARAM.PFD and al its child files are located
+ /// set true if you wish to fix all invalid hashes
+ /// true if all hashes are valid
+ public bool ValidAllParamHashes(string rootdirectory, bool fix)
+ {
+ return ValidAllEntryHashes(rootdirectory, fix) && ValidDHKCID2(fix) && ValidFileCID(fix) &&
+ ValidTopHash(fix) && ValidBottomHash(fix);
+ }
+
+ #endregion
+
+ ///
+ /// initialize new PARAM.PFD instance
+ ///
+ /// valid Param.PFD filepath
+ public void INIT(string filepath)
+ {
+ Init(new FileStream(filepath, FileMode.Open, FileAccess.Read, FileShare.Read));
+ }
+
+ ///
+ /// Rebuild the Param.PFD with all changes made
+ ///
+ /// The root path where all the Entry files are stored
+ /// True if you wish to encrypt all files that are decrypted
+ /// true if PARAM.PFD is succesfully Rebuilded
+ public bool RebuilParamPFD(string rootdirectory, bool encryptfiles)
+ {
+ try
+ {
+ if (!File.Exists(rootdirectory + "\\PARAM.SFO"))
+ return false;
+ DoProgress("Rebuilding Param.PFD..", MessageType.Info);
+ if (encryptfiles)
+ {
+ DoProgress("ReEncrypting Files..", MessageType.Info);
+ if (EncryptAllFiles(rootdirectory) == -1)
+ return false;
+ }
+ DoProgress("Validating Param.PFD Hashes..", MessageType.Info);
+ if (!ValidAllParamHashes(rootdirectory, true))
+ return false;
+ DoProgress("Writing new Param.PFD..", MessageType.Info);
+ File.WriteAllBytes(rootdirectory + "\\PARAM.PFD", GetParamPFDCombinedData());
+ DoProgress("Param.PFD Rebuilding complete! Rebuilded FilePath => " + rootdirectory + "\\PARAM.PFD",
+ MessageType.Info);
+ return true;
+ }
+ catch (Exception ex)
+ {
+ DoProgress(ex.Message, MessageType.Error);
+ return false;
+ }
+ }
+
+ ///
+ /// Combine and get the loaded PARAM.PFD file as byte array
+ ///
+ /// Compiled PARAM.PFD as a byte array
+ public byte[] GetParamPFDCombinedData()
+ {
+ byte[] buffer = null;
+ DoProgress("Rebuilding new Param.PFD..", MessageType.Info);
+ using (var ms = new MemoryStream())
+ {
+ using (var bw = new BinaryWriter(ms))
+ {
+ bw.Write(PFDHeader.magic.SwapByteOrder());
+ bw.Write(PFDHeader.version.SwapByteOrder());
+ bw.Write(pfdheaderkey, 0, pfdheaderkey.Length);
+ buffer = PFDSignature.Buffer;
+ buffer = Functions.EncryptWithPortability(pfdheaderkey, buffer, buffer.Length);
+ bw.Write(buffer, 0, buffer.Length);
+ buffer = PFDHashTable.Buffer;
+ bw.Write(buffer, 0, buffer.Length);
+ foreach (var t in PFDEntries.entries)
+ {
+ buffer = t.EntryData;
+ bw.Write(buffer, 0, buffer.Length);
+ }
+ buffer = new byte[0x110*(PFDHashTable.num_reserved - PFDHashTable.num_used)];
+ bw.Write(buffer, 0, buffer.Length);
+ buffer = PFDEntrySignatureTable.Buffer;
+ bw.Write(buffer, 0, buffer.Length);
+ buffer = new byte[0x8000 - ms.Length];
+ if (buffer.Length > 0)
+ bw.Write(buffer, 0, buffer.Length);
+ buffer = ms.ToArray();
+ bw.Close();
+ }
+ }
+ DoProgress("Rebuild Completed!", MessageType.Info);
+ return buffer;
+ }
+
+ public bool EntryExists(string name)
+ {
+ if (PFDEntries.entries == null || PFDEntries.entries.Count == 0)
+ return false;
+ foreach (var ent in PFDEntries.entries)
+ if (ent.file_name.ToLower() == name.ToLower())
+ return true;
+ return false;
+ }
+
+ ///
+ /// Progress Changed event, use this to recieve any progress made by this instance
+ ///
+ public event PS3Action ProgressChanged;
+
+ #region Properties
+
+ public byte[] ConsoleID
+ {
+ get { return consoleid; }
+ set
+ {
+ if (value.Length != 32) throw new Exception("ConsoleID must be 32 bytes in length");
+ consoleid = value;
+ }
+ }
+
+ public byte[] DiscHashKey
+ {
+ get { return dischashkey; }
+ set
+ {
+ if (value.Length != 16) throw new Exception("DiscHashKey must be 16 bytes in length");
+ dischashkey = value;
+ }
+ }
+
+ public byte[] AuthenticationID
+ {
+ get { return authenticationid; }
+ set
+ {
+ if (value.Length != 8) throw new Exception("AuthenticationID must be 8 bytes in length");
+ authenticationid = value;
+ }
+ }
+
+ public byte[] SecureFileID
+ {
+ get { return securefileid; }
+ set
+ {
+ if (value.Length != 16) throw new Exception("SecureFileID must nbe 16 bytes in length");
+ securefileid = value;
+ }
+ }
+
+ public byte[] UserID
+ {
+ get { return userid; }
+ set
+ {
+ if (value.Length != 8) throw new Exception("UserID must be 8 bytes in length");
+ userid = value;
+ }
+ }
+
+ public PFDEntry[] Entries => PFDEntries.entries.ToArray();
+
+ #endregion
+
+ #region Decryption
+
+ ///
+ /// Decrypts System.IO.Stream into a Byte Array
+ ///
+ /// the input stream of the file that is located inside the Param.PFD Entries
+ /// the name of the entry that the stream belongs to
+ /// byte array of the decrypted file
+ public byte[] Decrypt(Stream stream, string entryname)
+ {
+ if (SecureFileID == null || SecureFileID.Length != 16)
+ {
+ DoProgress(
+ SecureFileID == null
+ ? "SecureFileID needed to preform the encryption!"
+ : "SecureFileID is not valid! length must be 16 bytes long (128bit)", MessageType.Error);
+ return null;
+ }
+ var ent = new PFDEntry();
+ var found = false;
+ foreach (var t in PFDEntries.entries)
+ if (t.file_name.ToLower() == entryname.ToLower())
+ {
+ ent = t;
+ found = true;
+ break;
+ }
+ if (!found)
+ throw new Exception("entryname does not exist inside the initialized Param.PFD");
+ if (!stream.CanRead || !stream.CanWrite)
+ throw new Exception("Unable to Access stream");
+
+ if (!ValidEntryHash(stream, entryname, false))
+ throw new Exception(
+ "Encrypted data seems to be invalid, a validated file is required for this operation");
+
+ var size = AlignedSize((int) stream.Length);
+ DoProgress("Allocating memory (" + size + " bytes)..", MessageType.Info);
+ var data = new byte[size];
+ stream.Seek(0, SeekOrigin.Begin);
+ stream.Read(data, 0, data.Length);
+ DoProgress("Allocating decryption key..", MessageType.Info);
+ var key = GetEntryKey(ent);
+ DoProgress("Decrypting data (" + size + " bytes)..", MessageType.Info);
+ data = Functions.Decrypt(key, data, size);
+ if (data == null)
+ throw new Exception("Unable to decrypt data");
+ DoProgress("Free memory..", MessageType.Info);
+ key = null;
+ DoProgress("Resizing data to its original size..", MessageType.Info);
+ Array.Resize(ref data, (int) ent.file_size);
+ return data;
+ }
+
+ ///
+ /// decrypts input data
+ ///
+ /// the data to decrypt
+ /// the name of the entry that the data belongs to
+ /// true if data is succesfully decrypted
+ public bool Decrypt(ref byte[] inputdata, string entryname)
+ {
+ try
+ {
+ var data = Decrypt(new MemoryStream(inputdata), entryname);
+ if (data == null)
+ return false;
+ Array.Resize(ref inputdata, data.Length);
+ Array.Copy(data, 0, inputdata, 0, data.Length);
+ return true;
+ }
+ catch (Exception ex)
+ {
+ DoProgress(ex.Message, MessageType.Error);
+ return false;
+ }
+ }
+
+ ///
+ /// Decrypts specified filepath, file must be located inside the Param.PFD Entries
+ ///
+ /// the filepath that should be decrypted
+ /// true if file is succesfully decrypted
+ public bool Decrypt(string filepath)
+ {
+ try
+ {
+ if (!File.Exists(filepath) || !ValidEntryHash(filepath, false))
+ return false;
+ var name = new FileInfo(filepath).Name;
+ byte[] data = null;
+ using (var fs = File.Open(filepath, FileMode.Open, FileAccess.ReadWrite, FileShare.None))
+ {
+ data = Decrypt(fs, name);
+ fs.Close();
+ }
+ if (data != null)
+ File.WriteAllBytes(filepath, data);
+ else return false;
+ data = null;
+ return true;
+ }
+ catch (Exception ex)
+ {
+ DoProgress(ex.Message, MessageType.Error);
+ return false;
+ }
+ }
+
+ ///
+ /// decrypts filepath to a new filepath destination
+ ///
+ /// the filepath of the file to decrypt, file must be located inside the Param.PFD Entries
+ /// the new filepath that you wish to use for the decrypted file
+ /// true if file is succesfully decrypted
+ public bool Decrypt(string filepath, string outpath)
+ {
+ try
+ {
+ if (!File.Exists(filepath) || !ValidEntryHash(filepath, false))
+ return false;
+ var name = new FileInfo(filepath).Name;
+ var fs = File.Open(filepath, FileMode.Open, FileAccess.ReadWrite, FileShare.None);
+ var data = Decrypt(fs, name);
+ fs.Close();
+ fs.Dispose();
+ File.WriteAllBytes(outpath, data);
+ return true;
+ }
+ catch (Exception ex)
+ {
+ DoProgress(ex.Message, MessageType.Error);
+ return false;
+ }
+ }
+
+ ///
+ /// Decrypt all files that are inside the specified root path, andalso availible inside one of the Param.PFD entries
+ ///
+ ///
+ /// the root path of the directory containing all files to be decypted, The initialized param.PFD should
+ /// also be in the same path
+ ///
+ /// true if all files are succesfully decrypted
+ public int DecryptAllFiles(string root)
+ {
+ try
+ {
+ var decrypted = 0;
+ foreach (var t in PFDEntries.entries)
+ {
+ if (t.file_name.ToLower() == "param.sfo")
+ continue;
+ var filepath = root + "\\" + t.file_name;
+ if (File.Exists(filepath))
+ if (ValidEntryHash(filepath, false))
+ if (Decrypt(filepath))
+ decrypted++;
+ }
+ return decrypted;
+ }
+ catch (Exception ex)
+ {
+ DoProgress(ex.Message, MessageType.Error);
+ return -1;
+ }
+ }
+
+ ///
+ /// Decrypts specified filepath into a byte array
+ ///
+ /// the filepath to decrypt, file must be located inside the Param.PFD Entries
+ /// byte array of the decrypted file
+ public byte[] DecryptToBytes(string filepath)
+ {
+ if (!File.Exists(filepath))
+ return null;
+ var name = new FileInfo(filepath).Name;
+ var fs = File.Open(filepath, FileMode.Open, FileAccess.ReadWrite, FileShare.None);
+ var data = Decrypt(fs, name);
+ fs.Close();
+ fs.Dispose();
+ return data;
+ }
+
+ ///
+ /// Decrypts specified filepath into a System.IO.Stream
+ ///
+ /// the filepath to decrypt, file must be located inside the Param.PFD Entries
+ /// System.IO.Stream of the decrypted file
+ public Stream DecryptToStream(string filepath)
+ {
+ var data = DecryptToBytes(filepath);
+ if (data == null)
+ return null;
+ return new MemoryStream(data);
+ }
+
+ #endregion
+
+ #region Encryption
+
+ ///
+ /// Encrypt a specified System.IO.Stream to a byte array
+ ///
+ /// Input System.IO.Stream of the file to encrypt
+ /// the name of the entry inside the PARAM.PFD
+ /// a byte array of theencrypted stream
+ public byte[] Encrypt(Stream stream, string entryname)
+ {
+ if (SecureFileID == null || SecureFileID.Length != 16)
+ {
+ DoProgress(
+ SecureFileID == null
+ ? "SecureFileID needed to preform the encryption!"
+ : "SecureFileID is not valid! length must be 16 bytes long (128bit)", MessageType.Error);
+ return null;
+ }
+ if (ValidEntryHash(stream, entryname, false))
+ {
+ DoProgress("File already valid, same data will be returned instead", MessageType.Info);
+ var data = new byte[stream.Length];
+ stream.Seek(0, SeekOrigin.Begin);
+ stream.Read(data, 0, data.Length);
+ return data;
+ }
+ else
+ {
+ var ent = new PFDEntry();
+ var found = false;
+ foreach (var t in PFDEntries.entries)
+ {
+ if (t.file_name.ToLower() == entryname.ToLower())
+ {
+ ent = t;
+ found = true;
+ break;
+ }
+ }
+ if (!found)
+ throw new Exception("entryname does not exist inside the initialized Param.PFD");
+ if (!stream.CanRead || !stream.CanWrite)
+ throw new Exception("Unable to Access stream");
+ ent.file_size = (ulong) stream.Length;
+ stream.Seek(0, SeekOrigin.Begin);
+ var size = AlignedSize((int) stream.Length);
+ DoProgress("Allocating memory (" + size + " bytes)..", MessageType.Info);
+ var data = new byte[size];
+ DoProgress("Reading stream into memory..", MessageType.Info);
+ stream.Read(data, 0, (int) stream.Length);
+ DoProgress("Allocating encryption key..", MessageType.Info);
+ var key = GetEntryKey(ent);
+ DoProgress("Encrypting Data (" + size + "bytes)..", MessageType.Info);
+ data = Functions.Encypt(key, data, data.Length);
+ if (data == null)
+ throw new Exception("Unable to decrypt data");
+ DoProgress("Free allocated memory..", MessageType.Info);
+ key = null;
+ return data;
+ }
+ }
+
+ ///
+ /// Encrypts inputdata
+ ///
+ /// the byte array of the file to encrypt
+ /// the the entry inside the PARAM.PFD
+ /// true if succesfully encrypted
+ public bool Encrypt(byte[] inputdata, Ps3File entry)
+ {
+ try
+ {
+ entry.PFDEntry.file_size = (ulong) inputdata.Length;
+ var data = Encrypt(new MemoryStream(inputdata), entry.PFDEntry.file_name);
+ if (data == null)
+ return false;
+ File.WriteAllBytes(entry.FilePath, data);
+ data = null;
+ return true;
+ }
+ catch
+ {
+ return false;
+ }
+ }
+
+ ///
+ /// Encrypts specified filepath
+ ///
+ /// the filepath to encrypt, file must be in the same directory as the PARAM.PFD
+ /// true if file is succesfully encrypted
+ public bool Encrypt(string filepath)
+ {
+ try
+ {
+ if (!File.Exists(filepath))
+ {
+ DoProgress(filepath + " Does not exist!", MessageType.Error);
+ return false;
+ }
+ var name = new FileInfo(filepath).Name;
+ if (!EntryExists(name))
+ {
+ DoProgress("There is no \"" + name + "\" inside the PARAM.PFD Entries!", MessageType.Error);
+ return false;
+ }
+ DoProgress("Initializing file stream..", MessageType.Info);
+ byte[] data = null;
+ using (var fs = File.Open(filepath, FileMode.Open, FileAccess.ReadWrite, FileShare.None))
+ {
+ for (var i = 0; i < PFDEntries.entries.Count; i++)
+ {
+ if (PFDEntries.entries[i].file_name.ToLower() == name.ToLower())
+ {
+ var t = PFDEntries.entries[i];
+ t.file_size = (ulong) fs.Length;
+ PFDEntries.entries[i] = t;
+ break;
+ }
+ }
+
+ data = Encrypt(fs, name);
+ //DoProgress("Rehashing PARAM.PFD..", MessageType.Info);
+ //bool x = ValidEntryHash(fs, name, true) && ValidFileCID(true) && ValidDHKCID2(true) && ValidBottomHash(true);
+ fs.Dispose();
+ }
+ if (data == null)
+ return false;
+ DoProgress("Writing Encrypted data to : " + filepath, MessageType.Info);
+ File.WriteAllBytes(filepath, data);
+ DoProgress(name + " is succesfully encrypted", MessageType.Info);
+ return true;
+ }
+ catch (Exception ex)
+ {
+ DoProgress(ex.Message, MessageType.Error);
+ return false;
+ }
+ }
+
+ ///
+ /// Encrypts specified filepath into a new filepath
+ ///
+ /// the filepath of the file to encrypt, path must be in the same location as the PARAM.PFD
+ /// the new filepath to encrypt the file to
+ /// true if file is succesfully encrypted
+ public bool Encrypt(string filepath, string newfilepath)
+ {
+ try
+ {
+ if (!File.Exists(filepath))
+ return false;
+ var name = new FileInfo(filepath).Name;
+ DoProgress("Encrypting " + name + "..", MessageType.Info);
+ var fs = File.Open(filepath, FileMode.Open, FileAccess.ReadWrite, FileShare.None);
+ var data = Encrypt(fs, name);
+ fs.Close();
+ fs.Dispose();
+ DoProgress("Encrypting " + name + "..", MessageType.Info);
+ File.WriteAllBytes(newfilepath, data);
+ if (filepath == newfilepath)
+ return ValidEntryHash(filepath, true);
+ return true;
+ }
+ catch
+ {
+ return false;
+ }
+ }
+
+ public int EncryptAllFiles(string root)
+ {
+ try
+ {
+ var encrypted = 0;
+ for (var i = 0; i < PFDEntries.entries.Count; i++)
+ {
+ var t = PFDEntries.entries[i];
+ if (t.file_name.ToLower() == "param.sfo")
+ continue;
+ var filepath = root + "\\" + t.file_name;
+ if (File.Exists(filepath))
+ {
+ if (!ValidEntryHash(filepath, false))
+ {
+ if (Encrypt(filepath))
+ {
+ if (!ValidEntryHash(filepath, true))
+ return -1;
+ encrypted++;
+ }
+ }
+ }
+ }
+ return encrypted;
+ }
+ catch
+ {
+ return -1;
+ }
+ }
+
+ public byte[] EncryptToBytes(string filepath)
+ {
+ if (!File.Exists(filepath))
+ return null;
+ var name = new FileInfo(filepath).Name;
+ var fs = File.Open(filepath, FileMode.Open, FileAccess.ReadWrite, FileShare.None);
+ var data = Encrypt(fs, name);
+ fs.Close();
+ fs.Dispose();
+ return data;
+ }
+
+ public Stream EncryptToStream(string filepath)
+ {
+ var data = EncryptToBytes(filepath);
+ if (data == null)
+ return null;
+ return new MemoryStream(data);
+ }
+
+ #endregion
+
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/PS3FileSystem/Ps3File.cs b/PS3FileSystem/Ps3File.cs
new file mode 100644
index 0000000..466f215
--- /dev/null
+++ b/PS3FileSystem/Ps3File.cs
@@ -0,0 +1,75 @@
+/* Copyright (c) 2013 - 2014 Jappi88 (Jappi88 at Gmail dot com)
+*
+* This(software Is provided) 'as-is', without any express or implied
+* warranty. In no event will the authors be held liable for any damages arising from the use of this software.
+*
+* Permission is granted to anyone to use this software for any purpose,
+* including commercial applications*, and to alter it and redistribute it
+* freely, subject to the following restrictions:
+*
+* 1. The origin of this software must not be misrepresented; you must not
+* claim that you wrote the original software. If you use this software
+* in a product, an acknowledge in the product documentation is required.
+*
+* 2. Altered source versions must be plainly marked as such, and must not
+* be misrepresented as being the original software.
+*
+* 3. This notice may not be removed or altered from any source distribution.
+*
+* *Contact must be made to discuses permission and terms.
+*/
+
+using System.IO;
+
+namespace PS3FileSystem
+{
+ public class Ps3File
+ {
+ public Ps3File(string filepath, Param_PFD.PFDEntry entry, Ps3SaveManager manager)
+ {
+ FilePath = filepath;
+ PFDEntry = entry;
+ Manager = manager;
+ }
+
+ public string FilePath { get; }
+ public Param_PFD.PFDEntry PFDEntry { get; private set; }
+ public Ps3SaveManager Manager { get; }
+ public bool IsEncrypted => Manager.Param_PFD.ValidEntryHash(FilePath, false);
+
+ public bool Decypt()
+ {
+ return Manager.Param_PFD.Decrypt(FilePath);
+ }
+
+ public byte[] DecryptToBytes()
+ {
+ return Manager.Param_PFD.DecryptToBytes(FilePath);
+ }
+
+ public Stream DecryptToStream()
+ {
+ return Manager.Param_PFD.DecryptToStream(FilePath);
+ }
+
+ public bool Encrypt()
+ {
+ return Manager.Param_PFD.Encrypt(FilePath);
+ }
+
+ public bool Encrypt(byte[] data)
+ {
+ return Manager.Param_PFD.Encrypt(data, this);
+ }
+
+ public byte[] EncryptToBytes()
+ {
+ return Manager.Param_PFD.EncryptToBytes(FilePath);
+ }
+
+ public Stream EncryptToStream()
+ {
+ return Manager.Param_PFD.EncryptToStream(FilePath);
+ }
+ }
+}
\ No newline at end of file
diff --git a/PS3FileSystem/Ps3SaveManager.cs b/PS3FileSystem/Ps3SaveManager.cs
new file mode 100644
index 0000000..8c5eb1c
--- /dev/null
+++ b/PS3FileSystem/Ps3SaveManager.cs
@@ -0,0 +1,135 @@
+/* Copyright (c) 2013 - 2014 Jappi88 (Jappi88 at Gmail dot com)
+*
+* This(software Is provided) 'as-is', without any express or implied
+* warranty. In no event will the authors be held liable for any damages arising from the use of this software.
+*
+* Permission is granted to anyone to use this software for any purpose,
+* including commercial applications*, and to alter it and redistribute it
+* freely, subject to the following restrictions:
+*
+* 1. The origin of this software must not be misrepresented; you must not
+* claim that you wrote the original software. If you use this software
+* in a product, an acknowledge in the product documentation is required.
+*
+* 2. Altered source versions must be plainly marked as such, and must not
+* be misrepresented as being the original software.
+*
+* 3. This notice may not be removed or altered from any source distribution.
+*
+* *Contact must be made to discuses permission and terms.
+*/
+
+using System;
+using System.Drawing;
+using System.IO;
+using System.Linq;
+
+namespace PS3FileSystem
+{
+ public class Ps3SaveManager
+ {
+ public static SecureFileInfo[] GameConfigList;
+
+ public Ps3SaveManager(string savedir, byte[] securefileid)
+ {
+ if (!Directory.Exists(savedir))
+ throw new Exception("No such directory exist!");
+ if (!File.Exists(savedir + "\\PARAM.PFD"))
+ throw new Exception("Missing PARAM.PFD, Please load a valid directory");
+ if (!File.Exists(savedir + "\\PARAM.SFO"))
+ throw new Exception("Missing PARAM.SFO, Please load a valid directory");
+ Param_PFD = new Param_PFD(savedir + "\\PARAM.PFD");
+ Param_SFO = new PARAM_SFO(savedir + "\\PARAM.SFO");
+ if (securefileid != null)
+ Param_PFD.SecureFileID = securefileid;
+ RootPath = savedir;
+ if (File.Exists(savedir + "\\ICON0.PNG"))
+ {
+ //prevent file lock,reading to memory instead.
+ SaveImage = Image.FromStream(new MemoryStream(File.ReadAllBytes(savedir + "\\ICON0.PNG")));
+ }
+
+ Files = (from ent in Param_PFD.Entries
+ let x = new FileInfo(savedir + "\\" + ent.file_name)
+ where x.Extension.ToUpper() != ".PFD" && x.Extension.ToUpper() != ".SFO"
+ select new Ps3File(savedir + "\\" + ent.file_name, ent, this)).ToArray();
+ }
+
+ public string RootPath { get; }
+ public Param_PFD Param_PFD { get; }
+ public PARAM_SFO Param_SFO { get; private set; }
+ public Ps3File[] Files { get; private set; }
+ public Image SaveImage { get; private set; }
+
+ public int DecryptAllFiles()
+ {
+ try
+ {
+ if (Param_PFD == null || !Directory.Exists(RootPath))
+ return -1;
+ return Param_PFD.DecryptAllFiles(RootPath);
+ }
+ catch
+ {
+ return -1;
+ }
+ }
+
+ public int EncryptAllFiles()
+ {
+ try
+ {
+ if (Param_PFD == null || !Directory.Exists(RootPath))
+ return -1;
+ var x = Param_PFD.EncryptAllFiles(RootPath);
+ if (x > 0)
+ return x;
+ return -1;
+ }
+ catch
+ {
+ return -1;
+ }
+ }
+
+ public bool ReBuildChanges()
+ {
+ return Param_PFD.RebuilParamPFD(RootPath, false);
+ }
+
+ public bool ReBuildChanges(bool encryptfiles)
+ {
+ return Param_PFD.RebuilParamPFD(RootPath, encryptfiles);
+ }
+
+ public int LoadGameConfigFile(string filepath)
+ {
+ try
+ {
+ var text = "";
+ using (
+ var sr = new StreamReader(new FileStream(filepath, FileMode.Open, FileAccess.Read, FileShare.Read)))
+ {
+ text = sr.ReadToEnd();
+ sr.Close();
+ }
+ return (GameConfigList = Functions.ReadConfigFromtext(text)).Length;
+ }
+ catch
+ {
+ return -1;
+ }
+ }
+
+ private byte[] GetSecureFileIdFromConfigFile(string titleid)
+ {
+ if (GameConfigList == null || GameConfigList.Length == 0)
+ return null;
+ return (from i in GameConfigList
+ from s in i.GameIDs
+ where s.ToLower() == titleid.ToLower()
+ where i.SecureFileID != null && i.SecureFileID.Length == 32
+ select i.SecureFileID.StringToByteArray()).FirstOrDefault();
+ }
+ }
+}
\ No newline at end of file
diff --git a/PS3FileSystem/SecureFileInfo.cs b/PS3FileSystem/SecureFileInfo.cs
new file mode 100644
index 0000000..cda125f
--- /dev/null
+++ b/PS3FileSystem/SecureFileInfo.cs
@@ -0,0 +1,41 @@
+/* Copyright (c) 2013 - 2014 Jappi88 (Jappi88 at Gmail dot com)
+*
+* This(software Is provided) 'as-is', without any express or implied
+* warranty. In no event will the authors be held liable for any damages arising from the use of this software.
+*
+* Permission is granted to anyone to use this software for any purpose,
+* including commercial applications*, and to alter it and redistribute it
+* freely, subject to the following restrictions:
+*
+* 1. The origin of this software must not be misrepresented; you must not
+* claim that you wrote the original software. If you use this software
+* in a product, an acknowledge in the product documentation is required.
+*
+* 2. Altered source versions must be plainly marked as such, and must not
+* be misrepresented as being the original software.
+*
+* 3. This notice may not be removed or altered from any source distribution.
+*
+* *Contact must be made to discuses permission and terms.
+*/
+
+namespace PS3FileSystem
+{
+ public class SecureFileInfo
+ {
+ public SecureFileInfo(string name, string id, string securefileid, string dischashkey, bool isprotected)
+ {
+ Name = name;
+ GameIDs = id.Trim('[', ']').Split('/');
+ SecureFileID = securefileid;
+ DiscHashKey = dischashkey;
+ Protected = isprotected;
+ }
+
+ public string Name { get; set; }
+ public string[] GameIDs { get; set; }
+ public string SecureFileID { get; set; }
+ public string DiscHashKey { get; set; }
+ public bool Protected { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/Program.cs b/Program.cs
new file mode 100644
index 0000000..60bc6d1
--- /dev/null
+++ b/Program.cs
@@ -0,0 +1,19 @@
+using System;
+using System.Windows.Forms;
+
+namespace GSecPs3Decrypter
+{
+ static class Program
+ {
+ ///
+ /// The main entry point for the application.
+ ///
+ [STAThread]
+ static void Main()
+ {
+ Application.EnableVisualStyles();
+ Application.SetCompatibleTextRenderingDefault(false);
+ Application.Run(new Main());
+ }
+ }
+}
diff --git a/Properties/AssemblyInfo.cs b/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..b5dbb6f
--- /dev/null
+++ b/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("GSecPs3Decrypter")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("GSecPs3Decrypter")]
+[assembly: AssemblyCopyright("Copyright © 2020")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("246200f0-c813-4898-bcd8-9b3338735928")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Properties/Resources.Designer.cs b/Properties/Resources.Designer.cs
new file mode 100644
index 0000000..0c75b62
--- /dev/null
+++ b/Properties/Resources.Designer.cs
@@ -0,0 +1,93 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace GSecPs3Decrypter.Properties {
+ using System;
+
+
+ ///
+ /// A strongly-typed resource class, for looking up localized strings, etc.
+ ///
+ // This class was auto-generated by the StronglyTypedResourceBuilder
+ // class via a tool like ResGen or Visual Studio.
+ // To add or remove a member, edit your .ResX file then rerun ResGen
+ // with the /str option, or rebuild your VS project.
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ internal class Resources {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources() {
+ }
+
+ ///
+ /// Returns the cached ResourceManager instance used by this class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager {
+ get {
+ if (object.ReferenceEquals(resourceMan, null)) {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("GSecPs3Decrypter.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// Overrides the current thread's CurrentUICulture property for all
+ /// resource lookups using this strongly typed resource class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+
+ ///
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ ///
+ internal static System.Drawing.Bitmap _lock {
+ get {
+ object obj = ResourceManager.GetObject("_lock", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ ///
+ internal static System.Drawing.Bitmap icon {
+ get {
+ object obj = ResourceManager.GetObject("icon", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ ///
+ internal static System.Drawing.Bitmap unlock {
+ get {
+ object obj = ResourceManager.GetObject("unlock", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+ }
+}
diff --git a/Properties/Resources.resx b/Properties/Resources.resx
new file mode 100644
index 0000000..e673115
--- /dev/null
+++ b/Properties/Resources.resx
@@ -0,0 +1,130 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
+
+
+
+ ..\Resources\icon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\resources\unlock.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\resources\lock.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
\ No newline at end of file
diff --git a/Properties/Settings.Designer.cs b/Properties/Settings.Designer.cs
new file mode 100644
index 0000000..84e1b15
--- /dev/null
+++ b/Properties/Settings.Designer.cs
@@ -0,0 +1,30 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace GSecPs3Decrypter.Properties
+{
+
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
+ {
+
+ private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+ public static Settings Default
+ {
+ get
+ {
+ return defaultInstance;
+ }
+ }
+ }
+}
diff --git a/Properties/Settings.settings b/Properties/Settings.settings
new file mode 100644
index 0000000..abf36c5
--- /dev/null
+++ b/Properties/Settings.settings
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/Resources/icon.png b/Resources/icon.png
new file mode 100644
index 0000000..dae2f3e
Binary files /dev/null and b/Resources/icon.png differ
diff --git a/Resources/lock.png b/Resources/lock.png
new file mode 100644
index 0000000..377c4a6
Binary files /dev/null and b/Resources/lock.png differ
diff --git a/Resources/unlock.png b/Resources/unlock.png
new file mode 100644
index 0000000..63e21bc
Binary files /dev/null and b/Resources/unlock.png differ
diff --git a/icon.ico b/icon.ico
new file mode 100644
index 0000000..168d1b0
Binary files /dev/null and b/icon.ico differ