From 971f9b40edf1a330112d707cefd2bd45be545cec Mon Sep 17 00:00:00 2001 From: Ryan Sammon Date: Thu, 13 Jun 2013 01:25:49 -0400 Subject: [PATCH] Queue Feature and Version 1.2.0 Beta The new queue feature allows several corruptions to be performed in sequence on the same file. This allows corruption of multiple byte ranges, among other things. --- bin/Vinesauce ROM Corruptor v1.2.0 (Beta).zip | Bin 0 -> 110483 bytes src/Vinesauce ROM Corruptor/Corruption.cs | 535 ++++++++++++ .../MainForm.Designer.cs | 82 +- src/Vinesauce ROM Corruptor/MainForm.cs | 819 +++++------------- .../QueueForm.Designer.cs | 147 ++++ src/Vinesauce ROM Corruptor/QueueForm.cs | 116 +++ src/Vinesauce ROM Corruptor/QueueForm.resx | 659 ++++++++++++++ .../Vinesauce ROM Corruptor.csproj | 10 + 8 files changed, 1775 insertions(+), 593 deletions(-) create mode 100644 bin/Vinesauce ROM Corruptor v1.2.0 (Beta).zip create mode 100644 src/Vinesauce ROM Corruptor/Corruption.cs create mode 100644 src/Vinesauce ROM Corruptor/QueueForm.Designer.cs create mode 100644 src/Vinesauce ROM Corruptor/QueueForm.cs create mode 100644 src/Vinesauce ROM Corruptor/QueueForm.resx diff --git a/bin/Vinesauce ROM Corruptor v1.2.0 (Beta).zip b/bin/Vinesauce ROM Corruptor v1.2.0 (Beta).zip new file mode 100644 index 0000000000000000000000000000000000000000..52950a465f75584f8c60a70ceb2e1721eeecef18 GIT binary patch literal 110483 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 S_up%*$0zJ@MwUL-$M|1%aa-U3 literal 0 HcmV?d00001 diff --git a/src/Vinesauce ROM Corruptor/Corruption.cs b/src/Vinesauce ROM Corruptor/Corruption.cs new file mode 100644 index 0000000..0f1ab13 --- /dev/null +++ b/src/Vinesauce ROM Corruptor/Corruption.cs @@ -0,0 +1,535 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace Vinesauce_ROM_Corruptor +{ + static class Corruption + { + public enum ByteCorruptionOptions + { + AddXToByte, + ShiftRightXBytes, + ReplaceByteXwithY + } + + static private List NESCPUJamProtection_Avoid = new List() { 0x48, 0x08, 0x68, 0x28, 0x78, 0x00, 0x02, 0x12, 0x22, 0x32, 0x42, 0x52, 0x62, 0x72, 0x92, 0xB2, 0xD2, 0xF2 }; + static private List NESCPUJamProtection_Protect_1 = new List() { 0x48, 0x08, 0x68, 0x28, 0x78, 0x40, 0x60, 0x00, 0x90, 0xB0, 0xF0, 0x30, 0xD0, 0x10, 0x50, 0x70, 0x4C, 0x6C, 0x20 }; + static private List NESCPUJamProtection_Protect_2 = new List() { 0x90, 0xB0, 0xF0, 0x30, 0xD0, 0x10, 0x50, 0x70, 0x4C, 0x6C, 0x20 }; + static private List NESCPUJamProtection_Protect_3 = new List() { 0x4C, 0x6C, 0x20 }; + + public static byte[] Run + (byte[] ROM, bool ByteCorruptionEnable, long StartByte, long EndByte, ByteCorruptionOptions ByteCorruptionOption, + uint EveryNthByte, int AddXtoByte, int ShiftRightXBytes, byte ReplaceByteXwithYByteX, byte ReplaceByteXwithYByteY, bool EnableNESCPUJamProtection, + bool TextReplacementEnable, bool TextUseByteCorruptionRange, string RawTextToReplace, string RawReplaceWith, string RawAnchorWords, + bool ColorReplacementEnable, bool ColorUseByteCorruptionRange, string RawColorsToReplace, string RawReplaceWithColors) + { + // Areas to not corrupt. + List ProtectedRegions = new List(); + + // Delimeter for text sections. + char[] Delimeter = new char[1] { '|' }; + + // Do text replacement if desired. + if (TextReplacementEnable) + { + // Translation dictionary. + Dictionary TranslationDictionary = new Dictionary(); + + // Read in the text and its replacement. + string[] TextToReplace = RawTextToReplace.Split(Delimeter, StringSplitOptions.RemoveEmptyEntries); + string[] ReplaceWith = RawReplaceWith.Split(Delimeter, StringSplitOptions.RemoveEmptyEntries); + + // Make sure they have equal length. + if (TextToReplace.Length != ReplaceWith.Length) + { + MessageBox.Show("Number of text sections to replace does not match number of replacements.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + return null; + } + + // Create relative offset arrays of the anchors. + string[] Anchors = RawAnchorWords.Split(Delimeter, StringSplitOptions.RemoveEmptyEntries); + int[][] RelativeAnchors = new int[Anchors.Length][]; + for (int i = 0; i < Anchors.Length; i++) + { + RelativeAnchors[i] = new int[Anchors[i].Length]; + for (int j = 0; j < Anchors[i].Length; j++) + { + RelativeAnchors[i][j] = Anchors[i][j] - Anchors[i][0]; + } + } + + // Look for the anchors. + for (int i = 0; i < RelativeAnchors.Length; i++) + { + // Position in ROM. + long j = 0; + + // Scan the entire ROM. + while (j < ROM.LongLength) + { + // If a match has been found. + bool Match = true; + + // Look for the relative values. + for (int k = 0; k < RelativeAnchors[i].Length; k++) + { + // Make sure its in range. + if (j + k < ROM.LongLength) + { + // Ignore non-letter characters for matching purposes. + if (!Char.IsLetter(Anchors[i][k])) + { + continue; + } + + // Check if the relative value doesn't match. + if ((ROM[j + k] - ROM[j]) != RelativeAnchors[i][k]) + { + // It doesn't, break. + Match = false; + break; + } + } + else + { + // Out of range before matching. + Match = false; + break; + } + } + + // If a match was found, update the dictionary. + if (Match) + { + int k = 0; + for (k = 0; k < Anchors[i].Length; k++) + { + if (!TranslationDictionary.ContainsKey(Anchors[i][k])) + { + TranslationDictionary.Add(Anchors[i][k], ROM[j + k]); + } + } + + // Move ahead to the correct location in the ROM. + j = j + k + 1; + } + else + { + // Move ahead one byte. + j = j + 1; + } + } + } + + // Calculate the offset to translate unknown text, assuming ASCII structure. + int ASCIIOffset = 0; + if (TranslationDictionary.Count > 0) + { + ASCIIOffset = TranslationDictionary.First().Value - TranslationDictionary.First().Key; + } + + // Create arrays of the text to be replaced in ROM format. + byte[][] ByteTextToReplace = new byte[TextToReplace.Length][]; + for (int i = 0; i < TextToReplace.Length; i++) + { + ByteTextToReplace[i] = new byte[TextToReplace[i].Length]; + for (int j = 0; j < TextToReplace[i].Length; j++) + { + if (TranslationDictionary.ContainsKey(TextToReplace[i][j])) + { + ByteTextToReplace[i][j] = TranslationDictionary[TextToReplace[i][j]]; + } + else + { + int ASCIITranslated = TextToReplace[i][j] + ASCIIOffset; + if (ASCIITranslated >= Byte.MinValue && ASCIITranslated <= Byte.MaxValue) + { + ByteTextToReplace[i][j] = (byte)(ASCIITranslated); + } + else + { + // Could not translate. + ByteTextToReplace[i][j] = (byte)(TextToReplace[i][j]); + } + } + } + } + + // Create arrays of the replacement text in ROM format. + byte[][] ByteReplaceWith = new byte[ReplaceWith.Length][]; + for (int i = 0; i < ReplaceWith.Length; i++) + { + ByteReplaceWith[i] = new byte[ReplaceWith[i].Length]; + for (int j = 0; j < ReplaceWith[i].Length; j++) + { + if (TranslationDictionary.ContainsKey(ReplaceWith[i][j])) + { + ByteReplaceWith[i][j] = TranslationDictionary[ReplaceWith[i][j]]; + } + else + { + int ASCIITranslated = ReplaceWith[i][j] + ASCIIOffset; + if (ASCIITranslated >= Byte.MinValue && ASCIITranslated <= Byte.MaxValue) + { + ByteReplaceWith[i][j] = (byte)(ASCIITranslated); + } + else + { + // Could not translate. + ByteReplaceWith[i][j] = (byte)(ReplaceWith[i][j]); + } + } + } + } + + // Area of ROM to consider. + long TextReplacementStartByte = 0; + long TextReplacementEndByte = ROM.LongLength - 1; + + // Change area if using the byte corruption range. + if (TextUseByteCorruptionRange) + { + TextReplacementStartByte = StartByte; + TextReplacementEndByte = EndByte; + } + + // Look for the text to replace. + for (int i = 0; i < ByteTextToReplace.Length; i++) + { + // Position in ROM. + long j = TextReplacementStartByte; + + // Scan the entire ROM. + while (j <= TextReplacementEndByte) + { + // If a match has been found. + bool Match = true; + + // Look for the text. + for (int k = 0; k < ByteTextToReplace[i].Length; k++) + { + // Make sure its in range. + if (j + k <= TextReplacementEndByte) + { + // Ignore non-letter characters for matching purposes. + if (!Char.IsLetter(TextToReplace[i][k])) + { + continue; + } + + // Check if the relative value doesn't match. + if (ROM[j + k] != ByteTextToReplace[i][k]) + { + // It doesn't, break. + Match = false; + break; + } + } + else + { + // Out of range before matching. + Match = false; + break; + } + } + + // If the entire string matched, replace it. + if (Match) + { + // If the area is protected. + bool Protected = false; + + // Length of the replacement. + int k = ByteReplaceWith[i].Length - 1; + + // Check if the area is protected. + foreach (long[] ProtectedRegion in ProtectedRegions) + { + if ((j >= ProtectedRegion[0] && j <= ProtectedRegion[1]) || (j + k >= ProtectedRegion[0] && j + k <= ProtectedRegion[1]) || (j < ProtectedRegion[0] && j + k > ProtectedRegion[1])) + { + // Yes, its protected. + Protected = true; + break; + } + } + + // If not protected, replace the text. + if (!Protected) + { + for (k = 0; k < ByteReplaceWith[i].Length; k++) + { + ROM[j + k] = ByteReplaceWith[i][k]; + } + + // Protect the inserted text. + ProtectedRegions.Add(new long[2] { j, j + k }); + } + + // Move ahead to the correct location in the ROM. + j = j + k + 1; + } + else + { + // Move ahead one byte. + j = j + 1; + } + } + } + } + + // Do color replacement if desired. + if (ColorReplacementEnable) + { + // Read in the text and its replacement. + string[] ColorsToReplace = RawColorsToReplace.Split(Delimeter, StringSplitOptions.RemoveEmptyEntries); + string[] ColorsReplaceWith = RawReplaceWithColors.Split(Delimeter, StringSplitOptions.RemoveEmptyEntries); + + // Make sure they have equal length. + if (ColorsToReplace.Length != ColorsReplaceWith.Length) + { + MessageBox.Show("Number of colors to replace does not match number of replacements.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + return null; + } + + // Convert the strings. + byte[] ColorsToReplaceBytes = new byte[ColorsToReplace.Length]; + byte[] ColorsReplaceWithBytes = new byte[ColorsReplaceWith.Length]; + for (int i = 0; i < ColorsToReplace.Length; i++) + { + try + { + byte Converted = Convert.ToByte(ColorsToReplace[i], 16); + ColorsToReplaceBytes[i] = Converted; + } + catch + { + MessageBox.Show("Invalid color to replace.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + return null; + } + } + for (int i = 0; i < ColorsReplaceWithBytes.Length; i++) + { + try + { + byte Converted = Convert.ToByte(ColorsReplaceWith[i], 16); + ColorsReplaceWithBytes[i] = Converted; + } + catch + { + MessageBox.Show("Invalid color replacement.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + return null; + } + } + + // Area of ROM to consider. + long ColorReplacementStartByte = 0; + long ColorReplacementEndByte = ROM.LongLength - 1; + + // Change area if using the byte corruption range. + if (ColorUseByteCorruptionRange) + { + ColorReplacementStartByte = StartByte; + ColorReplacementEndByte = EndByte; + } + + // Position in ROM. + long j = ColorReplacementStartByte; + + // Scan the entire ROM. + while (j <= ColorReplacementEndByte) + { + // If a palette has been found. + bool Palette = true; + + // Look for a palette. + for (int k = 0; k < 4; k++) + { + // Make sure its in range. + if (j + k <= ColorReplacementEndByte) + { + // Check if value exceeds the maximum valid color value. + if (ROM[j + k] > 0x3F) + { + // It does, break. + Palette = false; + break; + } + } + else + { + // Out of range before matching. + Palette = false; + break; + } + } + + // If a possible palette was found, do color replacement. + if (Palette) + { + for (int i = 0; i < ColorsToReplaceBytes.Length; i++) + { + for (int k = 0; k < 4; k++) + { + if (ROM[j + k] == ColorsToReplaceBytes[i]) + { + // If the byte is protected. + bool Protected = false; + + // Check if the byte is protected. + foreach (long[] ProtectedRegion in ProtectedRegions) + { + if (j + k >= ProtectedRegion[0] && j + k <= ProtectedRegion[1]) + { + // Yes, its protected. + Protected = true; + break; + } + } + + // If its not protected, do the replacement. + if (!Protected) + { + ROM[j + k] = ColorsReplaceWithBytes[i]; + ProtectedRegions.Add(new long[2] { j + k, j + k }); + } + } + } + } + + // Move ahead to the correct location in the ROM. + j = j + 4; + } + else + { + // Move ahead one byte. + j = j + 1; + } + } + } + + // Do byte corruption if desired. + if (ByteCorruptionEnable) + { + if (ByteCorruptionOption == ByteCorruptionOptions.AddXToByte && AddXtoByte != 0) + { + for (long i = StartByte + EveryNthByte; i <= EndByte; i = i + EveryNthByte) + { + // If the byte is protected. + bool Protected = false; + + // Check if the byte is protected. + foreach (long[] ProtectedRegion in ProtectedRegions) + { + if (i >= ProtectedRegion[0] && i <= ProtectedRegion[1]) + { + // Yes, its protected. + Protected = true; + break; + } + } + + // Do NES CPU jam protection if desired. + if (EnableNESCPUJamProtection) + { + if (!Protected && i >= 2) + { + if (NESCPUJamProtection_Avoid.Contains((byte)((ROM[i] + AddXtoByte) % (Byte.MaxValue + 1))) + || NESCPUJamProtection_Protect_1.Contains(ROM[i]) + || NESCPUJamProtection_Protect_2.Contains(ROM[i - 1]) + || NESCPUJamProtection_Protect_3.Contains(ROM[i - 2])) + { + Protected = true; + } + } + } + + // If the byte is not protected, corrupt it. + if (!Protected) + { + int NewValue = (ROM[i] + AddXtoByte) % (Byte.MaxValue + 1); + ROM[i] = (byte)NewValue; + } + } + } + else if (ByteCorruptionOption == ByteCorruptionOptions.ShiftRightXBytes && ShiftRightXBytes != 0) + { + for (long i = StartByte + EveryNthByte; i <= EndByte; i = i + EveryNthByte) + { + long j = i + ShiftRightXBytes; + + if (j >= StartByte && j <= EndByte) + { + // If the byte is protected. + bool Protected = false; + + // Check if the byte is protected. + foreach (long[] ProtectedRegion in ProtectedRegions) + { + if (j >= ProtectedRegion[0] && j <= ProtectedRegion[1]) + { + // Yes, its protected. + Protected = true; + break; + } + } + + // Do NES CPU jam protection if desired. + if (EnableNESCPUJamProtection) + { + if (!Protected && j >= 2) + { + if (NESCPUJamProtection_Avoid.Contains(ROM[i]) + || NESCPUJamProtection_Protect_1.Contains(ROM[j]) + || NESCPUJamProtection_Protect_2.Contains(ROM[j - 1]) + || NESCPUJamProtection_Protect_3.Contains(ROM[j - 2])) + { + Protected = true; + } + } + } + + // If the byte is not protected, corrupt it. + if (!Protected) + { + ROM[j] = ROM[i]; + } + } + } + } + else if (ByteCorruptionOption == ByteCorruptionOptions.ReplaceByteXwithY && ReplaceByteXwithYByteX != ReplaceByteXwithYByteY) + { + for (long i = StartByte + EveryNthByte; i <= EndByte; i = i + EveryNthByte) + { + if (ROM[i] == ReplaceByteXwithYByteX) + { + // If the byte is protected. + bool Protected = false; + + // Check if the byte is protected. + foreach (long[] ProtectedRegion in ProtectedRegions) + { + if (i >= ProtectedRegion[0] && i <= ProtectedRegion[1]) + { + // Yes, its protected. + Protected = true; + break; + } + } + + // If the byte is not protected, corrupt it. + if (!Protected) + { + ROM[i] = ReplaceByteXwithYByteY; + } + } + } + } + } + + return ROM; + } + } +} diff --git a/src/Vinesauce ROM Corruptor/MainForm.Designer.cs b/src/Vinesauce ROM Corruptor/MainForm.Designer.cs index 74ba706..c1893f7 100644 --- a/src/Vinesauce ROM Corruptor/MainForm.Designer.cs +++ b/src/Vinesauce ROM Corruptor/MainForm.Designer.cs @@ -136,6 +136,11 @@ namespace Vinesauce_ROM_Corruptor this.checkBox_HotkeyEnable = new System.Windows.Forms.CheckBox(); this.button_HotkeySet = new System.Windows.Forms.Button(); this.button_HotkeyHelp = new System.Windows.Forms.Button(); + this.groupBox_Queue = new System.Windows.Forms.GroupBox(); + this.button_QueueHelp = new System.Windows.Forms.Button(); + this.checkBox_QueueEnable = new System.Windows.Forms.CheckBox(); + this.button_QueueManage = new System.Windows.Forms.Button(); + this.button_QueueAdd = new System.Windows.Forms.Button(); this.groupBox_FileSelection.SuspendLayout(); this.groupBox_EmulatorSelection.SuspendLayout(); this.groupBox_TextReplace.SuspendLayout(); @@ -144,6 +149,7 @@ namespace Vinesauce_ROM_Corruptor this.groupBox_NESPalette.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.pictureBox_NESPalette)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + this.groupBox_Queue.SuspendLayout(); this.SuspendLayout(); // // button_RomDirectoryBrowse @@ -247,7 +253,7 @@ namespace Vinesauce_ROM_Corruptor this.listView_Files.Margin = new System.Windows.Forms.Padding(2); this.listView_Files.MultiSelect = false; this.listView_Files.Name = "listView_Files"; - this.listView_Files.Size = new System.Drawing.Size(344, 188); + this.listView_Files.Size = new System.Drawing.Size(344, 183); this.listView_Files.TabIndex = 47; this.listView_Files.UseCompatibleStateImageBehavior = false; this.listView_Files.View = System.Windows.Forms.View.Details; @@ -256,7 +262,7 @@ namespace Vinesauce_ROM_Corruptor // listViewC_fileName // this.listViewC_fileName.Text = "File Name"; - this.listViewC_fileName.Width = 344; + this.listViewC_fileName.Width = 340; // // groupBox_EmulatorSelection // @@ -928,9 +934,9 @@ namespace Vinesauce_ROM_Corruptor this.groupBox_ColorReplacement.Controls.Add(this.label_ColorsToReplace); this.groupBox_ColorReplacement.Controls.Add(this.checkBox_ColorReplacementEnable); this.groupBox_ColorReplacement.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.groupBox_ColorReplacement.Location = new System.Drawing.Point(10, 583); + this.groupBox_ColorReplacement.Location = new System.Drawing.Point(10, 580); this.groupBox_ColorReplacement.Name = "groupBox_ColorReplacement"; - this.groupBox_ColorReplacement.Size = new System.Drawing.Size(359, 169); + this.groupBox_ColorReplacement.Size = new System.Drawing.Size(359, 172); this.groupBox_ColorReplacement.TabIndex = 16; this.groupBox_ColorReplacement.TabStop = false; this.groupBox_ColorReplacement.Text = "Color Replacement"; @@ -1091,7 +1097,7 @@ namespace Vinesauce_ROM_Corruptor this.pictureBox1.Image = global::Vinesauce_ROM_Corruptor.Properties.Resources.Vinesauce_Mushroom; this.pictureBox1.Location = new System.Drawing.Point(376, 11); this.pictureBox1.Name = "pictureBox1"; - this.pictureBox1.Size = new System.Drawing.Size(358, 307); + this.pictureBox1.Size = new System.Drawing.Size(358, 233); this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; this.pictureBox1.TabIndex = 39; this.pictureBox1.TabStop = false; @@ -1153,12 +1159,71 @@ namespace Vinesauce_ROM_Corruptor this.button_HotkeyHelp.UseVisualStyleBackColor = true; this.button_HotkeyHelp.Click += new System.EventHandler(this.button_HotkeyHelp_Click); // + // groupBox_Queue + // + this.groupBox_Queue.Controls.Add(this.button_QueueHelp); + this.groupBox_Queue.Controls.Add(this.checkBox_QueueEnable); + this.groupBox_Queue.Controls.Add(this.button_QueueManage); + this.groupBox_Queue.Controls.Add(this.button_QueueAdd); + this.groupBox_Queue.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.groupBox_Queue.Location = new System.Drawing.Point(376, 250); + this.groupBox_Queue.Name = "groupBox_Queue"; + this.groupBox_Queue.Size = new System.Drawing.Size(358, 68); + this.groupBox_Queue.TabIndex = 46; + this.groupBox_Queue.TabStop = false; + this.groupBox_Queue.Text = "Queue"; + // + // button_QueueHelp + // + this.button_QueueHelp.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.button_QueueHelp.Location = new System.Drawing.Point(236, 16); + this.button_QueueHelp.Name = "button_QueueHelp"; + this.button_QueueHelp.Size = new System.Drawing.Size(26, 23); + this.button_QueueHelp.TabIndex = 45; + this.button_QueueHelp.Text = "?"; + this.button_QueueHelp.UseVisualStyleBackColor = true; + this.button_QueueHelp.Click += new System.EventHandler(this.button_QueueHelp_Click); + // + // checkBox_QueueEnable + // + this.checkBox_QueueEnable.AutoSize = true; + this.checkBox_QueueEnable.Location = new System.Drawing.Point(6, 20); + this.checkBox_QueueEnable.Name = "checkBox_QueueEnable"; + this.checkBox_QueueEnable.Size = new System.Drawing.Size(65, 17); + this.checkBox_QueueEnable.TabIndex = 2; + this.checkBox_QueueEnable.Text = "Enable"; + this.checkBox_QueueEnable.UseVisualStyleBackColor = true; + this.checkBox_QueueEnable.CheckedChanged += new System.EventHandler(this.checkBox_QueueEnable_CheckedChanged); + // + // button_QueueManage + // + this.button_QueueManage.Enabled = false; + this.button_QueueManage.Location = new System.Drawing.Point(155, 16); + this.button_QueueManage.Name = "button_QueueManage"; + this.button_QueueManage.Size = new System.Drawing.Size(75, 23); + this.button_QueueManage.TabIndex = 1; + this.button_QueueManage.Text = "Manage"; + this.button_QueueManage.UseVisualStyleBackColor = true; + this.button_QueueManage.Click += new System.EventHandler(this.button_QueueManage_Click); + // + // button_QueueAdd + // + this.button_QueueAdd.Enabled = false; + this.button_QueueAdd.Location = new System.Drawing.Point(74, 16); + this.button_QueueAdd.Name = "button_QueueAdd"; + this.button_QueueAdd.Size = new System.Drawing.Size(75, 23); + this.button_QueueAdd.TabIndex = 0; + this.button_QueueAdd.Text = "Add"; + this.button_QueueAdd.UseVisualStyleBackColor = true; + this.button_QueueAdd.Click += new System.EventHandler(this.button_QueueAdd_Click); + // // MainForm // this.AcceptButton = this.button_Run; this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(742, 791); + this.Controls.Add(this.groupBox_Queue); this.Controls.Add(this.button_HotkeyHelp); this.Controls.Add(this.button_HotkeySet); this.Controls.Add(this.checkBox_HotkeyEnable); @@ -1193,6 +1258,8 @@ namespace Vinesauce_ROM_Corruptor this.groupBox_NESPalette.ResumeLayout(false); ((System.ComponentModel.ISupportInitialize)(this.pictureBox_NESPalette)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + this.groupBox_Queue.ResumeLayout(false); + this.groupBox_Queue.PerformLayout(); this.ResumeLayout(false); this.PerformLayout(); @@ -1287,6 +1354,11 @@ namespace Vinesauce_ROM_Corruptor private System.Windows.Forms.Button button_HotkeyHelp; private System.Windows.Forms.ListView listView_Files; private System.Windows.Forms.ColumnHeader listViewC_fileName; + private System.Windows.Forms.GroupBox groupBox_Queue; + private System.Windows.Forms.Button button_QueueHelp; + private System.Windows.Forms.CheckBox checkBox_QueueEnable; + private System.Windows.Forms.Button button_QueueManage; + private System.Windows.Forms.Button button_QueueAdd; } } diff --git a/src/Vinesauce ROM Corruptor/MainForm.cs b/src/Vinesauce ROM Corruptor/MainForm.cs index d97129a..4288685 100644 --- a/src/Vinesauce ROM Corruptor/MainForm.cs +++ b/src/Vinesauce ROM Corruptor/MainForm.cs @@ -264,595 +264,31 @@ namespace Vinesauce_ROM_Corruptor return; } - // Read in all of the text boxes. - long StartByte; - try + if (checkBox_QueueEnable.Checked) { - StartByte = Convert.ToInt64(textBox_StartByte.Text, 16); - } - catch - { - MessageBox.Show("Invalid start byte.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); - return; - } - - long EndByte; - try - { - EndByte = Convert.ToInt64(textBox_EndByte.Text, 16); - } - catch - { - MessageBox.Show("Invalid end byte.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); - return; - } - - uint EveryNthByte; - try - { - EveryNthByte = Convert.ToUInt32(textBox_EveryNBytes.Text); - } - catch - { - MessageBox.Show("Invalid byte corruption interval.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); - return; - } - if (EveryNthByte == 0) - { - MessageBox.Show("Invalid byte corruption interval.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); - return; - } - - int AddXtoByte; - try - { - AddXtoByte = Convert.ToInt32(textBox_AddXToByte.Text); - } - catch - { - MessageBox.Show("Invalid byte addition value.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); - return; - } - - int ShiftRightXBytes; - try - { - ShiftRightXBytes = Convert.ToInt32(textBox_ShiftRightXBytes.Text); - } - catch - { - MessageBox.Show("Invalid right shift value.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); - return; - } - - byte ReplaceByteXwithYByteX; - try - { - ReplaceByteXwithYByteX = Convert.ToByte(textBox_ReplaceByteXwithYByteX.Text, 16); - } - catch - { - MessageBox.Show("Invalid byte to match.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); - return; - } - - byte ReplaceByteXwithYByteY; - try - { - ReplaceByteXwithYByteY = Convert.ToByte(textBox_ReplaceByteXwithYByteY.Text, 16); - } - catch - { - MessageBox.Show("Invalid byte replacement.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); - return; - } - - // Limit the end byte. - if (EndByte > (ROM.LongLength - 1)) - { - EndByte = ROM.LongLength - 1; - } - - // Areas to not corrupt. - List ProtectedRegions = new List(); - - // Delimeter for text sections. - char[] Delimeter = new char[1] { '|' }; - - // Do text replacement if desired. - if (checkBox_TextReplacementEnable.Checked) - { - // Translation dictionary. - Dictionary TranslationDictionary = new Dictionary(); - - // Read in the text and its replacement. - string[] TextToReplace = textBox_TextToReplace.Text.Split(Delimeter, StringSplitOptions.RemoveEmptyEntries); - string[] ReplaceWith = textBox_ReplaceWith.Text.Split(Delimeter, StringSplitOptions.RemoveEmptyEntries); - - // Make sure they have equal length. - if (TextToReplace.Length != ReplaceWith.Length) + QueueForm.CorruptionQueue.Add(new string[] { "Current", CorruptionSettingsToString() }); + foreach (string[] Entry in QueueForm.CorruptionQueue) { - MessageBox.Show("Number of text sections to replace does not match number of replacements.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); - return; - } - - // Create relative offset arrays of the anchors. - string[] Anchors = textBox_AnchorWords.Text.Split(Delimeter, StringSplitOptions.RemoveEmptyEntries); - int[][] RelativeAnchors = new int[Anchors.Length][]; - for (int i = 0; i < Anchors.Length; i++) - { - RelativeAnchors[i] = new int[Anchors[i].Length]; - for (int j = 0; j < Anchors[i].Length; j++) + StringToCorruptionSettings(Entry[1]); + ROM = Corrupt(ROM); + if (ROM == null) { - RelativeAnchors[i][j] = Anchors[i][j] - Anchors[i][0]; - } - } - - // Look for the anchors. - for (int i = 0; i < RelativeAnchors.Length; i++) - { - // Position in ROM. - long j = 0; - - // Scan the entire ROM. - while (j < ROM.LongLength) - { - // If a match has been found. - bool Match = true; - - // Look for the relative values. - for (int k = 0; k < RelativeAnchors[i].Length; k++) - { - // Make sure its in range. - if (j + k < ROM.LongLength) - { - // Ignore non-letter characters for matching purposes. - if (!Char.IsLetter(Anchors[i][k])) - { - continue; - } - - // Check if the relative value doesn't match. - if ((ROM[j + k] - ROM[j]) != RelativeAnchors[i][k]) - { - // It doesn't, break. - Match = false; - break; - } - } - else - { - // Out of range before matching. - Match = false; - break; - } - } - - // If a match was found, update the dictionary. - if (Match) - { - int k = 0; - for (k = 0; k < Anchors[i].Length; k++) - { - if (!TranslationDictionary.ContainsKey(Anchors[i][k])) - { - TranslationDictionary.Add(Anchors[i][k], ROM[j + k]); - } - } - - // Move ahead to the correct location in the ROM. - j = j + k + 1; - } - else - { - // Move ahead one byte. - j = j + 1; - } - } - } - - // Calculate the offset to translate unknown text, assuming ASCII structure. - int ASCIIOffset = 0; - if (TranslationDictionary.Count > 0) - { - ASCIIOffset = TranslationDictionary.First().Value - TranslationDictionary.First().Key; - } - - // Create arrays of the text to be replaced in ROM format. - byte[][] ByteTextToReplace = new byte[TextToReplace.Length][]; - for (int i = 0; i < TextToReplace.Length; i++) - { - ByteTextToReplace[i] = new byte[TextToReplace[i].Length]; - for (int j = 0; j < TextToReplace[i].Length; j++) - { - if (TranslationDictionary.ContainsKey(TextToReplace[i][j])) - { - ByteTextToReplace[i][j] = TranslationDictionary[TextToReplace[i][j]]; - } - else - { - int ASCIITranslated = TextToReplace[i][j] + ASCIIOffset; - if (ASCIITranslated >= Byte.MinValue && ASCIITranslated <= Byte.MaxValue) - { - ByteTextToReplace[i][j] = (byte)(ASCIITranslated); - } - else - { - // Could not translate. - ByteTextToReplace[i][j] = (byte)(TextToReplace[i][j]); - } - } - } - } - - // Create arrays of the replacement text in ROM format. - byte[][] ByteReplaceWith = new byte[ReplaceWith.Length][]; - for (int i = 0; i < ReplaceWith.Length; i++) - { - ByteReplaceWith[i] = new byte[ReplaceWith[i].Length]; - for (int j = 0; j < ReplaceWith[i].Length; j++) - { - if (TranslationDictionary.ContainsKey(ReplaceWith[i][j])) - { - ByteReplaceWith[i][j] = TranslationDictionary[ReplaceWith[i][j]]; - } - else - { - int ASCIITranslated = ReplaceWith[i][j] + ASCIIOffset; - if (ASCIITranslated >= Byte.MinValue && ASCIITranslated <= Byte.MaxValue) - { - ByteReplaceWith[i][j] = (byte)(ASCIITranslated); - } - else - { - // Could not translate. - ByteReplaceWith[i][j] = (byte)(ReplaceWith[i][j]); - } - } - } - } - - // Area of ROM to consider. - long TextReplacementStartByte = 0; - long TextReplacementEndByte = ROM.LongLength - 1; - - // Change area if using the byte corruption range. - if (checkBox_TextUseByteCorruptionRange.Checked) - { - TextReplacementStartByte = StartByte; - TextReplacementEndByte = EndByte; - } - - // Look for the text to replace. - for (int i = 0; i < ByteTextToReplace.Length; i++) - { - // Position in ROM. - long j = TextReplacementStartByte; - - // Scan the entire ROM. - while (j <= TextReplacementEndByte) - { - // If a match has been found. - bool Match = true; - - // Look for the text. - for (int k = 0; k < ByteTextToReplace[i].Length; k++) - { - // Make sure its in range. - if (j + k <= TextReplacementEndByte) - { - // Ignore non-letter characters for matching purposes. - if (!Char.IsLetter(TextToReplace[i][k])) - { - continue; - } - - // Check if the relative value doesn't match. - if (ROM[j + k] != ByteTextToReplace[i][k]) - { - // It doesn't, break. - Match = false; - break; - } - } - else - { - // Out of range before matching. - Match = false; - break; - } - } - - // If the entire string matched, replace it. - if (Match) - { - // If the area is protected. - bool Protected = false; - - // Length of the replacement. - int k = ByteReplaceWith[i].Length - 1; - - // Check if the area is protected. - foreach (long[] ProtectedRegion in ProtectedRegions) - { - if ((j >= ProtectedRegion[0] && j <= ProtectedRegion[1]) || (j + k >= ProtectedRegion[0] && j + k <= ProtectedRegion[1]) || (j < ProtectedRegion[0] && j + k > ProtectedRegion[1])) - { - // Yes, its protected. - Protected = true; - break; - } - } - - // If not protected, replace the text. - if (!Protected) - { - for (k = 0; k < ByteReplaceWith[i].Length; k++) - { - ROM[j + k] = ByteReplaceWith[i][k]; - } - - // Protect the inserted text. - ProtectedRegions.Add(new long[2] { j, j + k }); - } - - // Move ahead to the correct location in the ROM. - j = j + k + 1; - } - else - { - // Move ahead one byte. - j = j + 1; - } - } - } - } - - // Do color replacement if desired. - if (checkBox_ColorReplacementEnable.Checked) - { - // Read in the text and its replacement. - string[] ColorsToReplace = textBox_ColorsToReplace.Text.Split(Delimeter, StringSplitOptions.RemoveEmptyEntries); - string[] ColorsReplaceWith = textBox_ReplaceWithColors.Text.Split(Delimeter, StringSplitOptions.RemoveEmptyEntries); - - // Make sure they have equal length. - if (ColorsToReplace.Length != ColorsReplaceWith.Length) - { - MessageBox.Show("Number of colors to replace does not match number of replacements.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); - return; - } - - // Convert the strings. - byte[] ColorsToReplaceBytes = new byte[ColorsToReplace.Length]; - byte[] ColorsReplaceWithBytes = new byte[ColorsReplaceWith.Length]; - for (int i = 0; i < ColorsToReplace.Length; i++) - { - try - { - byte Converted = Convert.ToByte(ColorsToReplace[i], 16); - ColorsToReplaceBytes[i] = Converted; - } - catch - { - MessageBox.Show("Invalid color to replace.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + MessageBox.Show("Previous error encountered corrupting using \"" + Entry[0] + "\" corruption settings in queue.", + "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + StringToCorruptionSettings(Enumerable.Last(QueueForm.CorruptionQueue)[1]); + QueueForm.CorruptionQueue.RemoveAt(QueueForm.CorruptionQueue.Count - 1); return; } } - for (int i = 0; i < ColorsReplaceWithBytes.Length; i++) - { - try - { - byte Converted = Convert.ToByte(ColorsReplaceWith[i], 16); - ColorsReplaceWithBytes[i] = Converted; - } - catch - { - MessageBox.Show("Invalid color replacement.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); - return; - } - } - - // Area of ROM to consider. - long ColorReplacementStartByte = 0; - long ColorReplacementEndByte = ROM.LongLength - 1; - - // Change area if using the byte corruption range. - if (checkBox_ColorUseByteCorruptionRange.Checked) - { - ColorReplacementStartByte = StartByte; - ColorReplacementEndByte = EndByte; - } - - // Position in ROM. - long j = ColorReplacementStartByte; - - // Scan the entire ROM. - while (j <= ColorReplacementEndByte) - { - // If a palette has been found. - bool Palette = true; - - // Look for a palette. - for (int k = 0; k < 4; k++) - { - // Make sure its in range. - if (j + k <= ColorReplacementEndByte) - { - // Check if value exceeds the maximum valid color value. - if (ROM[j + k] > 0x3F) - { - // It does, break. - Palette = false; - break; - } - } - else - { - // Out of range before matching. - Palette = false; - break; - } - } - - // If a possible palette was found, do color replacement. - if (Palette) - { - for (int i = 0; i < ColorsToReplaceBytes.Length; i++) - { - for (int k = 0; k < 4; k++) - { - if (ROM[j + k] == ColorsToReplaceBytes[i]) - { - // If the byte is protected. - bool Protected = false; - - // Check if the byte is protected. - foreach (long[] ProtectedRegion in ProtectedRegions) - { - if (j + k >= ProtectedRegion[0] && j + k <= ProtectedRegion[1]) - { - // Yes, its protected. - Protected = true; - break; - } - } - - // If its not protected, do the replacement. - if (!Protected) - { - ROM[j + k] = ColorsReplaceWithBytes[i]; - ProtectedRegions.Add(new long[2] { j + k, j + k }); - } - } - } - } - - // Move ahead to the correct location in the ROM. - j = j + 4; - } - else - { - // Move ahead one byte. - j = j + 1; - } - } + StringToCorruptionSettings(Enumerable.Last(QueueForm.CorruptionQueue)[1]); + QueueForm.CorruptionQueue.RemoveAt(QueueForm.CorruptionQueue.Count - 1); } - - // Do byte corruption if desired. - if (checkBox_ByteCorruptionEnable.Checked) + else { - if (radioButton_AddXToByte.Checked && AddXtoByte != 0) + ROM = Corrupt(ROM); + if (ROM == null) { - for (long i = StartByte + EveryNthByte; i <= EndByte; i = i + EveryNthByte) - { - // If the byte is protected. - bool Protected = false; - - // Check if the byte is protected. - foreach (long[] ProtectedRegion in ProtectedRegions) - { - if (i >= ProtectedRegion[0] && i <= ProtectedRegion[1]) - { - // Yes, its protected. - Protected = true; - break; - } - } - - // Do NES CPU jam protection if desired. - if (checkBox_EnableNESCPUJamProtection.Checked) - { - if (!Protected && i >= 2) - { - if (NESCPUJamProtection_Avoid.Contains((byte)((ROM[i] + AddXtoByte) % (Byte.MaxValue + 1))) - || NESCPUJamProtection_Protect_1.Contains(ROM[i]) - || NESCPUJamProtection_Protect_2.Contains(ROM[i - 1]) - || NESCPUJamProtection_Protect_3.Contains(ROM[i - 2])) - { - Protected = true; - } - } - } - - // If the byte is not protected, corrupt it. - if (!Protected) - { - int NewValue = (ROM[i] + AddXtoByte) % (Byte.MaxValue + 1); - ROM[i] = (byte)NewValue; - } - } - } - else if (radioButton_ShiftRightXBytes.Checked && ShiftRightXBytes != 0) - { - for (long i = StartByte + EveryNthByte; i <= EndByte; i = i + EveryNthByte) - { - long j = i + ShiftRightXBytes; - - if (j >= StartByte && j <= EndByte) - { - // If the byte is protected. - bool Protected = false; - - // Check if the byte is protected. - foreach (long[] ProtectedRegion in ProtectedRegions) - { - if (j >= ProtectedRegion[0] && j <= ProtectedRegion[1]) - { - // Yes, its protected. - Protected = true; - break; - } - } - - // Do NES CPU jam protection if desired. - if (checkBox_EnableNESCPUJamProtection.Checked) - { - if (!Protected && j >= 2) - { - if (NESCPUJamProtection_Avoid.Contains(ROM[i]) - || NESCPUJamProtection_Protect_1.Contains(ROM[j]) - || NESCPUJamProtection_Protect_2.Contains(ROM[j - 1]) - || NESCPUJamProtection_Protect_3.Contains(ROM[j - 2])) - { - Protected = true; - } - } - } - - // If the byte is not protected, corrupt it. - if (!Protected) - { - ROM[j] = ROM[i]; - } - } - } - } - else if (radioButton_ReplaceByteXwithY.Checked && ReplaceByteXwithYByteX != ReplaceByteXwithYByteY) - { - for (long i = StartByte + EveryNthByte; i <= EndByte; i = i + EveryNthByte) - { - if (ROM[i] == ReplaceByteXwithYByteX) - { - // If the byte is protected. - bool Protected = false; - - // Check if the byte is protected. - foreach (long[] ProtectedRegion in ProtectedRegions) - { - if (i >= ProtectedRegion[0] && i <= ProtectedRegion[1]) - { - // Yes, its protected. - Protected = true; - break; - } - } - - // If the byte is not protected, corrupt it. - if (!Protected) - { - ROM[i] = ReplaceByteXwithYByteY; - } - } - } + return; } } @@ -1365,7 +801,7 @@ namespace Vinesauce_ROM_Corruptor UriBuilder ub = new UriBuilder(); ub.Host = "tinyurl.com"; ub.Path = "/api-create.php"; - ub.Query = "url=" + SettingsToString(); + ub.Query = "url=" + FileSettingsToString() + CorruptionSettingsToString() + QueueSettingsToString(); response = wc.DownloadString(ub.Uri); } catch @@ -1424,7 +860,7 @@ namespace Vinesauce_ROM_Corruptor StreamWriter sw = new StreamWriter(fDialog.FileName); // Write the settings to the file. - sw.Write(SettingsToString()); + sw.Write(FileSettingsToString() + CorruptionSettingsToString() + QueueSettingsToString()); // Close the file. sw.Close(); @@ -1476,7 +912,9 @@ namespace Vinesauce_ROM_Corruptor text = Uri.UnescapeDataString(text); // Load the settings. - StringToSettings(text); + StringToFileSettings(text); + StringToCorruptionSettings(text); + StringToQueueSettings(text); EnforceAutoEnd(); } catch @@ -1499,7 +937,10 @@ namespace Vinesauce_ROM_Corruptor try { // Load the settings from the file. - StringToSettings(File.ReadAllText(fDialog.FileName)); + string text = File.ReadAllText(fDialog.FileName); + StringToFileSettings(text); + StringToCorruptionSettings(text); + StringToQueueSettings(text); EnforceAutoEnd(); } catch @@ -1534,7 +975,7 @@ namespace Vinesauce_ROM_Corruptor "Replace Byte X with Y Help"); } - private string SettingsToString() + private string FileSettingsToString() { StringBuilder sb = new StringBuilder(); @@ -1544,6 +985,13 @@ namespace Vinesauce_ROM_Corruptor sb.AppendLine("ROM.FileLength=" + String.Format("{0:X}", SelectedROM.FileLength)); sb.AppendLine("ROM.Hash=" + SelectedROM.HashStringBase64); + return sb.ToString(); + } + + private string CorruptionSettingsToString() + { + StringBuilder sb = new StringBuilder(); + // General settings. sb.AppendLine("checkBox_EnableNESCPUJamProtection.Checked=" + checkBox_EnableNESCPUJamProtection.Checked.ToString()); @@ -1578,9 +1026,26 @@ namespace Vinesauce_ROM_Corruptor return sb.ToString(); } - private void StringToSettings(string text) + private string QueueSettingsToString() { + StringBuilder sb = new StringBuilder(); + sb.AppendLine("checkBox_QueueEnable.Checked=" + checkBox_QueueEnable.Checked.ToString()); + + foreach (string[] Entry in QueueForm.CorruptionQueue) + { + + sb.AppendLine("Queue_Entry_Start"); + sb.AppendLine("Identifier=" + Entry[0]); + sb.Append(Entry[1]); + sb.AppendLine("Queue_Entry_End"); + } + + return sb.ToString(); + } + + private void StringToFileSettings(string text) + { // ROM to corrupt. string TargetROMFileName = ""; long TargetROMFileLength = 0; @@ -1631,10 +1096,13 @@ namespace Vinesauce_ROM_Corruptor "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); } } + } + public void StringToCorruptionSettings(string text) + { // Enable checkboxes. // Text replacement. - m = Regex.Match(text, "(?<=checkBox_TextReplacementEnable\\.Checked=).*?(?=\r)"); + Match m = Regex.Match(text, "(?<=checkBox_TextReplacementEnable\\.Checked=).*?(?=\r)"); if (m.Success) { if (m.Groups[0].Value == "True") @@ -1854,6 +1322,38 @@ namespace Vinesauce_ROM_Corruptor } } + public void StringToQueueSettings(string text) + { + Match m = Regex.Match(text, "(?<=checkBox_QueueEnable\\.Checked=).*?(?=\r)"); + if (m.Success) + { + if (m.Groups[0].Value == "True") + { + checkBox_QueueEnable.Checked = true; + } + else + { + checkBox_QueueEnable.Checked = false; + } + } + + QueueForm.CorruptionQueue.Clear(); + MatchCollection entries = Regex.Matches(text, "(?<=Queue_Entry_Start\r\n).*?(?=Queue_Entry_End\r\n)", RegexOptions.Singleline); + foreach (Match entry in entries) + { + if (entry.Success) + { + string id = ""; + m = Regex.Match(entry.Groups[0].Value, "(?<=Identifier=).*?(?=\r)"); + if (m.Success) + { + id = m.Groups[0].Value; + } + QueueForm.CorruptionQueue.Add(new string[] { id, entry.Groups[0].Value }); + } + } + } + private void button_UseTinyURLHelp_Click(object sender, EventArgs e) { button_Run.Focus(); @@ -1967,7 +1467,7 @@ namespace Vinesauce_ROM_Corruptor listView_Files.Focus(); if (item.Index >= 4) { - listView_Files.TopItem = listView_Files.Items[item.Index-4]; + listView_Files.TopItem = listView_Files.Items[item.Index - 4]; } item.Selected = true; break; @@ -2006,5 +1506,148 @@ namespace Vinesauce_ROM_Corruptor EnforceAutoEnd(); } } + + private void button_QueueHelp_Click(object sender, EventArgs e) + { + button_Run.Focus(); + MessageBox.Show("Checking this box enables queue mode, which allows for multiple corruptions to be executed on the file sequentially. This allows corruption of multiple byte ranges among other things. " + + "When the \"Add\" button is clicked, the current corruption settings will be saved to the queue and you will be asked for an identifier for these settings. " + + "When the \"Manage\" button is clicked a new window will appear which will allow you to move corruption settings up and down in the queue, remove corruption settings from the queue, " + + "or overwrite the current settings with a set of queued settings. The corruption settings at the top of the queue list will be executed first, and the current corruption settings will be executed last. " + + "For example, one item in the queue means the ROM is corrupted twice, first using the queued settings and then using the current settings." + , "Queue Help"); + } + + private void button_QueueAdd_Click(object sender, EventArgs e) + { + // Get an identifier of the corruption settings from the user. + string name = Interaction.InputBox("Please enter a brief description of these corruption settings below.", "Add to Queue", ""); + if (name == "") + { + MessageBox.Show("No description entered, addition to queue aborted.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + QueueForm.CorruptionQueue.Add(new string[] { name, CorruptionSettingsToString() }); + } + + private void checkBox_QueueEnable_CheckedChanged(object sender, EventArgs e) + { + button_QueueAdd.Enabled = checkBox_QueueEnable.Checked; + button_QueueManage.Enabled = checkBox_QueueEnable.Checked; + } + + private void button_QueueManage_Click(object sender, EventArgs e) + { + QueueForm form = new QueueForm(this); + form.StartPosition = FormStartPosition.CenterParent; + form.ShowDialog(); + while (form.Visible == true) + this.Enabled = false; + } + + private byte[] Corrupt(byte[] ROM) + { + // Read in all of the text boxes. + long StartByte; + try + { + StartByte = Convert.ToInt64(textBox_StartByte.Text, 16); + } + catch + { + MessageBox.Show("Invalid start byte.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + return null; + } + + long EndByte; + try + { + EndByte = Convert.ToInt64(textBox_EndByte.Text, 16); + } + catch + { + MessageBox.Show("Invalid end byte.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + return null; + } + + uint EveryNthByte; + try + { + EveryNthByte = Convert.ToUInt32(textBox_EveryNBytes.Text); + } + catch + { + MessageBox.Show("Invalid byte corruption interval.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + return null; + } + if (EveryNthByte == 0) + { + MessageBox.Show("Invalid byte corruption interval.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + return null; + } + + int AddXtoByte; + try + { + AddXtoByte = Convert.ToInt32(textBox_AddXToByte.Text); + } + catch + { + MessageBox.Show("Invalid byte addition value.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + return null; + } + + int ShiftRightXBytes; + try + { + ShiftRightXBytes = Convert.ToInt32(textBox_ShiftRightXBytes.Text); + } + catch + { + MessageBox.Show("Invalid right shift value.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + return null; + } + + byte ReplaceByteXwithYByteX; + try + { + ReplaceByteXwithYByteX = Convert.ToByte(textBox_ReplaceByteXwithYByteX.Text, 16); + } + catch + { + MessageBox.Show("Invalid byte to match.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + return null; + } + + byte ReplaceByteXwithYByteY; + try + { + ReplaceByteXwithYByteY = Convert.ToByte(textBox_ReplaceByteXwithYByteY.Text, 16); + } + catch + { + MessageBox.Show("Invalid byte replacement.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + return null; + } + + // Limit the end byte. + if (EndByte > (ROM.LongLength - 1)) + { + EndByte = ROM.LongLength - 1; + } + + // Set byte corruption option. + Corruption.ByteCorruptionOptions ByteCorruptionOption = Corruption.ByteCorruptionOptions.AddXToByte; + if (radioButton_ShiftRightXBytes.Checked) ByteCorruptionOption = Corruption.ByteCorruptionOptions.ShiftRightXBytes; + else if (radioButton_ReplaceByteXwithY.Checked) ByteCorruptionOption = Corruption.ByteCorruptionOptions.ReplaceByteXwithY; + + // Corrupt. + ROM = Corruption.Run(ROM, checkBox_ByteCorruptionEnable.Checked, StartByte, EndByte, ByteCorruptionOption, + EveryNthByte, AddXtoByte, ShiftRightXBytes, ReplaceByteXwithYByteX, ReplaceByteXwithYByteY, checkBox_EnableNESCPUJamProtection.Checked, + checkBox_TextReplacementEnable.Checked, checkBox_TextUseByteCorruptionRange.Checked, textBox_TextToReplace.Text, textBox_ReplaceWith.Text, textBox_AnchorWords.Text, + checkBox_ColorReplacementEnable.Checked, checkBox_ColorUseByteCorruptionRange.Checked, textBox_ColorsToReplace.Text, textBox_ReplaceWithColors.Text); + + return ROM; + } } } diff --git a/src/Vinesauce ROM Corruptor/QueueForm.Designer.cs b/src/Vinesauce ROM Corruptor/QueueForm.Designer.cs new file mode 100644 index 0000000..eb8e1bc --- /dev/null +++ b/src/Vinesauce ROM Corruptor/QueueForm.Designer.cs @@ -0,0 +1,147 @@ +namespace Vinesauce_ROM_Corruptor +{ + partial class QueueForm + { + /// + /// 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(QueueForm)); + this.listView_Queue = new System.Windows.Forms.ListView(); + this.listViewC_Identifier = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.button_Up = new System.Windows.Forms.Button(); + this.button_Down = new System.Windows.Forms.Button(); + this.button_Remove = new System.Windows.Forms.Button(); + this.button_Overwrite = new System.Windows.Forms.Button(); + this.button_Close = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // listView_Queue + // + this.listView_Queue.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.listViewC_Identifier}); + this.listView_Queue.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.listView_Queue.FullRowSelect = true; + this.listView_Queue.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; + this.listView_Queue.HideSelection = false; + this.listView_Queue.Location = new System.Drawing.Point(12, 74); + this.listView_Queue.Margin = new System.Windows.Forms.Padding(2); + this.listView_Queue.MultiSelect = false; + this.listView_Queue.Name = "listView_Queue"; + this.listView_Queue.Size = new System.Drawing.Size(258, 183); + this.listView_Queue.TabIndex = 48; + this.listView_Queue.UseCompatibleStateImageBehavior = false; + this.listView_Queue.View = System.Windows.Forms.View.Details; + // + // listViewC_Identifier + // + this.listViewC_Identifier.Text = "Identifier"; + this.listViewC_Identifier.Width = 254; + // + // button_Up + // + this.button_Up.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.button_Up.Location = new System.Drawing.Point(12, 42); + this.button_Up.Name = "button_Up"; + this.button_Up.Size = new System.Drawing.Size(75, 23); + this.button_Up.TabIndex = 49; + this.button_Up.Text = "Move Up"; + this.button_Up.UseVisualStyleBackColor = true; + this.button_Up.Click += new System.EventHandler(this.button_Up_Click); + // + // button_Down + // + this.button_Down.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.button_Down.Location = new System.Drawing.Point(93, 42); + this.button_Down.Name = "button_Down"; + this.button_Down.Size = new System.Drawing.Size(96, 23); + this.button_Down.TabIndex = 50; + this.button_Down.Text = "Move Down"; + this.button_Down.UseVisualStyleBackColor = true; + this.button_Down.Click += new System.EventHandler(this.button_Down_Click); + // + // button_Remove + // + this.button_Remove.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.button_Remove.Location = new System.Drawing.Point(195, 42); + this.button_Remove.Name = "button_Remove"; + this.button_Remove.Size = new System.Drawing.Size(75, 23); + this.button_Remove.TabIndex = 51; + this.button_Remove.Text = "Remove"; + this.button_Remove.UseVisualStyleBackColor = true; + this.button_Remove.Click += new System.EventHandler(this.button_Remove_Click); + // + // button_Overwrite + // + this.button_Overwrite.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.button_Overwrite.Location = new System.Drawing.Point(12, 12); + this.button_Overwrite.Name = "button_Overwrite"; + this.button_Overwrite.Size = new System.Drawing.Size(224, 23); + this.button_Overwrite.TabIndex = 52; + this.button_Overwrite.Text = "Load and Overwrite Current Settings"; + this.button_Overwrite.UseVisualStyleBackColor = true; + this.button_Overwrite.Click += new System.EventHandler(this.button_Overwrite_Click); + // + // button_Close + // + this.button_Close.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.button_Close.Location = new System.Drawing.Point(12, 262); + this.button_Close.Name = "button_Close"; + this.button_Close.Size = new System.Drawing.Size(75, 23); + this.button_Close.TabIndex = 53; + this.button_Close.Text = "Close"; + this.button_Close.UseVisualStyleBackColor = true; + this.button_Close.Click += new System.EventHandler(this.button_Close_Click); + // + // QueueForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(282, 290); + this.Controls.Add(this.button_Close); + this.Controls.Add(this.button_Overwrite); + this.Controls.Add(this.button_Remove); + this.Controls.Add(this.button_Down); + this.Controls.Add(this.button_Up); + this.Controls.Add(this.listView_Queue); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "QueueForm"; + this.Text = "Manage Queue"; + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.ListView listView_Queue; + private System.Windows.Forms.ColumnHeader listViewC_Identifier; + private System.Windows.Forms.Button button_Up; + private System.Windows.Forms.Button button_Down; + private System.Windows.Forms.Button button_Remove; + private System.Windows.Forms.Button button_Overwrite; + private System.Windows.Forms.Button button_Close; + + } +} \ No newline at end of file diff --git a/src/Vinesauce ROM Corruptor/QueueForm.cs b/src/Vinesauce ROM Corruptor/QueueForm.cs new file mode 100644 index 0000000..a117b09 --- /dev/null +++ b/src/Vinesauce ROM Corruptor/QueueForm.cs @@ -0,0 +1,116 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace Vinesauce_ROM_Corruptor +{ + public partial class QueueForm : Form + { + static public List CorruptionQueue = new List(); + + public MainForm MainWindow; + + public QueueForm(MainForm MainWindow) + { + InitializeComponent(); + + this.MainWindow = MainWindow; + + PopulateQueueList(); + } + + private void button_Close_Click(object sender, EventArgs e) + { + this.Close(); + } + + private void button_Up_Click(object sender, EventArgs e) + { + if (listView_Queue.SelectedIndices.Count == 0) + { + return; + } + + int index = listView_Queue.SelectedIndices[0]; + if (index == 0) + { + return; + } + + string[] temp = CorruptionQueue[index - 1]; + CorruptionQueue[index - 1] = CorruptionQueue[index]; + CorruptionQueue[index] = temp; + + PopulateQueueList(); + + listView_Queue.Items[index - 1].Selected = true; + } + + private void button_Down_Click(object sender, EventArgs e) + { + if (listView_Queue.SelectedIndices.Count == 0) + { + return; + } + + int index = listView_Queue.SelectedIndices[0]; + if (index == listView_Queue.Items.Count - 1) + { + return; + } + + string[] temp = CorruptionQueue[index + 1]; + CorruptionQueue[index + 1] = CorruptionQueue[index]; + CorruptionQueue[index] = temp; + + PopulateQueueList(); + + listView_Queue.Items[index + 1].Selected = true; + } + + private void PopulateQueueList() + { + listView_Queue.Items.Clear(); + listView_Queue.Focus(); + foreach (string[] Entry in CorruptionQueue) + { + listView_Queue.Items.Add(new ListViewItem(new string[] { Entry[0] })); + } + } + + private void button_Remove_Click(object sender, EventArgs e) + { + if (listView_Queue.SelectedIndices.Count == 0) + { + return; + } + + int index = listView_Queue.SelectedIndices[0]; + CorruptionQueue.RemoveAt(index); + + PopulateQueueList(); + } + + private void button_Overwrite_Click(object sender, EventArgs e) + { + if (listView_Queue.SelectedIndices.Count == 0) + { + return; + } + + if (MessageBox.Show("The current corruption settings will be overwritten, are you sure you wish to do this?", + "Confirm Overwrite", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes) + { + int index = listView_Queue.SelectedIndices[0]; + string[] entry = CorruptionQueue[index]; + MainWindow.StringToCorruptionSettings(entry[1]); + this.Close(); + } + } + } +} diff --git a/src/Vinesauce ROM Corruptor/QueueForm.resx b/src/Vinesauce ROM Corruptor/QueueForm.resx new file mode 100644 index 0000000..8e94086 --- /dev/null +++ b/src/Vinesauce ROM Corruptor/QueueForm.resx @@ -0,0 +1,659 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + + AAABAAQAEBAAAAAAIABoBAAARgAAACAgAAAAACAAqBAAAK4EAAAwMAAAAAAgAKglAABWFQAAQEAAAAAA + IAAoQgAA/joAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAD////b//////// + /////////v7+//39/f/n5+f/1tbW/9fX1//y8vL//v7+//7+/v/////////////////////b////2/// + //////////////z8/P/g4OD/7+/v//r6+v/29vb/19fX/8bGxv/+/v7/////////////////////2/// + /9v//////////////////////v7+//Hx8f/Nzc3/6urq//7+/v/Y2Nj//v7+//////////////////// + /9v////b//////////////////////7+/v/U2sD//v79/9bbwf/9/fr/2NjX//7+/v////////////// + ///////b////2//////////////////////+/v7/vtC0//z+/P/A0rj/+fz5/9jY1//+/v7///////// + ////////////2////9v//v///v7+//3+/f/8+/r/7Ovl/9fZzf/Q0Mb/0NLF/93e1f/j4+H//f38//7+ + /v///////////////9v+/v7b9/f3/+Df4f/d3d3/n6lN/4aWCf+InQX/i58D/4ygBP+HmQX/gZEV/8TG + u//IyMf/2dnZ//39/f/+/v7b5ejW2+Xm3P/6+/L/yteP/4umB/+MqBD/vMx1/7O/bv/I04r/lbAo/4mm + Bf+wxWH/9ffq/+np5f+tsp///v7+28TUj9uMqyb/i6wp/4eqGv+KrCT/4+rG/+boz/9/iQ7/xcmR//T3 + 6/+ZuEX/hKsp/4atNP+MsUT/haJL//7+/tvY5MHbha8//4OvPf+Brz3/s8yG//38+v+ztl3/mZ4i/56k + Lf/09Of/0uK+/3yvQ/9+sEb/f7JM/5m0ef/+/v7b9vrx24a2Yf+Atlr/f7dd/7/ar//t7tj/u7lY/+Hh + t/++vV//29mp/+Lv3f93tV3/drVe/3a4Zf+8z7T///7+2/79/dvO5cj/sdat/4jBgv+czp7/5+bC/+np + x//9/v3/8/Pf/9/crf/C4cX/bLxz/5/RoP/H3cb/8vTy//7+/tv//v7b/v7+//7+/v/y+vT/jtGo/7/k + y//7/v3//v7+//3+/f/b8uP/ds2g/6vewP/5/Pv/8/Ly//7+/v/+/v7b////2/7+/v/+/v7//v7+/9nz + 6f9k0Kv/fti6/57kz/+P38v/Z9W3/2rWuf/v+ff/9vf2//7+/v//////////2////9v///////////7+ + /v/0/fz/etzJ/1TUu/9R18D/U9jC/2bdyv+j6N3/9/v7//39/v///////////////9v////b//////// + ///+/v7//v7+//r+/v/x/Pv/4vj2/+v7+f/5/v3//f7+//7+/v/+///////////////////bAAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//ygA + AAAgAAAAQAAAAAEAIAAAAAAAgBAAAAAAAAAAAAAAAAAAAAAAAAD///+3//////////////////////// + //////////////////////////////7+/v/+/v7//f39//7+/v/+/v7//v7+//7+/v/+/v7///////// + ////////////////////////////////////////////////////////////t////7f///////////// + //////////////////////////////7+/v/+/v7/+vr6/9/f3//BwcH/sLCw/6urq/+oqKj/urq6/9XV + 1f/19fX//v7+//7+/v/+/v7//v7+//////////////////////////////////////////+3////t/// + ////////////////////////////////////////9/f3/8XFxf/BwcH/1dXV/+/v7//5+fn//f39//f3 + 9//k5OT/xcXF/5ycnP+SkpL/4eHh//39/f/+/v7///////////////////////////////////////// + /7f///+3///////////////////////////////////////////7+/v//f39//39/f/9/f3//f39//b2 + 9v/9/f3//f39//7+/v/9/f3//v7+//Dw8P+0tLT//f39//7+/v////////////////////////////// + ////////////t////7f//////////////////////////////////////////////////////v7+//z8 + /P/w8PD/4eHh//7+/v/9/f3//f39//7+/v//////+Pj4/7i4uP/+/v7///////////////////////// + //////////////////////+3////t/////////////////////////////////////////////////// + ///+/v7//f39/9ra2v+oqKj/rq6u/7Gxsf/8/Pz//v7+///+///4+Pj/uLi4//7+/v////////////// + /////////////////////////////////7f///+3//////////////////////////////////////// + //////////////7+/v/7/Pf/8/Tp//79/v/+/v7//vz9//T35P/+/f3///7+//j39f+4uLf//v7+//// + ////////////////////////////////////////////t////7f///////////////////////////// + /////////////////////////v7+/9PYu/+PnmX//v35//3+/v/j59L/gpRS//r88f/+/v7/9/f3/7i4 + uP/+/v7///////////////////////////////////////////////+3////t/////////////////// + ///////////////////////////////////+/v7/w9K0/4KeZP/6/vj//f7+/87exf98mV3/8Pfu//7+ + /P/4+Pf/uLi4//7+/v/+/v7//////////////////////////////////////////7f///+3//////// + //////////////////////////////////////////////3+/v/o9e3/ytzL//z+/P/+/f7/8Pv1/8XV + yP/3/fz//v7+//j49f+4uLj//v7+//7+/v//////////////////////////////////////////t/// + /7f///////7////+//////7//v7+/////v/+//3//v3+//3+/P/9/v7//v3+//38/v/4/fn//vz8//38 + /f/7/vf//Pr9//3++v/9/f3/9/j5/8bHxv/+/v7//v78//7+/v///v7///////////////////////// + //////+3////t////////v////7//////v/9/fz//f39//v9+//++/3/9vTx/+Xl2//Ozb//u76n/6yv + lf+kpJD/oaON/6Kliv+pqZb/tLWm/8XHuP/d3db/8fDv//v7+v/9/Pz//vz+//7+/f////////////// + /////////////////7f///+3/////////v////7///7///v6/P/a2dv/vMC//7Gxlf+Bhi//e4kW/3+Q + DP+Glgn/i5sG/4ycBv+NnAf/jpwG/4uaB/+GlAf/gIsN/3Z8E/91fDf/mZiS/5ibnP/Jycr/+fj1//// + ////////////////////////////t/7+/rf9/f3//Pz8/+Tk5P/Ew8X/w8LD/+Hi4P/7+/j/vspw/46j + AP+QoAL/jaAB/4ihAv+HoQH/iKMB/4qiAf+LowH/jKUB/4ujAf+KogD/jaYB/42nCv/r7sr/8/X0/8bI + xP+Ylpj/mZmZ/8/Pz//5+fn//f39//7+/v////+3/v7+t+Hh4f/Ly8v/3t7d//z7/P/9/fz//f74/9zk + rf+NpRT/jaQC/4mjAf+IogD/hKAF/5OqKf+rv03/r8FU/6a3Rf+KpBb/hqMD/4ejAP+LpgH/jaUF/6S6 + Q//3+ub//f37//z8/f/y8vL/urq6/46Ojv+7u7v//v7+/////7f//fu3xNGU//Hy2P/9/fH//v70//P2 + 3f/F04T/iKUV/4mnBP+IpwL/gqQE/5y0O//e57X/+/3w/97hw/+UnVP/+vrr//b44//C0Ir/hagU/4Om + Bv+IqAr/h6cS/5+3Sv/h6b7/+vvw//7++P/7/PD/3+jA/46Xc//+/v7/////t/7997eSsjL/iqga/5av + Ov+YsUX/i60k/4iqEP+HqA//iKkS/4epEv+mvk//9/fk//z8/P/z8+b/g5Ap/3F+BP+2u37//vz5//38 + +//f5rz/iqoj/4SrFf+Hqx3/h6sh/4SrJ/+Sskf/mbZX/5O1Rv+DrCr/hZda//7+/v////+3//34t6K9 + Vf+IqiL/iaok/4SqHf+EqiH/hqgj/4itJP+EqyH/lbJK//X35//7/P3/+/33/6y0Yv+EjAb/hIsE/3+L + DP/i48D/+v36//r9+//W4q3/gast/4GsLf+CqDf/ga0t/4GrNf+DrTr/gq06/4CnO/+Nn2z//v7+//// + /7f+/fu3scd//4WuMv+Grjr/g641/4CrNP+CrzT/gK0z/4WsP//O3qX//f38//z++//k5cL/j5Ye/5WY + GP+QlxH/kZoO/6WsTP/7+vP/+/z+//r7+P+Wumb/e602/32uPf9+rzz/gK9D/4CvSf+Cs0j/g65I/6Kx + jv/+/v7/////t/z9/bfJ27D/hLBI/4OwR/+Fskb/g7JD/4KvSP+Ar0b/iK1Q//H25f/++/7//fz0/7a6 + Zv+jpC3/nqQs/6GnMv+jpSv/nqQv/9vdsP/+/vv//P38/7rVn/98sEv/fbNN/32xTf98sUv/fbRR/3uz + Tf9/qFX/wcq4//7+/v////+3/v79t+bx3P+CsVb/grRX/4O0VP+CtFH/f7NS/3y2VP+Ptmn/+fvy//z8 + /v/p6cr/sbBN/7WyRP+2uWP/4+Ow/66xRf+zs0D/vb9t//38+P/8/fz/zuHA/3i1Vf96s1r/e7NW/3i0 + Vv95tV7/drZc/3mkYP/o6+X///7//////7f+/f63+f71/5W8ef9/tlz/frhg/365ZP+CuWn/gLlm/4G6 + b//1+vD//P38/9XVnv/DwGb/w8Jq/+zsz//+/Pr/1dGb/8O/XP/DvWr/7+3T//n++v/G37z/drVh/3S4 + Y/90tWT/crlm/3K8af94t3H/k7KP//v8+v///v7/////t//+/rf8/f3/yeC+/4W4eP+Cunr/fLl1/3q7 + cf97uG//c7hx/9/v2//6+vL/1tKQ/9DQhv/q6Mj//v78//z+/f/7+/D/1taf/9TQif/m4rf/+vz8/6bQ + pP9vuWz/ab5o/225bf9+vHv/nc2Y/63Pq//Q29L//v39///+/v////+3//78t/77/v/4/vj/8v70/+35 + 7f/Y7tf/rNSq/36+gP9zv37/qdSs/+/z4P/b2Kf/7O3T//3++//9/f7//v77//7+/f/7+/H/5eLB/9zd + sv/r9+r/e8OL/2q9ff9uvnv/qNSw/+n56P/4/fn/2tzc//v7/P/+/P7//v7+/////7f//v23//3+//7+ + /v/+/v7//v3+//7+/v/5/vz/1u7Z/4DGmP93xY7/x+XI//f47f/7/vz//P7+//7+/v/+/v3//v79//39 + /v/9/Pn/5PPb/6HVsP9px47/Z8GL/7jgwf/0/vr//v39/+7t7v/y8PH//v79//7+/v/+/v7/////t/// + /7f///////////7+/v/+/v7////////////9/v3/0O7d/3LJm/97yZ//w+za//f+/P/+/f7//v3+//7+ + /v/6/v3//v38/+369P+f3sT/Z82i/2bKn/+Y2rr/9f75//z9/v/39/f/7u7u//39/f////////////// + //////+3////t//////+/v7//v7+//7+/v/+/v7///////79/v/8/fv/nN/F/2LOpP9qzaX/i9W7/7vr + 2//Y9u3/4Pnx/9X06/+x5db/fda6/2XTsv9m1bT/bNKy/9f07P/+/P7/+ff4/+zx8P/9/f3//v7+//// + /////////////////7f///+3/////////////////////////////////v7+//3+/f/R8+n/ZdC0/13U + sP9Z0qj/W86p/2DOrv9g0bH/XtG1/1bStv9Z1rb/YdW5/1zWu/953MT/7/37//n39//29vP//P79//// + ////////////////////////////t////7f////////////////////////////////+/f7/+/39/+f7 + 9/9q1L3/Vde4/1TTtP9R07f/UdW6/1TWvP9T17z/Vde+/1XZwf9T2cL/WNjC/43d0f/r9Pb/+fv5//v8 + /P/+/P7///////////////////////////////+3////t/////////////////////////////////3+ + ///+/v7/7/38/6/p4f953c3/WdbB/1HWwP9Q2cT/UdnH/1LZx/9T2cb/ZNzL/43k2f+67+n/7fz6//r+ + /v/+/v7//v7///7+/////////////////////////////////7f///+3//////////////////////// + /////////P7+//7+/v/+/f7//P3+//X+/v/t/fv/3Pj1/8vy7//D8u7/z/Tx/+T7+P/w/v3/+f7+//z+ + /v/7/v7//v7+//7+/v/+/////v//////////////////////////////////t////7f///////////// + ///////////////////+/v7//v7+//z////8/v7//P7+//7+/v/9/v7//P7///z+///7/v7//f7+//7+ + /v/+/v7//f7+//7+/v///v7///////7////+//////////////////////////////////+3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAoAAAAMAAAAGAAAAABACAAAAAAAIAlAAAAAAAAAAAAAAAAAAAAAAAA////k////////////v7+//// + /////////v7+/////////////v7+/////////////v7+//7+/v///////v7+//7+/v/+/v7//v7+//7+ + /v/9/f3//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+///////+/v7//v7+//// + ///+/v7//v7+///////+/v7//v7+///////+/v7//v7+///////+/v7//v7+//////////+T////k/// + //////////////////////////////////////////////7+/v/////////////////+/v7///////// + ///+/v7//v7+//7+/v/+/v7//f39//7+/v/+/v7//v7+//39/f/+/v7//v7+//7+/v////////////// + ///+/v7///////////////////////////////////////////////////////////////////////// + //////+T////k/7+/v/+/v7//v7+///////+/v7///////7+/v///////v7+//7+/v/+/v7//v7+//7+ + /v/+/v7//v7+//39/f/19fX/19fX/7e3t/+cnJz/i4uL/4WFhf+BgYH/fHx8/4eHh/+dnZ3/uLi4/9zc + 3P/29vb//f39//7+/v/9/f3//v7+//7+/v///////v7+///////+/v7//v7+/////////////v7+//// + /////////v7+//////////+T////k/7+/v////////////////////////////////////////////// + ///////////////////6+vr/0dHR/6enp/+np6f/urq6/9TU1P/v7+//8/Pz//39/f/9/f3/9/f3/+jo + 6P/S0tL/t7e3/4eHh/9qamr/iYmJ/9LS0v/7+/v//f39//7+/v////////////7+/v////////////7+ + /v////////////7+/v////////////7+/v////+T////k/////////////////////////////////// + ///////////////////////////////////r6+v/19fX//f39//9/f3//f39//39/f/8/Pz//f39//z8 + /P/+/v7//v7+//7+/v/+/v7//v7+//39/f/09PT/x8fH/3Fxcf/g4OD//v7+//39/f////////////// + //////////////////////////////////////////////////////+T////k//////+/v7///////// + ///+/v7//v7+///////+/v7//v7+///////+/v7//v7+//7+/v/+/v7//v7+//7+/v/9/f3//f39//7+ + /v/9/f3/8vLy//n5+f/8/Pz//f39//7+/v/+/v7//f39//39/f/+/v7//f39/62trf/a2tr//Pz8//7+ + /v/+/v7//v7+///////+/v7//v7+/////////////v7+//7+/v/+/v7//v7+//////////+T/v7+k/// + /////////v7+//7+/v/////////////////+/v7////////////+/v7///////7+/v/+/v7///////// + ///+/v7/+/v7//39/f/z8/P/0NDQ//39/f///////f39//39/f/9/f3//f39//7+/v///////////66u + rv/b29v//v7+//7+/v////////////7+/v////////////7+/v////////////7+/v////////////7+ + /v/+/v6T////k////////////////////////////v7+//////////////////////////////////// + ///////////////////+/v7//f39//39/f/Nzc3/xcXF/+Tk5P/l5eX/5OTk//Dw8P/9/f3//f39//7+ + /v///////////66urv/b29v//v7+//////////////////////////////////////////////////// + //////////////////////+T////k//////+/v7////////////+/v7////////////+/v7//v7+//// + ///+/v7//v7+///////+/v7///////7+/v/+/v7//f39//39/P/Ozs7/nZ2d/6CgoP+goKD/n5+f/9TU + 1P/9/fz//v7+//7+/v/+/v7//v7+/66vrv/b29v//v7+///////+/v7//v7+///////+/v7//v7+//// + ///+/v7//v7+///////+/v7//v7+//////////+T////k/////////////////////////////////7+ + /v////////////7+/v////////////7+/v////////////7+/v/+/v7//P38//3+9//9/fj//v3+//7+ + /v/+/f7//vv///79+P/9/vL//vz9//7+/v/+/f7//v39/66vq//b29v//v7+///////+/v7///////// + ///+/v7////////////+/v7////////////+/v7//v7+//////////+T////k/////////////////// + /////////v7+///////////////////////////////////////////////////////+/v7//f32/7a9 + mf/V2r////78///9/v///v7///37/8vQsf/Dy6L//v73//7+/f///f7///39/66vrP/b29v//v7+//// + ///////////////////////////////////+/v7///////////////////////////////+T////k/7+ + /v/+/v7//v7+//7+/v/+/v7//v7+///////+/v7//v7+///////+/v7//v7+//7+/v/+/v7//v7+//7+ + /v/+/v7/7vHd/3aJQv+Somj//f71//38/v/9//7//f7x/4CSUf+BllH/9fjn//7+/f/+/v7//f3+/66u + rv/b29v//v7+///////+/v7//v7+//7+/v/+/v7//v7+/////////////v7+///////+/v7//v7+//// + //////+T////k//////////////////////////////////////+/v7//v7+/////////////v7+//7+ + /v////////////7+/v/+/v7/4uvX/3SSTP+HoGb/+P3z//7+/v/9/v7/8/3t/3aTU/9/m1v/6vPj//z+ + /v////z//v7+/66urv/a2tr//v7+///////////////////////////////////////+/v7///////// + //////////////////////+T////k////////////v7+/////////////v7+//////////////////// + ///////////////////////////////////8/v7/7Prv/4Gfdv+guJf/+v/6//7//v/+/v7/9f75/4+s + if+Qqof/7vny//v+/v////z////7/6+urf/b29v//v7+//7+/v////////////////////////////// + //////////////////////////////////////+T////k/7+/v/+/v7///////7+/v/+/v7//v7+//// + /////////v7+///////+/v7//v7+//7+/v///////v7+//7+/v/9/v7/+P78/9/v5f/q+O3//P77//78 + /v/+/f7/+P78/+Pw6v/m8ez/+P79//z+/v/+/v7//v78/6+vrf/b29v//v7+//7+/v/+/v7//v7+//// + ///+/v7//v7+///////+/v7//v7+//7+/v/+/v7//v7+//////////+T////k/////////////////7+ + /v/////////////////+/v7///////7+/v////7///7+///+/v/+/v7//v7+//7+/////v7//vz9//n8 + /f/3/fj//v37//75/v/8/f3/+f72//z9+//7+v3//f75//7+/P/+/P///v3+/7Gysf/b29v//v7+//7+ + /f////7///7+//7+/v////////////7+/v////////////7+/v////////////7+/v/+/v6T////k/// + ///////////////+/////v///v7+//7+/f/+/v3//f78//7+/P/9/vr//fz9//78/v/7/vb/+vz8//z6 + /v/+/f7//vz+//39/f/8/fr//v39//77/v/8/fz/+/73//79/P/9+/7//f39//z+/P/8/vz/+vz8/+js + 6f/09fb/+/v9//7++f/+/vn//v38//79/v/+/v7///////////////////////////////////////// + //////+T////k//////+/v7//v7+//7+/v/+/v7///////39/f/9/P3//f39//7+/v/4+/v//fz9//z1 + +//w7ef/4eDP/8nItv+xsZf/naGB/46Tb/+AhF//eHhZ/3V1Wf9zd1X/dHlS/3h6WP+AgWb/jY12/5ye + hv+ur5v/yMi7/+Hh2f/w7e//+vr3//z9/f/8+/7//fr+//7+/P/+/v3///////7+/v///////v7+//7+ + /v/+/v7//v7+//////////+T////k//////+/v7//////////v////7//v7+//79/v/+/f7//fz+/+zs + 7f/AxsP/q6qh/42JZP96eDv/cnoi/3SCFv96ig//gI8M/4WVDP+ImAj/iZkJ/4mYCv+KmQr/ipkJ/4qZ + Cf+Glgj/gZAH/32JDP92fRT/bGwY/2RnIv9qakj/gX55/5WWl//Ex8r/7u/x//7+9v/+/vv//v7+//// + ///+/v7//v7+///////+/v7//v7+//////////+T/v7+k/7+/v/+/v7//v7+//7+/f/+/v7//Pv8/+3s + 7v+9vL7/np6f/6+vsP/T1Nb/5ObG/5CkIf+OoQP/jqAE/46hAv+OoQH/jKEB/42hAf+OoAD/j6EA/5Gj + Af+SogH/kqIA/5SkAf+RogH/kKAC/4+gA/+PogL/j6MD/4uiBv+QpSj/5OXQ/8HCwf+QlpP/bnBx/317 + ff++vL3/8PDw//z8/P/+/v7//f39//7+/v/+/v7//v7+//////////+T/v7+k/z8/P/9/f3//v7+//Lz + 8f/MzMz/qqmr/7OytP/j4uP//f38//7+/P/+/vb/ytSG/4qhB/+QpAD/kKEB/4+gAv+MnwD/h6AD/4ah + Av+GogH/hqMA/4ejAP+IoQL/iaID/4qkAP+LpgH/i6YA/4mjAP+KogD/jKUB/46nAv+Npwv/2uKf//36 + /P/6/fr/+/33/93d2/+cm5z/b29v/4aGhv/Kysr/9fX1//39/f/9/f3//v7+//7+/v////+T/v7+k/39 + /f/s7Oz/v7+//7q7uf/W1tb/+vn7//z8/f/+/v3//f74//7+9P/l6rf/kqcn/4yiBf+NogH/i6QA/4mi + AP+JogD/hqEC/4WfBv+Dngn/iKUS/5GsG/+RqCD/i6EZ/4agCP+HpAP/iKUB/4mkAP+KowD/jaYA/4+n + Af+NpAn/l7Ar/+/0z//+/vf//f76//37/f/9/f3/9vb2/8rKyv+IiIj/b29v/7CwsP/u7u7//v7+//// + ///+/v6T//7/k/r79v/Fx7z/7u7r//38/f/9/Pz//v3+//79/v/9/fn//v7v/+Dov/+PqSb/iacD/4ql + AP+KpgD/hKMC/4SkAf+Eogf/iage/7bIa//j6rn/9PbZ/9bas//e4bj/8/XT/9virf+wwGn/h6Il/3+i + B/+BpAD/haUC/4qnAv+KpQX/h6YM/5qzQP/r8Mv//v70//39/f/9/f7//f39//z8/P/8/Pz/5ubk/5mb + kP+IiYX//f39///////+/v6T//3+k9nfu/+twWb/5um+//b44P/+/u7//v7w//n86P/p78T/uMlt/4yn + IP+Hpgf/iqcG/4qnBf+IpwT/g6YC/4SjEv+5ym//8/bY//3+9v/8/fn/7+/b/32KLv+Nl0D/9vXh//39 + +P/9/ff/8PPW/6jAWf+Cpw//gqcG/4amCv+IqQ3/iagV/4aoFP+Urjr/ydeR/+3y1f/7/O3//v70//79 + 9f/3+uX/3+m9/6K6Zf+EiW///f39//7+/v/+/v6T//3+k9njsP9/pQ7/iKYa/5ewNf+gtFL/pbZg/5ix + SP+KrCL/h6oP/4elDf+Gpwv/iakP/4imEv+Iqwz/hqkV/8vYiv/+/e///f37//78/v/5+O3/mqRV/25+ + A/9uegf/pqts//z88f/+/fr//f37//r67P+/zoH/haUc/4SpDf+FqhX/h6kc/4arFf+IqyD/gqgk/4yu + PP+bt1j/pr5s/6C4aP+YuE7/hKss/3ylIP+KkXH//v7+//7+/v/+/v6T/vv+k+PqwP+CpRn/hacR/4uq + HP+IqRv/hqkY/4SpFf+Hqxj/iaoZ/4uqGv+Hqxj/hqsY/4aqGf+HqSb/xNOO//789P/8+f3/+fv8//79 + +P/AxYn/eYcI/3qFAP95hAH/eocS/9TWqf/++/r/+/38//r8/f/5+vH/usx8/4OqG/+Erh//h60p/4Sp + KP+IqjX/g60o/4OtKv+EqzP/g6wv/4OvLf+Criz/hKw2/3qeMP+Rmnz//v7+///////+/v6T/v78k+/2 + 0f+IqTD/h6oh/4qrKf+Iqib/g6kf/4SrIv+DqST/hKgl/4mtKf+Hryf/g6wk/4OpKf+ovnD/+/3t//z7 + /v/6/f3/+/36/+rtx/+FkCD/ho4H/4iMB/+GjQX/gI0C/42WMP/09dj//P35//j++//7/vv//P7p/5m1 + Xv9/qy7/ga0u/32oLv+BqDr/g7Ax/36rLv+BrTb/gqw7/4KtP/+CrT//f6c8/3aaOP+iro///v7+//7+ + /v////+T//79k/r95f+LqkX/hK0q/4mvN/+IsDf/hrAz/3+pLv+BqzP/ga0x/4CvKv+BrTL/gqs3/4ir + Q//j8ML//f76//v9/f/8/vz//fzx/6yzY/+KkxP/kZQV/5GWEP+OlA3/j5gI/4qVEP+/wn7//fz0//v9 + /v/7/f7//Pz8/9PivP9/qkH/e60y/3yuNf99rTr/f7A3/4CvO/+BsD7/f65D/4OySP+CskX/gq9F/3SV + Qv+5w67//v7+///////+/v6T/fv/k/z99v+btW//ha5A/4SuQf+DrUH/hK1B/4OuPv+Crz3/hLJA/4Ct + Pv+BrT//h69I/568bf/8/ur//vv+//78/v/9/vb/4uK5/5efMf+dnyX/m58j/5igHf+Xnhz/mp4a/5me + Hf+YoDX/6+vO//77/v/9/vz//Pz9/+/36f+Ks1z/fK9A/3yuR/99r0X/fa5J/3+tTP98rUr/f7BT/36x + T/9/tEv/g7NM/3GQS//Y3tL//v7+//////////+T/f7+k/v++f+40Jj/g7BK/4OxSf+Eskn/hbNI/4Oy + RP+Dskb/grBJ/4CuTf9+sEb/ha9L/7rNm//9/fv//vv+//78/v/7++v/trhr/6OmMf+ppzH/oqcw/6Cn + OP+kqDj/pacw/6SnLf+hqDX/vsN3//799f/+/vr//f77//j9+P+lxoL/e7BK/32zVP99tE3/fbNN/3uy + S/98tEr/frZR/3m0Tf97tE//g7FY/3eQXv/t8Oz//v7+//////////+T/v78k/7+/v/S48D/grBU/4Cz + Uv+CtFT/hLRS/3+vTP+Cs1D/fbJP/320Uv98tVL/ha9b/8vbsf/+/vv//f3+//36/P/n6MH/qqxK/7Ov + Qv+xrz3/p6xE/9TVmf/NzYf/q7A+/66vPP+vsD7/q7JL//Py2//+/f3//f38//38/f+10aD/d7NQ/3e0 + WP99s1j/fbRU/3SyUP96s1P/fLVb/3i1XP93t1f/e65b/5Clfv/8+/v//v7+///////+/v6T//7+k/3+ + /f/x++f/irNn/4O1W/+Bs1v/gbRa/4O3W/+Ct1v/g7dd/4G2XP99uFv/fbNg/8jgtP/+/vz/+/z+//z+ + 9f/Ky5H/vbpf/765U/+7u1X/wMN4//v66f/39eD/u7xu/7u3Tf++u0v/uLdW/9LPpP/+/vj/+f75//n+ + /P+41ab/e7Zc/3a1X/96tGD/e7Rf/3e0X/92uGH/c7dj/3K3Zf91tWj/fKlw/7nLtf/9+/3///7///// + ///+/v6T//3+k/7+/P/3/vX/p8aS/4K1Xv9+uF3/f7tj/3u5ZP98uWj/grtt/4G4bP+Aumj/eLho/7XZ + qv/+/fz//Pz+//b44f/Gw33/xsJr/8PAY//Ix3v/7+7S//78/P/+/fv/6ebH/8W/cf/Hw2D/yMBq/8nG + hf/7+uj/+v75//b++f+qzJz/d7Rg/3K4Zf9zumX/crZk/3S5aP9xumf/c75q/3a8bf98tnf/ep54/+r0 + 6P/8/Pv//v7+//7+/v/+/v6T//3+k/7+/f/5/fz/2e3Q/4a2cP98tmr/e7hv/3q5cf94uG//erpw/3q5 + b/99uG7/crlu/5vKlv/7/ff//fv9/+boxP/TzYP/0tF//83Mhv/t6sz//v76//3+/f/8/v7//v73/+Xi + uv/JyYH/0cuC/9DNgf/x7ND//fz9/+z68f+SwIr/dLhq/2q7aP9ovGT/a7pp/3C6bf95unX/fbh2/4zB + hf+awZf/qbyr//v++v///vz///7+//7+/v/+/v6T/v7+k/79/v/9/P7/9f3z/8Xhw/+83bz/tdi1/6bP + pf+Qwo3/gbt6/328dP95unT/cbx2/3y3f//o+Ob//P34/+Dhtv/b1ZX/0tSX/+vp0P/+/vf//v7+//3+ + /f/8//r//f78//398//o6cX/2Nak/93bmv/m5MD//vz8/9Tw3P98u4D/bLp0/2m/cv9ovm7/crh3/4zE + jf+63Lr/4fbh/+//7//J1Mz/6+/v//77////+////v7+///////+/v6T//76k/78/v/+/P7/+/76//n+ + +v/5/vr/+f76//n++P/s/Ov/y+jL/5nGm/96wIH/c8GA/3a8gf+x2bT/9Pvt/9zdsf/e2rD/7/HY//38 + /P/8/vv//P39//79/v///vr//v7+//7+/P/9/fX/8O7Y/9vYsv/c4Lb/9vzv/6DTrf9wwoP/a7+A/2m+ + f/90vYD/rNm3/+j46f/4/vf/+v37//Py9P/X1df//Pz8//79/f/9/P7//v7+//////////+T//76k//9 + /v/+/f7//v79//7+/v/+/v7//v3+///9/v/9/v7/+P78/+z78v+03rn/ecCP/3HCiP+Bx5P/yunN/+Xo + zf/8+u///f77//z+/f/7/v3//f7+//7+/v/+/v3//v79//7+/f/9/f7//v37//f36f/b68r/yenL/3rC + kf9nxon/YsGH/3S9jP+54sH/7v72//z9/f/+/f3//fv8/9vX2v/49/j//v78//3//P/9/v7//v7+//// + //////+T////k/7+/v/////////////////+/v7//v7+/////////////////////v/4/vj/uOPL/3jG + lv9rx5D/i82j/9705f/w/fv/9/38//r+/f/+/v7//v7+//7+/v/9/v3/+//9//z+/f/+/P7//vz9//b9 + +P/K8tz/fsuh/2jIlv9lypb/Z8aU/67hwf/1/fb/+f79//3+/v/+/f3/5eXl/+7u7v/+/v7///////// + //////////////////////+T////k/7+/v/+/v7//v7+//7+/v/+/v7//v7+///////+/v7//v7+//7+ + /v/9/f7/8P32/5/Yuv9sypv/bMeZ/4jLqf++7Nj/9f76//z9/f/+/f7//v3+//79/v/9/v7/+v7+//3+ + +//9/fr/8v73/7rn1v97z7D/Zc6m/2LNov9ny6L/iNKx/+f98//7/fz//fz+//z9/v/v8PD/7e3t//z8 + /P/9/f3//v7+//7+/v///////v7+//7+/v////+T////k/////////////////7+/v/+/v7//v7+//7+ + /v///////v7+///+///9/P7//v38/9346/93zqz/YM2i/2rNov9uyqL/ldO8/8Lu4P/i/PT/7/76//X+ + /P/2/vz/8v36/+b79P/E7d//k9vD/2vPsP9l1LL/aNWz/2XSrv9uz7D/vOvc//v9/f/+/P7//vv+/+3x + 8P/q7e3//Pz8//39/f/+/v7////////////+/v7///////////////+T////k/////////////////// + ///////////////////////////////////+/f7//v39//n++f+f4s3/Yc+t/2XSrP9e0qr/W8+m/2LM + p/9zz6//iNm//47awv+S3cX/i9nD/3vRvP9ozrP/ZNS0/2bWtf9k1LX/Yta5/2DWt/972L7/3fr0//78 + /v/+/P7/8/Hw/+/y8P/7/v7///////////////////////////////////////////////+T////k/7+ + /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/9/f3/+/79//79/P/D8eX/adC3/2DU + tf9a07D/WNOp/1nRqv9Yz6v/XNGw/1nQr/9Z1LL/V9O0/1XTuP9Q1Lf/U9a3/13Wuf9e1Ln/WtS6/1vZ + vf+K38z/6v77//78/v/x8O//9/fz//z9/f/+/v7//v7+///////+/v7//v7+///////+/v7//v7+//// + //////+T////k//////+/v7//v7+///////////////////////+/v7//v7+///////+/f7/+f7+//3+ + /f/c+fP/cNG8/1XXuP9Y1bb/VtSz/1LSsv9T1Lb/VNW5/1PUuP9W1rr/Vde6/1PWu/9X2L//V9m//1XZ + wf9S2L//Vde//1rYwf+V39T/5PP1/+zu7//8/vv/+v37//36/f/+/f7///////7+/v////////////7+ + /v///////v7+//7+/v/+/v6T////k/////////////////////////////////////////////////// + ///+/f7//f7+//j+/f/e+vj/g9fH/1vXv/9P1rz/UNS7/07UvP9L1b3/StfA/07Yw/9Q18P/UdjD/0/Y + wv9R2MP/UtrF/1Tbx/9X2cb/YdjG/5Lj1v/P7+v/9Pz9//3//v/+/v7//f7+//79///+/v////////// + ///////////////////////////////////+/v6T////k//////+/v7//v7+//7+/v/+/v7//v7+//7+ + /v/+/v7//v7+//7+/v/8/v7//v7+//3+/v/x/v3/0fby/6jo4P+D4NH/YdjE/1fVwP9U1sL/UtjE/1Pa + yP9T2cf/VNrI/1Tbx/9X2cb/ZdvK/4jk1/+v6+T/1Pb0/+39/P/2/v7/+v7+//3+/v/+/v7//v7+//3/ + ///+/v7//v7+///////+/v7//v7+///////+/v7//v7+//////////+T////k/////////////////// + //////////////7+/v////////////7+/v/7/v7//v7////+///+/f7//P3+//f+/v/w/v7/6P37/9z6 + 9v/L9PD/uO3o/67r5f+o7Ob/tO7p/9D08P/e+/j/6v38//P+/v/5/v3//P7+//v+/v/6/v7//f7+//7+ + /v/+/v7//v7+//3////+/v7//v7+///////+/v7//v7+///////+/v7//v7+///////+/v6T/v7+k/// + ///////////////////////////////////////////////////9/v7//v7+//7+/v/+/v///f7+//z+ + /v/7/v7//P7+//v+/v/5/v3/+v7+//r+/v/7/v7/+v7///j//v/5//7/+v7+//v+/f/8/v3//f7+//3+ + /v/+/v7///7+//7+/v////////////3////+//////////////////////////////////////////// + ///+/v6T////k/7+/v////////////7+/v/+/v7////////////+/v7////////////+/v7///////7/ + ///7/v7//P////z////9/v///v7///7+///9/v///P////z////8////+/////z//v/+/v7///7+///9 + /v///v7//f7+//7//v/+/v7////////////+/v7///////7////+//////////////////////////// + ///+/v7///////////////+TAAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//KAAAAEAAAACAAAAAAQAgAAAA + AAAAQgAAAAAAAAAAAAAAAAAAAAAAAP///2////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///+/v7//f39//39/f/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7///////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////2////9v//////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////7+/v/+/v7//v7+//7+/v/9/f3//f39//7+/v/+/v7//v7+//7+/v/9/f3//v7+//7+ + /v/+/v7//v7+//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////9v////b/// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////v7+//39/f/8/Pz/+Pj4//Pz8//v7+//7e3t/+zs + 7P/u7u7/7+/v//X19f/6+vr//f39//7+/v////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////b////2////////////////////////////////////////////////////////////// + ///////////////////////////////////+/v7//v7+//7+/v/6+vr/8PDw/9DQ0P+wsLD/kpKS/35+ + fv9wcHD/bm5u/2tra/9oaGj/YWFh/2NjY/9zc3P/hISE/56env+7u7v/4eHh//b29v/8/Pz//f39//39 + /f/9/f3//v7+//7+/v/+/v7///////////////////////////////////////////////////////// + /////////////////////////////////2////9v//////////////////////////////////////// + /////////////////////////////////////////////////////////f39//Dw8P+6urr/jo6O/5GR + kf+dnZ3/vr6+/9bW1v/r6+v/7+/v//r6+v/9/f3//f39//b29v/q6ur/1dXV/8DAwP+kpKT/enp6/11d + Xf9XV1f/k5OT/9TU1P/6+vr//f39//39/f/+/v7//v7+//////////////////////////////////// + //////////////////////////////////////////////////////9v////b/////////////////// + /////////////////////////////////////////////////////////////////////////////+Hh + 4f+jo6P/ycnJ/+7u7v/4+Pj//Pz8//7+/v/9/f3//Pz8//7+/v/8/Pz//f39//39/f/+/v7//v7+//7+ + /v/+/v7//v7+//n5+f/w8PD/zc3N/4iIiP9aWlr/kZGR//v7+//+/v7//Pz8//////////////////// + ////////////////////////////////////////////////////////////////////////////b/// + /2////////////////////////////////////////////////////////////////////////////// + ///////////////////z8/P/+vr6//39/f/9/f3//f39//39/f/9/f3//f39//z8/P/8/Pz//Pz8//39 + /f/+/v7//v7+//7+/v/+/v7//f39//7+/v/8/Pz//v7+//7+/v/7+/v/19fX/2lpaf/39/f//Pz8//7+ + /v/+/v7///////////////////////////////////////////////////////////////////////// + /////////////////2////9v//////////////////////////////////////////////////////// + /////////////////////////////////////////v7+//7+/v/9/f3//v7+//39/f/8/Pz//v7+//39 + /f/9/f3/9fX1/+rq6v/9/f3//f39//39/f/9/f3//v7+//7+/v/+/v7//f39//7+/v/+/v7//f39//Hx + 8f94eHj/9vb2//39/f/9/f3///////////////////////////////////////////////////////// + //////////////////////////////////////9v////b/////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///+/v7/+/v7//39/f/+/v7/9fX1/8LCwv/6+vr//f39///////8/Pz//f39//39/f/9/f3//f39//7+ + /v/////////////////x8fH/eHh4//j4+P/+/v7//v7+//////////////////////////////////// + ////////////////////////////////////////////////////////////b////2////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////v7+//39/f/9/f3//Pz8/9LS0v/Hx8f//v7+//7+/v/+/v7//v7+//z8 + /P/7+/v//f39//7+/v/+/v7/////////////////8fHx/3h4eP/4+Pj//v7+//7+/v////////////// + //////////////////////////////////////////////////////////////////////////////// + /2////9v//////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////7+/v/8/Pz//v7+//39/f+goKD/jo6O/6Wl + pf+kpKT/p6en/6ampv+srKz//Pz8//7+/v/9/f3//f39//////////////////Hx8f94eHj/+Pj4//7+ + /v/+/v7///////////////////////////////////////////////////////////////////////// + //////////////////////9v////b/////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////+/v7//f39//7+ + /v/8/Pz/0NDQ/7a2tv+3t7f/tra2/7a2tv+2tbb/vr2+//v7+//8/Pz//v7+//7+/v////////7////+ + /v/x8vH/eHh3//j4+P/+/v7//v7+//////////////////////////////////////////////////// + ////////////////////////////////////////////b////2////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////v7+//z8/f/9/fr//f74//39+//+/f7//v7///7+/v/+/P3//vz///77/v/9/vX//v/3//79 + /f/+/f7////////9/////f7/8fLt/3h4d//4+Pj//v7+//7+/v////////////////////////////// + /////////////////////////////////////////////////////////////////2////9v//////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////79/v/8/fz/9/rp/9vexf/5+e3//v79///9/////v7///7+///8 + /v/+/Pn/4OTG//T63f/+/vn//v3+/////v///P////39//Hy7P94eHb/+Pj4//7+/v/+/v7///////// + //////////////////////////////////////////////////////////////////////////////// + //////9v////b/////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////+/v7//f33/73Enf9te0H/ytGt///+ + +P///f///v7///7//v/+/vr/3uLH/29+QP+msoD//P7u///+/P////7//v3+//79/v/x8vD/eHh3//j4 + +P/+/v7//v7+//////////////////////////////////////////////////////////////////// + ////////////////////////////b////2////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////v7+//j6 + 7f+YqGz/aoIx/5uqdP/8/vH//vz///39///8//7//P71/7K9kP9pgTD/iZ1a//D03v/+//z////9//7+ + /v/9/f//8PHx/3h4eP/4+Pj//v7+//7+/v////////////////////////////////////////////// + /////////////////////////////////////////////////2////9v//////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////7+/v/1+e3/iaBk/2+OPf+OpW7/9v3u//7+///+/v7//P7+//f+8/+ft4P/cJBB/4Gb + XP/l7tj/+/78//7//f////z///7+//Hx8f93d3f/+Pj4//7+/v/+/v7///////////////////////// + //////////////////////////////////////////////////////////////////////9v////b/// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////8/v7/8vv0/5q2iv9ukFb/nbOP//n/9//+//7////+//3+ + /v/3/vr/rMak/3GSW/+MqHz/5/Tn//j9/v/9/v3////7////+//y8vH/eHd3//j4+P/+/v7//v7+//7+ + /v////////////////////////////////////////////////////////////////////////////// + ////////////b////2////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////P7+//T++//E28X/h6OF/8zf + y//5//r//v7+///+/v/+/v7/+P7+/9vw4v+Gn4b/ucy5//H79//5/v7//f7+///+/P////v/8vHu/3d2 + dv/5+fn//v7+//7+/v/+/v7///////////////////////////////////////////////////////// + /////////////////////////////////2////9v//////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////3+ + /v/6/v3/8fz3/+Hx6P/y/fX/+/76///9/v///P///f3+//n//P/0/vn/4u7p//L69//4/v3/+v79//3+ + /////v7///79//Ly7/94eHf/+fn5//7+/v/9/f3//v7+//////////////////////////////////// + //////////////////////////////////////////////////////9v////b/////////////////// + //////////////////////////////////////////////////////7////+///+/v///v////7+//7/ + /v/+/v7//v7////+/////v7//vz9//v8/v/3/v3/9/33//3++v//+/7//vr///z+/f/5//f/+/74//z8 + /v/7+/3//P75//3/+f/+/v7//vz///79/v/y8fH/eHh4//f39//+/v7//v7+//7+/v////7///7+///+ + ////////////////////////////////////////////////////////////////////////////b/// + /2////////////////////////7////+/////////////////v/+/v3//v/+/////v////7//v/8//7/ + +//+/f3//vv///3+/P/7//j/+/79//z8///+/f///v3+///6/f/+/P//+fv6//v++P/+/fv///r+//76 + ///6/fv/+f/1//7++P/9+v3//fn9//79/P/9//v//f78//z9/f/6+/z/9Pf2/66zr//5+vv//f3+//7+ + /P/+//v//v75//7++//+/f////7+//////////////////////////////////////////////////// + /////////////////2////9v///////////////////////+/////v////////////////7//f79//39 + /P/8/fz//v79//z9+//8/fr//f38//75///+/Pz//P71//r9+v/7+v///vz+//78/f/8+/z/+Pj3//Ly + 7v/t7On/6Obm/+bj5v/l4+X/4+Tj/+Pl4P/l5uH/6ujp//Ds8f/18vj/9/j7//v9+//8/vv//P79//n7 + +//4+/n//Pr+//r6/P/9/vr//P35//79/P/9+/3//vv///79/v////////////////////////////// + //////////////////////////////////////9v////b/////////////////////////////////// + //////////////z8/P/9/f3//fz9//7+/v/8/v3/9/v6//39/P/+9/3/9u/0/+nm3f/b2sX/xcWt/6in + jP+Wl3P/gYdd/3Z8Tv9sc0P/Zms7/2JkOf9fYTr/X2E5/11jNf9fZDP/YGU1/2JmO/9naUP/bXBN/3d6 + WP+FiWn/l5h//7KxoP/NzMD/4eDZ/+7p7f/5+Pb//f37//z8/v/8+/7//fr+//7+/f/+/vr////+//// + ////////////////////////////////////////////////////////////b////2////////////// + ///////////+/////v/////////////+///+/f7//fz+//38/v/8/P3/8/b0/+Dm4v/AwL3/oJmK/4N6 + YP9zbkL/am0q/2t2Hf9vexX/dYQR/3uKDv9+jw3/g5QN/4WVCv+FlQv/hpUM/4aWDf+Glg3/h5cM/4aX + C/+Hlw3/gZIK/3uLCP94hQr/c3wP/21wF/9gXxj/Wlcd/1laLf9mYVL/hYJ+/6Oio//Nz9P/6u3w//j5 + +v/+/vj////0/////f////////////////////////////////////////////////////////////// + /2////9v/////////////////////////v////7//////////////v///Pv9//X09v/T0tP/nZye/4uN + jv+Tlpj/t7as/6u3Yv+Bkw7/i5wN/4ueCv+LoQb/jaEF/42gBP+OngT/kaAE/5GgAv+SoQH/k6IA/5Oi + AP+UogD/laIA/5WhAf+WogL/lKEC/5KfAf+SoAP/kqAF/5KgBv+Rngj/kp4L/42cDf+Hmhn/jZpE/7a1 + of+Hh4b/Wl9b/01TUv97fYD/tLO0/+jm5P////7///////////////////////////////////////// + //////////////////////9v////b/39/f/9/f3//f39//39/f/9/f3//f79//7+/v/19Pb/y8rM/6Gg + ov+Xlpj/pqam/+Xl5P/29fb/+/r7//v85P+aqzT/jKMC/5ChAP+QnwP/kKAD/4+gAv+NoAD/iaIA/4mi + AP+JoQD/iqEB/4uhAf+NpAL/i6EA/46jAv+OogH/j6QA/4+lAf+OowL/jKEC/42hA/+LoQL/i6MA/4yl + AP+NpwD/jKkA/5CqGf/s8MT//Pr6//X49v/g5uL/rrGw/3h4dv9aVVz/bm1u/66urv/g4OD/+vr6//7+ + /v/9/f3//Pz8//7+/v/9/f3//v7+////////////////b////2/9/f3//Pz8//39/f/+/v7/+fn5/97f + 3v+2tbb/mZiZ/7a1t//e3d7/9PT1//3+/P/9/vr//v78//7+8v/Y4Jv/iqAP/4yjAP+RowD/kaIB/4+h + Av+OnwH/i58A/4igBP+GoAT/hqEC/4ShAP+FowD/hKMA/4mkAP+GnwL/iKAD/4mjAf+JpQD/i6cA/4uo + AP+KpAD/iaIA/4qiAP+MpAL/jqYD/46mAf+MpQ3/xtJ8//397v/7+v3/+/75//v+9//3+PH/5OLj/7Oz + s/98fHz/W1tb/39/f//FxcX/7+/v//z8/P/+/v7//Pz8//7+/v///////////////2////9v/f39//39 + /f/19fX/2NjY/6qqqv+vsK7/z8/P//n4+f/8+/3//fz9//7+/f/9/fn//f74//7/8f/r8L//nK48/4ig + Bv+OowT/jqMB/4ykAP+KogD/iqIA/4mhAP+HoQL/hp8D/4WgBf+CoAP/g6IG/4enCf+Iowv/iaER/4if + Ef+GoAb/iaYD/4imAf+IpQD/iqUA/4qjAP+KowD/jKUA/4+mAf+PpQP/i6IK/5StJ//d56f//v70//3+ + +P/8/vf//vz9//37/f/8/P3/+Pj4/9XV1f+ZmZn/W1tb/2xsbP+wsLD/6Ojo//r6+v/+/v7///////// + //////9v////b/7+/v/v7+//oaGh/7m5uf/x8fD//f79//z8/P/9/P3//fz9//39/f/9/fr//v/5//3/ + 9v/q8cf/nLBA/4ikC/+JogL/jKMB/4ulAf+HpAL/haMB/4ejAP+FowD/gqMB/4GdD/+NojH/t8Zr/8zX + i//V35n/1eCW/9ffm//S2pT/t8Rr/5SoO/+CnBj/g6EK/4OiAv+EpAD/haQA/4ilAP+KpwH/jaYA/42m + CP+Jpwv/la41/+Xut//+/vT//v77//38/f/8+/7//f3+//39/f/8/Pz//Pz8//f39/+0tLT/Z2dn/1FR + Uf+5ubn//v7+////////////////b//+/2///vz/2+PD//H11//9/PL//vz9//77/v/9/f3//v79//79 + /v/+/v3//v70//3/4f/f6q7/kKU6/4OjBv+JqQD/iaYA/4mmAP+IpQH/g6MC/4KkAv+Eowj/g6AX/6S7 + U//e6aj/+f3b//7+8P/+/vn/7e/X/4KJUf/a3bT//v7v//7+8P/8/eX/4em4/66/bf+DoCT/faMG/3+l + AP+CpQP/hqYG/4mnA/+HpQf/hqQL/4amEv+KozH/2+Ws//v94v/+/vX//v3+//79/v/9/f3//v3+//79 + /f/+/f7//v36//n85/+mr43/ioqF//39/f///////////////2///v9v//32/6GzYv+it1L/2eCk/+7x + zP/5/OD///7p////7P/8/uj/8fbV/9/orf+svl3/jacj/4ekDf+Ipwb/iqgI/4qnCP+JqAX/iKgF/4On + Af+BpAn/lK00/9XhmP/4+uD//v74//v++//8/Pr/9vfl/5igV/9oeQf/jpZA/+/u0//+/vn//Pz2//79 + +//6++v/2+Wr/5ayPP+DqA//gaYG/4WmCv+IqQ7/iaoP/4moFf+JqhT/iKoY/46oM/+zxXH/2eSu/+/0 + 2f/8/ur//v7v//7+9P/8/uz/8/ja/9vntv+owWn/e5U7/42Ogf/9/f3///////////////9v//3/b/7+ + 8v+gulH/f6QN/4ajG/+WrzT/orlO/6q6Zf+uvHP/p7ll/5eyRP+KrCL/hqkQ/4imDv+GpAz/hqcJ/4mp + Dv+JpxH/iqcT/4irCP+CqAj/mrU9/+PrsP/+/e7//v34//78/v/+/P7/+/vx/7a9gP9tfQz/bXwB/214 + DP+eomH/+Pjq//398//+/vv//v38//799//u9Mv/obhT/4WmGv+EqA3/haoR/4aqFv+IqRv/iKwX/4it + Fv+HqyH/hKcm/4erMv+Xs1L/p8Bq/7LGff+uv4H/qb5x/5u5VP+HrDP/fqkc/3SWJf+Wl4j//f39//// + ////////////b//7/2///fX/rMRi/36mCP+Bpgf/iKkS/4emGP+GpRz/hqYf/4apHP+FqRb/h60T/4ms + EP+MqxP/iqoU/4eqE/+Iqhb/hqgU/4aoGP+GqhX/jqo1/+3yw//+/fb//Pj9//r7/f/8/f3//vv7/9fZ + rf95hhr/cYIA/3aDAP9zgAL/d4MW/8nPl//+/Pn//fv8//z8/P/7+/3//fv8/+/y1f+dsVP/g6gS/4Gq + Ev+FrBv/h6sj/4WqIP+DqCL/ia4t/4WuJv+Aqxz/h64w/4KoMP+CqS7/gaku/4OuKP+FsCv/ha4u/4Kr + Kv9wkC3/m56Q//7+/v///////////////2//+/9v//34/7/Sgf9+nxj/hKYY/42sJP+MqyP/iKgc/4er + Gf+CqBX/gaYX/4iqH/+IqCD/h6Yf/4urIf+HrB7/haob/4SrGf+DpyL/jao//9zotv/+/Pv//fr9//v8 + /P/5/fz//f71//Dw1P+Nlzf/fowF/4CJAf+BiAL/f4gA/3uIBP97iB7/6eXL///+9//9/vz/+P37//r9 + /v/7/Pj/7fXJ/5q2TP+AqyL/gq4l/4WtK/+Dqiv/g6g0/4SmOv+ErDH/gKwn/4OqNf+CqjT/hK01/4Ww + Nv+CrzH/gaw1/4GoO/+Apjj/aIUv/6qwnf/+/v3///////////////9v//79b//+9P/O4Jf/f6Ij/4is + Iv+KrCj/iKoq/4msKP+EqiP/g6oi/4WsJv+Dqyf/g6km/4arKf+Iryr/hrAp/4KsJf+FrCn/hqg4/73O + j//8/u7//f39//v8/f/6/fz/+/37//397/+zvGv/gIwS/4ePCf+Kjgn/h4wI/4iPBv+EjwP/gY0M/6iv + Wv/5+eL//P34//j++v/4/vz/+/76//3/8P/T3rD/gaY+/3+sL/+Ari//fqst/36pM/+Bqjr/gq8z/36u + Kf9+qjT/g682/4GsO/+Bq0D/g65C/4KtQf9/qD3/gKg8/2iFNf+6wrD//v7+////////////////b//+ + /W///vb/3euz/32gL/+ErSf/iLAw/4iuN/+JsDX/h7Ey/3+pK/+AqS7/gqsy/4GsMP+Arir/gK4q/4Gt + Mf+BqzP/h6w9/5e2V//r887//f73//3+/v/6/Pz//P78//79+P/l5r//iZUm/4mREf+PkhP/kpUR/42T + Dv+NlAv/jZcG/4uVC/+Hkxv/19in//388//8/v3/+fz+//v9/v/8/Pv/9fjr/527c/9+qjn/e60x/3ut + Mv9+rjf/faw5/3+wN/9/sTT/gbA+/4CxO/9/rkD/hLJI/4KyRv+BsET/ga5D/4SqSf9kfz3/0tjL//7+ + /v///////////////2/+/P9v/v38/+nu0P+Cokj/hK04/4WvO/+Frj//hK09/4WvPv+CrTr/f6s4/4Ct + Of+EsTz/g7I5/36tNf+BrDv/hK1D/4esS/+604n/+/7m//79/f/9+////f78//7++P/7++z/sbZn/5KZ + JP+Wmh3/mZsf/5meHP+UnBb/k5sV/5eeEv+XnBX/j5ka/6WrVf/089z//vv+//78///7/P3//P3+//v8 + +//C2Kr/fapD/3uuOv96rT3/fa9B/3utQf99rkP/fq1D/4CtSv9+rkf/f65O/3+vTv+Bs0v/grZJ/4Ky + R/+FrE//Zn1G/+3y6v/+/v7///////////////9v/fz/b/v9/f/u9eD/lrVq/4WvRv+Er0T/hK9E/4Sv + RP+Er0T/hbFD/4ayQv+EsUH/hLFD/4OuRf+Aq0T/g7BD/4WwRP+Epk//2+rA//7+9v/9+v///vr///79 + /f/+/vX/5uW7/5qiOf+coSj/oaIq/56hJv+ZoSH/m6Mj/5yiJP+eoST/oqIk/5mfIv+YoTT/ztCa///9 + +P///f7////6//z9+//7/f3/4fHW/4KuT/98rkP/fa5L/3+yTP99sUj/fbBM/3+vTf9/sE3/eK1H/3+z + U/98sVD/fLNN/32yTP+Ds1L/fqNU/3SIXv/5/Pr//v7+////////////////b/3+/W/8/v3/9/3v/6vG + h/+CsEv/g7NL/4GwSf+Es0r/hrRL/4OyRv+CskT/grFG/4GvSP+Ar03/f7BN/32wRv+Gskz/j61h/+/0 + 4//9/f3//vz+//77///+/f3/+fnh/7a4bP+jpzn/p6cu/6moMv+lqTP/nKM1/6muSP+jpzn/pqkz/6Wn + L/+nqzH/oac2/6uyWP/19tb///38//7++//+/vr//Pz9//f+8v+OtWb/e7FL/3yzU/9+tVX/fbNN/32z + Tf96skz/erRL/361TP9/tlL/e7VQ/3izTf97tlD/gbJX/3eaV/+ZqIv//v3+//7+/v////////////// + /2////tv/v39//z++v/A1an/gq5U/4G1UP9/s1L/g7VU/4a2U/9/r0v/gLBM/4KzT/99sk7/frNR/3u0 + Uf98tVL/g69Y/524df/0+Oj//f77//z+/v/9+v7//vz4/+TmuP+nqkn/r65D/7KsPf+vrzr/p6w+/6qt + XP/x8Lf/vLxp/6mvOv+srj3/ra46/62vPf+rskX/2duk///8+//+/f3//v78//78/v/7/fn/nMCB/3iy + Uf91tVP/eLJY/32zVv9+tFP/drNQ/3SzT/98s1L/fbVa/3q1XP93tlj/d7dU/3yyWP9zllj/xM24//77 + /f///v////////////////9v//79b//+/v/8/vr/4fPR/4WuX/+DtFb/g7Nb/4O0W/+EtVn/hLZX/4S2 + Vv+BtVT/f7RU/4C1Vv9+tlb/fLdY/4CzXf+cv3z/8/np//7+/P/7/f7//P3+//z87f/Fxo7/tLNY/7u3 + T/+9t03/tbVJ/6+1U//X2J///v7t/+Lgsv+vslT/tLRJ/7i1Q/+5t0b/srRL/7y7ff/7+u3//v78//v+ + +v/6/v7/+v75/6XJjf98tln/d7ZZ/3i0Xf98s1z/frRb/3mzWv92tFr/fLhf/3i2YP91tWL/dbdj/3a2 + Yv9+smr/dZVm/+Lr3v//+/////7/////////////////b//+/2/+/v7//P75//X87f+UuHr/g7Nb/4K1 + XP9/tFv/f7Rb/3+1XP+AuGD/g7pj/4a7Zf+EuGP/grhi/324X/94tGD/lMJ+//D55//+/f3/+/z///r+ + +//v8NH/wsF+/8G9Zv/CvV3/wLxX/76/YP/Fx4X/+/rm///8/v/9++7/0dCb/725YP+/ulH/wr5Q/766 + Wv+5tW//5uTF//7+9//5//f/9//8//b/9v+hxov/erRe/3W2X/90tWL/ebZi/3m0Yv92s2P/dLVi/3C3 + Yv9wuWT/cbpn/3O4af93tG//fKl1/5Krjf/3/ff//fr9///+/////////////////2///f9v/v3+//3+ + +v/2/vX/u9Ss/4SyYv+AuF3/fLhd/3+8Y/99vGb/eLhl/3u5af+Bu2//f7ht/4K5bP+Aumn/d7pp/4K6 + dP/o9uH//v39//z7/v/9/vf/3+Cw/8bBd//Gwm3/xMJn/8XDav/LyYf/8vDU///9/P/+/f7//v78//b0 + 4v/PyY7/w79q/8rGZf/Lw2z/yMJ0/9jVov/9/e//+/74//j+/f/x//H/j7h+/3ezYv9zuGT/cLll/3K7 + Zf9wt2T/crdo/3S8av9xvGn/c79r/3W+bP94unD/frV6/3OZcv/L3cn/+v33//79+////v7///////// + //////9v//3/b//9/v/+/vz/+Pz7/+f34P+PuHj/gLhp/3y3aP96uGz/fLtx/3m5b/92tmz/eLlu/3y8 + cf98uG7/fLds/3O7bv93tXH/1OzP//3++//++v7/+/zv/9TTmv/TzID/0tB+/8zNe//Sz5H/7+vP///+ + +P///v7//P79//z+/v/+/vr/9fLW/8vKj//Lynz/zsl9/9HNff/Sz5D/+/fi//39/P/3/f3/2/Pd/4O0 + eP92uGr/bLlm/2y+af9nu2P/a7pn/265bP9yu23/erx2/3q4c/9/u3f/ir6E/5G4j/+QqJH/7vfv//3+ + +v///vz///7+////////////////b//+/m///v7//v3+//v8/v/3//X/uNWt/424hv+Muof/irqH/4i7 + hf+CuX7/f7t6/3y7df95u2//e7pw/3q4cf9xu3P/crZz/7LUr//4/vX//fz9//P03//Y1pz/2dKL/9PV + if/Pz5b/6+nL//799P///v7//v7+//z//P/7//v//f77//7+9f/u7tD/1NWf/9XSl//b2JH/1tOS//Tx + 1v/+/P3/9fz7/7/ixP98tnn/cLlw/2m7bv9qwW3/Zrxo/2q5bf9zuXX/e7p5/5C9kP+y2LH/yurH/9jx + 1/+/08H/x9HL//v9/v///f7///z+///+/v///////////////2////xv//7+///7///9/P7/+v75//D9 + 8P/q/u3/6f3s/+P35f/Z8dn/yObH/6zUqP+LvYb/g7t8/327eP95vXn/cr16/3K7ev+OwJL/4/bh//r+ + +P/r7NH/2dah/9vWm//T2J7/6+nT//79+P/+/vn//v7+//79///+/vz//v/5//7//f/8/Pv////2//Hz + 1v/d27T/2dai/9rYoP/k48P//f34/+779f+UzaD/dr5//2y7eP9pvXj/Z79z/22+df94uYH/jL6R/8bp + xf/u/+//8/70//T+9f/z+/X/uL26//f4+v/9+/////v////8/////v////////////////9v///4b//9 + /P//+v///v3+//z++v/7/vz/+//7//r++//7/vz//P38//r++f/z/vL/5/vo/7rbvP+Jvo//eMKC/3PC + gv91woT/fLuF/7feuf/0/vD/4+bG/9rZqf/g3bj/8/Xd//7+/P/8/f7/+/77//z9/f/+/P////79///+ + /P///f7//v79//7+/f/+/vn/+fjo/+TfxP/Y2a3/2+K6//T67P/L6M7/c7+I/2/EhP9rwIH/ab2C/23A + gP93uoT/st6+/+r88P/2/vP/+/75//z9/P/9+/3/3Nfc/+Tg4//8/Pz//v79//3+/v/8/P7//v7+//// + ////////////b///+W///v3///v////9/v/+/v3//v7+//7+/v///f7///z+///8/v/+/f7//f7+//f/ + /P/x/fj/1PDa/53Tpf92vYr/csSK/3fCiP+Hx5b/0/LX/9few//t7ND/+/ru//7++v/8/f3/+v79//r+ + /v/8/v7///7////+/v///v7///7+//7++//+/f///fz+//79+v/8+/H/7O/V/9Tlwf/X8Nb/msuk/2/F + jf9mxYb/YsGG/2e8hv98vY7/vObE/+n98v/3/v3//vz9//79/P/+/P3/7+zv/9bR1f/+/f3//v78//7+ + +//9//z//f7+//7+/v///////////////2////5v//7+///+/////v7////+///////+/v7//v7+//7+ + /v/+/v7///7///7////+//7//f/+//3/+//p+On/pde5/3PCkv9yxo7/bMWN/5PSqP/e8t3/+vz5//n9 + /f/5/fz/+v79//z+/f/9/v7//v7+///+/v/9/v7//f/8//3//P/+/v3//fz9//78/v/+/P7//v38//X/ + 9f/a+eL/ntex/3bElf9ox5L/Z8uT/2DFjf9ywpP/td7A//X+9P/2/vv/+f7+//79/v/+/f3/+Pj4/9PT + 0//19PT//////////v////7////+//////////////////////////9v////b/////////////////// + /////////v7+//7+/v/+/v7//v7+///////////////////////+/v7/+f36/+L67v+Tz6v/cMWU/2zJ + lP92xZf/ns+w/9/67v/p/vn/9v79//j9/f/8/v7//v3+//79/v///v////7///3+/v/7//7/+P79//7+ + /f//+/7//vz9//r8+P/j/fD/ntq+/3HJoP9ky5z/ZcmZ/2PIl/9qxpj/nd27/+f+8P/4/fr/+v7+//v+ + /v/+/f7//v39/+Dg4P/t7e3//Pz8////////////////////////////////////////////////b/// + /2///////////////////////////////////////////////////////////////////////v3///39 + /v/4/vz/1PPg/3/MqP9sy53/ZsiZ/3PHnP+IzKr/vOrW//L9+P/8/vz//v39///9/v///P7///3////9 + ///8/v//+//+//z//P/+/vr//P35//H/9//L8eP/i9G4/2/OrP9l0Kj/YM6k/2XOpf9pzKX/hc+w/9P3 + 5//2//v//v3+//78/v/9/P7/+v39/+bm5v/t7e3//Pz8//v7+//+/v7///////////////////////// + /////////////////2////9v//////////////////////7+/v/+/v7//v7+//7+/v/+/v7//v7+//// + //////////////79///9/P///v39//X++P+q48v/b8un/1/NoP9ky5//bs2i/3TJpP+a0r3/w+3f/9/7 + 8//t/vr/9f78//n+/f/7/v7/+v79//j//f/z//r/6Pz0/87y5v+k483/ec+z/2rSsv9k1LH/Z9Wy/2nU + sP9m0q7/b82v/6jhzv/w/vr//v3+//77////+/7/+/v8/+Lq6P/q6+v/+/v7//z8/P/9/f3//v7+//// + //////////////////////////////////////9v////b//////////////////////+/v7//v7+//7+ + /v/+/v7//v7+//7+/v/////////////////+/v7//v3+///8/f/9/vv/1/fp/4HVuf9fz6n/ZNGp/2bR + qP9gzqX/Ysqm/23Lq/+B07f/nuHK/7Xt2/++8N//x/Tl/8bz5P+97t//rePW/5XZxv97z7f/btGz/2jV + s/9j07L/ZNW0/2XWuP9j1Lb/ZNaz/3fRt//K9On/+f7+///7/v///P///fn7/+3t7P/n7+3//f7+//7+ + /v/+/v7//v7+//7+/v//////////////////////////////////////////b////2////////////// + ///////////////////////////////////////////////////////////+//3+/f/9/v3///78//T+ + +f+Z38z/Ys2w/2TSsf9j1LD/XNOr/1jRpv9az6b/Xs2n/2HKp/9ozK3/aMqs/2jMrv9ozrD/Z86y/2fO + tv9gz7X/WdGz/1vUtP9h1rb/ZtW3/2TVuP9g1rr/XNe6/2DXt/+M38n/3fv2//v8/f/++v3//Pr7/+zq + 6P/29vP/+P78//3///////////////////////////////////////////////////////////////// + /2////9v///////////////////////////////////////////////////////////////////////+ + /v/9/f3/+v/+///+/f/6/vv/u/Dj/27PuP9h07f/XNW0/1nTsP9X0qn/WtSs/1bPqf9Y0a3/WtKx/1jR + sP9Y1LP/V9Wz/1XUtP9V1bn/UNS4/07VuP9R17j/V9a4/17Wuv9c07n/WtO6/1jXvf9f2L3/mePU/+f+ + /P/9/v////3+/+np5v/5+vb//f38//z8/f///v////////////////////////////////////////// + //////////////////////9v////b/////////////////////////////////////////////////// + /////////////////////v///v3+//j+/v/9/f3/+/79/9P27/930Lz/V9S3/1bXuP9Y1bX/V9Wy/1TS + sP9T0rP/U9O1/1TUt/9U1Lf/VdW4/1fWuf9X17n/UtW5/1TWu/9X2b//Vtm//1TYv/9W2cD/U9a+/1XX + vv9Y2cD/XdfA/6Pj2//j9ff/6ezu/+/x8P/8/vr/+v36//r6/P/++v7///7///////////////////// + ////////////////////////////////////////////b////2////////////////////////////// + //////////////////////////////////////////7///78/v/6/v7/+/z8//X+/f/Z+PT/g9bE/1rY + vf9S2bz/Uta5/1TVuP9Q0bf/T9O5/07UvP9N1b3/Tta+/1DXwP9S18D/U9i//1HYv/9U2L//VtfB/1fZ + w/9U2sT/UdvF/1Haw/9V2cP/X9jE/33Zyv+14t3/6Pb4//f7/P/8/v7//P78//v+/f/8/P7///v////+ + /////////////////////////////////////////////////////////////////2////9v//////// + //////////////////////////////////////////////////////////////7+///+/v////////3/ + /v/z//7/2/r3/5rb0f9z1sX/XdfC/0/Uvf9O1Lz/TdS9/07Ywf9I1b//SNfB/0zZxP9O2cb/T9jF/0/Y + xv9L2MT/TNnF/07axv9P2sb/VNnH/1/byv9o2Mn/eNvO/5rp3v/Y9vH/8f79//f+/v/8/v7//v7+//// + /v///////v7///3+//////////////////////////////////////////////////////////////// + //////9v////b/////////////////////////////////////////////////////////////////// + ///9/////P////7+/////v///f7+//T+/f/k/vv/yfby/6rp4P+M49T/advH/17Wwv9X07//WNfE/1XY + xP9V2sf/VNnI/1XZyP9X28n/V9vI/1jax/9b2MX/advK/4Pk1f+l6uH/yPPv/+b8/P/y/f7/9f79//f+ + /v/6/v7//f7+//7+/v////////////7////9//////////////////////////////////////////// + ////////////////////////////b////2////////////////////////////////////////////// + /////////////////////////P/+//v//v/+/v////7////+///+/f7//P3+//f9/f/y/v7/7P79/+T9 + +v/b/Pf/yvTu/73x6/+q6OH/oOXd/5jl3f+W5t//n+fg/7zs5v/N9fD/2fv3/+T9+//t/v3/9P79//n9 + /f/8/v7//P7+//r+/v/6/v7//P39//7+/v/+/v7////////////+/////f////////////////////// + /////////////////////////////////////////////////2////9v//////////////////////// + //////////////////////////////////////////////7+/v/8/v7//v7+///+/////v////7+//79 + /v/+/v7//P7+//r9/f/7/v7/+f7+//f+/v/z/f3/8v7+//D+/v/v/f7/8P7+//H+/v/z//7/9P/+//X/ + /f/3/v7/+P39//v//v/7/v3//P7+//z+/v/8/v7//f7+//7+/v/+/v7//v7+/////////////v////3/ + //////////////////////////////////////////////////////////////////////9v////b/// + ///////////////////////////////////////////////////////////////////+/v7//v7+//7+ + /v///////f////z////7/v7/+/7+//v////7/v7//f7+//z+/v/8/v7/+/7+//z+///8/v///f7///3+ + ///9/v///P/+//3//v/9//7//f7+//3+/f/9/v7//f79//7+/v/9/v3//v7+/////////v7///7+//// + //////////////7////9//////////////////////////////////////////////////////////// + ////////////b////2////////////////////////////////////////////////////////////// + //////////////////////////////z////8/////P////3////9/////v7////+/////v///v7///7+ + ///9/////P////z////8////+/////r//v/8//7//v7+///+/v///f7///3+///+/v/9//7//P/+//// + ///////////////////////////////////+/////v////////////////////////////////////// + /////////////////////////////////28AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + + + \ No newline at end of file diff --git a/src/Vinesauce ROM Corruptor/Vinesauce ROM Corruptor.csproj b/src/Vinesauce ROM Corruptor/Vinesauce ROM Corruptor.csproj index 11c1930..81296d6 100644 --- a/src/Vinesauce ROM Corruptor/Vinesauce ROM Corruptor.csproj +++ b/src/Vinesauce ROM Corruptor/Vinesauce ROM Corruptor.csproj @@ -50,6 +50,7 @@ + Form @@ -64,6 +65,12 @@ + + Form + + + QueueForm.cs + HotkeyForm.cs @@ -81,6 +88,9 @@ Resources.resx True + + QueueForm.cs + SettingsSingleFileGenerator Settings.Designer.cs