diff --git a/CSharp/Environments/WindowsForms/Plugins/UniversalEditor.Plugins.UnrealEngine.UserInterface.WindowsForms/Editors/UnrealEngine/UnrealPackageEditor.Designer.cs b/CSharp/Environments/WindowsForms/Plugins/UniversalEditor.Plugins.UnrealEngine.UserInterface.WindowsForms/Editors/UnrealEngine/UnrealPackageEditor.Designer.cs
new file mode 100644
index 00000000..31bd8aa7
--- /dev/null
+++ b/CSharp/Environments/WindowsForms/Plugins/UniversalEditor.Plugins.UnrealEngine.UserInterface.WindowsForms/Editors/UnrealEngine/UnrealPackageEditor.Designer.cs
@@ -0,0 +1,529 @@
+namespace UniversalEditor.Editors.UnrealEngine
+{
+ partial class UnrealPackageEditor
+ {
+ ///
+ /// 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 Component Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.tv = new System.Windows.Forms.TreeView();
+ this.splitContainer1 = new System.Windows.Forms.SplitContainer();
+ this.pnlExportTable = new System.Windows.Forms.Panel();
+ this.button5 = new System.Windows.Forms.Button();
+ this.button6 = new System.Windows.Forms.Button();
+ this.button7 = new System.Windows.Forms.Button();
+ this.button8 = new System.Windows.Forms.Button();
+ this.lvExportTable = new System.Windows.Forms.ListView();
+ this.chExportObjectName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+ this.chExportObjectParent = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+ this.chExportObjectClass = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+ this.chExportObjectFlags = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+ this.chExportObjectOffset = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+ this.chExportObjectSize = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+ this.pnlHeritageTable = new System.Windows.Forms.Panel();
+ this.button9 = new System.Windows.Forms.Button();
+ this.button10 = new System.Windows.Forms.Button();
+ this.button11 = new System.Windows.Forms.Button();
+ this.button12 = new System.Windows.Forms.Button();
+ this.lvHeritageTable = new System.Windows.Forms.ListView();
+ this.chHeritageGUID = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+ this.pnlImportTable = new System.Windows.Forms.Panel();
+ this.button1 = new System.Windows.Forms.Button();
+ this.button2 = new System.Windows.Forms.Button();
+ this.button3 = new System.Windows.Forms.Button();
+ this.button4 = new System.Windows.Forms.Button();
+ this.lvImportTable = new System.Windows.Forms.ListView();
+ this.chImportPackageName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+ this.chImportObjectName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+ this.chImportClassName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+ this.pnlNameTable = new System.Windows.Forms.Panel();
+ this.cmdNameClear = new System.Windows.Forms.Button();
+ this.cmdNameRemove = new System.Windows.Forms.Button();
+ this.cmdNameModify = new System.Windows.Forms.Button();
+ this.cmdNameAdd = new System.Windows.Forms.Button();
+ this.lvNameTable = new System.Windows.Forms.ListView();
+ this.chName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+ this.chFlags = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+ this.splitContainer1.Panel1.SuspendLayout();
+ this.splitContainer1.Panel2.SuspendLayout();
+ this.splitContainer1.SuspendLayout();
+ this.pnlExportTable.SuspendLayout();
+ this.pnlHeritageTable.SuspendLayout();
+ this.pnlImportTable.SuspendLayout();
+ this.pnlNameTable.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // tv
+ //
+ this.tv.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.tv.HideSelection = false;
+ this.tv.Location = new System.Drawing.Point(0, 0);
+ this.tv.Name = "tv";
+ this.tv.Size = new System.Drawing.Size(170, 267);
+ this.tv.TabIndex = 0;
+ this.tv.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.tv_AfterSelect);
+ this.tv.MouseDown += new System.Windows.Forms.MouseEventHandler(this.tv_MouseDown);
+ //
+ // splitContainer1
+ //
+ this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1;
+ this.splitContainer1.Location = new System.Drawing.Point(0, 0);
+ this.splitContainer1.Name = "splitContainer1";
+ //
+ // splitContainer1.Panel1
+ //
+ this.splitContainer1.Panel1.Controls.Add(this.tv);
+ //
+ // splitContainer1.Panel2
+ //
+ this.splitContainer1.Panel2.Controls.Add(this.pnlExportTable);
+ this.splitContainer1.Panel2.Controls.Add(this.pnlHeritageTable);
+ this.splitContainer1.Panel2.Controls.Add(this.pnlImportTable);
+ this.splitContainer1.Panel2.Controls.Add(this.pnlNameTable);
+ this.splitContainer1.Size = new System.Drawing.Size(558, 267);
+ this.splitContainer1.SplitterDistance = 170;
+ this.splitContainer1.TabIndex = 1;
+ //
+ // pnlExportTable
+ //
+ this.pnlExportTable.Controls.Add(this.button5);
+ this.pnlExportTable.Controls.Add(this.button6);
+ this.pnlExportTable.Controls.Add(this.button7);
+ this.pnlExportTable.Controls.Add(this.button8);
+ this.pnlExportTable.Controls.Add(this.lvExportTable);
+ this.pnlExportTable.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.pnlExportTable.Enabled = false;
+ this.pnlExportTable.Location = new System.Drawing.Point(0, 0);
+ this.pnlExportTable.Name = "pnlExportTable";
+ this.pnlExportTable.Size = new System.Drawing.Size(384, 267);
+ this.pnlExportTable.TabIndex = 2;
+ this.pnlExportTable.Visible = false;
+ //
+ // button5
+ //
+ this.button5.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.button5.FlatStyle = System.Windows.Forms.FlatStyle.System;
+ this.button5.Location = new System.Drawing.Point(306, 3);
+ this.button5.Name = "button5";
+ this.button5.Size = new System.Drawing.Size(75, 23);
+ this.button5.TabIndex = 1;
+ this.button5.Text = "&Clear";
+ this.button5.UseVisualStyleBackColor = true;
+ //
+ // button6
+ //
+ this.button6.FlatStyle = System.Windows.Forms.FlatStyle.System;
+ this.button6.Location = new System.Drawing.Point(165, 3);
+ this.button6.Name = "button6";
+ this.button6.Size = new System.Drawing.Size(75, 23);
+ this.button6.TabIndex = 1;
+ this.button6.Text = "&Remove...";
+ this.button6.UseVisualStyleBackColor = true;
+ //
+ // button7
+ //
+ this.button7.FlatStyle = System.Windows.Forms.FlatStyle.System;
+ this.button7.Location = new System.Drawing.Point(84, 3);
+ this.button7.Name = "button7";
+ this.button7.Size = new System.Drawing.Size(75, 23);
+ this.button7.TabIndex = 1;
+ this.button7.Text = "&Modify...";
+ this.button7.UseVisualStyleBackColor = true;
+ //
+ // button8
+ //
+ this.button8.FlatStyle = System.Windows.Forms.FlatStyle.System;
+ this.button8.Location = new System.Drawing.Point(3, 3);
+ this.button8.Name = "button8";
+ this.button8.Size = new System.Drawing.Size(75, 23);
+ this.button8.TabIndex = 1;
+ this.button8.Text = "&Add...";
+ this.button8.UseVisualStyleBackColor = true;
+ //
+ // lvExportTable
+ //
+ this.lvExportTable.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.lvExportTable.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
+ this.chExportObjectName,
+ this.chExportObjectParent,
+ this.chExportObjectClass,
+ this.chExportObjectFlags,
+ this.chExportObjectOffset,
+ this.chExportObjectSize});
+ this.lvExportTable.FullRowSelect = true;
+ this.lvExportTable.GridLines = true;
+ this.lvExportTable.HideSelection = false;
+ this.lvExportTable.Location = new System.Drawing.Point(3, 32);
+ this.lvExportTable.Name = "lvExportTable";
+ this.lvExportTable.Size = new System.Drawing.Size(378, 232);
+ this.lvExportTable.TabIndex = 0;
+ this.lvExportTable.UseCompatibleStateImageBehavior = false;
+ this.lvExportTable.View = System.Windows.Forms.View.Details;
+ this.lvExportTable.ItemDrag += new System.Windows.Forms.ItemDragEventHandler(this.lvExportTable_ItemDrag);
+ //
+ // chExportObjectName
+ //
+ this.chExportObjectName.Text = "Object";
+ this.chExportObjectName.Width = 84;
+ //
+ // chExportObjectParent
+ //
+ this.chExportObjectParent.Text = "Parent";
+ this.chExportObjectParent.Width = 53;
+ //
+ // chExportObjectClass
+ //
+ this.chExportObjectClass.Text = "Class";
+ this.chExportObjectClass.Width = 81;
+ //
+ // chExportObjectFlags
+ //
+ this.chExportObjectFlags.Text = "Flags";
+ this.chExportObjectFlags.Width = 49;
+ //
+ // chExportObjectOffset
+ //
+ this.chExportObjectOffset.Text = "Offset";
+ this.chExportObjectOffset.Width = 45;
+ //
+ // chExportObjectSize
+ //
+ this.chExportObjectSize.Text = "Size";
+ //
+ // pnlHeritageTable
+ //
+ this.pnlHeritageTable.Controls.Add(this.button9);
+ this.pnlHeritageTable.Controls.Add(this.button10);
+ this.pnlHeritageTable.Controls.Add(this.button11);
+ this.pnlHeritageTable.Controls.Add(this.button12);
+ this.pnlHeritageTable.Controls.Add(this.lvHeritageTable);
+ this.pnlHeritageTable.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.pnlHeritageTable.Enabled = false;
+ this.pnlHeritageTable.Location = new System.Drawing.Point(0, 0);
+ this.pnlHeritageTable.Name = "pnlHeritageTable";
+ this.pnlHeritageTable.Size = new System.Drawing.Size(384, 267);
+ this.pnlHeritageTable.TabIndex = 3;
+ this.pnlHeritageTable.Visible = false;
+ //
+ // button9
+ //
+ this.button9.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.button9.FlatStyle = System.Windows.Forms.FlatStyle.System;
+ this.button9.Location = new System.Drawing.Point(306, 3);
+ this.button9.Name = "button9";
+ this.button9.Size = new System.Drawing.Size(75, 23);
+ this.button9.TabIndex = 1;
+ this.button9.Text = "&Clear";
+ this.button9.UseVisualStyleBackColor = true;
+ //
+ // button10
+ //
+ this.button10.FlatStyle = System.Windows.Forms.FlatStyle.System;
+ this.button10.Location = new System.Drawing.Point(165, 3);
+ this.button10.Name = "button10";
+ this.button10.Size = new System.Drawing.Size(75, 23);
+ this.button10.TabIndex = 1;
+ this.button10.Text = "&Remove...";
+ this.button10.UseVisualStyleBackColor = true;
+ //
+ // button11
+ //
+ this.button11.FlatStyle = System.Windows.Forms.FlatStyle.System;
+ this.button11.Location = new System.Drawing.Point(84, 3);
+ this.button11.Name = "button11";
+ this.button11.Size = new System.Drawing.Size(75, 23);
+ this.button11.TabIndex = 1;
+ this.button11.Text = "&Modify...";
+ this.button11.UseVisualStyleBackColor = true;
+ //
+ // button12
+ //
+ this.button12.FlatStyle = System.Windows.Forms.FlatStyle.System;
+ this.button12.Location = new System.Drawing.Point(3, 3);
+ this.button12.Name = "button12";
+ this.button12.Size = new System.Drawing.Size(75, 23);
+ this.button12.TabIndex = 1;
+ this.button12.Text = "&Add...";
+ this.button12.UseVisualStyleBackColor = true;
+ //
+ // lvHeritageTable
+ //
+ this.lvHeritageTable.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.lvHeritageTable.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
+ this.chHeritageGUID});
+ this.lvHeritageTable.FullRowSelect = true;
+ this.lvHeritageTable.GridLines = true;
+ this.lvHeritageTable.HideSelection = false;
+ this.lvHeritageTable.Location = new System.Drawing.Point(3, 32);
+ this.lvHeritageTable.Name = "lvHeritageTable";
+ this.lvHeritageTable.Size = new System.Drawing.Size(378, 232);
+ this.lvHeritageTable.TabIndex = 0;
+ this.lvHeritageTable.UseCompatibleStateImageBehavior = false;
+ this.lvHeritageTable.View = System.Windows.Forms.View.Details;
+ //
+ // chHeritageGUID
+ //
+ this.chHeritageGUID.Text = "GUID";
+ this.chHeritageGUID.Width = 354;
+ //
+ // pnlImportTable
+ //
+ this.pnlImportTable.Controls.Add(this.button1);
+ this.pnlImportTable.Controls.Add(this.button2);
+ this.pnlImportTable.Controls.Add(this.button3);
+ this.pnlImportTable.Controls.Add(this.button4);
+ this.pnlImportTable.Controls.Add(this.lvImportTable);
+ this.pnlImportTable.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.pnlImportTable.Enabled = false;
+ this.pnlImportTable.Location = new System.Drawing.Point(0, 0);
+ this.pnlImportTable.Name = "pnlImportTable";
+ this.pnlImportTable.Size = new System.Drawing.Size(384, 267);
+ this.pnlImportTable.TabIndex = 1;
+ this.pnlImportTable.Visible = false;
+ //
+ // button1
+ //
+ this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.button1.FlatStyle = System.Windows.Forms.FlatStyle.System;
+ this.button1.Location = new System.Drawing.Point(306, 3);
+ this.button1.Name = "button1";
+ this.button1.Size = new System.Drawing.Size(75, 23);
+ this.button1.TabIndex = 1;
+ this.button1.Text = "&Clear";
+ this.button1.UseVisualStyleBackColor = true;
+ //
+ // button2
+ //
+ this.button2.FlatStyle = System.Windows.Forms.FlatStyle.System;
+ this.button2.Location = new System.Drawing.Point(165, 3);
+ this.button2.Name = "button2";
+ this.button2.Size = new System.Drawing.Size(75, 23);
+ this.button2.TabIndex = 1;
+ this.button2.Text = "&Remove...";
+ this.button2.UseVisualStyleBackColor = true;
+ //
+ // button3
+ //
+ this.button3.FlatStyle = System.Windows.Forms.FlatStyle.System;
+ this.button3.Location = new System.Drawing.Point(84, 3);
+ this.button3.Name = "button3";
+ this.button3.Size = new System.Drawing.Size(75, 23);
+ this.button3.TabIndex = 1;
+ this.button3.Text = "&Modify...";
+ this.button3.UseVisualStyleBackColor = true;
+ //
+ // button4
+ //
+ this.button4.FlatStyle = System.Windows.Forms.FlatStyle.System;
+ this.button4.Location = new System.Drawing.Point(3, 3);
+ this.button4.Name = "button4";
+ this.button4.Size = new System.Drawing.Size(75, 23);
+ this.button4.TabIndex = 1;
+ this.button4.Text = "&Add...";
+ this.button4.UseVisualStyleBackColor = true;
+ //
+ // lvImportTable
+ //
+ this.lvImportTable.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.lvImportTable.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
+ this.chImportPackageName,
+ this.chImportObjectName,
+ this.chImportClassName});
+ this.lvImportTable.FullRowSelect = true;
+ this.lvImportTable.GridLines = true;
+ this.lvImportTable.HideSelection = false;
+ this.lvImportTable.Location = new System.Drawing.Point(3, 32);
+ this.lvImportTable.Name = "lvImportTable";
+ this.lvImportTable.Size = new System.Drawing.Size(378, 232);
+ this.lvImportTable.TabIndex = 0;
+ this.lvImportTable.UseCompatibleStateImageBehavior = false;
+ this.lvImportTable.View = System.Windows.Forms.View.Details;
+ //
+ // chImportPackageName
+ //
+ this.chImportPackageName.Text = "Package";
+ this.chImportPackageName.Width = 97;
+ //
+ // chImportObjectName
+ //
+ this.chImportObjectName.Text = "Object";
+ this.chImportObjectName.Width = 134;
+ //
+ // chImportClassName
+ //
+ this.chImportClassName.Text = "Class";
+ this.chImportClassName.Width = 140;
+ //
+ // pnlNameTable
+ //
+ this.pnlNameTable.Controls.Add(this.cmdNameClear);
+ this.pnlNameTable.Controls.Add(this.cmdNameRemove);
+ this.pnlNameTable.Controls.Add(this.cmdNameModify);
+ this.pnlNameTable.Controls.Add(this.cmdNameAdd);
+ this.pnlNameTable.Controls.Add(this.lvNameTable);
+ this.pnlNameTable.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.pnlNameTable.Enabled = false;
+ this.pnlNameTable.Location = new System.Drawing.Point(0, 0);
+ this.pnlNameTable.Name = "pnlNameTable";
+ this.pnlNameTable.Size = new System.Drawing.Size(384, 267);
+ this.pnlNameTable.TabIndex = 0;
+ this.pnlNameTable.Visible = false;
+ //
+ // cmdNameClear
+ //
+ this.cmdNameClear.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.cmdNameClear.FlatStyle = System.Windows.Forms.FlatStyle.System;
+ this.cmdNameClear.Location = new System.Drawing.Point(306, 3);
+ this.cmdNameClear.Name = "cmdNameClear";
+ this.cmdNameClear.Size = new System.Drawing.Size(75, 23);
+ this.cmdNameClear.TabIndex = 1;
+ this.cmdNameClear.Text = "&Clear";
+ this.cmdNameClear.UseVisualStyleBackColor = true;
+ //
+ // cmdNameRemove
+ //
+ this.cmdNameRemove.FlatStyle = System.Windows.Forms.FlatStyle.System;
+ this.cmdNameRemove.Location = new System.Drawing.Point(165, 3);
+ this.cmdNameRemove.Name = "cmdNameRemove";
+ this.cmdNameRemove.Size = new System.Drawing.Size(75, 23);
+ this.cmdNameRemove.TabIndex = 1;
+ this.cmdNameRemove.Text = "&Remove...";
+ this.cmdNameRemove.UseVisualStyleBackColor = true;
+ //
+ // cmdNameModify
+ //
+ this.cmdNameModify.FlatStyle = System.Windows.Forms.FlatStyle.System;
+ this.cmdNameModify.Location = new System.Drawing.Point(84, 3);
+ this.cmdNameModify.Name = "cmdNameModify";
+ this.cmdNameModify.Size = new System.Drawing.Size(75, 23);
+ this.cmdNameModify.TabIndex = 1;
+ this.cmdNameModify.Text = "&Modify...";
+ this.cmdNameModify.UseVisualStyleBackColor = true;
+ //
+ // cmdNameAdd
+ //
+ this.cmdNameAdd.FlatStyle = System.Windows.Forms.FlatStyle.System;
+ this.cmdNameAdd.Location = new System.Drawing.Point(3, 3);
+ this.cmdNameAdd.Name = "cmdNameAdd";
+ this.cmdNameAdd.Size = new System.Drawing.Size(75, 23);
+ this.cmdNameAdd.TabIndex = 1;
+ this.cmdNameAdd.Text = "&Add...";
+ this.cmdNameAdd.UseVisualStyleBackColor = true;
+ //
+ // lvNameTable
+ //
+ this.lvNameTable.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.lvNameTable.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
+ this.chName,
+ this.chFlags});
+ this.lvNameTable.FullRowSelect = true;
+ this.lvNameTable.GridLines = true;
+ this.lvNameTable.HideSelection = false;
+ this.lvNameTable.Location = new System.Drawing.Point(3, 32);
+ this.lvNameTable.Name = "lvNameTable";
+ this.lvNameTable.Size = new System.Drawing.Size(378, 232);
+ this.lvNameTable.TabIndex = 0;
+ this.lvNameTable.UseCompatibleStateImageBehavior = false;
+ this.lvNameTable.View = System.Windows.Forms.View.Details;
+ //
+ // chName
+ //
+ this.chName.Text = "Name";
+ this.chName.Width = 231;
+ //
+ // chFlags
+ //
+ this.chFlags.Text = "Flags";
+ this.chFlags.Width = 134;
+ //
+ // UnrealPackageEditor
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.Controls.Add(this.splitContainer1);
+ this.Name = "UnrealPackageEditor";
+ this.Size = new System.Drawing.Size(558, 267);
+ this.splitContainer1.Panel1.ResumeLayout(false);
+ this.splitContainer1.Panel2.ResumeLayout(false);
+ this.splitContainer1.ResumeLayout(false);
+ this.pnlExportTable.ResumeLayout(false);
+ this.pnlHeritageTable.ResumeLayout(false);
+ this.pnlImportTable.ResumeLayout(false);
+ this.pnlNameTable.ResumeLayout(false);
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.TreeView tv;
+ private System.Windows.Forms.SplitContainer splitContainer1;
+ private System.Windows.Forms.Panel pnlNameTable;
+ private System.Windows.Forms.ListView lvNameTable;
+ private System.Windows.Forms.ColumnHeader chName;
+ private System.Windows.Forms.ColumnHeader chFlags;
+ private System.Windows.Forms.Button cmdNameClear;
+ private System.Windows.Forms.Button cmdNameRemove;
+ private System.Windows.Forms.Button cmdNameModify;
+ private System.Windows.Forms.Button cmdNameAdd;
+ private System.Windows.Forms.Panel pnlImportTable;
+ private System.Windows.Forms.Button button1;
+ private System.Windows.Forms.Button button2;
+ private System.Windows.Forms.Button button3;
+ private System.Windows.Forms.Button button4;
+ private System.Windows.Forms.ListView lvImportTable;
+ private System.Windows.Forms.ColumnHeader chImportPackageName;
+ private System.Windows.Forms.ColumnHeader chImportObjectName;
+ private System.Windows.Forms.ColumnHeader chImportClassName;
+ private System.Windows.Forms.Panel pnlExportTable;
+ private System.Windows.Forms.Button button5;
+ private System.Windows.Forms.Button button6;
+ private System.Windows.Forms.Button button7;
+ private System.Windows.Forms.Button button8;
+ private System.Windows.Forms.ListView lvExportTable;
+ private System.Windows.Forms.ColumnHeader chExportObjectParent;
+ private System.Windows.Forms.ColumnHeader chExportObjectClass;
+ private System.Windows.Forms.ColumnHeader chExportObjectName;
+ private System.Windows.Forms.ColumnHeader chExportObjectFlags;
+ private System.Windows.Forms.ColumnHeader chExportObjectOffset;
+ private System.Windows.Forms.ColumnHeader chExportObjectSize;
+ private System.Windows.Forms.Panel pnlHeritageTable;
+ private System.Windows.Forms.Button button9;
+ private System.Windows.Forms.Button button10;
+ private System.Windows.Forms.Button button11;
+ private System.Windows.Forms.Button button12;
+ private System.Windows.Forms.ListView lvHeritageTable;
+ private System.Windows.Forms.ColumnHeader chHeritageGUID;
+ }
+}
diff --git a/CSharp/Environments/WindowsForms/Plugins/UniversalEditor.Plugins.UnrealEngine.UserInterface.WindowsForms/Editors/UnrealEngine/UnrealPackageEditor.cs b/CSharp/Environments/WindowsForms/Plugins/UniversalEditor.Plugins.UnrealEngine.UserInterface.WindowsForms/Editors/UnrealEngine/UnrealPackageEditor.cs
new file mode 100644
index 00000000..aa38ef37
--- /dev/null
+++ b/CSharp/Environments/WindowsForms/Plugins/UniversalEditor.Plugins.UnrealEngine.UserInterface.WindowsForms/Editors/UnrealEngine/UnrealPackageEditor.cs
@@ -0,0 +1,222 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Text;
+using System.Windows.Forms;
+using UniversalEditor.Accessors;
+using UniversalEditor.ObjectModels.UnrealEngine;
+using UniversalEditor.UserInterface.WindowsForms;
+
+namespace UniversalEditor.Editors.UnrealEngine
+{
+ public partial class UnrealPackageEditor : Editor
+ {
+ public UnrealPackageEditor()
+ {
+ InitializeComponent();
+ Font = SystemFonts.MenuFont;
+
+ base.SupportedObjectModels.Add(typeof(UnrealPackageObjectModel));
+ }
+
+ protected override void OnObjectModelChanged(EventArgs e)
+ {
+ base.OnObjectModelChanged(e);
+
+ tv.Nodes.Clear();
+
+ UnrealPackageObjectModel upk = (ObjectModel as UnrealPackageObjectModel);
+ if (upk == null) return;
+
+ TreeNode tnToplevel = new TreeNode();
+
+ if (upk.Accessor is FileAccessor) tnToplevel.Text = System.IO.Path.GetFileName((upk.Accessor as FileAccessor).FileName);
+ if (String.IsNullOrEmpty(tnToplevel.Text)) tnToplevel.Text = "";
+
+ #region Name Table
+ {
+ TreeNode tn = new TreeNode();
+ tn.Name = "nodeNameTable";
+ tn.Text = "Name Table";
+ tnToplevel.Nodes.Add(tn);
+
+ foreach (NameTableEntry entry in upk.NameTableEntries)
+ {
+ ListViewItem lvi = new ListViewItem();
+ lvi.Tag = entry;
+ lvi.Text = entry.Name;
+ lvi.SubItems.Add(entry.Flags.ToString());
+ lvNameTable.Items.Add(lvi);
+ }
+ lvNameTable.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
+ }
+ #endregion
+ #region Export Table
+ {
+ TreeNode tn = new TreeNode();
+ tn.Name = "nodeExportTable";
+ tn.Text = "Export Table";
+ tnToplevel.Nodes.Add(tn);
+
+ foreach (ExportTableEntry entry in upk.ExportTableEntries)
+ {
+ ListViewItem lvi = new ListViewItem();
+ lvi.Tag = entry;
+ if (entry.Name == null)
+ {
+ lvi.Text = String.Empty;
+ }
+ else
+ {
+ lvi.Text = entry.Name.ToString(false);
+ }
+ if (entry.ObjectParent == null)
+ {
+ lvi.SubItems.Add(String.Empty);
+ }
+ else
+ {
+ lvi.SubItems.Add(entry.ObjectParent.ToString());
+ }
+ if (entry.ObjectClass == null)
+ {
+ lvi.SubItems.Add(String.Empty);
+ }
+ else
+ {
+ lvi.SubItems.Add(entry.ObjectClass.ToString());
+ }
+ lvi.SubItems.Add(entry.Flags.ToString());
+ lvi.SubItems.Add(entry.Offset.ToString());
+ lvi.SubItems.Add(entry.Size.ToString());
+ lvExportTable.Items.Add(lvi);
+ }
+ lvExportTable.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
+ }
+ #endregion
+ #region Import Table
+ {
+ TreeNode tn = new TreeNode();
+ tn.Name = "nodeImportTable";
+ tn.Text = "Import Table";
+ tnToplevel.Nodes.Add(tn);
+
+ foreach (ImportTableEntry entry in upk.ImportTableEntries)
+ {
+ ListViewItem lvi = new ListViewItem();
+ lvi.Tag = entry;
+ if (entry.PackageName != null)
+ {
+ lvi.Text = entry.PackageName.ToString(false);
+ }
+ else
+ {
+ lvi.Text = "(invalid)";
+ }
+ if (entry.ObjectName != null)
+ {
+ lvi.SubItems.Add(entry.ObjectName.ToString(false));
+ }
+ else
+ {
+ lvi.SubItems.Add("(invalid)");
+ }
+ if (entry.ClassName != null)
+ {
+ lvi.SubItems.Add(entry.ClassName.ToString(false));
+ }
+ else
+ {
+ lvi.SubItems.Add("(invalid)");
+ }
+ lvImportTable.Items.Add(lvi);
+ }
+ lvImportTable.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
+ }
+ #endregion
+ #region Heritage Table
+ {
+ TreeNode tn = new TreeNode();
+ tn.Name = "nodeHeritageTable";
+ tn.Text = "Heritage Table";
+ tnToplevel.Nodes.Add(tn);
+
+ foreach (Guid guid in upk.PackageGUIDs)
+ {
+ ListViewItem lvi = new ListViewItem();
+ lvi.Tag = guid;
+ lvi.Text = guid.ToString("B");
+ lvHeritageTable.Items.Add(lvi);
+ }
+ lvHeritageTable.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
+ }
+ #endregion
+
+ tv.Nodes.Add(tnToplevel);
+ }
+
+ private void tv_AfterSelect(object sender, TreeViewEventArgs e)
+ {
+ if (e.Node == null) return;
+
+ if (e.Node.Name.StartsWith("node"))
+ {
+ string name = e.Node.Name.Substring(4);
+ SwitchPanel("pnl" + name);
+ }
+ }
+
+ private void SwitchPanel(Panel panel)
+ {
+ foreach (Control ctl in splitContainer1.Panel2.Controls)
+ {
+ if (ctl == panel)
+ {
+ ctl.Enabled = true;
+ ctl.Visible = true;
+ }
+ else
+ {
+ ctl.Visible = false;
+ ctl.Enabled = false;
+ }
+ }
+ }
+ private void SwitchPanel(string panelName)
+ {
+ foreach (Control ctl in splitContainer1.Panel2.Controls)
+ {
+ if (ctl is Panel && ctl.Name == panelName)
+ {
+ ctl.Enabled = true;
+ ctl.Visible = true;
+ }
+ else
+ {
+ ctl.Visible = false;
+ ctl.Enabled = false;
+ }
+ }
+ }
+
+ private void tv_MouseDown(object sender, MouseEventArgs e)
+ {
+ if (e.Button == System.Windows.Forms.MouseButtons.Right) tv.SelectedNode = tv.HitTest(e.Location).Node;
+ }
+
+ private void lvExportTable_ItemDrag(object sender, ItemDragEventArgs e)
+ {
+ ListViewItem lvi = (e.Item as ListViewItem);
+ if (lvi == null) return;
+
+ ExportTableEntry ete = (lvi.Tag as ExportTableEntry);
+ if (ete == null) return;
+
+ string FileName = TemporaryFileManager.CreateTemporaryFile(ete.Name.Name, ete.GetData());
+
+ DataObject dobj = new DataObject("FileDrop", new string[] { FileName });
+ lvExportTable.DoDragDrop(dobj, DragDropEffects.Copy);
+ }
+ }
+}
diff --git a/CSharp/Environments/WindowsForms/Plugins/UniversalEditor.Plugins.UnrealEngine.UserInterface.WindowsForms/Editors/UnrealEngine/UnrealPackageEditor.resx b/CSharp/Environments/WindowsForms/Plugins/UniversalEditor.Plugins.UnrealEngine.UserInterface.WindowsForms/Editors/UnrealEngine/UnrealPackageEditor.resx
new file mode 100644
index 00000000..7080a7d1
--- /dev/null
+++ b/CSharp/Environments/WindowsForms/Plugins/UniversalEditor.Plugins.UnrealEngine.UserInterface.WindowsForms/Editors/UnrealEngine/UnrealPackageEditor.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/CSharp/Environments/WindowsForms/Plugins/UniversalEditor.Plugins.UnrealEngine.UserInterface.WindowsForms/Properties/AssemblyInfo.cs b/CSharp/Environments/WindowsForms/Plugins/UniversalEditor.Plugins.UnrealEngine.UserInterface.WindowsForms/Properties/AssemblyInfo.cs
new file mode 100644
index 00000000..0847cdbc
--- /dev/null
+++ b/CSharp/Environments/WindowsForms/Plugins/UniversalEditor.Plugins.UnrealEngine.UserInterface.WindowsForms/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("UniversalEditor.Plugins.UnrealEngine.UserInterface.WindowsForms")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("City of Orlando")]
+[assembly: AssemblyProduct("UniversalEditor.Plugins.UnrealEngine.UserInterface.WindowsForms")]
+[assembly: AssemblyCopyright("Copyright © City of Orlando 2013")]
+[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("66c42923-4b27-4f1e-a5d0-82426f58071c")]
+
+// 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/CSharp/Environments/WindowsForms/Plugins/UniversalEditor.Plugins.UnrealEngine.UserInterface.WindowsForms/TemporaryFileManager.cs b/CSharp/Environments/WindowsForms/Plugins/UniversalEditor.Plugins.UnrealEngine.UserInterface.WindowsForms/TemporaryFileManager.cs
new file mode 100644
index 00000000..4687f1e5
--- /dev/null
+++ b/CSharp/Environments/WindowsForms/Plugins/UniversalEditor.Plugins.UnrealEngine.UserInterface.WindowsForms/TemporaryFileManager.cs
@@ -0,0 +1,63 @@
+using System;
+
+internal static class TemporaryFileManager
+{
+ private static Random rand = new Random();
+
+ private static System.Collections.Specialized.StringCollection mvarTemporaryFileNames = new System.Collections.Specialized.StringCollection();
+ private static string mvarTemporaryFilePath = null;
+
+ public static string CreateTemporaryFile(string FileName, byte[] FileData)
+ {
+ if (mvarTemporaryFilePath == null) throw new InvalidOperationException();
+ if (!System.IO.Directory.Exists(mvarTemporaryFilePath))
+ {
+ System.IO.Directory.CreateDirectory(mvarTemporaryFilePath);
+ }
+
+ FileName = System.IO.Path.GetFileName(FileName);
+ if (FileData == null) FileData = new byte[0];
+
+ string filePath = mvarTemporaryFilePath + System.IO.Path.DirectorySeparatorChar.ToString() + FileName;
+ System.IO.File.WriteAllBytes(filePath, FileData);
+ mvarTemporaryFileNames.Add(filePath);
+ return filePath;
+ }
+
+ public static bool RegisterTemporaryDirectory(string prefix, int maxNameLength)
+ {
+ if (mvarTemporaryFilePath != null)
+ {
+ return false;
+ }
+ string name = String.Empty;
+ do
+ {
+ name = prefix + rand.Next(0, (maxNameLength * 10) - 1).ToString().PadLeft(maxNameLength - prefix.Length, '0');
+ }
+ while (System.IO.Directory.Exists(name));
+
+ string pathName = System.IO.Path.GetTempPath() + System.IO.Path.DirectorySeparatorChar.ToString() + name;
+ System.IO.Directory.CreateDirectory(pathName);
+
+ mvarTemporaryFilePath = pathName;
+ return true;
+ }
+ public static bool UnregisterTemporaryDirectory()
+ {
+ if (mvarTemporaryFilePath == null) return false;
+
+ foreach (string fileName in mvarTemporaryFileNames)
+ {
+ if (System.IO.File.Exists(fileName))
+ {
+ System.IO.File.Delete(fileName);
+ }
+ }
+ if (System.IO.Directory.Exists(mvarTemporaryFilePath))
+ {
+ System.IO.Directory.Delete(mvarTemporaryFilePath, true);
+ }
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/CSharp/Environments/WindowsForms/Plugins/UniversalEditor.Plugins.UnrealEngine.UserInterface.WindowsForms/UniversalEditor.Plugins.UnrealEngine.UserInterface.WindowsForms.csproj b/CSharp/Environments/WindowsForms/Plugins/UniversalEditor.Plugins.UnrealEngine.UserInterface.WindowsForms/UniversalEditor.Plugins.UnrealEngine.UserInterface.WindowsForms.csproj
new file mode 100644
index 00000000..7a8636cc
--- /dev/null
+++ b/CSharp/Environments/WindowsForms/Plugins/UniversalEditor.Plugins.UnrealEngine.UserInterface.WindowsForms/UniversalEditor.Plugins.UnrealEngine.UserInterface.WindowsForms.csproj
@@ -0,0 +1,83 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {049A3447-14AF-4CAE-BE0E-1C42DD1AB1CB}
+ Library
+ Properties
+ UniversalEditor
+ UniversalEditor.Plugins.UnrealEngine.UserInterface.WindowsForms
+ v3.5
+ 512
+
+
+ true
+ full
+ false
+ ..\..\..\..\Output\Debug\Plugins\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ ..\..\..\..\Output\Release\Plugins\
+ TRACE
+ prompt
+ 4
+
+
+
+
+
+
+
+
+
+ UserControl
+
+
+ UnrealPackageEditor.cs
+
+
+
+
+
+
+ {2d4737e6-6d95-408a-90db-8dff38147e85}
+ UniversalEditor.Core
+
+
+ {bcbb72bd-0ecb-4ff2-8d91-e466361fb6f9}
+ UniversalEditor.UserInterface.WindowsForms
+
+
+ {8622ebc4-8e20-476e-b284-33d472081f5c}
+ UniversalEditor.UserInterface
+
+
+ {30467e5c-05bc-4856-aadc-13906ef4cadd}
+ UniversalEditor.Essential
+
+
+ {df96f24e-fed9-4bac-8389-63590125dc61}
+ UniversalEditor.Plugins.UnrealEngine
+
+
+
+
+ UnrealPackageEditor.cs
+
+
+
+
+
\ No newline at end of file
diff --git a/CSharp/Plugins/UniversalEditor.Plugins.UnrealEngine/DataFormats/UnrealEngine/Installer/UMODDataFormat.cs b/CSharp/Plugins/UniversalEditor.Plugins.UnrealEngine/DataFormats/UnrealEngine/Installer/UMODDataFormat.cs
new file mode 100644
index 00000000..63b4924f
--- /dev/null
+++ b/CSharp/Plugins/UniversalEditor.Plugins.UnrealEngine/DataFormats/UnrealEngine/Installer/UMODDataFormat.cs
@@ -0,0 +1,185 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using UniversalEditor.Accessors;
+using UniversalEditor.IO;
+using UniversalEditor.ObjectModels.FileSystem;
+using UniversalEditor.Plugins.UnrealEngine;
+
+namespace UniversalEditor.DataFormats.UnrealEngine.Installer
+{
+ public class UMODDataFormat : DataFormat
+ {
+ private static DataFormatReference _dfr = null;
+ public override DataFormatReference MakeReference()
+ {
+ if (_dfr == null)
+ {
+ _dfr = base.MakeReference();
+ _dfr.Capabilities.Add(typeof(FileSystemObjectModel), DataFormatCapabilities.All);
+ _dfr.Filters.Add("Unreal Tournament UMOD installer", new byte?[][] { new byte?[] { 0xA3, 0xC5, 0xE3, 0x9F } }, new string[] { "*.umod" });
+ _dfr.Filters[0].MagicByteOffsets = new int[] { -20 };
+ _dfr.Sources.Add("http://wiki.beyondunreal.com/Legacy:UMOD/File_Format");
+ }
+ return _dfr;
+ }
+
+ protected override void LoadInternal(ref ObjectModel objectModel)
+ {
+ Reader br = base.Accessor.Reader;
+ FileSystemObjectModel fsom = (objectModel as FileSystemObjectModel);
+
+ // The UMOD file "header" is 20 bytes long. The header is stored in the last 20 bytes of
+ // the file (hence the quotes around the term "header").
+ br.Accessor.Seek(-20, SeekOrigin.End);
+
+ // Magic number. Used to verify this file as a UMOD installer. Always 0x9FE3C5A3.
+ uint magic = br.ReadUInt32();
+ if (magic != 0x9FE3C5A3) throw new InvalidDataFormatException("Footer does not begin with 0x9FE3C5A3");
+
+ // Byte offset of file directory in the UMOD file. (See below.)
+ uint fileDirectoryOffset = br.ReadUInt32();
+
+ // Total byte size of the UMOD file.
+ uint fileSize = br.ReadUInt32();
+
+ // UMOD file version.
+ uint formatVersion = br.ReadUInt32();
+
+ // CRC32 checksum over the file content.
+ uint checksum = br.ReadUInt32();
+
+ // The file directory describes the files stored in the first part of the UMOD file. Its
+ // byte offset in the UMOD file is given in the file "header" (see above).
+ br.Accessor.Seek(fileDirectoryOffset, SeekOrigin.Begin);
+
+ // The directory consists of an index-type file count (the index data type is described
+ // below), followed by variable-size records, each describing one file in the UMOD
+ // installer.
+ int fileCount = br.ReadINDEX();
+
+ for (int i = 0; i < fileCount; i++)
+ {
+ // Length of file name (including trailing null byte).
+ int fileNameLength = br.ReadINDEX();
+
+ // File name, with trailing null byte.
+ string fileName = br.ReadNullTerminatedString();
+
+ // Byte offset of file in UMOD file.
+ uint offset = br.ReadUInt32();
+ // Byte length of file.
+ uint length = br.ReadUInt32();
+
+
+ // Bit field describing file flags.
+
+ // Mychaeel: Feel free to investigate and contribute information about the file flags.
+ // (I know that they have to be set to 0x03 for Manifest.ini and Manifest.int to
+ // prevent those files from being copied to the user's System directory, and set to
+ // 0x00 for all other files.)
+ UMODFileFlags flags = (UMODFileFlags)br.ReadUInt32();
+
+ File file = new File();
+ file.Name = fileName;
+ file.Size = length;
+ file.Properties.Add("offset", offset);
+ file.Properties.Add("length", length);
+ fsom.Files.Add(file);
+ }
+ }
+
+ protected override void SaveInternal(ObjectModel objectModel)
+ {
+ FileSystemObjectModel fsom = (objectModel as FileSystemObjectModel);
+ Writer bw = null;
+
+ #region File data
+ MemoryAccessor msData = new MemoryAccessor();
+ bw = new Writer(msData);
+ foreach (File file in fsom.Files)
+ {
+ bw.WriteBytes(file.GetDataAsByteArray());
+ }
+ bw.Close();
+
+ byte[] data = msData.ToArray();
+ #endregion
+ #region File records
+ uint fileOffset = 0;
+
+ MemoryAccessor msDirectory = new MemoryAccessor();
+ bw = new Writer(msDirectory);
+ // The directory consists of an index-type file count (the index data type is described
+ // below), followed by variable-size records, each describing one file in the UMOD
+ // installer.
+ bw.WriteINDEX(fsom.Files.Count);
+ foreach (File file in fsom.Files)
+ {
+ // Length of file name (including trailing null byte).
+ bw.WriteINDEX(file.Name.Length);
+
+ // File name, with trailing null byte.
+ bw.WriteNullTerminatedString(file.Name);
+
+ // Byte offset of file in UMOD file.
+ bw.WriteUInt32(fileOffset);
+ // Byte length of file.
+ bw.WriteUInt32((uint)file.Size);
+
+
+ // Bit field describing file flags.
+
+ // Mychaeel: Feel free to investigate and contribute information about the file flags.
+ // (I know that they have to be set to 0x03 for Manifest.ini and Manifest.int to
+ // prevent those files from being copied to the user's System directory, and set to
+ // 0x00 for all other files.)
+ UMODFileFlags flags = UMODFileFlags.None;
+ bw.WriteUInt32((uint)flags);
+ fileOffset += (uint)file.Size;
+ }
+ bw.Close();
+
+ byte[] directoryData = msDirectory.ToArray();
+ #endregion
+ #region Header data
+ // The UMOD file "header" is 20 bytes long. The header is stored in the last 20 bytes of
+ // the file (hence the quotes around the term "header").
+ MemoryAccessor msHeader = new MemoryAccessor();
+ bw = new Writer(msHeader);
+
+ // Magic number. Used to verify this file as a UMOD installer. Always 0x9FE3C5A3.
+ bw.WriteUInt32((uint)0x9FE3C5A3);
+
+ // Byte offset of file directory in the UMOD file. (See below.)
+ uint fileDirectoryOffset = (uint)data.Length;
+ bw.WriteUInt32(fileDirectoryOffset);
+
+ // Total byte size of the UMOD file.
+ uint fileSize = 20;
+ bw.WriteUInt32(fileSize);
+
+ // UMOD file version.
+ uint formatVersion = 0;
+ bw.WriteUInt32(formatVersion);
+
+ // CRC32 checksum over the file content.
+ uint checksum = 0;
+ bw.WriteUInt32(checksum);
+
+ bw.Flush();
+ bw.Close();
+
+ byte[] headerData = msHeader.ToArray();
+ #endregion
+
+ bw = base.Accessor.Writer;
+
+ bw.WriteBytes(data);
+ bw.WriteBytes(directoryData);
+ bw.WriteBytes(headerData);
+ bw.Flush();
+ }
+ }
+}
diff --git a/CSharp/Plugins/UniversalEditor.Plugins.UnrealEngine/DataFormats/UnrealEngine/Installer/UMODFileFlags.cs b/CSharp/Plugins/UniversalEditor.Plugins.UnrealEngine/DataFormats/UnrealEngine/Installer/UMODFileFlags.cs
new file mode 100644
index 00000000..66a9345f
--- /dev/null
+++ b/CSharp/Plugins/UniversalEditor.Plugins.UnrealEngine/DataFormats/UnrealEngine/Installer/UMODFileFlags.cs
@@ -0,0 +1,13 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace UniversalEditor.DataFormats.UnrealEngine.Installer
+{
+ public enum UMODFileFlags
+ {
+ None = 0x00,
+ PreventCopyToSystem = 0x03
+ }
+}
diff --git a/CSharp/Plugins/UniversalEditor.Plugins.UnrealEngine/DataFormats/UnrealEngine/Package/UnrealPackageDataFormat.cs b/CSharp/Plugins/UniversalEditor.Plugins.UnrealEngine/DataFormats/UnrealEngine/Package/UnrealPackageDataFormat.cs
new file mode 100644
index 00000000..db72cea6
--- /dev/null
+++ b/CSharp/Plugins/UniversalEditor.Plugins.UnrealEngine/DataFormats/UnrealEngine/Package/UnrealPackageDataFormat.cs
@@ -0,0 +1,427 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using UniversalEditor.IO;
+using UniversalEditor.ObjectModels.UnrealEngine;
+using UniversalEditor.Plugins.UnrealEngine;
+
+namespace UniversalEditor.DataFormats.UnrealEngine.Package
+{
+ public class UnrealPackageDataFormat : DataFormat
+ {
+ private static DataFormatReference _dfr = null;
+ public override DataFormatReference MakeReference()
+ {
+ if (_dfr == null)
+ {
+ _dfr = base.MakeReference();
+ _dfr.Capabilities.Add(typeof(UnrealPackageObjectModel), DataFormatCapabilities.All);
+ _dfr.Filters.Add("Unreal Engine package", new byte?[][] { new byte?[] { 0xC1, 0x83, 0x2A, 0x9E } }, new string[] { "*.u", "*.utx", "*.upk" });
+ _dfr.ExportOptions.Add(new CustomOptionText("PackageName", "Package &name:"));
+ _dfr.ExportOptions.Add(new CustomOptionNumber("PackageVersion", "Package &version:", 0, UInt16.MinValue, UInt16.MaxValue));
+ _dfr.Sources.Add("http://wiki.beyondunreal.com/Legacy:Package_File_Format");
+ }
+ return _dfr;
+ }
+
+ private ushort mvarPackageVersion = 0;
+ ///
+ /// Version of the file-format; Unreal1 uses mostly 61-63, UT 67-69; However, note that
+ /// quite a few packages are in use with UT that have Unreal1 versions.
+ ///
+ public ushort PackageVersion { get { return mvarPackageVersion; } set { mvarPackageVersion = value; } }
+
+ private string mvarPackageName = String.Empty;
+ public string PackageName { get { return mvarPackageName; } set { mvarPackageName = value; } }
+
+ protected override void LoadInternal(ref ObjectModel objectModel)
+ {
+ Reader br = base.Accessor.Reader;
+
+ UnrealPackageObjectModel upk = (objectModel as UnrealPackageObjectModel);
+ #region Header
+
+ // Always "0x9E2A83C1"; use this to verify that you indeed try to read an Unreal-Package
+ uint signature = br.ReadUInt32();
+ if (signature != 0x9E2A83C1) throw new InvalidDataFormatException("File does not begin with 0x9E2A83C1");
+
+ mvarPackageVersion = br.ReadUInt16();
+ upk.LicenseeNumber = br.ReadUInt16();
+ upk.PackageFlags = (PackageFlags)br.ReadUInt32(); // 1949392
+
+ if (mvarPackageVersion >= 512)
+ {
+ uint valueLength = br.ReadUInt32();
+ mvarPackageName = br.ReadFixedLengthString(valueLength);
+ mvarPackageName = mvarPackageName.TrimNull();
+
+ uint unknown1 = br.ReadUInt32();
+ uint unknown2 = br.ReadUInt32();
+ }
+
+ // Number of entries in name-table
+ uint nameTableEntryCount = br.ReadUInt32();
+ // Offset of name-table within the file
+ uint nameTableOffset = br.ReadUInt32();
+
+ // Number of entries in export-table
+ uint exportTableEntryCount = br.ReadUInt32();
+ // Offset of export-table within the file
+ uint exportTableOffset = br.ReadUInt32();
+
+ // Number of entries in import-table
+ uint importTableEntryCount = br.ReadUInt32();
+ // Offset of import-table within the file
+ uint importTableOffset = br.ReadUInt32();
+
+ // After the ImportOffset, the header differs between the versions. The only interesting
+ // fact, though, is that for fileformat versions => 68, a GUID has been introduced. It can
+ // be found right after the ImportOffset:
+ if (mvarPackageVersion < 68)
+ {
+ // number of values in the Heritage Table
+ uint heritageTableEntryCount = br.ReadUInt32();
+ // offset of the Heritage Table from the beginning of the file
+ uint heritageTableOffset = br.ReadUInt32();
+
+ long pos = br.Accessor.Position;
+ br.Accessor.Position = heritageTableOffset;
+
+ for (uint i = 0; i < heritageTableEntryCount; i++)
+ {
+ upk.PackageGUIDs.Add(br.ReadGuid());
+ }
+
+ br.Accessor.Position = pos;
+ }
+ else if (mvarPackageVersion >= 68)
+ {
+ upk.PackageGUIDs.Add(br.ReadGuid());
+
+ if (mvarPackageVersion < 512)
+ {
+ uint generationCount = br.ReadUInt32();
+ for (uint i = 0; i < generationCount; i++)
+ {
+ Generation generation = new Generation();
+ generation.ExportCount = br.ReadUInt32();
+ generation.NameCount = br.ReadUInt32();
+ upk.Generations.Add(generation);
+ }
+ }
+ }
+
+ #endregion
+
+ #region Name table
+ {
+ // The Unreal-Engine introduces two new variable-types. The first one is a rather simple
+ // string type, called NAME from now on. The second one is a bit more tricky, these
+ // CompactIndices, or INDEX later on, compresses ordinary DWORDs downto one to five BYTEs.
+
+ // The first and most simple one of the three tables is the name-table. The name-table can
+ // be considered an index of all unique names used for objects and references within the
+ // file. Later on, you'll often find indexes into this table instead of a string
+ // containing the object-name.
+ br.Accessor.Position = nameTableOffset;
+ for (uint i = 0; i < nameTableEntryCount; i++)
+ {
+ string name = br.ReadNAME(mvarPackageVersion);
+ if (mvarPackageVersion >= 512)
+ {
+ uint unknown = br.ReadUInt32();
+ }
+ NameTableEntryFlags flags = (NameTableEntryFlags)br.ReadInt32();
+ upk.NameTableEntries.Add(name, flags);
+ }
+ }
+ #endregion
+
+ #region Export table
+ {
+ // The export-table is an index for all objects within the package. Every object in
+ // the body of the file has a corresponding entry in this table, with information like
+ // offset within the file etc.
+ br.Accessor.Position = exportTableOffset;
+ for (uint i = 0; i < exportTableEntryCount; i++)
+ {
+ ExportTableEntry entry = new ExportTableEntry();
+
+ // Class of the object, i.e. "Texture" or "Palette" etc; stored as a
+ // ObjectReference
+ int classIndex = br.ReadINDEX();
+ if (classIndex != 0) entry.ObjectClass = new ObjectReference(classIndex, upk);
+
+ // Object Parent; again a ObjectReference
+ int objectParentIndex = br.ReadINDEX();
+ if (objectParentIndex != 0) entry.ObjectParent = new ObjectReference(objectParentIndex, upk);
+
+ // Internal package/group of the object, i.e. ‘Floor’ for floor-textures;
+ // ObjectReference
+ int groupIndex = br.ReadInt32();
+ if (groupIndex != 0) entry.Group = new ObjectReference(groupIndex, upk);
+
+ // The name of the object; an index into the name-table
+ int objectNameIndex = br.ReadINDEX();
+ if (objectNameIndex >= 0 && objectNameIndex < upk.NameTableEntries.Count)
+ {
+ entry.Name = upk.NameTableEntries[objectNameIndex];
+ }
+
+ // Flags for the object; described in the appendix
+ entry.Flags = (ObjectFlags)br.ReadInt32();
+
+ // Total size of the object
+ entry.Size = br.ReadINDEX();
+
+ if (entry.Size != 0)
+ {
+ // Offset of the object; this field only exists if the SerialSize is larger 0
+ entry.Offset = br.ReadINDEX();
+ }
+ upk.ExportTableEntries.Add(entry);
+ }
+ }
+ #endregion
+
+ #region Import table
+ {
+ br.Accessor.Position = importTableOffset;
+ for (uint i = 0; i < importTableEntryCount; i++)
+ {
+ // The third table holds references to objects in external packages. For example, a
+ // texture might have a DetailTexture (which makes for the nice structure if have a
+ // very close look at a texture). Now, these DetailTextures are all stored in a
+ // single package (as they are used by many different textures in different package
+ // files). The property of the texture object only needs to store an index into the
+ // import-table then as the entry in the import-table already points to the
+ // DetailTexture in the other package.
+ ImportTableEntry entry = new ImportTableEntry();
+
+ int classPackageIndex = br.ReadINDEX();
+ if (classPackageIndex >= 0 && classPackageIndex < upk.NameTableEntries.Count)
+ {
+ entry.PackageName = upk.NameTableEntries[classPackageIndex];
+ }
+
+ int classNameIndex = br.ReadINDEX();
+ if (classNameIndex >= 0 && classNameIndex < upk.NameTableEntries.Count)
+ {
+ entry.ClassName = upk.NameTableEntries[classNameIndex];
+ }
+
+ int packageReference = br.ReadInt32();
+ entry.Package = new ObjectReference(packageReference, upk);
+
+ int objectNameIndex = br.ReadINDEX();
+ if (objectNameIndex >= 0 && objectNameIndex < upk.NameTableEntries.Count)
+ {
+ entry.ObjectName = upk.NameTableEntries[objectNameIndex];
+ }
+ upk.ImportTableEntries.Add(entry);
+ }
+ }
+ #endregion
+ }
+
+ protected override void SaveInternal(ObjectModel objectModel)
+ {
+ Writer bw = base.Accessor.Writer;
+
+ UnrealPackageObjectModel upk = (objectModel as UnrealPackageObjectModel);
+ #region Header
+
+ // Always "0x9E2A83C1"; use this to verify that you indeed try to read an Unreal-Package
+ bw.WriteUInt32((uint)0x9E2A83C1);
+
+ bw.WriteUInt16(mvarPackageVersion);
+ bw.WriteUInt16(upk.LicenseeNumber);
+ bw.WriteUInt32((uint)upk.PackageFlags); // 1949392
+
+ if (mvarPackageVersion >= 512)
+ {
+ bw.WriteUInt32((uint)mvarPackageName.Length);
+ bw.WriteFixedLengthString(mvarPackageName);
+
+ uint unknown1 = 0;
+ bw.WriteUInt32(unknown1);
+
+ uint unknown2 = 0;
+ bw.WriteUInt32(unknown2);
+ }
+
+ // Number of entries in name-table
+ bw.WriteUInt32((uint)upk.NameTableEntries.Count);
+ // Offset of name-table within the file
+ uint nameTableOffset = 0;
+ bw.WriteUInt32(nameTableOffset);
+
+ // Number of entries in export-table
+ bw.WriteUInt32((uint)upk.ExportTableEntries.Count);
+ // Offset of export-table within the file
+ uint exportTableOffset = 0;
+ bw.WriteUInt32(exportTableOffset);
+
+ // Number of entries in import-table
+ bw.WriteUInt32((uint)upk.ImportTableEntries.Count);
+ // Offset of import-table within the file
+ uint importTableOffset = 0;
+ bw.WriteUInt32(importTableOffset);
+
+ // After the ImportOffset, the header differs between the versions. The only interesting
+ // fact, though, is that for fileformat versions => 68, a GUID has been introduced. It can
+ // be found right after the ImportOffset:
+ if (mvarPackageVersion < 68)
+ {
+ // number of values in the Heritage Table
+ bw.WriteUInt32((uint)upk.PackageGUIDs.Count);
+ // offset of the Heritage Table from the beginning of the file
+ uint heritageTableOffset = 0;
+ bw.WriteUInt32(heritageTableOffset);
+
+ // TODO: navigate to the heritageTableOffset to write the data
+ for (uint i = 0; i < (uint)upk.PackageGUIDs.Count; i++)
+ {
+ bw.WriteGuid(upk.PackageGUIDs[(int)i]);
+ }
+ }
+ else if (mvarPackageVersion >= 68)
+ {
+ if (upk.PackageGUIDs.Count > 0)
+ {
+ bw.WriteGuid(upk.PackageGUIDs[0]);
+ }
+ else
+ {
+ Guid guid = Guid.NewGuid();
+ upk.PackageGUIDs.Add(guid);
+ bw.WriteGuid(guid);
+ }
+
+ if (mvarPackageVersion < 512)
+ {
+ bw.WriteUInt32((uint)upk.Generations.Count);
+ for (uint i = 0; i < upk.Generations.Count; i++)
+ {
+ Generation generation = upk.Generations[(int)i];
+ bw.WriteUInt32(generation.ExportCount);
+ bw.WriteUInt32(generation.NameCount);
+ }
+ }
+ }
+
+ #endregion
+
+ #region Name table
+ {
+ // The Unreal-Engine introduces two new variable-types. The first one is a rather simple
+ // string type, called NAME from now on. The second one is a bit more tricky, these
+ // CompactIndices, or INDEX later on, compresses ordinary DWORDs downto one to five BYTEs.
+
+ // The first and most simple one of the three tables is the name-table. The name-table can
+ // be considered an index of all unique names used for objects and references within the
+ // file. Later on, you'll often find indexes into this table instead of a string
+ // containing the object-name.
+
+ // TODO: navigate to the name table offset
+ // br.BaseStream.Position = nameTableOffset;
+ for (uint i = 0; i < upk.NameTableEntries.Count; i++)
+ {
+ bw.WriteNAME(upk.NameTableEntries[(int)i].Name, mvarPackageVersion);
+ if (mvarPackageVersion >= 512)
+ {
+ uint unknown = 0;
+ bw.WriteUInt32(unknown);
+ }
+ bw.WriteInt32((int)upk.NameTableEntries[(int)i].Flags);
+ }
+ }
+ #endregion
+
+ #region Export table
+ {
+ // The export-table is an index for all objects within the package. Every object in
+ // the body of the file has a corresponding entry in this table, with information like
+ // offset within the file etc.
+ // br.BaseStream.Position = exportTableOffset;
+ // TODO: navigate to export table offset
+
+ for (uint i = 0; i < upk.ExportTableEntries.Count; i++)
+ {
+ ExportTableEntry entry = upk.ExportTableEntries[(int)i];
+
+ // Class of the object, i.e. "Texture" or "Palette" etc; stored as a
+ // ObjectReference
+ if (entry.ObjectClass != null)
+ {
+ bw.WriteINDEX(entry.ObjectClass.IndexValue);
+ }
+ else
+ {
+ bw.WriteINDEX(0);
+ }
+
+ // Object Parent; again a ObjectReference
+ if (entry.ObjectParent != null)
+ {
+ bw.WriteINDEX(entry.ObjectParent.IndexValue);
+ }
+ else
+ {
+ bw.WriteINDEX(0);
+ }
+
+ // Internal package/group of the object, i.e. ‘Floor’ for floor-textures;
+ // ObjectReference
+ if (entry.Group != null)
+ {
+ bw.WriteInt32(entry.Group.IndexValue);
+ }
+ else
+ {
+ bw.WriteInt32((int)0);
+ }
+
+ // The name of the object; an index into the name-table
+ bw.WriteINDEX(upk.NameTableEntries.IndexOf(entry.Name));
+
+ // Flags for the object; described in the appendix
+ bw.WriteInt32((int)entry.Flags);
+
+ // Total size of the object
+ bw.WriteINDEX(entry.Size);
+
+ if (entry.Size != 0)
+ {
+ // Offset of the object; this field only exists if the SerialSize is larger 0
+ bw.WriteINDEX(entry.Offset);
+ }
+ }
+ }
+ #endregion
+
+ #region Import table
+ {
+ for (uint i = 0; i < upk.ImportTableEntries.Count; i++)
+ {
+ // The third table holds references to objects in external packages. For example, a
+ // texture might have a DetailTexture (which makes for the nice structure if have a
+ // very close look at a texture). Now, these DetailTextures are all stored in a
+ // single package (as they are used by many different textures in different package
+ // files). The property of the texture object only needs to store an index into the
+ // import-table then as the entry in the import-table already points to the
+ // DetailTexture in the other package.
+ ImportTableEntry entry = upk.ImportTableEntries[(int)i];
+
+ bw.WriteINDEX(upk.NameTableEntries.IndexOf(entry.PackageName));
+ bw.WriteINDEX(upk.NameTableEntries.IndexOf(entry.ClassName));
+ bw.WriteInt32(entry.Package.IndexValue);
+ bw.WriteINDEX(upk.NameTableEntries.IndexOf(entry.ObjectName));
+ }
+ }
+ #endregion
+ bw.Flush();
+ }
+ }
+}
diff --git a/CSharp/Plugins/UniversalEditor.Plugins.UnrealEngine/ExtensionMethods.cs b/CSharp/Plugins/UniversalEditor.Plugins.UnrealEngine/ExtensionMethods.cs
new file mode 100644
index 00000000..4f363a90
--- /dev/null
+++ b/CSharp/Plugins/UniversalEditor.Plugins.UnrealEngine/ExtensionMethods.cs
@@ -0,0 +1,129 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using UniversalEditor.IO;
+
+namespace UniversalEditor.Plugins.UnrealEngine
+{
+ public static class ExtensionMethods
+ {
+ ///
+ /// The Name type is a simple string type. The format does, although, differ between the
+ /// package versions.
+ ///
+ ///
+ ///
+ public static string ReadNAME(this Reader br, int packageVersion)
+ {
+ string value = String.Empty;
+
+ // Older package versions (<64, original Unreal engine) store the Name type as a
+ // zero-terminated ASCII string; "UT2k3", for example would be stored as:
+ // "U" "T" "2" "k" "3" 0x00
+ if (packageVersion < 64)
+ {
+ value = br.ReadNullTerminatedString();
+ }
+ else if (packageVersion >= 512)
+ {
+ uint length = br.ReadUInt32();
+ value = br.ReadNullTerminatedString();
+ }
+ else
+ {
+ // Newer packages (>=64, UT engine) prepend the length of the string plus the trailing
+ // zero. Again, "UT2k3" would be now stored as: 0x06 "U" "T" "2" "k" "3" 0x00
+ value = br.ReadLengthPrefixedString();
+ if (value.EndsWith("\0"))
+ {
+ value = value.TrimNull();
+ }
+ else
+ {
+ // do we need this sanity check?
+ throw new InvalidOperationException();
+ }
+ }
+ return value;
+ }
+ public static void WriteNAME(this Writer bw, string value, int packageVersion)
+ {
+ // Older package versions (<64, original Unreal engine) store the Name type as a
+ // zero-terminated ASCII string; "UT2k3", for example would be stored as:
+ // "U" "T" "2" "k" "3" 0x00
+ if (packageVersion < 64)
+ {
+ bw.WriteNullTerminatedString(value);
+ }
+ else
+ {
+ // Newer packages (>=64, UT engine) prepend the length of the string plus the trailing
+ // zero. Again, "UT2k3" would be now stored as: 0x06 "U" "T" "2" "k" "3" 0x00
+ bw.WriteLengthPrefixedString(value);
+ bw.WriteInt32((byte)0);
+ }
+ }
+
+ ///
+ /// Reads a compact integer from the FileReader. Bytes read differs, so do not make
+ /// assumptions about physical data being read from the stream. (If you have to, get the
+ /// difference of FileReader.BaseStream.Position before and after this is executed.)
+ ///
+ /// An "uncompacted" signed integer.
+ /// There may be better ways to implement this, but this is fast, and it works.
+ public static int ReadINDEX(this Reader br)
+ {
+ int output = 0;
+ bool signed = false;
+ for (int i = 0; i < 5; i++)
+ {
+ byte x = br.ReadByte();
+ // First byte
+ if (i == 0)
+ {
+ // Bit: X0000000
+ if ((x & 0x80) > 0)
+ {
+ signed = true;
+ }
+ // Bits: 00XXXXXX
+ output |= (x & 0x3F);
+ // Bit: 0X000000
+ if ((x & 0x40) == 0)
+ {
+ break;
+ }
+ }
+ // Last byte
+ else if (i == 4)
+ {
+ // Bits: 000XXXXX -- the 0 bits are ignored
+ // (hits the 32 bit boundary)
+ output |= (x & 0x1F) << (6 + (3 * 7));
+ }
+ // Middle bytes
+ else
+ {
+ // Bits: 0XXXXXXX
+ output |= (x & 0x7F) << (6 + ((i - 1) * 7));
+ // Bit: X0000000
+ if ((x & 0x80) == 0)
+ {
+ break;
+ }
+ }
+ }
+ // multiply by negative one here, since the first 6+ bits could be 0
+ if (signed)
+ {
+ output *= -1;
+ }
+ return (output);
+ }
+ public static void WriteINDEX(this Writer bw, int value)
+ {
+ throw new NotImplementedException();
+ }
+ }
+}
diff --git a/CSharp/Plugins/UniversalEditor.Plugins.UnrealEngine/ObjectModels/UnrealEngine/ExportTableEntry.cs b/CSharp/Plugins/UniversalEditor.Plugins.UnrealEngine/ObjectModels/UnrealEngine/ExportTableEntry.cs
new file mode 100644
index 00000000..3ea54dee
--- /dev/null
+++ b/CSharp/Plugins/UniversalEditor.Plugins.UnrealEngine/ObjectModels/UnrealEngine/ExportTableEntry.cs
@@ -0,0 +1,86 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace UniversalEditor.ObjectModels.UnrealEngine
+{
+ public class ExportTableEntry : ICloneable
+ {
+ public class ExportTableEntryCollection
+ : System.Collections.ObjectModel.Collection
+ {
+ }
+
+ public event UniversalEditor.ObjectModels.FileSystem.DataRequestEventHandler DataRequest;
+ protected virtual void OnDataRequest(UniversalEditor.ObjectModels.FileSystem.DataRequestEventArgs e)
+ {
+ if (DataRequest != null)
+ {
+ DataRequest(this, e);
+ }
+ }
+
+ public byte[] GetData()
+ {
+ UniversalEditor.ObjectModels.FileSystem.DataRequestEventArgs e = new FileSystem.DataRequestEventArgs();
+ OnDataRequest(e);
+ return e.Data;
+ }
+
+ private NameTableEntry mvarName = null;
+ public NameTableEntry Name { get { return mvarName; } set { mvarName = value; } }
+ private ObjectReference mvarObjectClass = null;
+ public ObjectReference ObjectClass { get { return mvarObjectClass; } set { mvarObjectClass = value; } }
+ private ObjectReference mvarObjectParent = null;
+ public ObjectReference ObjectParent { get { return mvarObjectParent; } set { mvarObjectParent = value; } }
+ private ObjectReference mvarGroup = null;
+ public ObjectReference Group { get { return mvarGroup; } set { mvarGroup = value; } }
+ private ObjectFlags mvarFlags = ObjectFlags.None;
+ public ObjectFlags Flags { get { return mvarFlags; } set { mvarFlags = value; } }
+
+ private int mvarSize = 0;
+ public int Size { get { return mvarSize; } set { mvarSize = value; } }
+
+ private int mvarOffset = 0;
+ public int Offset { get { return mvarOffset; } set { mvarOffset = value; } }
+
+ public object Clone()
+ {
+ ExportTableEntry clone = new ExportTableEntry();
+ return clone;
+ }
+
+ public override string ToString()
+ {
+ StringBuilder sb = new StringBuilder();
+ if (mvarGroup != null)
+ {
+ sb.Append(mvarGroup.ToString());
+ sb.Append('.');
+ }
+ if (mvarName == null)
+ {
+ sb.Append("(invalid name)");
+ }
+ else
+ {
+ sb.Append(mvarName.ToString(false));
+ }
+ if (mvarObjectClass != null)
+ {
+ sb.Append(" (");
+ sb.Append(mvarObjectClass.ToString());
+ sb.Append(")");
+ }
+ if (mvarObjectParent != null)
+ {
+ sb.Append(" extends ");
+ sb.Append(mvarObjectParent.ToString());
+ }
+ sb.Append(" : ");
+ sb.Append(mvarFlags.ToString());
+ return sb.ToString();
+ }
+ }
+}
diff --git a/CSharp/Plugins/UniversalEditor.Plugins.UnrealEngine/ObjectModels/UnrealEngine/FunctionFlags.cs b/CSharp/Plugins/UniversalEditor.Plugins.UnrealEngine/ObjectModels/UnrealEngine/FunctionFlags.cs
new file mode 100644
index 00000000..7faadba9
--- /dev/null
+++ b/CSharp/Plugins/UniversalEditor.Plugins.UnrealEngine/ObjectModels/UnrealEngine/FunctionFlags.cs
@@ -0,0 +1,80 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace UniversalEditor.ObjectModels.UnrealEngine
+{
+ public enum FunctionFlags
+ {
+ None = 0x00000000,
+ ///
+ /// Function is final (prebindable, non-overridable function).
+ ///
+ Final = 0x00000001,
+ ///
+ /// Function has been defined (not just declared). Not used in source code.
+ ///
+ Defined = 0x00000002,
+ ///
+ /// Function is an iterator.
+ ///
+ Iterator = 0x00000004,
+ ///
+ /// Function is a latent state function.
+ ///
+ Latent = 0x00000008,
+ ///
+ /// Unary operator is a prefix operator.
+ ///
+ PrefixOperator = 0x00000010,
+ ///
+ /// Function cannot be reentered.
+ ///
+ Singular = 0x00000020,
+ ///
+ /// Function is network-replicated. Not used in source code.
+ ///
+ NetworkReplicated = 0x00000040,
+ ///
+ /// Function should be sent reliably on the network. Not used in source code.
+ ///
+ NetworkReliable = 0x00000080,
+ ///
+ /// Function executed on the client side.
+ ///
+ Simulated = 0x00000100,
+ ///
+ /// Executable from command line.
+ ///
+ CommandLine = 0x00000200,
+ ///
+ /// Native function.
+ ///
+ Native = 0x00000400,
+ ///
+ /// Event function.
+ ///
+ Event = 0x00000800,
+ ///
+ /// Operator function.
+ ///
+ Operator = 0x00001000,
+ ///
+ /// Static function.
+ ///
+ Static = 0x00002000,
+ ///
+ /// Don't export intrinsic function to C++.
+ ///
+ DoNotExport = 0x00004000,
+ ///
+ /// Function doesn't modify this object.
+ ///
+ Constant = 0x00008000,
+ ///
+ /// Return value is purely dependent on parameters; no state dependencies or internal state changes.
+ ///
+ Invariant = 0x00010000
+ }
+}
diff --git a/CSharp/Plugins/UniversalEditor.Plugins.UnrealEngine/ObjectModels/UnrealEngine/Generation.cs b/CSharp/Plugins/UniversalEditor.Plugins.UnrealEngine/ObjectModels/UnrealEngine/Generation.cs
new file mode 100644
index 00000000..31591884
--- /dev/null
+++ b/CSharp/Plugins/UniversalEditor.Plugins.UnrealEngine/ObjectModels/UnrealEngine/Generation.cs
@@ -0,0 +1,26 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace UniversalEditor.ObjectModels.UnrealEngine
+{
+ public class Generation
+ {
+ public class GenerationCollection
+ : System.Collections.ObjectModel.Collection
+ {
+ }
+
+ private uint mvarExportCount = 0;
+ public uint ExportCount { get { return mvarExportCount; } set { mvarExportCount = value; } }
+
+ private uint mvarNameCount = 0;
+ public uint NameCount { get { return mvarNameCount; } set { mvarNameCount = value; } }
+
+ public override string ToString()
+ {
+ return mvarExportCount.ToString() + " exports, " + mvarNameCount.ToString() + " names";
+ }
+ }
+}
diff --git a/CSharp/Plugins/UniversalEditor.Plugins.UnrealEngine/ObjectModels/UnrealEngine/ImportTableEntry.cs b/CSharp/Plugins/UniversalEditor.Plugins.UnrealEngine/ObjectModels/UnrealEngine/ImportTableEntry.cs
new file mode 100644
index 00000000..464a81f4
--- /dev/null
+++ b/CSharp/Plugins/UniversalEditor.Plugins.UnrealEngine/ObjectModels/UnrealEngine/ImportTableEntry.cs
@@ -0,0 +1,70 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace UniversalEditor.ObjectModels.UnrealEngine
+{
+ public class ImportTableEntry : ICloneable
+ {
+ public class ImportTableEntryCollection
+ : System.Collections.ObjectModel.Collection
+ {
+ }
+
+ public object Clone()
+ {
+ ImportTableEntry clone = new ImportTableEntry();
+ return clone;
+ }
+
+ private NameTableEntry mvarPackageName = null;
+ ///
+ /// Package file in which the class of the object is defined
+ ///
+ public NameTableEntry PackageName { get { return mvarPackageName; } set { mvarPackageName = value; } }
+
+ private NameTableEntry mvarClassName = null;
+ ///
+ /// Class of the object, i.e. "Texture", "Palette", "Package", etc.
+ ///
+ public NameTableEntry ClassName { get { return mvarClassName; } set { mvarClassName = value; } }
+
+ private ObjectReference mvarPackage = null;
+ ///
+ /// Reference where the object resides
+ ///
+ public ObjectReference Package { get { return mvarPackage; } set { mvarPackage = value; } }
+
+ private NameTableEntry mvarObjectName = null;
+ ///
+ /// The name of the object
+ ///
+ public NameTableEntry ObjectName { get { return mvarObjectName; } set { mvarObjectName = value; } }
+
+ public override string ToString()
+ {
+ StringBuilder sb = new StringBuilder();
+ if (mvarPackageName != null)
+ {
+ sb.Append(mvarPackageName.ToString(false));
+ sb.Append(".");
+ }
+ if (mvarObjectName == null)
+ {
+ sb.Append("(invalid name)");
+ }
+ else
+ {
+ sb.Append(mvarObjectName.ToString(false));
+ }
+ if (mvarClassName != null)
+ {
+ sb.Append(" (");
+ sb.Append(mvarClassName.ToString(false));
+ sb.Append(")");
+ }
+ return sb.ToString();
+ }
+ }
+}
diff --git a/CSharp/Plugins/UniversalEditor.Plugins.UnrealEngine/ObjectModels/UnrealEngine/NameTableEntry.cs b/CSharp/Plugins/UniversalEditor.Plugins.UnrealEngine/ObjectModels/UnrealEngine/NameTableEntry.cs
new file mode 100644
index 00000000..0a29feb6
--- /dev/null
+++ b/CSharp/Plugins/UniversalEditor.Plugins.UnrealEngine/ObjectModels/UnrealEngine/NameTableEntry.cs
@@ -0,0 +1,58 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace UniversalEditor.ObjectModels.UnrealEngine
+{
+ [Flags()]
+ public enum NameTableEntryFlags
+ {
+ None = 0
+ }
+ public class NameTableEntry : ICloneable
+ {
+ public class NameTableEntryCollection
+ : System.Collections.ObjectModel.Collection
+ {
+ public NameTableEntry Add(string name, NameTableEntryFlags flags = NameTableEntryFlags.None)
+ {
+ NameTableEntry entry = new NameTableEntry();
+ entry.Name = name;
+ entry.Flags = flags;
+ Add(entry);
+ return entry;
+ }
+ }
+
+ private string mvarName = String.Empty;
+ public string Name { get { return mvarName; } set { mvarName = value; } }
+
+ private NameTableEntryFlags mvarFlags = NameTableEntryFlags.None;
+ public NameTableEntryFlags Flags { get { return mvarFlags; } set { mvarFlags = value; } }
+
+ public object Clone()
+ {
+ NameTableEntry entry = new NameTableEntry();
+ entry.Name = (mvarName.Clone() as string);
+ entry.Flags = mvarFlags;
+ return entry;
+ }
+
+ public override string ToString()
+ {
+ return ToString(true);
+ }
+ public string ToString(bool includeFlags)
+ {
+ StringBuilder sb = new StringBuilder();
+ sb.Append(mvarName);
+ if (includeFlags)
+ {
+ sb.Append(" : ");
+ sb.Append(mvarFlags.ToString());
+ }
+ return sb.ToString();
+ }
+ }
+}
diff --git a/CSharp/Plugins/UniversalEditor.Plugins.UnrealEngine/ObjectModels/UnrealEngine/ObjectFlags.cs b/CSharp/Plugins/UniversalEditor.Plugins.UnrealEngine/ObjectModels/UnrealEngine/ObjectFlags.cs
new file mode 100644
index 00000000..edfdcc60
--- /dev/null
+++ b/CSharp/Plugins/UniversalEditor.Plugins.UnrealEngine/ObjectModels/UnrealEngine/ObjectFlags.cs
@@ -0,0 +1,140 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace UniversalEditor.ObjectModels.UnrealEngine
+{
+ [Flags()]
+ public enum ObjectFlags : uint
+ {
+ None = 0,
+ ///
+ /// Object must be tracked in the editor by the Undo/Redo tracking system.
+ ///
+ Transactional = 0x00000001,
+ ///
+ /// Object is not reachable on the object graph.
+ ///
+ Unreachable = 0x00000002,
+ ///
+ /// Object may be imported by other package files.
+ ///
+ Public = 0x00000004,
+ ///
+ /// Temporary import tag in load/save.
+ ///
+ Importing = 0x00000008,
+ ///
+ /// Temporary export tag in load/save.
+ ///
+ Exporting = 0x00000010,
+ ///
+ /// The external data source corresponding to this object has been modified.
+ ///
+ SourceModified = 0x00000020,
+ ///
+ /// Check during garbage collection.
+ ///
+ GarbageCollect = 0x00000040,
+ ///
+ /// During load, indicates object needs loading.
+ ///
+ RequireLoad = 0x00000200,
+ ///
+ /// A hardcoded name which should be syntax-highlighted.
+ ///
+ HighlightedName = 0x00000400,
+ EliminateObject = 0x00000400,
+ RemappedName = 0x00000800,
+ ///
+ /// In a singular function.
+ ///
+ SingularFunction = 0x00000800,
+ ///
+ /// Suppressed log name.
+ ///
+ Suppressed = 0x00001000,
+ StateChanged = 0x00001000,
+ ///
+ /// Within an EndState call.
+ ///
+ EndState = 0x00002000,
+ ///
+ /// Do not save the object.
+ ///
+ Transient = 0x00004000,
+ ///
+ /// Data is being preloaded from the file.
+ ///
+ Preloading = 0x00008000,
+ ///
+ /// Must be loaded for game client.
+ ///
+ LoadForClient = 0x00010000,
+ ///
+ /// Must be loaded for game server.
+ ///
+ LoadForServer = 0x00020000,
+ ///
+ /// Must be loaded for editor.
+ ///
+ LoadForEditor = 0x00040000,
+ ///
+ /// Keep object around (don't garbage collect) for editor even if unreferenced.
+ ///
+ Standalone = 0x00080000,
+ ///
+ /// Don't load this object for the game client.
+ ///
+ NotForClient = 0x00100000,
+ ///
+ /// Don't load this object for the game server.
+ ///
+ NotForServer = 0x00200000,
+ ///
+ /// Don't load this object for the editor.
+ ///
+ NotForEdit = 0x00400000,
+ ///
+ /// Object Destroy has already been called
+ ///
+ Destroyed = 0x00800000,
+ ///
+ /// Object needs to be postloaded.
+ ///
+ RequirePostLoad = 0x01000000,
+ ///
+ /// This object has an execution stack allocated and is ready to execute UnrealScript code.
+ ///
+ HasStack = 0x02000000,
+ ///
+ /// Class or name is defined in C++ code and must be bound at load-time. (UClass only)
+ ///
+ Intrinsic = 0x04000000,
+ ///
+ /// Class or name is defined in C++ code and must be bound at load-time. (UClass only)
+ ///
+ Native = 0x04000000,
+ ///
+ /// Marked (for debugging)
+ ///
+ Marked = 0x08000000,
+ ///
+ /// ShutdownAfterError called.
+ ///
+ ErrorShutdown = 0x10000000,
+ ///
+ /// For debugging Serialize calls
+ ///
+ DebugPostLoad = 0x20000000,
+ ///
+ /// For debugging Serialize calls
+ ///
+ DebugSerialize = 0x40000000,
+ ///
+ /// For debugging Destroy calls
+ ///
+ DebugDestroy = 0x80000000
+ }
+}
diff --git a/CSharp/Plugins/UniversalEditor.Plugins.UnrealEngine/ObjectModels/UnrealEngine/ObjectReference.cs b/CSharp/Plugins/UniversalEditor.Plugins.UnrealEngine/ObjectModels/UnrealEngine/ObjectReference.cs
new file mode 100644
index 00000000..65f6f9ed
--- /dev/null
+++ b/CSharp/Plugins/UniversalEditor.Plugins.UnrealEngine/ObjectModels/UnrealEngine/ObjectReference.cs
@@ -0,0 +1,82 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace UniversalEditor.ObjectModels.UnrealEngine
+{
+ public class ObjectReference
+ {
+ private UnrealPackageObjectModel mvarParent = null;
+ public UnrealPackageObjectModel Parent { get { return mvarParent; } }
+
+ private int mvarIndexValue = 0;
+ public int IndexValue { get { return mvarIndexValue; } set { mvarIndexValue = value; } }
+
+ public static readonly ObjectReference Empty = new ObjectReference(0, null);
+
+ public ObjectReference(int indexValue = 0, UnrealPackageObjectModel parent = null)
+ {
+ mvarParent = parent;
+ mvarIndexValue = indexValue;
+ }
+
+ public object Value
+ {
+ get
+ {
+ if (mvarParent != null)
+ {
+ if (mvarIndexValue < 0)
+ {
+ // pointer to an entry of the ImportTable
+ int index = -mvarIndexValue - 1;
+ if (index >= 0 && index < mvarParent.ImportTableEntries.Count)
+ {
+ return mvarParent.ImportTableEntries[index].ToString();
+ }
+ }
+ else if (mvarIndexValue > 0)
+ {
+ // pointer to an entry in the ExportTable
+ int index = mvarIndexValue - 1;
+ if (index >= 0 && index < mvarParent.ExportTableEntries.Count)
+ {
+ return mvarParent.ExportTableEntries[index].ToString();
+ }
+ }
+ }
+ return null;
+ }
+ }
+
+ public override string ToString()
+ {
+ if (mvarIndexValue == 0) return "(null)";
+ if (mvarParent != null)
+ {
+ if (mvarIndexValue < 0)
+ {
+ // pointer to an entry of the ImportTable
+ int index = -mvarIndexValue - 1;
+ if (index >= 0 && index < mvarParent.ImportTableEntries.Count)
+ {
+ return mvarParent.ImportTableEntries[index].ToString();
+ }
+ return "(unknown: " + mvarIndexValue.ToString() + ")";
+ }
+ else if (mvarIndexValue > 0)
+ {
+ // pointer to an entry in the ExportTable
+ int index = mvarIndexValue - 1;
+ if (index >= 0 && index < mvarParent.ExportTableEntries.Count)
+ {
+ return mvarParent.ExportTableEntries[index].ToString();
+ }
+ return "(unknown: " + mvarIndexValue.ToString() + ")";
+ }
+ }
+ return "(unknown: " + mvarIndexValue.ToString() + ")";
+ }
+ }
+}
diff --git a/CSharp/Plugins/UniversalEditor.Plugins.UnrealEngine/ObjectModels/UnrealEngine/PackageFlags.cs b/CSharp/Plugins/UniversalEditor.Plugins.UnrealEngine/ObjectModels/UnrealEngine/PackageFlags.cs
new file mode 100644
index 00000000..f57d5427
--- /dev/null
+++ b/CSharp/Plugins/UniversalEditor.Plugins.UnrealEngine/ObjectModels/UnrealEngine/PackageFlags.cs
@@ -0,0 +1,40 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace UniversalEditor.ObjectModels.UnrealEngine
+{
+ [Flags()]
+ public enum PackageFlags
+ {
+ None = 0,
+ ///
+ /// The package is allowed to be downloaded to clients freely.
+ ///
+ AllowDownload = 0x0001,
+ ///
+ /// All objects in the package are optional (i.e. skins, textures) and it's up to the client whether he wants
+ /// to download them or not. Not yet implemented; currently ignored.
+ ///
+ ClientOptional = 0x0002,
+ ///
+ /// This package is only needed on the server side, and the client shouldn't be informed of its presence. This
+ /// is used with packages like IpDrv so that it can be updated frequently on the server side without requiring
+ /// downloading stuff to the client.
+ ///
+ ServerSideOnly = 0x0004,
+ ///
+ /// Loaded from linker with broken import links
+ ///
+ BrokenLinks = 0x0008,
+ ///
+ /// Not trusted
+ ///
+ Untrusted = 0x0010,
+ ///
+ /// Client needs to download this package
+ ///
+ Required = 0x8000
+ }
+}
diff --git a/CSharp/Plugins/UniversalEditor.Plugins.UnrealEngine/ObjectModels/UnrealEngine/PropertyFlags.cs b/CSharp/Plugins/UniversalEditor.Plugins.UnrealEngine/ObjectModels/UnrealEngine/PropertyFlags.cs
new file mode 100644
index 00000000..eb939459
--- /dev/null
+++ b/CSharp/Plugins/UniversalEditor.Plugins.UnrealEngine/ObjectModels/UnrealEngine/PropertyFlags.cs
@@ -0,0 +1,101 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace UniversalEditor.ObjectModels.UnrealEngine
+{
+ [Flags()]
+ public enum PropertyFlags
+ {
+ None = 0x00000000,
+ ///
+ /// Property is user-settable in the editor.
+ ///
+ Editable = 0x00000001,
+ ///
+ /// Actor's property always matches class's default actor property.
+ ///
+ Constant = 0x00000002,
+ ///
+ /// Variable is writable by the input system.
+ ///
+ InputWritable = 0x00000004,
+ ///
+ /// Object can be exported with actor.
+ ///
+ Exportable = 0x00000008,
+ ///
+ /// Optional parameter (if CPF_Param is set).
+ ///
+ OptionalParameter = 0x00000010,
+ ///
+ /// Property is relevant to network replication (not specified in source code)
+ ///
+ NetworkReplication = 0x00000020,
+ ///
+ /// Reference to a constant object.
+ ///
+ ConstantReference = 0x00000040,
+ ///
+ /// Function/When call parameter
+ ///
+ Parameter = 0x00000080,
+ ///
+ /// Value is copied out after function call.
+ ///
+ OutParameter = 0x00000100,
+ ///
+ /// Property is a short-circuitable evaluation function parm.
+ ///
+ SkipParameter = 0x00000200,
+ ///
+ /// Return value.
+ ///
+ ReturnParameter = 0x00000400,
+ ///
+ /// Coerce args into this function parameter
+ ///
+ CoerceParameter = 0x00000800,
+ ///
+ /// Property is native: C++ code is responsible for serializing it.
+ ///
+ Native = 0x00001000,
+ ///
+ /// Property is transient: shouldn't be saved, zero-filled at load time.
+ ///
+ Transient = 0x00002000,
+ ///
+ /// Property should be loaded/saved as permanent profile.
+ ///
+ Configuration = 0x00004000,
+ ///
+ /// Property should be loaded as localizable text
+ ///
+ Localized = 0x00008000,
+ ///
+ /// Property travels across levels/servers.
+ ///
+ Travel = 0x00010000,
+ ///
+ /// Property is uneditable in the editor
+ ///
+ PreventEdit = 0x00020000,
+ ///
+ /// Load config from base class, not subclass.
+ ///
+ GlobalConfiguration = 0x00040000,
+ ///
+ /// Object or dynamic array loaded on demand only.
+ ///
+ Demand = 0x00100000,
+ ///
+ /// Automatically create inner object
+ ///
+ AutoCreate = 0x00200000,
+ ///
+ /// Fields need construction/destruction (not specified in source code)
+ ///
+ ConstructionRequired = 0x00400000
+ }
+}
diff --git a/CSharp/Plugins/UniversalEditor.Plugins.UnrealEngine/ObjectModels/UnrealEngine/PropertyType.cs b/CSharp/Plugins/UniversalEditor.Plugins.UnrealEngine/ObjectModels/UnrealEngine/PropertyType.cs
new file mode 100644
index 00000000..cf32fdeb
--- /dev/null
+++ b/CSharp/Plugins/UniversalEditor.Plugins.UnrealEngine/ObjectModels/UnrealEngine/PropertyType.cs
@@ -0,0 +1,75 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace UniversalEditor.ObjectModels.UnrealEngine
+{
+ public enum PropertyType
+ {
+ Byte = 1,
+ Integer = 2,
+ Boolean = 3,
+ Float = 4,
+ Object = 5,
+ Name = 6,
+ String = 7,
+ Class = 8,
+ Array = 9,
+ Struct = 10,
+ Vector = 11,
+ Rotator = 12,
+ Str = 13,
+ Map = 14,
+ FixedArray = 15
+ }
+
+ /*
+ * Property size values:
+0 = 1 byte
+1 = 2 bytes
+2 = 4 bytes
+3 = 12 bytes
+4 = 16 bytes
+5 = a byte follows with real size
+6 = a word follows with real size
+7 = an integer follows with real size
+ *
+ *
+ * Property value layout:
+ * 0x01 (ByteProperty) Value Format
+0x02 (IntegerProperty) BYTE
+0x03 (BooleanProperty) DWORD
+0x04 (FloatProperty) DWORD
+0x05 (ObjectProperty) INDEX
+0x06 (NameProperty) INDEX
+0x07 (StringProperty) Unknown
+0x08 (ClassProperty)
+0x09 (ArrayProperty) Unknown
+0x0A (StructProperty)
+0x0B (VectorProperty) Unknown
+0x0C (RotatorProperty) Unknown
+0x0D (StrProperty) INDEX length
+ ASCIIZ text
+ Unknown
+ Unknown
+0x0E (MapProperty)
+0x0F (FixedArrayProperty)
+Comments
+The real value is in bit 7 of
+the info byte.
+A 4-byte float.
+Object Reference value.
+See “Object References”.
+Name Reference value.
+Index in to the Name
+Table.
+See below for some known
+classes.
+See below for some known
+structs.
+Length field includes null
+terminator.
+
+ */
+}
diff --git a/CSharp/Plugins/UniversalEditor.Plugins.UnrealEngine/ObjectModels/UnrealEngine/UnrealPackageObjectModel.cs b/CSharp/Plugins/UniversalEditor.Plugins.UnrealEngine/ObjectModels/UnrealEngine/UnrealPackageObjectModel.cs
new file mode 100644
index 00000000..759eaac0
--- /dev/null
+++ b/CSharp/Plugins/UniversalEditor.Plugins.UnrealEngine/ObjectModels/UnrealEngine/UnrealPackageObjectModel.cs
@@ -0,0 +1,95 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace UniversalEditor.ObjectModels.UnrealEngine
+{
+ public class UnrealPackageObjectModel : ObjectModel
+ {
+ private static ObjectModelReference _omr = null;
+ public override ObjectModelReference MakeReference()
+ {
+ if (_omr == null)
+ {
+ _omr = base.MakeReference();
+ _omr.Title = "Unreal Engine package";
+ _omr.Path = new string[] { "Game development", "Unreal Engine", "Package" };
+ }
+ return _omr;
+ }
+
+ private List mvarPackageGUIDs = new List();
+ ///
+ /// Unique identifiers used for package downloading from servers.
+ ///
+ public List PackageGUIDs { get { return mvarPackageGUIDs; } set { mvarPackageGUIDs = value; } }
+
+ private ushort mvarLicenseeNumber = 0;
+ ///
+ /// This is the licensee number, different for each game.
+ ///
+ public ushort LicenseeNumber { get { return mvarLicenseeNumber; } set { mvarLicenseeNumber = value; } }
+
+ private PackageFlags mvarPackageFlags = PackageFlags.None;
+ ///
+ /// Global package flags; i.e., if a package may be downloaded from a game server, etc.
+ ///
+ public PackageFlags PackageFlags { get { return mvarPackageFlags; } set { mvarPackageFlags = value; } }
+
+ private NameTableEntry.NameTableEntryCollection mvarNameTableEntries = new NameTableEntry.NameTableEntryCollection();
+ ///
+ /// The name-table can be considered an index of all unique names used for objects and
+ /// references within the file. Later on, you'll often find indexes into this table instead of
+ /// a string containing the object-name.
+ ///
+ public NameTableEntry.NameTableEntryCollection NameTableEntries { get { return mvarNameTableEntries; } }
+
+ private ExportTableEntry.ExportTableEntryCollection mvarExportTableEntries = new ExportTableEntry.ExportTableEntryCollection();
+ ///
+ /// The export-table is an index for all objects within the package. Every object in the body
+ /// of the file has a corresponding entry in this table, with information like offset within
+ /// the file etc.
+ ///
+ public ExportTableEntry.ExportTableEntryCollection ExportTableEntries { get { return mvarExportTableEntries; } }
+
+ private ImportTableEntry.ImportTableEntryCollection mvarImportTableEntries = new ImportTableEntry.ImportTableEntryCollection();
+ public ImportTableEntry.ImportTableEntryCollection ImportTableEntries { get { return mvarImportTableEntries; } }
+
+ private Generation.GenerationCollection mvarGenerations = new Generation.GenerationCollection();
+ public Generation.GenerationCollection Generations { get { return mvarGenerations; } }
+
+ public override void Clear()
+ {
+ mvarLicenseeNumber = 0;
+ mvarPackageFlags = UnrealEngine.PackageFlags.None;
+ mvarPackageGUIDs.Clear();
+ mvarNameTableEntries.Clear();
+ mvarExportTableEntries.Clear();
+ mvarImportTableEntries.Clear();
+ }
+
+ public override void CopyTo(ObjectModel where)
+ {
+ UnrealPackageObjectModel clone = (where as UnrealPackageObjectModel);
+ clone.LicenseeNumber = mvarLicenseeNumber;
+ clone.PackageFlags = mvarPackageFlags;
+ foreach (Guid guid in mvarPackageGUIDs)
+ {
+ clone.PackageGUIDs.Add(guid);
+ }
+ foreach (NameTableEntry entry in mvarNameTableEntries)
+ {
+ clone.NameTableEntries.Add(entry.Clone() as NameTableEntry);
+ }
+ foreach (ExportTableEntry entry in mvarExportTableEntries)
+ {
+ clone.ExportTableEntries.Add(entry.Clone() as ExportTableEntry);
+ }
+ foreach (ImportTableEntry entry in mvarImportTableEntries)
+ {
+ clone.ImportTableEntries.Add(entry.Clone() as ImportTableEntry);
+ }
+ }
+ }
+}
diff --git a/CSharp/Plugins/UniversalEditor.Plugins.UnrealEngine/Properties/AssemblyInfo.cs b/CSharp/Plugins/UniversalEditor.Plugins.UnrealEngine/Properties/AssemblyInfo.cs
new file mode 100644
index 00000000..39fc52f8
--- /dev/null
+++ b/CSharp/Plugins/UniversalEditor.Plugins.UnrealEngine/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("Unreal Engine plugin for Universal Editor")]
+[assembly: AssemblyDescription("Provides data formats to interact with Epic Games' Unreal game engine assets.")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Mike Becker's Software")]
+[assembly: AssemblyProduct("Universal Editor Plugin Pack")]
+[assembly: AssemblyCopyright("Copyright ©2013 Mike Becker's Software")]
+[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("d54c55f4-4359-4af2-8f27-7908c7002f35")]
+
+// 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/CSharp/Plugins/UniversalEditor.Plugins.UnrealEngine/UniversalEditor.Plugins.UnrealEngine.csproj b/CSharp/Plugins/UniversalEditor.Plugins.UnrealEngine/UniversalEditor.Plugins.UnrealEngine.csproj
new file mode 100644
index 00000000..8ab1fc3a
--- /dev/null
+++ b/CSharp/Plugins/UniversalEditor.Plugins.UnrealEngine/UniversalEditor.Plugins.UnrealEngine.csproj
@@ -0,0 +1,72 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {DF96F24E-FED9-4BAC-8389-63590125DC61}
+ Library
+ Properties
+ UniversalEditor
+ UniversalEditor.Plugins.UnrealEngine
+ v3.5
+ 512
+
+
+ true
+ full
+ false
+ ..\..\Output\Debug\Plugins\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ ..\..\Output\Release\Plugins\
+ TRACE
+ prompt
+ 4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {2d4737e6-6d95-408a-90db-8dff38147e85}
+ UniversalEditor.Core
+
+
+ {30467e5c-05bc-4856-aadc-13906ef4cadd}
+ UniversalEditor.Essential
+
+
+
+
+
\ No newline at end of file
diff --git a/CSharp/UniversalEditor.WindowsForms.sln b/CSharp/UniversalEditor.WindowsForms.sln
index 565e1eba..cc3ee220 100644
--- a/CSharp/UniversalEditor.WindowsForms.sln
+++ b/CSharp/UniversalEditor.WindowsForms.sln
@@ -97,398 +97,176 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UniversalEditor.Plugins.Mul
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sanjigen", "..\..\Sanjigen\Sanjigen\Sanjigen.csproj", "{ED627DF7-3E78-4428-AB31-810BA1586E62}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UniversalEditor.Plugins.UnrealEngine", "Plugins\UniversalEditor.Plugins.UnrealEngine\UniversalEditor.Plugins.UnrealEngine.csproj", "{DF96F24E-FED9-4BAC-8389-63590125DC61}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UniversalEditor.Plugins.UnrealEngine.UserInterface.WindowsForms", "Environments\WindowsForms\Plugins\UniversalEditor.Plugins.UnrealEngine.UserInterface.WindowsForms\UniversalEditor.Plugins.UnrealEngine.UserInterface.WindowsForms.csproj", "{049A3447-14AF-4CAE-BE0E-1C42DD1AB1CB}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
- Debug|Mixed Platforms = Debug|Mixed Platforms
- Debug|x86 = Debug|x86
Release|Any CPU = Release|Any CPU
- Release|Mixed Platforms = Release|Mixed Platforms
- Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{2D4737E6-6D95-408A-90DB-8DFF38147E85}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2D4737E6-6D95-408A-90DB-8DFF38147E85}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {2D4737E6-6D95-408A-90DB-8DFF38147E85}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {2D4737E6-6D95-408A-90DB-8DFF38147E85}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {2D4737E6-6D95-408A-90DB-8DFF38147E85}.Debug|x86.ActiveCfg = Debug|Any CPU
{2D4737E6-6D95-408A-90DB-8DFF38147E85}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2D4737E6-6D95-408A-90DB-8DFF38147E85}.Release|Any CPU.Build.0 = Release|Any CPU
- {2D4737E6-6D95-408A-90DB-8DFF38147E85}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {2D4737E6-6D95-408A-90DB-8DFF38147E85}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {2D4737E6-6D95-408A-90DB-8DFF38147E85}.Release|x86.ActiveCfg = Release|Any CPU
{BAC9FDFD-C39E-4A90-B9F8-CF75B551BE10}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BAC9FDFD-C39E-4A90-B9F8-CF75B551BE10}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {BAC9FDFD-C39E-4A90-B9F8-CF75B551BE10}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {BAC9FDFD-C39E-4A90-B9F8-CF75B551BE10}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {BAC9FDFD-C39E-4A90-B9F8-CF75B551BE10}.Debug|x86.ActiveCfg = Debug|Any CPU
{BAC9FDFD-C39E-4A90-B9F8-CF75B551BE10}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BAC9FDFD-C39E-4A90-B9F8-CF75B551BE10}.Release|Any CPU.Build.0 = Release|Any CPU
- {BAC9FDFD-C39E-4A90-B9F8-CF75B551BE10}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {BAC9FDFD-C39E-4A90-B9F8-CF75B551BE10}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {BAC9FDFD-C39E-4A90-B9F8-CF75B551BE10}.Release|x86.ActiveCfg = Release|Any CPU
{30467E5C-05BC-4856-AADC-13906EF4CADD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{30467E5C-05BC-4856-AADC-13906EF4CADD}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {30467E5C-05BC-4856-AADC-13906EF4CADD}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {30467E5C-05BC-4856-AADC-13906EF4CADD}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {30467E5C-05BC-4856-AADC-13906EF4CADD}.Debug|x86.ActiveCfg = Debug|Any CPU
{30467E5C-05BC-4856-AADC-13906EF4CADD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{30467E5C-05BC-4856-AADC-13906EF4CADD}.Release|Any CPU.Build.0 = Release|Any CPU
- {30467E5C-05BC-4856-AADC-13906EF4CADD}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {30467E5C-05BC-4856-AADC-13906EF4CADD}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {30467E5C-05BC-4856-AADC-13906EF4CADD}.Release|x86.ActiveCfg = Release|Any CPU
{3F664673-7E22-4486-9AD0-FC81861D0B78}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3F664673-7E22-4486-9AD0-FC81861D0B78}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {3F664673-7E22-4486-9AD0-FC81861D0B78}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {3F664673-7E22-4486-9AD0-FC81861D0B78}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {3F664673-7E22-4486-9AD0-FC81861D0B78}.Debug|x86.ActiveCfg = Debug|Any CPU
{3F664673-7E22-4486-9AD0-FC81861D0B78}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3F664673-7E22-4486-9AD0-FC81861D0B78}.Release|Any CPU.Build.0 = Release|Any CPU
- {3F664673-7E22-4486-9AD0-FC81861D0B78}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {3F664673-7E22-4486-9AD0-FC81861D0B78}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {3F664673-7E22-4486-9AD0-FC81861D0B78}.Release|x86.ActiveCfg = Release|Any CPU
{7CA0A889-C1A1-4CEB-AA54-43A640B41C6C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7CA0A889-C1A1-4CEB-AA54-43A640B41C6C}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {7CA0A889-C1A1-4CEB-AA54-43A640B41C6C}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {7CA0A889-C1A1-4CEB-AA54-43A640B41C6C}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {7CA0A889-C1A1-4CEB-AA54-43A640B41C6C}.Debug|x86.ActiveCfg = Debug|Any CPU
{7CA0A889-C1A1-4CEB-AA54-43A640B41C6C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7CA0A889-C1A1-4CEB-AA54-43A640B41C6C}.Release|Any CPU.Build.0 = Release|Any CPU
- {7CA0A889-C1A1-4CEB-AA54-43A640B41C6C}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {7CA0A889-C1A1-4CEB-AA54-43A640B41C6C}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {7CA0A889-C1A1-4CEB-AA54-43A640B41C6C}.Release|x86.ActiveCfg = Release|Any CPU
{BE4D0BA3-0888-42A5-9C09-FC308A4509D2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BE4D0BA3-0888-42A5-9C09-FC308A4509D2}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {BE4D0BA3-0888-42A5-9C09-FC308A4509D2}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {BE4D0BA3-0888-42A5-9C09-FC308A4509D2}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {BE4D0BA3-0888-42A5-9C09-FC308A4509D2}.Debug|x86.ActiveCfg = Debug|Any CPU
{BE4D0BA3-0888-42A5-9C09-FC308A4509D2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BE4D0BA3-0888-42A5-9C09-FC308A4509D2}.Release|Any CPU.Build.0 = Release|Any CPU
- {BE4D0BA3-0888-42A5-9C09-FC308A4509D2}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {BE4D0BA3-0888-42A5-9C09-FC308A4509D2}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {BE4D0BA3-0888-42A5-9C09-FC308A4509D2}.Release|x86.ActiveCfg = Release|Any CPU
{617D9EB5-CA93-45D6-AA6B-5A012B7698AC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{617D9EB5-CA93-45D6-AA6B-5A012B7698AC}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {617D9EB5-CA93-45D6-AA6B-5A012B7698AC}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
- {617D9EB5-CA93-45D6-AA6B-5A012B7698AC}.Debug|Mixed Platforms.Build.0 = Debug|x86
- {617D9EB5-CA93-45D6-AA6B-5A012B7698AC}.Debug|x86.ActiveCfg = Debug|x86
- {617D9EB5-CA93-45D6-AA6B-5A012B7698AC}.Debug|x86.Build.0 = Debug|x86
{617D9EB5-CA93-45D6-AA6B-5A012B7698AC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{617D9EB5-CA93-45D6-AA6B-5A012B7698AC}.Release|Any CPU.Build.0 = Release|Any CPU
- {617D9EB5-CA93-45D6-AA6B-5A012B7698AC}.Release|Mixed Platforms.ActiveCfg = Release|x86
- {617D9EB5-CA93-45D6-AA6B-5A012B7698AC}.Release|Mixed Platforms.Build.0 = Release|x86
- {617D9EB5-CA93-45D6-AA6B-5A012B7698AC}.Release|x86.ActiveCfg = Release|x86
- {617D9EB5-CA93-45D6-AA6B-5A012B7698AC}.Release|x86.Build.0 = Release|x86
{8622EBC4-8E20-476E-B284-33D472081F5C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8622EBC4-8E20-476E-B284-33D472081F5C}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {8622EBC4-8E20-476E-B284-33D472081F5C}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {8622EBC4-8E20-476E-B284-33D472081F5C}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {8622EBC4-8E20-476E-B284-33D472081F5C}.Debug|x86.ActiveCfg = Debug|Any CPU
{8622EBC4-8E20-476E-B284-33D472081F5C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8622EBC4-8E20-476E-B284-33D472081F5C}.Release|Any CPU.Build.0 = Release|Any CPU
- {8622EBC4-8E20-476E-B284-33D472081F5C}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {8622EBC4-8E20-476E-B284-33D472081F5C}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {8622EBC4-8E20-476E-B284-33D472081F5C}.Release|x86.ActiveCfg = Release|Any CPU
{BCBB72BD-0ECB-4FF2-8D91-E466361FB6F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BCBB72BD-0ECB-4FF2-8D91-E466361FB6F9}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {BCBB72BD-0ECB-4FF2-8D91-E466361FB6F9}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {BCBB72BD-0ECB-4FF2-8D91-E466361FB6F9}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {BCBB72BD-0ECB-4FF2-8D91-E466361FB6F9}.Debug|x86.ActiveCfg = Debug|Any CPU
{BCBB72BD-0ECB-4FF2-8D91-E466361FB6F9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BCBB72BD-0ECB-4FF2-8D91-E466361FB6F9}.Release|Any CPU.Build.0 = Release|Any CPU
- {BCBB72BD-0ECB-4FF2-8D91-E466361FB6F9}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {BCBB72BD-0ECB-4FF2-8D91-E466361FB6F9}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {BCBB72BD-0ECB-4FF2-8D91-E466361FB6F9}.Release|x86.ActiveCfg = Release|Any CPU
{FE016EA3-DC31-4A92-8B0A-8C746EC117E1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FE016EA3-DC31-4A92-8B0A-8C746EC117E1}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {FE016EA3-DC31-4A92-8B0A-8C746EC117E1}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {FE016EA3-DC31-4A92-8B0A-8C746EC117E1}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {FE016EA3-DC31-4A92-8B0A-8C746EC117E1}.Debug|x86.ActiveCfg = Debug|Any CPU
{FE016EA3-DC31-4A92-8B0A-8C746EC117E1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FE016EA3-DC31-4A92-8B0A-8C746EC117E1}.Release|Any CPU.Build.0 = Release|Any CPU
- {FE016EA3-DC31-4A92-8B0A-8C746EC117E1}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {FE016EA3-DC31-4A92-8B0A-8C746EC117E1}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {FE016EA3-DC31-4A92-8B0A-8C746EC117E1}.Release|x86.ActiveCfg = Release|Any CPU
{369CFD53-3E65-4A9E-8BDD-4CCD78BF3E33}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{369CFD53-3E65-4A9E-8BDD-4CCD78BF3E33}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {369CFD53-3E65-4A9E-8BDD-4CCD78BF3E33}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {369CFD53-3E65-4A9E-8BDD-4CCD78BF3E33}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {369CFD53-3E65-4A9E-8BDD-4CCD78BF3E33}.Debug|x86.ActiveCfg = Debug|Any CPU
{369CFD53-3E65-4A9E-8BDD-4CCD78BF3E33}.Release|Any CPU.ActiveCfg = Release|Any CPU
{369CFD53-3E65-4A9E-8BDD-4CCD78BF3E33}.Release|Any CPU.Build.0 = Release|Any CPU
- {369CFD53-3E65-4A9E-8BDD-4CCD78BF3E33}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {369CFD53-3E65-4A9E-8BDD-4CCD78BF3E33}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {369CFD53-3E65-4A9E-8BDD-4CCD78BF3E33}.Release|x86.ActiveCfg = Release|Any CPU
{30A2F772-8EC1-425A-8D5D-36A0BE4D6B66}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{30A2F772-8EC1-425A-8D5D-36A0BE4D6B66}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {30A2F772-8EC1-425A-8D5D-36A0BE4D6B66}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {30A2F772-8EC1-425A-8D5D-36A0BE4D6B66}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {30A2F772-8EC1-425A-8D5D-36A0BE4D6B66}.Debug|x86.ActiveCfg = Debug|Any CPU
{30A2F772-8EC1-425A-8D5D-36A0BE4D6B66}.Release|Any CPU.ActiveCfg = Release|Any CPU
{30A2F772-8EC1-425A-8D5D-36A0BE4D6B66}.Release|Any CPU.Build.0 = Release|Any CPU
- {30A2F772-8EC1-425A-8D5D-36A0BE4D6B66}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {30A2F772-8EC1-425A-8D5D-36A0BE4D6B66}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {30A2F772-8EC1-425A-8D5D-36A0BE4D6B66}.Release|x86.ActiveCfg = Release|Any CPU
{3DC2C1F6-F332-4E55-BF6A-AED78A7C3FD2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3DC2C1F6-F332-4E55-BF6A-AED78A7C3FD2}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {3DC2C1F6-F332-4E55-BF6A-AED78A7C3FD2}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {3DC2C1F6-F332-4E55-BF6A-AED78A7C3FD2}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {3DC2C1F6-F332-4E55-BF6A-AED78A7C3FD2}.Debug|x86.ActiveCfg = Debug|Any CPU
{3DC2C1F6-F332-4E55-BF6A-AED78A7C3FD2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3DC2C1F6-F332-4E55-BF6A-AED78A7C3FD2}.Release|Any CPU.Build.0 = Release|Any CPU
- {3DC2C1F6-F332-4E55-BF6A-AED78A7C3FD2}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {3DC2C1F6-F332-4E55-BF6A-AED78A7C3FD2}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {3DC2C1F6-F332-4E55-BF6A-AED78A7C3FD2}.Release|x86.ActiveCfg = Release|Any CPU
{899E3DD6-EA65-4168-AAE3-867A4F9650A6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{899E3DD6-EA65-4168-AAE3-867A4F9650A6}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {899E3DD6-EA65-4168-AAE3-867A4F9650A6}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {899E3DD6-EA65-4168-AAE3-867A4F9650A6}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {899E3DD6-EA65-4168-AAE3-867A4F9650A6}.Debug|x86.ActiveCfg = Debug|Any CPU
{899E3DD6-EA65-4168-AAE3-867A4F9650A6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{899E3DD6-EA65-4168-AAE3-867A4F9650A6}.Release|Any CPU.Build.0 = Release|Any CPU
- {899E3DD6-EA65-4168-AAE3-867A4F9650A6}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {899E3DD6-EA65-4168-AAE3-867A4F9650A6}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {899E3DD6-EA65-4168-AAE3-867A4F9650A6}.Release|x86.ActiveCfg = Release|Any CPU
{6F0AB1AF-E1A1-4D19-B19C-05BBB15C94B2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6F0AB1AF-E1A1-4D19-B19C-05BBB15C94B2}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {6F0AB1AF-E1A1-4D19-B19C-05BBB15C94B2}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {6F0AB1AF-E1A1-4D19-B19C-05BBB15C94B2}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {6F0AB1AF-E1A1-4D19-B19C-05BBB15C94B2}.Debug|x86.ActiveCfg = Debug|Any CPU
{6F0AB1AF-E1A1-4D19-B19C-05BBB15C94B2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6F0AB1AF-E1A1-4D19-B19C-05BBB15C94B2}.Release|Any CPU.Build.0 = Release|Any CPU
- {6F0AB1AF-E1A1-4D19-B19C-05BBB15C94B2}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {6F0AB1AF-E1A1-4D19-B19C-05BBB15C94B2}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {6F0AB1AF-E1A1-4D19-B19C-05BBB15C94B2}.Release|x86.ActiveCfg = Release|Any CPU
{19AEFD28-37E8-4FFD-B879-FEE57824689D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{19AEFD28-37E8-4FFD-B879-FEE57824689D}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {19AEFD28-37E8-4FFD-B879-FEE57824689D}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {19AEFD28-37E8-4FFD-B879-FEE57824689D}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {19AEFD28-37E8-4FFD-B879-FEE57824689D}.Debug|x86.ActiveCfg = Debug|Any CPU
{19AEFD28-37E8-4FFD-B879-FEE57824689D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{19AEFD28-37E8-4FFD-B879-FEE57824689D}.Release|Any CPU.Build.0 = Release|Any CPU
- {19AEFD28-37E8-4FFD-B879-FEE57824689D}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {19AEFD28-37E8-4FFD-B879-FEE57824689D}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {19AEFD28-37E8-4FFD-B879-FEE57824689D}.Release|x86.ActiveCfg = Release|Any CPU
{76FD1306-9CA4-428F-993B-B7E4EEEACBF3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{76FD1306-9CA4-428F-993B-B7E4EEEACBF3}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {76FD1306-9CA4-428F-993B-B7E4EEEACBF3}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {76FD1306-9CA4-428F-993B-B7E4EEEACBF3}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {76FD1306-9CA4-428F-993B-B7E4EEEACBF3}.Debug|x86.ActiveCfg = Debug|Any CPU
{76FD1306-9CA4-428F-993B-B7E4EEEACBF3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{76FD1306-9CA4-428F-993B-B7E4EEEACBF3}.Release|Any CPU.Build.0 = Release|Any CPU
- {76FD1306-9CA4-428F-993B-B7E4EEEACBF3}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {76FD1306-9CA4-428F-993B-B7E4EEEACBF3}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {76FD1306-9CA4-428F-993B-B7E4EEEACBF3}.Release|x86.ActiveCfg = Release|Any CPU
{26095090-3F7D-4DB5-A9BF-4C687230FC0F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{26095090-3F7D-4DB5-A9BF-4C687230FC0F}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {26095090-3F7D-4DB5-A9BF-4C687230FC0F}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {26095090-3F7D-4DB5-A9BF-4C687230FC0F}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {26095090-3F7D-4DB5-A9BF-4C687230FC0F}.Debug|x86.ActiveCfg = Debug|Any CPU
{26095090-3F7D-4DB5-A9BF-4C687230FC0F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{26095090-3F7D-4DB5-A9BF-4C687230FC0F}.Release|Any CPU.Build.0 = Release|Any CPU
- {26095090-3F7D-4DB5-A9BF-4C687230FC0F}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {26095090-3F7D-4DB5-A9BF-4C687230FC0F}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {26095090-3F7D-4DB5-A9BF-4C687230FC0F}.Release|x86.ActiveCfg = Release|Any CPU
{118E40C4-323E-4B4B-8EF4-38EED6CC5E83}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{118E40C4-323E-4B4B-8EF4-38EED6CC5E83}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {118E40C4-323E-4B4B-8EF4-38EED6CC5E83}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {118E40C4-323E-4B4B-8EF4-38EED6CC5E83}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {118E40C4-323E-4B4B-8EF4-38EED6CC5E83}.Debug|x86.ActiveCfg = Debug|Any CPU
{118E40C4-323E-4B4B-8EF4-38EED6CC5E83}.Release|Any CPU.ActiveCfg = Release|Any CPU
{118E40C4-323E-4B4B-8EF4-38EED6CC5E83}.Release|Any CPU.Build.0 = Release|Any CPU
- {118E40C4-323E-4B4B-8EF4-38EED6CC5E83}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {118E40C4-323E-4B4B-8EF4-38EED6CC5E83}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {118E40C4-323E-4B4B-8EF4-38EED6CC5E83}.Release|x86.ActiveCfg = Release|Any CPU
{4250B20B-2DC9-432F-B0C2-BD20B80B4970}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4250B20B-2DC9-432F-B0C2-BD20B80B4970}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {4250B20B-2DC9-432F-B0C2-BD20B80B4970}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {4250B20B-2DC9-432F-B0C2-BD20B80B4970}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {4250B20B-2DC9-432F-B0C2-BD20B80B4970}.Debug|x86.ActiveCfg = Debug|Any CPU
{4250B20B-2DC9-432F-B0C2-BD20B80B4970}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4250B20B-2DC9-432F-B0C2-BD20B80B4970}.Release|Any CPU.Build.0 = Release|Any CPU
- {4250B20B-2DC9-432F-B0C2-BD20B80B4970}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {4250B20B-2DC9-432F-B0C2-BD20B80B4970}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {4250B20B-2DC9-432F-B0C2-BD20B80B4970}.Release|x86.ActiveCfg = Release|Any CPU
{D4D9C9A6-04A4-46AD-8238-2493A455723F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D4D9C9A6-04A4-46AD-8238-2493A455723F}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {D4D9C9A6-04A4-46AD-8238-2493A455723F}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {D4D9C9A6-04A4-46AD-8238-2493A455723F}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {D4D9C9A6-04A4-46AD-8238-2493A455723F}.Debug|x86.ActiveCfg = Debug|Any CPU
{D4D9C9A6-04A4-46AD-8238-2493A455723F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D4D9C9A6-04A4-46AD-8238-2493A455723F}.Release|Any CPU.Build.0 = Release|Any CPU
- {D4D9C9A6-04A4-46AD-8238-2493A455723F}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {D4D9C9A6-04A4-46AD-8238-2493A455723F}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {D4D9C9A6-04A4-46AD-8238-2493A455723F}.Release|x86.ActiveCfg = Release|Any CPU
{62CFC025-B8CF-42AA-880A-92F27377FCAF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{62CFC025-B8CF-42AA-880A-92F27377FCAF}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {62CFC025-B8CF-42AA-880A-92F27377FCAF}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {62CFC025-B8CF-42AA-880A-92F27377FCAF}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {62CFC025-B8CF-42AA-880A-92F27377FCAF}.Debug|x86.ActiveCfg = Debug|Any CPU
{62CFC025-B8CF-42AA-880A-92F27377FCAF}.Release|Any CPU.ActiveCfg = Release|Any CPU
{62CFC025-B8CF-42AA-880A-92F27377FCAF}.Release|Any CPU.Build.0 = Release|Any CPU
- {62CFC025-B8CF-42AA-880A-92F27377FCAF}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {62CFC025-B8CF-42AA-880A-92F27377FCAF}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {62CFC025-B8CF-42AA-880A-92F27377FCAF}.Release|x86.ActiveCfg = Release|Any CPU
{4FD9DB1D-76AA-48D1-8446-95376C4A2BC2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4FD9DB1D-76AA-48D1-8446-95376C4A2BC2}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {4FD9DB1D-76AA-48D1-8446-95376C4A2BC2}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {4FD9DB1D-76AA-48D1-8446-95376C4A2BC2}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {4FD9DB1D-76AA-48D1-8446-95376C4A2BC2}.Debug|x86.ActiveCfg = Debug|Any CPU
{4FD9DB1D-76AA-48D1-8446-95376C4A2BC2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4FD9DB1D-76AA-48D1-8446-95376C4A2BC2}.Release|Any CPU.Build.0 = Release|Any CPU
- {4FD9DB1D-76AA-48D1-8446-95376C4A2BC2}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {4FD9DB1D-76AA-48D1-8446-95376C4A2BC2}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {4FD9DB1D-76AA-48D1-8446-95376C4A2BC2}.Release|x86.ActiveCfg = Release|Any CPU
{10B9B771-9939-4D0B-8D47-501B6F60209F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{10B9B771-9939-4D0B-8D47-501B6F60209F}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {10B9B771-9939-4D0B-8D47-501B6F60209F}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {10B9B771-9939-4D0B-8D47-501B6F60209F}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {10B9B771-9939-4D0B-8D47-501B6F60209F}.Debug|x86.ActiveCfg = Debug|Any CPU
{10B9B771-9939-4D0B-8D47-501B6F60209F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{10B9B771-9939-4D0B-8D47-501B6F60209F}.Release|Any CPU.Build.0 = Release|Any CPU
- {10B9B771-9939-4D0B-8D47-501B6F60209F}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {10B9B771-9939-4D0B-8D47-501B6F60209F}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {10B9B771-9939-4D0B-8D47-501B6F60209F}.Release|x86.ActiveCfg = Release|Any CPU
{FEC4EAD0-8A6E-4029-A537-EBD9F420B227}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FEC4EAD0-8A6E-4029-A537-EBD9F420B227}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {FEC4EAD0-8A6E-4029-A537-EBD9F420B227}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {FEC4EAD0-8A6E-4029-A537-EBD9F420B227}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {FEC4EAD0-8A6E-4029-A537-EBD9F420B227}.Debug|x86.ActiveCfg = Debug|Any CPU
{FEC4EAD0-8A6E-4029-A537-EBD9F420B227}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FEC4EAD0-8A6E-4029-A537-EBD9F420B227}.Release|Any CPU.Build.0 = Release|Any CPU
- {FEC4EAD0-8A6E-4029-A537-EBD9F420B227}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {FEC4EAD0-8A6E-4029-A537-EBD9F420B227}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {FEC4EAD0-8A6E-4029-A537-EBD9F420B227}.Release|x86.ActiveCfg = Release|Any CPU
{828C6BB6-3543-4EAF-B0F9-F11410AE8836}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{828C6BB6-3543-4EAF-B0F9-F11410AE8836}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {828C6BB6-3543-4EAF-B0F9-F11410AE8836}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {828C6BB6-3543-4EAF-B0F9-F11410AE8836}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {828C6BB6-3543-4EAF-B0F9-F11410AE8836}.Debug|x86.ActiveCfg = Debug|Any CPU
{828C6BB6-3543-4EAF-B0F9-F11410AE8836}.Release|Any CPU.ActiveCfg = Release|Any CPU
{828C6BB6-3543-4EAF-B0F9-F11410AE8836}.Release|Any CPU.Build.0 = Release|Any CPU
- {828C6BB6-3543-4EAF-B0F9-F11410AE8836}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {828C6BB6-3543-4EAF-B0F9-F11410AE8836}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {828C6BB6-3543-4EAF-B0F9-F11410AE8836}.Release|x86.ActiveCfg = Release|Any CPU
{1C24F4F8-9D94-4783-B5C0-11564D70B76A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1C24F4F8-9D94-4783-B5C0-11564D70B76A}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {1C24F4F8-9D94-4783-B5C0-11564D70B76A}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {1C24F4F8-9D94-4783-B5C0-11564D70B76A}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {1C24F4F8-9D94-4783-B5C0-11564D70B76A}.Debug|x86.ActiveCfg = Debug|Any CPU
{1C24F4F8-9D94-4783-B5C0-11564D70B76A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1C24F4F8-9D94-4783-B5C0-11564D70B76A}.Release|Any CPU.Build.0 = Release|Any CPU
- {1C24F4F8-9D94-4783-B5C0-11564D70B76A}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {1C24F4F8-9D94-4783-B5C0-11564D70B76A}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {1C24F4F8-9D94-4783-B5C0-11564D70B76A}.Release|x86.ActiveCfg = Release|Any CPU
{D3BBDA07-5088-454E-A16D-DA24D8D88037}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D3BBDA07-5088-454E-A16D-DA24D8D88037}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {D3BBDA07-5088-454E-A16D-DA24D8D88037}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {D3BBDA07-5088-454E-A16D-DA24D8D88037}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {D3BBDA07-5088-454E-A16D-DA24D8D88037}.Debug|x86.ActiveCfg = Debug|Any CPU
{D3BBDA07-5088-454E-A16D-DA24D8D88037}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D3BBDA07-5088-454E-A16D-DA24D8D88037}.Release|Any CPU.Build.0 = Release|Any CPU
- {D3BBDA07-5088-454E-A16D-DA24D8D88037}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {D3BBDA07-5088-454E-A16D-DA24D8D88037}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {D3BBDA07-5088-454E-A16D-DA24D8D88037}.Release|x86.ActiveCfg = Release|Any CPU
{FFC91B24-39AF-49AC-9A3A-900FBE1012ED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FFC91B24-39AF-49AC-9A3A-900FBE1012ED}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {FFC91B24-39AF-49AC-9A3A-900FBE1012ED}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {FFC91B24-39AF-49AC-9A3A-900FBE1012ED}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {FFC91B24-39AF-49AC-9A3A-900FBE1012ED}.Debug|x86.ActiveCfg = Debug|Any CPU
{FFC91B24-39AF-49AC-9A3A-900FBE1012ED}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FFC91B24-39AF-49AC-9A3A-900FBE1012ED}.Release|Any CPU.Build.0 = Release|Any CPU
- {FFC91B24-39AF-49AC-9A3A-900FBE1012ED}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {FFC91B24-39AF-49AC-9A3A-900FBE1012ED}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {FFC91B24-39AF-49AC-9A3A-900FBE1012ED}.Release|x86.ActiveCfg = Release|Any CPU
{FD6B879E-46B0-47BE-860E-BF0C11135590}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FD6B879E-46B0-47BE-860E-BF0C11135590}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {FD6B879E-46B0-47BE-860E-BF0C11135590}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {FD6B879E-46B0-47BE-860E-BF0C11135590}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {FD6B879E-46B0-47BE-860E-BF0C11135590}.Debug|x86.ActiveCfg = Debug|Any CPU
{FD6B879E-46B0-47BE-860E-BF0C11135590}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FD6B879E-46B0-47BE-860E-BF0C11135590}.Release|Any CPU.Build.0 = Release|Any CPU
- {FD6B879E-46B0-47BE-860E-BF0C11135590}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {FD6B879E-46B0-47BE-860E-BF0C11135590}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {FD6B879E-46B0-47BE-860E-BF0C11135590}.Release|x86.ActiveCfg = Release|Any CPU
{41DBA506-177E-4B2D-8E6D-738E371326A1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{41DBA506-177E-4B2D-8E6D-738E371326A1}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {41DBA506-177E-4B2D-8E6D-738E371326A1}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {41DBA506-177E-4B2D-8E6D-738E371326A1}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {41DBA506-177E-4B2D-8E6D-738E371326A1}.Debug|x86.ActiveCfg = Debug|Any CPU
{41DBA506-177E-4B2D-8E6D-738E371326A1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{41DBA506-177E-4B2D-8E6D-738E371326A1}.Release|Any CPU.Build.0 = Release|Any CPU
- {41DBA506-177E-4B2D-8E6D-738E371326A1}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {41DBA506-177E-4B2D-8E6D-738E371326A1}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {41DBA506-177E-4B2D-8E6D-738E371326A1}.Release|x86.ActiveCfg = Release|Any CPU
{BED1EEAF-9ADD-46F6-92D0-53957858E25B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BED1EEAF-9ADD-46F6-92D0-53957858E25B}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {BED1EEAF-9ADD-46F6-92D0-53957858E25B}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {BED1EEAF-9ADD-46F6-92D0-53957858E25B}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {BED1EEAF-9ADD-46F6-92D0-53957858E25B}.Debug|x86.ActiveCfg = Debug|Any CPU
{BED1EEAF-9ADD-46F6-92D0-53957858E25B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BED1EEAF-9ADD-46F6-92D0-53957858E25B}.Release|Any CPU.Build.0 = Release|Any CPU
- {BED1EEAF-9ADD-46F6-92D0-53957858E25B}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {BED1EEAF-9ADD-46F6-92D0-53957858E25B}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {BED1EEAF-9ADD-46F6-92D0-53957858E25B}.Release|x86.ActiveCfg = Release|Any CPU
{D8E59ADD-B591-49AF-B18E-6E0D4581700C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D8E59ADD-B591-49AF-B18E-6E0D4581700C}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {D8E59ADD-B591-49AF-B18E-6E0D4581700C}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {D8E59ADD-B591-49AF-B18E-6E0D4581700C}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {D8E59ADD-B591-49AF-B18E-6E0D4581700C}.Debug|x86.ActiveCfg = Debug|Any CPU
{D8E59ADD-B591-49AF-B18E-6E0D4581700C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D8E59ADD-B591-49AF-B18E-6E0D4581700C}.Release|Any CPU.Build.0 = Release|Any CPU
- {D8E59ADD-B591-49AF-B18E-6E0D4581700C}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {D8E59ADD-B591-49AF-B18E-6E0D4581700C}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {D8E59ADD-B591-49AF-B18E-6E0D4581700C}.Release|x86.ActiveCfg = Release|Any CPU
{E0897B7B-617A-4709-A4C6-FC0F6B441B2A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E0897B7B-617A-4709-A4C6-FC0F6B441B2A}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {E0897B7B-617A-4709-A4C6-FC0F6B441B2A}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {E0897B7B-617A-4709-A4C6-FC0F6B441B2A}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {E0897B7B-617A-4709-A4C6-FC0F6B441B2A}.Debug|x86.ActiveCfg = Debug|Any CPU
{E0897B7B-617A-4709-A4C6-FC0F6B441B2A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E0897B7B-617A-4709-A4C6-FC0F6B441B2A}.Release|Any CPU.Build.0 = Release|Any CPU
- {E0897B7B-617A-4709-A4C6-FC0F6B441B2A}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {E0897B7B-617A-4709-A4C6-FC0F6B441B2A}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {E0897B7B-617A-4709-A4C6-FC0F6B441B2A}.Release|x86.ActiveCfg = Release|Any CPU
{9F1FDC26-5F1C-4C2A-BBBF-3A597A72802D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9F1FDC26-5F1C-4C2A-BBBF-3A597A72802D}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {9F1FDC26-5F1C-4C2A-BBBF-3A597A72802D}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {9F1FDC26-5F1C-4C2A-BBBF-3A597A72802D}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {9F1FDC26-5F1C-4C2A-BBBF-3A597A72802D}.Debug|x86.ActiveCfg = Debug|Any CPU
{9F1FDC26-5F1C-4C2A-BBBF-3A597A72802D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9F1FDC26-5F1C-4C2A-BBBF-3A597A72802D}.Release|Any CPU.Build.0 = Release|Any CPU
- {9F1FDC26-5F1C-4C2A-BBBF-3A597A72802D}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {9F1FDC26-5F1C-4C2A-BBBF-3A597A72802D}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {9F1FDC26-5F1C-4C2A-BBBF-3A597A72802D}.Release|x86.ActiveCfg = Release|Any CPU
{E6C9A73D-4556-4220-9BC7-302A7EE64C1A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E6C9A73D-4556-4220-9BC7-302A7EE64C1A}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {E6C9A73D-4556-4220-9BC7-302A7EE64C1A}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {E6C9A73D-4556-4220-9BC7-302A7EE64C1A}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {E6C9A73D-4556-4220-9BC7-302A7EE64C1A}.Debug|x86.ActiveCfg = Debug|Any CPU
{E6C9A73D-4556-4220-9BC7-302A7EE64C1A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E6C9A73D-4556-4220-9BC7-302A7EE64C1A}.Release|Any CPU.Build.0 = Release|Any CPU
- {E6C9A73D-4556-4220-9BC7-302A7EE64C1A}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {E6C9A73D-4556-4220-9BC7-302A7EE64C1A}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {E6C9A73D-4556-4220-9BC7-302A7EE64C1A}.Release|x86.ActiveCfg = Release|Any CPU
{9B5ABDC3-ADF7-42B7-ADE9-8DC715310492}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9B5ABDC3-ADF7-42B7-ADE9-8DC715310492}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {9B5ABDC3-ADF7-42B7-ADE9-8DC715310492}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {9B5ABDC3-ADF7-42B7-ADE9-8DC715310492}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {9B5ABDC3-ADF7-42B7-ADE9-8DC715310492}.Debug|x86.ActiveCfg = Debug|Any CPU
{9B5ABDC3-ADF7-42B7-ADE9-8DC715310492}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9B5ABDC3-ADF7-42B7-ADE9-8DC715310492}.Release|Any CPU.Build.0 = Release|Any CPU
- {9B5ABDC3-ADF7-42B7-ADE9-8DC715310492}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {9B5ABDC3-ADF7-42B7-ADE9-8DC715310492}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {9B5ABDC3-ADF7-42B7-ADE9-8DC715310492}.Release|x86.ActiveCfg = Release|Any CPU
{ED627DF7-3E78-4428-AB31-810BA1586E62}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{ED627DF7-3E78-4428-AB31-810BA1586E62}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {ED627DF7-3E78-4428-AB31-810BA1586E62}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {ED627DF7-3E78-4428-AB31-810BA1586E62}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {ED627DF7-3E78-4428-AB31-810BA1586E62}.Debug|x86.ActiveCfg = Debug|Any CPU
{ED627DF7-3E78-4428-AB31-810BA1586E62}.Release|Any CPU.ActiveCfg = Release|Any CPU
{ED627DF7-3E78-4428-AB31-810BA1586E62}.Release|Any CPU.Build.0 = Release|Any CPU
- {ED627DF7-3E78-4428-AB31-810BA1586E62}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {ED627DF7-3E78-4428-AB31-810BA1586E62}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {ED627DF7-3E78-4428-AB31-810BA1586E62}.Release|x86.ActiveCfg = Release|Any CPU
+ {DF96F24E-FED9-4BAC-8389-63590125DC61}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {DF96F24E-FED9-4BAC-8389-63590125DC61}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {DF96F24E-FED9-4BAC-8389-63590125DC61}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {DF96F24E-FED9-4BAC-8389-63590125DC61}.Release|Any CPU.Build.0 = Release|Any CPU
+ {049A3447-14AF-4CAE-BE0E-1C42DD1AB1CB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {049A3447-14AF-4CAE-BE0E-1C42DD1AB1CB}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {049A3447-14AF-4CAE-BE0E-1C42DD1AB1CB}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {049A3447-14AF-4CAE-BE0E-1C42DD1AB1CB}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -523,6 +301,7 @@ Global
{BED1EEAF-9ADD-46F6-92D0-53957858E25B} = {71CFF024-26F7-4626-A526-B435FDF8D64E}
{9F1FDC26-5F1C-4C2A-BBBF-3A597A72802D} = {71CFF024-26F7-4626-A526-B435FDF8D64E}
{E6C9A73D-4556-4220-9BC7-302A7EE64C1A} = {71CFF024-26F7-4626-A526-B435FDF8D64E}
+ {DF96F24E-FED9-4BAC-8389-63590125DC61} = {71CFF024-26F7-4626-A526-B435FDF8D64E}
{FE016EA3-DC31-4A92-8B0A-8C746EC117E1} = {46041F27-7C1C-4209-B72B-251EDB5D4C61}
{ED627DF7-3E78-4428-AB31-810BA1586E62} = {46041F27-7C1C-4209-B72B-251EDB5D4C61}
{C1F34183-7A2F-41A6-9958-F6F329099654} = {A846CA33-9CAA-4237-B14F-8721DBA89442}
@@ -536,6 +315,7 @@ Global
{4250B20B-2DC9-432F-B0C2-BD20B80B4970} = {D3CE7A47-3989-4B6D-9867-0EA3C8DD7AB1}
{D8E59ADD-B591-49AF-B18E-6E0D4581700C} = {D3CE7A47-3989-4B6D-9867-0EA3C8DD7AB1}
{9B5ABDC3-ADF7-42B7-ADE9-8DC715310492} = {D3CE7A47-3989-4B6D-9867-0EA3C8DD7AB1}
+ {049A3447-14AF-4CAE-BE0E-1C42DD1AB1CB} = {D3CE7A47-3989-4B6D-9867-0EA3C8DD7AB1}
{118E40C4-323E-4B4B-8EF4-38EED6CC5E83} = {54990D5E-CE09-459F-916E-AF13101765B4}
EndGlobalSection
EndGlobal