diff --git a/FATrace.OEMApp/FATrace.OEMApp.csproj b/FATrace.OEMApp/FATrace.OEMApp.csproj index e0d72f3..2883a18 100644 --- a/FATrace.OEMApp/FATrace.OEMApp.csproj +++ b/FATrace.OEMApp/FATrace.OEMApp.csproj @@ -419,7 +419,7 @@ - + diff --git a/FATrace.OEMApp/MainApp.Designer.cs b/FATrace.OEMApp/MainApp.Designer.cs index 0cc57b8..4fee8f6 100644 --- a/FATrace.OEMApp/MainApp.Designer.cs +++ b/FATrace.OEMApp/MainApp.Designer.cs @@ -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; } } \ No newline at end of file diff --git a/FATrace.OEMApp/MainApp.cs b/FATrace.OEMApp/MainApp.cs index effe215..e4746e5 100644 --- a/FATrace.OEMApp/MainApp.cs +++ b/FATrace.OEMApp/MainApp.cs @@ -29,14 +29,13 @@ namespace FATrace.OEMApp // 历史表列头中文映射 private readonly Dictionary _historyHeaderMap = new Dictionary { - { 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; + /// /// 主窗体加载: @@ -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 - /// - /// 测试手动播放 - /// - /// - /// - private void btnPlayHistoryVideo_Click(object sender, EventArgs e) - { - string path = "D:\\Downtest_Channel2025-09-12 102454.mp4"; - _mediaPlayer.Play(new Media(_libVLC, path)); - } - /// /// 停止播放当前的视频文件 /// @@ -455,7 +449,7 @@ namespace FATrace.OEMApp /// 采用 BindingList + BindingSource,使数据变化自动触发 UI 刷新 /// private BindingSource historyBindingSource { get; set; } - private BindingList historyVideoBindingList { get; set; } + private BindingList historyVideoBindingList { get; set; } /// @@ -464,7 +458,7 @@ namespace FATrace.OEMApp private void InitHistoryGridBinding() { historyBindingSource = new BindingSource(); - historyVideoBindingList = new BindingList(); + historyVideoBindingList = new BindingList(); 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(); + var query = FSqlContext.FDb.Select(); 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 + { + 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 /// 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 { } diff --git a/FATrace.OEMApp/MainApp.resx b/FATrace.OEMApp/MainApp.resx index 31552f1..c258c49 100644 --- a/FATrace.OEMApp/MainApp.resx +++ b/FATrace.OEMApp/MainApp.resx @@ -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= + + + + 257, 17 + + + + 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==