From 0dfe8f1e04722218c1bb87e819c585ce892013db Mon Sep 17 00:00:00 2001 From: Justin Aquadro Date: Fri, 2 Dec 2011 01:32:20 -0500 Subject: [PATCH] Mostly functional read-only version of NBTExplorer --- About.Designer.cs | 68 ++++ About.cs | 19 ++ About.resx | 120 +++++++ Form1.Designer.cs | 414 +++++++++++++++++++++++ Form1.cs | 413 +++++++++++++++++++++++ Form1.resx | 524 +++++++++++++++++++++++++++++ NBTExplorer.csproj | 109 ++++++ NBTExplorer.sln | 20 ++ Program.cs | 21 ++ Properties/AssemblyInfo.cs | 36 ++ Properties/Resources.Designer.cs | 77 +++++ Properties/Resources.resx | 127 +++++++ Properties/Settings.Designer.cs | 30 ++ Properties/Settings.settings | 7 + Resources/folder-open-document.png | Bin 0 -> 677 bytes Resources/folder-open.png | Bin 0 -> 647 bytes 16 files changed, 1985 insertions(+) create mode 100644 About.Designer.cs create mode 100644 About.cs create mode 100644 About.resx create mode 100644 Form1.Designer.cs create mode 100644 Form1.cs create mode 100644 Form1.resx create mode 100644 NBTExplorer.csproj create mode 100644 NBTExplorer.sln create mode 100644 Program.cs create mode 100644 Properties/AssemblyInfo.cs create mode 100644 Properties/Resources.Designer.cs create mode 100644 Properties/Resources.resx create mode 100644 Properties/Settings.Designer.cs create mode 100644 Properties/Settings.settings create mode 100644 Resources/folder-open-document.png create mode 100644 Resources/folder-open.png diff --git a/About.Designer.cs b/About.Designer.cs new file mode 100644 index 0000000..2cd6f69 --- /dev/null +++ b/About.Designer.cs @@ -0,0 +1,68 @@ +namespace NBTPlus +{ + partial class About + { + /// + /// 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 () + { + this.linkLabel1 = new System.Windows.Forms.LinkLabel(); + this.SuspendLayout(); + // + // linkLabel1 + // + this.linkLabel1.AutoSize = true; + this.linkLabel1.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.linkLabel1.LinkArea = new System.Windows.Forms.LinkArea(0, 0); + this.linkLabel1.Location = new System.Drawing.Point(97, 9); + this.linkLabel1.Name = "linkLabel1"; + this.linkLabel1.Size = new System.Drawing.Size(245, 120); + this.linkLabel1.TabIndex = 0; + this.linkLabel1.Text = "NBTExplorer\r\nCopyright ©2011 Justin Aquadro\r\n\r\nNBTExplorer is based on NBTEdit by" + + " copyboy\r\nFugue icon set: p.yusukekamiyamane.com\r\n\r\nEmail: jaquadro@gmail.com\r\nN" + + "BTExplorer Github Project Page"; + // + // About + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(365, 138); + this.Controls.Add(this.linkLabel1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "About"; + this.Text = "About NBTExplorer"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.LinkLabel linkLabel1; + + + } +} \ No newline at end of file diff --git a/About.cs b/About.cs new file mode 100644 index 0000000..bf9e8ee --- /dev/null +++ b/About.cs @@ -0,0 +1,19 @@ +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 NBTPlus +{ + public partial class About : Form + { + public About () + { + InitializeComponent(); + } + } +} diff --git a/About.resx b/About.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/About.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + \ No newline at end of file diff --git a/Form1.Designer.cs b/Form1.Designer.cs new file mode 100644 index 0000000..a638b40 --- /dev/null +++ b/Form1.Designer.cs @@ -0,0 +1,414 @@ +namespace NBTPlus +{ + partial class Form1 + { + /// + /// 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 () + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1)); + this.menuStrip1 = new System.Windows.Forms.MenuStrip(); + this.editToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.searchToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.helpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.aboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripContainer1 = new System.Windows.Forms.ToolStripContainer(); + this._nodeTree = new System.Windows.Forms.TreeView(); + this.imageList1 = new System.Windows.Forms.ImageList(this.components); + this.toolStrip1 = new System.Windows.Forms.ToolStrip(); + this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); + this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); + this.toolStripButton1 = new System.Windows.Forms.ToolStripButton(); + this.toolStripButton2 = new System.Windows.Forms.ToolStripButton(); + this.toolStripButton3 = new System.Windows.Forms.ToolStripButton(); + this.toolStripButton4 = new System.Windows.Forms.ToolStripButton(); + this.toolStripButton5 = new System.Windows.Forms.ToolStripButton(); + this.toolStripButton6 = new System.Windows.Forms.ToolStripButton(); + this.toolStripButton7 = new System.Windows.Forms.ToolStripButton(); + this.toolStripButton8 = new System.Windows.Forms.ToolStripButton(); + this.toolStripButton9 = new System.Windows.Forms.ToolStripButton(); + this.toolStripButton10 = new System.Windows.Forms.ToolStripButton(); + this.toolStripButton11 = new System.Windows.Forms.ToolStripButton(); + this.toolStripButton12 = new System.Windows.Forms.ToolStripButton(); + this.toolStripButton15 = new System.Windows.Forms.ToolStripButton(); + this.toolStripButton13 = new System.Windows.Forms.ToolStripButton(); + this.toolStripButton14 = new System.Windows.Forms.ToolStripButton(); + this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.openToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.openFolderToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.menuStrip1.SuspendLayout(); + this.toolStripContainer1.ContentPanel.SuspendLayout(); + this.toolStripContainer1.TopToolStripPanel.SuspendLayout(); + this.toolStripContainer1.SuspendLayout(); + this.toolStrip1.SuspendLayout(); + this.SuspendLayout(); + // + // menuStrip1 + // + this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.fileToolStripMenuItem, + this.editToolStripMenuItem, + this.searchToolStripMenuItem, + this.helpToolStripMenuItem}); + this.menuStrip1.Location = new System.Drawing.Point(0, 0); + this.menuStrip1.Name = "menuStrip1"; + this.menuStrip1.Size = new System.Drawing.Size(562, 24); + this.menuStrip1.TabIndex = 0; + this.menuStrip1.Text = "menuStrip1"; + // + // editToolStripMenuItem + // + this.editToolStripMenuItem.Name = "editToolStripMenuItem"; + this.editToolStripMenuItem.Size = new System.Drawing.Size(39, 20); + this.editToolStripMenuItem.Text = "&Edit"; + // + // searchToolStripMenuItem + // + this.searchToolStripMenuItem.Name = "searchToolStripMenuItem"; + this.searchToolStripMenuItem.Size = new System.Drawing.Size(54, 20); + this.searchToolStripMenuItem.Text = "&Search"; + // + // helpToolStripMenuItem + // + this.helpToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.aboutToolStripMenuItem}); + this.helpToolStripMenuItem.Name = "helpToolStripMenuItem"; + this.helpToolStripMenuItem.Size = new System.Drawing.Size(44, 20); + this.helpToolStripMenuItem.Text = "&Help"; + // + // aboutToolStripMenuItem + // + this.aboutToolStripMenuItem.Name = "aboutToolStripMenuItem"; + this.aboutToolStripMenuItem.Size = new System.Drawing.Size(107, 22); + this.aboutToolStripMenuItem.Text = "&About"; + this.aboutToolStripMenuItem.Click += new System.EventHandler(this.aboutToolStripMenuItem_Click); + // + // toolStripContainer1 + // + // + // toolStripContainer1.ContentPanel + // + this.toolStripContainer1.ContentPanel.Controls.Add(this._nodeTree); + this.toolStripContainer1.ContentPanel.Size = new System.Drawing.Size(562, 351); + this.toolStripContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.toolStripContainer1.Location = new System.Drawing.Point(0, 24); + this.toolStripContainer1.Name = "toolStripContainer1"; + this.toolStripContainer1.Size = new System.Drawing.Size(562, 376); + this.toolStripContainer1.TabIndex = 1; + this.toolStripContainer1.Text = "toolStripContainer1"; + // + // toolStripContainer1.TopToolStripPanel + // + this.toolStripContainer1.TopToolStripPanel.Controls.Add(this.toolStrip1); + // + // _nodeTree + // + this._nodeTree.Dock = System.Windows.Forms.DockStyle.Fill; + this._nodeTree.ImageIndex = 0; + this._nodeTree.ImageList = this.imageList1; + this._nodeTree.Location = new System.Drawing.Point(0, 0); + this._nodeTree.Name = "_nodeTree"; + this._nodeTree.SelectedImageIndex = 0; + this._nodeTree.Size = new System.Drawing.Size(562, 351); + this._nodeTree.TabIndex = 0; + // + // imageList1 + // + this.imageList1.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList1.ImageStream"))); + this.imageList1.TransparentColor = System.Drawing.Color.Transparent; + this.imageList1.Images.SetKeyName(0, "document-attribute-b.png"); + this.imageList1.Images.SetKeyName(1, "document-attribute-s.png"); + this.imageList1.Images.SetKeyName(2, "document-attribute-i.png"); + this.imageList1.Images.SetKeyName(3, "document-attribute-l.png"); + this.imageList1.Images.SetKeyName(4, "document-attribute-f.png"); + this.imageList1.Images.SetKeyName(5, "document-attribute-d.png"); + this.imageList1.Images.SetKeyName(6, "edit-code.png"); + this.imageList1.Images.SetKeyName(7, "edit-small-caps.png"); + this.imageList1.Images.SetKeyName(8, "edit-list.png"); + this.imageList1.Images.SetKeyName(9, "box.png"); + this.imageList1.Images.SetKeyName(10, "folder.png"); + this.imageList1.Images.SetKeyName(11, "block.png"); + this.imageList1.Images.SetKeyName(12, "wooden-box.png"); + this.imageList1.Images.SetKeyName(13, "map.png"); + // + // toolStrip1 + // + this.toolStrip1.Dock = System.Windows.Forms.DockStyle.None; + this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.toolStripButton1, + this.toolStripButton2, + this.toolStripSeparator1, + this.toolStripButton3, + this.toolStripButton4, + this.toolStripButton5, + this.toolStripSeparator2, + this.toolStripButton6, + this.toolStripButton7, + this.toolStripButton8, + this.toolStripButton9, + this.toolStripButton10, + this.toolStripButton11, + this.toolStripButton12, + this.toolStripButton15, + this.toolStripButton13, + this.toolStripButton14}); + this.toolStrip1.Location = new System.Drawing.Point(0, 0); + this.toolStrip1.Name = "toolStrip1"; + this.toolStrip1.Size = new System.Drawing.Size(562, 25); + this.toolStrip1.Stretch = true; + this.toolStrip1.TabIndex = 0; + // + // toolStripSeparator1 + // + this.toolStripSeparator1.Name = "toolStripSeparator1"; + this.toolStripSeparator1.Size = new System.Drawing.Size(6, 25); + // + // toolStripSeparator2 + // + this.toolStripSeparator2.Name = "toolStripSeparator2"; + this.toolStripSeparator2.Size = new System.Drawing.Size(6, 25); + // + // toolStripButton1 + // + this.toolStripButton1.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButton1.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton1.Image"))); + this.toolStripButton1.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButton1.Name = "toolStripButton1"; + this.toolStripButton1.Size = new System.Drawing.Size(23, 22); + this.toolStripButton1.Text = "toolStripButton1"; + this.toolStripButton1.Click += new System.EventHandler(this.toolStripButton1_Click); + // + // toolStripButton2 + // + this.toolStripButton2.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButton2.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton2.Image"))); + this.toolStripButton2.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButton2.Name = "toolStripButton2"; + this.toolStripButton2.Size = new System.Drawing.Size(23, 22); + this.toolStripButton2.Text = "toolStripButton2"; + // + // toolStripButton3 + // + this.toolStripButton3.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButton3.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton3.Image"))); + this.toolStripButton3.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButton3.Name = "toolStripButton3"; + this.toolStripButton3.Size = new System.Drawing.Size(23, 22); + this.toolStripButton3.Text = "toolStripButton3"; + // + // toolStripButton4 + // + this.toolStripButton4.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButton4.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton4.Image"))); + this.toolStripButton4.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButton4.Name = "toolStripButton4"; + this.toolStripButton4.Size = new System.Drawing.Size(23, 22); + this.toolStripButton4.Text = "toolStripButton4"; + // + // toolStripButton5 + // + this.toolStripButton5.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButton5.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton5.Image"))); + this.toolStripButton5.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButton5.Name = "toolStripButton5"; + this.toolStripButton5.Size = new System.Drawing.Size(23, 22); + this.toolStripButton5.Text = "toolStripButton5"; + // + // toolStripButton6 + // + this.toolStripButton6.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButton6.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton6.Image"))); + this.toolStripButton6.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButton6.Name = "toolStripButton6"; + this.toolStripButton6.Size = new System.Drawing.Size(23, 22); + this.toolStripButton6.Text = "toolStripButton6"; + // + // toolStripButton7 + // + this.toolStripButton7.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButton7.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton7.Image"))); + this.toolStripButton7.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButton7.Name = "toolStripButton7"; + this.toolStripButton7.Size = new System.Drawing.Size(23, 22); + this.toolStripButton7.Text = "toolStripButton7"; + // + // toolStripButton8 + // + this.toolStripButton8.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButton8.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton8.Image"))); + this.toolStripButton8.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButton8.Name = "toolStripButton8"; + this.toolStripButton8.Size = new System.Drawing.Size(23, 22); + this.toolStripButton8.Text = "toolStripButton8"; + // + // toolStripButton9 + // + this.toolStripButton9.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButton9.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton9.Image"))); + this.toolStripButton9.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButton9.Name = "toolStripButton9"; + this.toolStripButton9.Size = new System.Drawing.Size(23, 22); + this.toolStripButton9.Text = "toolStripButton9"; + // + // toolStripButton10 + // + this.toolStripButton10.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButton10.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton10.Image"))); + this.toolStripButton10.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButton10.Name = "toolStripButton10"; + this.toolStripButton10.Size = new System.Drawing.Size(23, 22); + this.toolStripButton10.Text = "toolStripButton10"; + // + // toolStripButton11 + // + this.toolStripButton11.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButton11.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton11.Image"))); + this.toolStripButton11.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButton11.Name = "toolStripButton11"; + this.toolStripButton11.Size = new System.Drawing.Size(23, 22); + this.toolStripButton11.Text = "toolStripButton11"; + // + // toolStripButton12 + // + this.toolStripButton12.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButton12.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton12.Image"))); + this.toolStripButton12.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButton12.Name = "toolStripButton12"; + this.toolStripButton12.Size = new System.Drawing.Size(23, 22); + this.toolStripButton12.Text = "toolStripButton12"; + // + // toolStripButton15 + // + this.toolStripButton15.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButton15.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton15.Image"))); + this.toolStripButton15.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButton15.Name = "toolStripButton15"; + this.toolStripButton15.Size = new System.Drawing.Size(23, 22); + this.toolStripButton15.Text = "toolStripButton15"; + // + // toolStripButton13 + // + this.toolStripButton13.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButton13.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton13.Image"))); + this.toolStripButton13.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButton13.Name = "toolStripButton13"; + this.toolStripButton13.Size = new System.Drawing.Size(23, 22); + this.toolStripButton13.Text = "toolStripButton13"; + // + // toolStripButton14 + // + this.toolStripButton14.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButton14.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton14.Image"))); + this.toolStripButton14.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButton14.Name = "toolStripButton14"; + this.toolStripButton14.Size = new System.Drawing.Size(23, 22); + this.toolStripButton14.Text = "toolStripButton14"; + // + // fileToolStripMenuItem + // + this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.openToolStripMenuItem, + this.openFolderToolStripMenuItem}); + this.fileToolStripMenuItem.Name = "fileToolStripMenuItem"; + this.fileToolStripMenuItem.Size = new System.Drawing.Size(37, 20); + this.fileToolStripMenuItem.Text = "&File"; + // + // openToolStripMenuItem + // + this.openToolStripMenuItem.Image = global::NBTPlus.Properties.Resources.folder_open_document; + this.openToolStripMenuItem.Name = "openToolStripMenuItem"; + this.openToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.O))); + this.openToolStripMenuItem.Size = new System.Drawing.Size(223, 22); + this.openToolStripMenuItem.Text = "&Open..."; + this.openToolStripMenuItem.Click += new System.EventHandler(this.openToolStripMenuItem_Click); + // + // openFolderToolStripMenuItem + // + this.openFolderToolStripMenuItem.Image = global::NBTPlus.Properties.Resources.folder_open; + this.openFolderToolStripMenuItem.Name = "openFolderToolStripMenuItem"; + this.openFolderToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)(((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Shift) + | System.Windows.Forms.Keys.O))); + this.openFolderToolStripMenuItem.Size = new System.Drawing.Size(223, 22); + this.openFolderToolStripMenuItem.Text = "Open Folder..."; + this.openFolderToolStripMenuItem.Click += new System.EventHandler(this.openFolderToolStripMenuItem_Click); + // + // Form1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(562, 400); + this.Controls.Add(this.toolStripContainer1); + this.Controls.Add(this.menuStrip1); + this.MainMenuStrip = this.menuStrip1; + this.Name = "Form1"; + this.Text = "NBTExplorer"; + this.menuStrip1.ResumeLayout(false); + this.menuStrip1.PerformLayout(); + this.toolStripContainer1.ContentPanel.ResumeLayout(false); + this.toolStripContainer1.TopToolStripPanel.ResumeLayout(false); + this.toolStripContainer1.TopToolStripPanel.PerformLayout(); + this.toolStripContainer1.ResumeLayout(false); + this.toolStripContainer1.PerformLayout(); + this.toolStrip1.ResumeLayout(false); + this.toolStrip1.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.MenuStrip menuStrip1; + private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem editToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem searchToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem helpToolStripMenuItem; + private System.Windows.Forms.ToolStripContainer toolStripContainer1; + private System.Windows.Forms.TreeView _nodeTree; + private System.Windows.Forms.ToolStrip toolStrip1; + private System.Windows.Forms.ToolStripButton toolStripButton1; + private System.Windows.Forms.ToolStripButton toolStripButton2; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; + private System.Windows.Forms.ToolStripButton toolStripButton3; + private System.Windows.Forms.ToolStripButton toolStripButton4; + private System.Windows.Forms.ToolStripButton toolStripButton5; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator2; + private System.Windows.Forms.ToolStripButton toolStripButton6; + private System.Windows.Forms.ToolStripButton toolStripButton7; + private System.Windows.Forms.ToolStripButton toolStripButton8; + private System.Windows.Forms.ToolStripButton toolStripButton9; + private System.Windows.Forms.ToolStripButton toolStripButton10; + private System.Windows.Forms.ToolStripButton toolStripButton11; + private System.Windows.Forms.ToolStripButton toolStripButton12; + private System.Windows.Forms.ToolStripButton toolStripButton13; + private System.Windows.Forms.ToolStripButton toolStripButton14; + private System.Windows.Forms.ImageList imageList1; + private System.Windows.Forms.ToolStripButton toolStripButton15; + private System.Windows.Forms.ToolStripMenuItem aboutToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem openToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem openFolderToolStripMenuItem; + } +} + diff --git a/Form1.cs b/Form1.cs new file mode 100644 index 0000000..d4ef0e5 --- /dev/null +++ b/Form1.cs @@ -0,0 +1,413 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using Substrate; +using Substrate.Nbt; +using System.IO; +using Substrate.Core; + +namespace NBTPlus +{ + public partial class Form1 : Form + { + private static Dictionary _tagIconIndex; + + public Form1 () + { + InitializeComponent(); + + _nodeTree.BeforeExpand += NodeExpand; + _nodeTree.AfterCollapse += NodeCollapse; + + //LoadRegion(@"C:\Users\Justin\AppData\Roaming\.minecraft\saves\Creative1.8\region\r.0.0.mcr"); + + LoadDirectory(@"C:\Users\Justin\AppData\Roaming\.minecraft\saves\Creative1.8"); + } + + public void LoadFile (string path) { + NBTFile nbtstr = new NBTFile(path); + + using (Stream fs = nbtstr.GetDataInputStream()) { + //LoadNbtStream(fs); + } + } + + public void LoadNbtStream (TreeNodeCollection parent, Stream stream) + { + LoadNbtStream(parent, stream, null); + } + + public void LoadNbtStream (TreeNodeCollection parent, Stream stream, string name) + { + string text = !String.IsNullOrEmpty(name) ? name : null; + text = text ?? "[root]"; + + TreeNode root = new TreeNode(text, 9, 9); + + LoadNbtStream(root, stream); + + parent.Add(root); + } + + public void LoadNbtStream (TreeNode node, Stream stream) + { + NbtTree tree = new NbtTree(); + tree.ReadFrom(stream); + + PopulateNodeFromTag(node, tree.Root); + } + + private TreeNode NodeFromTag (TagNode tag) + { + return NodeFromTag(tag, null); + } + + private TreeNode NodeFromTag (TagNode tag, string name) + { + string text = String.IsNullOrEmpty(name) ? "" : name + ": "; + + TreeNode node = new TreeNode(); + node.ImageIndex = _tagIconIndex[tag.GetTagType()]; + node.SelectedImageIndex = _tagIconIndex[tag.GetTagType()]; + + switch (tag.GetTagType()) { + case TagType.TAG_BYTE: + case TagType.TAG_SHORT: + case TagType.TAG_INT: + case TagType.TAG_LONG: + case TagType.TAG_FLOAT: + case TagType.TAG_DOUBLE: + case TagType.TAG_STRING: + node.Text = text + tag.ToString(); + break; + + case TagType.TAG_BYTE_ARRAY: + node.Text = text + tag.ToTagByteArray().Length + " bytes"; + break; + + case TagType.TAG_LIST: + node.Text = text + tag.ToTagList().Count + " entries"; + PopulateNodeFromTag(node, tag.ToTagList()); + break; + + case TagType.TAG_COMPOUND: + node.Text = text + tag.ToTagCompound().Count + " entries"; + PopulateNodeFromTag(node, tag.ToTagCompound()); + break; + } + + return node; + } + + private void PopulateNodeFromTag (TreeNode node, TagNodeList list) + { + foreach (TagNode tag in list) { + node.Nodes.Add(NodeFromTag(tag)); + } + } + + private void PopulateNodeFromTag (TreeNode node, TagNodeCompound dict) + { + var list = new SortedList(); + foreach (KeyValuePair kv in dict) { + list.Add(new TagKey(kv.Key, kv.Value.GetTagType()), kv.Value); + } + + foreach (KeyValuePair kv in list) { + node.Nodes.Add(NodeFromTag(kv.Value, kv.Key.Name)); + } + } + + public void LoadWorld (string path) + { + NbtWorld world = NbtWorld.Open(path); + + BetaWorld beta = world as BetaWorld; + if (beta != null) { + LoadBetaWorld(beta); + } + } + + private void LoadBetaWorld (BetaWorld world) + { + RegionManager rm = world.GetRegionManager(); + } + + public void LoadRegion (TreeNodeCollection parent, string path) + { + RegionFile rf = new RegionFile(path); + + TreeNode root = new TreeNode(Path.GetFileName(path), 11, 11); + + for (int x = 0; x < 32; x++) { + for (int y = 0; y < 32; y++) { + if (rf.HasChunk(x, y)) { + root.Nodes.Add(CreateLazyChunk(rf, x, y)); + } + } + } + + parent.Add(root); + } + + public TreeNode CreateLazyChunk (RegionFile rf, int x, int z) + { + TreeNode node = new TreeNode(); + node.ImageIndex = 9; + node.SelectedImageIndex = 9; + node.Text = "Chunk [" + x + ", " + z + "]"; + node.Tag = new RegionChunkData(rf, x, z); + node.Nodes.Add(new TreeNode()); + + return node; + } + + public TreeNode CreateLazyNbt (string path, CompressionType cztype) + { + TreeNode node = new TreeNode(); + node.ImageIndex = 12; + node.SelectedImageIndex = 12; + node.Text = Path.GetFileName(path); + node.Tag = new NbtFileData(path, cztype); + node.Nodes.Add(new TreeNode()); + + return node; + } + + public void LoadLazyChunk (TreeNode node) + { + RegionChunkData data = node.Tag as RegionChunkData; + if (data == null) + return; + + node.Nodes.Clear(); + LoadNbtStream(node, data.Region.GetChunkDataInputStream(data.X, data.Z)); + } + + public void UnloadLazyChunk (TreeNode node) + { + RegionChunkData data = node.Tag as RegionChunkData; + if (data == null) + return; + + node.Nodes.Clear(); + node.Nodes.Add(new TreeNode()); + } + + public void LoadLazyNbt (TreeNode node) + { + NbtFileData data = node.Tag as NbtFileData; + if (data == null) + return; + + node.Nodes.Clear(); + + NBTFile file = new NBTFile(data.Path); + LoadNbtStream(node, file.GetDataInputStream(data.CompressionType)); + } + + public void UnloadLazyNbt (TreeNode node) + { + NbtFileData data = node.Tag as NbtFileData; + if (data == null) + return; + + node.Nodes.Clear(); + node.Nodes.Add(new TreeNode()); + } + + private void NodeExpand (object sender, TreeViewCancelEventArgs e) + { + if (e.Node.Tag == null) + return; + + if (e.Node.Tag is RegionChunkData) { + LoadLazyChunk(e.Node); + } + else if (e.Node.Tag is NbtFileData) { + LoadLazyNbt(e.Node); + } + } + + private void NodeCollapse (object sender, TreeViewEventArgs e) + { + if (e.Node.Tag == null) + return; + + if (e.Node.Tag is RegionChunkData) { + UnloadLazyChunk(e.Node); + } + else if (e.Node.Tag is NbtFileData) { + UnloadLazyNbt(e.Node); + } + } + + public void LoadDirectory (string path) + { + LoadDirectory(path, _nodeTree.Nodes); + } + + public void LoadDirectory (string path, TreeNodeCollection parent) + { + LoadDirectory(path, parent, path); + } + + public void LoadDirectory (string path, TreeNodeCollection parent, string name) + { + TreeNode root = new TreeNode(name, 10, 10); + + foreach (string dirpath in Directory.EnumerateDirectories(path)) { + LoadDirectory(dirpath, root.Nodes, Path.GetFileName(dirpath)); + } + + foreach (string filepath in Directory.EnumerateFiles(path)) { + TryLoadFile(root.Nodes, filepath); + } + + parent.Add(root); + } + + public void TryLoadFile (TreeNodeCollection parent, string path) + { + if (Path.GetExtension(path) == ".mcr") { + LoadRegion(parent, path); + return; + } + + if (Path.GetExtension(path) == ".dat") { + try { + NBTFile file = new NBTFile(path); + NbtTree tree = new NbtTree(); + tree.ReadFrom(file.GetDataInputStream()); + parent.Add(CreateLazyNbt(path, CompressionType.GZip)); + return; + } + catch { } + + try { + NBTFile file = new NBTFile(path); + NbtTree tree = new NbtTree(); + tree.ReadFrom(file.GetDataInputStream(CompressionType.None)); + parent.Add(CreateLazyNbt(path, CompressionType.None)); + return; + } + catch { } + } + } + + static Form1 () + { + _tagIconIndex = new Dictionary(); + _tagIconIndex[TagType.TAG_BYTE] = 0; + _tagIconIndex[TagType.TAG_SHORT] = 1; + _tagIconIndex[TagType.TAG_INT] = 2; + _tagIconIndex[TagType.TAG_LONG] = 3; + _tagIconIndex[TagType.TAG_FLOAT] = 4; + _tagIconIndex[TagType.TAG_DOUBLE] = 5; + _tagIconIndex[TagType.TAG_BYTE_ARRAY] = 6; + _tagIconIndex[TagType.TAG_STRING] = 7; + _tagIconIndex[TagType.TAG_LIST] = 8; + _tagIconIndex[TagType.TAG_COMPOUND] = 9; + } + + private void OpenFile () + { + OpenFileDialog ofd = new OpenFileDialog(); + ofd.RestoreDirectory = true; + ofd.Multiselect = false; + + if (ofd.ShowDialog() == DialogResult.OK) { + _nodeTree.Nodes.Clear(); + TryLoadFile(_nodeTree.Nodes, ofd.FileName); + } + } + + private void aboutToolStripMenuItem_Click (object sender, EventArgs e) + { + new About().Show(); + } + + private void openToolStripMenuItem_Click (object sender, EventArgs e) + { + OpenFile(); + } + + private void openFolderToolStripMenuItem_Click (object sender, EventArgs e) + { + FolderBrowserDialog ofd = new FolderBrowserDialog(); + if (ofd.ShowDialog() == DialogResult.OK) { + _nodeTree.Nodes.Clear(); + LoadDirectory(ofd.SelectedPath); + } + } + + private void toolStripButton1_Click (object sender, EventArgs e) + { + OpenFile(); + } + } + + public class TagKey : IComparable + { + public TagKey (string name, TagType type) + { + Name = name; + TagType = type; + } + + public string Name { get; set; } + public TagType TagType { get; set; } + + #region IComparer Members + + public int Compare(TagKey x, TagKey y) + { + int typeDiff = (int)x.TagType - (int)y.TagType; + if (typeDiff != 0) + return typeDiff; + + return String.Compare(x.Name, y.Name, true); + } + + #endregion + + #region IComparable Members + + public int CompareTo (TagKey other) + { + return Compare(this, other); + } + + #endregion + } + + public class RegionChunkData + { + public RegionChunkData (RegionFile file, int x, int z) + { + Region = file; + X = x; + Z = z; + } + + public RegionFile Region { get; private set; } + public int X { get; private set; } + public int Z { get; private set; } + } + + public class NbtFileData + { + public NbtFileData (string path, CompressionType cztype) + { + Path = path; + CompressionType = cztype; + } + + public string Path { get; private set; } + public CompressionType CompressionType { get; private set; } + } +} diff --git a/Form1.resx b/Form1.resx new file mode 100644 index 0000000..9ff0c49 --- /dev/null +++ b/Form1.resx @@ -0,0 +1,524 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + 17, 17 + + + 237, 17 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADW + LgAAAk1TRnQBSQFMAgEBDgEAASABAAEgAQABEAEAARABAAT/ARkBAAj/AUIBTQE2BwABNgMAASgDAAFA + AwABQAMAAQEBAAEYBgABMBIAA/wD+SH4A/kD/AMAA/0D+SH4A/kD/WMAAZYBqQG8AVwBhAGuAVwBhAGu + AVwBhAGuAVwBhAGuAVwBhAGuAVwBhAGuAVwBhAGuAVwBhAGuAVwBhAGuAVwBhAGuAVwBhAGuAVwBhAGu + AVwBhAGuAZYBqQG8AwACzwHLArkBsAK5AbACuQGwArkBsAK5AbACuQGwArkBsAK5AbACuQGwArkBsAK5 + AbACuQGwArkBsALPActjAAFsAZMBugFVAYgBuwFwAaMB1gFnAZoBzQFnAZoBzQFnAZoBzQFnAZoBzQFn + AZoBzQFnAZoBzQFnAZoBzQFnAZoBzQFnAZoBzQFwAaMB1gFVAYgBuwFsAZMBugMAAsEBuQL5AekC8wHi + AvMB4gLzAeIC8wHiAvMB4gLzAeIC8wHiAvMB4gLzAeIC8wHiAvMB4gL5AekCwQG5YwABfgGiAccBcQGk + AdcBVQGIAbsBcQGkAdcBcQGkAdcBcQGkAdcBcQGkAdcBcQGkAdcBcQGkAdcBcQGkAdcBcQGkAdcBcQGk + AdcBVQGIAbsBcQGkAdcBfgGiAccDAALLAcMC9AHkAXoBpwGbAYcBtwGnAYcBtQGjAYkBswGiAWgBoAGG + AVcBlwF4AVgBkwF5AWgBkAF+AZIBpAGTAYYBlwGAAqgBjgL0AeQCywHDYwABhgGqAc0BcwGmAdkBagGd + AdABSAF7Aa4BXwGSAcUBTAF/AbIBXwGSAcUBTAF/AbIBXwGSAcUBTAF/AbIBXwGSAcUBSAF7Aa4BagGd + AdABcwGmAdkBhgGqAc0DAALPAccC9QHmAYQBtQGrAZgB1wHHAZAB0QG+AXMBsAGZAZcBywG2AacBzgG9 + AZcBvQGsAZQBugGoAakBvwGvAY4BrQGhAbcBrQGLAvUB5gLPAcdjAAGLAa0BzwF1AagB2wFsAZ8B0gFK + AX0BsAFsAZ8B0gFSAYUBuAFsAZ8B0gFSAYUBuAFsAZ8B0gFSAYUBuAFsAZ8B0gFKAX0BsAFsAZ8B0gF1 + AagB2wGLAa0BzwMAAtEByQL2AekBkAG8AbUBuQHlAdsBpgHdAdABiAHAAbIBhwHJAbUBfgG+AaQBiAG5 + AaMBrgHQAb8BqQHHAbUBlAG6AagBtgG1AZEC9gHpAtEByWMAAY8BsQHSAXcBqgHdAW4BoQHUAUcBegGt + AW4BoQHUAU8BggG1AW4BoQHUAU8BggG1AW4BoQHUAU8BggG1AW4BoQHUAUcBegGtAW4BoQHUAXcBqgHd + AY8BsQHSAwAC0wHMAvcB6wHFAbgBhwH/Ad4BjAH4AecBrQHVAdEBsAHKAesB4gG9AeUB2QGgAcoBuwGq + Ac4BrwGCAcEBpAF+AbYCmAGsAYQC9wHrAtMBzGMAAZMBtAHUAXgBqwHeAW8BogHVAUQBdwGqAW8BogHV + AUwBfwGyAW8BogHVAUwBfwGyAW8BogHVAUwBfwGyAW8BogHVAUQBdwGqAW8BogHVAXgBqwHeAZMBtAHU + AwAC1QHNAvgB7gHRAa4BaQHbAboBcQHeAb4BdAHpAckBfAG/Ac0BqAGVAcwBwgGhAc8BvgGRAcQBrwF/ + Ab0BpgF3AbcBnQGoAaoBdwL4Ae4C1QHNYwABmAG4AdcBegGtAeABcQGkAdcBQQF0AacBcQGkAdcBSQF8 + Aa8BcQGkAdcBSQF8Aa8BcQGkAdcBSQF8Aa8BcQGkAdcBQQF0AacBcQGkAdcBegGtAeABmAG4AdcDAALX + Ac8C+QHxAdMBrAFmAf8B0wF+Af8B1gGCAeABvgF0AfYB4QGZAbAB7QHkAa8B0QG/AaIB4AHTAZgB2AHG + AY4B0AG6AbgBsgGAAvkB8QLXAc9jAAGbAboB2QF8Aa8B4gFzAaYB2QE/AXIBpQFzAaYB2QFHAXoBrQFz + AaYB2QFHAXoBrQFzAaYB2QFHAXoBrQFzAaYB2QE/AXIBpQFzAaYB2QF8Aa8B4gGbAboB2QMAAtkB0QL7 + AfQB1QGpAWIB/wHOAXkB/wHSAX0B3wG6AW8B/wHYAYMB5gHqAb0BpgHYAc0BswHsAeIBuQHkAdABtgHc + AcQBqwG+AZcC+wH0AtkB0WMAAZ0BvQHbAX4BsQHkAXUBqAHbATgBawGeAVEBhAG3ATgBawGeAVEBhAG3 + ATgBawGeAVEBhAG3ATgBawGeAVEBhAG3ATgBawGeAXUBqAHbAX4BsQHkAZ0BvQHbAwAC2gHTAvwB9wHX + AacBXwHaAawBZAHcAbABZwHnAbwBcAHgAboBbwHjAb4BcwHfAdEBmAHbAc8BlgHVAdEBnAHEAc0BpAGd + AdEBwwL8AfcC2gHTYwABoAG+AdwBfwGyAeUBZgGZAcwBdgGpAdwBdgGpAdwBdgGpAdwBdgGpAdwBdgGp + AdwBdgGpAdwBdgGpAdwBdgGpAdwBdgGpAdwBZgGZAcwBfwGyAeUBoAG+AdwDAALbAdQC/QH5AdkBpAFc + Af8BxAFvAf8ByAFzAd4BsAFnAf8BzgF5Af8B0gF9AeQBvgFyAf8B2AGDAe0B5AGoAeIB5gG2AdAB1wGt + Av0B+QLbAdRjAAGjAcAB3gFrAZ4B0QF3AaoB3QF3AaoB3QF3AaoB3QF3AaoB3QF3AaoB3QF3AaoB3QF3 + AaoB3QF3AaoB3QF3AaoB3QF3AaoB3QF3AaoB3QFrAZ4B0QGjAcAB3gMAAt0B1QL+AfwB2gGjAVoB/wG/ + AWsB/wHCAW4B3gGsAWIB/wHJAXQB/wHNAXgB4wG5AW4B/wHTAX4B/wHXAYMB/AHeAZUB7AHKAXwC/gH8 + At0B1WMAAaYBwwHgAaAB0wH6AZgBywH1AZMBxgHzAZMBxgHzAZMBxgHzAZMBxgHzAZMBxgHzAZMBxgHz + AZMBxgHzAZMBxgHzAZMBxgHzAZgBywH1AaAB0wH6AaYBwwHgAwAC3gHXAv8B/gHbAaEBWAHbAaIBWQHb + AaQBWwHbAaUBXQHbAakBYAHbAawBYwHbAa8BZgHbAbEBaAHbAbQBawHbAbcBbgHbAbkBcQL/Af4C3gHX + YwAB6AHtAfMBqAHEAeEBlwHKAfUBkgHFAfMBkgHFAfMBkgHFAfMBkgHFAfMBkgHFAfMBkgHFAfMBkgHF + AfMBkgHFAfMBkgHFAfMBlwHKAfUBqAHEAeEB6AHtAfMDAALfAdkn/wLfAdlmAAHoAe0B8wGpAcUB4gGp + AcUB4gGpAcUB4gGpAcUB4gGpAcUB4gGpAcUB4gGpAcUB4gGpAcUB4gGpAcUB4gGpAcUB4gGpAcUB4gHo + Ae0B8wYAAuoB5gLgAdkC4AHZAuAB2QLgAdkC4AHZAuAB2QLgAdkC4AHZAuAB2QLgAdkC4AHZAuAB2QLg + AdkC6gHmwwAD+wPxAZUBrwG8AWgBmwG2AWgBmwG2AWgBmwG2AWgBmwG2AWgBmwG2AWgBmwG2AWgBmwG2 + AWgBmwG2AWgBmwG2AWgBmwG2AZUBrwG8A/ED+xUAEvgD+QP9MwAD/AP5JPgD+QP8A/0D+gF3AagBwQGG + Ac8B8AGBAcsB7QGBAcsB7QGBAcsB7QGBAcsB7QGBAcsB7QGBAcsB7QGGAc8B8AFLAY8BsQGGAc8B8AF3 + AagBwQHcAeIB5Qb9A/kM+APzAYkBpQGPAVUBiwFfAVUBiwFfAVUBiwFfAVUBiwFfAVUBiwFfAVUBiwFf + AZQBrQGZBgADwAMsA8ADAAP7G/gD+wP3AZMBpgG6AWABiAGvAWABiAGvAWABiAGvAWABiAGvAWABiAGv + AWABiAGvAWABiAGvAWABiAGvAWABiAGvAWABiAGvAWABiAGvAWABiAGvAZMBpgG6A/cGAAGGAbUBzQGE + Ac4B7gF8AccB6AF8AccB6AF8AccB6AF8AccB6AF8AccB6AF8AccB6AGEAc4B7gFXAZsBvQGEAc4B7gH0 + AbYBLgGGAbUBzQMAApQBuAJVAaMCVQGjAlUBowJVAaMCVQGjAlUBowFVAXoBiQE1Ab0BeQFDAcsBhwE+ + AcYBggE+AcYBggE+AcYBggFDAcsBhwFVAaABcAYAA0ABZwJWA0ADAAP7A2EDXgNcA1kDVANJAzwDLwNs + A/sDAAFyAZgBvwF7Aa4B4AF6Aa0B3wF6Aa0B3wF6Aa0B3wF6Aa0B3wF6Aa0B3wF6Aa0B3wF6Aa0B3wF6 + Aa0B3wF6Aa0B3wF6Aa0B3wF7Aa4B4AFyAZgBvwkAAZEBvgHUAYcB0AHvAX8BygHpAX8BygHpAX8BygHp + AX8BygHpAX8BygHpAX8BygHpAYcB0AHvAV8BowHFAYcB0AHvAf4ByQFBAZEBvgHUAwACVQG0AS8BHgHc + ASUBEwHYASUBEwHYASUBEwHYASUBEwHYASUBEwHYAVUBfgGVATcBvwF7AUIBygGGATcBvwF7ATcBvwF7 + ATcBvwF7AUIBygGGAVUBpwF2BgADywNVA8snAAGEAacBywGBAbQB5AF9AbAB4QF9AbAB4QF9AbAB4QF9 + AbAB4QF9AbAB4QF9AbAB4QF9AbAB4QF9AbAB4QF9AbAB4QF9AbAB4QGBAbQB5AGEAacBywkAAZQBwAHW + AYoB0wHwAYIBzQHrAYIBzQHrAYIBzQHrAYIBzQHrAYIBzQHrAYIBzQHrAYoB0wHwAWIBpgHIAYoB0wHw + AukB2wGUAcAB1gMAAlUBuQEtARwB3gEVAQAB1QEVAQAB1QEVAQAB1QEVAQAB1QEVAQAB1QFVAYEBmgE7 + AcMBfwFIAc8BjAE7AcMBfwE7AcMBfwE7AcMBfwFIAc8BjAFVAa0BezYAAYoBrQHPAYgBuwHqAYIBtQHl + AYIBtQHlAYIBtQHlAYIBtQHlAYIBtQHlAYIBtQHlAYIBtQHlAYIBtQHlAYIBtQHlAYIBtQHlAYgBuwHq + AYoBrQHPCQABmAHDAdgBjgHWAfIBhwHQAe0BhwHQAe0BhwHQAe0BhwHQAe0BhwHQAe0BhwHQAe0BjgHW + AfIBZgGqAcwBjgHWAfIC8AHmAZgBwwHYAwACVQG/ATYBJQHkARkBAAHbARkBAAHbARkBAAHbARkBAAHb + ARkBAAHbAVUBhAGgAT4BxgGCAU0B1QGRAT4BxgGCAT4BxgGCAT4BxgGCAU0B1QGRAVUBswGANgABjgGw + AdEBjwHCAe4BhwG6AekBhwG6AekBhwG6AekBhwG6AekBhwG6AekBhwG6AekBhwG6AekBhwG6AekBhwG6 + AekBhwG6AekBjwHCAe4BjgGwAdEJAAGbAcYB2gGSAdoB9AGLAdQB8AGLAdQB8AGLAdQB8AGLAdQB8AGL + AdQB8AGLAdQB8AGSAdoB9AFpAa0BzwGSAdoB9AL4AfMBmwHGAdoDAAJVAcQBPgEtAewBHAEAAeMBHAEA + AeMBHAEAAeMBHAEAAeMBHAEAAeMBVQGGAaQBQgHKAYYBUQHZAZUBQgHKAYYBQgHKAYYBQgHKAYYBUQHZ + AZUBVQG5AYQGAAPQA2cD0CcAAZMBtAHUAZYByQHyAYwBvwHsAYwBvwHsAYwBvwHsAUQBdwGqAYwBvwHs + AUQBdwGqAYwBvwHsAYwBvwHsAYwBvwHsAYwBvwHsAZYByQHyAZMBtAHUCQABnwHIAd0BlwHeAfYBkAHY + AfIBkAHYAfIBkAHYAfIBkAHYAfIBkAHYAfIBkAHYAfIBlwHeAfYBeQG9AdwBeAG9AdwC/gH9AZ8ByAHd + AwACVQHIAUYBNQHyASABAAHpASABAAHpASABAAHpASABAAHpASABAAHpAVUBiQGoAUQBzAGIAWUB7QGp + AWUB7QGpAWUB7QGpAWUB7QGpAVgB1gGWAX8BywGkBgADbAFvAmkDbAYAA3UDdANxA24DbANoA2UDYwNg + BgABmAG4AdcBmwHOAfYBkQHEAfABkQHEAfABkQHEAfABVQGIAbsBRAF3AaoBVQGIAbsBQAFzAaYBkQHE + AfABkQHEAfABkQHEAfABmwHOAfYBmAG4AdcJAAGiAcoB3gGbAeEB9wGUAdsB9AGUAdsB9AGUAdsB9AGU + AdsB9AGUAdsB9AGUAdsB9AGUAdsB9AGeAeQB+QF8AcAB3gGiAcoB3gHuAfMB9QMAAn8B1QFiAWEB5wF2 + AXUB/gF2AXUB/gF5AWIBowF7AVABVQF7AVABVQFqAVkBPwFqAW4BMgFqAW4BMgFhAYsBUQFVAcEBigFV + AcEBigFVAcEBigHiAe8B6AYAA9MDcQPTJwABmwG6AdkBnwHSAfkBlQHIAfMBlQHIAfMBlQHIAfMBVQGI + AbsBVQGIAbsBVQGIAbsBTQGAAbMBlQHIAfMBlQHIAfMBlQHIAfMBnwHSAfkBmwG6AdkJAAGlAc0B4AGe + AeUB+QGYAd8B9gGYAd8B9gGYAd8B9gGYAd8B9gGYAd8B9gGYAd8B9gGYAd8B9gGYAd8B9gGhAegB+gGl + Ac0B4AYAAuIB8QJVAc4CVQHOAlUBzgFtAVMBdQHcAakBMgHXAaQBLQHXAaQBLQHXAaQBLQHcAakBMgGw + AYYBSEIAAZ8BvQHbAakB2wH+AaoB3QH/AaoB3QH/AaoB3QH/AXcBqgHdAXcBqgHdAXcBqgHdAWYBmQHM + AaoB3QH/AaoB3QH/AaoB3QH/AakB2wH+AZ8BvQHbCQABqAHOAeIBowHoAfsBnQHjAfkBnQHjAfkBnQHj + AfkBnQHjAfkBnQHjAfkBnQHjAfkBnQHjAfkBnQHjAfkBowHoAfsBqAHOAeISAAG2AYsBRQHcAakBMgHR + AZ4BJwHRAZ4BJwHRAZ4BJwHcAakBMgG2AYsBRUIAAccB1wHnAYgBtgHiAYABswHmAYABswHmAYABswHm + AU4BgQG0AU4BgQG0AU4BgQG0AUgBewGuAYABswHmAYABswHmAYABswHmAYgBtgHiAccB1wHnCQABqwHQ + AeMBpgHrAfwBoQHmAfsBoQHmAfsBoQHmAfsBoQHmAfsBoQHmAfsBoQHmAfsBoQHmAfsBoQHmAfsBpgHr + AfwBqwHQAeMSAAG7AZABQQHhAa4BOAHWAaMBLAHWAaMBLAHWAaMBLAHhAa4BOAG7AZABQRIAA9cDfQPX + JwAB4wHqAfEBjgG4AeEBiQG8Ae8BiAG7Ae4BiAG7Ae4BQQF0AacBQQF0AacBQQF0AacBPgFxAaQBiAG7 + Ae4BiAG7Ae4BiQG8Ae8BjgG4AeEB4wHqAfEJAAGuAdIB5AGpAe4B/QGkAekB/AGkAekB/AGkAekB/AGk + AekB/AGkAekB/AGkAekB/AGkAekB/AGkAekB/AGpAe4B/QGuAdIB5BIAAcABlQE/AecBtAE9AdoBpwEw + AdoBpwEwAdoBpwEwAecBtAE9AcABlQE/EgADfwN3A38GAAOCA4EDfwN+A3wDegN5A3YDqwYAAfUB9wH5 + AZsBvgHfAYkBvAHvAYgBuwHuAYgBuwHuATUBaAGbATUBaAGbATUBaAGbATUBaAGbAYgBuwHuAYgBuwHu + AYkBvAHvAZsBvgHfAfUB9wH5CQABsAHUAeYBrAHxAf8BpwHsAf4BpwHsAf4BpwHsAf4BpwHsAf4BpwHs + Af4BpwHsAf4BpwHsAf4BpwHsAf4BrAHxAf8BsAHUAeYSAAHGAZoBPQHrAbgBQQHdAaoBMwHdAaoBMwHd + AaoBMwHrAbgBQQHGAZoBPRIAA9gDggPYJwAD/gHLAdoB6gGpAcUB4gGpAcUB4gGpAcUB4gFVAX0BpgFV + AX0BpgFVAX0BpgFVAX0BpgGpAcUB4gGpAcUB4gGpAcUB4gHLAdoB6gP+CQABsgHVAeYBsQH1Af8BrgHy + Af8BrgHyAf8BrgHyAf8BrgHyAf8BrgHyAf8BrgHyAf8BrgHyAf8BrgHyAf8BsQH1Af8BsgHVAeYSAAHU + AbMBbAHnAbgBRgH+AcsBVAH+AcsBVAH+AcsBVAHnAbgBRgHUAbMBbHUAAdAB5AHuAbMB1gHnAbMB1gHn + AbMB1gHnAbMB1gHnAbMB1gHnAbMB1gHnAbMB1gHnAbMB1gHnAbMB1gHnAbMB1gHnAdAB5AHuEgAB8AHr + Ad4BzQGgATkBzQGgATkBzQGgATkBzQGgATkBzQGgATkB8AHrAd4PAAP7A/ECyAHDArgBsAK4AbACuAGw + ArgBsAK4AbACuAGwArgBsAK4AbACuAGwArgBsALIAcMD8Qb7A/ECyAHDArgBsAK4AbACuAGwArgBsAK4 + AbACuAGwArgBsAK4AbACuAGwArgBsALIAcMD8QP7YAAD/QP6AsABuAv/A/4B/QL+AfwC/QH7Av0B+gL8 + AfgC/gH5AsABuAP6Bv0D+gLAAbgL/wP+Af0C/gH8Av0B+wL9AfoC/AH4Av4B+QLAAbgD+gP9ZgACyQHB + Bv8D/gL9AfwC/QH7AvwB+QL7AfgC+gH2AvgB9AL7AfYCyQHBDAACyQHBBv8D/gL9AfwC/QH7AvwB+QL7 + AfgC+gH2AvgB9AL7AfYCyQHBbAACzwHHA/8D/gL9AfwC/QH7AvwB+QL7AfgC+gH2AvgB9AL3AfIC+wH1 + As8BxwwAAs8BxwP/A/4C/QH8Av0B+wL8AfkC+wH4AvoB9gL4AfQC9wHyAvsB9QLPAccMAAP+A/wG+QP6 + BvwD+wb5A/wD/gYAA/0D/AP6HvgD+gP8A/0GAALQAcgC/wH+Av0B/AL9AfsBvwFIAa4B7AHOAeUC+gH2 + AvgB9AL3AfIC9gHwAvoB8wLQAcgMAALQAcgC/wH+Av0B/AHpAc8B6wGuAUgBvwGuAUgBvwGuAUgBvwHT + AaEB2gL3AfIC9gHwAvoB8wLQAcgMAAP+A/wD+QOzA1wG/ANcA7QD+QP8A/4GAAP9A4QDNAOEA/gD4gY0 + A4QD4gN1A6QD+AOEAzQD6QYAAtIBywL+A/0B+wL8AfkBxgFPAbUB7AHPAeUC+AH0AvcB8gL2AfAC9QHu + AvoB8gLSAcsMAALSAcsC/gP9AfsB6gHRAe0BtQFPAcYC+gH2AecBzgHoAbUBTwHGAe4B4QHrAvUB7gL6 + AfIC0gHLEgADywN1A/gGAAP4A3UDyxIAA3kD9QYAA6oDeQYAA8sDvgPuA6oDwgkAAtUBzQL+A/wB+QL7 + AfgBzgFXAb0BzgFXAb0BzgFXAb0B4gGmAdYC9QHuAvQB7AL5Ae8C1QHNDAAC1QHNAv4D/AH5AesB0gHt + Ab0BVwHOAvgB9AL3AfIBvQFXAc4B5wHNAeUC9AHsAvkB7wLVAc0PAAPOA38D+QwAA/kDfwPODwADxgxg + A8YGAAP1CWAD6QkAAtYBzgL9A/sB+AL6AfYB1gFfAcUB7wHRAeYC9gHwAvUB7gL0AewC8QHnAvcB6gLW + Ac4MAALWAc4C/QP7AfgB7AHTAe4BxQFfAdYC9wHyAeoB0QHqAcUBXwHWAe0B4QHpAvEB5wL3AeoC1gHO + DAAD0AOGA/kSAAP5A4YD0AwAA/UDlAPvA9EDaAP1CQADkwPvA2gMAALYAdAC/QP6AfYC+AH0AdwBZQHL + AdwBZQHLAdwBZQHLAeIBiQHTAvEB5wLsAd8C9AHlAtgB0AwAAtgB0AL9A/oB9gHtAdMB7gHLAWUB3AHL + AWUB3AHLAWUB3AHfAawB4wLxAecC7AHfAvQB5QLYAdAJAAPvA2wD7xgAA+8DbAPvDAADjwP2A7cDjwwA + A8wDfQPMDAAC2gHSAvwD+AH0AvcB8gL2AfAC9QHuAvQB7ALxAecC7AHfAugB2QLzAeIC2gHSDAAC2gHS + AvwD+AH0AvcB8gL2AfAC9QHuAvQB7ALxAecC7AHfAugB2QLzAeIC2gHSDAAD1AORA/kSAAP5A5ED1A8A + A84D1QN3A84MAAPsA3cD7AwAAtsB0wL8A/cB8gL2AfAC9QHuAvQB7ALxAecC7AHfAugB2QLmAdUC8gHh + AtsB0wwAAtsB0wL8A/cB8gL2AfAC9QHuAvQB7ALxAecC7AHfAugB2QLmAdUC8gHhAtsB0w8AA9UDlgP5 + DAAD+QOWA9USAAP2A6IDfgP2IQAC3AHVAvsD9gHwAvUB7gL0AewC8QHnAuwB3wLoAdkC5gHVAuUB1ALy + AeEC3AHVDAAC3AHVAvsD9gHwAvUB7gL0AewC8QHnAuwB3wLoAdkC5gHVAuUB1ALyAeEC3AHVEgAD1wOZ + A/oGAAP6A5kD1xgABpwkAALdAdYC+gH0AvUB7gL0AewC8QHnAuwB3wLoAdkC5gHVAqQBkwKkAZMCpAGT + AskBwAwAAt0B1gL6AfQC9QHuAvQB7ALxAecC7AHfAugB2QLmAdUCpAGTAqQBkwKkAZMCyQHAFQAD2AOd + BgADnQPYRQAC3gHXAvoB8wL0AewC8QHnAuwB3wLoAdkC5gHVAuUB1AK2AaUD/wLeAdcC9wH2DAAC3gHX + AvoB8wL0AewC8QHnAuwB3wLoAdkC5gHVAuUB1AK2AaUD/wLeAdcC9wH2bAAC3wHZAvwB9QL5Ae8C9gHq + AvQB5QLzAeIC8gHhAvIB4QLCAbEC3wHZAvcB9g8AAt8B2QL8AfUC+QHvAvYB6gL0AeUC8wHiAvIB4QLy + AeECwgGxAt8B2QL3AfZvAALqAeYC4AHZAuAB2QLgAdkC4AHZAuAB2QLgAdkC4AHZAuAB2QL3AfYSAALq + AeYC4AHZAuAB2QLgAdkC4AHZAuAB2QLgAdkC4AHZAuAB2QL3AfZsAAP7A/ECyAHDArgBsAK4AbACuAGw + ArgBsAK4AbACuAGwArgBsAK4AbACuAGwArgBsALIAcMD8Qb7A/ECyAHDArgBsAK4AbACuAGwArgBsAK4 + AbACuAGwArgBsAK4AbACuAGwArgBsALIAcMD8Qb7A/ECyAHDArgBsAK4AbACuAGwArgBsAK4AbACuAGw + ArgBsAK4AbACuAGwArgBsALIAcMD8Qb7A/ECyAHDArgBsAK4AbACuAGwArgBsAK4AbACuAGwArgBsAK4 + AbACuAGwArgBsALIAcMD8QP7A/0D+gLAAbgL/wP+Af0C/gH8Av0B+wL9AfoC/AH4Av4B+QLAAbgD+gb9 + A/oCwAG4C/8D/gH9Av4B/AL9AfsC/QH6AvwB+AL+AfkCwAG4A/oG/QP6AsABuAv/A/4B/QL+AfwC/QH7 + Av0B+gL8AfgC/gH5AsABuAP6Bv0D+gLAAbgL/wP+Af0C/gH8Av0B+wL9AfoC/AH4Av4B+QLAAbgD+gP9 + BgACyQHBBv8D/gL9AfwC/QH7AvwB+QL7AfgC+gH2AvgB9AL7AfYCyQHBDAACyQHBBv8D/gL9AfwC/QH7 + AvwB+QL7AfgC+gH2AvgB9AL7AfYCyQHBDAACyQHBBv8D/gL9AfwC/QH7AvwB+QL7AfgC+gH2AvgB9AL7 + AfYCyQHBDAACyQHBBv8D/gL9AfwC/QH7AvwB+QL7AfgC+gH2AvgB9AL7AfYCyQHBDAACzwHHA/8D/gL9 + AfwC/QH7AvwB+QL7AfgC+gH2AvgB9AL3AfIC+wH1As8BxwwAAs8BxwP/A/4C/QH8Av0B+wL8AfkC+wH4 + AvoB9gL4AfQC9wHyAvsB9QLPAccMAALPAccD/wP+Av0B/AL9AfsC/AH5AvsB+AL6AfYC+AH0AvcB8gL7 + AfUCzwHHDAACzwHHA/8D/gL9AfwC/QH7AvwB+QL7AfgC+gH2AvgB9AL3AfIC+wH1As8BxwwAAtAByAL/ + Af4C/QH8AdwBzwHrAXsBSAG/AXsBSAG/AXsBSAG/AYsBXgHGAegB4QHrAvYB8AL6AfMC0AHIDAAC0AHI + Av8B/gL9AfwC/QH7AYIBwgG0AVkBrgGdAVkBrgGdAakB0wHIAvcB8gL2AfAC+gHzAtAByAwAAtAByAL/ + Af4C/QH8Av0B+wHeAaIBqQG/AUgBWQG/AUgBWQHcAaABpgL3AfIC9gHwAvoB8wLQAcgMAALQAcgC/wH+ + Av0B/AL9AfsBvwF7AUgBvwF7AUgBvwF7AUgB3AG6AZ4C9wHyAvYB8AL6AfMC0AHIDAAC0gHLAv4D/QH7 + Ad0B0QHtAYIBTwHGAvoB9gL4AfQBggFPAcYB2QHMAeUC9QHuAvoB8gLSAcsMAALSAcsC/gP9AfsC/AH5 + AvsB+AL6AfYB0gHoAeABYAG1AaQC9gHwAvUB7gL6AfIC0gHLDAAC0gHLAv4D/QH7AvwB+QL7AfgB4AGl + AasB0wF6AYUC9wHyAvYB8AL1Ae4C+gHyAtIBywwAAtIBywL+A/0B+wL8AfkBxgGCAU8B7AHbAcwC+AH0 + AvcB8gL2AfAC9QHuAvoB8gLSAcsMAALVAc0C/gP8AfkB3wHSAe0BigFXAc4BmAFsAdMBigFXAc4BpQF/ + AdcB5wHhAekC9AHsAvkB7wLVAc0MAALVAc0C/gP8AfkC+wH4AbIB3AHSAWgBvQGsAWgBvQGsAa4B2QHN + AvUB7gL0AewC+QHvAtUBzQwAAtUBzQL+A/wB+QL7AfgC+gH2AeMBqAGuAdkBfwGLAvYB8AL1Ae4C9AHs + AvkB7wLVAc0MAALVAc0C/gP8AfkC+wH4Ac4BigFXAe4B3QHMAvcB8gL2AfAC9QHuAvQB7AL5Ae8C1QHN + DAAC1gHOAv0D+wH4AeAB0wHuAZIBXwHWAvcB8gHdAdAB6QGSAV8B1gL0AewC8QHnAvcB6gLWAc4MAALW + Ac4C/QP7AfgC+gH2AXABxQG0AdUB6wHiAvYB8AL1Ae4C9AHsAvEB5wL3AeoC1gHODAAC1gHOAv0D+wH4 + AvoB9gL4AfQB5wGrAbEB3gGFAZAC9QHuAvQB7ALxAecC9wHqAtYBzgwAAtYBzgL9A/sB+AL6AfYB1gGS + AV8B7wHeAc0C9gHwAvUB7gL0AewC8QHnAvcB6gLWAc4MAALYAdAC/QP6AfYB4AHTAe4BmAFlAdwBmAFl + AdwBmAFlAdwBxQGsAeMC8QHnAuwB3wL0AeUC2AHQDAAC2AHQAv0D+gH2AvgB9AG3AeEB1QF2AcsBugF2 + AcsBugGVAdUBxgLxAecC7AHfAvQB5QLYAdAMAALYAdAC/QP6AfYC+AH0AeoBrwG0AdwBZQF2AdwBZQF2 + AegBrAGxAvEB5wLsAd8C9AHlAtgB0AwAAtgB0AL9A/oB9gL4AfQB3AGYAWUB7wHeAc0C9QHuAvQB7ALx + AecC7AHfAvQB5QLYAdAMAALaAdIC/AP4AfQC9wHyAvYB8AL1Ae4C9AHsAvEB5wLsAd8C6AHZAvMB4gLa + AdIMAALaAdIC/AP4AfQC9wHyAvYB8AL1Ae4C9AHsAvEB5wLsAd8C6AHZAvMB4gLaAdIMAALaAdIC/AP4 + AfQC9wHyAvYB8AL1Ae4C9AHsAvEB5wLsAd8C6AHZAvMB4gLaAdIMAALaAdIC/AP4AfQC9wHyAvYB8AL1 + Ae4C9AHsAvEB5wLsAd8C6AHZAvMB4gLaAdIMAALbAdMC/AP3AfIC9gHwAvUB7gL0AewC8QHnAuwB3wLo + AdkC5gHVAvIB4QLbAdMMAALbAdMC/AP3AfIC9gHwAvUB7gL0AewC8QHnAuwB3wLoAdkC5gHVAvIB4QLb + AdMMAALbAdMC/AP3AfIC9gHwAvUB7gL0AewC8QHnAuwB3wLoAdkC5gHVAvIB4QLbAdMMAALbAdMC/AP3 + AfIC9gHwAvUB7gL0AewC8QHnAuwB3wLoAdkC5gHVAvIB4QLbAdMMAALcAdUC+wP2AfAC9QHuAvQB7ALx + AecC7AHfAugB2QLmAdUC5QHUAvIB4QLcAdUMAALcAdUC+wP2AfAC9QHuAvQB7ALxAecC7AHfAugB2QLm + AdUC5QHUAvIB4QLcAdUMAALcAdUC+wP2AfAC9QHuAvQB7ALxAecC7AHfAugB2QLmAdUC5QHUAvIB4QLc + AdUMAALcAdUC+wP2AfAC9QHuAvQB7ALxAecC7AHfAugB2QLmAdUC5QHUAvIB4QLcAdUMAALdAdYC+gH0 + AvUB7gL0AewC8QHnAuwB3wLoAdkC5gHVAqQBkwKkAZMCpAGTAskBwAwAAt0B1gL6AfQC9QHuAvQB7ALx + AecC7AHfAugB2QLmAdUCpAGTAqQBkwKkAZMCyQHADAAC3QHWAvoB9AL1Ae4C9AHsAvEB5wLsAd8C6AHZ + AuYB1QKkAZMCpAGTAqQBkwLJAcAMAALdAdYC+gH0AvUB7gL0AewC8QHnAuwB3wLoAdkC5gHVAqQBkwKk + AZMCpAGTAskBwAwAAt4B1wL6AfMC9AHsAvEB5wLsAd8C6AHZAuYB1QLlAdQCtgGlA/8C3gHXAvcB9gwA + At4B1wL6AfMC9AHsAvEB5wLsAd8C6AHZAuYB1QLlAdQCtgGlA/8C3gHXAvcB9gwAAt4B1wL6AfMC9AHs + AvEB5wLsAd8C6AHZAuYB1QLlAdQCtgGlA/8C3gHXAvcB9gwAAt4B1wL6AfMC9AHsAvEB5wLsAd8C6AHZ + AuYB1QLlAdQCtgGlA/8C3gHXAvcB9gwAAt8B2QL8AfUC+QHvAvYB6gL0AeUC8wHiAvIB4QLyAeECwgGx + At8B2QL3AfYPAALfAdkC/AH1AvkB7wL2AeoC9AHlAvMB4gLyAeEC8gHhAsIBsQLfAdkC9wH2DwAC3wHZ + AvwB9QL5Ae8C9gHqAvQB5QLzAeIC8gHhAvIB4QLCAbEC3wHZAvcB9g8AAt8B2QL8AfUC+QHvAvYB6gL0 + AeUC8wHiAvIB4QLyAeECwgGxAt8B2QL3AfYPAALqAeYC4AHZAuAB2QLgAdkC4AHZAuAB2QLgAdkC4AHZ + AuAB2QL3AfYSAALqAeYC4AHZAuAB2QLgAdkC4AHZAuAB2QLgAdkC4AHZAuAB2QL3AfYSAALqAeYC4AHZ + AuAB2QLgAdkC4AHZAuAB2QLgAdkC4AHZAuAB2QL3AfYSAALqAeYC4AHZAuAB2QLgAdkC4AHZAuAB2QLg + AdkC4AHZAuAB2QL3AfYMAAFCAU0BPgcAAT4DAAEoAwABQAMAAUADAAEBAQABAQYAAQIWAAP/AgABAQEA + AQEFAAEBAQABAQUAAQEBAAEBBQABAQEAAQEFAAEBAQABAQUAAQEBAAEBBQABAQEAAQEFAAEBAQABAQUA + AQEBAAEBBQABAQEAAQEFAAEBAQABAQUAAQEBAAEBBQABAQEAAQEFAAEBAQABAQUAAQEBAAEBBAABgAED + AQABAQQABP8CAAH+AQEC/wUAAQEBiAMAAcABAQEAAQEBiAEAAYABAQHAAQEBAAEBAY8B/wGAAQEBwAEB + AQABAQL/AYABAQHAAQEBAAEBAv8BgAEBAcABAQEAAQEBjwH/AYABAQHAAQEBAAEBAYwBAQGAAQEBwAEB + AQABAQGPAf8BgAEBAcABAwEAAR8C/wGAAQEBwAEDAfABHwL/AYABAQHAAQMB8AEfAY8B/wGAAQEBwAED + AfABHwGMAQEBgAEBAcABAwHwAR8BjwH/AYABAQHAAQMB8AEfBP8BwAEDAfABHwQABP8EAAT/AcABAwHA + AQME/wHAAQMBwAEDAcABAwIAAcABAwHAAQMBwAEDAgABwAEDAcABAwHxAY8BzAHBAcABAwHAAQMB4wHH + AcABwQHAAQMBwAEDAccB4wHAAeMBwAEDAcABAwGPAfEB4QHjAcABAwHAAQMBxwHjAeEB4wHAAQMBwAED + AeMBxwHhAf8BwAEDAcABAwHxAY8B8wH/AcABAwHAAQMB+QGfAv8BwAEDAcABAwT/AcABBwHAAQcE/wHA + AQ8BwAEPBP8QAAHAAQMBwAEDAcABAwHAAQMBwAEDAcABAwHAAQMBwAEDAcABAwHAAQMBwAEDAcABAwHA + AQMBwAEDAcABAwHAAQMBwAEDAcABAwHAAQMBwAEDAcABAwHAAQMBwAEDAcABAwHAAQMBwAEDAcABAwHA + AQMBwAEDAcABAwHAAQMBwAEDAcABAwHAAQMBwAEDAcABAwHAAQMBwAEDAcABAwHAAQMBwAEDAcABAwHA + AQMBwAEDAcABAwHAAQMBwAEDAcABAwHAAQcBwAEHAcABBwHAAQcBwAEPAcABDwHAAQ8BwAEPCw== + + + + 132, 17 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAJ4SURBVDhPjdNdSFNhHMfx56Kb3i7s0i66mTeSkDddSBBh + zC6iiUHtQrAGCYZJSgyUmfm+HKmoOYdmVNOsDE3ETAVrBKViCopZc669+Tbn5jybe/XX8zzkgZMEHfhy + /s/hnA/PgXMI+XNMa8nNKS0p/5/YvfvPiefJGlIpmLVY/3QDG+M5EOYeIO7oAFaeS9voBrv3APClilRj + +y32vG8QsrfA87UAH/TpGHlfL2l0rBn9VSdbDwCfq0htfOsVYutGXtz7GtN9d+D0eLAqCHDQbH4/3plM + qC6TD2dpNEkSxFRO6mLubkRXnvHYPNGjwrzZjJnFRVjcbiysrqJraAjsyCwuzpMg4/fJo+jaC4QdT3hs + Nj1V4vvSEkdWfD6ONBuNYkkZGRpxF6OlpDHs6kTQ2sZj83jHNfxYXubIJn2FfYTthL2OvLAwXwSGS0jL + rq0dgrmFx+YxQxbMVitHvIGABHHs7CA9P79ABAbVRB9c1sO/2Mhj83CrAhabjSPbu7sSZC0YxPnc3Lsi + 0K8m7cLPJvjmdTw2DzVdhpUCDBFCIQmyRdfnVKoiEegtIp3+hXp4Zmt5bB5ouASb3c6RYCQiQfx0fTY7 + +54IdBcQo2+uDu7pCh6b+3Ry2B0OjoSiUQkiUCBVqVQz4DDthOEWGfDO0k95soznpbvofXgRTqeTI9FY + TIIEKHhaoShlQAJNlicnbSONqX7LYF5kc6oCW9+q0VNzAS6XC05afG8PMVokHkeYYmE6J6alaSVfoyGX + ZOpVxPCyJPHjRNeVX+qrh+xHZLLmo8nJdcdTUmr/7phMdvvAP8EuNOSQM7psoqm8Th7T5Sla4j9K+A2s + V10KzrJmywAAAABJRU5ErkJggg== + + + + + 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 + RpkLgwRoAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAG9SURBVDhPjZLNSwJRFMVdFu1a1DrIhRC0CCKiVUG5KIi0 + KGjRxkpKwpAJ1BgIpEWboH8gwqIoCiHaBv4L1UIQ+8ISkcpxZvz2ds/QRPLMenB4PDj3x73nXYvl68xs + bk5My/JiMzlludv0C7czEFjSKhV6LxYpreuUVFV6yuXoUVEMRaJRgmcqGLQ2hEz6/cu5UokyXPiazdJ9 + JkOxVIruXl7oNpmkw6srwoGvIWRCktwqA940rSFkLxwmU9axsaDQxbjPt6KXy/TB7f8GQScYB14BMOr1 + ruY5AyWfbwoBAF4BMOLxeAoMUAuFphAEC68AGHa710rVKumcAyCXF2mSXHFDkbPUd7D4HXgFwJDL5S0z + oMA5mJDI6SvthhJ1maR5RHgFwODCwnqlVqMij2FCzo+faUeO1WWCPYFXAPTPz/uqDEAXJuT08IFC/pu6 + TBQeEV4B0Dc7K9V4USoMAOTkIEFz9mtDR/vxbwiWDV4B0OtwbGDTatyFCfk5jvk7GmcErwCw2u0BY1f/ + gGDZ4P0JaOVHR+fAwJYJMCAsZIJgMRK+GHtS5De8qGGh1tLO6mnp6lpvs9m2/yN4UYPaT6iBRnEAJMyK + AAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGzSURBVDhPjZK9S4JRFMYdi7aGmoUchKAhCImmgnRIiuzD + QcjFSkpCEQM/EFyCxlqamuwPaHFoCRyarKmCyIoCTUQ0X/X1+z2dR3olumZdeLhceM6Pc557NJqvsxYK + mVfD4c1+WgmHx1S/cK8EAluVVosK9TplZZlS5TK9lUr0KkkdncfjBM9yMKjrCVny+7dLjQbluPC9WKSX + XI4eMhm6S6fpNpWis1iMcODrCTH7fM4yA/KVSk/IcTRKqnRGY1DoYsHr3ZGbTfrg9n+DoBOMA68AmHe7 + d6ucgVSt9oUAAK8AmHO5XDUGlGu1vhAEC68AmHU69xrtNsmcAyCOkyRdPxeEcfA78AqAGYfD3WRAjXMA + ZOPovgP4mUmWR4RXAEzb7Z6WolCdxwBk/fCGEk95YRzsCbwCYMpm87YZgC4AWYxcUeIxJ2QicXfwCoBJ + q9Wn8KK0GACIKXDZ1elFstsJlg1eATBhsexj0xTuQoWo46jB4osrPB68AkBnMgU6u/oHBMsG73fAID9G + Rg2GiAroQFjIBMFiJHwx9qTOb3hRw0KtZpg1PqDVeob0+oP/CF7UoPYTXb5IoCRPHYoAAAAASUVORK5C + YII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAG1SURBVDhPjZK9S4JRFMYdi7aGmoUchKAhCImmgnRIirRy + EHKxkpJQxMAPhJZo7l+oxqAhtwiEWgIjKiEIIuE1kZfM1+/P03mk9yW4Zl14uFx4zo9znnt0uu+zGo1a + V2KxjX6yx2Jjql+47eHwZrnVony9TrlKhaRSidLFIr0pSlfniQTBsxyJGHpClkKhrWKjQTIXvhcK9CrL + 9JzN0lMmQ4+SRCfxOOHA1xNiDQY9JQZ8lMs9IUfHx6TKYDZHhC4WAoHtSrNJn9z+bxB0gnHgFQDzPt9O + lTNQqtW+EADgFQBzXq+3xoBSrdYXgmDhFQCzHs9uo92mCucAyK37RdPDYVoLFr8DrwCYcbt9TQbUOAdA + rtdTlLnPC+PkeER4BcC0y+VvdTpU5zEAuVxLakqdprVgsSfwCoAppzPQZgC6AORi8YakO1nIROHu4BUA + kw5HsMOL0mIAIGeWK5KSspaJ+jtYNngFwITNtodN63AXKkQdRw0WkDKPB68AMFgs4e6u/gHBssH7EzDI + j5FRk2lfBXQhLGSCYDESvhh7Uuc3vKhhoVY3zBof0Ov9Q0bjwX8EL2pQ+wUVkUjMVKxfkgAAAABJRU5E + rkJggg== + + + + + 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 + + + \ No newline at end of file diff --git a/NBTExplorer.csproj b/NBTExplorer.csproj new file mode 100644 index 0000000..053496f --- /dev/null +++ b/NBTExplorer.csproj @@ -0,0 +1,109 @@ + + + + Debug + x86 + 8.0.30703 + 2.0 + {8A458245-8176-4599-95CD-3CA39F2435CE} + WinExe + Properties + NBTPlus + NBTExplorer + v4.0 + Client + 512 + + + x86 + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + x86 + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\Substrate\SubstrateCS\bin\Release\Ionic.Zlib.dll + + + ..\Substrate\SubstrateCS\bin\Release\Substrate.dll + + + + + + + + + + + + + + + Form + + + About.cs + + + Form + + + Form1.cs + + + + + About.cs + + + Form1.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + + + + \ No newline at end of file diff --git a/NBTExplorer.sln b/NBTExplorer.sln new file mode 100644 index 0000000..e3dd32f --- /dev/null +++ b/NBTExplorer.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual C# Express 2010 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NBTExplorer", "NBTExplorer.csproj", "{8A458245-8176-4599-95CD-3CA39F2435CE}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x86 = Debug|x86 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {8A458245-8176-4599-95CD-3CA39F2435CE}.Debug|x86.ActiveCfg = Debug|x86 + {8A458245-8176-4599-95CD-3CA39F2435CE}.Debug|x86.Build.0 = Debug|x86 + {8A458245-8176-4599-95CD-3CA39F2435CE}.Release|x86.ActiveCfg = Release|x86 + {8A458245-8176-4599-95CD-3CA39F2435CE}.Release|x86.Build.0 = Release|x86 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Program.cs b/Program.cs new file mode 100644 index 0000000..9d27e9f --- /dev/null +++ b/Program.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Windows.Forms; + +namespace NBTPlus +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main () + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Form1()); + } + } +} diff --git a/Properties/AssemblyInfo.cs b/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..bfdaa1a --- /dev/null +++ b/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("NBTPlus")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("NBTPlus")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2011")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("11f3587a-6155-499e-b7b5-ebd48fdca479")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Properties/Resources.Designer.cs b/Properties/Resources.Designer.cs new file mode 100644 index 0000000..53a4f26 --- /dev/null +++ b/Properties/Resources.Designer.cs @@ -0,0 +1,77 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.239 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace NBTPlus.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("NBTPlus.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + internal static System.Drawing.Bitmap folder_open { + get { + object obj = ResourceManager.GetObject("folder-open", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap folder_open_document { + get { + object obj = ResourceManager.GetObject("folder-open-document", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/Properties/Resources.resx b/Properties/Resources.resx new file mode 100644 index 0000000..418c538 --- /dev/null +++ b/Properties/Resources.resx @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\folder-open-document.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\folder-open.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/Properties/Settings.Designer.cs b/Properties/Settings.Designer.cs new file mode 100644 index 0000000..a1bb424 --- /dev/null +++ b/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.239 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace NBTPlus.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/Properties/Settings.settings b/Properties/Settings.settings new file mode 100644 index 0000000..3964565 --- /dev/null +++ b/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Resources/folder-open-document.png b/Resources/folder-open-document.png new file mode 100644 index 0000000000000000000000000000000000000000..c02157b17c897a994a392db3e36ec867eb8a4976 GIT binary patch literal 677 zcmV;W0$TlvP)TfaHqHvS6#Fy)KR%l`R_}u-QLF*%! zb=W&`6xsX~xJZvmrNqjUt9J*F)(&3r++>M_GuYYwiJS>m)8NkjneB633WUf6}8?xuu5maJ!} z{x$(0&ClaZx%_yoUcVysum{2#1*26`5F@As=iGZon#6uws8-P z#6Ejy1fZO~^9+SQA@)1!sEs~ld>4$bodg~t#vp!;?ncG~_D~d7*U@_a`uTRJ{YwcZ z;7IJ7$oeNzNNSvq6!pO8-^@RCwBqQ_pJ?K^T2Iv(|3?(UNFE z=pkyWrCx-Hr=GkC3SK8iM;6ETjMX3Ko@mx>{c<~^`qYwnO)*n@BThmqxp~jGG zvO6>D_f2LuSx|7;$IQ-t@9lfv?s(M&*x`AYqp5`d8yiW2$Gq?pw?iAJX0AWF*Q$Mj zM>iwKP9hkafRICZs_&z^c=KU)YfSb?96COQk>Y7Y%{{bsKV$pDD@>KI<@jC@fH)!} zX|muTj8-sF7yiLfjGdW9rxT&s>Od1CAy*c(=Gv4eG&yjPiPp%VNK8d&G(+s}HTnVs zu1$G9)uzJ=unTKV2(-g43NE8@v!EKfWYX&!eAVxPG&+V>u?y!RRyrf5GdF-Zl2&CB zcs&@wH%zeB85)WmV0F^&@C$9dPE}XLd6QG{TU?t&3a)auCC~ z2!?u~=%I1MG=fL-e!I;veEXtzn_xAo$kw$3ua(w+jc{wdXzQ6L?k@o>5-SYZ|9~3V zgR%~6s|P+I3)JgvThBcHqk;!dQ1~6s