From dc577a228d97f5aa60c8cd4f5186e0985fc51e3a Mon Sep 17 00:00:00 2001 From: AnD Date: Fri, 27 Feb 2026 15:30:54 -0700 Subject: [PATCH] Encrypted all Admin version with Encrypt/Decrypt buttons --- App.config | 9 +- FormConfiguration.Designer.cs | 142 +++++---- FormConfiguration.cs | 121 +++++--- FormConfiguration.resx | 3 + FormParameters.cs | 2 +- Profile.cs | 3 +- SSH_Test.csproj | 22 +- TastList.Designer.cs | 65 +++- TastList.cs | 524 ++++++++++++++++++++------------- TastList.resx | 9 + Utilities.cs | 381 +++++++++++++++++++----- bin/Debug/SSH_Test.exe | Bin 435200 -> 442368 bytes bin/Debug/SSH_Test.exe.config | 9 +- bin/Debug/SSH_Test.pdb | Bin 120320 -> 126464 bytes bin/Debug/profile.json | Bin 12158 -> 13204 bytes bin/Debug/tasklist - Copy.json | 446 ++++++++++++++++------------ bin/Debug/tasklist.json | Bin 5792 -> 7924 bytes packages.config | 7 +- profile.json | 24 +- tasklist.json | 260 ++++++++++------ 20 files changed, 1322 insertions(+), 705 deletions(-) diff --git a/App.config b/App.config index bbb4072..1b52a61 100644 --- a/App.config +++ b/App.config @@ -1,13 +1,10 @@  - - - - + @@ -25,6 +22,10 @@ + + + + \ No newline at end of file diff --git a/FormConfiguration.Designer.cs b/FormConfiguration.Designer.cs index 5347d47..e76c440 100644 --- a/FormConfiguration.Designer.cs +++ b/FormConfiguration.Designer.cs @@ -41,16 +41,16 @@ this.label5 = new System.Windows.Forms.Label(); this.textBoxTftpIP = new System.Windows.Forms.TextBox(); this.groupBox3 = new System.Windows.Forms.GroupBox(); - this.checkBox_Local = new System.Windows.Forms.CheckBox(); - this.label3 = new System.Windows.Forms.Label(); - this.textBoxIDRACPassword = new System.Windows.Forms.TextBox(); - this.label4 = new System.Windows.Forms.Label(); - this.textBoxIDRACUsername = new System.Windows.Forms.TextBox(); - this.label6 = new System.Windows.Forms.Label(); - this.textBoxIDRACIP = new System.Windows.Forms.TextBox(); + this.groupBox4 = new System.Windows.Forms.GroupBox(); + this.buttonTasklistDec = new System.Windows.Forms.Button(); + this.buttonTasklistEnc = new System.Windows.Forms.Button(); + this.buttonEncryptTaskList = new System.Windows.Forms.Button(); + this.checkBox_Encryption = new System.Windows.Forms.CheckBox(); + this.openFileDialogTasklist = new System.Windows.Forms.OpenFileDialog(); this.groupBox1.SuspendLayout(); this.groupBox2.SuspendLayout(); this.groupBox3.SuspendLayout(); + this.groupBox4.SuspendLayout(); this.SuspendLayout(); // // labelIP @@ -61,7 +61,6 @@ this.labelIP.Size = new System.Drawing.Size(17, 13); this.labelIP.TabIndex = 0; this.labelIP.Text = "IP"; - this.labelIP.Click += new System.EventHandler(this.label1_Click); // // textBoxSftpIP // @@ -69,7 +68,6 @@ this.textBoxSftpIP.Name = "textBoxSftpIP"; this.textBoxSftpIP.Size = new System.Drawing.Size(214, 20); this.textBoxSftpIP.TabIndex = 1; - this.textBoxSftpIP.TextChanged += new System.EventHandler(this.textBox1_TextChanged); // // groupBox1 // @@ -85,7 +83,6 @@ this.groupBox1.TabIndex = 3; this.groupBox1.TabStop = false; this.groupBox1.Text = "Sftp"; - this.groupBox1.Enter += new System.EventHandler(this.groupBox1_Enter); // // label2 // @@ -95,7 +92,6 @@ this.label2.Size = new System.Drawing.Size(53, 13); this.label2.TabIndex = 4; this.label2.Text = "Password"; - this.label2.Click += new System.EventHandler(this.label2_Click); // // textBoxSftpPassword // @@ -159,85 +155,79 @@ // // groupBox3 // - this.groupBox3.Controls.Add(this.checkBox_Local); - this.groupBox3.Controls.Add(this.label3); - this.groupBox3.Controls.Add(this.textBoxIDRACPassword); - this.groupBox3.Controls.Add(this.label4); - this.groupBox3.Controls.Add(this.textBoxIDRACUsername); - this.groupBox3.Controls.Add(this.label6); - this.groupBox3.Controls.Add(this.textBoxIDRACIP); + this.groupBox3.Controls.Add(this.groupBox4); + this.groupBox3.Controls.Add(this.buttonEncryptTaskList); + this.groupBox3.Controls.Add(this.checkBox_Encryption); this.groupBox3.Location = new System.Drawing.Point(307, 12); this.groupBox3.Name = "groupBox3"; - this.groupBox3.Size = new System.Drawing.Size(278, 152); + this.groupBox3.Size = new System.Drawing.Size(240, 177); this.groupBox3.TabIndex = 6; this.groupBox3.TabStop = false; - this.groupBox3.Text = "IDRAC"; + this.groupBox3.Text = "Encryption"; // - // checkBox_Local + // groupBox4 // - this.checkBox_Local.AutoSize = true; - this.checkBox_Local.Location = new System.Drawing.Point(23, 19); - this.checkBox_Local.Name = "checkBox_Local"; - this.checkBox_Local.Size = new System.Drawing.Size(52, 17); - this.checkBox_Local.TabIndex = 6; - this.checkBox_Local.Text = "Local"; - this.checkBox_Local.UseVisualStyleBackColor = true; - this.checkBox_Local.CheckedChanged += new System.EventHandler(this.checkBox_Local_CheckedChanged); + this.groupBox4.Controls.Add(this.buttonTasklistDec); + this.groupBox4.Controls.Add(this.buttonTasklistEnc); + this.groupBox4.Location = new System.Drawing.Point(8, 42); + this.groupBox4.Name = "groupBox4"; + this.groupBox4.Size = new System.Drawing.Size(220, 62); + this.groupBox4.TabIndex = 8; + this.groupBox4.TabStop = false; + this.groupBox4.Text = "Tasklist, Profile, Powershell Script File"; // - // label3 + // buttonTasklistDec // - this.label3.AutoSize = true; - this.label3.Location = new System.Drawing.Point(20, 105); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(53, 13); - this.label3.TabIndex = 4; - this.label3.Text = "Password"; + this.buttonTasklistDec.Location = new System.Drawing.Point(123, 19); + this.buttonTasklistDec.Name = "buttonTasklistDec"; + this.buttonTasklistDec.Size = new System.Drawing.Size(86, 37); + this.buttonTasklistDec.TabIndex = 8; + this.buttonTasklistDec.Text = "Decrypt"; + this.buttonTasklistDec.UseVisualStyleBackColor = true; + this.buttonTasklistDec.Click += new System.EventHandler(this.buttonTasklistDec_Click); // - // textBoxIDRACPassword + // buttonTasklistEnc // - this.textBoxIDRACPassword.Location = new System.Drawing.Point(83, 102); - this.textBoxIDRACPassword.Name = "textBoxIDRACPassword"; - this.textBoxIDRACPassword.Size = new System.Drawing.Size(186, 20); - this.textBoxIDRACPassword.TabIndex = 5; - this.textBoxIDRACPassword.UseSystemPasswordChar = true; + this.buttonTasklistEnc.Location = new System.Drawing.Point(11, 19); + this.buttonTasklistEnc.Name = "buttonTasklistEnc"; + this.buttonTasklistEnc.Size = new System.Drawing.Size(86, 37); + this.buttonTasklistEnc.TabIndex = 7; + this.buttonTasklistEnc.Text = "Encrypt"; + this.buttonTasklistEnc.UseVisualStyleBackColor = true; + this.buttonTasklistEnc.Click += new System.EventHandler(this.buttonTasklistEnc_Click); // - // label4 + // buttonEncryptTaskList // - this.label4.AutoSize = true; - this.label4.Location = new System.Drawing.Point(20, 79); - this.label4.Name = "label4"; - this.label4.Size = new System.Drawing.Size(57, 13); - this.label4.TabIndex = 2; - this.label4.Text = "UserName"; + this.buttonEncryptTaskList.Location = new System.Drawing.Point(23, 43); + this.buttonEncryptTaskList.Name = "buttonEncryptTaskList"; + this.buttonEncryptTaskList.Size = new System.Drawing.Size(75, 23); + this.buttonEncryptTaskList.TabIndex = 7; + this.buttonEncryptTaskList.Text = "Encrypt"; + this.buttonEncryptTaskList.UseVisualStyleBackColor = true; // - // textBoxIDRACUsername + // checkBox_Encryption // - this.textBoxIDRACUsername.Location = new System.Drawing.Point(83, 76); - this.textBoxIDRACUsername.Name = "textBoxIDRACUsername"; - this.textBoxIDRACUsername.Size = new System.Drawing.Size(186, 20); - this.textBoxIDRACUsername.TabIndex = 3; + this.checkBox_Encryption.AutoSize = true; + this.checkBox_Encryption.Location = new System.Drawing.Point(23, 19); + this.checkBox_Encryption.Name = "checkBox_Encryption"; + this.checkBox_Encryption.Size = new System.Drawing.Size(59, 17); + this.checkBox_Encryption.TabIndex = 6; + this.checkBox_Encryption.Text = "Enable"; + this.checkBox_Encryption.UseVisualStyleBackColor = true; + this.checkBox_Encryption.CheckedChanged += new System.EventHandler(this.checkBox_Local_CheckedChanged); // - // label6 + // openFileDialogTasklist // - this.label6.AutoSize = true; - this.label6.Location = new System.Drawing.Point(56, 53); - this.label6.Name = "label6"; - this.label6.Size = new System.Drawing.Size(17, 13); - this.label6.TabIndex = 0; - this.label6.Text = "IP"; - // - // textBoxIDRACIP - // - this.textBoxIDRACIP.Location = new System.Drawing.Point(83, 50); - this.textBoxIDRACIP.Name = "textBoxIDRACIP"; - this.textBoxIDRACIP.Size = new System.Drawing.Size(186, 20); - this.textBoxIDRACIP.TabIndex = 1; + this.openFileDialogTasklist.DefaultExt = "json"; + this.openFileDialogTasklist.FileName = "tasklisk.json"; + this.openFileDialogTasklist.Filter = "json file|*.json|Powershell scrips|*.ps1"; + this.openFileDialogTasklist.Title = "Task list file"; // // FormConfiguration // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(586, 228); + this.ClientSize = new System.Drawing.Size(552, 228); this.Controls.Add(this.groupBox3); this.Controls.Add(this.groupBox2); this.Controls.Add(this.buttonOK); @@ -252,6 +242,7 @@ this.groupBox2.PerformLayout(); this.groupBox3.ResumeLayout(false); this.groupBox3.PerformLayout(); + this.groupBox4.ResumeLayout(false); this.ResumeLayout(false); } @@ -270,12 +261,11 @@ private System.Windows.Forms.Label label5; private System.Windows.Forms.TextBox textBoxTftpIP; private System.Windows.Forms.GroupBox groupBox3; - private System.Windows.Forms.Label label3; - private System.Windows.Forms.TextBox textBoxIDRACPassword; - private System.Windows.Forms.Label label4; - private System.Windows.Forms.TextBox textBoxIDRACUsername; - private System.Windows.Forms.Label label6; - private System.Windows.Forms.TextBox textBoxIDRACIP; - private System.Windows.Forms.CheckBox checkBox_Local; + private System.Windows.Forms.CheckBox checkBox_Encryption; + private System.Windows.Forms.Button buttonEncryptTaskList; + private System.Windows.Forms.GroupBox groupBox4; + private System.Windows.Forms.Button buttonTasklistDec; + private System.Windows.Forms.Button buttonTasklistEnc; + private System.Windows.Forms.OpenFileDialog openFileDialogTasklist; } } \ No newline at end of file diff --git a/FormConfiguration.cs b/FormConfiguration.cs index eb027bc..886417f 100644 --- a/FormConfiguration.cs +++ b/FormConfiguration.cs @@ -1,12 +1,16 @@ -using System; +using log4net; +using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; +using System.Text.Json; using System.Threading.Tasks; using System.Windows.Forms; +using System.IO; +using System.Security.Cryptography; namespace SSH_Test { @@ -16,53 +20,36 @@ namespace SSH_Test public string Sftp_IP { get; set; } public string Sftp_Username { get; set; } public string Sftp_Password { get; set; } - public string IDRAC_IP { get; set; } - public string IDRAC_Username { get; set; } - public string IDRAC_Password { get; set; } - public bool IDRAC_Local { get; set; } + public bool bEncryption { get; set; } + public string sTasklistPath { get; set; } + public string sProfilePath { get; set; } + public Aes aes { get; set; } - public FormConfiguration(string tftp_IP, string sftpIP, string sftp_Username, string sftp_Password) + public static ILog log; + + public FormConfiguration(string tftp_IP, string sftpIP, string sftp_Username, string sftp_Password, bool bencryption + , Aes aaes, ILog Log) { InitializeComponent(); this.textBoxTftpIP.Text = Tftp_IP = tftp_IP; this.textBoxSftpIP.Text = Sftp_IP = sftpIP; this.textBoxSftpUsername.Text = Sftp_Username = sftp_Username; this.textBoxSftpPassword.Text = Sftp_Password = sftp_Password; + checkBox_Encryption.Checked = bEncryption = bencryption; + aes = aaes; + log = Log; this.Update(); } - private void groupBox1_Enter(object sender, EventArgs e) - { - - } - - private void textBox1_TextChanged(object sender, EventArgs e) - { - - } - - private void label1_Click(object sender, EventArgs e) - { - - } - - private void label2_Click(object sender, EventArgs e) - { - - } - private void buttonOK_Click(object sender, EventArgs e) { Tftp_IP = textBoxTftpIP.Text; Sftp_IP = textBoxSftpIP.Text; Sftp_Username = textBoxSftpUsername.Text; Sftp_Password = textBoxSftpPassword.Text; - IDRAC_IP = textBoxIDRACIP.Text; - IDRAC_Username= textBoxIDRACUsername.Text; - IDRAC_Password= textBoxIDRACPassword.Text; - IDRAC_Local=checkBox_Local.Checked; + bEncryption = checkBox_Encryption.Checked; this.Close(); } @@ -73,17 +60,81 @@ namespace SSH_Test private void checkBox_Local_CheckedChanged(object sender, EventArgs e) { - if (checkBox_Local.Checked) + if (checkBox_Encryption.Checked) { - checkBox_Local.Checked = true; - IDRAC_Local = checkBox_Local.Checked; + checkBox_Encryption.Checked = true; + bEncryption = checkBox_Encryption.Checked; } else { - checkBox_Local.Checked = false; - IDRAC_Local = checkBox_Local.Checked; + checkBox_Encryption.Checked = false; + bEncryption = checkBox_Encryption.Checked; } } + + private void buttonTasklistEnc_Click(object sender, EventArgs e) + { + Utilities utilities = new Utilities(log); + if (openFileDialogTasklist.ShowDialog() == DialogResult.OK) + { + string Jsonfilename = openFileDialogTasklist.FileName; + string buttonTasklistPath = openFileDialogTasklist.SafeFileName; + if (File.Exists(Jsonfilename)) + { + try + { + //read tasklist data from file + string sData = File.ReadAllText(Jsonfilename); + log.Info(string.Format("Read {0} to String", Jsonfilename)); + //encrypt data + byte[] bData = Utilities.EncryptStringAES(sData, aes.Key); + + //write encrypted data to file + File.WriteAllBytes(Jsonfilename, bData); + + } + catch (Exception ex) + { + //could not read tasklist.json properly + log.Error(string.Format("Could not load {0} for encrypting", Jsonfilename)); + log.Error(ex); + } + + + } + } + } + + private void buttonTasklistDec_Click(object sender, EventArgs e) + { + Utilities utilities = new Utilities(log); + if (openFileDialogTasklist.ShowDialog() == DialogResult.OK) + { + string JsonFileName = openFileDialogTasklist.FileName; + string buttonTasklistPath = openFileDialogTasklist.SafeFileName; + if (File.Exists(JsonFileName)) + { + try + { + //read json data from file + byte[] bData = File.ReadAllBytes(JsonFileName); + + //decrypt data and save to file + + File.WriteAllText(JsonFileName, Utilities.DecryptStringFromBytes(bData, aes.Key)); + + } + catch (Exception ex) + { + //could not read tasklist.json properly + log.Error(string.Format("Could not load {0} for encrypting", JsonFileName)); + log.Error(ex); + } + + + } + } + } } } diff --git a/FormConfiguration.resx b/FormConfiguration.resx index 152021a..e895283 100644 --- a/FormConfiguration.resx +++ b/FormConfiguration.resx @@ -117,6 +117,9 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 17, 17 + diff --git a/FormParameters.cs b/FormParameters.cs index 40ccb57..ed4c4e2 100644 --- a/FormParameters.cs +++ b/FormParameters.cs @@ -7,7 +7,7 @@ using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; -using System.Web.UI.WebControls; + using System.Windows.Forms; using static System.Windows.Forms.VisualStyles.VisualStyleElement; using TextBox = System.Windows.Forms.TextBox; diff --git a/Profile.cs b/Profile.cs index 1ba3530..82b7bd8 100644 --- a/Profile.cs +++ b/Profile.cs @@ -4,8 +4,7 @@ using System.Linq; using System.Text; using System.Text.Json.Serialization; using System.Threading.Tasks; -using System.Web.Profile; -using System.Web.UI.WebControls; + using System.Xml.Linq; namespace SSH_Test diff --git a/SSH_Test.csproj b/SSH_Test.csproj index 88a3172..ee4d744 100644 --- a/SSH_Test.csproj +++ b/SSH_Test.csproj @@ -15,6 +15,7 @@ false + D:\Shared\VS\Publish\ true Disk @@ -88,8 +89,8 @@ packages\log4net.3.2.0\lib\net462\log4net.dll - - packages\Microsoft.Bcl.AsyncInterfaces.10.0.0\lib\net462\Microsoft.Bcl.AsyncInterfaces.dll + + packages\Microsoft.Bcl.AsyncInterfaces.10.0.2\lib\net462\Microsoft.Bcl.AsyncInterfaces.dll packages\Microsoft.Extensions.DependencyInjection.Abstractions.8.0.2\lib\net462\Microsoft.Extensions.DependencyInjection.Abstractions.dll @@ -109,8 +110,11 @@ packages\System.Formats.Asn1.8.0.2\lib\net462\System.Formats.Asn1.dll - - packages\System.IO.Pipelines.10.0.0\lib\net462\System.IO.Pipelines.dll + + packages\System.IO.Pipelines.10.0.2\lib\net462\System.IO.Pipelines.dll + + + packages\Microsoft.PowerShell.5.1.ReferenceAssemblies.1.0.0\lib\net461\System.Management.Automation.dll packages\System.Memory.4.6.3\lib\net462\System.Memory.dll @@ -131,14 +135,12 @@ packages\System.Threading.Tasks.Extensions.4.6.3\lib\net462\System.Threading.Tasks.Extensions.dll - - @@ -193,12 +195,13 @@ Resources.resx True + Always - Always + PreserveNewest @@ -216,9 +219,6 @@ PreserveNewest - - - False @@ -238,11 +238,11 @@ - This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + \ No newline at end of file diff --git a/TastList.Designer.cs b/TastList.Designer.cs index b910637..d7cc2e5 100644 --- a/TastList.Designer.cs +++ b/TastList.Designer.cs @@ -54,6 +54,11 @@ this.buttonSave = new System.Windows.Forms.Button(); this.bRun = new System.Windows.Forms.Button(); this.checkBoxArrangeTask = new System.Windows.Forms.CheckBox(); + this.openFileDialogTasklist = new System.Windows.Forms.OpenFileDialog(); + this.buttonTasklistPath = new System.Windows.Forms.Button(); + this.toolTipbuttonTasklist = new System.Windows.Forms.ToolTip(this.components); + this.toolTipGeneralConf = new System.Windows.Forms.ToolTip(this.components); + this.buttonAESString = new System.Windows.Forms.Button(); ((System.ComponentModel.ISupportInitialize)(this.dataGridViewTask)).BeginInit(); this.contextMenuStripRow.SuspendLayout(); this.groupBox1.SuspendLayout(); @@ -62,7 +67,7 @@ // // buttonConf // - this.buttonConf.Location = new System.Drawing.Point(419, 12); + this.buttonConf.Location = new System.Drawing.Point(725, 12); this.buttonConf.Name = "buttonConf"; this.buttonConf.Size = new System.Drawing.Size(96, 50); this.buttonConf.TabIndex = 6; @@ -96,6 +101,7 @@ this.Run, this.Configuration, this.Profile}); + this.dataGridViewTask.ContextMenuStrip = this.contextMenuStripRow; this.dataGridViewTask.Dock = System.Windows.Forms.DockStyle.Fill; this.dataGridViewTask.Location = new System.Drawing.Point(3, 16); this.dataGridViewTask.Name = "dataGridViewTask"; @@ -118,6 +124,7 @@ this.TaskNum.Name = "TaskNum"; this.TaskNum.ReadOnly = true; this.TaskNum.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + this.TaskNum.ToolTipText = "sfasfsfsfsaf"; this.TaskNum.Width = 50; // // contextMenuStripRow @@ -130,6 +137,8 @@ // // MoveToolStripMenuItem // + this.MoveToolStripMenuItem.AutoToolTip = true; + this.MoveToolStripMenuItem.CheckOnClick = true; this.MoveToolStripMenuItem.Image = global::SSH_Test.Properties.Resources.Arrange16; this.MoveToolStripMenuItem.Name = "MoveToolStripMenuItem"; this.MoveToolStripMenuItem.Size = new System.Drawing.Size(147, 22); @@ -280,11 +289,11 @@ // this.buttonLoad.Image = global::SSH_Test.Properties.Resources.Load24b; this.buttonLoad.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; - this.buttonLoad.Location = new System.Drawing.Point(12, 9); + this.buttonLoad.Location = new System.Drawing.Point(6, 35); this.buttonLoad.Name = "buttonLoad"; - this.buttonLoad.Size = new System.Drawing.Size(80, 50); + this.buttonLoad.Size = new System.Drawing.Size(80, 30); this.buttonLoad.TabIndex = 1; - this.buttonLoad.Text = "Load Tasklist"; + this.buttonLoad.Text = "ReLoad"; this.buttonLoad.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; this.buttonLoad.UseMnemonic = false; this.buttonLoad.UseVisualStyleBackColor = true; @@ -294,11 +303,11 @@ // this.buttonSave.Image = global::SSH_Test.Properties.Resources.Save24b; this.buttonSave.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; - this.buttonSave.Location = new System.Drawing.Point(97, 9); + this.buttonSave.Location = new System.Drawing.Point(91, 35); this.buttonSave.Name = "buttonSave"; - this.buttonSave.Size = new System.Drawing.Size(80, 50); + this.buttonSave.Size = new System.Drawing.Size(80, 30); this.buttonSave.TabIndex = 2; - this.buttonSave.Text = "Save TaskList"; + this.buttonSave.Text = "Save"; this.buttonSave.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; this.buttonSave.UseVisualStyleBackColor = true; this.buttonSave.Click += new System.EventHandler(this.buttonSave_Click); @@ -320,7 +329,7 @@ // this.checkBoxArrangeTask.AutoSize = true; this.checkBoxArrangeTask.Image = global::SSH_Test.Properties.Resources.Arrange24; - this.checkBoxArrangeTask.Location = new System.Drawing.Point(183, 12); + this.checkBoxArrangeTask.Location = new System.Drawing.Point(182, 38); this.checkBoxArrangeTask.Name = "checkBoxArrangeTask"; this.checkBoxArrangeTask.Size = new System.Drawing.Size(119, 24); this.checkBoxArrangeTask.TabIndex = 9; @@ -329,11 +338,45 @@ this.checkBoxArrangeTask.UseVisualStyleBackColor = true; this.checkBoxArrangeTask.CheckedChanged += new System.EventHandler(this.checkBoxArrangeTask_CheckedChanged); // + // openFileDialogTasklist + // + this.openFileDialogTasklist.DefaultExt = "json"; + this.openFileDialogTasklist.FileName = "tasklisk.json"; + this.openFileDialogTasklist.Filter = "json file (*.json)|*.json"; + this.openFileDialogTasklist.Title = "Task list file"; + // + // buttonTasklistPath + // + this.buttonTasklistPath.AccessibleDescription = "Choose Task list file"; + this.buttonTasklistPath.Location = new System.Drawing.Point(6, 2); + this.buttonTasklistPath.Margin = new System.Windows.Forms.Padding(1); + this.buttonTasklistPath.Name = "buttonTasklistPath"; + this.buttonTasklistPath.Size = new System.Drawing.Size(165, 30); + this.buttonTasklistPath.TabIndex = 10; + this.buttonTasklistPath.Text = "tasklist.json"; + this.buttonTasklistPath.UseVisualStyleBackColor = true; + this.buttonTasklistPath.Click += new System.EventHandler(this.buttonTasklistPath_Click); + // + // buttonAESString + // + this.buttonAESString.Image = global::SSH_Test.Properties.Resources.Encryption24; + this.buttonAESString.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.buttonAESString.Location = new System.Drawing.Point(182, 2); + this.buttonAESString.Name = "buttonAESString"; + this.buttonAESString.Size = new System.Drawing.Size(80, 30); + this.buttonAESString.TabIndex = 11; + this.buttonAESString.Text = "AES"; + this.buttonAESString.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; + this.buttonAESString.UseVisualStyleBackColor = true; + this.buttonAESString.Click += new System.EventHandler(this.buttonAESString_Click); + // // TastList // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(1094, 794); + this.Controls.Add(this.buttonAESString); + this.Controls.Add(this.buttonTasklistPath); this.Controls.Add(this.checkBoxArrangeTask); this.Controls.Add(this.buttonUncheckAll); this.Controls.Add(this.buttonCheckAll); @@ -346,6 +389,7 @@ this.Controls.Add(this.bRun); this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.Name = "TastList"; + this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; this.Text = "Task List"; this.Load += new System.EventHandler(this.fSSHTest_Load); ((System.ComponentModel.ISupportInitialize)(this.dataGridViewTask)).EndInit(); @@ -374,6 +418,9 @@ private System.Windows.Forms.ContextMenuStrip contextMenuStripRow; private System.Windows.Forms.ToolStripMenuItem MoveToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem DeleteToolStripMenuItem; + private System.Windows.Forms.OpenFileDialog openFileDialogTasklist; + private System.Windows.Forms.Button buttonTasklistPath; + private System.Windows.Forms.ToolTip toolTipbuttonTasklist; private System.Windows.Forms.DataGridViewTextBoxColumn TaskNum; private System.Windows.Forms.DataGridViewTextBoxColumn TaskDescription; private System.Windows.Forms.DataGridViewTextBoxColumn TaskDevice; @@ -382,6 +429,8 @@ private System.Windows.Forms.DataGridViewImageColumn Run; private System.Windows.Forms.DataGridViewButtonColumn Configuration; private System.Windows.Forms.DataGridViewComboBoxColumn Profile; + private System.Windows.Forms.ToolTip toolTipGeneralConf; + private System.Windows.Forms.Button buttonAESString; } } diff --git a/TastList.cs b/TastList.cs index e9b0a30..9196280 100644 --- a/TastList.cs +++ b/TastList.cs @@ -14,13 +14,15 @@ using System.IO; using System.Linq; using System.Linq.Expressions; using System.Reflection; +using System.Runtime.InteropServices; // for moving console window using System.Runtime.Remoting.Contexts; +using System.Security.Cryptography; using System.Text; +using System.Text.Encodings.Web; using System.Text.Json; using System.Text.RegularExpressions; using System.Threading; using System.Threading.Tasks; -using System.Web.UI.WebControls; using System.Windows.Forms; using System.Xml; using static System.Windows.Forms.VisualStyles.VisualStyleElement; @@ -35,42 +37,120 @@ namespace SSH_Test public List Tasks = new List(); public cConInfo conInfo = new cConInfo("", "", "", "", "", ""); private List Profiles = new List(); - private static ILog log = LogManager.GetLogger(typeof(Program)); - private static Utilities utilities = new Utilities(log); + public static ILog log = LogManager.GetLogger(typeof(Program)); private int RowToDrag = -1; //for arrange tasks private int RowToDrop = -1; // for arrange tasks + private string Tasklistfilename = "tasklist.json"; + private string Profilefilename = "profile.json"; + private bool bEncryption = true; + private static Aes aes ; + private static Utilities utilities = new Utilities(log); + + //for moving console window + // Import the necessary Windows API functions + [DllImport("kernel32.dll", SetLastError = true)] + static extern IntPtr GetConsoleWindow(); + + [DllImport("user32.dll", SetLastError = true)] + internal static extern bool MoveWindow(IntPtr hWnd, int X, int Y, int nWidth, int nHeight, bool bRepaint); + + [DllImport("user32.dll")] + [return: MarshalAs(UnmanagedType.Bool)] + public static extern bool SetForegroundWindow(IntPtr hWnd); + public TastList() { + this.StartPosition = FormStartPosition.Manual; + this.Location = new Point(100,100); var logRepository = LogManager.GetRepository(Assembly.GetEntryAssembly()); log4net.Util.LogLog.InternalDebugging = true; XmlConfigurator.Configure(logRepository, new FileInfo("log4net.config")); InitializeComponent(); + + //encryption + aes = Aes.Create(); + + + + //set default tasklist file + openFileDialogTasklist.InitialDirectory = System.IO.Directory.GetCurrentDirectory(); + openFileDialogTasklist.FileName = Tasklistfilename; + buttonTasklistPath.Text = Tasklistfilename; + + + // set Tooltip + toolTipbuttonTasklist.ToolTipTitle = "Task List and Profile"; + toolTipbuttonTasklist.SetToolTip(buttonTasklistPath, " Pick another, the default is tasklist.json"); + toolTipbuttonTasklist.SetToolTip(buttonLoad, " Load or reload task list file"); + toolTipbuttonTasklist.SetToolTip(buttonSave, "Save the current task list file"); + toolTipbuttonTasklist.SetToolTip(buttonAESString, " Input or change EAS string"); + + toolTipGeneralConf.ToolTipTitle = "Configuration"; + toolTipGeneralConf.SetToolTip(buttonConf, " Configure TFTP, Encrypion and more"); + + + + + + //move console window + int newX = this.Right; // to right size of the main form + int newY = this.Top; // align top + int NewWidth = 400; + int NewHeight = this.Height; + + IntPtr consoleHandle = GetConsoleWindow(); + + if (consoleHandle != IntPtr.Zero) + { + + + + bool success = MoveWindow(consoleHandle, newX, newY, NewWidth, NewHeight, true); + + if (success) + { + Console.WriteLine($"Console to ({newX}, {newY})."); + } + else + { + Console.WriteLine("Failed to move console."); + } + + SetForegroundWindow(consoleHandle); + } + else + { + Console.WriteLine("Failed get console window handle."); + } + + //Initialize Gridview behaviours dataGridViewTask.AllowDrop = true; dataGridViewTask.ClipboardCopyMode = DataGridViewClipboardCopyMode.EnableWithoutHeaderText; dataGridViewTask.RowTemplate.ContextMenuStrip = contextMenuStripRow; //Load Profile list from "profile.json" - Profiles = utilities.LoadProfile("profile.json"); + Profiles = utilities.LoadProfile("profile.json", aes); // Configure Profile list to dropdown menu - try - { - foreach (Profile p in Profiles) - { - log.Info(string.Format("Profile: {0}", p.ProfileName)); - } + // AES button will update the dropdown menu when AES key is inputed. + //try + //{ + // foreach (Profile p in Profiles) + // { + // log.Info(string.Format("Profile: {0}", p.ProfileName)); + // } - var comboBoxColumn = (DataGridViewComboBoxColumn)dataGridViewTask.Columns[7]; - comboBoxColumn.DataSource = Profiles; // Set the data source of the ComboBox column - comboBoxColumn.DisplayMember = "profileName"; // Displayed property name - comboBoxColumn.ValueMember = "profileName"; //The property name of the value - } - catch (Exception ex) - { - log.Error(ex.Message); - } + // var comboBoxColumn = (DataGridViewComboBoxColumn)dataGridViewTask.Columns[7]; + // comboBoxColumn.DataSource = Profiles; // Set the data source of the ComboBox column + // comboBoxColumn.DisplayMember = "profileName"; // Displayed property name + // comboBoxColumn.ValueMember = "profileName"; //The property name of the value + //} + //catch (Exception ex) + //{ + // log.Error(ex.Message); + //} dataGridViewTask.Refresh(); @@ -85,6 +165,7 @@ namespace SSH_Test //Disable Arrange Tasks first checkBoxArrangeTask.Checked = false; log.Info("Run selected Tasks was called"); + string listofruntasks = "Task(s) ran: \n"; foreach (DataGridViewRow row in dataGridViewTask.Rows) { Profile profile; @@ -133,9 +214,11 @@ namespace SSH_Test //clear richtextboxoutput //richTextBoxOutput.Clear(); - // Run a Task and display result on the textbox - richTextBoxOutput.AppendText(Utilities.RunaTask(currentTask, profile, conInfo)); + // insert task name to listofruntasks + listofruntasks += string.Format(" Task {0}: {1}, profile: {2} \n", currentTask.iTaskNum, currentTask.sTaskDescription, currentTask.sProfile); + // Run a Task and display result on the textbox + richTextBoxOutput.AppendText(Utilities.RunaTask(currentTask, profile, conInfo,aes)); richTextBoxOutput.SelectionStart = richTextBoxOutput.Text.Length; richTextBoxOutput.ScrollToCaret(); } @@ -147,6 +230,7 @@ namespace SSH_Test } } } + //dump output to file.txt string filepath = string.Format("{0}\\{1}\\{2}_{3}.txt", Environment.CurrentDirectory, Environment.MachineName, Environment.MachineName, DateTime.Now.ToString("yyyyMMdd_HHmmss")); @@ -161,8 +245,8 @@ namespace SSH_Test Directory.CreateDirectory(dir); } - File.WriteAllText(filepath, richTextBoxOutput.Text.ToString()); - + File.WriteAllText(filepath, listofruntasks); + File.AppendAllText(filepath, richTextBoxOutput.Text.ToString()); log.Info(string.Format("Wrote to file: {0}", filepath)); } catch (Exception ex) @@ -173,6 +257,158 @@ namespace SSH_Test log.Info("Run selected Tasks End"); } + + private void buttonTasklistPath_Click(object sender, EventArgs e) + { + if (openFileDialogTasklist.ShowDialog() == DialogResult.OK) + { + Tasklistfilename = openFileDialogTasklist.FileName; + buttonTasklistPath.Text = openFileDialogTasklist.SafeFileName; + + //load tasklist + buttonLoad_Click(null,null); + } + } + private void buttonSave_Click(object sender, EventArgs e) + { + //Disable Arrange Tasks first + checkBoxArrangeTask.Checked = false; + + if (Tasks.Count >= 1) + { + utilities.SaveTasklist(Tasks, Tasklistfilename, aes); + } + } + + private void buttonLoad_Click(object sender, EventArgs e) + { + + + //Disable Arrange Tasks first + checkBoxArrangeTask.Checked = false; + + Tasks = utilities.LoadTaskList(Tasklistfilename, aes); + + //clear TaskList + dataGridViewTask.Rows.Clear(); + + foreach (var task in Tasks) + { + try + { + DataGridViewRow row = (DataGridViewRow)dataGridViewTask.Rows[0].Clone(); + row.Cells[0].Value = task.iTaskNum; + row.Cells[1].Value = task.sTaskDescription; + row.Cells[2].Value = task.sTaskDevice; + row.Cells[4].Value = task.bTaskSelect; + var comboBoxColumn = (DataGridViewComboBoxColumn)dataGridViewTask.Columns[7]; + // test if task.sprofile name mach any in Profiles, if true, assign that name + if (Profiles.Any(pr => pr.ProfileName == task.sProfile)) + row.Cells[7].Value = task.sProfile; + dataGridViewTask.Rows.Add(row); + } + catch (Exception ex) + { + log.Error(string.Format("Error while loading saved tasklist: \n {0}", ex.Message)); + } + + + } + } + + private void buttonConf_Click(object sender, EventArgs e) + { + FormConfiguration formConfiguration = new FormConfiguration(conInfo.sTftpIP, conInfo.sSftpIP, + conInfo.sSftpUsername, conInfo.sSftpPassword, + bEncryption, aes, log); + + formConfiguration.ShowDialog(); + conInfo.sTftpIP = formConfiguration.Tftp_IP; + conInfo.sSftpIP = formConfiguration.Sftp_IP; + conInfo.sSftpUsername = formConfiguration.Sftp_Username; + conInfo.sSftpPassword = formConfiguration.Sftp_Password; + + } + + private void dataGridViewTask_CellClick(object sender, DataGridViewCellEventArgs e) + { + // Ensure the click is on a valid celland not in arrange mode and not the header and start edit mode immediately + if ((!checkBoxArrangeTask.Checked) && (e.RowIndex >= 0) && (e.ColumnIndex > 0)) + { + // Set the cell as the current cell (if not already) + dataGridViewTask.CurrentCell = dataGridViewTask.Rows[e.RowIndex].Cells[e.ColumnIndex]; + + + dataGridViewTask.BeginEdit(true); + } + } + + private void dataGridViewTask_CellToolTipTextNeeded(object sender, DataGridViewCellToolTipTextNeededEventArgs e) + { + //show tool tips for cells in Run column 5 + log.Info("Handle showing tooltip at a cell"); + if (e.ColumnIndex == 5) + { + e.ToolTipText = string.Format("Run Task {0}: {1}", dataGridViewTask.Rows[e.RowIndex].Cells[1], dataGridViewTask.Rows[e.RowIndex].Cells[2]); + } + } + + private void buttonCheckAll_Click(object sender, EventArgs e) + { + //Disable Arrange Tasks first + checkBoxArrangeTask.Checked = false; + + foreach (DataGridViewRow row in dataGridViewTask.Rows) + { + DataGridViewCheckBoxCell cell = row.Cells[4] as DataGridViewCheckBoxCell; + + if (cell.Value != null) + { + cell.Value = true; + Tasks[row.Index].bTaskSelect = true; + } + } + dataGridViewTask.Refresh(); + } + + private void buttonUncheckAll_Click(object sender, EventArgs e) + { + //Disable Arrange Tasks first + checkBoxArrangeTask.Checked = false; + + foreach (DataGridViewRow row in dataGridViewTask.Rows) + { + DataGridViewCheckBoxCell cell = row.Cells[4] as DataGridViewCheckBoxCell; + + if (cell.Value != null) + { + cell.Value = false; + Tasks[row.Index].bTaskSelect = false; + } + } + dataGridViewTask.Refresh(); + } + + private void checkBoxArrangeTask_CheckedChanged(object sender, EventArgs e) + { + if (checkBoxArrangeTask.Checked) + { + dataGridViewTask.AllowUserToAddRows = false; + // change mouse cursor to Hand + dataGridViewTask.Cursor = System.Windows.Forms.Cursors.Hand; + + + } + else + { + dataGridViewTask.AllowUserToAddRows = true; + // change mouse cursor back to Default + dataGridViewTask.Cursor = System.Windows.Forms.Cursors.Default; + + } + + } + private void dataGridViewTask_CellContentClick(object sender, DataGridViewCellEventArgs e) { @@ -234,7 +470,7 @@ namespace SSH_Test // Run a Task and display result on the textbox - richTextBoxOutput.AppendText(Utilities.RunaTask(currentTask, profile, conInfo)); + richTextBoxOutput.AppendText(Utilities.RunaTask(currentTask, profile, conInfo,aes)); richTextBoxOutput.SelectionStart = richTextBoxOutput.Text.Length; richTextBoxOutput.ScrollToCaret(); } @@ -270,7 +506,7 @@ namespace SSH_Test private void dataGridViewTask_CellEndEdit(object sender, DataGridViewCellEventArgs e) { - Profile profile = new Profile() ; + Profile profile = new Profile(); if (e.ColumnIndex != 5) { if (Tasks.Count < (e.RowIndex + 1)) @@ -286,7 +522,7 @@ namespace SSH_Test switch (e.ColumnIndex) { case 0: - + break; case 1: Tasks[e.RowIndex].sTaskDescription = (string)dataGridViewTask.Rows[e.RowIndex].Cells[e.ColumnIndex].Value; @@ -310,8 +546,8 @@ namespace SSH_Test else Tasks[e.RowIndex].sProfile = "Do nothing"; - profile = Profiles.Find(x => x.ProfileName == Tasks[e.RowIndex].sProfile.ToString()); - if (profile.ProfileParameters.Length > 0) + profile = Profiles.Find(x => x.ProfileName == Tasks[e.RowIndex].sProfile.ToString()); + if ( (profile != null) && (profile.ProfileParameters.Length > 0)) { //clear task profile parameters first Tasks[e.RowIndex].dParameters.Clear(); @@ -326,171 +562,19 @@ namespace SSH_Test break; default: - + break; } - } } - private void buttonSave_Click(object sender, EventArgs e) - { - //Disable Arrange Tasks first - checkBoxArrangeTask.Checked = false; - - if (Tasks.Count >= 1) - { - //using (Stream stream = File.Open("tasklist.dat", FileMode.Create)) - //{ - // log.Info("Saving Tasklist.dat"); - // var binaryFormatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(); - // binaryFormatter.Serialize(stream, Tasks); - //} - //using (Stream stream = File.Open("ftpInfo.dat", FileMode.Create)) - //{ - // var binaryFormatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(); - // binaryFormatter.Serialize(stream, conInfo); - //} - utilities.SaveTasklist(Tasks, "tasklist.json"); - } - } - - private void buttonLoad_Click(object sender, EventArgs e) - { - //using (Stream stream = File.Open("tasklist.dat", FileMode.Open)) - //{ - - // var binaryFormatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(); - // Tasks = (List)binaryFormatter.Deserialize(stream); - //} - //using (Stream stream = File.Open("ftpInfo.dat", FileMode.Open)) - //{ - - // var binaryFormatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(); - // conInfo = (cConInfo)binaryFormatter.Deserialize(stream); - //} - - //Disable Arrange Tasks first - checkBoxArrangeTask.Checked = false; - - Tasks = utilities.LoadTaskList("tasklist.json"); - - //clear TaskList - dataGridViewTask.Rows.Clear(); - - foreach (var task in Tasks) - { - try - { - DataGridViewRow row = (DataGridViewRow)dataGridViewTask.Rows[0].Clone(); - row.Cells[0].Value = task.iTaskNum; - row.Cells[1].Value = task.sTaskDescription; - row.Cells[2].Value = task.sTaskDevice; - row.Cells[4].Value = task.bTaskSelect; - var comboBoxColumn = (DataGridViewComboBoxColumn)dataGridViewTask.Columns[7]; - // test if task.sprofile name mach any in Profiles, if true, assign that name - if (Profiles.Any(pr => pr.ProfileName == task.sProfile)) - row.Cells[7].Value = task.sProfile; - dataGridViewTask.Rows.Add(row); - } - catch (Exception ex) - { - log.Error(string.Format("Error while loading saved tasklist: \n {0}", ex.Message)); - } - - - } - } - - - - private void buttonConf_Click(object sender, EventArgs e) - { - FormConfiguration formConfiguration = new FormConfiguration(conInfo.sTftpIP, conInfo.sSftpIP, conInfo.sSftpUsername, conInfo.sSftpPassword); - formConfiguration.ShowDialog(); - conInfo.sTftpIP = formConfiguration.Tftp_IP; - conInfo.sSftpIP = formConfiguration.Sftp_IP; - conInfo.sSftpUsername = formConfiguration.Sftp_Username; - conInfo.sSftpPassword = formConfiguration.Sftp_Password; - - } - - private void dataGridViewTask_CellClick(object sender, DataGridViewCellEventArgs e) - { - // Ensure the click is on a valid cell and not the header - if (e.RowIndex >= 0 && e.ColumnIndex >= 0) - { - // Set the cell as the current cell (if not already) - dataGridViewTask.CurrentCell = dataGridViewTask.Rows[e.RowIndex].Cells[e.ColumnIndex]; - - // Start the edit mode immediately - dataGridViewTask.BeginEdit(true); - } - } - - private void dataGridViewTask_CellToolTipTextNeeded(object sender, DataGridViewCellToolTipTextNeededEventArgs e) - { - //show tool tips for cells in Run column 5 - log.Info("Handle showing tooltip at a cell"); - if (e.ColumnIndex == 5) - { - e.ToolTipText = string.Format("Run Task {0}: {1}", dataGridViewTask.Rows[e.RowIndex].Cells[1], dataGridViewTask.Rows[e.RowIndex].Cells[2]); - } - } - - private void buttonCheckAll_Click(object sender, EventArgs e) - { - //Disable Arrange Tasks first - checkBoxArrangeTask.Checked = false; - - foreach (DataGridViewRow row in dataGridViewTask.Rows) - { - DataGridViewCheckBoxCell cell = row.Cells[4] as DataGridViewCheckBoxCell; - - if (cell.Value != null) - { - cell.Value = true; - Tasks[row.Index].bTaskSelect = true; - } - } - dataGridViewTask.Refresh(); - } - - private void buttonUncheckAll_Click(object sender, EventArgs e) - { - //Disable Arrange Tasks first - checkBoxArrangeTask.Checked = false; - - foreach (DataGridViewRow row in dataGridViewTask.Rows) - { - DataGridViewCheckBoxCell cell = row.Cells[4] as DataGridViewCheckBoxCell; - - if (cell.Value != null) - { - cell.Value = false; - Tasks[row.Index].bTaskSelect = false; - } - } - dataGridViewTask.Refresh(); - } - - private void checkBoxArrangeTask_CheckedChanged(object sender, EventArgs e) - { - if (checkBoxArrangeTask.Checked) - { - dataGridViewTask.AllowUserToAddRows = false; - - } - else - { - dataGridViewTask.AllowUserToAddRows = true; - } - } - private void dataGridViewTask_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e) { + + + if (checkBoxArrangeTask.Checked) { // start "drag" handle with mouse left click @@ -500,8 +584,12 @@ namespace SSH_Test RowToDrag = e.RowIndex; // start to catch "drag" dataGridViewTask.DoDragDrop(dataGridViewTask.Rows[e.RowIndex], DragDropEffects.Move); - + // move focus to Dropped Cell + dataGridViewTask.CurrentCell = dataGridViewTask.Rows[RowToDrop].Cells[e.ColumnIndex]; + dataGridViewTask.Rows[RowToDrop].Cells[e.ColumnIndex].Selected = true; + return; + } } @@ -511,7 +599,7 @@ namespace SSH_Test if (e.Button == MouseButtons.Right) { - //select the firt cell of the row if click is at the first cell of the row + //select the first cell of the row if (e.RowIndex >= 0) { @@ -540,7 +628,7 @@ namespace SSH_Test } } } - + private void dataGridViewTask_DragEnter(object sender, DragEventArgs e) { if (checkBoxArrangeTask.Checked) @@ -556,6 +644,7 @@ namespace SSH_Test } } + private void dataGridViewTask_DragDrop(object sender, DragEventArgs e) { if (checkBoxArrangeTask.Checked) @@ -564,8 +653,9 @@ namespace SSH_Test { Point clientPoint = dataGridViewTask.PointToClient(new Point(e.X, e.Y)); DataGridView.HitTestInfo hitpoint = dataGridViewTask.HitTest(clientPoint.X, clientPoint.Y); + - if (hitpoint.Type == DataGridViewHitTestType.Cell || hitpoint.Type == DataGridViewHitTestType.RowHeader) + if (hitpoint.Type == DataGridViewHitTestType.Cell) { RowToDrop = hitpoint.RowIndex; @@ -579,14 +669,9 @@ namespace SSH_Test // move Task in Tasks cTask data = Tasks[RowToDrag]; Tasks.RemoveAt(RowToDrag); - Tasks.Insert(RowToDrop, data); + Tasks.Insert(RowToDrop, data); - // move focus to Dropped Cell - dataGridViewTask.ClearSelection(); - dataGridViewTask.CurrentCell = dataGridViewTask.Rows[RowToDrop].Cells[hitpoint.ColumnIndex]; - dataGridViewTask.Rows[RowToDrop].Cells[hitpoint.ColumnIndex].Selected = true; // regenerate Task Num - RegenerateTaskNum(); } } @@ -597,7 +682,7 @@ namespace SSH_Test private void MoveToolStripMenuItem_Click(object sender, EventArgs e) { - checkBoxArrangeTask.Checked = true; + checkBoxArrangeTask.Checked = !checkBoxArrangeTask.Checked; } private void DeleteToolStripMenuItem_Click(object sender, EventArgs e) @@ -608,8 +693,8 @@ namespace SSH_Test if ( MessageBox.Show(string.Format("Remove Task: {0} ?", dataGridViewTask.CurrentRow.Cells[0].Value), "Confirm to Delete Task", MessageBoxButtons.YesNo,MessageBoxIcon.Question) == DialogResult.Yes) { - dataGridViewTask.Rows.RemoveAt(dataGridViewTask.CurrentRow.Index); Tasks.RemoveAt(dataGridViewTask.CurrentRow.Index); + dataGridViewTask.Rows.RemoveAt(dataGridViewTask.CurrentRow.Index); dataGridViewTask.Refresh(); RegenerateTaskNum(); } @@ -627,8 +712,53 @@ namespace SSH_Test } } - private void buttonDeleteSelected_Click(object sender, EventArgs e) + private void buttonAESString_Click(object sender, EventArgs e) { + //Get or show current AES String + var dictionary = new Dictionary(); + dictionary.Add("AES string", Convert.ToBase64String(aes.Key)); + FormParameters formParameter = new FormParameters(dictionary, richTextBoxOutput.Text, + string.Format("{0}: {1}", "EAS String", "Edit to update with a different EAS String")); + + + if (formParameter.ShowDialog() == DialogResult.Cancel) + { + log.Info("AES formParameter returns with Cancel"); + } + else + { + try + { + aes.Key = Convert.FromBase64String(formParameter.dParameters["AES string"]); + + //try reloading profile.json + Profiles.Clear(); + Profiles = utilities.LoadProfile("profile.json", aes); + // Configure Profile list to dropdown menu + try + { + foreach (Profile p in Profiles) + { + log.Info(string.Format("Profile: {0}", p.ProfileName)); + } + + var comboBoxColumn = (DataGridViewComboBoxColumn)dataGridViewTask.Columns[7]; + comboBoxColumn.DataSource = Profiles; // Set the data source of the ComboBox column + comboBoxColumn.DisplayMember = "profileName"; // Displayed property name + comboBoxColumn.ValueMember = "profileName"; //The property name of the value + } + catch (Exception ex) + { + log.Error(ex.Message); + } + + dataGridViewTask.Refresh(); + } + catch + { + log.Error("Cannot load AES key"); + } + } } } diff --git a/TastList.resx b/TastList.resx index 0d3158a..ac56254 100644 --- a/TastList.resx +++ b/TastList.resx @@ -144,6 +144,15 @@ True + + 188, 17 + + + 359, 17 + + + 457, 17 + diff --git a/Utilities.cs b/Utilities.cs index bcd9938..9ef063d 100644 --- a/Utilities.cs +++ b/Utilities.cs @@ -1,13 +1,19 @@ using log4net; using log4net.Core; using Renci.SshNet; +using Renci.SshNet.Security; using SSH_Test; using System; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; +using System.Globalization; using System.IO; using System.Linq; +using System.Management.Automation; //for powershell +using System.Collections.ObjectModel; + +using System.Security.Cryptography; using System.Text; using System.Text.Json; using System.Text.Json.Serialization; @@ -15,6 +21,9 @@ using System.Text.RegularExpressions; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; +using System.Xml.Linq; +using Microsoft.Win32.SafeHandles; +using System.Diagnostics.Eventing.Reader; namespace SSH_Test { @@ -25,16 +34,17 @@ namespace SSH_Test public Utilities(ILog Log) { log = Log; + } - public static string RunaTask(cTask currentTask, Profile profile, cConInfo conInfo) + public static string RunaTask(cTask currentTask, Profile profile, cConInfo conInfo, Aes aes) { string result = "-------------------------------------------------------------------------\n"; - result += string.Format("{0:s} Task: {1}, profile: {2} \n", DateTime.Now, currentTask.sTaskDescription, currentTask.sProfile); + result += string.Format("{0:s} Task {1}: {2}, profile: {3} \n", DateTime.Now, currentTask.iTaskNum, currentTask.sTaskDescription, currentTask.sProfile); result += "-------------------------------------------------------------------------\n"; cHostInfo hostInfo = new cHostInfo(); log.Info(string.Format("Run task: {0}, profile: {1}", currentTask.sTaskDescription, currentTask.sProfile)); - + //foreach (var c in currentTask.dParameters) // log.Info(string.Format("Parameter {0}: {1}", c.Key, c.Value)); @@ -44,11 +54,11 @@ namespace SSH_Test hostInfo.host = currentTask.dParameters["{IP Address}"]; hostInfo.username = currentTask.dParameters["{User Name}"]; hostInfo.password = currentTask.dParameters["{Password}"]; - hostInfo.device = currentTask.sTaskDevice.ToString(); + hostInfo.device = currentTask.sTaskDevice.ToString(); hostInfo.dParameters = new Dictionary(); hostInfo.Commands = profile.ProfileCommands; - + try { @@ -67,7 +77,7 @@ namespace SSH_Test break; case "SSH_Catalyst": - + hostInfo.host = currentTask.dParameters["{IP Address}"]; hostInfo.username = currentTask.dParameters["{User Name}"]; hostInfo.password = currentTask.dParameters["{Password}"]; @@ -120,7 +130,7 @@ namespace SSH_Test string tempfile = DateTime.Now.ToString().Replace(":", "").Replace(" ", "") + ".txt"; process.StartInfo.Arguments = command + " " + c; - + process.Start(); string temp = process.StandardOutput.ReadToEnd(); log.Info(string.Format("From RAC9 {0}: {1}", currentTask.sTaskDevice.ToString(), result)); @@ -194,7 +204,7 @@ namespace SSH_Test StreamWriter si = process.StandardInput; si.Write("\n"); string temp = sr.ReadToEnd(); - + log.Info(string.Format("From CMD {0}: {1}", currentTask.sTaskDevice.ToString(), temp)); result += temp; @@ -242,78 +252,158 @@ namespace SSH_Test log.Info(command); - - Process process = new Process(); - process.StartInfo.FileName = "powershell"; - process.StartInfo.UseShellExecute = false; // Required for 'runas' verb - process.StartInfo.Verb = "runas"; // Request administrator privileges - process.StartInfo.RedirectStandardOutput = true; - string folderPathPS = Environment.CurrentDirectory + "\\PS\\"; - process.StartInfo.WorkingDirectory = folderPathPS; // current working dir - - log.Info(process.StartInfo.WorkingDirectory); - // check if Powershell Script folder "PS" exists, if not , create one. - if (!Directory.Exists(folderPathPS)) + + using (PowerShell ps = PowerShell.Create()) { - Directory.CreateDirectory(folderPathPS); - log.Info(string.Format("Cound not find folder PS, create new {0}", folderPathPS)); - - } - - - - try - { - // will create temporary ps script file from command for better compatibility - - string tempfile = Path.GetRandomFileName() + ".ps1"; - if (command.Contains("-File") || command.Contains("-file")) { - // command contains "-File" for running a script, do nothing - command = "-NoProfile -ExecutionPolicy Bypass " + command; + // command contains "-File" for running a script, check if file was encrypted with USI prefix. + string PSPath = Environment.CurrentDirectory + "\\PS\\"; + //contruct the path, remove -File|-file from command: + string pattern = "-file"; + command = command.Replace("\"",""); + PSPath += Regex.Replace(command, pattern, "", RegexOptions.IgnoreCase).Trim(); + + try + { + string data = File.ReadAllText(PSPath); + //check if PS file is encrypted + if (data.Contains("Unified Systems Inc.")) + { + byte[] bData = File.ReadAllBytes(PSPath); + string ddata = DecryptStringFromBytes(bData,aes.Key); + ps.AddScript(ddata); + } + else + { + result += " Cannot open Powershell script file."; + } + } + catch { + log.Error(string.Format("Failed to open PS file at: {0}", PSPath)); + } + + } else { - //create ps script file from command - try - { - File.WriteAllText(".\\PS\\" + tempfile, command); - } - catch - { - log.Error(string.Format("Cannot create or write temporary Powershell script file {0}", tempfile)); - } - command = string.Format("-NoProfile -ExecutionPolicy Bypass -File {0}", tempfile); + // FOR more detailed output, uncommend the below + //ps.AddScript(string.Format("{0}|OUt-String",command)); + //Comment the below if the above is used. + ps.AddScript(command); } - //log.Info(string.Format(command)); - process.StartInfo.Arguments = command; - process.Start(); - string temp = process.StandardOutput.ReadToEnd(); - log.Info(string.Format("From Powershell {0}: {1}", currentTask.sTaskDevice.ToString(), temp)); - result += temp; + Collection results = ps.Invoke(); - process.WaitForExit(); - try + + foreach (PSObject Item in results) { - File.Delete(".\\PS\\" + tempfile); - log.Info(string.Format("Deleted temporary PS file: ", tempfile)); + if (Item != null) + { + // Access the underlying object for its actual value + result += string.Format("{0} \n", Item.ToString()); + } + } - catch (Exception ex) + + // Check for errors + if (ps.Streams.Error.Count > 0) { - log.Error(string.Format("Cannot delete temporary PS file: ", tempfile)); - log.Error(ex); + log.Error("\nErrors encountered:"); + foreach (ErrorRecord error in ps.Streams.Error) + { + + log.Error(error.ToString()); + result += string.Format("Failed to execute \n {0}", error.ToString()); + } } } - catch (Win32Exception ex) - { - log.Error(ex); - } + + ////////////////// OLD - NEED TO REWRITE TO WORK WITH ENCRYPTED PS SCRIPTS 20260223 //////////////// + + //Process process = new Process(); + //process.StartInfo.FileName = "powershell"; + //process.StartInfo.UseShellExecute = false; // Required for 'runas' verb + //process.StartInfo.Verb = "runas"; // Request administrator privileges + //process.StartInfo.RedirectStandardOutput = true; + //string folderPathPS = Environment.CurrentDirectory + "\\PS\\"; + //process.StartInfo.WorkingDirectory = folderPathPS; // current working dir + + //log.Info(process.StartInfo.WorkingDirectory); + + + //// check if Powershell Script folder "PS" exists, if not , create one. + //if (!Directory.Exists(folderPathPS)) + //{ + // Directory.CreateDirectory(folderPathPS); + // log.Info(string.Format("Cound not find folder PS, create new {0}", folderPathPS)); + + //} + + + //try + //{ + //// // will create temporary ps script file from command for better compatibility + + //// string tempfile = Path.GetRandomFileName() + ".ps1"; + + //// if (command.Contains("-File") || command.Contains("-file")) + //// { + //// // command contains "-File" for running a script, do nothing + //// command = "-NoProfile -ExecutionPolicy Bypass " + command; + //// } + //// else + //// { + //// //create ps script file from command + //// try + //// { + //// File.WriteAllText(".\\PS\\" + tempfile, command); + //// } + //// catch + //// { + //// log.Error(string.Format("Cannot create or write temporary Powershell script file {0}", tempfile)); + //// } + //// command = string.Format("-NoProfile -ExecutionPolicy Bypass -File {0}", tempfile); + + //// } + //// //log.Info(string.Format(command)); + //// process.StartInfo.Arguments = command; + + //// process.Start(); + //// string temp = process.StandardOutput.ReadToEnd(); + + + // //log.Info(string.Format("From Powershell {0}: {1}", currentTask.sTaskDevice.ToString(), temp)); + // //result += temp; + + // //process.WaitForExit(); + // //try + // //{ + // // File.Delete(".\\PS\\" + tempfile); + // // log.Info(string.Format("Deleted temporary PS file: ", tempfile)); + // //} + + + // //catch (Exception ex) + // //{ + // // log.Error(string.Format("Cannot delete temporary PS file: ", tempfile)); + // // log.Error(ex); + // //} + + + //} + //catch (Win32Exception ex) + //{ + // log.Error(ex); + + //} + + + i++; } break; @@ -572,7 +662,7 @@ namespace SSH_Test } //Seriallize Tasklist to a Json file - public void SaveTasklist(List data, string filePath) + public void SaveTasklist(List data, string filePath, Aes aes) { JsonSerializerOptions options = new JsonSerializerOptions { @@ -585,10 +675,11 @@ namespace SSH_Test }; string jsonString = JsonSerializer.Serialize(data, options); - File.WriteAllText(filePath, jsonString); + + File.WriteAllBytes(filePath, EncryptStringAES(jsonString,aes.Key)); } //Deseriallize Tasklist from a Json file - public List LoadTaskList(string filePath) + public List LoadTaskList(string filePath, Aes aes) { JsonSerializerOptions options = new JsonSerializerOptions { @@ -605,17 +696,39 @@ namespace SSH_Test { try { - string jsonString = File.ReadAllText(filePath); - log.Info("Process tasklist.json"); - + + log.Info(string.Format("Try loading {0}", filePath)); + string jsonString = ""; + + if (File.Exists(filePath)) + { + try + { + //read json data from file + byte[] bData = File.ReadAllBytes(filePath); - return JsonSerializer.Deserialize>(jsonString,options); - log.Info("Process tasklist.json"); + //decrypt data and save to file + + jsonString = DecryptStringFromBytes(bData, aes.Key); + + } + catch (Exception ex) + { + //could not read tasklist.json properly + log.Error(string.Format("Could not load {0} for decrypting", filePath)); + log.Error(ex); + } + + + } + + + return JsonSerializer.Deserialize>(jsonString, options); } catch (Exception ex) { //could not read tasklist.json properly - log.Error("Could not load tasklist.json"); + log.Error(string.Format("Could not load {0}", filePath)); log.Error(ex); //return an empty list if file could not be read @@ -640,15 +753,31 @@ namespace SSH_Test //Deseriallize Profile from a Json file - public List LoadProfile(string filePath) + public List LoadProfile(string filePath, Aes aes) { if (File.Exists(filePath)) { try { - string jsonString = File.ReadAllText(filePath); - log.Info("Process tasklist.json"); + string jsonString = ""; + try + { + //read json data from file + byte[] bData = File.ReadAllBytes(filePath); + + //decrypt data and save to file + + jsonString = DecryptStringFromBytes(bData, aes.Key); + + } + catch (Exception ex) + { + //could not read tasklist.json properly + log.Error(string.Format("Could not load {0} for decrypting", filePath)); + log.Error(ex); + } + log.Info("Process profile.json"); return JsonSerializer.Deserialize>(jsonString); } catch (Exception ex) @@ -666,10 +795,110 @@ namespace SSH_Test } return new List(); // Return an empty list if file doesn't exist } + + //Encrypt a file with AES, append "Unified Systems Inc." + IV at the beginning of the file + public static byte[] EncryptStringAES(string sData, byte[] key) + { + // Check arguments + if (sData == null || sData.Length <= 0) + throw new ArgumentNullException(nameof(sData)); + if (key == null || key.Length <= 0) + throw new ArgumentNullException(nameof(Key)); + + byte[] encrypted ; + byte[] USI = Encoding.UTF8.GetBytes("Unified Systems Inc."); + Aes aes = Aes.Create(); + + aes.Key = key; + // Create an encryptor. + ICryptoTransform encryptor = aes.CreateEncryptor(aes.Key, aes.IV); + + // Use streams for encryption. + using (MemoryStream msEncrypt = new MemoryStream()) + { + using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write)) + { + using (StreamWriter swEncrypt = new StreamWriter(csEncrypt)) + { + // Write all data to the stream. + swEncrypt.Write(sData); + } + + encrypted = msEncrypt.ToArray(); + } + } + + + //return encrypted data with USI + IV at the beginning + byte[] USIIV = USI.Concat(aes.IV).ToArray(); + return USIIV.Concat(encrypted).ToArray(); + } + + + //Decrypt a file with AES, with "Unified Systems Inc." + IV at the beginning of the file + public static string DecryptStringFromBytes(byte[] eDdata, byte[] Key) + { + // Check arguments. + if (eDdata == null || eDdata.Length <= 0) + throw new ArgumentNullException(nameof(eDdata)); + if (Key == null || Key.Length <= 0) + throw new ArgumentNullException(nameof(Key)); + + //extract IV and remove USI + IV + byte[] IV = new byte[16]; + byte[] USI = Encoding.UTF8.GetBytes("Unified Systems Inc."); + byte[] USIIV = USI.Concat(IV).ToArray(); + + + Array.Copy(eDdata, 0, USIIV, 0, USIIV.Length); + Array.Copy(USIIV,USI.Length,IV, 0, IV.Length); + + //remove USIIV from bData: + + int dataLength = eDdata.Length - USIIV.Length; + byte[] bdatanoIV = new byte[dataLength]; + + Array.Copy(eDdata, USIIV.Length, bdatanoIV, 0, dataLength); + + + // Declare the string used to hold the decrypted text. + string sData = null; + + using (Aes aes = Aes.Create()) + { + aes.Key = Key; + aes.IV = IV; + + // Create a decryptor to perform the stream transform. + ICryptoTransform decryptor = aes.CreateDecryptor(aes.Key, aes.IV); + + // Create the streams used for decryption. + using (MemoryStream msDecrypt = new MemoryStream(bdatanoIV)) + { + using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read)) + { + using (StreamReader srDecrypt = new StreamReader(csDecrypt)) + { + + // Read the decrypted bytes from the decrypting stream + // and place them in a string. + sData = srDecrypt.ReadToEnd(); + } + } + } + } + + return sData; + } + + + + + + } - - public class cHostInfo + public class cHostInfo { public string device { get; set; } public string host { get; set; } diff --git a/bin/Debug/SSH_Test.exe b/bin/Debug/SSH_Test.exe index d68f755e6e6561adcc38349428bf0c7b24846fe2..4b7907fe886d7098e75703895e55198086fb2f5f 100644 GIT binary patch delta 41260 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 - - - - + @@ -25,6 +22,10 @@ + + + + \ No newline at end of file diff --git a/bin/Debug/SSH_Test.pdb b/bin/Debug/SSH_Test.pdb index 9d3e70b66efb7f631163c1a269ec3e50bd764127..e7eb86c8e14388e4f7bc50171b91c4fc1fc74f6f 100644 GIT binary patch literal 126464 zcmeFa3xHR1{{Md_(f)? zD=W5LS?q?`5Q`1jwY#zL&B|`s)@E7$kLUZm-=8_3j}L1q-=F<|d)I3opL5Rp^}gTE z`@GNlOe`&`uB@q?U7MPHe0HBcsS|TYrw&Qa$Y_38yPRAP)5!ey{>jgEhvqsHI* z{(G;sTy{!ueE1z#oY`{rZ(Bam+w=A|8TZ7IFZWuqzU9#)ue@gd5trYx=9p9)fSlb^ z-oAL-#J3JN|K3w~^%t90AHBBa@cj+vLH%zh1rAjHcbs)>o0ZR|<=pl^ zYr8+2HoNAcH=13wKKqbcc7I&lV)N%+^S_E7^`N5Vs+jy3lBCbjbx zb?!}9mts6Uc<`M`fdiHQKiYLim(llUCtdf!&yW4r z%`-2#;n^cM4w^Lj?j57gTfFDj&wl?q6XAmaiAjM2mH(Yy`uyWQ54XJajqG6+e}3=W z*YY38>2_t`J9jO(ApP}Wuhrcg`_4r8U_fG0;6Ua7P2RfQBPTuZ`|IBJcE2+(<%79{t{z%^ z?FY{f-!^&anb%)-RE(zw556-gaG>&kZSR*3y`tUuOUiOn$IKnw@s+uM{^#?3KmFM+ z{`~62`E6Gm*W^1B;e!E*Nr3~E{~fNq`nbEt|FrIj6Oy01`M#$wUb6A9yWd&lf3ZAu z@9WFXfAQfMPY)h^XHwum<^RgN29BCHLjJT@e zyJ_J?COyfAF^j%7 zry^1{P#&p`RM&j-7*@sT ze6tva{AqX$LmoCPhLfu+XP1^mzFE|&>Mj50IOP@8)J`a^sr_b7*J8WO+HQc`4NIx0 zCk;-cIh28K77^0OS^m%Qm{wa_R$5yc`G!TSE^PfjyH4I#MXKfe%&C!@%DUAcMJq3I)PY9i%@WeZ2t)>fAm*3n9TvmBS>#ew4$k=of&$IlBpUSJ(Bh;h6@ zdFaA7u3~oOHw#%P_niNwR{5j`^szJO0&hz2CZu^Y%DSV=!|d-oddnM-#w?So;@nzf zD=$l}<89fukyo*t0%ewA=UlGch5S~_>f+38jXm$5NFtMlJG;0rgX>42KLGs#$&LyVXAKos6U%Hlzwcf<#CZu;@9h8*Oj(PX2pWqplG4A?O$IayQ&Sct7~DqoH}R{qyS0k4fcAs)Ftx}L2`g6}C z%Tv_07+v|Bo7i8~5t*>R#3|(%&PDx=(>=k)H^W$n^_OCk($VQg{hd}5sji?)4dU$d ztE_(5ZxSn|o6}dEjo*p&*Cz0v^h)XH^rQYyrgNh^FOKzpR|5YDOG>8GkNTfjKZ6XC z3FmiH^i>Xw)AGM?R7Fws!YbYC$*%G|8h@)Fj{jlkXFGlQ|26t+6Zn5P`s1Cx{I6k@ zJy+xA$py6~vHtH$;D0mpr#gN4|26s<6f&7`{F$goIg@kI_}4JT)cr%?eQf-#emMR| zpkLthjsIWPA7IPh>ID8%=2J?YzT#gHF>_~1cc-^4fxj)#t8#ksH>8(t{aZ%imbo^7 z`Afx5QQbB1O)sjgtfme14r#d^Kh%cGuDgDOm)3GxS>>Ee27yvOOvkwkYic9qUdQ_1 z>DiTKWsxG4n40u45pLE?i@bI**UPIaE4ZhgSXmq?^Sq-%*K!JKm3*=1ste{bsE#=| zp|oONyuG~00u!!dLhk8Y`l&Uh@P@;XS5h4*D8|)vm9LtZ@SR>-QCvB{CS8*qN_-RV zAfD;tPV>AjA@_45MRnDswF}d;RY`PXR8_JNoglxGlb<`~FVFt;jMv9K-mPh)$L?R3 zuP{&aa>z^1OD56P{*rgt_dLp;(R1zbXEwiPa^9Jv$gjrenfzi1Ut3vm+W1-7Wu--P zy>#yz_=h5O#8bX2j3?W&QDs_r>#p_eXzUa?zrHl{GiyR+LGeEMIokTU)A~8iMGm&Y z&qC*CQAwm|?#Rjoc*W$?tZW@dinB`!D&|CJ3-=|yBVApvm3BqQ@7DNzzwr0;Y(da0%#B`*!-bo7SS>SfZ{%s}rVjyGDrx}e8Tm4T?9imaNQ zpx5!d?$}Wo3EPPcV$eV-Y-RY7iXVCdYrFNM9r|iE!umC~vgw-2Vfb31y{0na+|0vG z^=%!nsPG9Vh#fM{Vd#WG)V1{?f0fWLy8e*aXOl#O2X)!n>UgP5Ms9 zHSP3!nP+KS#b^djiZw0^lf3hOD4Mw3UA%*dcVkHU6hgIJ$OEpUG|qOrz>)(@9Q zG5T@&AicK`<-Fxxl*X#)PVV%Mcl6k}gpf z-31+u8M?yGkaF)2hLjIq>DV1AEW7dFMU=D5_H*`4OxsW+&D;SkdMe@;HD~ee@HkruJQ*$#Lt10HD8NQ2f?!- z;r5#oqCf^i$q=Mn)KAsxVBDk99~jZq>l1M!9KK+@lH`rEcEjO2#rWrWBOrO|jfA9! z_t(FDPX2n{XpV=#F>owA6*l+!(O6|7_=IUm==IzAxtVjpm?O!IKV(Pk#RmPrOu`N2 zBSTf==M<>AOgZ*RCodNcgEL?jJOe6?NFToho&!~e@?kY3Z~amM<`sk!+f3NZIYDA_I zKNKgz#Lx5jul&CZDsGG6h46BC5xg2Ej>A~O zI`?bCu6zsn!X(q5H{m!LQQIZc0=E_Rqaf{@#<+e5*cvvcq_(66HK#VYv{*p_3i_`k z)0fG;Rmf5mEDZJ1$4xI49tS(a?vV0t(n9rAey2gom8qxXy{V^X!ycS3fjuGVXX>fa zK=oAl+XpU(s;}RNwC(0b746wgO|W^cr9eY#lHhq!-t^C`jfC0 zYEHBc>ONg%{!@59Je-1e0qg=Vgz0b*JQ)27C;Tfxm)h!3}UOd=g#^ zpMuxGr{V2zBfJ+r1AhshgRjEp;X9Bz<$nw}!$ws87vWLxCD;+Z3VXxf!js_^I0?Q6 z3n6vUuYhmBi{MsxHGC7^1^)maf`5ch!au=R;5PU++zvm6@4|n>_ux@YJ@0>DSGWUa z!uR1Q_!l@GegMnhPBqz9t*Svndg z$en(O#tqpa>YBo(>&GMVyB8uqJq$5CT6g;{=#L*nC=!8xUoWQ@HY_Dgx9@F-7|NBxmOh}>U zEstw*^E5;{3X6^vHh5Ifb(pQM?s~vk~R{sa6z5g; zvAgM?DVyfrmF~ruD$5O)?O`TDALErEi;<(N$wz9DrN|m&BeD}oPR0&07O6s(AZrn| z?c0#ONPF7XgXaHU3Xt{Gp09rXcNy~?opOWuJ}-D4!-KeQ_WW-#y4{^_@GK@q*F8s4 z-H@Tni<-;PO?SFce-l4PqhBzFt}1G-K!1?akNTZhUt>?1u>V)0f0EOW`k(kYn(D7i z*#9NyYXfz2De8Z$zDxIY3H-kb{RvLr_^$_vUrzT#&j1;prQ|wY<9DpCOZN=g5t(qj zuR-@LryKP*ak^Dm{cyaOqF?CrqkbpWS6deE|F!6!>-3}k$EKSL|E>i7GbT-$=k%lg z$LhQ1VR^KTGHS1#VJw@n(CORfVGWrdoQ{5YelVyziRXi!J|uP?FQ_Yt=WS#+Ja-h- zjl}NK?)%|+yr3Q=c2{=8^H)KcPweh9aqb4?JF&a68+JD+%Zc567Q5kj(xB`nc2{=8 z=@69F#P0q&F1$gxOzf`ghQk|_!Nl%vigPz8Z;9QNUFYrs3RzILlA>i!b*Ic0zUQ#Z z?S}UPYz{ZWR`5l59DE6Og};G);LC6zd=)n3?kt#Bb7P#Y90y|^%`0f!BEPf_OQrbA+iEli)==8kCaT~(Hu5Z^1uqZ%p4Fu2G zPph7jKC-f|qG(~Z7DY$Wv(0mMvxeYH*P<(kgXjNKBNauZ>A5u}lguIn^GrW{4v)&q zgS9H(=K6&28iSnDf;knHHMOO@lMu6(!LD0~Uq2AG-(J>{^7Wb-bof9!Vcp!CL;xs@zERd8I6f=1w!ZP9xpfnHnjt)JkRLOD$_8 zI*|i-p>ps$_m)6u3l;zegEMu8;=wMV?q@1-YeNz)@^-XmPt~1j! z^sjGfc3oL*U3KK7ib!2;bwOF*)X8;)EY}zxS(sNjH&Ss@;gBH(gNgzDq#6!|uT6@~KfSbAtFD6Us`GKz$3{x$l+}>y zWf89F8SQdBS%pI*IsSFKpj}b8=t^RAYwC(9x;380QcfEBY+3i>(skqP2?`*_4!6zk zlWE^d>0HgZ*}U_lSDu2UEe(1utaeg`qaejgUjZ&t!p&aS4Wn`KKT-xT(+9jzOwGOOi+G*{o=2DddAewX!MYX%gwuwHfL ze3M7pu&;T}PjUDGYhQV!{14k_@x8n<KBjEcsZ{SmS8yUP*>3t_nNlFh;kCW2L|RlTI`IJBM=*TOIj_ zUokp*DJ}X=lGS%*&AFwtn}A#6x!$B>z5g1Yg~MK4S{?OYIzBp`urn>Bb3~j@c#TFw z?lD|hb8DG0G_b=^mZK(%vbNaz9k)(Ki%_DAnfAqBcmK7@`a3x4t9j0u@>Hz9xdrD% z4v2qymFbvkRS2x19ZA_6>z~%8Mg3EGxQB3VL|1ywuFh}c{07dOxi~UQ&Z?Y+gK}ES6)$HcIEElxT~@=F15bA zsqTgK!(~Thb${}4jVcC)d*`UhCS5O24g9y|M6x0U+ZsPWo21jX_W>!lOnuM+OTz#E(~t1<~<~?409DxGnz2G<-!mw zIy1{9N0hN{(yR^*`hqotzY2ZnI{T^%J2_v*`Ei{8)VibcoWwD0U39$R`iNxgmLP=9 zJG4uX=5Bluw(t6ZaJ#xMW!1%fl^R}5IPPPJ`&=6aTUMu4n6;zzu~!^d6W%iPrR(hL z{0_y1^NRb`)}615yAq@rQQU9-Ux@puw(O;<1HlmAs2NM#|K;ND*2|8luGSLSpxDPQ zn%$SQcmA6PANYKy3WYVKS;~m6Ut8yNgHcgy3!&0Gjd*N6GH}P~s_e)~E=9|l8(&DL ziVMrpxdy+Tj%%yKI*Hoqd$6z!-3oNiv0;^Nqd5OeI~9GAI;bz((4By;#vhxluF3{O zjF_+%aqPwn(pid*2HhWr{9{NEqw{s+4;SZ6xYGi?m(qeXmfv&{G46!>f_=%~(YAaw zvnj8&1kRjF{{G4O?ImneM^zM$DlXMMfWn+iV7DT2!|5rl zKLIzlApNkD-?Kg~H0})RxO~{x{>7!m5*yOWP+1>OTKvxXoj5HfR@T)-aw_Ln>{Ea2 z`Zg^TlF>b&GZXN8T<@={XF1gcb4KZ|f4}@KRw2iH9>Dyah`)=z*54ea8f@MZ?hM?J zzSB{e7|Z#-od1yX*IKvSx?Hj}S|;dQ@+v1*o)^KM^zzZ`iQZ<8e-hGDmW1_+%1UWq zCRdhL)SCMt)$8!}lG55LbJ4oH0(aAJw}j)v`vhsK@~2`S)>Cokl&RPI+kd%owGDq| zxb=;iNu==wHXNSfui-*2uV`0Ij8xQ(-?VCD)91GQJ>A4sFa(W-#L*o zwt@Ic-}j|$arX-CTL+%zh5VjOyz~0nGR@qNUKJ|9e@1JQ>dI{yAj~@u={dV98!I`t z9m$P3AG9;Hv(YkD%5|4_`x1UP?pSe55b#-{_FxL(U+uyljJZaP%2mcy%yBuUu%;6C zV)Ui!?7Q+$K%-$TE;TPr6=)*I^=;wn@%@FVBe>lcw-*z<2{euhp6lDfy7BiL(tRA= zp6JrNduLi*^)JaBhjptsc4_GR%tudI`f5l|ZE;v{fBPjjmy&!e4r92@i<+sV{h{f$ z>>R-N57t?~Hq#I|Lm5ly=KT7a_Yaz&>m$;2_FX=crX)>Z_UHWr#XIQRf@k*T!4S?W z51pZ|r0hP~rcHX0d8tqNww|z!W&TBW-SvZW_6O(e56;=!eN6Ua&R%tLU+1SkqCRFZ zXbGO9B}JdV(d2lU8q8q2(X<>6yTeS_1D*nVLGJy{+U<#uuH4ss2i=mdu`tcEe=g)+ z)vS9*$GoGF1+U=zNO%LxhPS{RxEkW7{}agloxdJVf}7xJ@J&eH?f(VR*7*N|(_jla zpXsnWJRJ^)gvFl<&xD2WEU5J|h45lX82u|?G1S^_#(w^CI0xPi>A(H^U5Kfw zVKsaM>OG1#;dvbY8Paw7AK3FB!bKea6J81rAuTV1N5aLh8zc?+7 z*5togXI%#$#NH+FA$TK{{afKrIaZlk2VaJdK$WG(;E_q5_XIo+%65B?br zhuh)FQ1RCDZiVX{%USRP{Jj(I;`)!^-{FJsAMg>l7yc4{0=Gcwi~m0S6n+3dgCD}r zVUt7n&N|fl14&7|>jE3WVC}5R#}MlDNK#AV<6e}9Gm$fpo|F^iipTpZGm+txpfcn< z&Qgmp-6>n0%^kGf;poq`(Hz$zr_;XVB7HdbV`Lt34sr_av_m@bTkr6+qn)8;v8Fk1 zDzv1Iw4@%irhK-fl?mSc(OTgnkk00M@H-<~Mrkv=;Mqh{^qGamjzMW>K9Tqy!EsaA z2_6Oq!RGKJNEsnL^sZ43avIVv>bBf?s-wm}Nz~%NB!l7h_tEI8Ot*%*2RjzZ?Y72E ztxxWPd!wW7^`*Q7&kT~H&mE4%ek$i>pmDDY?7?w2s5;RDW}@F>Efk~tdEKX_x{Tu5Cu?`DmI*K#}_25a24 zHe2h!-MaKq(R@-G2Xp^Pl-$6C^L;XIs4S62{$w~Eo(*Rhw`UTMImmz*_vR5Tl_P~o zChXqX=rQl)odesze5ihwK8~=eKS;y9l~MPUw{KbZuIIN*b7ZyoMSq8$%4I3+0F_?~ zua5h`xlm=l9FBsOa0(=k{Sqj9)lhnuT3!ZgIIldYh06CYw;gIX^e*18xVl~6rzq^f ze0frI-aQ=lg}AM-UjV~l*RjIB2rBIK_a^L@K!yEMsIbdkqOf1id4-+v!PkUc;b)d1 zrd_HJyUJoPKb{nwH$Rkf`H0Nb#%<C!$@506KJ$Mb=1FwbufY(FDUuG<~7v90~Cy-!} zW_qu+zWv#^{%Qz)(^vObZ5g4qHSdqO{-_i6?ueMY3g)Sk%$&8t)foxrRV$AFO_E|{~c@$>9=&V?rV&~+6$ld%sUJ!ZB+*JPGbv>Ux7S~ z@Lz>T!yb)Te*t^Kwr~+_2QPxD@E5Q%Jd&}2+|k5kSC0Eb#;o@` zvVVy^z7jId@qc2^ue0YLgZ(-GFL)v(I;5H2lTn+NNqw7$=zZSPkzz!BMn*I*+cL^- zORvzDHx2_{Xn8Jqb+Md-dN;TNIg{Vnw7lcZ`CyE4s`;%kN?S(yu3uq%7w_YGi+QH-&u&p`${kMp~E;H zO&XktjNtc)ND-13jdwnN2Xp`R>xR{S*{{TBjPEg4_FshGhkt~tpz`(y@MHKR_-}Y04ASvT!l^P=g{a&NK{8Dl>Oi|2 zq@CIUrD1>U=$bk}WBJ-EtbMPqdIDV!nw-sAl1_V{gk{cn(aCO?I+`~@Bbxpy-6hdW_Uj=6{O zd&9p%#?>D0hnTVQZg>jEe}|{SJ#Yg22b>8131`B+knx=NDXf1lQTN%|q*pc}2uy44 z&s%dh)tbCJp0X&@h4kz|PW2@{W!kbkLR;=`RJYrDs&8)ZgX8UQ)qjnnb$+nBnR6Nk8T*+12N>(92lJDtloMccI1#47 zDKG<0g`*+$(Vq@!zx_fu4PFSR!zJ)^NE>SA&hCLTIbI9ThL1z)n7;{9$Ch-bk1pYO z2rPx!@LV_@&V{pK8LWooQ16D4SN;lE2_J-2koRgBMS1=oU^UzWYoPWMpiMXX3Dm)1 z9FxapAA$4XnH*mL&xIGl^Wh?R1-uB}2&w!2-O%U%gK#lj(i`wfj{gTPfuF;r@UX^a z&p}`NxL(I`cSsrX2g7A>BD?{f4R3_nN8o0tHJ7)*d=M^%v}OKs_z=7YJ`DA) z%unIta2?cI)}O&Q;iK?<_zU<6r0w&Y9?JSZ*cv_oyTM<=0q`j}51aE`SLG3s2B76kC1b+>G1K)rz!#~4U;4b(Y)XPG&!F~()226#&C*S(P zKXN<_{t2E2x4}aAHmrv4z@_lda0T2BwFYwsTnFEW8{uEz7We_wTFjkrC;Sk82LB41 zHVyU%Xbb<&aWA+B4uk)IK*hulN?C&OlNJmg-=FN8GVGTlf#y4mLiVeY9bF*dF$T9ia9}qs{ZPU>7(Uc7E<~SYFm-{Ec@$ghgpY9hx`gDIDoCGh2r@fW>eLjKJk^HoPC63m=1X z;U-95136M7D#{UNmXL%tR58=?Inw6BNUlj!-4_PfwNAeyh%^BK7*J9!lJNBw-j+<*FGEaw;1V(IREwBDi4t#(n~{hP4AxSn$kvY z>3ly#=j5-ReQ6IA`7d`nBZ`Ck7iS`hpRS3rt8ku$WFd-={7`zxO~qSzelntTl%I1D zT~}VZYYJzg>vC73G*TFp--?Hx;puz@A~%%QDibOzN@JzjSVZYG2+{d6L}5G|kvmE| zg+tH$6c^deMU*zuRUBQpQW~jT>6|ND&h9vS-r1E~vg_=P=eNq0uB$94EtKx^U-_+c zkQ<`HB6sy1K=F_r#d{v2y0Xw7%Pn13+!bEAuRK#3Q#wjd{>xqjQJhuIrK3EMf37@~ z^ILke5T%Pm?ke4s&Pq##P31^sK>4e5kiL`N{8o8Wye1=xr_xq=r1Bwq(~<5-m*~B1 z2HkzI<|PTuz%&BxcTbwXRvaG>gJ-`Z%)1>lN9MZ*($F^{WHulgCnYmRX^#v=CL?9Y zVq^`X@y&KbGU9f)2cN<)St#mI%oT4WQl7imHNI~>VF79%SW z_0`)D^~tG-`rcw>8KQo56S56SrVne6WFixgDr5<=3UMZxAB?B8?$LbfLFe-riyk!p zH&Q_P@7CFI|7;9JJ8JS7_Rg51p)zI;`^pzb^ir`Gtal04pjBDh6!oYnKyQ}Q(>@#t z^j2HjVgCxzo8$E4UkNW(V=wIAHmeu*uL!*grzihHdhY#C#?Qut{VPWAJf|oBSio&R z^m5t?*~p#{@JZ)!v1M) zLniFsT=ahI^yFVi&#ftDe$SY2{L0XK*y%a{>bIXU@pSs``wwA%%h7+-={tYFLchxP z2Vws!(0|hDJOAsqpNa8*tT`^%hB%AcIB{4I{YSu3w&;;nrnWWs)9Ddjz< zFTWG$yL~E}F=rz)D}eb+8Nt0UHYu^YvKw|cXoC{FdkuEO=^L~=iQSdmaQX&qO=5SijdM3>UlO}3yJ2^OHYKsU z*I~Ci_hBx5gZ3k_yRsYJ*E?t{61#hSoV!80kl0<>4Z9n(0g2sRhTSyo;aqrwI-l5G z+3m%Bo3k6#@x<=lfZbu-LpZxZeNODI?4HcnUv`%vLEYuK6Tf8``f8ronD1d%L(-dI zOL#ME4{w1zAamLN0C+1r3El?B!rNgkTnW#C?4`@t{y6Rn+9IileoMMo(b|Ac=AJ=g zVzp0hzogatUeCCB3$hbw!aPkXG8CDNlptEPwh~!~yo~HXl9^9wj|@d7BW1{9WEHX= z(frF!qzMD?R3rl21s z#c;dcmUi_;?j_7HMD2Q9U+8ofSlw`&-VWU@PFHRESLm)w;O}whzU6e~?^pDJyAt?I z*+|hmq6xG7jnj4gNRAypOtfwY9nk&2>4x?@Qh8{Gec5%_zs>!H!u#y-c3*?Of3&ZA z;{;=}NS2tq3H#OF zj(@^_b;7SR}z{BC8(OJTn|zg;mu5PrL{-eT)F^&)Dz;P-jXZ@bq(K}Au-?KH42adqWK z`-;ni+n}!a_q|yE_UW5fs@viFj+u5G8BW(U?A+%3I)Lw$HM4UnZ`g9AICjG?^(m(O ze9e1h`Gj*TB3);{Bk$?S4U#L`;_uIUWs0}b#`WDno1eI!r@M+7PX=v#;(lIs!{ff7 zO;7ADU0jU2K^vafUD9q!37Wsv9JS^nHJ2FBt4 z2M29Ru=YcasmNsL2Zr&Ei9=7QI@ucrbD;HW;N?cpHY9c<-MVqSbpyA*omC2bDfNPi2%HtX(=8p3O0F z@OeH+sb#$=907UG#t55d?{G9+3&+5XkaYF8z;SQ~JQePN<6$xxLp|`1gOlO$a0)yH z5?4PLGOqS#!92*iN1hCL{snM4WE~(+0D^a6&VoPZcqV)vo()+iX4bI02WN5o5zL28 z$(v%>5k_D)I2&qh%N#fsmcTP0^HIL$!}3!W$GnUbDmNc3Dp&+>F{;GSjZd4--y=$Xgd(0M(-aMyHR&!ciI z)sCqB&~qI9wdroGmt}*YzS9}n zwUq1WKxrE6{Qp-knmZK^Z$S1C6;{r@npw}AR6)694l{O*bVolZY=Kem|5S=g6d zcm1pH$BNmMrCdA1Ry+WLr=fwJ#EX+F?P(H5*jnpk1!5Aq$O*Zy`k8r|Mh-t?YG0eielJ)4g0oo z%G~p6yd2z5e1m&Cbkxq`jk%W%--qbi95U+zn7_U7_Q$lXrYaOhZ+A>sFC?6wA+qo6 zC=Pm_uowAp%=zFxfjUjB0;4#)us7shO?6RvZa*-6Lqvw=J!%;Lq!e<(ggd-nRDH8y zcH#?mD{9z%alHQ-+!M)631I#*?nH)=FXh>9;J@27OZk?G zJL?d+<8)Q_y z{LQ?WnPb=WLTisPxw(Iu z54&>yPDuRBJBhgEKgn@-_#(tjv#$ho+<%v2-1b!%X-~|%iqtFakxLo3>YiNV^I!~H z|4xhE!5qiPd@y0snjww9wa!RmdmU@6T!ZL7UgP=WJ$HY;82^HHG%4B!H|5*{L}mbf ztKC+dRg^M0CS2+(%y%$#{Z?yFZSPQyAA+Qd{|Gz*)`xREX}tzF^uChD=?Yu@{Vw-+ zUeJCfMcY*s+YCe|3%8oUY~vHU8fpRrsI+Q6h}+nCHbxh-?5)tv}&$K2yh zhEt7OLvX7G85(sjpKC$8lw{f{4k@kX-cLWxJst( z7t}n$15on_Pe96td3Uite2rt3$(>O12z%iW$a-{BHakI;P1bRnvdKDZGylRmX_XQG zEJ$4ZIdBAIow1omV4bka-KF=!(VTw_j)5;g^2odkGY;Pc)y<2~L26A?3`x z12YBc9T=6l*--Na=fTtA6>tW;8LG@Y07(=733v{C18Uyj&oCeIUYD6S_yR^aZbg2m zOdJR2z#gy!YCKp9C&F{#IZ*Qkm9Px@upIJy(aam%1vPK523EmG;5?}Lgc=yMEt(_H zTtP0Pdu**q)V+KWqPc@{i0<2E$KAJUou%5N3CQV|x<}XigS+q7y}a)IW$#)q53&}&ukj2PKWHYiIX>|-`8p%f%AZw6~ z$Xm!Bq|LF$*@J(+u)SyLVkf#=5KG#!^AplT3dlPgHE%=m&;kMt@Sj4kGY3iGCw6 zVY^3Rw<+~)50})|>-{vD7DxtVbple1T=-vBZk7M;d3bx9NzD~8Yo?Q)eVAM})jc%- zBE9X@ec5%_|HEE_)wIpL@yfSo!r$xR+?T)MlN%|jt1hiwsC|z0?V8-NJkvDmK)-s9 zr_6p6rzU-jHWDo@3f#3{Y0=zIWd+;BPOL1B(AbB+D--^HPk1h7Oj%`NL0Ref1+{#I zhj4zA@A!njX*02)qF|2sSWNney4p(an*w*jcEWQ{rxl(XDY5|!+i|Ipo?X4Ls{4acuC!7y_k0;%I56OgO zVrfxzWliPm+H^k6GjKq9ZozE(H5s~J-8>S>7&jgpY?5{sgZ(Wru)?9G^DLk zm(~^u^n$jk?_u(h`*hs^SaUjcW2mbee9omnJJ)he_w=dMC4H|#_MIJfPfuH-VXQGc zvo)=$?kQEr!q>Efd0fS8h9H5PdAPX;H+$peI_t0Iv=rX39%CHJez2c$_d7y)zhS+2zcvtwp(N%rA)UkHbc#4ud^Y30zIoRl`MDZ|n^o8N^5Vr?xO0E;eqiG9Sp{yxcq@!F5hW<12U96Bfqy z-fyhCim&>Zu)E=XbyY@Pz7&(7dVbS2I|!3>l}}+^7w?VulaKu=*zaxaD~zq;?1$sM z2c4y4^cd`%81h5?W!R5MBuLwy*j<8j;`)S;ef7U#`+Vlfq=Acz{MmpW$>CiU(o>xb z>$!AL{H4>A_{_)7Uqd>~Tg2$pR4Z($Et#i?Jx`@k{M*N!R~~XInn&_yCjKZ-=H%3; zbB8!R7dFMo#Y=T(7xhpUz{SMZ? z(z{2T{h&RpF*?QQ)S`1Qc1{TC^o-M)oU2b71^L%2?i%00Vq5$Qiw@SKX4Bk65NZvf}2M+f;Oe>39rBGuKE6!&P|3j43$4H;K!92n@>{!on>hV|`H z!##V-P8%Li-%{g>(lCR*b1#jf?7HhZpU?RXoR5UgySY``t!N*qez4T`gNi3bNc~UD zbp=A#s9G`C>}y9n?+g0FuwGsLt3Kws%76HJRsAbD#_h&&*K76a46TFwrMZgHt+Cg- zaElr2t8lr^V2)>ID z{vH{3UHxQGi-YiPCtzCZ#=Gy{S_+cF>-w{>yRNNVPC(aTzZ8p)So;d2`m-4Op)t@# zbk?HtTkNzOSMP`Vv#?H$@%xaLd$GR;`x%nHPRJ3t3v*(e+=uCmVR{|c5R93(jMGW+n;-CeO%OMhTT#IxOQM)>c5*S*ko&8 zDRtMGGpPSH)^Ah)XJykUmMzqcn`s9q6wA?*j@Q9BTCCs8{Pwv(tG2wxAk1A0ec z1}Um{^}39YZ3n_SiQ0ki_4sxme9g53$_KRr;cJX1%d2YZ+ko)3_%=dgtnl^tHbU=B zU{eN^<^HN7`-BnRnFGqpx&Ec9}cgpwXZO$zK8t@-zVw4iwWp##m*HWKUC+# zI;!ukUWMt(_cGj2-F$pveK^%Ngxxq$b#p0$2bsYE%wL|5q`YPQ_Vh(Y-K&=IF;T86 zjGGDH4D_Vq>?v)eO!^q=cV(3(F=|X3t~NP*?OdiBg0G(hX|X@;OEVHi=BWVY?^(p* zs7XQkdHTwu;xM5;4$BC?)|*Mk*>iCqzrGX)#d{MvtI(N)&QR;N+8)I%tP_r#^gcsR z>)aH~v#g%{Qo9q@bK^qSPD^hkdR?(M&+4gPqv?y$b7O6%r*LjTuP^q#AJWs9BU zZ-3JNWt;xGuW^QFF)3TD-=+*rwjY4Sg3_b~I{Ge;beuhx{^4@+zg31ZNf?=H1DL-& zM@rf4;-E4V7l$p1H+s@>_7t~fL|_xb7}xv6>bpLQdK@iV@#Q29on?re{le-gO;o|-?*Bo$r4O+6;5kr zk(c8q+cq~R63WZb^yDKK){@T3&twAF6MgAA`^qml!x%K0pGsVpkKyymN7sJFoj3X6 z@-lo)x78CO6?1g&uj|Uo@byAjsHimha$ETpzFw0P+_NkEIfOrr@L!3Ymu!3$PUTrx zN9D@Imy@a3ujTq{*1p1^yb9Yd4wB52H|b?^u|0YdvG-X>uSuLT4NIK6w&YlU7a_F9JYxLt?|XH9jzfAM9?9q&uo`UrnmQ(&JFC7I_% z9D1sk8Tx_g!m~A{a~f<0yThime9dXG-1-g89|iO1Nzpm@2e8{y35V%z-C$nE=N81Q zmryQ$3glxe;U*}iL)W~*X%Kx4~sc2gjKK@ z*1@@OJ}iUUXPokE_8?XITx*ZD7wLJNza7qpYv2ON9>-=cP`%f2KF7a@7r-6xBKSGH z6b>e{Npt@+cm+HiQqO$N`z(Q%!>b_g#(P&o-t$)f>)!&egS^*m_Wpbt-pKJYP~m$4 zD!h7+V>$diTmj#+*FUhwAHmx=ueGtaL+xw63LcUi?D=^p`~k;DLAk5bx{1F^z z&ui~fogV@3ho{=}6X1g!p9UX-Q{cle7ycAZgO5QyH+dYE!zZBjO8q6g2L1}Jgd5;} z@JaY{_$+)8J_lceFTg*-%}{%%z6k#gUxIpm@CxieL-#7w-l@NZ{ow2Hc=!hF58s3* z!Qa7C;O}8JRQ$(5rDGoa13Ux14U6sdQhQtl|IGRG;C8qGz7H>fAHd7uPPh!p-5c%k zt?+N0f5@JH#Gd~Z{5$72+4IlCe{%dH`~?06{tLbWKZU=ApTj>wCW!oZVI$ZmCD^m` zXh@y*+rcJKd%8A-V<7#MKN+$n%0CA(ATxWq9tF?i_-Lp`N#VW}9?S7{uq|8$+rb;) zaqwQKy*clL-QmMfduu)h`@)S-?mTOce*w`bRuFSIE3rRK-wU) z7widesJ(sy)NwY{-kMscdNM4t=jTHce#^^XHrFq=$IC2lfV55iP4@V9sQmsB{66O& zhO1!k&eIQRm$i0J>x32{y-0lB2kM&uT6cFEqP2IyHv-zyVg-BJYhQcq-7e7{?b`Rc zH^24$4*mWr{X* ze55Zjkn8&9(ExsHfA)69y&kyTnl)Il?)Tt&C+z7vO46vlA)#^UDLh{C3C1B^lxwiA$A`#T)YKIkjV9gIJT!>aVypRo4v zQVC}V?tnUzr=1B)XL`NPtdQ%*I<{`)doOyiUi3V@%t}bD;XRYEp_l@qOY*WO&AHyTy{g7KIZw+h@AAo7_C$KMk5N1N&r}T%zhhPqT z7*2pZ6Z0c*9XuaC0xyB<;VtkNkbcB_9Bzb9K-zVWaez;|?L7tGg-^rJ;ICnFQtmQ$-_Gv7~>eT_AeIOh8X=KPD6S_|5U^I8ka zd#gTs|C{g2Xe}t?CO?V1XC12fp4wrs1ILHMOel9xfQtVpsBf=KfURHz9s}pVW1;4( z+d`F@c2H%iJ-h;Tge@t%`VLu3+P2`kHu|=WeoOSNAc@u{7a(UN`p(!Xh}u7WPe9)S zkxW2xkwM7l(C?A%Qt@Kd8FMyUV67X21(L9tbamneYd2C}ixWb*$#QYbQd+NZxSxN66UP z)J4j*Sx21(88et~%`israyae;M?w02Zwwp^$HIwl0xW|Q;l=PYcn6#U?|~|Vv_IyU z_Qd1eYM*w)oL8MZonx)Fr5^dehi5|SnRga!Oc|dAkAV4*^6M4BG*}Et6Z6d)-5->2 zoCnW^=$dcWV8<)tcrN6gzM2(E#{jxKZf%;eh5;J{f%%T)VRL} zz7M&FFyA!181CWt5~#X(89atOmb+SKsQCAQ*T8hR6zciU^>7?q2FF9*CHK#S--ELu zVe?BMYs3A9)wwFlqUu~75?|+3?^M5LBKoawbf~}AcRO^hA@xmlD^Yzb<-F=%7BUDq z4Vgm;(_CGD

BWG7Tx`+DVA3XQTLCV(iw}Gp!wW^=u+>imhkdZ`yhM#NR=@y^(j- zaoG7G>DU$C3kSi~u(@|6Zfl)+{Ws0j4+V4TN#0ZZmN^>PWq#3DTK677zdPsnPKAFW zd;*Suzk=#>DKoxCNt@u=@Oj8Rs`moShcCf8_#5cMm*J)Gb;v!Tw-sIwDRbr&CBFCGtM+e4#ZXDKuv1|ugMjf|iToZhgX%fG?B3cI@ ztb5luLTMVzYbV|l<1dZ8%bH_{KFC*_^*5+CYZt6f)B5i%ZRc7r$IQ1S`7P5D*=l|T z-=%57?@!U!xP*FS+&$zF?UTYi4pdv10=vPc@C0}m90d=DV_-9=(P(p+508X}@F+MB z9t{`4W8vkH`srT-=_?7h(yuS+lY?lC?!IGFz_G3c->+%S*e^)ClR2lf(>~1g?<8>_ zWaoL4%$zUIYd%`v&orhhel_D)8r1o2up{gab%)Ul4uienDX=e8zd_sKp8@;Bd^ix! zg@a%%911Ul!{9|w?ax(~%r$r?a{flhyCME^d;a^Dt1R!gTmwg7PvvVQ)IQZMy)5FX zZ~5q54b_=6MDJ>x#+?5t%-dEn(w|IPWtg-=)fn~f`u-lsbN(=R0q*F%7k$5~KF#$WpweCM&zu+%9c#~w&g4UHbo96>BUdkDNuX!MTW9p zx(lp=(#M(e(9LtY+WR3+*FAT5+$x0qosaHJrz?MJRcl9zH2JZh-s-1o)42kqNB=Dax zYs&dfU;Y;=9daXj*+I#sG;scNU`*J5+P;)aoWA@|pzrdKF|RS<_|q?>T;=pl{Occ> z#^iqjziDq%mN{J$_gGyQ?)3@$y%^mUPFMaW*bmt0?@i#hkN)?azWh$0@7{Zvc}NiN z5dqBKOVGd9>F>vW!p@Hk){h|}KQ6_O9S6XVk8o4tfS{fxesBDTw4I&kmz~|9UM7BT zTz13z!v^&*vAaLQZg0j(&fTECC3aVKk7vHe*$wJdVt4PwZg~IQpbjN=S9Zf;2 zcUgn&hxbhm>PBLBWw$3|9~a)B9wc`6KJ13~SPsg4Vs~ZN?OmsQ3(9$7cYloC@SeIs znNIAk?7BU5)gA}sH;LXdFlrad?C<-ro5Jr0pvJ5}fpkgUgRm=PFA>s|xh*&dJ`A%U zdus7)?pXTOPKe%T)pI)a!KuiI=<_=HAC&DRW(@)p_J1Aj$p4>1`Omwxek-^h>b~Sr zsBruO_JNN<%?>^eo0|9d<)_|()%&s%9S8o$_tRDAt)PEhhipc6Aez?I^WNb|KC%E= zfviPdMs^@g2uLcDh0H)|k)_CLWCOAd*^9Jk&$CP<2bqafA^$B#{l9CYmf1ju+keib zJdkVq|G4-6W?)}--SzOhdFmS)^3K&EUXt-W+^6d~t4zND=I;%JXPpa=`h}^Hn##KB zqDb(vU9~LfdHHgfhQ4&2eVyOJaVqCi;bYdFc05PtP({K}zr*i+C`=7`_N_Dv_l=rk zl~H+j=0*8rhjGOxn^v$KWV{zh%w>t-9-2f%L|QXZTJRc z2I1R6*ti!o;dA!Bt?;!_<->%-cQfJZ9u8l2Nu+3Q|G|aWQ~K2swzq8foV{-=d~ScI zaQJQ^d?Ul*%V8*58&UF^@aft4g@|;Vy>BaglN;j+CLF#Mgzua$hp*6;zjX>5deU+B z4s`h3xK!_o$%MmqE8#mo96r00i$%53G}LqV4K|F&p;qa9glvWHFq~U=H-wMSEJ?S`m2ReLi zAFG!Wgl{F`dnp_~-VIg_R{hnp`;|6q&d#?LHhqswCY*M65VpU>g)Q3l5iWhpO!l3f z106P3?wU0BfQ+GhJ*#ZZDyP=OIXkLWlnuGn;*coN?rW3XyQN5u5POLY{>an^2 z|6=umel@WkV_xIm8AfkfjDJCYmspR+)94i?& zjri%gMt!;jZFXWk-|Agr^zvf#g0?iV9`nN{oIE$cKj{sM=0niVCDvPR^%$3-mmA|> z&;}*eqpdLhQ76&UvxoZl1#LrOz13FlKBE^Kzb>Y3C)Rt|>iyK{1^KXtaz}IIEmI}J z_{b6}|4L*XvK85dH0wa!M6!?>NG-AyS&eK!-a_^uEjsdi8_7XtA{Qddk+sMsWIOU1 z(uRis8OT^9AGr`&j;uu*Y7}%gUfIgHQidQ$%{{bvXSg3unzz-Bh0@ zH&)p(sk8eZ_JXOHT{?&RE%xs?t$I%S$jZ8kqJ`N7HMM1t^z8B)+%x<0e(Bn@+S0Pp z+EUhFf3tmL^k$sd{)C@4lcxBSO-oL4l*>>L>t)mW|uVV|8@<{r)3SNJ&tYV`V%{bRE zOY&tqQzPY-X1|o|N^CEvRr-hBYRLXG;jo*1W*FaA7PA>kP5S8(8o_W{MfahJ^Us|B zU)XyloEPjp!`kAsmWj74o?cp0SHNr03(F!k>7j#BWoCPyZ*MDOa}V5*c@*`Hs=u0l zaD8-8C+pj_B(AqXWFDc}I)UBrTw8X8Z3EPbF&oeIDLI z9YI_;cn*{DnsXx*j(9iR^MEYd7cex9nxVMy2j@oUc|a@tYl3~*b=Mm*<_eFi+#Yb@ za~cyU5aDr2bo>yvk6m~VzdW;lnKpw{d!={x>c>Cf{pOU14ee)DPNnD4>mHk4X$q({ z!$_}x#idt6=CqaG^27DzL0zoBhgMO+d1F{37W2$BsCS8<70Pb-nQ2hR61#h3oV!7N zO6;!ehTRS7PGWakU^o2D(x8qcc2{;YSa0RhA*c(9-8~As{a91!>;`2%vAeQ6fai#^ zI~EDbZsPTQM`KrW6s@2hRJ4ZbE02LqSw$2)5A7J8Z^`FckoQT^xf$u_Au`8W_u9hd z9P|9i$89|a@ez&V%rj8x6z$wSJJWyoq|GqN3N(uMgWBomo{Z;l%sN7U7BysjO6ybX_>L{*L#)Zrm2W#%939mGf)T z^(`9BRqe~zjYpW#ITH2zK^&6Qmm8yW8E${Kr2mzDjTH`u8VAt#n{hy}SHAYo55B+Y z%Bq`7Ro|T4m39pIE}Abe?V29HJM}Q;kQtmzA&{zrCo#Acrx0;*M5BPL7c<9gnHMtW z8Jvh$kvQVzcC6dFRdC#z1l9R|mT#w8`y{Z=53|SDT6ZpCV5;+tt$Q7s2FI6^@H+o9 zdwrO_K8S&n&bxcmVfOk1WRlJ|W#A|#r3QSLjMMQ|WU9H&Kuf$F5eHc|w(-Bi9?xSi zrt7@#WLRp?>zw36n=bD%KdV(y}_Q>#*4By(WX;@O`l#?zisE>`ZOE= ze^ZcTKgs&@oYm*O2XlU&O$T>>S8CJYBnFkz8{yKy9zSX0e};|E2%8R_?eUA01?k<& z;8Yyt;&1g|wCC@z>G_a7KhB2dAsdgzT?73$t^Q3mUlv*SAF`a68rU0T!rEtCI(#sy-XXAZ_Ehq2Vc%Nj$)7XZi z+}5k6HeX-kMoaEZvEh5grvFVg-FsR0-|ZaO>u1wBiFz)*wl=)?+3S~Ee;=~-vZZxr ziVgp6TTa{B^u5-WmoqH;+w(74_sXq%&sq06*my*&JI~ni-pz*R2Al5pS$8h6<*Tuc z=liz&zHiUJZT&4EGK$Zewp{$fwpVXke;=~>_6M83y=?jqvi7u>h4h=+^03H;XSWSU z#2&wCkB8atl-hLZX4Ad1&6g>bkK(4>eZYq63G0vEoz(gMHhhb0`0lged*7CuMK+xt zu<10dbD-DQrt3m`zOzk_TW!5*YSZya>)u^9-J4o_ci8YPwCVYwEmt4fa#Uy2b+-+F zoejVC@=&-RweIO%PaS_~kLTI=jI;5nv;KFm>GY_L&mU~Ke`f2+4K`lGY`osL@z`zk zCffM4we83V8;|E~`FzF3=Q$gmhitrVu*Z#UxPE5!?z8bLxBh%+^Ye07pDZ7>oM`iX zVV5AjZ`<$;vf+Eky7P)nFTJm%bctAdZ`*o&l`H?&y$7s&Puk;8QUkpwEpN5%+-mEs z_H>cEi)_57*>c>$=1+f{?(bUrgRJ{gY`QM8{yb#M^K+JsZT@$#_6FHlQ;XT_Pe`5W6#-1N$^{=(< zRzF*w?z8E9mknog*Us7e8D)=eb@kMik25SgTmAQK`aNUapJvnbTFX+K9DV$)%oEmym3 zJu0x_?`G@WKV1E@_CIvx!IrP9EZ=wO;_5}`pq%x$Txj!mgk@vGd)Q%FUNWDuZ<5v0 zYm?=BslMm&^HLu-FQ-7YJ1i+RIVsu9OSQ=Hvdr~1yi=IwW#u$Z9^1PSW8xNG5<&A? zG-|<$BJ>d-B;kG|@;)u85&BtP3oaOa^2^U>9CPSmb3M7Um(m2?nCq!#-yiQV>wXj7 z2SCl^G%jW7y~!3q`0=0kG-(vL-`VGSix!^3&-E6E;Xl`to8V51k@BCAwDekB!gWlt z{-kLKFx?RtV@}~B-lcjYo7l71bU%~u+MH#t3XcQk8XJ=ajl5KBOeQUS6tfg0mHQ-4 zXL-rVsrb!F;+X7Xho9JyU-C)@$E+dv!AUG+an9IF4KCt~e)veERfIW}AAzaYCwNBR zj|SPpr!16Q6r4^#s*RbONrM^4aAYi!hvXw=$O2?BvJ6>?tVY%$8<4HYc4QaA-c08E zl&Mhf2@gebkjcnQM0=UkB6=To1#%Cv7GeJsZxh0PC*C$>C$bkwCR%#_(H`lEWFlF} z1Y`zMgHK=vRWZ36F5du@<3Bm>bJ@v(^Zt;k1s2iEK- zvluQzRwBGVZlaBX1%4X02J5OuN_&X@jI88OU&CERu)h zBl=G40%SF^4%vWgM)d90?Z__VGo%S^WGf^U>5FKMYYs9Q(YG@6eTiDcN0uThkb97| z$m7T+WDBwl*@^5$k|}mAkoJi7_|yJ>S;z!r2BL2uXg%l>WI3`5S%a)cHX<)0Zz1}A z!ybgma!+ec+aPJkaAYi!hvXw=h}Lc{MwTHfk=4jLWCOAp*@|pO^bL>CkS5gCR*3GM z^?jhBNDeX?nTeDjwTO=_MOGm9AZwAwkxj@JWE-***^4C8uD3^eBAG}QG69)^6eCs0 zg~$?QIkE~_gRDn3A}=FvAv=&gh(0#m3~7U;AsNVUWGs@0 zAj^?e$QoolvJrV1c?;Qr>_OO`!fS@KLDGaDBuYM1%!|%$)TWmoJ0^%5b%Oc3nvdG5=bBk4}}_AP_Q6a!GZ+~idGaV*w})F z78DT_y`Z4d;;kThK|$eOtk`<({nxBDd++R%y&=GNFUlFdpPe&n{qtC}X7=pYOoV#C zKMXrhjOsrazgrt!ZL*|ZNfeUlITdrV6o(!phjLgZoD_>QU2)XQ-68p~OgO0)XT6!v z&=3yGgp)?^4RYB|*3HLUW?$Ed<-$w1cxgC)L>N>jl~)Ll<-+S_@#y@-_ES7_$$p(5 z%Y~O=@oMYl7s6w?@G>plNi)Af>kAUpS?9-c;rT5doeQ~s%md}DLsF-+riO_Zhy{G` z2kQIv1$}RrPM2dcy}P3AIpVTZ1K`C$L8^^vR)p`g;zr3C7&;< z6p!jhD|}nyD94Nb7)yV(nNMAPj%WR3To_$0=^s-1{KAy31ILLj&a3*|Mf3LvgP*nD zI)II=x@=iWhCJ*7Wp73!V*6r91bLa>oP+D10UWw*4%ggbikMnOwsq<{5-+uzWDxi%} zOYlw}?-Og|vW{?Z4%YJ@8aJD$Ia4J~fI{X>O$_E_+U7D@io^ZE$zhprY;zf!7uoU& znUk+3Yx7@zmHt zlczd%WSMXgBOqctut}u2MX+ zULp2ix$tabSZ&?>LU=3}9-Lf{F((zT?ij;yqC3XYCEtxU>gsYF>!zYS+SZ34h*leV z(I(71oalbcGU1>snll(8O*(a^cy=+m$w+^=^w*UX}|F##y@l zk2dOmm%gmDXq??vtSf0?Oz0)!7Tq6kNn==fdD*bi3VJ*CmXeZUwRMVVd*(@c7%TKR zNcRxTy3iRQy9{GLmqy#2b%cxYLbn^;E6`kg66;`Fc4R%_W8A>1&+5EI_Xna4ecq7; z8Tj)8O3OO=*nEgNk`~62L`f?F_Xk|;V*gITv(q}wR!@_Nfc zX$0_nm}w8z6F$ZOZ4cV(D%u!Sj*Y|MUbLG}#h{W2)wDIKb`vuV)|E6cCg?N{sWf=O z2)9(Uud%MAfiXh&xzR1D9QZhl_ISshlH?||8lC2`oO$UO8?=A>S`m-O7VJXA+Yw30 zHJ5dSi}69vDVDY-Zs?qX<3%6ig3c@EO49e9Q?QP3F*fMD)+=seQBjrJGRCYI$BRD3 z0X@#rm>r|$AbN*Gn_ns!b9%uRn$t(c(;Os}!!qI6Y*1z9L%XqBd2qbw!v?w@tIa&> z>T|s4qu#nqhs^ZRF(yq=Uzg~1VVQ7jb@$Z$f3FWX%I7L?7PbyB`x^tZ97F+4} zgP%qkWx>LdvSfWi)9ueP;n?Q5{e|Vivt9cJ z6wke%v0QiTnHF;-tzyfr6^*D|q5j43qL2Qo{cFF{_nxP*j&N<~3z!m*R_VMOC>ayP z+I_aVvWz)F^jqETq|*%7+|Icj$BRDtnf574r*S>k=#AyR60LZp)Aqrq8XH)iBS_EzMp4r}8~TUlw%aI;+@c{+G37an{}^Jbd))m;c%=f`s4!Ot{rtC?T@JeCX3=4ZeM`LV?b&O*iC%TR?ucu^4Plu6r| zuJxL#eq}9&syQqZ4$7uE^sZS`<#VANmI=ppU7H3waX!{Us5&2(2`A0UXOEME1^P6H zWx}!bdAhEV`p`WywP2{`uuM4U^SVAQVOZu^i+E}d%YgTbX%b$w=ta&q?`N;wwIzN^R4}DtmwmS23@K`Q9 z^lLr#L}4tbQ$On#fayD|BV5>8bNeZ-t&a6@Sx30&=bB6Jz}Csvx)d<;WgX$#&hfjP z`PRc_9pT#Mi!CuGMLEW0juTz9y&mra7>k^`94ETy<0&@3i*xb2IvrmO4A=9t;4eVH-R%*aW~NlDJmK+ojhorh1oyG)uJPnU+Ju6HNWF!atX#r94E`K{?Ccg2YK~~*wN7SD)*g}g5!TXCb_exdJ?YWCF4uAw^}{od{u9QO8yT6YN&fsyF1dHP zI~iLs4pN|NaQC#;^?Gt){FRXH!l$Ml| zlaE4=WEOz5`58Zs2NL7@Ul}sYX_jNNed*!F6BxP`~I$eF* zW6r{%4Gzxnu}=W+zm?%GWT3pLdOS`bmEBTOQd84X3yXUMGt>P&(vpLzJ^V>UNj?0< zV}i*^$zzg({`4D+jQpHHc1nPpr^ic)C$taZ^coUKM)9~*2ni&kPaWKNbY6Dj;gd>N zUS|&;%>&%>qXu)!k9^RLm+QeB;K94igLj7qFX+K5_25-_@TNjG4{!!*qiFnBpO2C( zi2vy53=~(0|N1)x_)W6s@ZVw=SuPy)UKiQRkWt$^1Eu*PWXEKzx64WPW;3h(=(i5^ z_a4Y}yE|q3J$N5^@IHfVkYwUaGxJi*W=@&kL)IHIU3VvMgokW0WcYMe1t;$j$h2QO zWsiBJxgN6jHQ+^Rgeh$hJbJ+rgRNLCF3rc5%vRJr`{kQBgTim1$i=Z5OAE)-iPB z(Yl3hJX)vFjYsPey76coLN^|*#p1@Jbq2McIqN`c1}2C-ow5$N_!=O_(&sBuCA*Z$ zH{A5wDZ2}@t0Xa}Y$h7$1|lIiWiLaf=UPtLDahuD4?1PDe1`FmN-;FeE8?;Dj*Dy} zWO#g~f-}wikj;0IjqB(x`v+tEzKmS~M4-5X}emKNaD6$S@SDAeZavZ<1v~Rx2IJDLa~P7!OE0IAxVL!|z>W`v+OR z>*QU2i($OXMWN3j%s^$KJ-&6{bjoPI?s=l^l>OvZoI71)w2$+p(hg4E2n@P<4ADnQ zhSWzvrpFMc>`o8f1P|V158ez9-YgH^To2wt58kglcu#upp7r3p;KAGA!Q0}&+wQ^J z<-vQ;gZDQN-X|Ws&mkKne&+NE+5=X{X}{6FM0>vKIDOPI+T+!YSLDH?JzU**v}dc% zM;~>5v`4EOkM?BM`ueDOv;E`ueDOw8yF&kM>m6`ueDOw1;Xo{XlTaXn#|E zf$o%DGt|n@KFy{+eJx~K-ziJ<;H7);`g-sJ9=w4byrCYvAA0Z#J$QF{@Fsfjra`99 zsZN{GURb(qo2ZuJ|H#&~-&GHZbING%Dm@lEWwck7Tbi^VRXdk7Y0oJ)8SN|OCd=`V z(f&|wJlX@wO-B1XxyfGekkNikZamtP$xTN4F1g7%ddO~oOt(W*u`3;@{Q{7+k~pV~ z_BGM@;S$me#G`d(uauZeO$nz-`%7qEbBB!9AWoJz`_dATxLV@#cLeVL@g2Z@(53I9 zDd;#lUan?9k(l2#f)CN|YfbUq7wu?v8J=6U!1JanjF$LEX-1-!g!=yJD>NEoo9;kr{HJ@t%vpiKst6bMH*v)K<|Q~V}p1WQgHjw0{vjY*Ta{e zJ*-LNaXKFXBOxTRJAW%|ReP==9 zEqTN8@d%@2O8KO5-ES|MM4K}8ot&1KnV4N!Su(z`Y+7~|K90dNNZcGhqcT}H(+hMG zbo=tm$f}XdCt7F4X_zS}L+kO@nP+I@G%Q1#dGs@Y#IsJpd|J`)B*x&r@|jf^C8nob zq>O95FTVW(-A#>U{2zW$pn-xz6WiY``#=1DVIn{Kr84RQ>0>Wk-1Wp}9OKk;q@KeD z)Os0h;Nf{*&t=+WR}*yv|n zjEYI++SwbFe--WDhbPAkZb_4PE=AT|u0chv*82%IxXdt;JOVAi)_iIQ`pU#}DZfq) zuLaS|?&pvgovn)bY&D^zYK(cdnruH?;n}7-TjAAu+u5o?#qZPSG^_dy0=i2?v+hO!Zf;?Y#CNS}wnlfs=nCn6%xrKo)c6*>%W)hJ z&`ghJJT$w@KsuDyR{-Tff77h}bI9o}m7jn|H?e5d-BvhKpu1AEig!yKw?W>5A`$iv zNyV>=EhM7CU4Z5=OD2xBZBnCo&%bpS&Px!r+#1&sfIk8ofla`lfIkCtFOxhEx60M^0o?=a09*smH79v1c`11y zc`11uc{6z!c@cRic_4Wfc^i2+c`11?d7}@A2RZ^MzPiUx&tI%vU4d=@^@#33 z4}jVTrcvu`(zQtnkP4&$=|C?a1E6;E1HA#5SiK9-7f0N##qQ0p8;}j;0J%T_$OH0$ zn}B{mf8b_d05A|31l$7L3g8x|dOma;jzfWAz;NJp;NO4|z)0W@;DI0Nt+| z4FrKgpa>`iN`NuIodEe(DR37s4k!c00~3I9paPf(Oadx_Dxeye3`_y00@HxIfqQ`I zzzpCgz`Z~Xa3Anf;Ag;0U>0yc@BlCym;*cr{2Z7I%mW?*<^v0Whk;)Jj{pmSMZlxL zFM-9t65ui5SHM!>*TCbzGGIBd0(b&=5?Bd51w0M>26zTo1w0Ep2doCx0KWyE2i5}T zJG_Dfx1R4r!|8ozEO4rD$c@_?ztdvDP-FA0Pe!iTnm1s{kx$-kvEWAj-E`UgceEJu zPK!<5FmA{6-*nlouCv#-xFY9)pHFE%>zAur`=q8lAKUl-pI*4VSJe|Gahn&m|HB9W z+}5w@o<({0#C`e4mun8b^_?-uMOM)B)&5T(U)C}Ix!j0{KKuQZ|9G_EzK6G6wl)2h z{3j0QPo8=5wQV#EhQkGDf%Db=*Sz)Z->-k6#gg}O{S!X=jpDtxcXdIHTrY3w@{FU2ylCFIx$cUHNHKVJ!b;lf((ZX&;sYH{huG0@WltMH^1S}KYXCyKgXZ^X6fK| z6L(I0AhUMT?3l_*x?LL%7oY{sSNlKy*wVu@uKDT@Cr0+mn^QgU=#RH|h^IaVx^dDzDIh{-CWXL zAnB6KuKRE!E8W$Z2NOw`_O+vQNoLnwafzk-{IDPQC*8XcN4g}l>(Vp0E&!Ex)9{@6 zq)X2wNta}H-2%5)w#sl~+sBWP?qi6fbV+8{?PIf9aB0pc(rqp_ zBbi-yimeO>g0J5}y1fxc>5|N@OZ)Y9K|I;_+g83((xrV9Nta}HUE2Fl>*gJJ?LN|N zjX2UJnOzrA;ZTnS=v}|7VtbzOHNo?2^ot?TfqNKz8}o4p>`1?}(N1(+gSMb!TU^np z`1X99gFAfmdsZ7hwrVNI)_m+C#{)k8JqK+``hNL6Ptv)sImbs!dhKKR_pGLTd{N|n zk*8y3LFufJeElL{a|Or8#_=&i^7*(G|DMxAcBnhrU(jF(|xKGNzSL~WCHmvy-MmmQvBp&sdrx~PqdU{ytHeqwCi4+cqzRhQoh|{|3zZ=u9E)8 z@vPTF>>Po9PQ12K-c=%>CHbzCe%V6O86xFBA%5Cc>^o2VWuzRFCH_rGZ@i?pL(*$6 z^(c{aUKM}uEaiDv?7m9UxljBnTIzX3{P&2&ACP?YnhN{GFTRxV>VV|CPTK7Qv2Rzg zf4b*rl`BJzm;nh#WV-#$@L;Qm##s550*<@ySxY z8B)GgQobYNH#5XeYs5~&#jep}*J%{U%oIxJA-iA$E@yy=79qX=2Y~;#bGS zkE+G4C#3wJ8h8qd?4k1QToZlQZK*M>xk6j zgzyGQecH-6k}dVvA^y2r>ONj5UIVSBnOZO)^Zjj?3 zY4>RzIh_Mio^&bSI!R}@*ee#9QGO+&cR>2_9PR&--Wo}7i~RoD$Gk0aTq5Z#k$&4= z>_0>5JzV^_y|hoV*!^SCPnYzEh+St$KI_DvcgPXjwX5>B7rk`xg9tf}7d!M7{h;{! zNU`T`U0=y}yp$_m{5Vg_yFv1qCG!5#F8?F)pp^GV^80Ja?^TKS3xA%BTRp^|R*9Wg zNI5UnFWHNIAv}|A^S{RY`xi*ma&9OT`|$CEqRLM=K;gR_gV&#D6XI z8zk+%NO)h0|L>LdTqeg?#s2N39xKFtN5sF!%kLp#hvDK^C!`+*rTm?x-+ih3pXeXc z{viG}M~+9dU39;QXMaeR<1}gCY&k}wyiJ;98BzFPEhejl(I%_L@YUem(iX-~YmnwF zIMh{5B79L1QR)ruxPXzRV(KWc!;<#lEwCAQA2{XvVeiW2%rL(4$KA?0?UEb zz!kfs=rNaj_ZD2B3HBlYl-zKY;F&j0VbpslYQpEwCBb3A_&+0*(XU z05KRNTLM0S)(xdKlLNqDpa2*PQ~@=>TwpP<5?Bk+UVhsFT2J{y;3#kkh(f=J1KI&y z0NT4R3m6ED0Ez)xH+eQddx0(oRs-vSt-vl|KX4d03D67t&44yQ0?-HO2Mhy717*Ne zU?#8tSPDD?)B>AcSbd;7(pueJo}+POQB2?T(_Kmjlor~+z$xxivzB|v-n zZ3MOhdw>stqrfR33gdb^fcEK21G0dDzzCoir~sw|vw?-ca)9>bTMujnb^-f=!@x;^ zI%+eZ4UhmN0eygez%XDmPzFo|=v#~hz*2zr>Z=7d13Q8DfkVJ?AO`2OmVgiF4g`R~ zKmjlor~+z$xxivzC9oYh3be!dtP79^WC0_93Sc@g8(0V|2UY{?fvvzUU_WpeI0?{4 z7tMe+KmrgBXKw+z{}W#Sm+j}huBY#Nz5egncu-QOvtflf7m@{hnBQQEQE$-qhUxSf z1HELlH>Ot?Q=qC}6hSWmlBk!+2(SNbm^KNo|E>CfX%DP$5nlh>zUGg8hzPI$P1Z1d zMUN+;YpbV(*Z;Qr4WC1(?KW69~fOP4w%cLtK-wxTN!w^UtuojrIxJa}myJh~U; zR?b`x-T)8YZ63TkJa|D5Ua1GK!h=WmwdMiNKJLzKsKWHIrJEU+oon9S$O?#Hi!MXjqDO$|GR#>gxCMB-!9?xzu7K$gkc8iN8$Cq z*&KTOrC(&1@cQ5N+az=+9%-g3}9=QS90ozi@r>Eh5zFt1}^vVrfpxt^_ zP;d^bZ|l`@&vFUy|E~qyzZ>g+KmBRfS20W&8%MQzZRvtn@@pSzb@MyV-E%m+{&xe` zGPjlwKkHSXX-#z70^aEH4O)-cK|kwaU|nZDJ~b$Ra~bc37ThGBOOf>e)}SJX*Z&T$ z|BV;;Rk(Q9|6Ysv;CFHT?^n=nTY=AkF93R%oSqeY0DK4>01g5l0f&H(flq+{1ZW<8 z1o#yA3^)oL1L&SQK8dKa2Kd|f{SH9atGfYteOf)ApnD$MfY*TSzz*Pb;0<6W@FwsU z@bADbzz4(w9f3|j0zl7TuLZ6Hx&U2)Zou_GcYvP5CIUTyBp?|`0a5{a4x0}20y2P1 zzz_5WegM$3*uKCGz>Po_kPYMjxj+EO1M-2JfPO%K;AUU|Fc267+ydMR3D y0agLe0?z@ffi=Kyf#-p>!1)X(kl25n&jiD1g)I=aK-dCd3xq8Yw!j5%f&T?smB@bp literal 120320 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 diff --git a/bin/Debug/profile.json b/bin/Debug/profile.json index ac5b1b26505740226e96ec44ac42ff3203aec2cf..0d634c058f8ee13fc8f99300c9aca821367da4c0 100644 GIT binary patch literal 13204 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 literal 5792 zcmcIo-*2Nh5PsjkV$|oJ)TF)M?!BB?vfGQ)O{1jUeK?&g7YtY-II@9kRP}$qvB8w3 zi5nVDYNZNyX1;GcKR)>91Hcph0-W)Cs#ddNefB4e&Z|dCKbkNVNWRIr$nfawGZzY2 zMjulKbFpO-LQ3tU1sgWIhAzHawZkpKRqMRXYJrMiLv#&hlHQdEN1YxQ27kKS?4w1_hD}N z%vwG>fK6gC+fOsLHSs|Mc-AQjqc{m8{E3q@^KTAvmkx3Z_9#RSk2{!7Fp-0hGZ*5E z^_u6TBC3cqameiMhYiu;>cD^Hz`tY?3kechG8kteY)qA@VzWtif7wtcU6o-oUlNtm zyig=8Xlnf)PvLh5g}bHocNETC7W=xu|283aOX8>|M~1H*@J1ImpE0d6SG{05yES9^ zR>&34ur(tZu*UWA8U4cn`DXqw2v#$)RKn7feCHt(zQ}SZ(v(T-{&>6}9e986EEHP> zUXb&W>fs4XQ*AcPsfAGoATI&xa<&1E=kdwG zTi%a{KDuyVuhx@fVUdM23kF>Gqa)W^^-3P|6ifX(u4k?Eo{2c@PGz znWO8yj?@IQF?x`3txsPvnlqS9eaIPILnI{ls4*mMuKT3!ZL#SxA@>-N+@f$JlO3)t z9vtA-s32|dqJW|}MEO(O7?CvfM=foH!lO# ztyI|l|Ay};-Lo5Ps4d-9kKfFZOU6_=TH?Ghm)YE%M8$p%m*-cu9)`*l>YIqig=AH^ z5t@_nWfSF4)it=rppkX+p|NXK3YXoJ#_-iiV{>)TrapNy!7knPl}o&;w9)e?<*_yD ztY26Z_=>u}X&q{OE;+80VuiP^TOme8w)_^;M)H zPO3Ze&0ugA`@Q#o?owVRTmKjGz0P|8cS)~hBDRpd(lEM9)j422Wij9yvXy&MTj+JB z$InXA zh~kIk^fx1{Y@pMd!h|pptj`|cUAiHOS8+1TYhbJN8zEI*)vD+K>_$J$^wt;A%Ue=+ ZnI9HdbIBt9^Oj|Co^-7a2&@nP{s;UUiW2|; diff --git a/packages.config b/packages.config index dfce748..9efe4b4 100644 --- a/packages.config +++ b/packages.config @@ -2,13 +2,16 @@ - + + + - + + diff --git a/profile.json b/profile.json index ac5b1b2..3be3e8a 100644 --- a/profile.json +++ b/profile.json @@ -1,8 +1,8 @@ [ { "ProfileName": "Do nothing", - "ProfileType": "CMD", - "ProfileCommands": ["Do nothing" + "ProfileType": "", + "ProfileCommands": [ ], "ProfileParameters": [ "{P00}", @@ -332,6 +332,26 @@ "ProfileParameters": [] }, + { + "ProfileName": "CMD_Install_TeamViewer.msi", + "ProfileType": "CMD", + "ProfileCommands": [ + "C:\\USI\\Apps\\TeamViewer.msi /qn", + "winget list --disable-interactivity --accept-source-agreements| FINDSTR /i \"TeamViewer\"" + ], + "ProfileParameters": [] + }, + + { + "ProfileName": "CMD_ShowAllSoftwareVersion", + "ProfileType": "CMD", + "ProfileCommands": [ + + "winget list --disable-interactivity --accept-source-agreements " + ], + "ProfileParameters": [] + }, + { "ProfileName": "CMD_Timezone_CanCentralStandardTime_6", "ProfileType": "CMD", diff --git a/tasklist.json b/tasklist.json index 298b0e3..b1a9a26 100644 --- a/tasklist.json +++ b/tasklist.json @@ -1,6 +1,14 @@ [ { "iTaskNum": 1, + "sTaskDescription": "Remote Desktop Enable", + "sTaskDevice": "", + "bTaskSelect": false, + "sProfile": "Powershell_Remote Desktop Enable", + "dParameters": {} + }, + { + "iTaskNum": 2, "sTaskDescription": "Bios enable Power on AC Recovery", "sTaskDevice": "", "bTaskSelect": false, @@ -8,7 +16,7 @@ "dParameters": {} }, { - "iTaskNum": 2, + "iTaskNum": 3, "sTaskDescription": "Change HostName", "sTaskDevice": "", "bTaskSelect": false, @@ -18,63 +26,68 @@ } }, { - "iTaskNum": 3, + "iTaskNum": 4, + "sTaskDescription": "Create 2 Windows Admins", + "sTaskDevice": "", + "bTaskSelect": false, + "sProfile": "CMD_Add_Local_2_Admin_Users", + "dParameters": { + "{Local Admin User 1}": "USI-Admin", + "{Password 1}": "", + "{Local Admin User 2}": "SIGA-Admin", + "{Password 2}": "" + } + }, + { + "iTaskNum": 5, "sTaskDescription": "Reboot by IDRAC", "sTaskDevice": "", "bTaskSelect": false, "sProfile": "RAC9_Commit_Changes_reboot_NOW", "dParameters": {} }, - { - "iTaskNum": 4, - "sTaskDescription": "Server have 2nd power supply?", - "sTaskDevice": "", - "bTaskSelect": false, - "sProfile": "RAC9_PS_status_dual", - "dParameters": {} - }, - { - "iTaskNum": 5, - "sTaskDescription": "OS", - "sTaskDevice": "", - "bTaskSelect": true, - "sProfile": "CMD_OS_name", - "dParameters": {} - }, { "iTaskNum": 6, - "sTaskDescription": "10GB ports", - "sTaskDevice": "", - "bTaskSelect": false, - "sProfile": "RAC9_networkinterfaces", - "dParameters": {} - }, - { - "iTaskNum": 7, - "sTaskDescription": "GPU", - "sTaskDevice": "", - "bTaskSelect": false, - "sProfile": "Powershell_VideoController", - "dParameters": {} - }, - { - "iTaskNum": 8, - "sTaskDescription": "Windows Activation Status", - "sTaskDevice": "", - "bTaskSelect": true, - "sProfile": "CMD_Windows_Activation_status", - "dParameters": {} - }, - { - "iTaskNum": 9, "sTaskDescription": "Get Service Tag", "sTaskDevice": "", "bTaskSelect": false, "sProfile": "RAC9_IDRAC_Get_ServiceTag", "dParameters": {} }, + { + "iTaskNum": 7, + "sTaskDescription": "Server have 2nd power supply?", + "sTaskDevice": "", + "bTaskSelect": false, + "sProfile": "RAC9_PS_status_dual", + "dParameters": {} + }, + { + "iTaskNum": 8, + "sTaskDescription": "10GB ports", + "sTaskDevice": "", + "bTaskSelect": false, + "sProfile": "RAC9_networkinterfaces", + "dParameters": {} + }, + { + "iTaskNum": 9, + "sTaskDescription": "OS", + "sTaskDevice": "", + "bTaskSelect": false, + "sProfile": "CMD_OS_name", + "dParameters": {} + }, { "iTaskNum": 10, + "sTaskDescription": "GPU", + "sTaskDevice": "", + "bTaskSelect": false, + "sProfile": "Powershell_VideoController", + "dParameters": {} + }, + { + "iTaskNum": 11, "sTaskDescription": "Power redundancy", "sTaskDevice": "", "bTaskSelect": false, @@ -82,7 +95,7 @@ "dParameters": {} }, { - "iTaskNum": 11, + "iTaskNum": 12, "sTaskDescription": "Raid volume check", "sTaskDevice": "", "bTaskSelect": false, @@ -90,7 +103,15 @@ "dParameters": {} }, { - "iTaskNum": 12, + "iTaskNum": 13, + "sTaskDescription": "Windows Activation Status", + "sTaskDevice": "", + "bTaskSelect": false, + "sProfile": "CMD_Windows_Activation_status", + "dParameters": {} + }, + { + "iTaskNum": 14, "sTaskDescription": "Avigilon Version", "sTaskDevice": "", "bTaskSelect": false, @@ -98,7 +119,7 @@ "dParameters": {} }, { - "iTaskNum": 13, + "iTaskNum": 15, "sTaskDescription": "Get Network Interface Name", "sTaskDevice": "", "bTaskSelect": false, @@ -106,58 +127,45 @@ "dParameters": {} }, { - "iTaskNum": 14, + "iTaskNum": 16, "sTaskDescription": "Create NIC team for Cameras", "sTaskDevice": "", "bTaskSelect": false, "sProfile": "Powershell_NetworkInterface_Team_LACP_Dynamic", "dParameters": { - "{Team Name}": "fgdhdf", - "{NIC1}": "dfghdfgh", - "{NIC2}": "fdghfdgh" + "{Team Name}": "Camera Lan", + "{NIC1}": "Integrated NIC 1 Port 1-1", + "{NIC2}": "Integrated NIC 1 Port 2-1" } }, { - "iTaskNum": 15, - "sTaskDescription": "Create 2 Windows Admins", - "sTaskDevice": "", - "bTaskSelect": false, - "sProfile": "CMD_Add_Local_2_Admin_Users", - "dParameters": { - "{Local Admin User 1}": "", - "{Password 1}": "", - "{Local Admin User 2}": "", - "{Password 2}": "" - } - }, - { - "iTaskNum": 16, + "iTaskNum": 17, "sTaskDescription": "IDRAC Assigned IP address", "sTaskDevice": "", "bTaskSelect": false, "sProfile": "RAC9_IDRAC_Assign_IP_Network_Interface", "dParameters": { - "{IP Address}": "", - "{Network Mask}": "", - "{Gateway}": "" + "{IP Address}": "192.168.39.2", + "{Network Mask}": "255.255.255.0", + "{Gateway}": "192.168.39.1" } }, { - "iTaskNum": 17, + "iTaskNum": 18, "sTaskDescription": "IDRAC Set User Password root, 3,4", "sTaskDevice": "", "bTaskSelect": false, "sProfile": "RAC9_IDRAC_Configure_Users_at_234", "dParameters": { "{Password 2 root}": "", - "{Username 3}": "", + "{Username 3}": "USI-Admin", "{Password 3}": "", - "{Username 4}": "", + "{Username 4}": "SIGA-Admin", "{Password 4}": "" } }, { - "iTaskNum": 18, + "iTaskNum": 19, "sTaskDescription": "Firewall", "sTaskDevice": "", "bTaskSelect": false, @@ -165,7 +173,7 @@ "dParameters": {} }, { - "iTaskNum": 19, + "iTaskNum": 20, "sTaskDescription": "ACC Antivirus Exclusions", "sTaskDevice": "", "bTaskSelect": false, @@ -173,7 +181,7 @@ "dParameters": {} }, { - "iTaskNum": 20, + "iTaskNum": 21, "sTaskDescription": "Folder Options", "sTaskDevice": "", "bTaskSelect": false, @@ -181,7 +189,7 @@ "dParameters": {} }, { - "iTaskNum": 21, + "iTaskNum": 22, "sTaskDescription": "Power Options", "sTaskDevice": "", "bTaskSelect": false, @@ -189,40 +197,47 @@ "dParameters": {} }, { - "iTaskNum": 22, - "sTaskDescription": "Show network Interface names, using CMD", + "iTaskNum": 23, + "sTaskDescription": "Show network Interface names, using CMD ", "sTaskDevice": "", "bTaskSelect": false, "sProfile": "CMD_Show_NetworkInterfaces", - "dParameters": {} - }, - { - "iTaskNum": 23, - "sTaskDescription": "Remote Desktop Enable", - "sTaskDevice": "", - "bTaskSelect": false, - "sProfile": "Powershell_Remote Desktop Enable", - "dParameters": {} + "dParameters": { + "{P00}": "", + "{P01}": "", + "{P02}": "", + "{P03}": "" + } }, { "iTaskNum": 24, - "sTaskDescription": "Windows Update Restart", + "sTaskDescription": "Assign an IPv4 address to an interface Camera Lan", "sTaskDevice": "", "bTaskSelect": false, - "sProfile": "Powershell_Windows Update Restart", - "dParameters": {} + "sProfile": "CMD_Assign_IPv4Address", + "dParameters": { + "{Name of Interface}": "LAN 1 (Workstation)", + "{IP Address}": "192.168.38.41", + "{Net mask}": "255.255.255.0", + "{Gateway}": "192.168.38.1" + } }, { "iTaskNum": 25, - "sTaskDescription": "IPv06 disable All", + "sTaskDescription": "Assign an IPv4 address to an interface Workstation", "sTaskDevice": "", "bTaskSelect": false, - "sProfile": "CMD_Ipv6_Disable_ALL", - "dParameters": {} + "sProfile": "CMD_Assign_IPv4Address", + "dParameters": { + "{Name of Interface}": "", + "{IP Address}": "", + "{Net mask}": "", + "{Gateway}": "" + } }, { "iTaskNum": 26, - "sTaskDescription": "Screen Saver for USI-Admin", + "sTaskDescription": "Enable ScreenSaver for current user", "sTaskDevice": "", "bTaskSelect": false, "sProfile": "CMD_ScreenSaver", @@ -230,15 +245,66 @@ }, { "iTaskNum": 27, - "sTaskDescription": "hgkghk", + "sTaskDescription": "Install Foxit Reader", "sTaskDevice": "", "bTaskSelect": false, - "sProfile": "Powershell_Assign_IPv4Address", + "sProfile": "CMD_Install_FoxitReader", + "dParameters": {} + }, + { + "iTaskNum": 28, + "sTaskDescription": "Set timezone to SK Canada Central Standard -6", + "sTaskDevice": "", + "bTaskSelect": false, + "sProfile": "CMD_Timezone_CanCentralStandardTime_6", + "dParameters": {} + }, + { + "iTaskNum": 29, + "sTaskDescription": "IPv6 Disable All", + "sTaskDevice": "", + "bTaskSelect": false, + "sProfile": "CMD_Ipv6_Disable_ALL", "dParameters": { - "{Name of Interface}": "", - "{IP Address}": "", - "{PrefixLength}": "", - "{Gateway}": "" + "{P00}": "", + "{P01}": "", + "{P02}": "", + "{P03}": "" } + }, + { + "iTaskNum": 30, + "sTaskDescription": "Install Meinberg ntp-4.2.8p", + "sTaskDevice": "", + "bTaskSelect": false, + "sProfile": "CMD_Meinberg ntp-4.2.8", + "dParameters": { + "{IP Address 1}": "", + "{IP Address 2}": "" + } + }, + { + "iTaskNum": 31, + "sTaskDescription": "Windows Update Restart", + "sTaskDevice": "", + "bTaskSelect": false, + "sProfile": "Powershell_Windows Update Restart", + "dParameters": {} + }, + { + "iTaskNum": 32, + "sTaskDescription": "Install Teamviewer 15", + "sTaskDevice": "", + "bTaskSelect": false, + "sProfile": "CMD_Install_TeamViewer.msi", + "dParameters": {} + }, + { + "iTaskNum": 33, + "sTaskDescription": "Show all software version", + "sTaskDevice": "", + "bTaskSelect": false, + "sProfile": "CMD_ShowAllSoftwareVersion", + "dParameters": {} } ] \ No newline at end of file