mirror of
https://github.com/kwsch/PKHeX
synced 2024-11-15 00:37:11 +00:00
Add Batch Editor (HaX)
= acts as a 'modify if' filter ! acts as a 'do not modify if' filter . acts as a 'set property to' to value !HeldItem=0 ^ do not modify if held item is zero =HeldItem=5 ^ only modify if held item is index 5 .Species=7 ^ set species to 7 !SID=666 .TID=666 ^ set TID to 666 if SID is not 666 .TID=666 !SID=666 ^ set TID to 666 if SID is not 666 (filtering can be after property settings) Run one 'batch modify' script at a time.
This commit is contained in:
parent
0c88954d26
commit
a1ac548485
7 changed files with 1259 additions and 590 deletions
24
MainWindow/Main.Designer.cs
generated
24
MainWindow/Main.Designer.cs
generated
|
@ -231,6 +231,7 @@
|
||||||
this.Menu_DumpBoxes = new System.Windows.Forms.ToolStripMenuItem();
|
this.Menu_DumpBoxes = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.Menu_Report = new System.Windows.Forms.ToolStripMenuItem();
|
this.Menu_Report = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.Menu_Database = new System.Windows.Forms.ToolStripMenuItem();
|
this.Menu_Database = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
|
this.Menu_BatchEditor = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.Menu_Other = new System.Windows.Forms.ToolStripMenuItem();
|
this.Menu_Other = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.Menu_OpenSDF = new System.Windows.Forms.ToolStripMenuItem();
|
this.Menu_OpenSDF = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.Menu_OpenSDB = new System.Windows.Forms.ToolStripMenuItem();
|
this.Menu_OpenSDB = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
|
@ -2782,7 +2783,8 @@
|
||||||
this.Menu_LoadBoxes,
|
this.Menu_LoadBoxes,
|
||||||
this.Menu_DumpBoxes,
|
this.Menu_DumpBoxes,
|
||||||
this.Menu_Report,
|
this.Menu_Report,
|
||||||
this.Menu_Database});
|
this.Menu_Database,
|
||||||
|
this.Menu_BatchEditor});
|
||||||
this.Menu_Data.Image = global::PKHeX.Properties.Resources.data;
|
this.Menu_Data.Image = global::PKHeX.Properties.Resources.data;
|
||||||
this.Menu_Data.Name = "Menu_Data";
|
this.Menu_Data.Name = "Menu_Data";
|
||||||
this.Menu_Data.Size = new System.Drawing.Size(152, 22);
|
this.Menu_Data.Size = new System.Drawing.Size(152, 22);
|
||||||
|
@ -2792,7 +2794,7 @@
|
||||||
//
|
//
|
||||||
this.Menu_LoadBoxes.Image = global::PKHeX.Properties.Resources.load;
|
this.Menu_LoadBoxes.Image = global::PKHeX.Properties.Resources.load;
|
||||||
this.Menu_LoadBoxes.Name = "Menu_LoadBoxes";
|
this.Menu_LoadBoxes.Name = "Menu_LoadBoxes";
|
||||||
this.Menu_LoadBoxes.Size = new System.Drawing.Size(151, 22);
|
this.Menu_LoadBoxes.Size = new System.Drawing.Size(152, 22);
|
||||||
this.Menu_LoadBoxes.Text = "Load Boxes";
|
this.Menu_LoadBoxes.Text = "Load Boxes";
|
||||||
this.Menu_LoadBoxes.Click += new System.EventHandler(this.mainMenuBoxLoad);
|
this.Menu_LoadBoxes.Click += new System.EventHandler(this.mainMenuBoxLoad);
|
||||||
//
|
//
|
||||||
|
@ -2800,7 +2802,7 @@
|
||||||
//
|
//
|
||||||
this.Menu_DumpBoxes.Image = global::PKHeX.Properties.Resources.dump;
|
this.Menu_DumpBoxes.Image = global::PKHeX.Properties.Resources.dump;
|
||||||
this.Menu_DumpBoxes.Name = "Menu_DumpBoxes";
|
this.Menu_DumpBoxes.Name = "Menu_DumpBoxes";
|
||||||
this.Menu_DumpBoxes.Size = new System.Drawing.Size(151, 22);
|
this.Menu_DumpBoxes.Size = new System.Drawing.Size(152, 22);
|
||||||
this.Menu_DumpBoxes.Text = "Dump Boxes";
|
this.Menu_DumpBoxes.Text = "Dump Boxes";
|
||||||
this.Menu_DumpBoxes.Click += new System.EventHandler(this.mainMenuBoxDump);
|
this.Menu_DumpBoxes.Click += new System.EventHandler(this.mainMenuBoxDump);
|
||||||
//
|
//
|
||||||
|
@ -2810,7 +2812,7 @@
|
||||||
this.Menu_Report.Name = "Menu_Report";
|
this.Menu_Report.Name = "Menu_Report";
|
||||||
this.Menu_Report.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.R)));
|
this.Menu_Report.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.R)));
|
||||||
this.Menu_Report.ShowShortcutKeys = false;
|
this.Menu_Report.ShowShortcutKeys = false;
|
||||||
this.Menu_Report.Size = new System.Drawing.Size(151, 22);
|
this.Menu_Report.Size = new System.Drawing.Size(152, 22);
|
||||||
this.Menu_Report.Text = "Box Data &Report";
|
this.Menu_Report.Text = "Box Data &Report";
|
||||||
this.Menu_Report.Click += new System.EventHandler(this.mainMenuBoxReport);
|
this.Menu_Report.Click += new System.EventHandler(this.mainMenuBoxReport);
|
||||||
//
|
//
|
||||||
|
@ -2820,10 +2822,21 @@
|
||||||
this.Menu_Database.Name = "Menu_Database";
|
this.Menu_Database.Name = "Menu_Database";
|
||||||
this.Menu_Database.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.D)));
|
this.Menu_Database.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.D)));
|
||||||
this.Menu_Database.ShowShortcutKeys = false;
|
this.Menu_Database.ShowShortcutKeys = false;
|
||||||
this.Menu_Database.Size = new System.Drawing.Size(151, 22);
|
this.Menu_Database.Size = new System.Drawing.Size(152, 22);
|
||||||
this.Menu_Database.Text = "PK6 &Database";
|
this.Menu_Database.Text = "PK6 &Database";
|
||||||
this.Menu_Database.Click += new System.EventHandler(this.mainMenuDatabase);
|
this.Menu_Database.Click += new System.EventHandler(this.mainMenuDatabase);
|
||||||
//
|
//
|
||||||
|
// Menu_BatchEditor
|
||||||
|
//
|
||||||
|
this.Menu_BatchEditor.Image = global::PKHeX.Properties.Resources.settings;
|
||||||
|
this.Menu_BatchEditor.Name = "Menu_BatchEditor";
|
||||||
|
this.Menu_BatchEditor.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.M)));
|
||||||
|
this.Menu_BatchEditor.ShowShortcutKeys = false;
|
||||||
|
this.Menu_BatchEditor.Size = new System.Drawing.Size(152, 22);
|
||||||
|
this.Menu_BatchEditor.Text = "Batch Editor";
|
||||||
|
this.Menu_BatchEditor.Visible = false;
|
||||||
|
this.Menu_BatchEditor.Click += new System.EventHandler(this.manMenuBatchEditor);
|
||||||
|
//
|
||||||
// Menu_Other
|
// Menu_Other
|
||||||
//
|
//
|
||||||
this.Menu_Other.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
this.Menu_Other.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||||
|
@ -4809,6 +4822,7 @@
|
||||||
private System.Windows.Forms.GroupBox GB_SAVtools;
|
private System.Windows.Forms.GroupBox GB_SAVtools;
|
||||||
private System.Windows.Forms.PictureBox PB_Mark1;
|
private System.Windows.Forms.PictureBox PB_Mark1;
|
||||||
private System.Windows.Forms.Button B_Pokeblocks;
|
private System.Windows.Forms.Button B_Pokeblocks;
|
||||||
|
private System.Windows.Forms.ToolStripMenuItem Menu_BatchEditor;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -94,6 +94,7 @@ namespace PKHeX
|
||||||
string[] args = Environment.GetCommandLineArgs();
|
string[] args = Environment.GetCommandLineArgs();
|
||||||
string filename = args.Length > 0 ? Path.GetFileNameWithoutExtension(args[0]).ToLower() : "";
|
string filename = args.Length > 0 ? Path.GetFileNameWithoutExtension(args[0]).ToLower() : "";
|
||||||
HaX = filename.IndexOf("hax", StringComparison.Ordinal) >= 0;
|
HaX = filename.IndexOf("hax", StringComparison.Ordinal) >= 0;
|
||||||
|
Menu_BatchEditor.Visible = HaX;
|
||||||
|
|
||||||
// Try and detect the language
|
// Try and detect the language
|
||||||
string lastTwoChars = filename.Length > 2 ? filename.Substring(filename.Length - 2) : "";
|
string lastTwoChars = filename.Length > 2 ? filename.Substring(filename.Length - 2) : "";
|
||||||
|
@ -340,6 +341,13 @@ namespace PKHeX
|
||||||
|
|
||||||
dumpBoxesToDB(path, dumptoboxes);
|
dumpBoxesToDB(path, dumptoboxes);
|
||||||
}
|
}
|
||||||
|
private void manMenuBatchEditor(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (!HaX) // no hotkey cheatin
|
||||||
|
return;
|
||||||
|
new BatchEditor().ShowDialog();
|
||||||
|
setPKXBoxes(); // refresh
|
||||||
|
}
|
||||||
// Misc Options
|
// Misc Options
|
||||||
private void clickShowdownImportPK6(object sender, EventArgs e)
|
private void clickShowdownImportPK6(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
|
|
1206
MainWindow/Main.resx
1206
MainWindow/Main.resx
File diff suppressed because it is too large
Load diff
10
PKHeX.csproj
10
PKHeX.csproj
|
@ -61,6 +61,7 @@
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="System" />
|
<Reference Include="System" />
|
||||||
<Reference Include="System.Core" />
|
<Reference Include="System.Core" />
|
||||||
|
<Reference Include="System.Data" />
|
||||||
<Reference Include="System.Web" />
|
<Reference Include="System.Web" />
|
||||||
<Reference Include="System.Drawing" />
|
<Reference Include="System.Drawing" />
|
||||||
<Reference Include="System.Windows.Forms" />
|
<Reference Include="System.Windows.Forms" />
|
||||||
|
@ -118,6 +119,12 @@
|
||||||
<Compile Include="Saves\SAV6.cs" />
|
<Compile Include="Saves\SAV6.cs" />
|
||||||
<Compile Include="Saves\SaveFile.cs" />
|
<Compile Include="Saves\SaveFile.cs" />
|
||||||
<Compile Include="MysteryGifts\WC6.cs" />
|
<Compile Include="MysteryGifts\WC6.cs" />
|
||||||
|
<Compile Include="Subforms\PKM Editors\BatchEditor.cs">
|
||||||
|
<SubType>Form</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Subforms\PKM Editors\BatchEditor.Designer.cs">
|
||||||
|
<DependentUpon>BatchEditor.cs</DependentUpon>
|
||||||
|
</Compile>
|
||||||
<Compile Include="Subforms\PKM Editors\Text.cs">
|
<Compile Include="Subforms\PKM Editors\Text.cs">
|
||||||
<SubType>Form</SubType>
|
<SubType>Form</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
@ -277,6 +284,9 @@
|
||||||
<DependentUpon>QR.cs</DependentUpon>
|
<DependentUpon>QR.cs</DependentUpon>
|
||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Include="Subforms\PKM Editors\BatchEditor.resx">
|
||||||
|
<DependentUpon>BatchEditor.cs</DependentUpon>
|
||||||
|
</EmbeddedResource>
|
||||||
<EmbeddedResource Include="Subforms\PKM Editors\Text.resx">
|
<EmbeddedResource Include="Subforms\PKM Editors\Text.resx">
|
||||||
<DependentUpon>Text.cs</DependentUpon>
|
<DependentUpon>Text.cs</DependentUpon>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
|
|
156
Subforms/PKM Editors/BatchEditor.Designer.cs
generated
Normal file
156
Subforms/PKM Editors/BatchEditor.Designer.cs
generated
Normal file
|
@ -0,0 +1,156 @@
|
||||||
|
namespace PKHeX
|
||||||
|
{
|
||||||
|
partial class BatchEditor
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Required designer variable.
|
||||||
|
/// </summary>
|
||||||
|
private System.ComponentModel.IContainer components = null;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Clean up any resources being used.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||||
|
protected override void Dispose(bool disposing)
|
||||||
|
{
|
||||||
|
if (disposing && (components != null))
|
||||||
|
{
|
||||||
|
components.Dispose();
|
||||||
|
}
|
||||||
|
base.Dispose(disposing);
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Windows Form Designer generated code
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Required method for Designer support - do not modify
|
||||||
|
/// the contents of this method with the code editor.
|
||||||
|
/// </summary>
|
||||||
|
private void InitializeComponent()
|
||||||
|
{
|
||||||
|
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(BatchEditor));
|
||||||
|
this.RB_SAV = new System.Windows.Forms.RadioButton();
|
||||||
|
this.RB_Path = new System.Windows.Forms.RadioButton();
|
||||||
|
this.FLP_RB = new System.Windows.Forms.FlowLayoutPanel();
|
||||||
|
this.TB_Folder = new System.Windows.Forms.TextBox();
|
||||||
|
this.RTB_Instructions = new System.Windows.Forms.RichTextBox();
|
||||||
|
this.B_Go = new System.Windows.Forms.Button();
|
||||||
|
this.PB_Show = new System.Windows.Forms.ProgressBar();
|
||||||
|
this.FLP_RB.SuspendLayout();
|
||||||
|
this.SuspendLayout();
|
||||||
|
//
|
||||||
|
// RB_SAV
|
||||||
|
//
|
||||||
|
this.RB_SAV.Anchor = System.Windows.Forms.AnchorStyles.Left;
|
||||||
|
this.RB_SAV.Appearance = System.Windows.Forms.Appearance.Button;
|
||||||
|
this.RB_SAV.AutoSize = true;
|
||||||
|
this.RB_SAV.Checked = true;
|
||||||
|
this.RB_SAV.Location = new System.Drawing.Point(0, 0);
|
||||||
|
this.RB_SAV.Margin = new System.Windows.Forms.Padding(0);
|
||||||
|
this.RB_SAV.Name = "RB_SAV";
|
||||||
|
this.RB_SAV.Size = new System.Drawing.Size(61, 23);
|
||||||
|
this.RB_SAV.TabIndex = 0;
|
||||||
|
this.RB_SAV.TabStop = true;
|
||||||
|
this.RB_SAV.Text = "Save File";
|
||||||
|
this.RB_SAV.UseVisualStyleBackColor = true;
|
||||||
|
this.RB_SAV.Click += new System.EventHandler(this.B_SAV_Click);
|
||||||
|
//
|
||||||
|
// RB_Path
|
||||||
|
//
|
||||||
|
this.RB_Path.Anchor = System.Windows.Forms.AnchorStyles.Left;
|
||||||
|
this.RB_Path.Appearance = System.Windows.Forms.Appearance.Button;
|
||||||
|
this.RB_Path.AutoSize = true;
|
||||||
|
this.RB_Path.Location = new System.Drawing.Point(61, 0);
|
||||||
|
this.RB_Path.Margin = new System.Windows.Forms.Padding(0);
|
||||||
|
this.RB_Path.Name = "RB_Path";
|
||||||
|
this.RB_Path.Size = new System.Drawing.Size(55, 23);
|
||||||
|
this.RB_Path.TabIndex = 1;
|
||||||
|
this.RB_Path.Text = "Folder...";
|
||||||
|
this.RB_Path.UseVisualStyleBackColor = true;
|
||||||
|
this.RB_Path.Click += new System.EventHandler(this.B_Open_Click);
|
||||||
|
//
|
||||||
|
// FLP_RB
|
||||||
|
//
|
||||||
|
this.FLP_RB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||||
|
| System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.FLP_RB.Controls.Add(this.RB_SAV);
|
||||||
|
this.FLP_RB.Controls.Add(this.RB_Path);
|
||||||
|
this.FLP_RB.Controls.Add(this.TB_Folder);
|
||||||
|
this.FLP_RB.Location = new System.Drawing.Point(12, 10);
|
||||||
|
this.FLP_RB.Name = "FLP_RB";
|
||||||
|
this.FLP_RB.Size = new System.Drawing.Size(260, 24);
|
||||||
|
this.FLP_RB.TabIndex = 2;
|
||||||
|
//
|
||||||
|
// TB_Folder
|
||||||
|
//
|
||||||
|
this.TB_Folder.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.TB_Folder.Location = new System.Drawing.Point(118, 2);
|
||||||
|
this.TB_Folder.Margin = new System.Windows.Forms.Padding(2);
|
||||||
|
this.TB_Folder.Name = "TB_Folder";
|
||||||
|
this.TB_Folder.ReadOnly = true;
|
||||||
|
this.TB_Folder.Size = new System.Drawing.Size(140, 20);
|
||||||
|
this.TB_Folder.TabIndex = 4;
|
||||||
|
this.TB_Folder.Visible = false;
|
||||||
|
//
|
||||||
|
// RTB_Instructions
|
||||||
|
//
|
||||||
|
this.RTB_Instructions.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
||||||
|
| System.Windows.Forms.AnchorStyles.Left)
|
||||||
|
| System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.RTB_Instructions.Location = new System.Drawing.Point(12, 68);
|
||||||
|
this.RTB_Instructions.Name = "RTB_Instructions";
|
||||||
|
this.RTB_Instructions.Size = new System.Drawing.Size(260, 181);
|
||||||
|
this.RTB_Instructions.TabIndex = 5;
|
||||||
|
this.RTB_Instructions.Text = "!HeldItem=0\n=Gender=2\n.Species=1";
|
||||||
|
//
|
||||||
|
// B_Go
|
||||||
|
//
|
||||||
|
this.B_Go.Anchor = System.Windows.Forms.AnchorStyles.Left;
|
||||||
|
this.B_Go.Location = new System.Drawing.Point(197, 39);
|
||||||
|
this.B_Go.Name = "B_Go";
|
||||||
|
this.B_Go.Size = new System.Drawing.Size(75, 23);
|
||||||
|
this.B_Go.TabIndex = 6;
|
||||||
|
this.B_Go.Text = "Run";
|
||||||
|
this.B_Go.UseVisualStyleBackColor = true;
|
||||||
|
this.B_Go.Click += new System.EventHandler(this.B_Go_Click);
|
||||||
|
//
|
||||||
|
// PB_Show
|
||||||
|
//
|
||||||
|
this.PB_Show.Location = new System.Drawing.Point(12, 41);
|
||||||
|
this.PB_Show.Name = "PB_Show";
|
||||||
|
this.PB_Show.Size = new System.Drawing.Size(180, 18);
|
||||||
|
this.PB_Show.TabIndex = 7;
|
||||||
|
//
|
||||||
|
// BatchEditor
|
||||||
|
//
|
||||||
|
this.AllowDrop = true;
|
||||||
|
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||||
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||||
|
this.ClientSize = new System.Drawing.Size(284, 261);
|
||||||
|
this.Controls.Add(this.PB_Show);
|
||||||
|
this.Controls.Add(this.B_Go);
|
||||||
|
this.Controls.Add(this.RTB_Instructions);
|
||||||
|
this.Controls.Add(this.FLP_RB);
|
||||||
|
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
|
||||||
|
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
|
||||||
|
this.MaximizeBox = false;
|
||||||
|
this.Name = "BatchEditor";
|
||||||
|
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
|
||||||
|
this.Text = "Batch Editor";
|
||||||
|
this.FLP_RB.ResumeLayout(false);
|
||||||
|
this.FLP_RB.PerformLayout();
|
||||||
|
this.ResumeLayout(false);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
private System.Windows.Forms.RadioButton RB_SAV;
|
||||||
|
private System.Windows.Forms.RadioButton RB_Path;
|
||||||
|
private System.Windows.Forms.FlowLayoutPanel FLP_RB;
|
||||||
|
private System.Windows.Forms.TextBox TB_Folder;
|
||||||
|
private System.Windows.Forms.RichTextBox RTB_Instructions;
|
||||||
|
private System.Windows.Forms.Button B_Go;
|
||||||
|
private System.Windows.Forms.ProgressBar PB_Show;
|
||||||
|
}
|
||||||
|
}
|
229
Subforms/PKM Editors/BatchEditor.cs
Normal file
229
Subforms/PKM Editors/BatchEditor.cs
Normal file
|
@ -0,0 +1,229 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
|
||||||
|
namespace PKHeX
|
||||||
|
{
|
||||||
|
public partial class BatchEditor : Form
|
||||||
|
{
|
||||||
|
public BatchEditor()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
DragDrop += tabMain_DragDrop;
|
||||||
|
DragEnter += tabMain_DragEnter;
|
||||||
|
}
|
||||||
|
|
||||||
|
// GUI Methods
|
||||||
|
private void B_Open_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (!B_Go.Enabled) return;
|
||||||
|
var fbd = new FolderBrowserDialog();
|
||||||
|
if (fbd.ShowDialog() != DialogResult.OK)
|
||||||
|
return;
|
||||||
|
|
||||||
|
TB_Folder.Text = fbd.SelectedPath;
|
||||||
|
TB_Folder.Visible = true;
|
||||||
|
}
|
||||||
|
private void B_SAV_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
TB_Folder.Text = "";
|
||||||
|
TB_Folder.Visible = false;
|
||||||
|
}
|
||||||
|
private void B_Go_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (b.IsBusy)
|
||||||
|
{ Util.Alert("Currently executing instruction list."); return; }
|
||||||
|
|
||||||
|
if (RTB_Instructions.Lines.Any(line => line.Length == 0))
|
||||||
|
{ Util.Error("Line length error in instruction list."); return; }
|
||||||
|
|
||||||
|
runBackgroundWorker();
|
||||||
|
}
|
||||||
|
|
||||||
|
private BackgroundWorker b = new BackgroundWorker { WorkerReportsProgress = true };
|
||||||
|
private void runBackgroundWorker()
|
||||||
|
{
|
||||||
|
FLP_RB.Enabled = RTB_Instructions.Enabled = B_Go.Enabled = false;
|
||||||
|
|
||||||
|
var Filters = getFilters().ToList();
|
||||||
|
var Instructions = getInstructions().ToList();
|
||||||
|
b = new BackgroundWorker {WorkerReportsProgress = true};
|
||||||
|
|
||||||
|
b.DoWork += (sender, e) => {
|
||||||
|
if (RB_SAV.Checked)
|
||||||
|
{
|
||||||
|
var data = Main.SAV.BoxData;
|
||||||
|
setupProgressBar(data.Length);
|
||||||
|
processSAV(data, Filters, Instructions);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var files = Directory.GetFiles(TB_Folder.Text, "*", SearchOption.AllDirectories);
|
||||||
|
setupProgressBar(files.Length);
|
||||||
|
processFolder(files, Filters, Instructions);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
b.ProgressChanged += (sender, e) =>
|
||||||
|
{
|
||||||
|
setProgressBar(e.ProgressPercentage);
|
||||||
|
};
|
||||||
|
b.RunWorkerCompleted += (sender, e) => {
|
||||||
|
Util.Alert(result);
|
||||||
|
FLP_RB.Enabled = RTB_Instructions.Enabled = B_Go.Enabled = true;
|
||||||
|
setupProgressBar(0);
|
||||||
|
};
|
||||||
|
b.RunWorkerAsync();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Progress Bar
|
||||||
|
private void setupProgressBar(int count)
|
||||||
|
{
|
||||||
|
MethodInvoker mi = () => { PB_Show.Minimum = 0; PB_Show.Step = 1; PB_Show.Value = 0; PB_Show.Maximum = count; };
|
||||||
|
if (PB_Show.InvokeRequired)
|
||||||
|
PB_Show.Invoke(mi);
|
||||||
|
else
|
||||||
|
mi.Invoke();
|
||||||
|
}
|
||||||
|
private void setProgressBar(int i)
|
||||||
|
{
|
||||||
|
if (PB_Show.InvokeRequired)
|
||||||
|
PB_Show.Invoke((MethodInvoker)(() => PB_Show.Value = i));
|
||||||
|
else { PB_Show.Value = i; }
|
||||||
|
}
|
||||||
|
|
||||||
|
// Mass Editing
|
||||||
|
private string result = "";
|
||||||
|
private IEnumerable<StringInstruction> getFilters()
|
||||||
|
{
|
||||||
|
var raw =
|
||||||
|
RTB_Instructions.Lines
|
||||||
|
.Where(line => !string.IsNullOrWhiteSpace(line))
|
||||||
|
.Where(line => new[] {'!','='}.Contains(line[0]));
|
||||||
|
|
||||||
|
return from line in raw
|
||||||
|
let eval = line[0] == '='
|
||||||
|
let split = line.Substring(1).Split('=')
|
||||||
|
where split.Length == 2 && !string.IsNullOrWhiteSpace(split[0])
|
||||||
|
select new StringInstruction {PropertyName = split[0], PropertyValue = split[1], Evaluator = eval};
|
||||||
|
}
|
||||||
|
private IEnumerable<StringInstruction> getInstructions()
|
||||||
|
{
|
||||||
|
var raw =
|
||||||
|
RTB_Instructions.Lines
|
||||||
|
.Where(line => !string.IsNullOrEmpty(line))
|
||||||
|
.Where(line => new[] {'.'}.Contains(line[0]))
|
||||||
|
.Select(line => line.Substring(1));
|
||||||
|
|
||||||
|
return from line in raw
|
||||||
|
select line.Split('=') into split
|
||||||
|
where split.Length == 2
|
||||||
|
select new StringInstruction { PropertyName = split[0], PropertyValue = split[1] };
|
||||||
|
}
|
||||||
|
private void processSAV(PKM[] data, List<StringInstruction> Filters, List<StringInstruction> Instructions)
|
||||||
|
{
|
||||||
|
int ctr = 0;
|
||||||
|
for (int i = 0; i < data.Length; i++)
|
||||||
|
{
|
||||||
|
var pkm = data[i];
|
||||||
|
if (ProcessPKM(pkm, Filters, Instructions))
|
||||||
|
ctr++;
|
||||||
|
b.ReportProgress(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
Main.SAV.BoxData = data;
|
||||||
|
result = $"Modified {ctr}/{data.Length} files.";
|
||||||
|
}
|
||||||
|
private void processFolder(string[] files, List<StringInstruction> Filters, List<StringInstruction> Instructions)
|
||||||
|
{
|
||||||
|
int ctr = 0;
|
||||||
|
for (int i = 0; i < files.Length; i++)
|
||||||
|
{
|
||||||
|
string file = files[i];
|
||||||
|
if (!PKX.getIsPKM(new FileInfo(file).Length))
|
||||||
|
{
|
||||||
|
b.ReportProgress(i);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
byte[] data = File.ReadAllBytes(file);
|
||||||
|
var pkm = PKMConverter.getPKMfromBytes(data);
|
||||||
|
if (ProcessPKM(pkm, Filters, Instructions))
|
||||||
|
ctr++;
|
||||||
|
|
||||||
|
File.WriteAllBytes(file, pkm.DecryptedBoxData);
|
||||||
|
b.ReportProgress(i);
|
||||||
|
}
|
||||||
|
result = $"Modified {ctr}/{files.Length} files.";
|
||||||
|
}
|
||||||
|
|
||||||
|
private void tabMain_DragEnter(object sender, DragEventArgs e)
|
||||||
|
{
|
||||||
|
if (e.Data.GetDataPresent(DataFormats.FileDrop)) e.Effect = DragDropEffects.Copy;
|
||||||
|
}
|
||||||
|
private void tabMain_DragDrop(object sender, DragEventArgs e)
|
||||||
|
{
|
||||||
|
string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
|
||||||
|
if (!Directory.Exists(files[0])) return;
|
||||||
|
|
||||||
|
TB_Folder.Text = files[0];
|
||||||
|
TB_Folder.Visible = true;
|
||||||
|
RB_SAV.Checked = false;
|
||||||
|
RB_Path.Checked = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Utility Methods
|
||||||
|
private class StringInstruction
|
||||||
|
{
|
||||||
|
public string PropertyName;
|
||||||
|
public string PropertyValue;
|
||||||
|
public bool Evaluator;
|
||||||
|
}
|
||||||
|
private static bool ProcessPKM(PKM PKM, IEnumerable<StringInstruction> Filters, IEnumerable<StringInstruction> Instructions)
|
||||||
|
{
|
||||||
|
if (!PKM.ChecksumValid)
|
||||||
|
return false;
|
||||||
|
if (PKM.Species == 0)
|
||||||
|
return false;
|
||||||
|
foreach (var cmd in Filters)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (ReflectUtil.GetValueEquals(PKM, cmd.PropertyName, cmd.PropertyValue) != cmd.Evaluator)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
Console.WriteLine($"Unable to compare {cmd.PropertyName} to {cmd.PropertyValue}.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (var cmd in Instructions)
|
||||||
|
{
|
||||||
|
try { ReflectUtil.SetValue(PKM, cmd.PropertyName, cmd.PropertyValue); }
|
||||||
|
catch { Console.WriteLine($"Unable to set {cmd.PropertyName} to {cmd.PropertyValue}."); }
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class ReflectUtil
|
||||||
|
{
|
||||||
|
public static bool GetValueEquals<T>(T obj, string propertyName, object value)
|
||||||
|
{
|
||||||
|
PropertyInfo pi = typeof(T).GetProperty(propertyName);
|
||||||
|
var v = pi.GetValue(obj, null);
|
||||||
|
var c = Convert.ChangeType(value, pi.PropertyType);
|
||||||
|
return v.Equals(c);
|
||||||
|
}
|
||||||
|
public static void SetValue<T>(T obj, string propertyName, object value)
|
||||||
|
{
|
||||||
|
PropertyInfo pi = typeof(T).GetProperty(propertyName);
|
||||||
|
pi.SetValue(obj, Convert.ChangeType(value, pi.PropertyType), null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
216
Subforms/PKM Editors/BatchEditor.resx
Normal file
216
Subforms/PKM Editors/BatchEditor.resx
Normal file
|
@ -0,0 +1,216 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||||
|
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>
|
||||||
|
AAABAAIAEBAAAAEAIABoBAAAJgAAACAgAAABACAAqBAAAI4EAAAoAAAAEAAAACAAAAABACAAAAAAAAAE
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAIyMjAQAAAAALCwsPJiYmJysrKycqKionKSkpJykpKScpKSknKioqJyoq
|
||||||
|
KicrKysnJycnJw0ODQ8AAAAAJiYmAQAAAABpaWlHq6ur17+/v+6+vr7svr6+7b6+vu2+vr7tvr6+7b6+
|
||||||
|
vu2+vr7tvr6+7L+/v+6rq6vXampqSAAAAAAoKSgXvr++3eLi4v/g4OD94eHh/+Hh4f/i4uL/4uLi/+Li
|
||||||
|
4v/i4uL/4eHh/+Dh4P/g4OD94uLi/7+/v90sLCwXfn5+PNna2frg4OD/39/f/uHh4f7h4eH+39/f/uDg
|
||||||
|
4P7g4OD+39/f/uHh4f7h4OH+39/f/t/g3//a2tr6g4ODPoOCgz7X19f64+Pj/+Li4v7k5OT/4+Tj//Ly
|
||||||
|
8v/19fX/9PT0//T09P/k5OT/5OTk/+Pj4/7j4+P/19jX+4qLikCDhIM+2tra++Xl5f/k5eT+5OTk//Lz
|
||||||
|
8v+urq7/RUVF/z4+Pv+Zmpn/8fHx/+Xm5f/k5eT+5eXl/9ra2vyLi4tAhYWFPuXm5vvx8vP/7+/w/v//
|
||||||
|
//+sra3/AgIC/15eXv9tbG3/BQUF/4yMjP//////7+/w/vHy8//l5ub8jY2NQC4uLD5LS0f7UFBL/09P
|
||||||
|
Sv5YWVP/FBUS/29wcP///////////5SUlP8PDw//U1NO/1BQS/5PT0r/S0tH/DIyMEAAAAs+AAAM+wAA
|
||||||
|
Dv8AAA/+AwMS/wAAAP+UlJX///////////+3t7n/AAAA/wAAD/8BAQ/+AAAO/wAADPwCAg5ABARSPgoK
|
||||||
|
k/sNDab/DQ2o/hAQvP8CAmj/IiIW/7Kzrv/Cw8D/NDQm/wAATf8QELz/DQ2q/gwMp/8LC5T8Dg5bQAUF
|
||||||
|
Xj4KCpz7DQ2u/w0NsP4NDbX/Dw+//wUFYf8CAhL/AwMP/wMDTf8ODrj/Dg64/w0NsP4MDK7/Cwud/A8P
|
||||||
|
aEEGBmU9DAyl+w4Otf8ODrf+Dw+6/xAQvv8TE8v/EhK+/xAQvP8TE8v/EBDA/w8Puf8PD7f+Dg61/w0N
|
||||||
|
pvsREW9ACAhtQA8PsfsTE77/ExO//xQUwP8UFML/FBTD/xUVyP8WFsn/FRXE/xQUw/8UFMH/ExO//xMT
|
||||||
|
vv8QELL7ERF3QxkZdCgXF771ExPH/xUVyPwVFcn9FhbL/RcXzP0XF8z9FxfM/RcXy/0XF8v9FhbJ/RUV
|
||||||
|
yPwTE8f/Fxe+9RkZdykAAAAAIyOtghsbx/8ZGcj+GRnJ/xoayf8aGsn/GhrK/xoayv8aGsn/GhrJ/xkZ
|
||||||
|
yf8ZGcj+GxvH/yMjrYQAAAAAAADHAQAAAAAzM51FLCyscCoqrGwqKqxtKSmsbSoqrG0qKqxtKSmsbSoq
|
||||||
|
rG0qKqxsLCyscDMznUUAAAAAAAAAAP//AADAAwAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAIAB
|
||||||
|
AACAAQAAgAEAAIABAACAAQAAgAEAAP//AAAoAAAAIAAAAEAAAAABACAAAAAAAAAQAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKysrCR0dHSMWFhY3GBgYORgYGDkYGBg5GBgYORgY
|
||||||
|
GDkYGBg5GBgYORgYGDkYGBg5GBgYORgYGDkYGBg5GBgYORgYGDkYGBg5GBgYORgYGDkYGBg5FxcXNx4e
|
||||||
|
HiQuLi4JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASEhIARYWFis7OzuVkJCQ2ampqeqqqqrsqqqq7Kqq
|
||||||
|
quyqqqrsqqqq7Kqqquyqqqrsqqqq7Kqqquyqqqrsqqqq7Kqqquyqqqrsqqqq7Kqqquyqqqrsqqqq7Kqq
|
||||||
|
quypqanqkZGR2j09PZcXFxcsUFBQAQAAAAAAAAAAAAAAAAAAAAASEhIuhISEytvb2/7W1tb/19fX/9jY
|
||||||
|
2P/Y2Nj/2NjY/9jY2P/Y2Nj/2NjY/9nZ2f/Z2dn/2dnZ/9nZ2f/Z2dn/2dnZ/9nZ2f/Y2Nj/2NjY/9jY
|
||||||
|
2P/Y2Nj/2NjY/9fX1//W1tb/29vb/oeHh8sTExMvAAAAAAAAAAAAAAAAPDw8DGtra6zZ2dn/2dnZ/9ra
|
||||||
|
2v/b29v/29vb/9vb2//c3Nz/3Nzc/9zc3P/c3Nz/3d3d/93d3f/d3d3/3d3d/93d3f/d3d3/3Nzc/9zc
|
||||||
|
3P/c3Nz/3Nzc/9vb2//b29v/29vb/9ra2v/Z2dn/2dnZ/21tba5DQ0MNAAAAAAAAAAAiIiIx1NXU9tna
|
||||||
|
2f/c3Nz/3d3d/93e3f/e3t7/3t7e/9/f3//f39//39/f/9/g3//g4OD/4ODg/+Dg4P/g4OD/4ODg/+Dg
|
||||||
|
4P/g4OD/39/f/9/f3//f39//3t/e/97e3v/d3t3/3d3d/9zc3P/Z2tn/1dXV9icnJzMAAAAAAAAAAFhZ
|
||||||
|
WFzf4N//3Nzc/97e3v/f39//39/f/9/g3//g4OD/4ODg/+Hh4f/h4eH/4eHh/+Li4v/i4uL/4uLi/+Li
|
||||||
|
4v/i4uL/4uLi/+Hi4f/h4eH/4eHh/+Dg4P/g4OD/3+Df/9/f3//f39//3t7e/9zc3P/f39//XV1dXQAA
|
||||||
|
AAAAAAAAZmZmZdvc2//e3t7/3+Df/+Dg4P/g4eD/4eHh/+Hi4f/i4uL/4uPi/+Pj4//j4+P/5OTk/+Tk
|
||||||
|
5P/k5OT/5OTk/+Tk5P/k5OT/4+Pj/+Pj4//j4+P/4uLi/+Li4v/h4eH/4eHh/+Dg4P/f4N//3t7e/9vb
|
||||||
|
2/9wcHBoAAAAAAAAAABoaGhl3d3d/9/f3//h4eH/4eLh/+Li4v/j4+P/4+Pj/+Tk5P/k5OT/5eXl/+Xl
|
||||||
|
5f/l5uX/5ubm/+bm5v/m5ub/5ubm/+bm5v/l5eX/5eXl/+Tk5P/k5OT/4+Pj/+Pj4//i4uL/4uLi/+Hh
|
||||||
|
4f/f39//3N3c/3Nzc2kAAAAAAAAAAGhoaGXe3t7/4ODg/+Li4v/j4+P/4+Pj/+Tk5P/l5eX/5eXl/+bm
|
||||||
|
5v/m5+b/5+fn/+fn5//n6Of/6Ojo/+jo6P/o6Oj/5+fn/+fn5//n5+f/5ubm/+Xl5f/l5eX/5OTk/+Pk
|
||||||
|
4//j4+P/4uLi/+Dg4P/e3t7/c3NzaQAAAAAAAAAAaGhoZd/g3//i4uL/5OTk/+Tl5P/l5eX/5ebl/+bn
|
||||||
|
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
|
||||||
|
wf8REcL/EhLC/xISw/8SEsP/EhLC/xERwv8REcH/ERHA/xERvv8QEL3/EBC7/xAQuv8QELj/Dw+3/w8P
|
||||||
|
tf8ODrD/DAyq/xMTZWsAAAAAAAAAAAcHWmUODrD/EBC2/xERuv8REbz/ERG9/xISvv8SEr//EhLA/xMT
|
||||||
|
wf8TE8P/ExPD/xMTxP8TE8X/FBTF/xQUxf8UFMX/ExPE/xMTxP8TE8P/ExPC/xISwf8SEr//EhK+/xER
|
||||||
|
vf8REbz/ERG6/xAQtv8ODrD/FBRpawAAAAAAAAAACAhcYxAQtf8SErv/ExO+/xQUwP8UFMD/FBTB/xUV
|
||||||
|
wv8VFcP/FRXE/xUVxf8WFsb/FhbG/xYWx/8WFsf/FhbH/xYWx/8WFsf/FhbG/xYWxf8VFcT/FRXD/xUV
|
||||||
|
wv8UFMH/FBTB/xQUwP8TE77/EhK7/xAQtf8TE2hoAAAAAAAAAAAQEFNUFRXC/xMTv/8UFMP/FRXE/xUV
|
||||||
|
xP8VFcX/FRXG/xYWx/8WFsf/FhbI/xYWyf8XF8n/FxfK/xcXyv8XF8r/FxfK/xcXyf8XF8n/FhbI/xYW
|
||||||
|
yP8WFsf/FhbG/xUVxf8VFcT/FRXE/xQUw/8TE7//FRXB/xAQV1UAAAAAAAAAAA0NPxkjI8byFBTD/xUV
|
||||||
|
x/8WFsj/FxfJ/xcXyf8XF8r/FxfK/xcXy/8YGMz/GBjM/xgYzP8YGM3/GBjN/xgYzf8YGM3/GBjM/xgY
|
||||||
|
zP8YGMz/GBjL/xcXy/8XF8r/FxfJ/xcXyf8WFsj/FRXH/xQUw/8jI8f0Dg5GGwAAAAAAAAAAFhZxAiUl
|
||||||
|
eIUZGcr/FBTI/xUVyv8WFsv/FhbM/xYWzP8WFsz/FhbN/xcXzf8XF83/FxfN/xcXzv8XF87/FxfO/xcX
|
||||||
|
zv8XF87/FxfN/xcXzf8WFs3/FhbM/xYWzP8WFsz/FhbL/xUVyv8UFMj/GBjJ/yYmeogWFnYCAAAAAAAA
|
||||||
|
AAAAAAAAGBh1BzMzk50kJNP+FxfK/xgYzP8YGMz/GBjN/xgYzf8YGM3/GBjN/xgYzf8ZGc7/GRnO/xkZ
|
||||||
|
zv8ZGc7/GRnO/xkZzv8YGM3/GBjN/xgYzf8YGM3/GBjN/xgYzP8YGMz/FxfK/yMj0v4zM5WfFBRkBwAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAHBx7Ay0tdkg3N5emMTGpxSwsp8gsLKfILCynyCwsp8gsLKfILCynyCws
|
||||||
|
p8gsLKfILCynyCwsp8gsLKfILCynyCwsp8gsLKfILCynyCwsp8gsLKfILCynyDExqcU2NpenLi54Shsb
|
||||||
|
ewMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////8AAAD+AAAAfAAAADwAAAA8AAAAPAAAADwAAAA8AA
|
||||||
|
AAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AA
|
||||||
|
AAPAAAADwAAAA8AAAAPAAAAD4AAAB/gAAB//////
|
||||||
|
</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
Loading…
Reference in a new issue