This commit is contained in:
2025-12-06 17:06:17 +08:00
parent 9dd458ae8b
commit 63a768bd80
4 changed files with 164 additions and 78 deletions

View File

@@ -419,7 +419,7 @@
<PackageReference Include="LibVLCSharp.WinForms" Version="3.9.4" />
<PackageReference Include="NLog" Version="6.0.3" />
<PackageReference Include="NLog.Config" Version="4.7.15" />
<PackageReference Include="ReaLTaiizor" Version="3.8.1.3" />
<PackageReference Include="ReaLTaiizor" Version="3.8.1.4" />
<PackageReference Include="VideoLAN.LibVLC.Windows" Version="3.0.21" />
<PackageReference Include="RestSharp" Version="110.2.0" />
<PackageReference Include="CsvHelper" Version="33.1.0" />

View File

@@ -61,9 +61,9 @@ namespace FATrace.OEMApp
txtRUInBagCode = new TextBox();
label5 = new Label();
tabPage2 = new TabPage();
btnStopHistoryPlay = new Button();
dataGridView1 = new DataGridView();
materialCard1 = new ReaLTaiizor.Controls.MaterialCard();
btnStopHistoryPlay = new Button();
label4 = new Label();
txtSearchCode = new TextBox();
btnHistoryVideoSearch = new Button();
@@ -72,13 +72,13 @@ namespace FATrace.OEMApp
label2 = new Label();
label1 = new Label();
PdtHistorySearchStart = new ReaLTaiizor.Controls.PoisonDateTime();
btnPlayHistoryVideo = new Button();
videoView1 = new LibVLCSharp.WinForms.VideoView();
tabPage3 = new TabPage();
metroProgressBar1 = new ReaLTaiizor.Controls.MetroProgressBar();
DownloadProgressBar = new ProgressBar();
btnStopLoadVideo = new Button();
btnNVRLogin = new Button();
imageList2 = new ImageList(components);
statusStrip1.SuspendLayout();
materialTabControl1.SuspendLayout();
tabPage1.SuspendLayout();
@@ -197,10 +197,11 @@ namespace FATrace.OEMApp
//
// txtCsvSaveState
//
txtCsvSaveState.Font = new Font("Microsoft YaHei UI", 10F, FontStyle.Bold);
txtCsvSaveState.Location = new Point(27, 264);
txtCsvSaveState.Name = "txtCsvSaveState";
txtCsvSaveState.ReadOnly = true;
txtCsvSaveState.Size = new Size(493, 32);
txtCsvSaveState.Size = new Size(493, 24);
txtCsvSaveState.TabIndex = 15;
//
// label12
@@ -330,6 +331,7 @@ namespace FATrace.OEMApp
//
txtRURawCode.Location = new Point(154, 177);
txtRURawCode.Name = "txtRURawCode";
txtRURawCode.ReadOnly = true;
txtRURawCode.Size = new Size(387, 32);
txtRURawCode.TabIndex = 9;
//
@@ -339,12 +341,12 @@ namespace FATrace.OEMApp
gridRULog.AllowUserToDeleteRows = false;
gridRULog.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
gridRULog.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
gridRULog.Location = new Point(585, 7);
gridRULog.Location = new Point(576, 7);
gridRULog.Name = "gridRULog";
gridRULog.ReadOnly = true;
gridRULog.RowHeadersVisible = false;
gridRULog.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
gridRULog.Size = new Size(1281, 338);
gridRULog.Size = new Size(1290, 338);
gridRULog.TabIndex = 8;
//
// btnRawStopLoadVideo
@@ -381,6 +383,7 @@ namespace FATrace.OEMApp
//
txtRURawName.Location = new Point(154, 123);
txtRURawName.Name = "txtRURawName";
txtRURawName.ReadOnly = true;
txtRURawName.Size = new Size(387, 32);
txtRURawName.TabIndex = 3;
//
@@ -398,6 +401,7 @@ namespace FATrace.OEMApp
//
txtRUInBagCode.Location = new Point(154, 65);
txtRUInBagCode.Name = "txtRUInBagCode";
txtRUInBagCode.ReadOnly = true;
txtRUInBagCode.Size = new Size(387, 32);
txtRUInBagCode.TabIndex = 1;
//
@@ -414,10 +418,8 @@ namespace FATrace.OEMApp
//
// tabPage2
//
tabPage2.Controls.Add(btnStopHistoryPlay);
tabPage2.Controls.Add(dataGridView1);
tabPage2.Controls.Add(materialCard1);
tabPage2.Controls.Add(btnPlayHistoryVideo);
tabPage2.Controls.Add(videoView1);
tabPage2.Font = new Font("Microsoft YaHei UI", 14.25F, FontStyle.Bold, GraphicsUnit.Point, 134);
tabPage2.ImageKey = "Load.png";
@@ -429,27 +431,19 @@ namespace FATrace.OEMApp
tabPage2.Text = "录像历史数据";
tabPage2.UseVisualStyleBackColor = true;
//
// btnStopHistoryPlay
//
btnStopHistoryPlay.Location = new Point(628, 14);
btnStopHistoryPlay.Name = "btnStopHistoryPlay";
btnStopHistoryPlay.Size = new Size(116, 45);
btnStopHistoryPlay.TabIndex = 12;
btnStopHistoryPlay.Text = "停止播放";
btnStopHistoryPlay.UseVisualStyleBackColor = true;
btnStopHistoryPlay.Click += btnStopHistoryPlay_Click;
//
// dataGridView1
//
dataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
dataGridView1.Location = new Point(17, 328);
dataGridView1.Location = new Point(17, 235);
dataGridView1.Name = "dataGridView1";
dataGridView1.Size = new Size(483, 584);
dataGridView1.ReadOnly = true;
dataGridView1.Size = new Size(835, 677);
dataGridView1.TabIndex = 11;
//
// materialCard1
//
materialCard1.BackColor = Color.FromArgb(255, 255, 255);
materialCard1.Controls.Add(btnStopHistoryPlay);
materialCard1.Controls.Add(label4);
materialCard1.Controls.Add(txtSearchCode);
materialCard1.Controls.Add(btnHistoryVideoSearch);
@@ -465,9 +459,20 @@ namespace FATrace.OEMApp
materialCard1.MouseState = ReaLTaiizor.Helper.MaterialDrawHelper.MaterialMouseState.HOVER;
materialCard1.Name = "materialCard1";
materialCard1.Padding = new Padding(14);
materialCard1.Size = new Size(483, 287);
materialCard1.Size = new Size(836, 194);
materialCard1.TabIndex = 10;
//
// btnStopHistoryPlay
//
btnStopHistoryPlay.Location = new Point(642, 132);
btnStopHistoryPlay.Name = "btnStopHistoryPlay";
btnStopHistoryPlay.Size = new Size(116, 45);
btnStopHistoryPlay.TabIndex = 12;
btnStopHistoryPlay.Text = "停止播放";
btnStopHistoryPlay.UseVisualStyleBackColor = true;
btnStopHistoryPlay.Visible = false;
btnStopHistoryPlay.Click += btnStopHistoryPlay_Click;
//
// label4
//
label4.AutoSize = true;
@@ -488,7 +493,7 @@ namespace FATrace.OEMApp
// btnHistoryVideoSearch
//
btnHistoryVideoSearch.ForeColor = Color.DimGray;
btnHistoryVideoSearch.Location = new Point(125, 214);
btnHistoryVideoSearch.Location = new Point(295, 121);
btnHistoryVideoSearch.Name = "btnHistoryVideoSearch";
btnHistoryVideoSearch.Size = new Size(210, 56);
btnHistoryVideoSearch.TabIndex = 5;
@@ -500,7 +505,7 @@ namespace FATrace.OEMApp
//
label3.AutoSize = true;
label3.ForeColor = Color.Gray;
label3.Location = new Point(288, 117);
label3.Location = new Point(647, 24);
label3.Name = "label3";
label3.Size = new Size(88, 26);
label3.TabIndex = 4;
@@ -509,7 +514,7 @@ namespace FATrace.OEMApp
// PdtHistorySearchEnd
//
PdtHistorySearchEnd.FontSize = ReaLTaiizor.Extension.Poison.PoisonDateTimeSize.Medium;
PdtHistorySearchEnd.Location = new Point(268, 155);
PdtHistorySearchEnd.Location = new Point(627, 62);
PdtHistorySearchEnd.MinimumSize = new Size(0, 29);
PdtHistorySearchEnd.Name = "PdtHistorySearchEnd";
PdtHistorySearchEnd.Size = new Size(131, 32);
@@ -519,7 +524,7 @@ namespace FATrace.OEMApp
//
label2.AutoSize = true;
label2.ForeColor = Color.Gray;
label2.Location = new Point(75, 116);
label2.Location = new Point(501, 24);
label2.Name = "label2";
label2.Size = new Size(88, 26);
label2.TabIndex = 2;
@@ -539,29 +544,19 @@ namespace FATrace.OEMApp
// PdtHistorySearchStart
//
PdtHistorySearchStart.FontSize = ReaLTaiizor.Extension.Poison.PoisonDateTimeSize.Medium;
PdtHistorySearchStart.Location = new Point(55, 154);
PdtHistorySearchStart.Location = new Point(481, 62);
PdtHistorySearchStart.MinimumSize = new Size(0, 29);
PdtHistorySearchStart.Name = "PdtHistorySearchStart";
PdtHistorySearchStart.Size = new Size(131, 32);
PdtHistorySearchStart.TabIndex = 0;
//
// btnPlayHistoryVideo
//
btnPlayHistoryVideo.Location = new Point(506, 14);
btnPlayHistoryVideo.Name = "btnPlayHistoryVideo";
btnPlayHistoryVideo.Size = new Size(116, 45);
btnPlayHistoryVideo.TabIndex = 8;
btnPlayHistoryVideo.Text = "button1";
btnPlayHistoryVideo.UseVisualStyleBackColor = true;
btnPlayHistoryVideo.Click += btnPlayHistoryVideo_Click;
//
// videoView1
//
videoView1.BackColor = Color.Black;
videoView1.Location = new Point(506, 65);
videoView1.Location = new Point(858, 24);
videoView1.MediaPlayer = null;
videoView1.Name = "videoView1";
videoView1.Size = new Size(1394, 847);
videoView1.Size = new Size(1042, 888);
videoView1.TabIndex = 7;
videoView1.Text = "videoView1";
//
@@ -629,6 +624,13 @@ namespace FATrace.OEMApp
btnNVRLogin.UseVisualStyleBackColor = true;
btnNVRLogin.Click += btnNVRLogin_Click;
//
// imageList2
//
imageList2.ColorDepth = ColorDepth.Depth32Bit;
imageList2.ImageStream = (ImageListStreamer)resources.GetObject("imageList2.ImageStream");
imageList2.TransparentColor = Color.Transparent;
imageList2.Images.SetKeyName(0, "About.png");
//
// MainApp
//
AutoScaleDimensions = new SizeF(8F, 17F);
@@ -681,7 +683,6 @@ namespace FATrace.OEMApp
private ProgressBar DownloadProgressBar;
private ReaLTaiizor.Controls.MetroProgressBar metroProgressBar1;
private LibVLCSharp.WinForms.VideoView videoView1;
private Button btnPlayHistoryVideo;
private ReaLTaiizor.Controls.MaterialCard materialCard1;
private ReaLTaiizor.Controls.PoisonDateTime PdtHistorySearchStart;
private Label label1;
@@ -719,5 +720,6 @@ namespace FATrace.OEMApp
private Label label9;
private Label label12;
private TextBox txtCsvSaveState;
private ImageList imageList2;
}
}

View File

@@ -29,14 +29,13 @@ namespace FATrace.OEMApp
// 历史表列头中文映射
private readonly Dictionary<string, string> _historyHeaderMap = new Dictionary<string, string>
{
{ nameof(VideoAction.Id), "编号" },
{ nameof(VideoAction.Code), "条码" },
{ nameof(VideoAction.User), "用户" },
{ nameof(VideoAction.VideoFilePath), "视频路径" },
{ nameof(VideoAction.VideoName), "视频名称" },
{ nameof(VideoAction.StartTime), "开始时间" },
{ nameof(VideoAction.EndTime), "结束时间" },
{ nameof(VideoAction.CreateTime), "创建时间" }
{ nameof(OEMRawUse.InBagCode), "内袋二维码" },
{ nameof(OEMRawUse.RawName), "原料名称" },
{ nameof(OEMRawUse.RawCode), "原料条码" },
{ nameof(OEMRawUse.VideoFilePath), "视频路径" },
{ nameof(OEMRawUse.VideoName), "视频名称" },
{ nameof(OEMRawUse.User), "用户" },
{ nameof(OEMRawUse.CreateTime), "创建时间" }
};
private int _lvLogMaxItems = 1000;
@@ -101,6 +100,7 @@ namespace FATrace.OEMApp
private PLCDataService PLCDataService { get; set; }
private TimeClearDataService TimeClearService { get; set; }
private System.Windows.Forms.Timer _statusTimer;
/// <summary>
/// 主窗体加载:
@@ -175,8 +175,7 @@ namespace FATrace.OEMApp
_ = UpdateNasStatusAsync();
_ = UpdateNvrStatusAsync();
StartStatusTimer();
//materialListView1.DataBindings
try
{
var systemName = Program.SystemName;
@@ -211,11 +210,18 @@ namespace FATrace.OEMApp
//解析Code条码数据内包条码数据
CurParsedCodeInfo = NVRCom.ParseCodeFull(Code);
BeginInvoke(new Action(() =>
{
txtRUInBagCode.Text = CurParsedCodeInfo.Code;
txtRURawName.Text= CurParsedCodeInfo.RawName;
txtRURawCode.Text = CurParsedCodeInfo.RawCode;
}));
var taskId = DownloadTaskWorker.Instance.Enqueue(
CurParsedCodeInfo,
user: CurUserName,
start: DateTime.Now,
end: DateTime.Now.AddSeconds(DownloadTaskWorker.VideoTime+2)
start: DateTime.Now.AddDays(-2),
end: DateTime.Now.AddDays(-2).AddSeconds(DownloadTaskWorker.VideoTime + 2)
);
//MessageBox.Show($"[Test] 已入队下载任务Id={taskId}");
@@ -412,20 +418,8 @@ namespace FATrace.OEMApp
}
#endregion
/// <summary>
/// 测试手动播放
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnPlayHistoryVideo_Click(object sender, EventArgs e)
{
string path = "D:\\Downtest_Channel2025-09-12 102454.mp4";
_mediaPlayer.Play(new Media(_libVLC, path));
}
/// <summary>
/// 停止播放当前的视频文件
/// </summary>
@@ -455,7 +449,7 @@ namespace FATrace.OEMApp
/// 采用 BindingList + BindingSource使数据变化自动触发 UI 刷新
/// </summary>
private BindingSource historyBindingSource { get; set; }
private BindingList<VideoAction> historyVideoBindingList { get; set; }
private BindingList<OEMRawUse> historyVideoBindingList { get; set; }
/// <summary>
@@ -464,7 +458,7 @@ namespace FATrace.OEMApp
private void InitHistoryGridBinding()
{
historyBindingSource = new BindingSource();
historyVideoBindingList = new BindingList<VideoAction>();
historyVideoBindingList = new BindingList<OEMRawUse>();
historyBindingSource.DataSource = historyVideoBindingList;
// 绑定到 WinForms 原生 DataGridView
dataGridView1.AutoGenerateColumns = true;
@@ -482,12 +476,20 @@ namespace FATrace.OEMApp
private void btnHistoryVideoSearch_Click(object sender, EventArgs e)
{
var query = FSqlContext.FDb.Select<VideoAction>();
var query = FSqlContext.FDb.Select<OEMRawUse>();
if (!string.IsNullOrEmpty(txtSearchCode.Text.Trim()))
{
query = query.Where(a => a.Code!.Contains(txtSearchCode.Text.Trim()));
var kw = txtSearchCode.Text.Trim();
query = query.Where(a => (a.InBagCode != null && a.InBagCode.Contains(kw))
|| (a.RawCode != null && a.RawCode.Contains(kw))
|| (a.RawName != null && a.RawName.Contains(kw)));
}
query.Where(a => a.CreateTime >= PdtHistorySearchStart.Value && a.CreateTime <= PdtHistorySearchEnd.Value);
// 日期范围起始日00:00:00到结束日次日00:00:00不含覆盖整天
var startDate = PdtHistorySearchStart.Value.Date;
var endDate = PdtHistorySearchEnd.Value.Date;
if (endDate < startDate) endDate = startDate;
var endExclusive = endDate.AddDays(1);
query = query.Where(a => a.CreateTime >= startDate && a.CreateTime < endExclusive);
// 拉取结果并刷新绑定列表
var resultList = query.ToList();
@@ -526,9 +528,9 @@ namespace FATrace.OEMApp
try
{
var row = dataGridView1.Rows[e.RowIndex];
if (row?.DataBoundItem is VideoAction va)
if (row?.DataBoundItem is OEMRawUse item)
{
var path = va.VideoFilePath;
var path = item.VideoFilePath;
if (string.IsNullOrWhiteSpace(path))
{
MessageBox.Show("该记录没有可播放的视频路径。", "播放提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
@@ -557,18 +559,62 @@ namespace FATrace.OEMApp
{
if (dataGridView1 == null || dataGridView1.Columns.Count == 0) return;
var allowedProps = new HashSet<string>
{
nameof(OEMRawUse.InBagCode),
nameof(OEMRawUse.RawName),
nameof(OEMRawUse.RawCode),
nameof(OEMRawUse.VideoFilePath),
nameof(OEMRawUse.VideoName),
nameof(OEMRawUse.User),
nameof(OEMRawUse.CreateTime)
};
foreach (DataGridViewColumn col in dataGridView1.Columns)
{
var propName = col.DataPropertyName;
// 设置列头中文
if (!string.IsNullOrWhiteSpace(propName) && _historyHeaderMap.TryGetValue(propName, out var headerText))
{
col.HeaderText = headerText;
}
switch (col.Name)
{
case "InBagCode":
col.Width = 400;
break;
case "RawName":
col.Width = 200;
break;
case "RawCode":
col.Width = 200;
break;
case "VideoFilePath":
col.Width = 490;
break;
case "VideoName":
col.Width = 450;
break;
case "User":
col.Width = 100;
break;
case "CreateTime":
col.Width = 200;
break;
default:
break;
}
// 隐藏 Id 列
if (propName == nameof(VideoAction.Id))
if (propName == nameof(OEMRawUse.Id))
{
col.Visible = false;
continue;
}
// 仅显示指定字段,其他隐藏
if (!allowedProps.Contains(propName))
{
col.Visible = false;
continue;
@@ -585,7 +631,7 @@ namespace FATrace.OEMApp
//}
// 时间列格式化
if (propName is nameof(VideoAction.StartTime) or nameof(VideoAction.EndTime) or nameof(VideoAction.CreateTime))
if (propName is nameof(OEMRawUse.CreateTime))
{
col.DefaultCellStyle.Format = "yyyy-MM-dd HH:mm:ss";
col.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
@@ -610,11 +656,13 @@ namespace FATrace.OEMApp
/// <param name="e"></param>
private void btnTestAction_Click(object sender, EventArgs e)
{
if (CurParsedCodeInfo==null) return ;
var taskId = DownloadTaskWorker.Instance.Enqueue(
CurParsedCodeInfo,
user: CurUserName,
start: DateTime.Now,
end: DateTime.Now.AddSeconds(DownloadTaskWorker.VideoTime)
start: DateTime.Now.AddDays(-2),
end: DateTime.Now.AddDays(-2).AddSeconds(DownloadTaskWorker.VideoTime)
);
//MessageBox.Show($"[Test] 已入队下载任务Id={taskId}");
}
@@ -947,7 +995,7 @@ namespace FATrace.OEMApp
}
else
{
DownloadProgressBarMain.Value = 0;
BeginInvoke(new Action(() => DownloadProgressBarMain.Value = 0));
}
_lastProgressLogged = -1;
}
@@ -1044,7 +1092,7 @@ namespace FATrace.OEMApp
else
{
try { BeginInvoke(new Action(() => DownloadFileName.Text = name ?? string.Empty)); } catch { }
}
}
catch { }

View File

@@ -128,7 +128,7 @@
AAEAAAD/////AQAAAAAAAAAMAgAAAEZTeXN0ZW0uV2luZG93cy5Gb3JtcywgQ3VsdHVyZT1uZXV0cmFs
LCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAAAmU3lzdGVtLldpbmRvd3MuRm9ybXMu
SW1hZ2VMaXN0U3RyZWFtZXIBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAAaCEAAAJNU0Z0AUkBTAIBAQgB
AAGIAQEBiAEBARABAAEQAQAE/wEhAQAI/wFCAU0BNgcAATYDAAEoAwABQAMAATADAAEBAQABIAYAATD/
AAG4AQEBuAEBARABAAEQAQAE/wEhAQAI/wFCAU0BNgcAATYDAAEoAwABQAMAATADAAEBAQABIAYAATD/
AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AFIAAdsBlgESAf8B2wGWARIB/wQAAxIBGANJAYgB
2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wQAAdsB
lgESAf8B2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wHbAZYBEgH/AdsBlgESAf8UAAHbAZYB
@@ -271,6 +271,42 @@
/gHHAfEBwAGDAewBAwHPAfwBxwHxAv8B7wHzAd8B+AHHAfEBwAGDAewBcwHzAfABhwHwAd4BuQHsAXMB
4QHgAQMB4AG+Ab0B7wHzAeABwQGAAQABvgG9AeABAwHwAWMB8AEHAZ4BvQHwAQcB+AE/AfABDwHBAYEC
/wH+AR8B8QHHAuME/wH9Ad8C/ws=
</value>
</data>
<metadata name="imageList2.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>257, 17</value>
</metadata>
<data name="imageList2.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAEZTeXN0ZW0uV2luZG93cy5Gb3JtcywgQ3VsdHVyZT1uZXV0cmFs
LCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAAAmU3lzdGVtLldpbmRvd3MuRm9ybXMu
SW1hZ2VMaXN0U3RyZWFtZXIBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAA/gUAAAJNU0Z0AUkBTAMBAQAB
EAEAARABAAEQAQABEAEABP8BIQEACP8BQgFNATYHAAE2AwABKAMAAUADAAEQAwABAQEAASAGAAEQKgAB
2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wHbAZYBEgH/5AAB2wGWARIB/wHbAZYBEgH/AdsB
lgESAf8B2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wHbAZYBEgH/AdsBlgESAf/YAAHbAZYB
EgH/AdsBlgESAf8B2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B
2wGWARIB/wHbAZYBEgH/AdsBlgESAf/QAAHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wHbAZYBEgH/AdsB
lgESAf8IAAHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B2wGWARIB/8wAAdsB
lgESAf8B2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wwAAdsBlgESAf8B2wGWARIB/wHbAZYB
EgH/AdsBlgESAf8B2wGWARIB/8gAAdsBlgESAf8B2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B2wGWARIB
/wHbAZYBEgH/CAAB2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B
2wGWARIB/8QAAdsBlgESAf8B2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wHbAZYBEgH/CAAB
2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B2wGWARIB/8QAAdsB
lgESAf8B2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wwAAW0BYAFHAagB2wGWARIB/wHbAZYB
EgH/AdsBlgESAf8B2wGWARIB/wHbAZYBEgH/AdsBlgESAf/EAAHbAZYBEgH/AdsBlgESAf8B2wGWARIB
/wHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wMGAQgIAAHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wHbAZYB
EgH/AdsBlgESAf8B2wGWARIB/8QAAdsBlgESAf8B2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B2wGWARIB
/wHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wHbAZYBEgH/AdsB
lgESAf8B2wGWARIB/wHbAZYBEgH/xAADEgEYAdsBlgESAf8B2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B
2wGWARIB/wHbAZYBEgH/BAABggFtAUMBvwHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wHbAZYBEgH/AdsB
lgESAf/MAAHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wgAAdsB
lgESAf8B2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B2wGWARIB/9AAAdsBlgESAf8B2wGWARIB/wHbAZYB
EgH/AdsBlgESAf8B2wGWARIB/wHbAZYBEgH/AUsBSAFBAXgB2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B
2wGWARIB/9gAAdsBlgESAf8B2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wHbAZYBEgH/AdsB
lgESAf8B2wGWARIB/wHbAZYBEgH/4AADEgEYAdsBlgESAf8B2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B
2wGWARIB//8A1QABQgFNAT4HAAE+AwABKAMAAUADAAEQAwABAQEAAQEFAAGAFwAD/wEAAfwBHwYAAfAB
BwYAAeABAwYAAcEBgQYAAsEGAAGBAYAGAAGBAYAGAAGDAYAGAAGAAcAGAAGABwABgAGBBgABwAHBBgAB
4AEDBgAB8AEHBgAB+AEfBgAC/wYACw==
</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />