From c76b20821aba86d5cef93c9da2d28907e8f33ee0 Mon Sep 17 00:00:00 2001 From: Kurt Date: Thu, 24 Jul 2014 09:20:08 -0700 Subject: [PATCH] Report tweaks --- f1-Main.Designer.cs | 9 ++-- f1-Main.cs | 2 +- frmReport.Designer.cs | 9 ++-- frmReport.cs | 88 +++++++++++++++++++++++++++++---------- frmReport.resx | 96 +++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 173 insertions(+), 31 deletions(-) diff --git a/f1-Main.Designer.cs b/f1-Main.Designer.cs index 4a73ceae6..2b9546e76 100644 --- a/f1-Main.Designer.cs +++ b/f1-Main.Designer.cs @@ -2045,7 +2045,7 @@ public void InitializeComponent() this.CHK_Star.AutoSize = true; this.CHK_Star.Location = new System.Drawing.Point(182, 213); this.CHK_Star.Name = "CHK_Star"; - this.CHK_Star.Size = new System.Drawing.Size(35, 17); + this.CHK_Star.Size = new System.Drawing.Size(38, 17); this.CHK_Star.TabIndex = 13; this.CHK_Star.Text = "★"; this.CHK_Star.UseVisualStyleBackColor = true; @@ -2067,7 +2067,7 @@ public void InitializeComponent() this.CHK_Square.AutoSize = true; this.CHK_Square.Location = new System.Drawing.Point(6, 227); this.CHK_Square.Name = "CHK_Square"; - this.CHK_Square.Size = new System.Drawing.Size(35, 17); + this.CHK_Square.Size = new System.Drawing.Size(38, 17); this.CHK_Square.TabIndex = 11; this.CHK_Square.Text = "■"; this.CHK_Square.UseVisualStyleBackColor = true; @@ -2134,7 +2134,7 @@ public void InitializeComponent() this.CHK_Triangle.AutoSize = true; this.CHK_Triangle.Location = new System.Drawing.Point(6, 213); this.CHK_Triangle.Name = "CHK_Triangle"; - this.CHK_Triangle.Size = new System.Drawing.Size(35, 17); + this.CHK_Triangle.Size = new System.Drawing.Size(38, 17); this.CHK_Triangle.TabIndex = 10; this.CHK_Triangle.Text = "▲"; this.CHK_Triangle.UseVisualStyleBackColor = true; @@ -2580,10 +2580,9 @@ public void InitializeComponent() // // reportToolStripMenuItem // - this.reportToolStripMenuItem.Enabled = false; this.reportToolStripMenuItem.Name = "reportToolStripMenuItem"; this.reportToolStripMenuItem.Size = new System.Drawing.Size(174, 22); - this.reportToolStripMenuItem.Text = "Report"; + this.reportToolStripMenuItem.Text = "Box Data Report"; this.reportToolStripMenuItem.Click += new System.EventHandler(this.reportToolStripMenuItem_Click); // // Menu_Options diff --git a/f1-Main.cs b/f1-Main.cs index b6c79eded..99fa0f4df 100644 --- a/f1-Main.cs +++ b/f1-Main.cs @@ -8534,7 +8534,7 @@ private void codeGeneratorToolStripMenuItem_Click(object sender, EventArgs e) private void reportToolStripMenuItem_Click(object sender, EventArgs e) { - frmReport ReportForm = new frmReport(); + frmReport ReportForm = new frmReport(this); ReportForm.PopulateData(savefile); ReportForm.ShowDialog(); } diff --git a/frmReport.Designer.cs b/frmReport.Designer.cs index afb1cd948..afdba73fe 100644 --- a/frmReport.Designer.cs +++ b/frmReport.Designer.cs @@ -29,6 +29,7 @@ protected override void Dispose(bool disposing) private void InitializeComponent() { System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frmReport)); this.dgData = new System.Windows.Forms.DataGridView(); ((System.ComponentModel.ISupportInitialize)(this.dgData)).BeginInit(); this.SuspendLayout(); @@ -44,17 +45,19 @@ private void InitializeComponent() this.dgData.Location = new System.Drawing.Point(0, 0); this.dgData.Name = "dgData"; this.dgData.RowHeadersVisible = false; - this.dgData.Size = new System.Drawing.Size(559, 568); + this.dgData.Size = new System.Drawing.Size(790, 431); this.dgData.TabIndex = 0; // // frmReport // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(559, 568); + this.ClientSize = new System.Drawing.Size(790, 431); this.Controls.Add(this.dgData); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.Name = "frmReport"; - this.Text = "Report"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Box Data Report"; ((System.ComponentModel.ISupportInitialize)(this.dgData)).EndInit(); this.ResumeLayout(false); diff --git a/frmReport.cs b/frmReport.cs index a799c6aea..8a24708a4 100644 --- a/frmReport.cs +++ b/frmReport.cs @@ -7,6 +7,8 @@ using System.Text; using System.Windows.Forms; using System.Security.Cryptography; +using System.Reflection; +using System.Text.RegularExpressions; namespace PKHeX { public partial class frmReport : Form @@ -15,9 +17,12 @@ public partial class frmReport : Form private const int PIDOFFSET = 0x18; private const int TIDOFFSET = 0x0C; private const int SIDOFFSET = 0x0E; - public frmReport() + static Form1 m_parent; + public frmReport(Form1 frm1) { InitializeComponent(); + m_parent = frm1; + dgData.DoubleBuffered(true); } private static uint LCRNG(uint seed) { @@ -136,6 +141,7 @@ public void PopulateData(byte[] InputData) PokemonList PL = new PokemonList(); SaveGames.SaveStruct SaveGame = new SaveGames.SaveStruct("XY"); int savindex = detectSAVIndex(SaveData); + if (savindex > 1) savindex = 0; for (int BoxNum = 0; BoxNum < 31; BoxNum++) { int boxoffset = 0x27A00 + 0x7F000 * savindex + BoxNum * (0xE8 * 30); @@ -146,6 +152,7 @@ public void PopulateData(byte[] InputData) Array.Copy(SaveData, offset, slotdata, 0, 0xE8); byte[] dslotdata = decryptArray(slotdata); PKX pkm = new PKX(dslotdata); + if ((pkm.EC == "00000000") && (pkm.Checksum == 0)) continue; PL.Add(pkm); } } @@ -162,6 +169,7 @@ public static string TrimFromZero(string input) } public class PKX { + #region Define private uint mEC, mPID, mIV32, mexp, @@ -171,7 +179,8 @@ public class PKX mmarkings, mhptype; private string - mnicknamestr, mnotOT, mot, mgenderstring; + mnicknamestr, mgenderstring, mnotOT, mot, mSpeciesName, mNatureName, mHPName, mAbilityName, + mMove1N, mMove2N, mMove3N, mMove4N; private int mability, mabilitynum, mnature, mfeflag, mgenderflag, maltforms, mPKRS_Strain, mPKRS_Duration, @@ -195,9 +204,27 @@ private ushort mball, mencountertype, mgamevers, mcountryID, mregionID, mdsregID, motlang; - public uint EC { get { return mEC; } } - public uint PID { get { return mPID; } } - public uint IVs { get { return mIV32; } } + #endregion + public string Nickname { get { return mnicknamestr; } } + public string Species { get { return mSpeciesName; } } + public string Nature { get { return mNatureName; } } + public string Gender { get { return mgenderstring; } } + public string ESV { get { return mESV.ToString("0000"); } } + public string HP_Type { get { return mHPName; } } + public string Ability { get { return mAbilityName; } } + public string Move1 { get { return mMove1N; } } + public string Move2 { get { return mMove2N; } } + public string Move3 { get { return mMove3N; } } + public string Move4 { get { return mMove4N; } } + #region Extraneous + public string EC { get { return mEC.ToString("X8"); } } + public string PID { get { return mPID.ToString("X8"); } } + public uint HP_IV { get { return mHP_IV; } } + public uint ATK_IV { get { return mATK_IV; } } + public uint DEF_IV { get { return mDEF_IV; } } + public uint SPA_IV { get { return mSPA_IV; } } + public uint SPD_IV { get { return mSPD_IV; } } + public uint SPE_IV { get { return mSPE_IV; } } public uint EXP { get { return mexp; } } public uint HP_EV { get { return mHP_EV; } } public uint ATK_EV { get { return mATK_EV; } } @@ -205,12 +232,6 @@ private ushort public uint SPA_EV { get { return mSPA_EV; } } public uint SPD_EV { get { return mSPD_EV; } } public uint SPE_EV { get { return mSPE_EV; } } - public uint HP_IV { get { return mHP_IV; } } - public uint ATK_IV { get { return mATK_IV; } } - public uint DEF_IV { get { return mDEF_IV; } } - public uint SPA_IV { get { return mSPA_IV; } } - public uint SPD_IV { get { return mSPD_IV; } } - public uint SPE_IV { get { return mSPE_IV; } } public uint Cool { get { return mcnt_cool; } } public uint Beauty { get { return mcnt_beauty; } } public uint Cute { get { return mcnt_cute; } } @@ -218,16 +239,11 @@ private ushort public uint Tough { get { return mcnt_tough; } } public uint Sheen { get { return mcnt_sheen; } } public uint Markings { get { return mmarkings; } } - public uint HP_Type { get { return mhptype; } } - public string Nickname { get { return mnicknamestr; } } public string NotOT { get { return mnotOT; } } public string OT { get { return mot; } } - public string Gender { get { return mgenderstring; } } - public int Ability { get { return mability; } } public int AbilityNum { get { return mabilitynum; } } - public int Nature { get { return mnature; } } public int FatefulFlag { get { return mfeflag; } } public int GenderFlag { get { return mgenderflag; } } public int AltForms { get { return maltforms; } } @@ -240,16 +256,10 @@ private ushort public bool IsNicknamed { get { return misnick; } } public bool IsShiny { get { return misshiny; } } - public ushort Species { get { return mspecies; } } public ushort HeldItem { get { return mhelditem; } } public ushort TID { get { return mTID; } } public ushort SID { get { return mSID; } } public ushort TSV { get { return mTSV; } } - public ushort ESV { get { return mESV; } } - public ushort Move1 { get { return mmove1; } } - public ushort Move2 { get { return mmove2; } } - public ushort Move3 { get { return mmove3; } } - public ushort Move4 { get { return mmove4; } } public ushort Move1_PP { get { return mmove1_pp; } } public ushort Move2_PP { get { return mmove2_pp; } } public ushort Move3_PP { get { return mmove3_pp; } } @@ -281,6 +291,7 @@ private ushort public ushort DSRegionID { get { return mdsregID; } } public ushort OTLang { get { return motlang; } } + #endregion public PKX(byte[] pkx) { mnicknamestr = ""; @@ -396,8 +407,41 @@ public PKX(byte[] pkx) mESV = (ushort)(((mPID >> 16) ^ (mPID & 0xFFFF)) >> 4); misshiny = (mTSV == mESV); + // Nidoran Gender Fixing Text + if (!Convert.ToBoolean(misnick)) + { + if (mnicknamestr.Contains((char)0xE08F)) + { + mnicknamestr = Regex.Replace(mnicknamestr, "\uE08F", "\u2640"); + } + else if (mnicknamestr.Contains((char)0xE08E)) + { + mnicknamestr = Regex.Replace(mnicknamestr, "\uE08E", "\u2642"); + } + } + try + { + mSpeciesName = m_parent.specieslist[mspecies]; + mNatureName = m_parent.natures[mnature]; + mHPName = m_parent.types[mhptype]; + mAbilityName = m_parent.abilitylist[mability]; + mMove1N = m_parent.movelist[mmove1]; + mMove2N = m_parent.movelist[mmove2]; + mMove3N = m_parent.movelist[mmove3]; + mMove4N = m_parent.movelist[mmove4]; + } + catch { return; } } } public class PokemonList : System.Collections.ObjectModel.ObservableCollection { } } + public static class ExtensionMethods // Speed up scrolling + { + public static void DoubleBuffered(this DataGridView dgv, bool setting) + { + Type dgvType = dgv.GetType(); + PropertyInfo pi = dgvType.GetProperty("DoubleBuffered", BindingFlags.Instance | BindingFlags.NonPublic); + pi.SetValue(dgv, setting, null); + } + } } diff --git a/frmReport.resx b/frmReport.resx index 1af7de150..603f660be 100644 --- a/frmReport.resx +++ b/frmReport.resx @@ -117,4 +117,100 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + AAABAAIAEBAAAAEAIABoBAAAJgAAACAgAAABACAAqBAAAI4EAAAoAAAAEAAAACAAAAABACAAAAAAAAAE + AAAAAAAAAAAAAAAAAAAAAAAAIyMjAQAAAAALCwsPJiYmJysrKycqKionKSkpJykpKScpKSknKioqJyoq + KicrKysnJycnJw0ODQ8AAAAAJiYmAQAAAABpaWlHq6ur17+/v+6+vr7svr6+7b6+vu2+vr7tvr6+7b6+ + vu2+vr7tvr6+7L+/v+6rq6vXampqSAAAAAAoKSgXvr++3eLi4v/g4OD94eHh/+Hh4f/i4uL/4uLi/+Li + 4v/i4uL/4eHh/+Dh4P/g4OD94uLi/7+/v90sLCwXfn5+PNna2frg4OD/39/f/uHh4f7h4eH+39/f/uDg + 4P7g4OD+39/f/uHh4f7h4OH+39/f/t/g3//a2tr6g4ODPoOCgz7X19f64+Pj/+Li4v7k5OT/4+Tj//Ly + 8v/19fX/9PT0//T09P/k5OT/5OTk/+Pj4/7j4+P/19jX+4qLikCDhIM+2tra++Xl5f/k5eT+5OTk//Lz + 8v+urq7/RUVF/z4+Pv+Zmpn/8fHx/+Xm5f/k5eT+5eXl/9ra2vyLi4tAhYWFPuXm5vvx8vP/7+/w/v// + //+sra3/AgIC/15eXv9tbG3/BQUF/4yMjP//////7+/w/vHy8//l5ub8jY2NQC4uLD5LS0f7UFBL/09P + Sv5YWVP/FBUS/29wcP///////////5SUlP8PDw//U1NO/1BQS/5PT0r/S0tH/DIyMEAAAAs+AAAM+wAA + Dv8AAA/+AwMS/wAAAP+UlJX///////////+3t7n/AAAA/wAAD/8BAQ/+AAAO/wAADPwCAg5ABARSPgoK + k/sNDab/DQ2o/hAQvP8CAmj/IiIW/7Kzrv/Cw8D/NDQm/wAATf8QELz/DQ2q/gwMp/8LC5T8Dg5bQAUF + Xj4KCpz7DQ2u/w0NsP4NDbX/Dw+//wUFYf8CAhL/AwMP/wMDTf8ODrj/Dg64/w0NsP4MDK7/Cwud/A8P + aEEGBmU9DAyl+w4Otf8ODrf+Dw+6/xAQvv8TE8v/EhK+/xAQvP8TE8v/EBDA/w8Puf8PD7f+Dg61/w0N + pvsREW9ACAhtQA8PsfsTE77/ExO//xQUwP8UFML/FBTD/xUVyP8WFsn/FRXE/xQUw/8UFMH/ExO//xMT + vv8QELL7ERF3QxkZdCgXF771ExPH/xUVyPwVFcn9FhbL/RcXzP0XF8z9FxfM/RcXy/0XF8v9FhbJ/RUV + yPwTE8f/Fxe+9RkZdykAAAAAIyOtghsbx/8ZGcj+GRnJ/xoayf8aGsn/GhrK/xoayv8aGsn/GhrJ/xkZ + yf8ZGcj+GxvH/yMjrYQAAAAAAADHAQAAAAAzM51FLCyscCoqrGwqKqxtKSmsbSoqrG0qKqxtKSmsbSoq + rG0qKqxsLCyscDMznUUAAAAAAAAAAP//AADAAwAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAIAB + AACAAQAAgAEAAIABAACAAQAAgAEAAP//AAAoAAAAIAAAAEAAAAABACAAAAAAAAAQAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKysrCR0dHSMWFhY3GBgYORgYGDkYGBg5GBgYORgY + GDkYGBg5GBgYORgYGDkYGBg5GBgYORgYGDkYGBg5GBgYORgYGDkYGBg5GBgYORgYGDkYGBg5FxcXNx4e + HiQuLi4JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASEhIARYWFis7OzuVkJCQ2ampqeqqqqrsqqqq7Kqq + quyqqqrsqqqq7Kqqquyqqqrsqqqq7Kqqquyqqqrsqqqq7Kqqquyqqqrsqqqq7Kqqquyqqqrsqqqq7Kqq + quypqanqkZGR2j09PZcXFxcsUFBQAQAAAAAAAAAAAAAAAAAAAAASEhIuhISEytvb2/7W1tb/19fX/9jY + 2P/Y2Nj/2NjY/9jY2P/Y2Nj/2NjY/9nZ2f/Z2dn/2dnZ/9nZ2f/Z2dn/2dnZ/9nZ2f/Y2Nj/2NjY/9jY + 2P/Y2Nj/2NjY/9fX1//W1tb/29vb/oeHh8sTExMvAAAAAAAAAAAAAAAAPDw8DGtra6zZ2dn/2dnZ/9ra + 2v/b29v/29vb/9vb2//c3Nz/3Nzc/9zc3P/c3Nz/3d3d/93d3f/d3d3/3d3d/93d3f/d3d3/3Nzc/9zc + 3P/c3Nz/3Nzc/9vb2//b29v/29vb/9ra2v/Z2dn/2dnZ/21tba5DQ0MNAAAAAAAAAAAiIiIx1NXU9tna + 2f/c3Nz/3d3d/93e3f/e3t7/3t7e/9/f3//f39//39/f/9/g3//g4OD/4ODg/+Dg4P/g4OD/4ODg/+Dg + 4P/g4OD/39/f/9/f3//f39//3t/e/97e3v/d3t3/3d3d/9zc3P/Z2tn/1dXV9icnJzMAAAAAAAAAAFhZ + WFzf4N//3Nzc/97e3v/f39//39/f/9/g3//g4OD/4ODg/+Hh4f/h4eH/4eHh/+Li4v/i4uL/4uLi/+Li + 4v/i4uL/4uLi/+Hi4f/h4eH/4eHh/+Dg4P/g4OD/3+Df/9/f3//f39//3t7e/9zc3P/f39//XV1dXQAA + AAAAAAAAZmZmZdvc2//e3t7/3+Df/+Dg4P/g4eD/4eHh/+Hi4f/i4uL/4uPi/+Pj4//j4+P/5OTk/+Tk + 5P/k5OT/5OTk/+Tk5P/k5OT/4+Pj/+Pj4//j4+P/4uLi/+Li4v/h4eH/4eHh/+Dg4P/f4N//3t7e/9vb + 2/9wcHBoAAAAAAAAAABoaGhl3d3d/9/f3//h4eH/4eLh/+Li4v/j4+P/4+Pj/+Tk5P/k5OT/5eXl/+Xl + 5f/l5uX/5ubm/+bm5v/m5ub/5ubm/+bm5v/l5eX/5eXl/+Tk5P/k5OT/4+Pj/+Pj4//i4uL/4uLi/+Hh + 4f/f39//3N3c/3Nzc2kAAAAAAAAAAGhoaGXe3t7/4ODg/+Li4v/j4+P/4+Pj/+Tk5P/l5eX/5eXl/+bm + 5v/m5+b/5+fn/+fn5//n6Of/6Ojo/+jo6P/o6Oj/5+fn/+fn5//n5+f/5ubm/+Xl5f/l5eX/5OTk/+Pk + 4//j4+P/4uLi/+Dg4P/e3t7/c3NzaQAAAAAAAAAAaGhoZd/g3//i4uL/5OTk/+Tl5P/l5eX/5ebl/+bn + 5v/n5+f/5+jn/+jp6P/p6en/7Ozs/8LCwv+Tk5P/ioqK/66urv/o6ej/6enp/+jp6P/o6Oj/5+jn/+bn + 5v/m5ub/5ebl/+Tl5P/k5OT/4uLi/9/g3/9zdHNpAAAAAAAAAABoaWhl4eLh/+Pk4//m5ub/5ubm/+fn + 5//n6Of/6Ojo/+np6f/p6un/6urq/8bGxv8yMjL/AAAA/wAAAP8AAAD/AAAA/xMTE/+ZmZn/7Ozs/+rq + 6v/p6en/6Ojo/+jo6P/n5+f/5ubm/+bm5v/k5OT/4eHh/3R0dGkAAAAAAAAAAGhpaGXj4+P/5eXl/+fn + 5//n6Of/6Ojo/+np6f/q6ur/6urq/+vr6//Dw8P/DAwM/wAAAP8AAAD/Gxsb/ygoKP8BAQH/AAAA/wAA + AP+FhYX/7O3s/+rr6v/q6ur/6enp/+jo6P/o6Oj/5+fn/+Xl5f/i4+L/dHR0aQAAAAAAAAAAYWFhZeTl + 5P/m5+b/6Ono/+np6f/p6un/6uvq/+vr6//s7Oz/7e7t/ycnJ/8AAAD/Ghoa/7S0tP/m5ub/5OTk/9HR + 0f9GRkb/AAAA/wICAv/IyMj/7Ozs/+vs6//q6+r/6urq/+nq6f/o6ej/5+fn/+Tk5P9sbGxpAAAAAAAA + AAA9Pj1lj4+P/5OTk/+VlZX/lpaW/5eXl/+YmJj/mZmZ/5qamv92dnb/AAAA/wEBAf+/wL//3Nzc/+Tk + 5P/l5eX/3d3d/+Li4v8mJib/AAAA/0ZGRv+ampr/mZmZ/5iYmP+Xl5f/lpaW/5WVlf+Tk5P/j4+P/0ZG + RmoAAAAAAAAAAAwMDGUAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/Nzc3/+fn + 5//q6ur/7O3s/+zt7P/v7+//39/f/4WFhf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/EBAQagAAAAAAAAAAAwMHZQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP9NTU3/5ufm//Lz8v/z9PP/8/Tz//X19f/l5eX/nZ2d/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8GBgpqAAAAAAAAAAAAABZlAQEk/wEBJ/8CAin/AgIq/wICKv8CAiv/AgIs/wIC + LP8BAR3/AAAA/xwcHP/w8PD/6+zr//r6+v/6+vr/9PT0/+vr6/9lZWX/AAAA/wAAD/8CAi3/AgIs/wIC + K/8CAir/AgIq/wICKf8BASf/AQEl/wUFG2oAAAAAAAAAAAICQGUGBpL/Bwec/wgIo/8JCaf/CQmq/wkJ + rf8JCa//Cgqz/wkJqP8AAAL/AAAA/4CAgP/y8/L/6+zr/+3t7f/u7u7/xMTE/wcHB/8AAAD/BgZz/woK + s/8JCbD/CQmt/wkJqv8JCaj/CAik/wcHnf8HB5P/Dg5MagAAAAAAAAAAAwNHZQgIk/8JCZ3/Cgqj/wsL + p/8LC6n/Cwus/wsLr/8MDLL/DAy2/wYGW/8AAAD/AAAA/1JSUv+sraz/tra2/3h4eP8KCgr/AAAA/wIC + Iv8MDLb/DAyy/wsLsP8LC63/Cwuq/wsLp/8KCqT/CQmd/wgIk/8PD1VrAAAAAAAAAAAEBE1lCQmY/woK + ov8LC6j/DAyr/wwMrf8MDLD/DAyy/w0Ntf8NDbf/Dg67/wUFSv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8CAiH/DQ2q/w0NuP8NDbX/DQ2z/wwMsP8MDK7/DAyr/wsLqP8KCqL/CQmZ/xAQWmsAAAAAAAAAAAQE + UGUKCp7/Cwum/wwMrP8NDa//DQ2w/w0Ns/8ODrX/Dg63/w4Ouf8ODrv/Dw/A/wwMiv8FBTj/AAAG/wAA + AP8DAyb/CQls/w8Pu/8PD7z/Dg66/w4OuP8ODrX/DQ2z/w0Nsf8NDa//DAys/wsLp/8KCp7/ERFeawAA + AAAAAAAABQVTZQsLpP8MDKv/DQ2w/w4Os/8ODrT/Dg62/w8PuP8PD7r/Dw+8/w8Pvf8QEL//EBDA/xER + w/8SEsn/ERHJ/xERxf8QEMD/EBC//w8Pvv8PD7z/Dw+6/w8PuP8ODrf/Dg61/w4Os/8NDbH/DAyr/wsL + pP8SEmFrAAAAAAAAAAAGBlZlDAyq/w4OsP8PD7X/Dw+3/w8PuP8QELr/EBC7/xAQvf8REb7/ERHA/xER + wf8REcL/EhLC/xISw/8SEsP/EhLC/xERwv8REcH/ERHA/xERvv8QEL3/EBC7/xAQuv8QELj/Dw+3/w8P + tf8ODrD/DAyq/xMTZWsAAAAAAAAAAAcHWmUODrD/EBC2/xERuv8REbz/ERG9/xISvv8SEr//EhLA/xMT + wf8TE8P/ExPD/xMTxP8TE8X/FBTF/xQUxf8UFMX/ExPE/xMTxP8TE8P/ExPC/xISwf8SEr//EhK+/xER + vf8REbz/ERG6/xAQtv8ODrD/FBRpawAAAAAAAAAACAhcYxAQtf8SErv/ExO+/xQUwP8UFMD/FBTB/xUV + wv8VFcP/FRXE/xUVxf8WFsb/FhbG/xYWx/8WFsf/FhbH/xYWx/8WFsf/FhbG/xYWxf8VFcT/FRXD/xUV + wv8UFMH/FBTB/xQUwP8TE77/EhK7/xAQtf8TE2hoAAAAAAAAAAAQEFNUFRXC/xMTv/8UFMP/FRXE/xUV + xP8VFcX/FRXG/xYWx/8WFsf/FhbI/xYWyf8XF8n/FxfK/xcXyv8XF8r/FxfK/xcXyf8XF8n/FhbI/xYW + yP8WFsf/FhbG/xUVxf8VFcT/FRXE/xQUw/8TE7//FRXB/xAQV1UAAAAAAAAAAA0NPxkjI8byFBTD/xUV + x/8WFsj/FxfJ/xcXyf8XF8r/FxfK/xcXy/8YGMz/GBjM/xgYzP8YGM3/GBjN/xgYzf8YGM3/GBjM/xgY + zP8YGMz/GBjL/xcXy/8XF8r/FxfJ/xcXyf8WFsj/FRXH/xQUw/8jI8f0Dg5GGwAAAAAAAAAAFhZxAiUl + eIUZGcr/FBTI/xUVyv8WFsv/FhbM/xYWzP8WFsz/FhbN/xcXzf8XF83/FxfN/xcXzv8XF87/FxfO/xcX + zv8XF87/FxfN/xcXzf8WFs3/FhbM/xYWzP8WFsz/FhbL/xUVyv8UFMj/GBjJ/yYmeogWFnYCAAAAAAAA + AAAAAAAAGBh1BzMzk50kJNP+FxfK/xgYzP8YGMz/GBjN/xgYzf8YGM3/GBjN/xgYzf8ZGc7/GRnO/xkZ + zv8ZGc7/GRnO/xkZzv8YGM3/GBjN/xgYzf8YGM3/GBjN/xgYzP8YGMz/FxfK/yMj0v4zM5WfFBRkBwAA + AAAAAAAAAAAAAAAAAAAAAAAAHBx7Ay0tdkg3N5emMTGpxSwsp8gsLKfILCynyCwsp8gsLKfILCynyCws + p8gsLKfILCynyCwsp8gsLKfILCynyCwsp8gsLKfILCynyCwsp8gsLKfILCynyDExqcU2NpenLi54Shsb + ewMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////8AAAD+AAAAfAAAADwAAAA8AAAAPAAAADwAAAA8AA + AAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AA + AAPAAAADwAAAA8AAAAPAAAAD4AAAB/gAAB////// + + \ No newline at end of file