first commit

This commit is contained in:
Wesley Hofman
2025-09-18 14:23:18 +02:00
commit 2f1f4199ad
293 changed files with 54467 additions and 0 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,26 @@
@echo off
cls
echo.
echo Remove server copy...
del "\\silicium\software\MASER software\Source\GoldenEye\Servercopy\*.*" /q
rd "\\silicium\software\MASER software\Source\GoldenEye\Servercopy"
md "\\silicium\software\MASER software\Source\GoldenEye\Servercopy"
echo.
echo Copying GoldenEye
xcopy "\\silicium\software\MASER software\Source\GoldenEye\GoldenEye\bin\Release" "\\silicium\software\MASER software\Source\GoldenEye\Servercopy" /q /y
echo.
echo Copying Updater...
xcopy "\\silicium\software\MASER software\Source\GoldenEye\Updater\bin\Release" "\\silicium\software\MASER software\Source\GoldenEye\Servercopy" /q /y
echo.
echo Copying Installer...
xcopy "\\silicium\software\MASER software\Source\GoldenEye\Installer\bin\Release" "\\silicium\software\MASER software\Source\GoldenEye\Servercopy" /q /y
del "\\silicium\software\MASER software\Source\GoldenEye\Servercopy\*.pdb"
pause

Binary file not shown.

32
GoldenEye/GoldenEye.sln Normal file
View File

@@ -0,0 +1,32 @@

Microsoft Visual Studio Solution File, Format Version 11.00
# Visual C# Express 2010
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GoldenEye", "GoldenEye\GoldenEye.csproj", "{A924B38F-ECAC-4726-A5F0-7FA8F80374BB}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Installer", "Installer\Installer.csproj", "{FED6E5AC-E14B-4450-8E83-4F33CA720E4C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Updater", "Updater\Updater.csproj", "{3F5ABD01-B518-4104-B094-0BFAC8168862}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x86 = Debug|x86
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{A924B38F-ECAC-4726-A5F0-7FA8F80374BB}.Debug|x86.ActiveCfg = Debug|x86
{A924B38F-ECAC-4726-A5F0-7FA8F80374BB}.Debug|x86.Build.0 = Debug|x86
{A924B38F-ECAC-4726-A5F0-7FA8F80374BB}.Release|x86.ActiveCfg = Release|x86
{A924B38F-ECAC-4726-A5F0-7FA8F80374BB}.Release|x86.Build.0 = Release|x86
{FED6E5AC-E14B-4450-8E83-4F33CA720E4C}.Debug|x86.ActiveCfg = Debug|x86
{FED6E5AC-E14B-4450-8E83-4F33CA720E4C}.Debug|x86.Build.0 = Debug|x86
{FED6E5AC-E14B-4450-8E83-4F33CA720E4C}.Release|x86.ActiveCfg = Release|x86
{FED6E5AC-E14B-4450-8E83-4F33CA720E4C}.Release|x86.Build.0 = Release|x86
{3F5ABD01-B518-4104-B094-0BFAC8168862}.Debug|x86.ActiveCfg = Debug|x86
{3F5ABD01-B518-4104-B094-0BFAC8168862}.Debug|x86.Build.0 = Debug|x86
{3F5ABD01-B518-4104-B094-0BFAC8168862}.Release|x86.ActiveCfg = Release|x86
{3F5ABD01-B518-4104-B094-0BFAC8168862}.Release|x86.Build.0 = Release|x86
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

BIN
GoldenEye/GoldenEye.suo Normal file

Binary file not shown.

385
GoldenEye/GoldenEye/GoldenEye.Designer.cs generated Normal file
View File

@@ -0,0 +1,385 @@
namespace GoldenEye
{
partial class GoldenEye
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(GoldenEye));
this.label1 = new System.Windows.Forms.Label();
this.lblPercentAbove = new System.Windows.Forms.Label();
this.pnlOriginal = new System.Windows.Forms.Panel();
this.pboxOriginal = new System.Windows.Forms.PictureBox();
this.label2 = new System.Windows.Forms.Label();
this.pnlResult = new System.Windows.Forms.Panel();
this.pboxResult = new System.Windows.Forms.PictureBox();
this.btnSave = new System.Windows.Forms.Button();
this.rbtnCuAl = new System.Windows.Forms.RadioButton();
this.rbtnAuAl = new System.Windows.Forms.RadioButton();
this.label3 = new System.Windows.Forms.Label();
this.cboxOriginalInBG = new System.Windows.Forms.CheckBox();
this.sfd = new System.Windows.Forms.SaveFileDialog();
this.lblSavedAs = new System.Windows.Forms.Label();
this.lblBuild = new System.Windows.Forms.Label();
this.pnlHelp = new System.Windows.Forms.Panel();
this.lblSource = new System.Windows.Forms.Label();
this.btnCloseHelp = new System.Windows.Forms.Button();
this.lblHelp = new System.Windows.Forms.Label();
this.label6 = new System.Windows.Forms.Label();
this.pictureBox1 = new System.Windows.Forms.PictureBox();
this.label5 = new System.Windows.Forms.Label();
this.pboxHist = new System.Windows.Forms.PictureBox();
this.pnlOriginal.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.pboxOriginal)).BeginInit();
this.pnlResult.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.pboxResult)).BeginInit();
this.pnlHelp.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pboxHist)).BeginInit();
this.SuspendLayout();
//
// label1
//
this.label1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(11, 637);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(111, 13);
this.label1.TabIndex = 4;
this.label1.Text = "Histogram of selection";
//
// lblPercentAbove
//
this.lblPercentAbove.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)));
this.lblPercentAbove.AutoSize = true;
this.lblPercentAbove.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lblPercentAbove.Location = new System.Drawing.Point(636, 655);
this.lblPercentAbove.Name = "lblPercentAbove";
this.lblPercentAbove.Size = new System.Drawing.Size(85, 20);
this.lblPercentAbove.TabIndex = 5;
this.lblPercentAbove.Text = "Au-Al: IMC";
//
// pnlOriginal
//
this.pnlOriginal.AllowDrop = true;
this.pnlOriginal.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.pnlOriginal.BackColor = System.Drawing.SystemColors.Control;
this.pnlOriginal.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.pnlOriginal.Controls.Add(this.pboxOriginal);
this.pnlOriginal.Controls.Add(this.label2);
this.pnlOriginal.Location = new System.Drawing.Point(14, 16);
this.pnlOriginal.Name = "pnlOriginal";
this.pnlOriginal.Size = new System.Drawing.Size(610, 563);
this.pnlOriginal.TabIndex = 6;
this.pnlOriginal.DragDrop += new System.Windows.Forms.DragEventHandler(this.pnlOriginal_DragDrop);
this.pnlOriginal.DragEnter += new System.Windows.Forms.DragEventHandler(this.pnlOriginal_DragEnter);
//
// pboxOriginal
//
this.pboxOriginal.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.pboxOriginal.BackColor = System.Drawing.SystemColors.Control;
this.pboxOriginal.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom;
this.pboxOriginal.Location = new System.Drawing.Point(75, 326);
this.pboxOriginal.Name = "pboxOriginal";
this.pboxOriginal.Size = new System.Drawing.Size(600, 553);
this.pboxOriginal.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
this.pboxOriginal.TabIndex = 0;
this.pboxOriginal.TabStop = false;
this.pboxOriginal.Visible = false;
this.pboxOriginal.Paint += new System.Windows.Forms.PaintEventHandler(this.pbox_Paint);
this.pboxOriginal.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pbox_MouseDown);
this.pboxOriginal.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pbox_MouseMove);
this.pboxOriginal.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pbox_MouseUp);
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(243, 254);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(122, 52);
this.label2.TabIndex = 1;
this.label2.Text = "Drag and drop image file\r\n\r\n\r\n(Press F1 for help)";
this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// pnlResult
//
this.pnlResult.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)));
this.pnlResult.BackColor = System.Drawing.SystemColors.Control;
this.pnlResult.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.pnlResult.Controls.Add(this.pboxResult);
this.pnlResult.Location = new System.Drawing.Point(640, 16);
this.pnlResult.Name = "pnlResult";
this.pnlResult.Size = new System.Drawing.Size(610, 563);
this.pnlResult.TabIndex = 7;
//
// pboxResult
//
this.pboxResult.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.pboxResult.BackColor = System.Drawing.SystemColors.Control;
this.pboxResult.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom;
this.pboxResult.Location = new System.Drawing.Point(36, 352);
this.pboxResult.Name = "pboxResult";
this.pboxResult.Size = new System.Drawing.Size(598, 551);
this.pboxResult.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
this.pboxResult.TabIndex = 1;
this.pboxResult.TabStop = false;
this.pboxResult.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pboxResult_MouseDown);
//
// btnSave
//
this.btnSave.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.btnSave.Location = new System.Drawing.Point(1151, 709);
this.btnSave.Name = "btnSave";
this.btnSave.Size = new System.Drawing.Size(99, 38);
this.btnSave.TabIndex = 8;
this.btnSave.Text = "Save";
this.btnSave.UseVisualStyleBackColor = true;
this.btnSave.Click += new System.EventHandler(this.btnSave_Click);
//
// rbtnCuAl
//
this.rbtnCuAl.AutoSize = true;
this.rbtnCuAl.Checked = true;
this.rbtnCuAl.Location = new System.Drawing.Point(100, 584);
this.rbtnCuAl.Name = "rbtnCuAl";
this.rbtnCuAl.Size = new System.Drawing.Size(50, 17);
this.rbtnCuAl.TabIndex = 9;
this.rbtnCuAl.TabStop = true;
this.rbtnCuAl.Text = "Cu-Al";
this.rbtnCuAl.UseVisualStyleBackColor = true;
this.rbtnCuAl.CheckedChanged += new System.EventHandler(this.rbtn_CheckedChanged);
//
// rbtnAuAl
//
this.rbtnAuAl.AutoSize = true;
this.rbtnAuAl.Location = new System.Drawing.Point(169, 584);
this.rbtnAuAl.Name = "rbtnAuAl";
this.rbtnAuAl.Size = new System.Drawing.Size(50, 17);
this.rbtnAuAl.TabIndex = 10;
this.rbtnAuAl.Text = "Au-Al";
this.rbtnAuAl.UseVisualStyleBackColor = true;
//
// label3
//
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(11, 586);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(69, 13);
this.label3.TabIndex = 11;
this.label3.Text = "Intermetallic :";
//
// cboxOriginalInBG
//
this.cboxOriginalInBG.AutoSize = true;
this.cboxOriginalInBG.Checked = true;
this.cboxOriginalInBG.CheckState = System.Windows.Forms.CheckState.Checked;
this.cboxOriginalInBG.Location = new System.Drawing.Point(640, 585);
this.cboxOriginalInBG.Name = "cboxOriginalInBG";
this.cboxOriginalInBG.Size = new System.Drawing.Size(132, 17);
this.cboxOriginalInBG.TabIndex = 12;
this.cboxOriginalInBG.Text = "Original in background";
this.cboxOriginalInBG.UseVisualStyleBackColor = true;
this.cboxOriginalInBG.CheckedChanged += new System.EventHandler(this.cboxOriginalInBG_CheckedChanged);
//
// lblSavedAs
//
this.lblSavedAs.AutoSize = true;
this.lblSavedAs.Location = new System.Drawing.Point(1186, 586);
this.lblSavedAs.Name = "lblSavedAs";
this.lblSavedAs.Size = new System.Drawing.Size(64, 13);
this.lblSavedAs.TabIndex = 13;
this.lblSavedAs.Text = "Saved as ...";
//
// lblBuild
//
this.lblBuild.AutoSize = true;
this.lblBuild.Font = new System.Drawing.Font("Microsoft Sans Serif", 6.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lblBuild.Location = new System.Drawing.Point(148, 283);
this.lblBuild.Name = "lblBuild";
this.lblBuild.Size = new System.Drawing.Size(71, 12);
this.lblBuild.TabIndex = 2;
this.lblBuild.Text = "GoldenEye build";
//
// pnlHelp
//
this.pnlHelp.Controls.Add(this.lblSource);
this.pnlHelp.Controls.Add(this.btnCloseHelp);
this.pnlHelp.Controls.Add(this.lblHelp);
this.pnlHelp.Controls.Add(this.label6);
this.pnlHelp.Controls.Add(this.pictureBox1);
this.pnlHelp.Controls.Add(this.label5);
this.pnlHelp.Controls.Add(this.lblBuild);
this.pnlHelp.Location = new System.Drawing.Point(1231, 675);
this.pnlHelp.Name = "pnlHelp";
this.pnlHelp.Size = new System.Drawing.Size(1264, 696);
this.pnlHelp.TabIndex = 15;
this.pnlHelp.Visible = false;
//
// lblSource
//
this.lblSource.AutoSize = true;
this.lblSource.Location = new System.Drawing.Point(310, 369);
this.lblSource.Name = "lblSource";
this.lblSource.Size = new System.Drawing.Size(41, 13);
this.lblSource.TabIndex = 11;
this.lblSource.Text = "Source";
//
// btnCloseHelp
//
this.btnCloseHelp.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.btnCloseHelp.Location = new System.Drawing.Point(150, 428);
this.btnCloseHelp.Name = "btnCloseHelp";
this.btnCloseHelp.Size = new System.Drawing.Size(99, 38);
this.btnCloseHelp.TabIndex = 9;
this.btnCloseHelp.Text = "Close";
this.btnCloseHelp.UseVisualStyleBackColor = true;
this.btnCloseHelp.Click += new System.EventHandler(this.btnCloseHelp_Click);
//
// lblHelp
//
this.lblHelp.AutoSize = true;
this.lblHelp.Location = new System.Drawing.Point(310, 236);
this.lblHelp.Name = "lblHelp";
this.lblHelp.Size = new System.Drawing.Size(522, 91);
this.lblHelp.TabIndex = 10;
this.lblHelp.Text = resources.GetString("lblHelp.Text");
//
// label6
//
this.label6.AutoSize = true;
this.label6.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label6.Location = new System.Drawing.Point(309, 205);
this.label6.Name = "label6";
this.label6.Size = new System.Drawing.Size(92, 20);
this.label6.TabIndex = 5;
this.label6.Text = "Instructions";
//
// pictureBox1
//
this.pictureBox1.Image = global::GoldenEye.Properties.Resources.icon_goldeneye;
this.pictureBox1.Location = new System.Drawing.Point(150, 150);
this.pictureBox1.Name = "pictureBox1";
this.pictureBox1.Size = new System.Drawing.Size(130, 130);
this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
this.pictureBox1.TabIndex = 4;
this.pictureBox1.TabStop = false;
this.pictureBox1.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.pictureBox1_MouseDoubleClick);
//
// label5
//
this.label5.AutoSize = true;
this.label5.Font = new System.Drawing.Font("Microsoft Sans Serif", 26.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label5.Location = new System.Drawing.Point(303, 145);
this.label5.Name = "label5";
this.label5.Size = new System.Drawing.Size(188, 39);
this.label5.TabIndex = 3;
this.label5.Text = "GoldenEye";
//
// pboxHist
//
this.pboxHist.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.pboxHist.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.pboxHist.Location = new System.Drawing.Point(14, 655);
this.pboxHist.Name = "pboxHist";
this.pboxHist.Size = new System.Drawing.Size(607, 92);
this.pboxHist.TabIndex = 3;
this.pboxHist.TabStop = false;
this.pboxHist.Paint += new System.Windows.Forms.PaintEventHandler(this.pboxHist_Paint);
this.pboxHist.MouseClick += new System.Windows.Forms.MouseEventHandler(this.pboxHist_MouseClick);
//
// GoldenEye
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(1264, 762);
this.Controls.Add(this.btnSave);
this.Controls.Add(this.pnlHelp);
this.Controls.Add(this.lblSavedAs);
this.Controls.Add(this.cboxOriginalInBG);
this.Controls.Add(this.label3);
this.Controls.Add(this.rbtnAuAl);
this.Controls.Add(this.rbtnCuAl);
this.Controls.Add(this.pnlResult);
this.Controls.Add(this.pnlOriginal);
this.Controls.Add(this.lblPercentAbove);
this.Controls.Add(this.label1);
this.Controls.Add(this.pboxHist);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.MaximizeBox = false;
this.Name = "GoldenEye";
this.Text = "GoldenEye";
this.Load += new System.EventHandler(this.GoldenEye_Load);
this.pnlOriginal.ResumeLayout(false);
this.pnlOriginal.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.pboxOriginal)).EndInit();
this.pnlResult.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.pboxResult)).EndInit();
this.pnlHelp.ResumeLayout(false);
this.pnlHelp.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.pboxHist)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.PictureBox pboxOriginal;
private System.Windows.Forms.PictureBox pboxResult;
private System.Windows.Forms.PictureBox pboxHist;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label lblPercentAbove;
private System.Windows.Forms.Panel pnlOriginal;
private System.Windows.Forms.Panel pnlResult;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Button btnSave;
private System.Windows.Forms.RadioButton rbtnCuAl;
private System.Windows.Forms.RadioButton rbtnAuAl;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.CheckBox cboxOriginalInBG;
private System.Windows.Forms.SaveFileDialog sfd;
private System.Windows.Forms.Label lblSavedAs;
private System.Windows.Forms.Label lblBuild;
private System.Windows.Forms.Panel pnlHelp;
private System.Windows.Forms.Label label5;
private System.Windows.Forms.PictureBox pictureBox1;
private System.Windows.Forms.Label label6;
private System.Windows.Forms.Button btnCloseHelp;
private System.Windows.Forms.Label lblHelp;
private System.Windows.Forms.Label lblSource;
}
}

View File

@@ -0,0 +1,780 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using GlobalScope;
namespace GoldenEye
{
public partial class GoldenEye : Form
{
public GoldenEye()
{
InitializeComponent();
}
Image _ImgImported;
Point _DragStart = new Point(0, 0); // Point on screen
Boolean _IsLeftMouseDrag = false;
String _Filename;
Double _Percentage;
private Boolean _CalledByUpdater = false;
private String _FileFromCommandLine = "";
Color _SelectionColor = Color.OrangeRed;
Color _SelectingColor = Color.Yellow;
Color _ColorThresholdBar = Color.Yellow;
Color _ColorIn = Color.Lime;
Color _ColorOut = Color.Red;
Color _ColorBackColor = Color.Black;
Color _ColorAboveThreshold;
Color _ColorBelowThreshold;
Selection _Selection;
Int32 _Threshold = 0;
Int32[,] _GrayscaleValues;
Int32[] _Occurences;
private void GoldenEye_Load(object sender, EventArgs e)
{
// Center screen
this.Location = new Point((int)Math.Round((Screen.PrimaryScreen.Bounds.Width - this.Size.Width) / 2.0), (int)Math.Round((Screen.PrimaryScreen.Bounds.Height - this.Size.Height) / 2.0));
// Hide text
lblPercentAbove.Text = "";
lblSavedAs.Text = "";
// Preset colors
_ColorAboveThreshold = _ColorIn;
_ColorBelowThreshold = _ColorOut;
// Running locally?
System.Reflection.Assembly ass = System.Reflection.Assembly.GetEntryAssembly();
string exe = System.IO.Path.GetFullPath(ass.Location);
if (exe.ToLower().Contains("silicium") || !exe.ToLower().Contains("c:"))
{
if (exe.ToLower().Contains("debug"))
{
// Globals.PathToServerVersion = @"\\silicium\rel group\EMPLOYEES\WIM\Software\VrijgaveSystemen\VrijgaveSystemen\bin\Debug";
}
else
{
MessageBox.Show("You can only run " + Globals.SoftwareDescription + " locally!", Globals.SoftwareDescription, MessageBoxButtons.OK, MessageBoxIcon.Error);
Application.Exit();
}
}
// Register usage
Globals.RegisterUser(Globals.SoftwareDescription + " (v" + Globals.BuildVersion + ")");
#region Check for availability of update for Updater
String updaterPathServer = Globals.PathToServerVersion + "\\" + Globals.UpdaterExeFile;
String updaterPathLocal = Globals.CurrentDir + "\\" + Globals.UpdaterExeFile;
if (File.Exists(updaterPathServer))
{
FileInfo infoServer = new FileInfo(updaterPathServer);
FileInfo infoLocal = new FileInfo(updaterPathLocal);
// Update if required
if (infoLocal.LastWriteTimeUtc < infoServer.LastWriteTimeUtc)
{
try
{
File.Copy(updaterPathServer, updaterPathLocal, true);
System.Threading.Thread.Sleep(1000);
}
catch (Exception ex)
{
MessageBox.Show("A newer version of " + Globals.UpdaterModuleDescription + " was found on the server, but automatic update could not be executed. Please try again or update manually!\n\n" + ex.Message, "Version", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
else
{
MessageBox.Show("Server could not be accessed to check for version of the Updater! Please try again or update manually if necessary!", "Version", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
#endregion Check for availability of update for Updater
#region Check for availability of update for software
if (File.Exists(Globals.PathToServerVersion + "\\" + Globals.FileNameOfSoftware))
{
FileInfo infoServer = new FileInfo(Globals.PathToServerVersion + "\\" + Globals.FileNameOfSoftware);
System.Reflection.Assembly a = System.Reflection.Assembly.GetEntryAssembly();
string currentExe = System.IO.Path.GetFullPath(a.Location);
FileInfo infoCurrent = new FileInfo(currentExe);
// Update if required and if program is not called by updater
if (infoCurrent.LastWriteTimeUtc < infoServer.LastWriteTimeUtc)
{
if (_CalledByUpdater)
{
MessageBox.Show("A newer version was found on the server, but automatic update was already executed. Please try again or update manually if necessary!", "Version", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
else
{
try
{
string basedir = System.IO.Path.GetDirectoryName(a.Location);
string command = basedir + "\\" + Globals.UpdaterExeFile;
System.Diagnostics.Process.Start(command, Globals.LegalUpdateKeyWord + Globals.SpaceOut(_FileFromCommandLine));
Application.Exit();
}
catch
{
MessageBox.Show("A newer version was found on the server, but automatic update could not be executed. Please try again or update manually!", "Version", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}
#endregion Check for availability of update for software
}
private void pbox_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
Point curr = ((Control)sender).PointToScreen(new Point(e.X, e.Y));
_DragStart = new Point(curr.X, curr.Y);
_IsLeftMouseDrag = true;
// Relative to pbox
_DragStart = new Point(e.X, e.Y);
}
if (e.Button == MouseButtons.Right)
ColorPicker(new Point(e.X, e.Y));
}
private void pboxResult_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
if (_Threshold < 0)
ColorPicker(new Point(e.X, e.Y));
}
private void ColorPicker(Point P)
{
if (_Selection == null)
return;
Point pp = CanvasToImg(P);
if (_Selection.IsInEllipse(pp))
{
int x1 = Math.Max(0, pp.X - 3);
int x2 = Math.Min( pp.X + 3, _GrayscaleValues.GetLength(0));
int y1 = Math.Max(0,pp.Y - 3);
int y2 = Math.Min(pp.Y + 3, _GrayscaleValues.GetLength(1));
int n = 0;
int sum = 0;
for (int x = x1; x <= x2; x++)
{
for (int y = y1; y <= y2; y++)
{
sum += _GrayscaleValues[pp.X, pp.Y];
n++;
}
}
_Threshold = (int)Math.Round((double)sum / (double)n, 0);
Perform();
}
}
private void pbox_MouseUp(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left && _IsLeftMouseDrag)
{
_IsLeftMouseDrag = false;
// Remove rectangle from pbox
pboxOriginal.Refresh();
// Area has no width or has no height
if (_DragStart.X == e.X || _DragStart.Y == e.Y)
return; // No drag occured
this.Cursor = Cursors.WaitCursor;
// Create Selection
Point curr = ((Control)sender).PointToClient(new Point(Control.MousePosition.X, Control.MousePosition.Y));
Point currImg = CanvasToImg(curr);
Point dragStartImg = CanvasToImg(_DragStart);
int dx = dragStartImg.X - currImg.X;
int dy = dragStartImg.Y - currImg.Y;
int a = (int)Math.Abs(Math.Round(Math.Sqrt(2) * dx));
int b = (int)Math.Abs(Math.Round(Math.Sqrt(2) * dy));
int leftX = dragStartImg.X - a;
int topY = dragStartImg.Y - b;
int width = 2 * a;
int height = 2 * b;
Rectangle r = new Rectangle(leftX, topY, width, height);
_Selection = new Selection(r);
_Threshold = -1;
lblPercentAbove.Text = "";
_GrayscaleValues = GrayScaleValues();
_Occurences = Occurences();
DrawSelection();
DrawHistogram();
this.Cursor = Cursors.Default;
}
}
private void pbox_Paint(object sender, PaintEventArgs e)
{
if (_IsLeftMouseDrag)
{
Point curr = ((Control)sender).PointToClient(new Point(Control.MousePosition.X, Control.MousePosition.Y));
Rectangle r;
#region Create r
int leftX, width;
int topY, height;
double dx = _DragStart.X - curr.X;
double dy = _DragStart.Y - curr.Y;
int a = (int)Math.Round(Math.Sqrt(2) * dx);
int b = (int)Math.Round(Math.Sqrt(2) * dy);
leftX = _DragStart.X - a;
topY = _DragStart.Y - b;
width = 2 * a;
height = 2 * b;
r = new Rectangle(leftX, topY, width, height);
#endregion
Pen pen = new Pen(_SelectingColor, 1);
pen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dash;
e.Graphics.DrawEllipse(pen, r);
}
}
private void pbox_MouseMove(object sender, MouseEventArgs e)
{
if (_IsLeftMouseDrag)
pboxOriginal.Refresh();
}
private void DrawSelection()
{
pboxOriginal.Image = (Image)_ImgImported.Clone();
#warning Error here with indexed pixels
Graphics graphicsO = Graphics.FromImage(pboxOriginal.Image);
int t = (int)Math.Ceiling((float)_ImgImported.Width / (float)pboxOriginal.Width);
Pen pen = new Pen(_SelectionColor, t);
pen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dash;
graphicsO.DrawEllipse(pen, _Selection.R);
Brush brush = new SolidBrush(_SelectionColor);
Rectangle center = new Rectangle(_Selection.Center.X - t * 2, _Selection.Center.Y - t * 2, t * 4, t * 4);
graphicsO.FillEllipse(brush, center);
pboxOriginal.Refresh();
graphicsO.Dispose();
Bitmap bmp = new Bitmap(_ImgImported.Width, _ImgImported.Height);
Graphics graphicsR = Graphics.FromImage(bmp);
graphicsR.Clear(pnlResult.BackColor);
TextureBrush tBrush = new TextureBrush(_ImgImported);
graphicsR.FillEllipse(tBrush, _Selection.R);
pboxResult.Image = bmp;
lblSavedAs.Text = "";
graphicsR.Dispose();
}
// Return array with size of image with grayscale values.
// Only convert selected region surrounded by margin.
private int[,] GrayScaleValues()
{
// When converting from RGB to grayscale, it is said that specific weights to channels R, G, and B ought to be applied.
// These weights are: 0.2989, 0.5870, 0.1140.
int[,] r = new int[_ImgImported.Width, _ImgImported.Height];
int margin = 20;
Bitmap bmp = new Bitmap(_ImgImported);
int x1 = Math.Max(0, _Selection.x1 - margin);
int x2 = Math.Min(_Selection.x2 + margin, bmp.Width);
int y1 = Math.Max(0, _Selection.y1 - margin);
int y2 = Math.Min(_Selection.y2 + margin, bmp.Height);
List<int> occGray = new List<int>();
List<int> occR = new List<int>();
List<int> occG = new List<int>();
List<int> occB = new List<int>();
for (int x = x1; x < x2; x++)
{
for (int y = y1; y < y2; y++)
{
Color c = bmp.GetPixel(x, y);
int v = (int)Math.Floor(0.2989 * c.R + 0.5870 * c.G + 0.1140 * c.B);
r[x, y] = v;
//if(!occR.Contains(c.R))
// occR.Add(c.R);
//if (!occG.Contains(c.G))
// occG.Add(c.G);
//if (!occB.Contains(c.B))
// occB.Add(c.B);
//if (!occGray.Contains(v))
// occGray.Add(v);
}
}
return r;
}
private Int32[] Occurences()
{
int[] occurences = new Int32[256];
// Occurrence of gray pixel value in selection
int x1 = Math.Max(0, _Selection.x1);
int x2 = Math.Min(_Selection.x2, _GrayscaleValues.GetLength(0));
int y1 = Math.Max(0, _Selection.y1);
int y2 = Math.Min(_Selection.y2, _GrayscaleValues.GetLength(1));
for (int x = x1; x < x2; x++)
{
for (int y = y1; y < y2; y++)
{
if (_Selection.IsInEllipse(new Point(x, y)))
{
// int pix = _GrayscaleValues[x, y];
// occurences[pix]++;
occurences[_GrayscaleValues[x, y]]++;
}
}
}
return occurences;
}
private void DrawHistogram()
{
Bitmap bmp = new Bitmap(pboxHist.Width, pboxHist.Height);
Graphics g = Graphics.FromImage(bmp);
g.Clear(Color.White);
float f = (float)bmp.Height / (float)_Occurences.Max();
for (int i = 255; i >= 0; i--)
{
float xx1 = i * ((float)bmp.Width / 256);
float xx2 = (i + 1) * ((float)bmp.Width / 256);
float v = (float)bmp.Height - (float)_Occurences[i] * f;
RectangleF rect = new RectangleF(xx1, v, xx2 - xx1, bmp.Height);
// Background
Brush b = new SolidBrush(Color.FromArgb(i, i, i));
g.FillRectangle(b, new RectangleF(xx1, 0, xx2 - xx1, bmp.Height));
// Profile
Brush profileBrush;
if (_Threshold < 1)
profileBrush = new SolidBrush(_ColorBelowThreshold);
else if (i > _Threshold)
profileBrush = new SolidBrush(_ColorAboveThreshold);
else
profileBrush = new SolidBrush(_ColorBelowThreshold);
g.FillRectangle(profileBrush, rect);
}
pboxHist.Image = bmp;
}
private void pboxHist_MouseClick(object sender, MouseEventArgs e)
{
if (_Selection == null)
return;
this.Cursor = Cursors.WaitCursor;
_Threshold = (int)Math.Round((double)e.X / (double)pboxHist.Width * 256);
Perform();
this.Cursor = Cursors.Default;
}
private void Perform()
{
pboxHist.Refresh();
_Percentage = Math.Round(ApplyThreshold(), 1);
if (rbtnCuAl.Checked)
lblPercentAbove.Text = string.Format("Cu-Al: IMC {0:0.0}%", _Percentage);
else
lblPercentAbove.Text = string.Format("Au-Al: IMC {0:0.0}%", 100 - _Percentage);
DrawHistogram();
}
private Point CanvasToImg(Point P)
{
double scalingX = (double)pboxOriginal.Width / (double)_ImgImported.Width;
double scalingY = (double)pboxOriginal.Height / (double)_ImgImported.Height;
int x = (int)Math.Round(P.X / scalingX);
int y = (int)Math.Round(P.Y / scalingY);
return new Point(x, y);
}
private Point ImgToCanvas(Point P)
{
double scalingX = (double)pboxOriginal.Width / (double)_ImgImported.Width;
double scalingY = (double)pboxOriginal.Height / (double)_ImgImported.Height;
int x = (int)Math.Round(P.X * scalingX);
int y = (int)Math.Round(P.Y * scalingY);
return new Point(x, y);
}
private void pboxHist_Paint(object sender, PaintEventArgs e)
{
if (_Threshold > 0)
{
float x = (float)pboxHist.Width / 256 * (float)_Threshold;
PointF p1 = new PointF(x, 0);
PointF p2 = new PointF(x, pboxHist.Height);
Pen pen = new Pen(_ColorThresholdBar, 2);
e.Graphics.DrawLine(pen, p1, p2);
}
}
private Double ApplyThreshold()
{
int x1 = Math.Max(0, _Selection.x1);
int x2 = Math.Min(_Selection.x2, _GrayscaleValues.GetLength(0));
int y1 = Math.Max(0, _Selection.y1);
int y2 = Math.Min(_Selection.y2, _GrayscaleValues.GetLength(1));
int total = 0;
int above = 0;
Bitmap bmp = new Bitmap(_ImgImported);
Graphics g = Graphics.FromImage(bmp);
g.Clear(_ColorBelowThreshold);
double cX = (double)_Selection.Center.X;
double cY = (double)_Selection.Center.Y;
double a = Math.Pow(_Selection.Width / 2, 2);
double b = Math.Pow(_Selection.Height / 2, 2);
for (int x = x1; x < x2; x++)
{
for (int y = y1; y < y2; y++)
{
if (_Selection.IsInEllipse(new Point(x, y)))
{
total++;
if (_GrayscaleValues[x, y] > _Threshold)
{
bmp.SetPixel(x, y, _ColorAboveThreshold);
above++;
}
}
}
}
pboxResult.Image = bmp;
Bitmap bmpR;
Graphics graphicsR;
if (cboxOriginalInBG.Checked)
{
bmpR = new Bitmap(_ImgImported);
graphicsR = Graphics.FromImage(bmpR);
}
else
{
bmpR = new Bitmap(_ImgImported.Width, _ImgImported.Height);
graphicsR = Graphics.FromImage(bmpR);
graphicsR.Clear(_ColorBackColor);
}
TextureBrush tBrush = new TextureBrush(bmp);
graphicsR.FillEllipse(tBrush, _Selection.R);
pboxResult.Image = bmpR;
lblSavedAs.Text = "";
graphicsR.Dispose();
return 100 * (double)above / (double)total;
}
private void pnlOriginal_DragDrop(object sender, DragEventArgs e)
{
string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
try
{
// On 12 Nov 2015 Niels Keupink reported an unhandeld exception while selection a region.
// System.Exception: A Graphics object cannot be created from an image that has an indexed pixel format.
// Origninal code:
// _ImgImported = Image.FromFile(files[0]);
// was replaced by:
Bitmap bm = (Bitmap)System.Drawing.Image.FromFile(files[0], true);
Bitmap tmp = new Bitmap(bm.Width, bm.Height);
Graphics grPhoto = Graphics.FromImage(tmp);
grPhoto.DrawImage(bm, new Rectangle(0, 0, tmp.Width, tmp.Height), 0, 0, tmp.Width, tmp.Height, GraphicsUnit.Pixel);
grPhoto.Dispose();
_ImgImported = (Image)tmp;
_Filename = files[0];
}
catch (Exception ex)
{
MessageBox.Show("Could not load image file!\n\n" + ex.Message, "Select image", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
// Reset values
_Threshold = -1;
_Occurences = null;
_Selection = null;
_GrayscaleValues = null;
pboxOriginal.Image = null;
lblSavedAs.Text = "";
pboxResult.Image = null;
pboxHist.Image = null;
// Show image
pboxOriginal.Image = _ImgImported;
// Scale picture boxes to image
pboxOriginal.Width = 600;
pboxOriginal.Height = 553;
double scalingX = (double)pboxOriginal.Width / (double)_ImgImported.Width;
double scalingY = (double)pboxOriginal.Height / (double)_ImgImported.Height;
int h = pboxOriginal.Height;
int w = pboxOriginal.Width;
if (scalingY > scalingX)
h = (int)Math.Floor((double)_ImgImported.Height * scalingX);
else
w = (int)Math.Floor((double)_ImgImported.Width * scalingY);
pboxOriginal.Width = w;
pboxOriginal.Height = h;
pboxResult.Width = w;
pboxResult.Height = h;
pboxOriginal.Visible = true;
// Center pbox
int x = (int)Math.Floor(((double)pnlOriginal.Width - (double)pboxOriginal.Width) / 2);
int y = (int)Math.Floor(((double)pnlOriginal.Height - (double)pboxOriginal.Height) / 2);
pboxOriginal.Location = new Point(x, y);
pboxResult.Location = new Point(x, y);
// pnlOriginal.AllowDrop = false;
}
private void pnlOriginal_DragEnter(object sender, DragEventArgs e)
{
// make sure they're actually dropping files (not text or anything else)
if (e.Data.GetDataPresent(DataFormats.FileDrop, false))
{
string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
if (files.Length == 1)
{
string ext = new FileInfo(files[0]).Extension.ToLower();
if (ext == ".jpg" || ext == ".bmp")
e.Effect = DragDropEffects.All;
}
}
else
e.Effect = DragDropEffects.None;
}
private void rbtn_CheckedChanged(object sender, EventArgs e)
{
if (rbtnCuAl.Checked)
{
_ColorAboveThreshold = _ColorIn;
_ColorBelowThreshold = _ColorOut;
}
else
{
_ColorAboveThreshold = _ColorOut;
_ColorBelowThreshold = _ColorIn;
}
if (_Selection == null || _Threshold < 0)
return;
this.Cursor = Cursors.WaitCursor;
Perform();
this.Cursor = Cursors.Default;
}
private void cboxOriginalInBG_CheckedChanged(object sender, EventArgs e)
{
if (_Selection == null || _Threshold < 0)
return;
this.Cursor = Cursors.WaitCursor;
Perform();
this.Cursor = Cursors.Default;
}
private void btnSave_Click(object sender, EventArgs e)
{
if (_Selection == null)
return;
if (_Threshold < 0)
return;
FileInfo fi = new FileInfo(_Filename);
string path = fi.DirectoryName;
string ext = fi.Extension;
string file = fi.Name.Replace(fi.Extension, "");
string resultFile = path + "\\" + file + string.Format("_C{0:00}", _Percentage) + ext;
try
{
if (File.Exists(resultFile))
{
sfd.FileName = new FileInfo(resultFile).Name;
sfd.InitialDirectory = path;
sfd.Filter = String.Format("{0}|*{1}", ext.Replace(".", "").ToUpper(), ext);
sfd.Title = "Save";
DialogResult dr = sfd.ShowDialog();
if (dr != DialogResult.OK)
return;
resultFile = sfd.FileName;
}
pboxResult.Image.Save(resultFile, _ImgImported.RawFormat);
lblSavedAs.Text = String.Format("Saved as {0}", new FileInfo(resultFile).Name);
lblSavedAs.Location = new Point(pnlResult.Width + pnlResult.Location.X - lblSavedAs.Width, lblSavedAs.Location.Y);
}
catch (Exception ex)
{
MessageBox.Show("Could not save image file!\n\n" + ex.Message, "Save", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
}
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == Keys.F1)
{
lblSource.Text = "(Release on server folder " + Globals.PathToServerVersion + ")";
// Build info
System.Reflection.Assembly ass = System.Reflection.Assembly.GetEntryAssembly();
string exe = Path.GetFullPath(ass.Location);
DateTime d = new FileInfo(exe).LastWriteTimeUtc;
lblBuild.Text = String.Format("GoldenEye\nMaser Engineering b.v.\nW.D.T. Booij\nBuild v{0:0000}{1:00}{2:00}", d.Year, d.Month, d.Day);
lblHelp.BackColor = pnlHelp.BackColor;
pnlHelp.Dock = DockStyle.Fill;
pnlHelp.Visible = true;
pnlHelp.BringToFront();
return true; // indicate that you handled this keystroke
}
// Call the base class
return base.ProcessCmdKey(ref msg, keyData);
}
private void btnCloseHelp_Click(object sender, EventArgs e)
{
pnlHelp.Visible = false;
}
private void pictureBox1_MouseDoubleClick(object sender, MouseEventArgs e)
{
try
{
System.Diagnostics.Process.Start(@"\\silicium\projects\2015\P151091\sub2");
}
catch (Exception ex)
{
MessageBox.Show("Could not open folder!\n\n" + ex.Message, "Source folder", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
}
}
}

View File

@@ -0,0 +1,100 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
<ProductVersion>8.0.30703</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{A924B38F-ECAC-4726-A5F0-7FA8F80374BB}</ProjectGuid>
<OutputType>WinExe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>GoldenEye</RootNamespace>
<AssemblyName>GoldenEye</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<TargetFrameworkProfile>Client</TargetFrameworkProfile>
<FileAlignment>512</FileAlignment>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
<PlatformTarget>x86</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
<PlatformTarget>x86</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup>
<ApplicationIcon>icon_goldeneye.ico</ApplicationIcon>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="..\Lib\Globals.cs">
<Link>Globals.cs</Link>
</Compile>
<Compile Include="GoldenEye.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="GoldenEye.Designer.cs">
<DependentUpon>GoldenEye.cs</DependentUpon>
</Compile>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Selection.cs" />
<EmbeddedResource Include="GoldenEye.resx">
<DependentUpon>GoldenEye.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
<DesignTime>True</DesignTime>
</Compile>
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<Content Include="icon_goldeneye.ico" />
<None Include="Resources\icon_goldeneye.bmp" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View File

@@ -0,0 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
</Project>

View File

@@ -0,0 +1,635 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="sfd.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<data name="lblHelp.Text" xml:space="preserve">
<value>Drag and drop an image file onto the left upper pane.
Click-and-drag in the image to select an area of interest. Your center will be marked with a dot for reference.
Use the color picker (right mouse click in either image) to select a threshold value or left click in the histogram.
Press Save to save the resulting image in the same folder as the original with '_C%%' added to the file name. </value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
</value>
</data>
</root>

View File

@@ -0,0 +1,21 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
namespace GoldenEye
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new GoldenEye());
}
}
}

View File

@@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("Bond_007")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Microsoft")]
[assembly: AssemblyProduct("Bond_007")]
[assembly: AssemblyCopyright("Copyright © Microsoft 2015")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("28ef9737-c0d9-46e4-9bdb-534ebe7445b6")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -0,0 +1,73 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.18444
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace GoldenEye.Properties {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("GoldenEye.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap icon_goldeneye {
get {
object obj = ResourceManager.GetObject("icon_goldeneye", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
}
}

View File

@@ -0,0 +1,124 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="icon_goldeneye" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icon_goldeneye.bmp;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root>

View File

@@ -0,0 +1,26 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.18444
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace GoldenEye.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default {
get {
return defaultInstance;
}
}
}
}

View File

@@ -0,0 +1,7 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>

Binary file not shown.

After

Width:  |  Height:  |  Size: 446 KiB

View File

@@ -0,0 +1,65 @@

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
namespace GoldenEye
{
public class Selection
{
public Selection(Rectangle R)
{
_R = R;
aa = Math.Pow( ((double)_R.Left - (double)_R.Right)/2 , 2);
bb = Math.Pow(((double)_R.Top - (double)_R.Bottom) / 2, 2);
cX = Math.Round(((double)_R.Left + (double)_R.Right) / 2);
cY = Math.Round(((double)_R.Top + (double)_R.Bottom) / 2);
}
private double aa;
private double bb;
private double cX;
private double cY;
private Rectangle _R; public Rectangle R { get { return _R; } }
public Double Width { get { return (double)_R.Width; } }
public Double Height { get { return (double)_R.Height; } }
public Int32 y1 { get { return _R.Top; } }
public Int32 y2 { get { return _R.Bottom; } }
public Int32 x1 { get { return _R.Left; } }
public Int32 x2 { get { return _R.Right; } }
public Point Center
{
get
{
return new Point((int)cX, (int)cY);
}
}
public Boolean IsInEllipse(Point p)
{
double dx = Math.Pow( p.X -cX, 2);
double dy = Math.Pow(p.Y - cY, 2);
double w = dx / aa + dy / bb ;
if (w <= 1)
return true;
else
return false;
}
}
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

View File

@@ -0,0 +1,4 @@
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.0,Profile=Client", FrameworkDisplayName = ".NET Framework 4 Client Profile")]

View File

@@ -0,0 +1 @@
dbc124b58f74e5cea3eb924894e82497d8d95720

View File

@@ -0,0 +1,8 @@
\\silicium\software\MASER software\Source\GoldenEye\GoldenEye\bin\Release\GoldenEye.exe
\\silicium\software\MASER software\Source\GoldenEye\GoldenEye\bin\Release\GoldenEye.pdb
\\silicium\software\MASER software\Source\GoldenEye\GoldenEye\obj\x86\Release\GoldenEye.GoldenEye.resources
\\silicium\software\MASER software\Source\GoldenEye\GoldenEye\obj\x86\Release\GoldenEye.Properties.Resources.resources
\\silicium\software\MASER software\Source\GoldenEye\GoldenEye\obj\x86\Release\GoldenEye.csproj.GenerateResource.Cache
\\silicium\software\MASER software\Source\GoldenEye\GoldenEye\obj\x86\Release\GoldenEye.exe
\\silicium\software\MASER software\Source\GoldenEye\GoldenEye\obj\x86\Release\GoldenEye.pdb
\\silicium\software\MASER software\Source\GoldenEye\GoldenEye\obj\x86\Release\GoldenEye.csprojResolveAssemblyReference.cache

Binary file not shown.

Binary file not shown.

143
GoldenEye/Installer/Installer.Designer.cs generated Normal file
View File

@@ -0,0 +1,143 @@
namespace Installer
{
partial class Installer
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Installer));
this.btnOK = new System.Windows.Forms.Button();
this.txtbFolder = new System.Windows.Forms.TextBox();
this.fbd = new System.Windows.Forms.FolderBrowserDialog();
this.label1 = new System.Windows.Forms.Label();
this.btnBrowse = new System.Windows.Forms.Button();
this.lbox = new System.Windows.Forms.ListBox();
this.SuspendLayout();
//
// btnOK
//
this.btnOK.Location = new System.Drawing.Point(461, 176);
this.btnOK.Name = "btnOK";
this.btnOK.Size = new System.Drawing.Size(75, 23);
this.btnOK.TabIndex = 0;
this.btnOK.Text = "Install";
this.btnOK.UseVisualStyleBackColor = true;
this.btnOK.Click += new System.EventHandler(this.btnOK_Click);
//
// txtbFolder
//
this.txtbFolder.Location = new System.Drawing.Point(55, 113);
this.txtbFolder.Name = "txtbFolder";
this.txtbFolder.ReadOnly = true;
this.txtbFolder.Size = new System.Drawing.Size(400, 20);
this.txtbFolder.TabIndex = 1;
this.txtbFolder.Text = "<PATH>";
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(52, 97);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(86, 13);
this.label1.TabIndex = 2;
this.label1.Text = "Installation folder";
//
// btnBrowse
//
this.btnBrowse.Location = new System.Drawing.Point(461, 111);
this.btnBrowse.Name = "btnBrowse";
this.btnBrowse.Size = new System.Drawing.Size(75, 23);
this.btnBrowse.TabIndex = 3;
this.btnBrowse.Text = "Browse";
this.btnBrowse.UseVisualStyleBackColor = true;
this.btnBrowse.Click += new System.EventHandler(this.btnBrowse_Click);
//
// lbox
//
this.lbox.BackColor = System.Drawing.SystemColors.Control;
this.lbox.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.lbox.FormattingEnabled = true;
this.lbox.Items.AddRange(new object[] {
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"10",
"11",
"12",
"13",
"14",
"15",
"16",
"17",
"18",
"19",
"20",
"21",
"22",
"23"});
this.lbox.Location = new System.Drawing.Point(55, 218);
this.lbox.Name = "lbox";
this.lbox.SelectionMode = System.Windows.Forms.SelectionMode.None;
this.lbox.Size = new System.Drawing.Size(552, 260);
this.lbox.TabIndex = 4;
this.lbox.Visible = false;
//
// Installer
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(588, 297);
this.Controls.Add(this.lbox);
this.Controls.Add(this.btnBrowse);
this.Controls.Add(this.label1);
this.Controls.Add(this.txtbFolder);
this.Controls.Add(this.btnOK);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Name = "Installer";
this.Text = "Vrijgave Systemen";
this.Load += new System.EventHandler(this.Installer_Load);
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Button btnOK;
private System.Windows.Forms.TextBox txtbFolder;
private System.Windows.Forms.FolderBrowserDialog fbd;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Button btnBrowse;
private System.Windows.Forms.ListBox lbox;
}
}

View File

@@ -0,0 +1,236 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using GlobalScope;
using System.IO;
namespace Installer
{
public partial class Installer : Form
{
private List<String> _Messages = new List<string>();
public String FileNameExceptionContent
{
get
{
// Returns part of exec name to scan for and ignore in deleting and copying
System.Reflection.Assembly ass = System.Reflection.Assembly.GetEntryAssembly();
string exe = System.IO.Path.GetFullPath(ass.Location);
string name = new FileInfo(exe).Name;
string ext = new FileInfo(exe).Extension;
name = name.Replace(ext, "");
return name.ToLower();
}
}
public Installer()
{
InitializeComponent();
}
private void Installer_Load(object sender, EventArgs e)
{
this.Text = Globals.SoftwareDescription + " installer";
// Center screen
this.Location = new Point((int)Math.Round((Screen.PrimaryScreen.Bounds.Width - this.Size.Width) / 2.0), (int)Math.Round((Screen.PrimaryScreen.Bounds.Height - this.Size.Height) / 2.0));
// Running locally?
System.Reflection.Assembly ass = System.Reflection.Assembly.GetEntryAssembly();
string exe = System.IO.Path.GetFullPath(ass.Location);
if (!exe.ToLower().Contains(Globals.PathToServerVersion.ToLower()))
{
MessageBox.Show("You can only run " + Globals.SoftwareDescription + " from server!", Globals.SoftwareDescription, MessageBoxButtons.OK, MessageBoxIcon.Error);
Application.Exit();
}
txtbFolder.Text = Globals.PathToPreferredInstall+@"\";
}
private void btnBrowse_Click(object sender, EventArgs e)
{
fbd.RootFolder = Environment.SpecialFolder.Desktop;
DialogResult dr = fbd.ShowDialog();
if (dr != System.Windows.Forms.DialogResult.OK)
return;
txtbFolder.Text = fbd.SelectedPath;
}
private void btnOK_Click(object sender, EventArgs e)
{
string targetFolder = txtbFolder.Text + "\\";
// Exists?
if (!Directory.Exists(targetFolder))
{
DialogResult dr = MessageBox.Show("Folder does not exist!\n\nDo you want to create the folder?", Globals.SoftwareDescription, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
if( dr != System.Windows.Forms.DialogResult.Yes)
return;
try
{
Directory.CreateDirectory(targetFolder);
}
catch
{
MessageBox.Show("Could not create folder!", Globals.SoftwareDescription, MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
}
// Is empty folder?
if (Directory.GetFiles(targetFolder).Length > 0)
{
MessageBox.Show("Installation folder must be empty!", Globals.SoftwareDescription, MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
lbox.Location = new Point(18, 18);
lbox.Visible = true;
// Make fileLists
string[] serverFileList;
if (Directory.Exists(Globals.PathToServerVersion))
serverFileList = Directory.GetFiles(Globals.PathToServerVersion);
else
{
_Messages.Add("Serverpath not accessible!");
UpdateMessages();
return;
}
Boolean ErrorEncountered = false;
// Copy all files except installer
#region Copy to local
foreach (string serverFilePath in serverFileList)
{
if (serverFilePath.ToLower().IndexOf(FileNameExceptionContent) < 0)
{
string targetFilePath = "";
try
{
string name = new FileInfo(serverFilePath).Name;
targetFilePath = targetFolder + name;
File.Copy(serverFilePath, targetFilePath, true);
_Messages.Add(String.Format("Copying : {0}\n", targetFilePath));
}
catch (Exception ex)
{
ErrorEncountered = true;
_Messages.Add(String.Format("Failed to copy : {0}", targetFilePath));
_Messages.Add(String.Format(" [{0}]", ex.Message));
}
UpdateMessages();
}
}
#endregion Copy to local
Globals.RegisterUser(Globals.UpdaterModuleDescription + " (v" + Globals.BuildVersion + ")");
_Messages.Add("User register updated");
UpdateMessages();
#region Create shortcut
try
{
string deskDir = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
string shortcutLocation = Path.Combine(deskDir, Globals.SoftwareDescription + ".lnk");
if (File.Exists(shortcutLocation))
File.Delete(shortcutLocation);
IWshRuntimeLibrary.WshShell shell = new IWshRuntimeLibrary.WshShell();
IWshRuntimeLibrary.IWshShortcut shortcut = (IWshRuntimeLibrary.IWshShortcut)shell.CreateShortcut(shortcutLocation);
shortcut.Description = Globals.SoftwareDescription;
shortcut.IconLocation = targetFolder + Globals.FileNameOfSoftware;
shortcut.TargetPath = targetFolder + Globals.FileNameOfSoftware;
shortcut.Save();
_Messages.Add("Shortcut created");
}
catch (Exception ex)
{
ErrorEncountered = true;
_Messages.Add("Failed to create shortcut :");
_Messages.Add(String.Format(" [{0}]", ex.Message));
}
finally
{
UpdateMessages();
}
#endregion Create shortcut
// Launch
try
{
string f = targetFolder + Globals.FileNameOfSoftware;
System.Diagnostics.Process.Start(f);
}
catch (Exception ex)
{
ErrorEncountered = true;
_Messages.Add(String.Format("Failed to launch {0}", Globals.FileNameOfSoftware));
_Messages.Add(String.Format(" [{0}]", ex.Message));
}
finally
{
if (!ErrorEncountered)
Application.Exit();
}
}
private void UpdateMessages()
{
int stop = _Messages.Count - 1;
int start = (int)Math.Max(stop - 19, 0);
lbox.Items.Clear();
for (int i = start; i <= stop; i++)
lbox.Items.Add(_Messages[i]);
lbox.Refresh();
lbox.ClearSelected();
this.Refresh();
System.Threading.Thread.Sleep(50);
}
}
}

View File

@@ -0,0 +1,110 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
<ProductVersion>8.0.30703</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{FED6E5AC-E14B-4450-8E83-4F33CA720E4C}</ProjectGuid>
<OutputType>WinExe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Installer</RootNamespace>
<AssemblyName>Installer</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<TargetFrameworkProfile>
</TargetFrameworkProfile>
<FileAlignment>512</FileAlignment>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
<PlatformTarget>x86</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
<PlatformTarget>x86</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup>
<ApplicationIcon>icon.ico</ApplicationIcon>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="..\Lib\Globals.cs">
<Link>Globals.cs</Link>
</Compile>
<Compile Include="Installer.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Installer.Designer.cs">
<DependentUpon>Installer.cs</DependentUpon>
</Compile>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<EmbeddedResource Include="Installer.resx">
<DependentUpon>Installer.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
<DesignTime>True</DesignTime>
</Compile>
<None Include="app.config" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<Content Include="icon.ico" />
</ItemGroup>
<ItemGroup>
<COMReference Include="IWshRuntimeLibrary">
<Guid>{F935DC20-1CF0-11D0-ADB9-00C04FD58A0B}</Guid>
<VersionMajor>1</VersionMajor>
<VersionMinor>0</VersionMinor>
<Lcid>0</Lcid>
<WrapperTool>tlbimp</WrapperTool>
<Isolated>False</Isolated>
<EmbedInteropTypes>True</EmbedInteropTypes>
</COMReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View File

@@ -0,0 +1,549 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="fbd.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAkAMDAQAAEABABoBgAAlgAAACAgEAABAAQA6AIAAP4GAAAQEBAAAQAEACgBAADmCQAAMDAAAAEA
CACoDgAADgsAACAgAAABAAgAqAgAALYZAAAQEAAAAQAIAGgFAABeIgAAMDAAAAEAIACoJQAAxicAACAg
AAABACAAqBAAAG5NAAAQEAAAAQAgAGgEAAAWXgAAKAAAADAAAABgAAAAAQAEAAAAAAAABgAAAAAAAAAA
AAAQAAAAEAAAAAAAAAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8A
AAD/AP8A//8AAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUlBSUnBzQ2UAAAAA
AAAAAAAAAAAAAAAQAAAAABQUN1JxcWAAAAAAAAAAAAAAAQUAEAEAEAAgBDVjZXFgAAAAAAAAAAAUJAAA
QAQAAEAUIQcHUnJwAAAAAAAAAAEAEHAAEAIUADBAFAJSdSV3cAAAAAAABwAFBABwQlBDBQQwQlAENDcH
BwAAAAAAQBQAA0EFJQcBQ0NBJQJQFnRzQwAAAAACEAAFBBBgU0FhYXBSUCUGBBYWdwAAAAAFBBQgEgUD
QlJQcGFhYFJQFgcXAAAAAABgAAEFBQFwUQcWE1NDQWEGAAFgcAAAAAAEEkFhIXAXBxQxQ1MRYUJQFCR3
AAAAAAQQBBAQUBYWEDEXExE1ElAAAAEAAAAAAABAcAcBA0ERFxc5OXExYSUgFAQlAAAAAEElBQEHBRMT
ebk5cTMXElAUAAEEIAAAAFJBIBYQExeXm5OTExcTFSFBBAADQAAAUAQwUFAUCXm5g5cTFBE1MUEwAwFA
AAAABhBSATBRc4ubmTOXExFxMTFBBAAhYQAABBYAEFMDE5N5c5iTEXEblzExEAFABAAABwFDQTUVNzEx
k5c3ERMXm5eXABABJAAHBAABEBETNxNTcbiYExl5t5MTFQIEAAAAcFBSU3E3Fxc1OXl7lROTm3FxEwUC
UHAEEAABOTU1JSU3lbg4MTF5NTExNQEAASAAQBQ3FzNTU1NZObebEVMTETeTAxJBQEAABAEBcxdxYXFx
OYl5cxE1Nbc1EFEAAHAAUBYXBTdSVxMDE7V7kXMVN5cSFAYQFCAAAABQN1JWU3EVGYublxUTlzMFAwEE
AHAEEFAldWd3NTExEYOJMTFxOYMSUBIBQAAAAABQdzV2VzFRE3k3MVE5cxFBJQVAMAAABQFzU3d1cTkx
eXN5MTETlTAxUhIWBAAAAAAAdXVnE1NTU3l3EReXMxcXAWVAFgAABQdXV3dxYRc3NTc5NTE5eXE1NxIW
AAAAAABEd3d0Fzd5cXlxMTl5MXFhdWBBQAAAAFB3d2Uhd5eXNRcRFTEzVzVzUlAGcAAAAAdHd3dTE3d3
kxMXExcXMXNXZQQwAAAAAAR3dXNBdxc3MXFxF1NxRxdwcHBHAAAAAAFndlcSU3FxAxMTUxNBMHUlBwFg
AAAAAAZWdXFlNQEUEXERMFAWFSFSUHQAAAAAAABWd3ZTQSUlIRNTUwNQNBR3Z0cAAAAAAAAHR0cWEBAR
FXV1dRUhYWF0dWAAAAAAAAAAdzQAAAEDV3h4dzYUFDR3ZwAAAAAAAAAABAEAEEB0d4iHdUElIGV0cAAA
AAAAAAAAAEAUABABZ3iHdyUABSVgAAAAAAAAAAAAAAAAFABBR1d2UAA0JWUAAAAAAAAAAAAAAAAAAAEA
AGBUBBBBQAAAAAAAAAAAAAAAAAAAAAAAEAEAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////////////8AAP//////+AAAB//////AAAAB/////w
AAAAD////+AAAAAH////gAAAAAP///8AAAAAA////gAAAAAD///8AAAAAAf///wAAAAAB///+AAAAAAP
///wAAAAAA////AAAAAAD///4AAAAAAH///gAAAAAAf//8AAAAAAB///wAAAAAAD///AAAAAAAP//8AA
AAAAA///gAAAAAAD//+AAAAAAAH//4AAAAAAAf//gAAAAAAB//+AAAAAAAH//4AAAAAAAf//gAAAAAAB
//+AAAAAAAP//8AAAAAAA///wAAAAAAD///AAAAAAAP//8AAAAAAB///4AAAAAAH///gAAAAAAf///AA
AAAAD///8AAAAAAP///4AAAAAB////gAAAAAP////AAAAAA////+AAAAAH////8AAAAA/////4AAAAH/
////wAAAB//////wAAAP//////wAAD///////wAA////////8A////////////////8oAAAAIAAAAEAA
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
///wAAAAAA///+AAAAAAB///4AAAAAAH///AAAAAAAf//8AAAAAAA///wAAAAAAD///AAAAAAAP//4AA
AAAAA///gAAAAAAB//+AAAAAAAH//4AAAAAAAf//gAAAAAAB//+AAAAAAAH//4AAAAAAAf//gAAAAAAD
///AAAAAAAP//8AAAAAAA///wAAAAAAD///AAAAAAAf//+AAAAAAB///4AAAAAAH///wAAAAAA////AA
AAAAD///+AAAAAAf///4AAAAAD////wAAAAAP////gAAAAB/////AAAAAP////+AAAAB/////8AAAAf/
////8AAAD//////8AAA///////8AAP////////AP////////////////KAAAACAAAABAAAAAAQAIAAAA
AACABAAAAAAAAAAAAAAAAQAAAAEAAAAAAAAkFRoANRsnAEY0OQApa7oAEhptACU5iQBmV2cAdmVvABky
eQBDNEQAJ0iVABkaRwAXNocANShFACojOABDN1YAIyllACskJwApM2cAOEl4ADQ0VQBTSWYAFCqFAHZZ
WgBHR2oARUp3ACc3dgB5ZpMANDx2ADl5xwAZEhoAEgMaAI95lwA4O2YAQigrABlZyQCLY1YAT4vQAEY0
LAA0Y6oAFCyVACVTpwAoTKYAR3fEABxCkQBhRDsAJRtGACUTIwAUCRoAGkmzADVWpgBmVVwAWHW5ACwk
HgAbCiIAK0R6ACMMIwAaChsAGgMcADsyOABRS00AKVSaABtXtAArHSwAelhKACoyVwAUCiMAJWLHAHhe
aQAkGSwAVEl3ACscMwAkU8YAWUlZACocJAA7KjMAREJcACIiUgAkEywAOSo6ABc+tQCUbWgAJFa8ACQj
SgBKLjcAJmrpABktewBoSEQAhltRADRGhAAUKm4AV1mXAA46mgCKZGQAIhs8ACsTJABiVXgAOGa8ADsz
KgAcESEANCksAGBKWQCYdncAJCpVACsNHQAZJGoACwooACVDgwAcFTwAJ062ACwrSwAhG1MADQMTABkE
IwA4IysAHQoqAAwEGwAxIiIAGzuUACIVPAAbLlsAPCsmAJV0bgA0YpoAGSRjADIiMgBHU4gACQobAENt
rAAWGz0AKiJCAB4jTQA0JCwAMCxUABQ2mgAoLFwAHSxkADQoOwBdUGsAJBo2ACEFHQBOTUwAFSt5ABor
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
QP9VPVj/Z1Ry/3xhef+ScXL/mH1x/3xoZv9PQlb/My1T/ygqXP8vPHb/PVKL/0pakP9JU43/RkqF/0dE
h/9FRY7/MkaK/0ZxvP8YQ6D/DRuB/x0tk/8YNaH/HT6s/xNArf8eWbz/KFm1/yFBlf8zRIP/NEBy/yo/
a/85TnP/RUxp/1VKXv9YQ07/MiAs/yMZKv8zLDf/Oy4n925gUHh/cF4IAAAAAAAAAABfS1QGTTZDYiEF
HO4sEir/PyIy/1AuOv92VmD/jG11/5lzdv+jfXT/iXBq/1pIV/88L0z/NDZY/z1Nef9IY5r/VG6l/1hn
o/9LU5v/O0KK/zIyd/83NYH/L0GP/0hswP8TMZL/Fh99/xgug/8ONY//Hkap/ydXwf8wZsn/NmC2/zNN
mv9DT4r/Skp4/0dFbP9LSmn/VlBm/2FQXf9MMzv/KxUd/yYZJP81Ky7/TD0w2Il8bj+uo5gDAAAAAAAA
AACOfYIBWEFOKScLIb0rESn+Ox0q/2A+Qf+WdG//o4J5/518eP+NdXP/XlNg/zQwUv8rLlj/Ok54/1Bs
of9YdLP/X3Wz/1ZwtP9LbLz/Nlmq/yM2hP8kK37/Kj2T/ydBm/8RJ4D/Iix5/x8ud/8TNX7/LlOd/zVh
r/8oVKH/MEuR/z1Niv9QVYX/WU5z/1xMaP9nV27/ZFRl/1Q/Sf87Iif/JQ8V/yocIf89LyX6Z1RAmpKB
bxcAAAAAAAAAAAAAAAAAAAAAUkFQCzonOXEkCyLtQyIw/3xWU/+mfnX/o354/4xvc/91ZXP/VlBt/zk8
ZP8pN2H/OEx7/1Jgn/9gZa7/Y3C0/1WCxP9Ii9T/J2q+/xpDk/8dMoH/K0Wc/xUuiP8dL37/KS91/yox
c/8rPHv/PFKM/zRSi/8qRX7/PEl+/0tSgP9QTnX/XVBr/29gb/9sXWv/UEFP/zwqNv8zICf/KBge/zIk
Jv9QPzHbf21YT5yJcwYAAAAAAAAAAAAAAAAAAAAAmpedAllLWCsxGCizTCox/IdhV/+edGj/j2tu/3Rd
bv9lWHT/WVR0/zc4Wv8lKk3/P0Rs/1xajv9WU5T/SVSU/0NinP8wWpf/F0SK/xI4gP8aOob/K0+j/x4/
k/8lOYb/KTJ7/y42dP86QXf/Qkl8/zpEdP8xOGb/Nzhj/z8+ZP9PSGr/YVJu/19PY/9KOkr/Py4+/0My
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
AAAP//////wAAD///////4AB/////ygAAAAgAAAAQAAAAAEAIAAAAAAAgBAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE1LTwhBPUUeODM/OzQt
Olc1LTtpOTA+dTw4QXdFREh2TExOdFFRUnRTU1JzUlJScFJSUmpSUlJiUlJSVVNTU0dSUlI2UVFRJFJS
UhNVVVUGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAEYAREFGgwdECA1HQ8iexUK
IrQQCCHUDwUb5BAFHOoSBR7sEQgf6RYPJeMfGivXLCo1xkFBRbROTk+qUlJSolJSUppSUlKNUlJSfVJS
UmdRUVFNUVFRMFJSUhJHR0cCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH1tewokDSREGwshrCUV
KOoaCRv+EQQX/w4EE/8OBBH/DQMS/w0DFP8MAhL/EAcY/xkRIf8ZEB7+FxEf+SckLuxDQkXbUVBR0lNT
U8hSUlK8UlJSqVJSUo1SUlJnU1NTL1BQUAgAAAAAAAAAAAAAAAAAAAAAAAAAAIR6hAFVRVkeMRgvkiIG
H+EmDST8KhUl/iURIf8fDB7/IREZ/yMVG/8kFyD/IhQj/x0PIP8fESH/JRgj/yscIv8oGyP+KBwj/ike
J/o6MTbzUE9O6lJSUuNSUlLXUlJSwlJSUp9SUlJTTk5OEQAAAAAAAAAAAAAAAAAAAAAAAAAAT0FMMyMO
JLUfBR38HQQc/yIKIf8mECL/Lhkn/zUhLf84JC7/PCgz/z0pNv8yIjL/LCI2/zcpOv86Kzj/Nysz/zUo
L/80JSz/Lx8q/ywfJf49Mi/7UExL9lJSUvBSUlLkUlJSyFJSUnJTU1MZAAAAAAAAAAAAAAAAh3l4AVVG
QjYjDyDKGQQf/BwCG/4gBh7/JBEl/yYXK/8nGC3/MSM1/zkqPP9EM0f/OiU6/zgoPf89Ok//SDtA/0U2
O/87Njr/NCwx/zMoLf81Kiz/Nyou/jIeI/46KSf8TkxK9VJSUulSUlLOUlJSeFNTUxoAAAAAAAAAAAAA
AABsWlsgMRsbuR0KGPwcBBv/IAsk/yoVLf8pHjP/Ihw1/ycgQv81KUX/NipD/zYrRf9ANFP/QDtS/zE1
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
///AA///4Af///AP//8=
</value>
</data>
</root>

View File

@@ -0,0 +1,20 @@

Microsoft Visual Studio Solution File, Format Version 11.00
# Visual C# Express 2010
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Installer", "Installer.csproj", "{FED6E5AC-E14B-4450-8E83-4F33CA720E4C}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x86 = Debug|x86
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{FED6E5AC-E14B-4450-8E83-4F33CA720E4C}.Debug|x86.ActiveCfg = Debug|x86
{FED6E5AC-E14B-4450-8E83-4F33CA720E4C}.Debug|x86.Build.0 = Debug|x86
{FED6E5AC-E14B-4450-8E83-4F33CA720E4C}.Release|x86.ActiveCfg = Release|x86
{FED6E5AC-E14B-4450-8E83-4F33CA720E4C}.Release|x86.Build.0 = Release|x86
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

Binary file not shown.

View File

@@ -0,0 +1,21 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
namespace Installer
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Installer());
}
}
}

View File

@@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("Installer")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Microsoft")]
[assembly: AssemblyProduct("Installer")]
[assembly: AssemblyCopyright("Copyright © Microsoft 2015")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("9a29d0dd-fdab-4ed6-a34e-c75fdf961bbc")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -0,0 +1,63 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.18444
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Installer.Properties {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Installer.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
}
}

View File

@@ -0,0 +1,117 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,26 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.18444
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Installer.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default {
get {
return defaultInstance;
}
}
}
}

View File

@@ -0,0 +1,7 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>

View File

@@ -0,0 +1,3 @@
<?xml version="1.0"?>
<configuration>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>

Binary file not shown.

View File

@@ -0,0 +1,3 @@
<?xml version="1.0"?>
<configuration>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

View File

@@ -0,0 +1,4 @@
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.0", FrameworkDisplayName = ".NET Framework 4")]

View File

@@ -0,0 +1 @@
a375a635dcf1f960d8157b6150991e321fbec60c

View File

@@ -0,0 +1,11 @@
\\silicium\software\MASER software\Source\GoldenEye\Installer\bin\Release\Installer.exe.config
\\silicium\software\MASER software\Source\GoldenEye\Installer\bin\Release\Installer.exe
\\silicium\software\MASER software\Source\GoldenEye\Installer\bin\Release\Installer.pdb
\\silicium\software\MASER software\Source\GoldenEye\Installer\obj\x86\Release\Interop.IWshRuntimeLibrary.dll
\\silicium\software\MASER software\Source\GoldenEye\Installer\obj\x86\Release\Installer.csproj.ResolveComReference.cache
\\silicium\software\MASER software\Source\GoldenEye\Installer\obj\x86\Release\Installer.Installer.resources
\\silicium\software\MASER software\Source\GoldenEye\Installer\obj\x86\Release\Installer.Properties.Resources.resources
\\silicium\software\MASER software\Source\GoldenEye\Installer\obj\x86\Release\Installer.csproj.GenerateResource.Cache
\\silicium\software\MASER software\Source\GoldenEye\Installer\obj\x86\Release\Installer.exe
\\silicium\software\MASER software\Source\GoldenEye\Installer\obj\x86\Release\Installer.pdb
\\silicium\software\MASER software\Source\GoldenEye\Installer\obj\x86\Release\Installer.csprojResolveAssemblyReference.cache

Binary file not shown.

Binary file not shown.

127
GoldenEye/Lib/Globals.cs Normal file
View File

@@ -0,0 +1,127 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace GlobalScope
{
public static class Globals
{
private static String _PathToServerVersion = @"\\silicium\software\MASER software\Released\GoldenEye";
private static String _PathToPreferredInstall = @"C:\GoldenEye";
private const String _FileNameOfSoftware = "GoldenEye.exe";
private const String _UpdaterExeFile = "Updater.exe";
private const String _LegalUpdateKeyWord = "DoUpdateGoldenEye"; // LegalUpdateKeyWord cannot be changed in new build without breaking auto-update loops
private const String _UpdaterModuleDescription = "GoldenEye Updater";
private const String _SoftwareDescription = "GoldenEye";
private const String _UserRegistrationFile = "UserRegistration.txt";
private const String _CalledByUpdaterKeyWord = "CalledByGoldenEyeUpdater";
public static String CurrentDir
{
get
{
System.Reflection.Assembly a = System.Reflection.Assembly.GetEntryAssembly();
string currentExe = System.IO.Path.GetFullPath(a.Location);
return System.IO.Path.GetDirectoryName(a.Location).ToLower();
}
}
public static String BuildVersion
{
get
{
System.Reflection.Assembly ass = System.Reflection.Assembly.GetEntryAssembly();
string exe = System.IO.Path.GetFullPath(ass.Location);
DateTime dt = new System.IO.FileInfo(exe).LastWriteTimeUtc;
return String.Format("{0:0000}{1:00}{2:00}.{3:00}", dt.Year, dt.Month, dt.Day,dt.Hour);
}
}
public static FileInfo CurrentExe
{
get
{
System.Reflection.Assembly ass = System.Reflection.Assembly.GetEntryAssembly();
return new FileInfo(System.IO.Path.GetFullPath(ass.Location));
}
}
public static void RegisterUser(String Description)
{
try
{
DateTime dt = DateTime.Now;
String timestamp = String.Format("{0:0000}/{1:00}/{2:00} @ {3:00}:{4:00}", dt.Year, dt.Month, dt.Day, dt.Hour, dt.Minute);
string user = String.Format(" [User] {0}", System.Environment.UserName);
string machine = String.Format(" [Machine] {0}", System.Environment.MachineName);
string description = String.Format(" {0}",Description);
using (System.IO.StreamWriter sw = System.IO.File.AppendText(Globals.UserRegistrationFilePath))
{
sw.WriteLine(timestamp);
sw.WriteLine(user);
sw.WriteLine(machine);
sw.WriteLine(description);
}
}
catch { }
}
// Gets
public static String PathToServerVersion { get { return _PathToServerVersion; } set {_PathToServerVersion =value; } }
public static String PathToPreferredInstall { get { return _PathToPreferredInstall; } set { _PathToPreferredInstall = value; } }
public static String UpdaterModuleDescription { get { return _UpdaterModuleDescription; } }
public static String SoftwareDescription { get { return _SoftwareDescription; } }
public static String LegalUpdateKeyWord { get { return _LegalUpdateKeyWord; } }
public static String UpdaterExeFile { get { return _UpdaterExeFile; } }
public static String FileNameOfSoftware { get { return _FileNameOfSoftware; } }
public static String UserRegistrationFilePath { get { return _PathToServerVersion + "\\"+ _UserRegistrationFile; } }
public static String CalledByUpdaterKeyWord { get { return _CalledByUpdaterKeyWord; } }
public static String UserInfo
{
get
{
DateTime dt = DateTime.Now;
String timestamp = String.Format("{0:0000}/{1:00}/{2:00} @ {3:00}:{4:00}", dt.Year, dt.Month, dt.Day, dt.Hour, dt.Minute);
string result = "unknown user @ unknown machine on " + timestamp;
try
{
string user = String.Format("{0}", System.Environment.UserName);
string machine = String.Format("{0}", System.Environment.MachineName);
result = String.Format("{0} @ machine {1} on {2}", user, machine,timestamp);
}
catch { }
return result;
}
}
// Functions
private const string _SpaceReplace = "!@#$%^&*()";
public static String SpaceOut(String s) { return s.Replace(" ", _SpaceReplace); }
public static String SpaceIn(String s) { return s.Replace(_SpaceReplace, " "); }
// Cosntants
public const String AdministratorEmail = "wim.booij@maser.nl";
}
}

BIN
GoldenEye/Lib/Validatie.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 446 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,3 @@
<?xml version="1.0"?>
<configuration>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>

Binary file not shown.

View File

@@ -0,0 +1,3 @@
<?xml version="1.0"?>
<configuration>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>

View File

@@ -0,0 +1,21 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
namespace UpdateVS
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Updater(Environment.GetCommandLineArgs()));
}
}
}

View File

@@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("UpdateLMS")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Microsoft")]
[assembly: AssemblyProduct("UpdateLMS")]
[assembly: AssemblyCopyright("Copyright © Microsoft 2012")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("51a5e951-260b-4eaa-b94a-de8774f12730")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -0,0 +1,63 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.18444
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace UpdateVS.Properties {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("UpdateVS.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
}
}

View File

@@ -0,0 +1,117 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,26 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.18444
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace UpdateVS.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default {
get {
return defaultInstance;
}
}
}
}

View File

@@ -0,0 +1,7 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>

98
GoldenEye/Updater/Updater.Designer.cs generated Normal file
View File

@@ -0,0 +1,98 @@
namespace UpdateVS
{
partial class Updater
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Updater));
this.startupTimer = new System.Windows.Forms.Timer(this.components);
this.lbox = new System.Windows.Forms.ListBox();
this.SuspendLayout();
//
// startupTimer
//
this.startupTimer.Interval = 500;
this.startupTimer.Tick += new System.EventHandler(this.startupTimer_Tick);
//
// lbox
//
this.lbox.BackColor = System.Drawing.SystemColors.Control;
this.lbox.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.lbox.FormattingEnabled = true;
this.lbox.Items.AddRange(new object[] {
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"10",
"11",
"12",
"13",
"14",
"15",
"16",
"17",
"18",
"19",
"20",
"21",
"22",
"23"});
this.lbox.Location = new System.Drawing.Point(18, 18);
this.lbox.Name = "lbox";
this.lbox.SelectionMode = System.Windows.Forms.SelectionMode.None;
this.lbox.Size = new System.Drawing.Size(552, 260);
this.lbox.TabIndex = 1;
//
// Updater
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(588, 297);
this.Controls.Add(this.lbox);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Name = "Updater";
this.Text = "GoldenEye updater v1.0";
this.TopMost = true;
this.Load += new System.EventHandler(this.Updater_Load);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.Timer startupTimer;
private System.Windows.Forms.ListBox lbox;
}
}

View File

@@ -0,0 +1,272 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using GlobalScope;
namespace UpdateVS
{
public partial class Updater : Form
{
private List<String> _Messages = new List<string>();
private Boolean LegalUpdate = true;
public String FileNameExceptionContent
{
get
{
// Returns part of exec name to scan for and ignore in deleting and copying
System.Reflection.Assembly ass = System.Reflection.Assembly.GetEntryAssembly();
string exe = System.IO.Path.GetFullPath(ass.Location);
string name = new FileInfo(exe).Name;
string ext = new FileInfo(exe).Extension;
name = name.Replace( ext, "");
return name.ToLower();
}
}
private String _FileFromCommandLine = "";
public Updater(string[] args)
{
InitializeComponent();
if (args.Length != 2)
LegalUpdate = false;
else
{
if (!args[1].StartsWith(Globals.LegalUpdateKeyWord))
{
LegalUpdate = false;
}
else
{
_FileFromCommandLine = Globals.SpaceIn(args[1].Substring(Globals.LegalUpdateKeyWord.Length));
LegalUpdate = true;
}
}
// Build version
System.Reflection.Assembly ass = System.Reflection.Assembly.GetEntryAssembly();
string exe = System.IO.Path.GetFullPath(ass.Location);
DateTime d = new System.IO.FileInfo(exe).LastWriteTimeUtc;
this.Text = String.Format(Globals.UpdaterModuleDescription + " (v{0:0000}{1:00}{2:00})", d.Year, d.Month, d.Day);
}
private void Updater_Load(object sender, EventArgs e)
{
this.Text = Globals.UpdaterModuleDescription;
// Center screen
this.Location = new Point((int)Math.Round((Screen.PrimaryScreen.Bounds.Width - this.Size.Width) / 2.0), (int)Math.Round((Screen.PrimaryScreen.Bounds.Height - this.Size.Height) / 2.0));
lbox.Items.Clear();
System.Reflection.Assembly ass = System.Reflection.Assembly.GetEntryAssembly();
string exe = System.IO.Path.GetFullPath(ass.Location);
if (exe.ToLower().Contains("silicium"))
{
MessageBox.Show("You can only run '" + Globals.UpdaterModuleDescription + "' locally!", Globals.UpdaterModuleDescription, MessageBoxButtons.OK, MessageBoxIcon.Error);
Application.Exit();
}
_Messages.Add("Updating...");
_Messages.Add("");
_Messages.Add("Server copy is on " + Globals.PathToServerVersion);
_Messages.Add("");
UpdateMessages();
startupTimer.Start();
}
private void startupTimer_Tick(object sender, EventArgs e)
{
// Prevent from occuring again
startupTimer.Stop();
// Check if the update is started legally
if (!LegalUpdate)
{
_Messages.Clear();
_Messages.Add(Globals.UpdaterModuleDescription + " was not called by " + Globals.SoftwareDescription + "!");
UpdateMessages();
return;
}
// Add commandline argument to messageboard
if (_FileFromCommandLine.Length > 2)
_Messages.Add("Command line argument: " + _FileFromCommandLine);
// Get local directory
string LocalDir = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location) + "\\";
// Make fileLists
string[] localFileList = Directory.GetFiles(LocalDir);
_Messages.Add(String.Format("{0} files found in local folder", localFileList.Length));
UpdateMessages();
string[] serverFileList;
if (Directory.Exists(Globals.PathToServerVersion))
{
serverFileList = Directory.GetFiles(Globals.PathToServerVersion);
_Messages.Add(String.Format("{0} files found on server", localFileList.Length));
UpdateMessages();
}
else
{
_Messages.Add("Serverpath not accessible!");
UpdateMessages();
return;
}
Boolean ErrorEncountered = false;
#region Deleting old files
List<string> serverFileNames = new List<string>();
foreach (string s in serverFileList)
serverFileNames.Add(new FileInfo(s).Name);
// Delete old files
foreach (string f in localFileList)
{
if (f.ToLower().IndexOf(FileNameExceptionContent) < 0)
{
FileInfo fInfo = new FileInfo(f);
if (serverFileNames.Contains(fInfo.Name))
{
// Do nothing
}
else
{
try
{
_Messages.Add(String.Format("Removing : {0}\n", f));
UpdateMessages();
fInfo.Delete();
}
catch(Exception ex)
{
_Messages.Add(String.Format("Failed to remove : {0}", f));
_Messages.Add(String.Format(" [{0}]", ex.Message));
UpdateMessages();
}
}
}
}
#endregion Deleting old files
#region Copy to local
foreach (string serverFilePath in serverFileList)
{
if (serverFilePath.ToLower().IndexOf(FileNameExceptionContent) < 0)
{
string targetFilePath = "";
try
{
string name = new FileInfo(serverFilePath).Name;
targetFilePath = LocalDir + name;
// Only copy if newer or does not exist
if (File.Exists(targetFilePath))
{
FileInfo target = new FileInfo(targetFilePath);
FileInfo source = new FileInfo(serverFilePath);
if (source.LastWriteTimeUtc > target.LastWriteTimeUtc)
{
File.Copy(serverFilePath, targetFilePath, true);
_Messages.Add(String.Format("Updating : {0}\n", targetFilePath));
}
}
else
{
File.Copy(serverFilePath, targetFilePath, true);
_Messages.Add(String.Format("Copying : {0}\n", targetFilePath));
}
}
catch(Exception ex)
{
ErrorEncountered = true;
_Messages.Add(String.Format("Failed to copy : {0}", targetFilePath));
_Messages.Add(String.Format(" [{0}]", ex.Message));
}
UpdateMessages();
}
}
#endregion Copy to local
Globals.RegisterUser(Globals.UpdaterModuleDescription + " (v" + Globals.BuildVersion + ")");
_Messages.Add("User register updated");
UpdateMessages();
try
{
if (!ErrorEncountered)
{
String argument = Globals.CalledByUpdaterKeyWord + Globals.SpaceOut(_FileFromCommandLine);
System.Diagnostics.Process.Start(LocalDir + Globals.FileNameOfSoftware, argument);
}
}
catch (Exception ex)
{
ErrorEncountered = true;
_Messages.Add(String.Format("Failed to launch {0}", Globals.FileNameOfSoftware));
_Messages.Add(String.Format(" [{0}]", ex.Message));
}
finally
{
if(!ErrorEncountered)
Application.Exit();
}
}
private void UpdateMessages()
{
int stop = _Messages.Count - 1;
int start = (int)Math.Max(stop - 19, 0);
lbox.Items.Clear();
for (int i = start; i <= stop; i++)
lbox.Items.Add(_Messages[i]);
lbox.Refresh();
lbox.ClearSelected();
this.Refresh();
System.Threading.Thread.Sleep(50);
}
}
}

View File

@@ -0,0 +1,100 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
<ProductVersion>8.0.30703</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{3F5ABD01-B518-4104-B094-0BFAC8168862}</ProjectGuid>
<OutputType>WinExe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>UpdateVS</RootNamespace>
<AssemblyName>Updater</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<TargetFrameworkProfile>
</TargetFrameworkProfile>
<FileAlignment>512</FileAlignment>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
<PlatformTarget>x86</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
<PlatformTarget>x86</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup>
<ApplicationIcon>Updater.ico</ApplicationIcon>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="..\Lib\Globals.cs">
<Link>Globals.cs</Link>
</Compile>
<Compile Include="Updater.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Updater.Designer.cs">
<DependentUpon>Updater.cs</DependentUpon>
</Compile>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<EmbeddedResource Include="Updater.resx">
<DependentUpon>Updater.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
<DesignTime>True</DesignTime>
</Compile>
<None Include="app.config" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<Content Include="icon.ico" />
<Content Include="Updater.ico" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

Binary file not shown.

After

Width:  |  Height:  |  Size: 361 KiB

View File

@@ -0,0 +1,549 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="startupTimer.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAkAMDAQAAEABABoBgAAlgAAACAgEAABAAQA6AIAAP4GAAAQEBAAAQAEACgBAADmCQAAMDAAAAEA
CACoDgAADgsAACAgAAABAAgAqAgAALYZAAAQEAAAAQAIAGgFAABeIgAAMDAAAAEAIACoJQAAxicAACAg
AAABACAAqBAAAG5NAAAQEAAAAQAgAGgEAAAWXgAAKAAAADAAAABgAAAAAQAEAAAAAAAABgAAAAAAAAAA
AAAQAAAAEAAAAAAAAAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8A
AAD/AP8A//8AAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUlBSUnBzQ2UAAAAA
AAAAAAAAAAAAAAAQAAAAABQUN1JxcWAAAAAAAAAAAAAAAQUAEAEAEAAgBDVjZXFgAAAAAAAAAAAUJAAA
QAQAAEAUIQcHUnJwAAAAAAAAAAEAEHAAEAIUADBAFAJSdSV3cAAAAAAABwAFBABwQlBDBQQwQlAENDcH
BwAAAAAAQBQAA0EFJQcBQ0NBJQJQFnRzQwAAAAACEAAFBBBgU0FhYXBSUCUGBBYWdwAAAAAFBBQgEgUD
QlJQcGFhYFJQFgcXAAAAAABgAAEFBQFwUQcWE1NDQWEGAAFgcAAAAAAEEkFhIXAXBxQxQ1MRYUJQFCR3
AAAAAAQQBBAQUBYWEDEXExE1ElAAAAEAAAAAAABAcAcBA0ERFxc5OXExYSUgFAQlAAAAAEElBQEHBRMT
ebk5cTMXElAUAAEEIAAAAFJBIBYQExeXm5OTExcTFSFBBAADQAAAUAQwUFAUCXm5g5cTFBE1MUEwAwFA
AAAABhBSATBRc4ubmTOXExFxMTFBBAAhYQAABBYAEFMDE5N5c5iTEXEblzExEAFABAAABwFDQTUVNzEx
k5c3ERMXm5eXABABJAAHBAABEBETNxNTcbiYExl5t5MTFQIEAAAAcFBSU3E3Fxc1OXl7lROTm3FxEwUC
UHAEEAABOTU1JSU3lbg4MTF5NTExNQEAASAAQBQ3FzNTU1NZObebEVMTETeTAxJBQEAABAEBcxdxYXFx
OYl5cxE1Nbc1EFEAAHAAUBYXBTdSVxMDE7V7kXMVN5cSFAYQFCAAAABQN1JWU3EVGYublxUTlzMFAwEE
AHAEEFAldWd3NTExEYOJMTFxOYMSUBIBQAAAAABQdzV2VzFRE3k3MVE5cxFBJQVAMAAABQFzU3d1cTkx
eXN5MTETlTAxUhIWBAAAAAAAdXVnE1NTU3l3EReXMxcXAWVAFgAABQdXV3dxYRc3NTc5NTE5eXE1NxIW
AAAAAABEd3d0Fzd5cXlxMTl5MXFhdWBBQAAAAFB3d2Uhd5eXNRcRFTEzVzVzUlAGcAAAAAdHd3dTE3d3
kxMXExcXMXNXZQQwAAAAAAR3dXNBdxc3MXFxF1NxRxdwcHBHAAAAAAFndlcSU3FxAxMTUxNBMHUlBwFg
AAAAAAZWdXFlNQEUEXERMFAWFSFSUHQAAAAAAABWd3ZTQSUlIRNTUwNQNBR3Z0cAAAAAAAAHR0cWEBAR
FXV1dRUhYWF0dWAAAAAAAAAAdzQAAAEDV3h4dzYUFDR3ZwAAAAAAAAAABAEAEEB0d4iHdUElIGV0cAAA
AAAAAAAAAEAUABABZ3iHdyUABSVgAAAAAAAAAAAAAAAAFABBR1d2UAA0JWUAAAAAAAAAAAAAAAAAAAEA
AGBUBBBBQAAAAAAAAAAAAAAAAAAAAAAAEAEAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////////////8AAP//////+AAAB//////AAAAB/////w
AAAAD////+AAAAAH////gAAAAAP///8AAAAAA////gAAAAAD///8AAAAAAf///wAAAAAB///+AAAAAAP
///wAAAAAA////AAAAAAD///4AAAAAAH///gAAAAAAf//8AAAAAAB///wAAAAAAD///AAAAAAAP//8AA
AAAAA///gAAAAAAD//+AAAAAAAH//4AAAAAAAf//gAAAAAAB//+AAAAAAAH//4AAAAAAAf//gAAAAAAB
//+AAAAAAAP//8AAAAAAA///wAAAAAAD///AAAAAAAP//8AAAAAAB///4AAAAAAH///gAAAAAAf///AA
AAAAD///8AAAAAAP///4AAAAAB////gAAAAAP////AAAAAA////+AAAAAH////8AAAAA/////4AAAAH/
////wAAAB//////wAAAP//////wAAD///////wAA////////8A////////////////8oAAAAIAAAAEAA
AAABAAQAAAAAAIACAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICA
gADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAQFh
YXNHAAAAAAAAAAAAAQBAABA0clJwAAAAAAAAUAAgEABCBBdhdgAAAABAUAcEFgUHBQMGF0MAAAAAEAJQ
FhBSUlJAUGNWAAAAQAQUAHBWFwUlBwMFJwAABBJBAxQXATQzEHBAQlAAAAAEEFBDAxNTFRdDABAAAAAE
MEMBNRF5OTMTBQQAcAAAEEEBNBl7lzNTUXAwEAAABCUkFAF7l5ORETMRUAQWAAFAEBMXkzk5cxN5cxIQ
AAAAYQcBFzNTeXkRm5cVAAcABQQBFzFheZtzcXkzExcAQAAQFzFxcXN4k5ExeTEQEAAAQHMXclcRuXMx
cTdwFgUAAAFBdTUxNZi5cRc5JQEAYAEEB3dHcRE5cxU5NwMAcAAAEDU3dxNRc3kTFxFRBwQwBABXVnFx
M3lxORNTBxQwAAAFB3dWF3lzU1N5Nxc0BQAABGd3A3l3ETETE3F3QBYAAAF3dxVzcTUxcXNXUlJAAAAG
R1cHFxYTExcQUwNAcAAAAHZ1NDARFxUQFhR1ZQAAAAAHdHAQUXV3dwUldnAAAAAAAEEAAQd4h1BwB2UA
AAAAAAAAABQGd3dhBhRwAAAAAAAAAAAAEFZQEEFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAA///////wAD//gAAH/gAAA/wAAAP4AAAD8AAAA+AAAAfgAAAHwAAAA8AAAAOAAAADgAAAAYAA
AAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAADwAAAA8AAAAPgAAAH4AAAB/AAAA/4AAAf/AAAP/4A
AH//gAH//+AH//////8oAAAAEAAAACAAAAABAAQAAAAAAMAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAA
gAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAA
AHd3d3cAAABwAAAWd3AAgAFAUkMEeAAEMFMXFBJwBwEFNxNSQHAAUlOZNTEQEHQBEzcxk1BHcDcXGXkz
EwdxQXEYNxcBB3A3cxOTE1BnAEdVNXE1NQAHdTcxMXNScAB3NDUXFDUAAIQBF3UlaAAAAFAGcAcAAAAA
AHcXAAAA/AP///AB///AAP//wAH//4AB//+AAf//AAD//wAA//8AAP//AAD//4AB//+AAf//wAP//8AD
///wD////D///ygAAAAwAAAAYAAAAAEACAAAAAAAgAoAAAAAAAAAAAAAAAEAAAABAAAAAAAARjU3ABg1
hwAKAxcAJyRIABcqdgATOq0AJTiKACUWGwA1K0cAF0STACc3dQAnSJcAd2NuABokVgAjCRoArZGuABcl
ZQAnN2gANzhmABRLyQAYGUYASUVoAEp1xQApRYgAJBpFABkVOAAZOJcAGEWoACokNQAoVagAGRQmADQb
JwA4N0UARTZEADg1VQAbM3cAjXWYADlIdwBcRjgAdmSOABoTGgA3RoYAiGdpAEc6VQB2WVcAJWnqAEtH
SQAlKGMATWGZABYaaAA5MzkANVeUAGi38QATBBoAGWXWAFJHTABmVmkAVkRXADd2wwAmVsYAGwMcAEZI
dQAVK4QASUZVAFVWdwDNrbIAGgobAFY8OAAnTKUARzMsADM6dwApRXkAJAwjAFmx8wBoSEUAc1tkAElV
iQBaUmgAKmW2ADZntQAjEyMAFSqVAHRhVgAaRbcAV1iFAFJSUgAqIyQAGwoiABUNNwCYd3QAGyNMADMW
HQAjLHUAMiQrAChVmQBUS3gAiGRVABkyZwAzY6kAGRxXAA0seQBmVFoAPDMnAFmHywAyHjYAe1ZKAFpL
ZQCTaFgAJBw8AEWF0wA7KjsAKhsjAAkJJwAodcoARUiJACQaKwBmV3IALEFnACUVKgCVamQAKhoyADhR
igAyacQAPCw1ADMjMwAVChsAKDFXABUKFAA0KTQAO3W5AC0iHAAkG1cANVypACUaJAArLFsARmu2ADMq
OwAzV7QAPCwiAEM+ZQAjFDIAKhMkAAwbagBKVZUALBosAEYlMAAkHDQAJmStADMjJQBharEAEwMiABpa
uwA6IioAGQUiACNNtQALKYYADSNpABQLIgBUa6MAOkNsAGpSRAAsKlEAWlNFAINbUQANG4YAFVKpAFlz
swB2TEgAmnRrAEQrQgAgFTsAKREpADkqLACIc3EAIiJRABkcewAxTJUAGgsqADQkOwARBBUAPkRaABd1
8QA7JDEAVD1FACIqVAAkV7UAKYXpAERrpwCxjI8ADEa1ADiV6QAWCioAKRw9AA0yjAA1Ki0Aa1eFACEl
XQAZChIAOoriABoEKABBLSsApH11AA0rkgAjLVsAKCZTADokJgBEcbsAVD5ZAIxudAAoFjUAJon2AD6b
8QAIHnMADyBUAEeExwBSjd0AX5XbADQuIwAoFzoAZkxpAHVdcABDTZUAVlOUABqA3wAwgt4AHoXuACNt
zQArYtkANX3RADlQfQAndLwAiXBqADJNpABQLjoAMw8dABJAegBhS1cAQB8oAGA+QQBKUHsACTmcAAsN
MAAOGz4AXJzlACgzTgAzLVMAD1fgACA7oQBFV6IAbcf5AAAAAAAbDw8AHRQPAAoRGQCjgnkAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AACTdHd3d3QdHTMvL0BWVlZWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABDNgMDAwMDAwMDA54f
dB0hL1ZWVlZWVlYAAAAAAAAAAAAAAAAAAAAAAAAAAABYUUM2NgMDAwMDAwMDA54ffgMfHSEvVlZWVlZW
VgAAAAAAAAAAAAAAAAAAAAAArD1RkaxDNrSAgICAgLS0gH5RcFEpKXQzL1ZWVlZWVlYAAAAAAAAAAAAA
AAAAAACsD0lJjo5RSVEICHBwhndRUYZwcHBwcHCGXiI4VlZWVlZWAAAAAAAAAAAAAAAAkT09PT1JD44g
IF6Zmbe3fR0dfW+BgYFeXl6RcF4BOFZWVlZWVgAAAAAAAAAAAACRQz09PT1JUXeRfX18IqpvaR0JIgEB
M4HDXl5eXpWVAS9WVlZWVgAAAAAAAAAAAJVDmj09D0l3dHd0fbMJIgmzbyFALwEBATOBw8PDrV4gXAEv
VlZWVgAAAAAAAAAArQhDPT1YrJF5k5PBCQkJCQksLCEhMyIiITNvfHx8w15wCIMBOFZWAAAAAAAAAAAA
CA/GD453ecFtBASiCQkJBCMTIwn1dqASuQRvMzOtVwhDQwjDL1ZWAAAAAAAAAAAICA8PjnltGRkZGQSi
oiMjBFu5f4fMEhgbBcUJMzNXCEM2Q0MIZy8AAAAAAAAAACAPCAhRkdIVFRltGQQEr80EWw4OYiQRESQC
CxIhIYmGKUM2Nj0pgwEAAAAAAAAAAA8PUXR5eY0ZFVkaBAQODmQRAgpFRRwcHAoKCxIjIYkddFhDNjZD
CNoAAAAAAAAAXA+OHR15jasZFRoZZBELEQUe4zc3FAYcHBweChJ/BAQEjVh+QzZ+CINGAAAAAAAADyB9
gYl5jW0aq9sZZApPujwutjc3vpwkBQUCGAsOWwQEq8B+Q0N+KQhnAAAAAACZCCB9gX0fGhkZGcEVAju/
uy4u9xSYCj8FETBdBxgkDhWvr1nAWFg2filXAAAAAABcILdpkXcfFTDFGRkOlL+7Ny4uFAZ7DAKdEQUF
AgoKJGIRERVZslg2gCkIAQAAAABcmSB3SY0aDl0wGQQST3KYmzw8BgYXHkWdnQU/Ahxy5woCBWRZnp5+
gCkIRgAAAAAgmY5YWRUVDhFkDiSFgpQMGAweBk9oihfVjwUCBuTT4KYKGwUVwB8pKSkIiwAAALiZIA+a
jQQVFRFdJAxjNEgmJjRF+DsXiNmcjwXLPC624nIeDAcRGh8IKSmGgwAAAO4gST2yq68OYhgMGDTmtbVA
PnoMG24XzzUKEQUbVBQ34U8MDAIkDhofKX5RCKMAAFyOD5qyFREYY1BfeqAsLCOgKgxFBvRoT0oKBT8b
BlQcCuwYAmUFBdYafkNRhmcAAA8PPZqNW3Y0Y180PhYWjBMq6ZsGFDU7HnLxP1LLG0UFEV+CHmUODlsa
WJpJCGcAAA8PPZqNoiYYSE0xay9AFkcqBxsGLkqmHse+UhsHRxPMSNduDA4aqx2TsshYCCcAAA89PZp3
BIcSFkFOVjg4Fiokj4+lFPpQUEoUByoLogkLgm5fuW0aGpMdH8hJCKMAAA89PZqNaQk6Oe1mLUw5QUhl
jzKwBjU7e9QGBzAwEQse5TsLbW0ZbRofKQ8I/VMAAHw9l1jSsyJ1DUxmLQ05QRhljzIyUthQO8cGBTIC
GwZUcjtIBAR/BBofhggICAAAAAA2l5qsCYxBVUE5TExOTQI/BTIyBxdQHnsbETICHAabDCQOucx/BI19
XnBXgwAAAAA9Nj1YBIzwTUENDTkWCxgMAiQqNIi8vBcbBQUFAhyKAg4wEzCvbYkifYFXiwAAAAAPPQ9J
aSM+VXWuK04TEkcYGCpN3vk0vIWcPwIbwhweAgsLEhITCToBdIGVJwAAAAAgPUkgqtB1DVpaDUD2hwt6
kE1zc3MqzxylUgYGHJi6DComEiYWOjhedIGLAAAAAAAAD6y36kzRWsroOgkjJjGfn5AqRwcYFxuwP8Ic
PHtQsXM+FhZOZgEIhsMBAAAAAAAASawg76n/Wq5OI4cmn6enp4iFB10HDD9dBSRfYx6xKlVgazk5uM4P
cIuhAAAAAAAAAEmSLcrK0Q1OExImMZaWaG5PCgIMPwVdCwt6ekgmTWBODTk4fJUIlUQAAAAAAAAAACCS
YakrTHVBIwSgVd+QMTQKAgJFGwcLCyY+JhMTExY5ayJvInxeyS0AAAAAAAAAAABGamwrOXUWBAkWPhMS
h68OnQIKAgUkEn8TzRkEIywsCW8BAQHJJwAAAAAAAAAAAAAnJ2FsK90sLGsWoltbGRkZESQHBREwDhUE
BAQJCQkJLDo4RAFEAAAAAAAAAAAAAAAAoWpseCs6OtAEGvMVhISExUdHExM+h6+HCQkJswksOQ0tSydT
AAAAAAAAAAAAAAAAAGpheC0ib5NxcfIVrzIwE2DEKCUoYIwjBB2JISI6TCthamEAAAAAAAAAAAAAAAAA
AACkS5KOHwNxA5cabc0+KBAQEBAlxBYJHR2JMwFLLaRqYQAAAAAAAAAAAAAAAAAAAAAARg82AwMDNj1Y
eSwoJRBCQhAl3Kp5dFdXlUZLpGpqAAAAAAAAAAAAAAAAAAAAAAAAACBDl5eXNjY9UQFLK71CQr1MIn2R
UXAgAURLqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASciXAwO0tEMgRGp4eKgBcEN+UV7JAQFEAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAA2Nja0AwMDQwggIOsPPTZ+UXDOiwAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAFg2tAMDAwMDNjY2NjaAxvwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAD+HwMDAwMDNgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAA//////////////AAD///////gAAAf/////wAAAAf////8AAAAA/////g
AAAAB////4AAAAAD////AAAAAAP///4AAAAAA////AAAAAAH///8AAAAAAf///gAAAAAD///8AAAAAAP
///wAAAAAA///+AAAAAAB///4AAAAAAH///AAAAAAAf//8AAAAAAA///wAAAAAAD///AAAAAAAP//4AA
AAAAA///gAAAAAAB//+AAAAAAAH//4AAAAAAAf//gAAAAAAB//+AAAAAAAH//4AAAAAAAf//gAAAAAAD
///AAAAAAAP//8AAAAAAA///wAAAAAAD///AAAAAAAf//+AAAAAAB///4AAAAAAH///wAAAAAA////AA
AAAAD///+AAAAAAf///4AAAAAD////wAAAAAP////gAAAAB/////AAAAAP////+AAAAB/////8AAAAf/
////8AAAD//////8AAA///////8AAP////////AP////////////////KAAAACAAAABAAAAAAQAIAAAA
AACABAAAAAAAAAAAAAAAAQAAAAEAAAAAAAAkFRoANRsnAEY0OQApa7oAEhptACU5iQBmV2cAdmVvABky
eQBDNEQAJ0iVABkaRwAXNocANShFACojOABDN1YAIyllACskJwApM2cAOEl4ADQ0VQBTSWYAFCqFAHZZ
WgBHR2oARUp3ACc3dgB5ZpMANDx2ADl5xwAZEhoAEgMaAI95lwA4O2YAQigrABlZyQCLY1YAT4vQAEY0
LAA0Y6oAFCyVACVTpwAoTKYAR3fEABxCkQBhRDsAJRtGACUTIwAUCRoAGkmzADVWpgBmVVwAWHW5ACwk
HgAbCiIAK0R6ACMMIwAaChsAGgMcADsyOABRS00AKVSaABtXtAArHSwAelhKACoyVwAUCiMAJWLHAHhe
aQAkGSwAVEl3ACscMwAkU8YAWUlZACocJAA7KjMAREJcACIiUgAkEywAOSo6ABc+tQCUbWgAJFa8ACQj
SgBKLjcAJmrpABktewBoSEQAhltRADRGhAAUKm4AV1mXAA46mgCKZGQAIhs8ACsTJABiVXgAOGa8ADsz
KgAcESEANCksAGBKWQCYdncAJCpVACsNHQAZJGoACwooACVDgwAcFTwAJ062ACwrSwAhG1MADQMTABkE
IwA4IysAHQoqAAwEGwAxIiIAGzuUACIVPAAbLlsAPCsmAJV0bgA0YpoAGSRjADIiMgBHU4gACQobAENt
rAAWGz0AKiJCAB4jTQA0JCwAMCxUABQ2mgAoLFwAHSxkADQoOwBdUGsAJBo2ACEFHQBOTUwAFSt5ABor
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
QP9VPVj/Z1Ry/3xhef+ScXL/mH1x/3xoZv9PQlb/My1T/ygqXP8vPHb/PVKL/0pakP9JU43/RkqF/0dE
h/9FRY7/MkaK/0ZxvP8YQ6D/DRuB/x0tk/8YNaH/HT6s/xNArf8eWbz/KFm1/yFBlf8zRIP/NEBy/yo/
a/85TnP/RUxp/1VKXv9YQ07/MiAs/yMZKv8zLDf/Oy4n925gUHh/cF4IAAAAAAAAAABfS1QGTTZDYiEF
HO4sEir/PyIy/1AuOv92VmD/jG11/5lzdv+jfXT/iXBq/1pIV/88L0z/NDZY/z1Nef9IY5r/VG6l/1hn
o/9LU5v/O0KK/zIyd/83NYH/L0GP/0hswP8TMZL/Fh99/xgug/8ONY//Hkap/ydXwf8wZsn/NmC2/zNN
mv9DT4r/Skp4/0dFbP9LSmn/VlBm/2FQXf9MMzv/KxUd/yYZJP81Ky7/TD0w2Il8bj+uo5gDAAAAAAAA
AACOfYIBWEFOKScLIb0rESn+Ox0q/2A+Qf+WdG//o4J5/518eP+NdXP/XlNg/zQwUv8rLlj/Ok54/1Bs
of9YdLP/X3Wz/1ZwtP9LbLz/Nlmq/yM2hP8kK37/Kj2T/ydBm/8RJ4D/Iix5/x8ud/8TNX7/LlOd/zVh
r/8oVKH/MEuR/z1Niv9QVYX/WU5z/1xMaP9nV27/ZFRl/1Q/Sf87Iif/JQ8V/yocIf89LyX6Z1RAmpKB
bxcAAAAAAAAAAAAAAAAAAAAAUkFQCzonOXEkCyLtQyIw/3xWU/+mfnX/o354/4xvc/91ZXP/VlBt/zk8
ZP8pN2H/OEx7/1Jgn/9gZa7/Y3C0/1WCxP9Ii9T/J2q+/xpDk/8dMoH/K0Wc/xUuiP8dL37/KS91/yox
c/8rPHv/PFKM/zRSi/8qRX7/PEl+/0tSgP9QTnX/XVBr/29gb/9sXWv/UEFP/zwqNv8zICf/KBge/zIk
Jv9QPzHbf21YT5yJcwYAAAAAAAAAAAAAAAAAAAAAmpedAllLWCsxGCizTCox/IdhV/+edGj/j2tu/3Rd
bv9lWHT/WVR0/zc4Wv8lKk3/P0Rs/1xajv9WU5T/SVSU/0NinP8wWpf/F0SK/xI4gP8aOob/K0+j/x4/
k/8lOYb/KTJ7/y42dP86QXf/Qkl8/zpEdP8xOGb/Nzhj/z8+ZP9PSGr/YVJu/19PY/9KOkr/Py4+/0My
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
AAAP//////wAAD///////4AB/////ygAAAAgAAAAQAAAAAEAIAAAAAAAgBAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE1LTwhBPUUeODM/OzQt
Olc1LTtpOTA+dTw4QXdFREh2TExOdFFRUnRTU1JzUlJScFJSUmpSUlJiUlJSVVNTU0dSUlI2UVFRJFJS
UhNVVVUGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAEYAREFGgwdECA1HQ8iexUK
IrQQCCHUDwUb5BAFHOoSBR7sEQgf6RYPJeMfGivXLCo1xkFBRbROTk+qUlJSolJSUppSUlKNUlJSfVJS
UmdRUVFNUVFRMFJSUhJHR0cCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH1tewokDSREGwshrCUV
KOoaCRv+EQQX/w4EE/8OBBH/DQMS/w0DFP8MAhL/EAcY/xkRIf8ZEB7+FxEf+SckLuxDQkXbUVBR0lNT
U8hSUlK8UlJSqVJSUo1SUlJnU1NTL1BQUAgAAAAAAAAAAAAAAAAAAAAAAAAAAIR6hAFVRVkeMRgvkiIG
H+EmDST8KhUl/iURIf8fDB7/IREZ/yMVG/8kFyD/IhQj/x0PIP8fESH/JRgj/yscIv8oGyP+KBwj/ike
J/o6MTbzUE9O6lJSUuNSUlLXUlJSwlJSUp9SUlJTTk5OEQAAAAAAAAAAAAAAAAAAAAAAAAAAT0FMMyMO
JLUfBR38HQQc/yIKIf8mECL/Lhkn/zUhLf84JC7/PCgz/z0pNv8yIjL/LCI2/zcpOv86Kzj/Nysz/zUo
L/80JSz/Lx8q/ywfJf49Mi/7UExL9lJSUvBSUlLkUlJSyFJSUnJTU1MZAAAAAAAAAAAAAAAAh3l4AVVG
QjYjDyDKGQQf/BwCG/4gBh7/JBEl/yYXK/8nGC3/MSM1/zkqPP9EM0f/OiU6/zgoPf89Ok//SDtA/0U2
O/87Njr/NCwx/zMoLf81Kiz/Nyou/jIeI/46KSf8TkxK9VJSUulSUlLOUlJSeFNTUxoAAAAAAAAAAAAA
AABsWlsgMRsbuR0KGPwcBBv/IAsk/yoVLf8pHjP/Ihw1/ycgQv81KUX/NipD/zYrRf9ANFP/QDtS/zE1
Q/84OUP/PjVG/zo4Qf88MDv/PC40/zsvMP81Kiv/Jxoh/yUWGf48MTH2UU9P11JSUrNSUlJiUFBQFQAA
AAAAAAAAdmJnDjIXHZsmEBj8HgsX/y0UJP8oGTf/JBxC/ygcRf8nIkj/KypR/zEqUv86MlP/JSpP/yYv
Vf8vMVn/KC9a/ytDef8hQI3/Fihv/zEqSP89ND3/Migq/yEUGf8WBhr/GQsc/icZIf1GOjbPUlFRfFNT
UzpOTk4LAAAAAKeanwFIMDlQKQ8a5yUSH/8nFSX/LRkv/x4WPf8cG0r/IRY8/yghRP8mJ0r/ISNQ/x8h
Tf8SI1T/GC5c/x02ev8WLXn/Fy9t/xoyev8lN3L/MTdQ/zUzQf8nIyz/HxQh/xgHHP8WBBv/HA4c/zAl
IOhIRD1sU1NSHE9PTwQAAAAAXkVPEC0PH7opESL9Kx4v/y0eNf8jEjH/IhpC/xcUQf8dFkP/HSBU/x0q
Zv8aJGf/Ij2L/yJnxf8gadb/GU/C/xVKt/8aULP/IVOp/x9Ff/8pN1b/KStI/y4lP/8iFDD/Fwkb/xcH
GP8WCBn/JR0e/Dk0JqhQTUUQPz8/AQAAAABMMTlELQ4f8TQeLv84Kzj/Kxwz/yYYN/8fFj3/Ixc8/yUV
P/8XK3D/LWi9/yNgyP8rbOf/FWjl/xNczP8PPZ//GC55/xombP8cMHr/JECG/x0vYv8dI07/JSFK/x4W
Pf8WCCH/Ggod/xUIHf8bExz/Ligj5EhCOC0AAAAAwrm5Bj4iJow2Gyb/NSEx/y8fMP8aEiz/GBtM/yQh
Vv8oHUj/ICNT/y5qtf80l/D/IHDk/yJo7P8NRsj/IFS5/x0/lv8UK3j/GSdo/xopdf8aOpL/HUWO/xY0
av8VJ1r/GiFc/xEJNP8bDiX/Ewgb/xYPGP8mIB/9TkA1bDYzLAF9aWwZOx8kwDggKv8mEif/IhMw/xkX
Ov8YJFz/IyVm/yAhUf8pOXH/LXG6/xxetf8nTqn/KVi//xQ+sP89aMH/MFet/xUwff8QJW7/ES2B/xc3
m/8ndNT/IG67/xE7iP8YLn//FQ9C/xUMJ/8YDx//FhAW/x4UF/8/LialMi0gDV9FSzBAJS3bLxYm/xwI
IP8gGD7/HhxH/xUbTv8hJ2n/FzFy/zNhrv8xY5v/Kkt8/zZIff8uT6H/Jkut/0t9yf9LdsL/H0Ka/xEf
a/8RLIn/JU/L/x149f8dfuP/IlKm/yFDmP8aJGT/GRMy/x4VHv8YERT/IRYc/zMpI8hSTD4eRSUuSDcZ
KOgiCB//Gwcn/yIcR/8hLmD/JkeB/yxQmP8qTIX/PE15/0JCWf9ARF7/PU1+/y5Jnf8kTbP/V4fS/06L
zP8pZ7P/Fyhw/xs0kf8aPrr/GlPE/yZsv/8kTo//HUCM/xo0fP8VI1v/Fxcw/xcOHP8fECL/LyQl21tV
RS88HSlaKgsd7RwCHv8eCy3/HydN/zJTi/8wY6X/LVeb/z5Kd/9KQV3/Rjpf/zo/df8xTKD/HUSy/zBo
1/9OkNX/LW29/xlUrP8VKIb/ESuS/yA+pv8bOpT/FzZx/zFlp/8XRJH/EiVn/xkkYP8WGDz/GAkj/x8N
Jv8qHR7hSUMtOTgbKF0iBBbuGAEc/yMRLf8xM1n/L0N5/zRHdv9ZYIf/U0pd/01ETf9DRXL/Lz6B/xkx
f/8RLp3/Nnzp/zl+xf87dsb/HmDK/xs0nP8kNor/NDhl/ygzYP84Ypr/P37O/yQ7cv8cFD7/IhU5/ygg
Nv8aCyr/Hwgo/y8hIeJgWUQ6NBckTiEFGuoYAh//IxEu/zAjQP9DOFv/X1Bp/2BRWv9tWl7/YE9b/0pP
d/8ZMnr/DBxr/xgaef8rYMj/SozQ/zyB0/8fXcz/Ji+C/yktbP8jJmP/K0iR/zyAzv8lTJD/JCI//yEc
Pv8hGzn/Hx4t/xoSIv8iDiH/LCIe3HFqWTBNOEY0Iwwj3hgDIv8mES//NiZE/1xRbP9vZXz/aFpk/3Re
Xv9rXWj/RlWF/w8tg/8PG2z/FhVn/ydIpv9Ac8L/NHTE/x9OtP8ZIGz/HC2A/xc9of8XSbL/LW6+/yhE
d/8hJUr/JTFX/yMgQv8gGCn/KRwk/yIZHP8yKh7MiX5xIWVVYB4hDSPGFAIf/x4IJP8yKU3/S011/1BZ
hv9kXW7/e2Rq/1BNa/8tQH7/JD+W/xktff8rN33/Olag/0Jur/9DbbD/J0+k/xUicf8WK3z/ETWa/ypP
uf8dMn7/KCpe/y0yaP8lKFf/Jh09/z4uPf8zJDH/KiUo/0E1J620qqMQppqfCCoSI5ccAhv/Jgkl/zom
Rv9MRW7/Y1l8/4Zxb/96aGn/Ojlh/yowav8wQ4T/OEqF/0hSif9GTpb/PVOV/zxmrv8VNZH/GyyQ/x84
mf8NOJb/JVKt/x01g/8wP3H/Ijxs/zhAav9GOlH/RzZD/ygeLv80Kyv+YE49d9/a1gIAAAAARzA9UCII
H/Y5HTD/VTVD/4BjcP+Ycnb/lXhu/1tIV/80MFH/Okl4/0xmnv9TYJ3/QUeM/zg3ff8zP4v/OFyz/xQk
hf8VL4n/GkCk/yNXwf80Y73/MkyX/0VJe/9BRWz/T05o/11LWP81Hif/KR4o/0I2L+uDdWg1AAAAAAAA
AABXQE4WKA4myTYZKf52U1P/pYJ5/5l7eP9iV2T/MC9W/zVIdP9Tbaj/X3S1/1F2vf88abz/IjaH/yc3
jf8aMYz/Hit5/xsudf8qTJL/LVij/y9Ljv9HVIv/V05z/2NTav9oWGn/RzI6/ygSF/8xIiP9WUc2r5OD
cAwAAAAAAAAAAIqEjAI3JTdgRCMv7o9nXf+WcW//dV5v/15Xdv80N1r/ND1l/1tZlP9TWZv/RW2p/yJW
nP8UOoX/JkiY/yA8jv8oM33/Mjl2/0BJff83RXX/OT1q/0NEaf9eUG7/ZFRl/0ExQP9AMDz/NScr/0Y0
L+ODcV9GxrutAQAAAAAAAAAAAAAAAGpSWxVPMi2vf2BM/pBsZf9rV23/UEdm/y0kQf9QRmX/Pz9o/yMs
Yv8oI1T/IB1Q/xEob/8ZOoz/FTKC/xktb/8fL1r/LTJZ/yMgTP8sJEv/QzdX/0MyVf86KUb/QzA8/0ky
O/9FLy78a1FFlMm4rgsAAAAAAAAAAAAAAAAAAAAAAAAAAHJdVS9vUEXNj2JR/ZlubP9hRlj/X0pi/0Ax
T/8WHj//Fx9F/yYaTv8iGVf/Iytn/zE+ef8sMmX/Njtq/yMoVP8nJFP/LyxO/zYtSf8zIz3/PjNO/2ZU
ZP9yWln/ZEVD/GxMRbeokogfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnIeGA4BfWkuKX1LbimJg/Usu
Pf8qIjX/Dg0q/wgHJ/8WFjn/ISBT/yYlZP9URXn/dmCM/4d0l/99bZv/U0p7/zk4W/8pKUD/MSg8/0Az
Qf9UQ0z/fVxf/4RhVfx9Xk3Mo4h7NdzHvgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4NbUAX5i
V0pAJynMGwce/gkIHP8JBh3/EwEb/xoJIv8uITr/YVJ1/6WFq//HqL7/uqOx/5h+l/9hR2j/MiY+/yUf
L/8uJCz/OSoq/2RCPf+DV1D8eFNHu5N3bjgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAg3VvA048Pi8mESGwFgUj7hQCI/4QABn/FQIZ/yYVI/9POz7/i2dp/7qTkP+5kZH/fF9k/zso
Nv8mGCv/Jhcm/zMgJf9JNTP+ZkM/6HZORp+GamEilYB8AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhTXBYlCCNhGAMiyREDGvYQBBf/DwUV/xUJGf8wHCL/Si8y/1An
MP84FyP/Ggga/xIIGv8kFiL/OSYp8kMtJ71PMy5SiHFuDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsCFAITARkXFgYdURgJG5cNBBbHCQkc3woO
GuoICBfuDQIb7xEBGuoSBBzcFAkXwRgMDo8kFhNGNh8TEjUaEQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEwYUCAcE
DR4NExo2ISEpThwbJV4YFiZfGA8jTRMIHDERBxMbFAcFBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAA/+AAAf8AAAD+AAAA+AAAAPgAAADgAAAA4AAAAMAAAACAAAAAgAAAAIAA
AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAYAAAAGAAAABwAAAA+AA
AAfgAAAH8AAAH/gAAB/+AAB//wAA///gB/8oAAAAEAAAACAAAAABACAAAAAAAEAEAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAABEFGgMfEiMuGhIneBsRJaQfFiqwKiY0qUFARZhRUVGJUlJSd1JS
UlhRUVEtUVFRBwAAAAAAAAAAAAAAADskOi4iCiGzIxEi+RgJGP8ZDRj/Fgoa/xsQH/8hFiH9Licv8EtI
Sd5SUlLIUlJSlVJSUicAAAAAAAAAADMhLU0eBh/rIQkg/ygWKP82JDP/Pio6/zUqPf9AMTv/Ny0z/zMm
LP80Jin9SkVD9lJSUtlSUlJHAAAAAEEnLTIkDxjsJA8n/ygbOv8nIkT/NSxL/zAuT/8yNFL/MT1k/y8v
Tf85LjP/JRcg/ygaIvxOSkm1UlJSL2VNVgQuEyG8KRkq/yQXOP8cF0L/IiRS/x8pZP8bSJP/GD+b/xtB
kf8oOmb/LSo9/xwOIv8YCRr/MiolvlFQTQxGKzE1Mxop+yseMv8gGkX/JBtG/ypltP8kaeD/FVjM/xY1
if8aKnH/HjyC/xsoV/8YEjv/Fwoe/yEaHvhMQDYmRCoweSoUJf8eFzz/HCNe/yU7ef8pX6H/LVCi/zFb
uv8sUKL/ESd5/yBczP8cXrP/Gilv/xkRJf8bExf/Oi4mZjQWJZ4eByT/JTFg/yxUlv87SXT/QEBj/y5J
m/8+c8z/L226/xYshv8cQq7/JVWZ/xg3gP8XHUr/Gw0i/zQpJoknChyhHgkm/zU0W/9TUnD/W05Z/zVB
ef8TJYD/OXnS/y1tzP8kMoX/KzZu/zZrsf8hI0v/Ihw2/x0NJf85LiiKKhUqfhwHJf9EO13/Y111/2pb
Z/8qQIf/GiVz/zlgrv8vYLP/GCZ2/xpCqf8nQ4T/JixY/yohOf8qICb/RDotazkiMTwnDCT8V0Fa/4Zt
dP9RR13/OEmB/0VRjv88Ro3/J0ee/xo1lv8iUbD/MUKB/ztEav9INkX/MScs+WxcTCtcR1QGNxssxZBr
Zv90YnD/Mzti/1hlo/89aLD/ITyM/yAzhP8uP37/M0mE/1BNdf9cTF7/OScu/0k4MbWXh3UDAAAAAFg9
OTyEYFLxbVRm/0c5Vv8kKlT/JB1S/x8zd/8kM3D/JitW/y0nS/8+ME7/VUJQ/1Y7POt7YlYvAAAAAAAA
AAAAAAAAhmBVXE0wOvESDyb/Ewon/zUuWv+OdJz/lYCe/0g8X/8rJTX/TDg9/39aU+2IaltOAAAAAAAA
AAAAAAAAAAAAAAAAAAA0Hyw9GAQjxRECGfwmFyT/cFFT/29MUv8jFCX/LRwl+1E3M716VU40AAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAABQBGQYXCBs8CwgZfg8QHKERBh2hEwcZehsPEDc2HxMFAAAAAAAA
AAAAAAAAAAAAAPAA///gAP//wAD//4AA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//4AB
///AA///4Af///AP//8=
</value>
</data>
</root>

View File

@@ -0,0 +1,20 @@

Microsoft Visual Studio Solution File, Format Version 11.00
# Visual C# Express 2010
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Updater", "Updater.csproj", "{3F5ABD01-B518-4104-B094-0BFAC8168862}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x86 = Debug|x86
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{3F5ABD01-B518-4104-B094-0BFAC8168862}.Debug|x86.ActiveCfg = Debug|x86
{3F5ABD01-B518-4104-B094-0BFAC8168862}.Debug|x86.Build.0 = Debug|x86
{3F5ABD01-B518-4104-B094-0BFAC8168862}.Release|x86.ActiveCfg = Release|x86
{3F5ABD01-B518-4104-B094-0BFAC8168862}.Release|x86.Build.0 = Release|x86
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

Binary file not shown.

View File

@@ -0,0 +1,3 @@
<?xml version="1.0"?>
<configuration>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>

Binary file not shown.

View File

@@ -0,0 +1,3 @@
<?xml version="1.0"?>
<configuration>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>

Some files were not shown because too many files have changed in this diff Show More