diff --git a/.vs/VisionEdit/v14/.suo b/.vs/VisionEdit/v14/.suo
index 4abcd9c..de35ceb 100644
Binary files a/.vs/VisionEdit/v14/.suo and b/.vs/VisionEdit/v14/.suo differ
diff --git a/CaliperTool/CaliperTool.cs b/CaliperTool/Caliper.cs
similarity index 80%
rename from CaliperTool/CaliperTool.cs
rename to CaliperTool/Caliper.cs
index ef06b1e..9af1f9f 100644
--- a/CaliperTool/CaliperTool.cs
+++ b/CaliperTool/Caliper.cs
@@ -110,57 +110,22 @@ namespace CaliperTool
}
set { _resultCol = value; }
}
-
- public HObject inputImage { get; set; } = null;
-
- public ToolRunStatu toolRunStatu { get; set; } = ToolRunStatu.Not_Run;
-
- public SoftwareRunState softwareRunState { get; set; } = SoftwareRunState.Debug;
-
- public string runMessage
- {
- get
- {
- throw new NotImplementedException();
- }
-
- set
- {
- throw new NotImplementedException();
- }
- }
-
- public string runTime
- {
- get
- {
- throw new NotImplementedException();
- }
-
- set
- {
- throw new NotImplementedException();
- }
- }
-
- public void DispImage()
+ public override void DispImage()
{
if (inputImage != null)
{
- FormCaliper.Instance.myHwindow.HobjectToHimage(inputImage);
+ FormCaliper.Instance.myHwindow.HalconWindow.DispObj(inputImage);
}
}
- internal void DrawExpectLine(HWindow_Final myHwindow)
+ internal void DrawExpectLine(HWindow myHwindow)
{
if (inputImage != null)
{
try
{
- myHwindow.DrawModel = true;
- myHwindow.Focus();
- HOperatorSet.SetColor(myHwindow.hWindowControl.HalconWindow, new HTuple("green"));
- HOperatorSet.DrawRectangle2Mod(myHwindow.hWindowControl.HalconWindow, expectRecStartRow, expectRecStartColumn, expectAngle, length1, length2,
+ HOperatorSet.SetColor(myHwindow, new HTuple("green"));
+ HOperatorSet.DrawRectangle2Mod(myHwindow, expectRecStartRow, expectRecStartColumn, expectAngle, length1, length2,
out expectRecStartRow, out expectRecStartColumn, out expectAngle, out length1, out length2);
if (inputPose != null)
@@ -177,29 +142,27 @@ namespace CaliperTool
FormCaliper.Instance.tbx_caliperLength1.Text = length1.TupleString("10.3f");
FormCaliper.Instance.tbx_caliperLength2.Text = length2.TupleString("10.3f");
- myHwindow.DrawModel = false;
-
// Run();
}
catch (Exception ex)
{
- FormCaliper.Instance.TextBoxMessageDisp(ex.Message, System.Drawing.Color.Red);
+ FormCaliper.Instance.SetToolStatus(ex.Message, ToolRunStatu.Tool_Run_Error);
}
}
else
{
- FormCaliper.Instance.TextBoxMessageDisp("图像为空", System.Drawing.Color.Red);
+ FormCaliper.Instance.SetToolStatus("图像为空", ToolRunStatu.Not_Asign_Input_Image);
}
}
public void UpdateImage()
{
- FormCaliper.Instance.myHwindow.ClearWindow();
+ FormCaliper.Instance.myHwindow.HalconWindow.ClearWindow();
DispImage();
}
- public void Run(SoftwareRunState softwareRunState)
+ public override void Run(SoftwareRunState softwareRunState)
{
HTuple HMeasureHandle = new HTuple();
HTuple resultRow, resultCol;
@@ -207,7 +170,7 @@ namespace CaliperTool
{
if(softwareRunState == SoftwareRunState.Debug)
{
- FormCaliper.Instance.TextBoxMessageDisp("图像为空", System.Drawing.Color.Red);
+ FormCaliper.Instance.SetToolStatus("图像为空", ToolRunStatu.Not_Asign_Input_Image);
}
toolRunStatu = ToolRunStatu.Not_Input_Image;
return;
@@ -248,10 +211,10 @@ namespace CaliperTool
HOperatorSet.GenCrossContourXld(out crossDisp, ResulttRow, ResultCol, new HTuple(80), new HTuple(0));
if(softwareRunState == SoftwareRunState.Debug)
{
- DispMainWindow(FormCaliper.Instance.myHwindow);
+ DispMainWindow(FormCaliper.Instance.myHwindow.HalconWindow);
FormCaliper.Instance.tbx_resultStartRow.Text = ResulttRow.ToString();
FormCaliper.Instance.tbx_resultStartCol.Text = ResultCol.ToString();
- FormCaliper.Instance.TextBoxMessageDisp("运行成功", System.Drawing.Color.Green);
+ FormCaliper.Instance.SetToolStatus("运行成功", ToolRunStatu.Succeed);
}
// 参数传递
ParamsTrans();
@@ -262,7 +225,7 @@ namespace CaliperTool
toolRunStatu = ToolRunStatu.Not_Succeed;
if (softwareRunState == SoftwareRunState.Debug)
{
- FormCaliper.Instance.TextBoxMessageDisp("工具运行异常" + ex.Message, System.Drawing.Color.Red);
+ FormCaliper.Instance.SetToolStatus("工具运行异常" + ex.Message, ToolRunStatu.Tool_Run_Error);
}
}
finally
@@ -287,20 +250,36 @@ namespace CaliperTool
}
- public void DispMainWindow(HWindow_Final window)
+ public override void DispMainWindow(HWindow window)
{
// 显示矩形
- if (dispRec)
+ if (dispRec && contoursDisp != null)
{
- window.DispObj(contoursDisp, "blue");
+ window.SetColor("blue");
+ window.DispObj(contoursDisp);
}
// 显示交点
- if (dispCross)
+ if (dispCross && crossDisp != null)
{
- window.DispObj(crossDisp, "green");
+ window.SetColor("green");
+ window.DispObj(crossDisp);
}
//显示找到的线
// window.DispObj(LineDisp, "green");
}
+
+ public void SetToolStatusDisp()
+ {
+ FormCaliper.Instance.lb_RunStatus.Text = toolRunStatu == ToolRunStatu.Succeed ? "工具运行成功!" : $"工具运行异常, 异常原因:{runMessage}";
+ FormCaliper.Instance.lb_RunTime.Text = runTime;
+ if (toolRunStatu == ToolRunStatu.Succeed)
+ {
+ FormCaliper.Instance.statusStrip.BackColor = System.Drawing.Color.LimeGreen;
+ }
+ else
+ {
+ FormCaliper.Instance.statusStrip.BackColor = System.Drawing.Color.Red;
+ }
+ }
}
}
diff --git a/CaliperTool/CaliperTool.csproj b/CaliperTool/CaliperTool.csproj
index 3121ecb..f074685 100644
--- a/CaliperTool/CaliperTool.csproj
+++ b/CaliperTool/CaliperTool.csproj
@@ -45,7 +45,7 @@
-
+
Form
@@ -76,12 +76,8 @@
{7CD50B44-BF56-4E8E-8FA1-05F6968C1835}
ToolBase
-
- {6b38d68f-e77b-4761-bde5-a261ea8925dd}
- LogForm
-
- {d4e052b9-e541-4b67-a1f9-273073ef1d4b}
+ {D4E052B9-E541-4B67-A1F9-273073EF1D4B}
Logger
diff --git a/CaliperTool/CaliperToolRun.cs b/CaliperTool/CaliperToolRun.cs
index 4cd0862..0cfde12 100644
--- a/CaliperTool/CaliperToolRun.cs
+++ b/CaliperTool/CaliperToolRun.cs
@@ -15,6 +15,7 @@ using CommonMethods;
using CommonMethods.Interface;
using FormLib;
using HalconDotNet;
+using Logger;
using System;
using System.Collections.Generic;
using System.Drawing;
@@ -38,7 +39,7 @@ namespace CaliperTool
if (L_toolList[toolIndex].toolInput[j].IOName == "InputImage" && L_toolList[toolIndex].GetInput(L_toolList[toolIndex].toolInput[j].IOName).value == null)
{
selectNode.ForeColor = Color.Red;
- Logger.LoggerClass.WriteLog($"{L_toolList[toolIndex].toolName} 无输入图像");
+ LoggerClass.WriteLog($"{L_toolList[toolIndex].toolName} 无输入图像");
break;
}
else
@@ -46,9 +47,9 @@ namespace CaliperTool
if (L_toolList[toolIndex].GetInput(L_toolList[toolIndex].toolInput[j].IOName).value != null)
{
string sourceFrom = L_toolList[toolIndex].GetInput(L_toolList[toolIndex].toolInput[j].IOName).value.ToString();
- string sourceToolName = Regex.Split(sourceFrom, " . ")[0];
- sourceToolName = sourceToolName.Substring(3, Regex.Split(sourceFrom, " . ")[0].Length - 3);
- string toolItem = Regex.Split(sourceFrom, " . ")[1];
+ string sourceToolName = Regex.Split(sourceFrom, "->")[0];
+ sourceToolName = sourceToolName.Substring(3, Regex.Split(sourceFrom, "->")[0].Length - 3);
+ string toolItem = Regex.Split(sourceFrom, "->")[1];
if (L_toolList[toolIndex].toolInput[j].IOName == "InputImage")
{
myCaliper.inputImage = myJob.GetToolInfoByToolName(sourceToolName).GetOutput(toolItem).value as HObject;
@@ -72,7 +73,7 @@ namespace CaliperTool
myCaliper.Run(SoftwareRunState.Release);
if (myCaliper.toolRunStatu == ToolRunStatu.Succeed)
{
- myCaliper.DispMainWindow(FormImageWindow.Instance.myHWindow);
+ myCaliper.DispMainWindow(FormImageWindow.Instance.myHWindow.DispHWindow);
myJob.FormLogDisp(L_toolList[toolIndex].toolName + " 运行成功", Color.Green, selectNode);
}
else
diff --git a/CaliperTool/FormCaliper.Designer.cs b/CaliperTool/FormCaliper.Designer.cs
index 6de3af7..11185b2 100644
--- a/CaliperTool/FormCaliper.Designer.cs
+++ b/CaliperTool/FormCaliper.Designer.cs
@@ -45,7 +45,6 @@
this.btn_moveCliperRegion = new System.Windows.Forms.Button();
this.cbx_edgeSelect = new System.Windows.Forms.ComboBox();
this.tbx_resultStartCol = new System.Windows.Forms.TextBox();
- this.txbLog = new System.Windows.Forms.TextBox();
this.splitContainer1 = new System.Windows.Forms.SplitContainer();
this.panel1 = new System.Windows.Forms.Panel();
this.groupBox4 = new System.Windows.Forms.GroupBox();
@@ -63,6 +62,11 @@
this.groupBox2 = new System.Windows.Forms.GroupBox();
this.label7 = new System.Windows.Forms.Label();
this.label9 = new System.Windows.Forms.Label();
+ this.panel2 = new System.Windows.Forms.Panel();
+ this.statusStrip = new System.Windows.Forms.StatusStrip();
+ this.lb_RunStatus = new System.Windows.Forms.ToolStripStatusLabel();
+ this.lb_Split = new System.Windows.Forms.ToolStripStatusLabel();
+ this.lb_RunTime = new System.Windows.Forms.ToolStripStatusLabel();
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
this.splitContainer1.Panel1.SuspendLayout();
this.splitContainer1.Panel2.SuspendLayout();
@@ -71,6 +75,7 @@
this.groupBox3.SuspendLayout();
this.groupBox1.SuspendLayout();
this.groupBox2.SuspendLayout();
+ this.statusStrip.SuspendLayout();
this.SuspendLayout();
//
// tbx_resultStartRow
@@ -242,16 +247,6 @@
this.tbx_resultStartCol.Size = new System.Drawing.Size(71, 21);
this.tbx_resultStartCol.TabIndex = 104;
//
- // txbLog
- //
- this.txbLog.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
- | System.Windows.Forms.AnchorStyles.Right)));
- this.txbLog.Location = new System.Drawing.Point(1, 487);
- this.txbLog.Name = "txbLog";
- this.txbLog.ReadOnly = true;
- this.txbLog.Size = new System.Drawing.Size(1127, 21);
- this.txbLog.TabIndex = 276;
- //
// splitContainer1
//
this.splitContainer1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
@@ -267,6 +262,7 @@
// splitContainer1.Panel2
//
this.splitContainer1.Panel2.BackColor = System.Drawing.Color.White;
+ this.splitContainer1.Panel2.Controls.Add(this.panel2);
this.splitContainer1.Panel2.Controls.Add(this.groupBox4);
this.splitContainer1.Panel2.Controls.Add(this.groupBox3);
this.splitContainer1.Panel2.Controls.Add(this.groupBox1);
@@ -452,12 +448,49 @@
this.label9.TabIndex = 105;
this.label9.Text = "中心列坐标:";
//
+ // panel2
+ //
+ this.panel2.Location = new System.Drawing.Point(-566, 485);
+ this.panel2.Name = "panel2";
+ this.panel2.Size = new System.Drawing.Size(1127, 25);
+ this.panel2.TabIndex = 276;
+ //
+ // statusStrip
+ //
+ this.statusStrip.BackColor = System.Drawing.Color.White;
+ this.statusStrip.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.statusStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.lb_RunStatus,
+ this.lb_Split,
+ this.lb_RunTime});
+ this.statusStrip.Location = new System.Drawing.Point(0, 485);
+ this.statusStrip.Name = "statusStrip";
+ this.statusStrip.Size = new System.Drawing.Size(1132, 24);
+ this.statusStrip.TabIndex = 276;
+ this.statusStrip.Text = "statusStrip1";
+ //
+ // lb_RunStatus
+ //
+ this.lb_RunStatus.Name = "lb_RunStatus";
+ this.lb_RunStatus.Size = new System.Drawing.Size(0, 19);
+ //
+ // lb_Split
+ //
+ this.lb_Split.Name = "lb_Split";
+ this.lb_Split.Size = new System.Drawing.Size(189, 19);
+ this.lb_Split.Text = " ";
+ //
+ // lb_RunTime
+ //
+ this.lb_RunTime.Name = "lb_RunTime";
+ this.lb_RunTime.Size = new System.Drawing.Size(0, 19);
+ //
// FormCaliper
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(1132, 509);
- this.Controls.Add(this.txbLog);
+ this.Controls.Add(this.statusStrip);
this.Controls.Add(this.splitContainer1);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Name = "FormCaliper";
@@ -475,6 +508,8 @@
this.groupBox1.PerformLayout();
this.groupBox2.ResumeLayout(false);
this.groupBox2.PerformLayout();
+ this.statusStrip.ResumeLayout(false);
+ this.statusStrip.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
@@ -497,7 +532,6 @@
private System.Windows.Forms.Button btn_moveCliperRegion;
public System.Windows.Forms.ComboBox cbx_edgeSelect;
public System.Windows.Forms.TextBox tbx_resultStartCol;
- public System.Windows.Forms.TextBox txbLog;
private System.Windows.Forms.SplitContainer splitContainer1;
private System.Windows.Forms.Panel panel1;
private System.Windows.Forms.GroupBox groupBox3;
@@ -515,5 +549,10 @@
private System.Windows.Forms.Label label9;
private System.Windows.Forms.GroupBox groupBox4;
private System.Windows.Forms.CheckBox chBDispCaliperROI;
+ private System.Windows.Forms.Panel panel2;
+ public System.Windows.Forms.StatusStrip statusStrip;
+ public System.Windows.Forms.ToolStripStatusLabel lb_RunStatus;
+ private System.Windows.Forms.ToolStripStatusLabel lb_Split;
+ public System.Windows.Forms.ToolStripStatusLabel lb_RunTime;
}
}
\ No newline at end of file
diff --git a/CaliperTool/FormCaliper.cs b/CaliperTool/FormCaliper.cs
index 061feb9..5599a70 100644
--- a/CaliperTool/FormCaliper.cs
+++ b/CaliperTool/FormCaliper.cs
@@ -9,6 +9,7 @@ using System.Threading.Tasks;
using System.Windows.Forms;
using CommonMethods;
using ChoiceTech.Halcon.Control;
+using HalconDotNet;
namespace CaliperTool
{
@@ -17,32 +18,43 @@ namespace CaliperTool
public Caliper myCaliper = null;
public IToolInfo myToolInfo = null;
- public HWindow_Final myHwindow = new HWindow_Final();
+ public HSmartWindowControl myHwindow = new HSmartWindowControl();
- private static FormCaliper _instance = null;
+ private static FormCaliper _instance;
public FormCaliper(ref object caliper)
{
InitializeComponent();
- myToolInfo = (IToolInfo)caliper;
- myCaliper = (Caliper)myToolInfo.tool;
_instance = this;
- myCaliper.DispImage();
+ if (caliper.GetType().FullName != "System.Object")
+ {
+ myToolInfo = (IToolInfo)caliper;
+ myCaliper = (Caliper)myToolInfo.tool;
+ myCaliper.DispImage();
+ }
}
public static FormCaliper Instance
{
get
{
- if(_instance!= null)
+ if (_instance != null)
{
- return _instance;
+ lock (_instance)
+ {
+ if (_instance == null)
+ {
+ object calib = new object();
+ _instance = new FormCaliper(ref calib);
+ }
+ return _instance;
+ }
}
else
{
- object caliper = new object();
- _instance = new FormCaliper(ref caliper);
+ object line = new object();
+ _instance = new FormCaliper(ref line);
return _instance;
}
-
+
}
}
@@ -78,16 +90,7 @@ namespace CaliperTool
private void btn_moveCliperRegion_Click(object sender, EventArgs e)
{
myCaliper.UpdateImage();
- myCaliper.DrawExpectLine(myHwindow);
- }
-
- public void TextBoxMessageDisp(string mes, Color setColor)
- {
- txbLog.BackColor = setColor;
- txbLog.Text = mes;
- txbLog.Font = new Font("微软雅黑", 10, FontStyle.Bold);
- //CommonMethods.CommonMethods.Delay(2000);
- txbLog.BackColor = Color.White;
+ myCaliper.DrawExpectLine(myHwindow.HalconWindow);
}
private void btn_runCaliperool_Click(object sender, EventArgs e)
@@ -105,5 +108,29 @@ namespace CaliperTool
myCaliper.sigma = Convert.ToDouble(tbx_Sigma.Text.Trim());
myCaliper.Run(SoftwareRunState.Debug);
}
+
+ ///
+ /// 设定工具运行状态
+ ///
+ /// 运行中的信息
+ /// 运行状态
+ public void SetToolStatus(string msg, ToolRunStatu status)
+ {
+ if (myCaliper != null)
+ {
+ myCaliper.runMessage = msg;
+ myCaliper.toolRunStatu = status;
+ lb_RunStatus.Text = myCaliper.toolRunStatu == ToolRunStatu.Succeed ? "工具运行成功!" : $"工具运行异常, 异常原因:{myCaliper.runMessage}";
+ lb_RunTime.Text = myCaliper.runTime;
+ if (myCaliper.toolRunStatu == ToolRunStatu.Succeed)
+ {
+ statusStrip.BackColor = Color.LimeGreen;
+ }
+ else
+ {
+ statusStrip.BackColor = Color.Red;
+ }
+ }
+ }
}
}
diff --git a/CaliperTool/FormCaliper.resx b/CaliperTool/FormCaliper.resx
index 6c0e7bb..93b2685 100644
--- a/CaliperTool/FormCaliper.resx
+++ b/CaliperTool/FormCaliper.resx
@@ -117,6 +117,9 @@
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+ 17, 17
+
diff --git a/CaliperTool/obj/Debug/CaliperTool.csproj.FileListAbsolute.txt b/CaliperTool/obj/Debug/CaliperTool.csproj.FileListAbsolute.txt
index 211d2e4..1fbb4fa 100644
--- a/CaliperTool/obj/Debug/CaliperTool.csproj.FileListAbsolute.txt
+++ b/CaliperTool/obj/Debug/CaliperTool.csproj.FileListAbsolute.txt
@@ -32,6 +32,9 @@ G:\VisionEdit\VisionEdit\CaliperTool\obj\Debug\CaliperTool.FormCaliper.resources
G:\VisionEdit\VisionEdit\CaliperTool\obj\Debug\CaliperTool.csproj.GenerateResource.Cache
G:\VisionEdit\VisionEdit\CaliperTool\obj\Debug\CaliperTool.dll
G:\VisionEdit\VisionEdit\CaliperTool\obj\Debug\CaliperTool.pdb
+F:\GitHubClone\最新克隆\VisionEdit\CaliperTool\obj\Debug\CaliperTool.csprojResolveAssemblyReference.cache
+F:\GitHubClone\最新克隆\VisionEdit\CaliperTool\obj\Debug\CaliperTool.FormCaliper.resources
+F:\GitHubClone\最新克隆\VisionEdit\CaliperTool\obj\Debug\CaliperTool.csproj.GenerateResource.Cache
F:\GitHubClone\最新克隆\VisionEdit\CaliperTool\bin\Debug\log4net.config
F:\GitHubClone\最新克隆\VisionEdit\CaliperTool\bin\Debug\CaliperTool.dll
F:\GitHubClone\最新克隆\VisionEdit\CaliperTool\bin\Debug\CaliperTool.pdb
@@ -40,7 +43,6 @@ F:\GitHubClone\最新克隆\VisionEdit\CaliperTool\bin\Debug\DataStruct.dll
F:\GitHubClone\最新克隆\VisionEdit\CaliperTool\bin\Debug\FormLib.dll
F:\GitHubClone\最新克隆\VisionEdit\CaliperTool\bin\Debug\halcondotnet.dll
F:\GitHubClone\最新克隆\VisionEdit\CaliperTool\bin\Debug\HWindow_Tool.dll
-F:\GitHubClone\最新克隆\VisionEdit\CaliperTool\bin\Debug\LogForm.dll
F:\GitHubClone\最新克隆\VisionEdit\CaliperTool\bin\Debug\Logger.dll
F:\GitHubClone\最新克隆\VisionEdit\CaliperTool\bin\Debug\ToolBase.dll
F:\GitHubClone\最新克隆\VisionEdit\CaliperTool\bin\Debug\ToolLib.VisionJob.dll
@@ -52,15 +54,11 @@ F:\GitHubClone\最新克隆\VisionEdit\CaliperTool\bin\Debug\CommonMethods.pdb
F:\GitHubClone\最新克隆\VisionEdit\CaliperTool\bin\Debug\DataStruct.pdb
F:\GitHubClone\最新克隆\VisionEdit\CaliperTool\bin\Debug\FormLib.pdb
F:\GitHubClone\最新克隆\VisionEdit\CaliperTool\bin\Debug\ToolBase.pdb
-F:\GitHubClone\最新克隆\VisionEdit\CaliperTool\bin\Debug\LogForm.pdb
F:\GitHubClone\最新克隆\VisionEdit\CaliperTool\bin\Debug\Logger.pdb
F:\GitHubClone\最新克隆\VisionEdit\CaliperTool\bin\Debug\ToolLib.VisionJob.pdb
F:\GitHubClone\最新克隆\VisionEdit\CaliperTool\bin\Debug\HWindow_Tool.pdb
F:\GitHubClone\最新克隆\VisionEdit\CaliperTool\bin\Debug\halcondotnet.xml
-F:\GitHubClone\最新克隆\VisionEdit\CaliperTool\bin\Debug\WeifenLuo.WinFormsUI.Docking.pdb
+F:\GitHubClone\最新克隆\VisionEdit\CaliperTool\bin\Debug\Newtonsoft.Json.xml
F:\GitHubClone\最新克隆\VisionEdit\CaliperTool\bin\Debug\DevComponents.DotNetBar2.xml
-F:\GitHubClone\最新克隆\VisionEdit\CaliperTool\obj\Debug\CaliperTool.csprojResolveAssemblyReference.cache
-F:\GitHubClone\最新克隆\VisionEdit\CaliperTool\obj\Debug\CaliperTool.FormCaliper.resources
-F:\GitHubClone\最新克隆\VisionEdit\CaliperTool\obj\Debug\CaliperTool.csproj.GenerateResource.Cache
F:\GitHubClone\最新克隆\VisionEdit\CaliperTool\obj\Debug\CaliperTool.dll
F:\GitHubClone\最新克隆\VisionEdit\CaliperTool\obj\Debug\CaliperTool.pdb
diff --git a/CaliperTool/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/CaliperTool/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache
index ee6036d..29b7bbc 100644
Binary files a/CaliperTool/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache and b/CaliperTool/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache differ
diff --git a/CommonMethods/CommonHelper.csproj b/CommonMethods/CommonHelper.csproj
index f3add07..6da8b41 100644
--- a/CommonMethods/CommonHelper.csproj
+++ b/CommonMethods/CommonHelper.csproj
@@ -33,8 +33,9 @@
C:\Program Files\MVTec\HALCON-19.05-Progress\bin\dotnet20\halcondotnet.dll
-
- G:\2D程序最新版本\G3\UMP_BandOnly_2D_V2.5.4\UMP_BandOnly_S3\bin\x64\Debug\Newtonsoft.Json.dll
+
+ ..\packages\Newtonsoft.Json.13.0.1\lib\net45\Newtonsoft.Json.dll
+ True
@@ -58,6 +59,9 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 17, 17
+
+
+ 138, 17
+
+
+
+
+ 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
+
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+ 71
+
+
+
+ AAABAAQAMDAAAAEAIACoJQAARgAAAEBAAAABACAAKEIAAO4lAACAgAAAAQAgACgIAQAWaAAAAAAAAAEA
+ IACOJgAAPnABACgAAAAwAAAAYAAAAAEAIAAAAAAAUCUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAE9HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/AAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE9HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE9HN/9PRzf/1LgA/9S4
+ AP/UuAD/1LgA/9S4AP/UuAD/1LgA/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/1LgA/9S4AP/UuAD/1LgA/9S4
+ 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
+ GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////
+ GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////
+ GP///xj///8Y////GP///xj/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//
+ GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////
+ GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////
+ GP///xj///8Y////GP///xj///8Y////GP///xj/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVar/A023
+ /+5Nt///TLf/uwAAAABMtv+QTbf//023//9PuP9ETrH/DU63/+NNt///Tbf//k22/34AAAAATbf/Y023
+ //tNt///Tbf/+2bM/wUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAATbf/NU23//9Nt///Trb/aVWq/wZNuP/vTbf//023/8QAAAAATbf/kU23//9Nt///TLf/cgAA
+ AABMtv9XTbf//023//9Nt//7Tbb/bQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAATrf/X023//9Nt///Tbj/Mk+1/zdNt///Tbf//062/2lRvP8TTbf/9023
+ //9Ot//CAP//AU+5/x1Nt//zTbf//024/+9Ptf83AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ 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
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArqSQ/66kkP8AAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABPuf86Tbf/wE23//9Nt///Tbf//023//9Nt///Tbf//023
+ //9Nt//SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACupJD/rqSQ/wAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArqSQ/66k
+ kP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEu0/yJNtv9tTLf/sU23
+ /9RNt//zTbf//023//hNuP+IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AACupJD/rqSQ/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAArqSQ/66kkP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAACupJD/rqSQ/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAArqSQ/66kkP+upJD/rqSQ/66kkP+upJD/rqSQ/wAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAArqSQ/66kkP+upJD/rqSQ/66kkP+upJD/rqSQ/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArqSQ/66kkP+upJD/rqSQ/66kkP+upJD/rqSQ/wAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAArqSQ/66kkP+upJD/rqSQ/66kkP+upJD/rqSQ/wAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP///////wAA////////AAD///////8AAP//
+ /////wAA////////AAD4AAAAAB8AAPgAAAAAHwAA+AAAAAAfAAD4AAAAAB8AAPgAAAAAHwAA+AAAAAAf
+ AAD4AAAAAB8AAPgAAAAAHwAA+AAAAAAfAAD4AAAAAB8AAPgAAAAAHwAA+AAAAAAfAAD4AAAAAB8AAPgA
+ AAAAHwAA//+Ixx//AAD//5iOP/8AAP//mYx//wAA//+ZmM//AAD//xkYj/8AAP/7mRGP/wAA//GY8R//
+ AAD/8ZhjH/8AAP/xjAY//wAA//nGDH//AAD/+MP4f/8AAP/44OD//wAA//x4Af//AAD//jwH//8AAP/+
+ H////wAA/n8H//5/AAD+f4Af/n8AAP5/4A/+fwAA/n/8D/5/AAD+f////n8AAP4D///AfwAA/gP//8B/
+ AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA////////AAAoAAAAQAAAAIAA
+ AAABACAAAAAAAABCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AABOSDZVT0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9OSDZVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAATkg2VU9HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/Tkg2VQAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE5INlVPRzf/T0c3/21fK/98bCX/fGwl/3xs
+ Jf98bCX/fGwl/3xsJf98bCX/fGwl/21fK/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/21fK/98bCX/fGwl/3xsJf98bCX/fGwl/3xsJf98bCX/fGwl/21fK/9PRzf/T0c3/05I
+ NlUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABOSDZVT0c3/09H
+ N/+okhL/1LgA/9S4AP/UuAD/1LgA/9S4AP/UuAD/1LgA/9S4AP+okhL/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/+okhL/1LgA/9S4AP/UuAD/1LgA/9S4AP/UuAD/1LgA/9S4
+ AP+okhL/T0c3/09HN/9OSDZVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAATkg2VU9HN/9PRzf/qJIS/9S4AP/UuAD/1LgA/9S4AP/UuAD/1LgA/9S4AP/UuAD/qJIS/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/qJIS/9S4AP/UuAD/1LgA/9S4
+ AP/UuAD/1LgA/9S4AP/UuAD/qJIS/09HN/9PRzf/Tkg2VQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAE5INlVPRzf/T0c3/6iSEv/UuAD/1LgA/3xsJf98bCX/fGwl/3xs
+ Jf98bCX/fGwl/21fK/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/92aiv/u6gV/6GRHf9QSDf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/21f
+ K/98bCX/fGwl/3xsJf98bCX/fGwl/3xsJf/UuAD/1LgA/6iSEv9PRzf/T0c3/05INlUAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABOSDZVT0c3/09HN/+okhL/1LgA/9S4
+ AP9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/3ltKv/Quw///+UA///lAP//5QD/nY0f/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/1LgA/9S4AP+okhL/T0c3/09H
+ N/9OSDZVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATkg2VU9H
+ N/9PRzf/qJIS/9S4AP/UuAD/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/WVA0/7ypFf//5QD//+UA///lAP//5QD//+UA/6WU
+ HP9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/9S4
+ AP/UuAD/qJIS/09HN/9PRzf/Tkg2VQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAE5INlVPRzf/T0c3/6iSEv/UuAD/1LgA/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/eGwq/+vTBv//5QD//+UA///l
+ AP//5QD/+eAC/7KfGP9VTDX/T0c3/1BIN/9rYS7/iHol/5OEIv+VhiH/aV4v/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN//UuAD/1LgA/6iSEv9PRzf/T0c3/05INlUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABOSDZVT0c3/09HN/+okhL/1LgA/9S4AP9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/g3Un//ng
+ Av//5QD//+UA///lAP/54AL/sp8Y/2FXMf9PRzf/fnEo/7+rFP/13AP//+UA///lAP//5QD//+UA//Pb
+ BP9XTzT/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/1LgA/9S4AP+okhL/T0c3/09HN/9OSDZVAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATkg2VU9HN/9PRzf/qJIS/9S4
+ AP/UuAD/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/iHsl//ziAf//5QD//+UA///lAP/Zwwz/a2Eu/09HN/9/cij/28QL///lAP//5QD//+UA///l
+ AP//5QD//+UA///lAP//5QD/al8v/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/9S4AP/UuAD/qJIS/09H
+ N/9PRzf/Tkg2VQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE5I
+ NlVPRzf/T0c3/6iSEv/UuAD/1LgA/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/cmYs//jfAv//5QD//+UA///lAP+wnxn/UUk2/1VMNf+3pRb//uQA///l
+ AP//5QD//+UA///lAP//5QD//uQA//PbBP/u1gX/sJ8Z/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N//UuAD/1LgA/6iSEv9PRzf/T0c3/05INlUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAABOSDZVT0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/XlUy/+rSBv//5QD//+UA//7kAP+gkB7/T0c3/1lQ
+ NP/Uvg7//+UA///lAP//5QD//+UA/+vTBv+qmRv/dGgs/1RLNf9RSTb/ZFow/1BIN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9OSDZVAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATkg2VU9HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/8i0Ef//5QD//+UA///l
+ AP+rmhr/T0c3/1VMNf/Ywwz//+UA///lAP//5QD/9dwD/5eIIP9RSTb/T0c3/1BIN/+OgCP/5s8I///l
+ AP/JtRH/UUk2/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/Tkg2VQAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE5INlVPRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/4N2
+ J///5QD//+UA///lAP/JtRH/UEg3/1BIN//GsRL//+UA///lAP//5QD/5c4I/2dcL/9PRzf/T0c3/4N2
+ J//iywn//+UA///lAP//5QD//+UA/2xhLv9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/05INlUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AABOSDZVT0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/1BIN//gygr//+UA///lAP/x2AX/W1Ez/09HN/+ThCL//+UA///lAP//5QD/7dUG/2Zd
+ MP9PRzf/WVA0/72qFf//5QD//+UA///lAP//5QD//+UA/9bADf9USzX/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9OSDZVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAt7Ukjv//GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////
+ GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////
+ GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////
+ GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj/t7UkjgAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALe1JI7//xj///8Y////GP///xj///8Y////
+ GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////
+ GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////
+ GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y/7e1
+ JI4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwrSRk09If49PS
+ H+PT0h/j09If49PSH+PT0h/j09If49PSH+PT0h/j09If49PSH+PT0h/j09If49PSH+PT0h/j0tIk5c3b
+ Pe/N2z3vzds979DXL+nT0h/j0tQl5c3bPe/N2z3vzds978/YM+vT0h/j09If48/YMurP2DPrz9gz68/Y
+ M+vP1zLq09Ih49PSH+PS0ybmzds9783bPe/N2z3vztg069PSH+PT0h/j09If49PSH+PT0h/j09If49PS
+ H+PT0h/j09If49PSH+OwrSRkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAE63/05Nt///Tbf//023//9Ntv9GAAAAAE64/31Nt///Tbf//023//9Ntv9GAAAAAE23
+ /2NNt///Tbf//023//9Nt//nT7n/OgAAAABKtf8mTbf/3E23//9Nt///Tbf//063/6sAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMtv+TTbf//023//9Nt//pVar/A1Wq/wNNt//lTbf//023
+ //9Nt//DAAAAAEq1/xhNt//xTbf//023//9Nt//rT7b/KgAAAABSuP8ZTbf/5k23//9Nt///Tbf//022
+ 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
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACuo49yrqSRq66kkauupJGrrqSRq66k
+ kauupJGrrqSQ/66kkP+upJGrAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArqSRq66kkP+upJD/rqSQ/66kkP+upJD/rqSQ/66k
+ kP+upJD/rqSRqwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArqSRq66k
+ kP+upJD/rqSQ/66kkP+upJD/rqSQ/66kkP+upJD/rqSRqwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK6kkauupJD/rqSQ/66k
+ kP+upJD/rqSQ/66kkP+upJD/rqSQ/66kkasAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAK6kkauupJD/rqSQ/66kkP+upJD/rqSQ/66kkP+upJD/rqSQ/66kkasAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////////////////////////////
+ ///////////////////////////////////////////////////+AAAAAAAAf/4AAAAAAAB//gAAAAAA
+ AH/+AAAAAAAAf/4AAAAAAAB//gAAAAAAAH/+AAAAAAAAf/4AAAAAAAB//gAAAAAAAH/+AAAAAAAAf/4A
+ AAAAAAB//gAAAAAAAH/+AAAAAAAAf/4AAAAAAAB//gAAAAAAAH/+AAAAAAAAf/wAAAAAAAA//AAAAAAA
+ AD/+AAAAAAAAf////jjhwf/////8MMOD//////wxhwf//////HGHD//////8YY4Y//////xhDDD/////
+ /GEMMP////8ccZhx/////www+GH/////DDBww/////8OOAHD/////44cAYf/////hw4DD/////+HB/4P
+ /////8OB/B//////w8AAP//////h8AB//////+D8Af//////8H+P///////4P///////j/wP///x//+P
+ /gB///H//4//AAf/8f//j//AB//x//+P//wH//H//4//////8f//gD////wB//+AH///+AH//4Af///4
+ Af//////////////////////////////////////////////////////////////////////////////
+ ////////KAAAAIAAAAAAAQAAAQAgAAAAAAAACAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAE9IN6tPRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0g3qwAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAT0g3q09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PSDerAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAABPSDerT0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09I
+ N6sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE9IN6tPRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0g3qwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAT0g3q09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PSDerAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABPSDerT0c3/09H
+ N/9PRzf/T0c3/21fK/+okhL/qJIS/6iSEv+okhL/qJIS/6iSEv+okhL/qJIS/6iSEv+okhL/qJIS/6iS
+ Ev+okhL/qJIS/6iSEv+okhL/qJIS/6iSEv9tXyv/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/21f
+ K/+okhL/qJIS/6iSEv+okhL/qJIS/6iSEv+okhL/qJIS/6iSEv+okhL/qJIS/6iSEv+okhL/qJIS/6iS
+ Ev+okhL/qJIS/6iSEv9tXyv/T0c3/09HN/9PRzf/T0c3/09IN6sAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAE9IN6tPRzf/T0c3/09HN/9PRzf/fGwl/9S4AP/UuAD/1LgA/9S4
+ AP/UuAD/1LgA/9S4AP/UuAD/1LgA/9S4AP/UuAD/1LgA/9S4AP/UuAD/1LgA/9S4AP/UuAD/1LgA/3xs
+ Jf9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/fGwl/9S4AP/UuAD/1LgA/9S4AP/UuAD/1LgA/9S4
+ AP/UuAD/1LgA/9S4AP/UuAD/1LgA/9S4AP/UuAD/1LgA/9S4AP/UuAD/1LgA/3xsJf9PRzf/T0c3/09H
+ N/9PRzf/T0g3qwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAT0g3q09H
+ N/9PRzf/T0c3/09HN/98bCX/1LgA/9S4AP/UuAD/1LgA/9S4AP/UuAD/1LgA/9S4AP/UuAD/1LgA/9S4
+ AP/UuAD/1LgA/9S4AP/UuAD/1LgA/9S4AP/UuAD/fGwl/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/98bCX/1LgA/9S4AP/UuAD/1LgA/9S4AP/UuAD/1LgA/9S4AP/UuAD/1LgA/9S4AP/UuAD/1LgA/9S4
+ AP/UuAD/1LgA/9S4AP/UuAD/fGwl/09HN/9PRzf/T0c3/09HN/9PSDerAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABPSDerT0c3/09HN/9PRzf/T0c3/3xsJf/UuAD/1LgA/9S4
+ AP/UuAD/1LgA/9S4AP/UuAD/1LgA/9S4AP/UuAD/1LgA/9S4AP/UuAD/1LgA/9S4AP/UuAD/1LgA/9S4
+ AP98bCX/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/3xsJf/UuAD/1LgA/9S4AP/UuAD/1LgA/9S4
+ AP/UuAD/1LgA/9S4AP/UuAD/1LgA/9S4AP/UuAD/1LgA/9S4AP/UuAD/1LgA/9S4AP98bCX/T0c3/09H
+ N/9PRzf/T0c3/09IN6sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE9I
+ N6tPRzf/T0c3/09HN/9PRzf/fGwl/9S4AP/UuAD/1LgA/9S4AP/UuAD/1LgA/9S4AP/UuAD/1LgA/9S4
+ AP/UuAD/1LgA/9S4AP/UuAD/1LgA/9S4AP/UuAD/1LgA/3xsJf9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/fGwl/9S4AP/UuAD/1LgA/9S4AP/UuAD/1LgA/9S4AP/UuAD/1LgA/9S4AP/UuAD/1LgA/9S4
+ AP/UuAD/1LgA/9S4AP/UuAD/1LgA/3xsJf9PRzf/T0c3/09HN/9PRzf/T0g3qwAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAT0g3q09HN/9PRzf/T0c3/09HN/98bCX/1LgA/9S4
+ AP/UuAD/1LgA/9S4AP+okhL/qJIS/6iSEv+okhL/qJIS/6iSEv+okhL/qJIS/6iSEv+okhL/qJIS/6iS
+ Ev+okhL/bV8r/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/YFYy/35xKP9uYi3/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9tXyv/qJIS/6iSEv+okhL/qJIS/6iS
+ Ev+okhL/qJIS/6iSEv+okhL/qJIS/6iSEv+okhL/qJIS/9S4AP/UuAD/1LgA/9S4AP/UuAD/fGwl/09H
+ N/9PRzf/T0c3/09HN/9PSDerAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AABPSDerT0c3/09HN/9PRzf/T0c3/3xsJf/UuAD/1LgA/9S4AP/UuAD/1LgA/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/cGUt/76rFP/74gH//+UA///l
+ AP/Quw//W1Ez/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/1LgA/9S4AP/UuAD/1LgA/9S4AP98bCX/T0c3/09HN/9PRzf/T0c3/09IN6sAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE9IN6tPRzf/T0c3/09HN/9PRzf/fGwl/9S4
+ AP/UuAD/1LgA/9S4AP/UuAD/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/eW0q/9G8Dv//5QD//+UA///lAP//5QD//+UA///lAP/JtRH/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN//UuAD/1LgA/9S4AP/UuAD/1LgA/3xs
+ Jf9PRzf/T0c3/09HN/9PRzf/T0g3qwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAT0g3q09HN/9PRzf/T0c3/09HN/98bCX/1LgA/9S4AP/UuAD/1LgA/9S4AP9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/cmcs/865D///5QD//+UA///lAP//5QD//+UA///l
+ AP//5QD//+UA///lAP9hVzH/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/9S4AP/UuAD/1LgA/9S4AP/UuAD/fGwl/09HN/9PRzf/T0c3/09HN/9PSDerAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABPSDerT0c3/09HN/9PRzf/T0c3/3xs
+ Jf/UuAD/1LgA/9S4AP/UuAD/1LgA/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/WlE0/7ek
+ F//+5AD//+UA///lAP//5QD//+UA///lAP//5QD//+UA///lAP//5QD//+UA/2hdL/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/1LgA/9S4AP/UuAD/1LgA/9S4
+ AP98bCX/T0c3/09HN/9PRzf/T0c3/09IN6sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAE9IN6tPRzf/T0c3/09HN/9PRzf/fGwl/9S4AP/UuAD/1LgA/9S4AP/UuAD/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/4V3Jv/u1gX//+UA///lAP//5QD//+UA///lAP//5QD//+UA///l
+ AP//5QD//+UA///lAP/axAv/UEg3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN//UuAD/1LgA/9S4AP/UuAD/1LgA/3xsJf9PRzf/T0c3/09HN/9PRzf/T0g3qwAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAT0g3q09HN/9PRzf/T0c3/09H
+ N/98bCX/1LgA/9S4AP/UuAD/1LgA/9S4AP9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/1RLNf+0oRj//uQA///l
+ AP//5QD//+UA///lAP//5QD//+UA///lAP//5QD//+UA///lAP//5QD/1b8N/2VbMP9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/9S4AP/UuAD/1LgA/9S4
+ AP/UuAD/fGwl/09HN/9PRzf/T0c3/09HN/9PSDerAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAABPSDerT0c3/09HN/9PRzf/T0c3/3xsJf/UuAD/1LgA/9S4AP/UuAD/1LgA/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9hVzH/28QL///lAP//5QD//+UA///lAP//5QD//+UA///lAP//5QD//+UA///l
+ AP//5QD/38gK/4d5Jv9QSDf/T0c3/09HN/9PRzf/T0c3/09HN/9YTzT/e24p/5+PHv+/rBT/z7kP/9/I
+ Cv/s1Qb/89sE/+nRB/+zoRj/V080/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/1LgA/9S4AP/UuAD/1LgA/9S4AP98bCX/T0c3/09HN/9PRzf/T0c3/09I
+ N6sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE9IN6tPRzf/T0c3/09H
+ N/9PRzf/fGwl/9S4AP/UuAD/1LgA/9S4AP/UuAD/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/bWIu/+jQB///5QD//+UA///l
+ AP//5QD//+UA///lAP//5QD//+UA///lAP//5QD/6NAH/5WHIf9SSjb/T0c3/09HN/9PRzf/T0c3/2th
+ Lv+nlhv/4MoK//7kAP//5QD//+UA///lAP//5QD//+UA///lAP//5QD//+UA///lAP/OuQ//T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN//UuAD/1LgA/9S4
+ AP/UuAD/1LgA/3xsJf9PRzf/T0c3/09HN/9PRzf/T0g3qwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAT0g3q09HN/9PRzf/T0c3/09HN/98bCX/1LgA/9S4AP/UuAD/1LgA/9S4
+ AP9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/3ZpK//23QP//+UA///lAP//5QD//+UA///lAP//5QD//+UA///lAP//5QD/5M0I/4h7
+ Jf9QSDf/T0c3/09HN/9PRzf/U0o2/5qKIP/fyQr//+UA///lAP//5QD//+UA///lAP//5QD//+UA///l
+ AP//5QD//+UA///lAP//5QD//+UA///lAP9xZSz/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/9S4AP/UuAD/1LgA/9S4AP/UuAD/fGwl/09HN/9PRzf/T0c3/09H
+ N/9PSDerAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABPSDerT0c3/09H
+ N/9PRzf/T0c3/3xsJf/UuAD/1LgA/9S4AP/UuAD/1LgA/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9zaCz/9dwD///lAP//5QD//+UA///l
+ AP//5QD//+UA///lAP//5QD/+N8C/6OTHf9TSjb/T0c3/09HN/9PRzf/UEg3/46AI//o0Af//+UA///l
+ AP//5QD//+UA///lAP//5QD//+UA///lAP//5QD//+UA///lAP//5QD//+UA///lAP//5QD//+UA/5CB
+ I/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/1LgA/9S4
+ AP/UuAD/1LgA/9S4AP98bCX/T0c3/09HN/9PRzf/T0c3/09IN6sAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAE9IN6tPRzf/T0c3/09HN/9PRzf/fGwl/9S4AP/UuAD/1LgA/9S4
+ AP/UuAD/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/al8v//PaBP//5QD//+UA///lAP//5QD//+UA///lAP//5QD//+UA/9/ICv9rYC7/T0c3/09H
+ N/9PRzf/T0c3/3JmLP/fyAr//+UA///lAP//5QD//+UA///lAP//5QD//+UA///lAP//5QD//+UA///l
+ AP//5QD//+UA///lAP//5QD//+UA///lAP//5QD/hHcm/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN//UuAD/1LgA/9S4AP/UuAD/1LgA/3xsJf9PRzf/T0c3/09H
+ N/9PRzf/T0g3qwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAT0g3q09H
+ N/9PRzf/T0c3/09HN/98bCX/1LgA/9S4AP/UuAD/1LgA/9S4AP9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/11UMv/ozwf//+UA///lAP//5QD//+UA///l
+ AP//5QD//+UA///lAP+5pRb/VUw1/09HN/9PRzf/T0c3/1JKNv+lkxz//OIB///lAP//5QD//+UA///l
+ AP//5QD//+UA///lAP//5QD//+UA///lAP//5QD//+UA///lAP//5QD//+UA///lAP//5QD//+UA/9C7
+ D/9QSDf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/9S4
+ AP/UuAD/1LgA/9S4AP/UuAD/fGwl/09HN/9PRzf/T0c3/09HN/9PSDerAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABPSDerT0c3/09HN/9PRzf/T0c3/3xsJf/UuAD/1LgA/9S4
+ AP/UuAD/1LgA/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9USzX/2MIM///lAP//5QD//+UA///lAP//5QD//+UA///lAP/84gH/mIgg/09HN/9PRzf/T0c3/09H
+ N/9jWTH/2MMM///lAP//5QD//+UA///lAP//5QD//+UA///lAP//5QD//+UA///lAP//5QD//+UA///l
+ AP//5QD/9dwD/+jPB//cxgv/3MUL/8i0Ef+VhiH/Uko2/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/1LgA/9S4AP/UuAD/1LgA/9S4AP98bCX/T0c3/09H
+ N/9PRzf/T0c3/09IN6sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE9I
+ N6tPRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/7CfGf//5QD//+UA///lAP//5QD//+UA///l
+ AP//5QD//eMB/46AI/9PRzf/T0c3/09HN/9PRzf/bWIu/+zUBv//5QD//+UA///lAP//5QD//+UA///l
+ AP//5QD//+UA///lAP//5QD//+UA/+bPCP+ynxj/hXcm/2VbMP9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0g3qwAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAT0g3q09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/+MfST//+UA///lAP//5QD//+UA///lAP//5QD//+UA//3jAf+JeyX/T0c3/09HN/9PRzf/T0c3/3hs
+ Kv/z2wT//+UA///lAP//5QD//+UA///lAP//5QD//+UA///lAP//5QD/990D/7elFv9vYy3/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/XVQy/4h7Jf+BdSf/VUw1/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PSDerAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AABPSDerT0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/YVcx//XcA///5QD//+UA///lAP//5QD//+UA///l
+ AP//5QD/mosf/09HN/9PRzf/T0c3/09HN/97bin/+eAC///lAP//5QD//+UA///lAP//5QD//+UA///l
+ AP//5QD//OIB/7KgGP9bUTP/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/Zlww/7akF//54AL//+UA///l
+ AP/s1Ab/cGUt/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09IN6sAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE9IN6tPRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N//EsBP//+UA///lAP//5QD//+UA///lAP//5QD//+UA/7WjF/9PRzf/T0c3/09HN/9PRzf/a2Au//Pb
+ BP//5QD//+UA///lAP//5QD//+UA///lAP//5QD//+UA/9vEC/9tYi7/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/Zl0w/8CsFP/84gH//+UA///lAP//5QD//+UA///lAP/q0gb/WE80/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0g3qwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAT0g3q09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/em4p//7kAP//5QD//+UA///lAP//5QD//+UA///l
+ AP/axAz/VEs1/09HN/9PRzf/T0c3/1tSM//kzQj//+UA///lAP//5QD//+UA///lAP//5QD//+UA///l
+ AP+/qxT/Vk01/09HN/9PRzf/T0c3/09HN/9PRzf/VUw1/6GRHf/23QP//+UA///lAP//5QD//+UA///l
+ AP//5QD//+UA///lAP+Ddif/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PSDerAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABPSDerT0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/1JK
+ Nv/lzgj//+UA///lAP//5QD//+UA///lAP//5QD/7tYF/2BWMv9PRzf/T0c3/09HN/9SSjb/2MIM///l
+ AP//5QD//+UA///lAP//5QD//+UA///lAP/94wH/k4Qi/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/4h6
+ Jf/u1gX//+UA///lAP//5QD//+UA///lAP//5QD//+UA///lAP//5QD//+UA/4x9JP9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09IN6sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAE9IN6tPRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/kYIj///lAP//5QD//+UA///lAP//5QD//+UA///l
+ AP+Edyb/T0c3/09HN/9PRzf/T0c3/6mYG///5QD//+UA///lAP//5QD//+UA///lAP//5QD/+uEC/4h7
+ Jf9PRzf/T0c3/09HN/9PRzf/T0c3/1xTM//CrhP//+UA///lAP//5QD//+UA///lAP//5QD//+UA///l
+ AP//5QD//+UA///lAP/02wP/YFYy/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0g3qwAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAT0g3q09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/1FJ
+ Nv/jzAn//+UA///lAP//5QD//+UA///lAP//5QD/0bwO/09HN/9PRzf/T0c3/09HN/9xZSz/++IB///l
+ AP//5QD//+UA///lAP//5QD//+UA//7kAP+RgiL/T0c3/09HN/9PRzf/T0c3/09HN/94bCr/7NUG///l
+ AP//5QD//+UA///lAP//5QD//+UA///lAP//5QD//+UA///lAP//5QD/7NQG/4F1J/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H
+ N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PSDerAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAADT0h/j//8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////
+ GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////
+ GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////
+ GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////
+ GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////
+ GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////
+ GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y/9PS
+ H+MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANPSH+P//xj///8Y////
+ GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////
+ GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////
+ GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////
+ GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////
+ GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////
+ GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////
+ GP///xj///8Y////GP///xj///8Y////GP///xj/09If4wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAA09If4///GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////
+ GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////
+ GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////
+ GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////
+ GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////
+ GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////
+ GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////
+ GP/T0h/jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADT0h/j//8Y////
+ GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////
+ GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////
+ GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////
+ GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////
+ GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////
+ GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////
+ GP///xj///8Y////GP///xj///8Y////GP///xj///8Y/9PSH+MAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAANPSH+P//xj///8Y////GP///xj///8Y////GP///xj///8Y////
+ GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////
+ GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////
+ GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////
+ GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////
+ GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////
+ GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////GP///xj///8Y////
+ GP///xj/09If4wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsK0kZLe1
+ JI63tSSOt7Ukjre1JI63tSSOt7Ukjre1JI63tSSOt7Ukjre1JI63tSSOt7Ukjre1JI63tSSOt7Ukjre1
+ JI63tSSOt7Ukjre1JI63tSSOt7Ukjre1JI63tSSOt7Ukjre1JI63tSSOt7Ukjre1JI63tSSOt7Ukjre1
+ JI6nv1mqis6s+IrOrPiKzqz4is6s+IrOrPiKzqz4jM+q8ra2K5C3tSSOt7Ukjre1JI6hwmezis6s+IrO
+ rPiKzqz4is6s+IrOrPiKzqz4is6s+KLBYbC3tSSOt7Ukjre1JI65tyaOl8eIzpPKk9mTypPZk8qT2ZPK
+ k9mTypPZk8qT2ZPKk9mTypPZmMaDyba4KZC3tSSOt7Ukjre1JI63tSSOnMV4wYrOrPeKzqz4is6s+IrO
+ rPiKzqz4is6s+IrOrPihw2y2t7Ukjre1JI63tSSOt7Ukjre1JI63tSSOt7Ukjre1JI63tSSOt7Ukjre1
+ JI63tSSOt7Ukjre1JI63tSSOt7Ukjre1JI63tSSOt7Ukjre1JI6wrSRkAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE63/4BNt///Tbf//023//9Nt///Tbf//023
+ //9Nt/+tAAAAAAAAAAAAAAAAAP//AU64/89Nt///Tbf//023//9Nt///Tbf//023//9Nt//GAP//AQAA
+ AAAAAAAAAAAAAE64/29Nt///Tbf//023//9Nt///Tbf//023//9Nt///Tbf//0y3/8VOvP8XAAAAAAAA
+ AAAAAAAAVar/A023/59Nt///Tbf//023//9Nt///Tbf//023//9Nt///Tbf//022/3AAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAATrf/wk23//9Nt///Tbf//023//9Nt///Tbf//023/1kAAAAAAAAAAAAAAABNtv9GTbf//023
+ //9Nt///Tbf//023//9Nt///Tbf//0y3/0MAAAAAAAAAAAAAAABNuP8yTbf/+U23//9Nt///Tbf//023
+ //9Nt///Tbf//023//9Nt/+ZQL//BAAAAAAAAAAAAAAAAFWq/wNNtv+lTbf//023//9Nt///Tbf//023
+ //9Nt///Tbf//023//9Nt///S7j/PQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE2z/wpNt//4Tbf//023//9Nt///Tbf//023
+ //9Nt//4Sbb/DgAAAAAAAAAAAAAAAE24/6hNt///Tbf//023//9Nt///Tbf//023//9Nt//EAAAAAAAA
+ AAAAAAAAAP//AU23/8NNt///Tbf//023//9Nt///Tbf//023//9Nt///Tbf/o4CA/wIAAAAAAAAAAAAA
+ AAAAAAAATbj/lk23//9Nt///Tbf//023//9Nt///Tbf//023//9Nt///Tbf//023/7QAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAS7f/R023//9Nt///Tbf//023//9Nt///Tbf//0y3/7EAAAAAAAAAAAAAAABVv/8MTbf/9023
+ //9Nt///Tbf//023//9Nt///Tbf//063/04AAAAAAAAAAAAAAABOtv9iTbf//023//9Nt///Tbf//023
+ //9Nt///Tbf//024/6hVqv8DAAAAAAAAAAAAAAAAAAAAAE64/29Nt///Tbf//023//9Nt///Tbf//023
+ //9Nt///Tbf//023//5NuP+WQL//CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABNt/9xTbf//023//9Nt///Tbf//023
+ //9Nt///TLf/fAAAAAAAAAAAAAAAAE64/0tNt///Tbf//023//9Nt///Tbf//023//9Ntv/hgID/AgAA
+ AAAAAAAASbb/B023/+ZNt///Tbf//023//9Nt///Tbf//023//9Ntv/TQL//CAAAAAAAAAAAAAAAAAAA
+ AABPuf86Tbf/+k23//9Nt///Tbf//023//9Nt///Tbf//023//9Nt//cS7j/PQAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAE23/5VNt///Tbf//023//9Nt///Tbf//023//9OuP9IAAAAAAAAAAAAAAAATbj/j023
+ //9Nt///Tbf//023//9Nt///Tbf//022/4wAAAAAAAAAAAAAAABMtv9bTbf//023//9Nt///Tbf//023
+ //9Nt///Tbf/+ky4/zYAAAAAAAAAAAAAAAAAAAAATrH/DU22/+FNt///Tbf//023//9Nt///Tbf//023
+ //9Nt///Tbf/wFG8/xMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATbf/uU23//9Nt///Tbf//023
+ //9Nt///Tbf//1G5/xYAAAAAAAAAAAAAAABNt/++Tbf//023//9Nt///Tbf//023//9Nt///S7f/RwAA
+ AAAAAAAAAAAAAE63/8xNt///Tbf//023//9Nt///Tbf//023//9Ot/+DAAAAAAAAAAAAAAAAAAAAAAAA
+ AABNuP+ETbf//023//9Nt///Tbf//023//9Nt///Tbf//023/8dOsf8NAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAABNt//fTbf//023//9Nt///Tbf//023//9Nt//fAAAAAAAAAAAAAAAAAAAAAE23
+ /+xNt///Tbf//023//9Nt///Tbf//023//1Vv/8MAAAAAAAAAABLtP8iTbf//023//9Nt///Tbf//023
+ //9Nt///Tbj/70e4/xIAAAAAAAAAAAAAAAAAAAAATbn/KE23//lNt///Tbf//023//9Nt///Tbf//023
+ //9Nt//YTrH/DQAAAAAAAAAAAP//AUy2/1dMtv+TTrf/gEm2/w4AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVar/A023//xNt///Tbf//023
+ //9Nt///Tbf//0y3/7sAAAAAAAAAAAAAAABVv/8MTbf//023//9Nt///Tbf//023//9Nt///Tbf/3wAA
+ AAAAAAAAAAAAAE22/3dNt///Tbf//023//9Nt///Tbf//023//9Ntv+CAAAAAAAAAAAAAAAAAAAAAAAA
+ AABNtv+6Tbf//023//9Nt///Tbf//023//9Nt///Tbf/9063/y4AAAAAAAAAAAD//wFOt/+rTbf//023
+ //9Nt///Tbf/4Eyz/xsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAABVu/8PTbf//023//9Nt///Tbf//023//9Nt///Trj/oQAAAAAAAAAAAAAAAFC3
+ /yBNt///Tbf//023//9Nt///Tbf//023//9Nt//AAAAAAAAAAAAAAAAATLf/sU23//9Nt///Tbf//023
+ //9Nt///Tbf//lC3/yAAAAAAAAAAAAAAAAAAAAAAS7f/R023//9Nt///Tbf//023//9Nt///Tbf//023
+ //9Mt/98AAAAAAAAAAAAAAAATbf/Z023//9Nt///Tbf//023//9Nt///Trf/qwAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEm2/xxNt///Tbf//023
+ //9Nt///Tbf//023//9Nt/+OAAAAAAAAAAAAAAAAT7X/LU23//9Nt///Tbf//023//9Nt///Tbf//023
+ /7AAAAAAAAAAAAAAAABOt//jTbf//023//9Nt///Tbf//023//9Nt//UAAAAAAAAAAAAAAAAAAAAAAAA
+ AABNuP/ITbf//023//9Nt///Tbf//023//9Nt///Tbb/01Wq/wYAAAAAAAAAAICA/wJNtv/aTbf//023
+ //9Nt///Tbf//023//9Nt//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAASrX/H023//9Nt///Tbf//023//9Nt///Tbf//024/4gAAAAAAAAAAAAA
+ AABKtf8mTbf//023//9Nt///Tbf//023//9Nt///TLf/sQAAAAAAAAAATrz/F023//9Nt///Tbf//023
+ //9Nt///Tbf//023/5sAAAAAAAAAAAAAAAAAAAAATrj/S023//9Nt///Tbf//023//9Nt///Tbf//023
+ //1Mt/85AAAAAAAAAAAAAAAATbn/TE23//9Nt///Tbf//023//9Nt///Tbf//063/9kAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMs/8bTbf//023
+ //9Nt///Tbf//023//9Nt///Tbb/hQAAAAAAAAAAAAAAAEm2/xxNt///Tbf//023//9Nt///Tbf//023
+ //9Nt//AAAAAAAAAAABLuf8sTbf//023//9Nt///Tbf//023//9Nt///TLf/fAAAAAAAAAAAAAAAAAD/
+ /wFOt//MTbf//023//9Nt///Tbf//023//9Nt///Tbf/ogAAAAAAAAAAAAAAAAAAAABNt/+9Tbf//023
+ //9Nt///Tbf//023//9Nt///Tbb/ewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS7j/PU23/8RNt//5Tbf/1E64
+ /0gAAAAAAAAAAAAAAAAAAAAAAAAAAEe4/xJNt///Tbf//023//9Nt///Tbf//023//9Nt/+RAAAAAAAA
+ AAAAAAAAVar/A023//dNt///Tbf//023//9Nt///Tbf//023/+YAAAAAAAAAAFG5/xZNt///Tbf//023
+ //9Nt///Tbf//023//9NuP9PAAAAAAAAAAAAAAAATrf/Uk23//9Nt///Tbf//023//9Nt///Tbf//023
+ //hQt/8gAAAAAAAAAAAAAAAATrb/O023//9Nt///Tbf//023//9Nt///Tbf//023//lOvP8XAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAE23/zxNt//6Tbf//023//9Nt///Tbf/+065/0UAAAAAAAAAAAAAAAAAAAAAAP//AU23
+ //pNt///Tbf//023//9Nt///Tbf//023/6AAAAAAAAAAAAAAAAAAAAAATbb/0023//9Nt///Tbf//023
+ //9Nt///Tbf//1C2/yMAAAAAAAAAAE23/7VNt///Tbf//023//9Nt///Tbf/31Wq/wkAAAAAAAAAAAD/
+ /wFOuP/PTbf//023//9Nt///Tbf//023//9Nt///TLb/kwAAAAAAAAAAAAAAAAAAAABOt/+4Tbf//023
+ //9Nt///Tbf//023//9Nt///Tbf/pgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATrf/wk23//9Nt///Tbf//023
+ //9Nt///Tbf/xgAAAAAAAAAAAAAAAAAAAAAAAAAATrf/4023//9Nt///Tbf//023//9Nt///Tbj/wQAA
+ AAAAAAAAAAAAAAAAAABNt/+ZTbf//023//9Nt///Tbf//023//9Nt///TLf/fwAAAAAAAAAAR7j/Ek23
+ /6NNt//5Tbf//U23/8pLuf8sAAAAAAAAAAAAAAAATLb/W023//9Nt///Tbf//023//9Nt///Tbf//023
+ //NJtv8VAAAAAAAAAAAAAAAATLf/OU23//9Nt///Tbf//023//9Nt///Tbf//023//9Mt/85AAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAABNt//zTbf//023//9Nt///Tbf//023//9Nt//8Sbb/BwAAAAAAAAAAAAAAAAAA
+ AABMt/+7Tbf//023//9Nt///Tbf//023//9Ntv/oAAAAAAAAAAAAAAAAAAAAAEy3/0pNt///Tbf//023
+ //9Nt///Tbf//023//9Nt//rTrH/DQAAAAAAAAAAAAAAAFWq/wNNs/8KAAAAAAAAAAAAAAAAAAAAAEC/
+ /wRNtv/aTbf//023//9Nt///Tbf//023//9Nt///Tbj/iAAAAAAAAAAAAAAAAAD//wFNt//ETbf//023
+ //9Nt///Tbf//023//9Nt///Tbf/vwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE23/+ZNt///Tbf//023
+ //9Nt///Tbf//023//9Nuf8oAAAAAAAAAAAAAAAAAAAAAE63/41Nt///Tbf//023//9Nt///Tbf//023
+ //9Muv8lAAAAAAAAAAAAAAAAQL//CE24/+9Nt///Tbf//023//9Nt///Tbf//023//9Ot/+kAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATLf/dU23//9Nt///Tbf//023//9Nt///Tbf//023
+ //NNs/8UAAAAAAAAAAAAAAAATLb/VE23//9Nt///Tbf//023//9Nt///Tbf//023//9PuP9EAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAATbf/xE23//9Nt///Tbf//023//9Nt///Tbf//063/1UAAAAAAAAAAAAA
+ AAAAAAAATbb/UE23//9Nt///Tbf//023//9Nt///Tbf//023/24AAAAAAAAAAAAAAAAAAAAATbf/kk23
+ //9Nt///Tbf//023//9Nt///Tbf//023//9MuP+aZsz/BQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE24
+ /zJNt//4Tbf//023//9Nt///Tbf//023//9Nt///Tbj/egAAAAAAAAAAAAAAAEC//whNt//cTbf//023
+ //9Nt///Tbf//023//9Nt///Tbf/yQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABNt/+jTbf//023
+ //9Nt///Tbf//023//9Nt///Tbb/jAAAAAAAAAAAAAAAAAAAAABQr/8QTbf/+023//9Nt///Tbf//023
+ //9Nt///Tbj/yAAAAAAAAAAAAAAAAAAAAABMs/8bTbf/9E23//9Nt///Tbf//023//9Nt///Tbf//023
+ //9Ot//ZTrf/WEm2/wcAAAAAAAAAAAAAAABLuf8zTbf/6U23//9Nt///Tbf//023//9Nt///Tbf//023
+ /91Av/8IAAAAAAAAAAAAAAAATLf/f023//9Nt///Tbf//023//9Nt///Tbf//023//9Ntv9JAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEy3/3JNt///Tbf//023//9Nt///Tbf//023//9Mt//FAAAAAAAA
+ AAAAAAAAAAAAAAAAAABMt/+7Tbf//023//9Nt///Tbf//023//9Nt///T7X/NwAAAAAAAAAAAAAAAAAA
+ AABNt/9qTbf//023//9Nt///Tbf//023//9Nt///Tbf//023//9Nt///Tbf/7k23/61Ntv+MTbf/sk23
+ //1Nt///Tbf//023//9Nt///Tbf//023//9Nt//+TLf/SgAAAAAAAAAAAAAAAE+1/y1Nt//6Tbf//023
+ //9Nt///Tbf//023//9Nt///Tbf/tAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATrb/O023
+ //9Nt///Tbf//023//9Nt///Tbf//023//pQr/8QAAAAAAAAAAAAAAAAAAAAAE23/1lNt///Tbf//023
+ //9Nt///Tbf//023//9Ntv+6AAAAAAAAAAAAAAAAAAAAAAD//wFNt/+0Tbf//023//9Nt///Tbf//023
+ //9Nt///Tbf//023//9Nt///Tbf//023//9Nt///Tbf//023//9Nt///Tbf//023//9Nt///Tbf//023
+ /5kAAAAAAAAAAAAAAABmzP8FTbf/yU23//9Nt///Tbf//023//9Nt///Tbf//023//tLtP8pAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABJtv8HTbf/+E23//9Nt///Tbf//023//9Nt///Tbf//0y2
+ /14AAAAAAAAAAAAAAAAAAAAASbb/B023/+pNt///Tbf//023//9Nt///Tbf//023//9NuP9aAAAAAAAA
+ AAAAAAAAAAAAAFW7/w9Nt//DTbf//023//9Nt///Tbf//023//9Nt///Tbf//023//9Nt///Tbf//023
+ //9Nt///Tbf//023//9Nt///Tbf//023//9Nt//OQL//CAAAAAAAAAAAAAAAAE23/5VNt///Tbf//023
+ //9Nt///Tbf//023//9Nt///Tbf/kgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AABNt/+5Tbf//023//9Nt///Tbf//023//9Nt///Trf/rgAAAAAAAAAAAAAAAAAAAAAAAAAATrj/dk23
+ //9Nt///Tbf//023//9Nt///Tbf//023/+5Qtv8jAAAAAAAAAAAAAAAAAAAAAE2z/wpOt/+uTbf//023
+ //9Nt///Tbf//023//9Nt///Tbf//023//9Nt///Tbf//023//9Nt///Tbf//023//9Nt///Tbb/2k66
+ /xoAAAAAAAAAAAAAAABNt/9jTbf//023//9Nt///Tbf//023//9Nt///Tbf//023/95Vv/8MAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE22/21Nt///Tbf//023//9Nt///Tbf//023
+ //9Nt//3TbP/FAAAAAAAAAAAAAAAAAAAAABAv/8ITbf/4k23//9Nt///Tbf//023//9Nt///Tbf//023
+ /9RQr/8QAAAAAAAAAAAAAAAAAAAAAAD//wFOt/9cTbf/4E23//9Nt///Tbf//023//9Nt///Tbf//023
+ //9Nt///Tbf//023//9Nt///Tbf//023/85OvP8XAAAAAAAAAAAAAAAAT7j/RE23//hNt///Tbf//023
+ //9Nt///Tbf//023//9Nt//+Tbb/QgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAATbn/IU23//9Nt///Tbf//023//9Nt///Tbf//023//9Ntv93AAAAAAAAAAAAAAAAAAAAAAAA
+ AABMt/9RTbf//023//9Nt///Tbf//023//9Nt///Tbf//023/81Ns/8UAAAAAAAAAAAAAAAAAAAAAAAA
+ AABAv/8ITbf/bk23/9dNt///Tbf//023//9Nt///Tbf//023//9Nt///Tbf//023//BOt/+ASbb/BwAA
+ AAAAAAAAAAAAAEy3/0BNt//1Tbf//023//9Nt///Tbf//023//9Nt///Tbf//023/5UAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATbf/y023//9Nt///Tbf//023
+ //9Nt///Tbf//022/+FVqv8DAAAAAAAAAAAAAAAAAAAAAAAAAABOuP+hTbf//023//9Nt///Tbf//023
+ //9Nt///Tbf//023/91Otv8xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE22/zhOuP99Tbf/tU23
+ /9VNt//dTbf/1023/61Otv9pSbb/DgAAAAAAAAAAAAAAAAAAAABOuP9BTbf/8023//9Nt///Tbf//023
+ //9Nt///Tbf//023//9Nt//NTbP/CgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAABNt/9nTbf//023//9Nt///Tbf//023//9Nt///Tbf//023/1kAAAAAAAAAAAAA
+ AAAAAAAAAAAAAEm2/w5Nt//STbf//023//9Nt///Tbf//023//9Nt///Tbf//023//dOuP99Sbb/BwAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAATLf/ck23//tNt///Tbf//023//9Nt///Tbf//023//9Nt///Tbf/50+5/x0AAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEm2/w5Nt//yTbf//023
+ //9Nt///Tbf//023//9Nt///Tbb/2lWq/wYAAAAAAAAAAAAAAAAAAAAAAAAAAE+5/x1Nt//lTbf//023
+ //9Nt///Tbf//023//9Nt///Tbf//023//9Nt//cTbf/WYCA/wIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUbn/Fk23/6pNt///Tbf//023//9Nt///Tbf//023
+ //9Nt///Tbf//023//hPuf86AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEy2/5NNt///Tbf//023//9Nt///Tbf//023//9Nt///Trj/cwAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAE25/yhOt//jTbf//023//9Nt///Tbf//023//9Nt///Tbf//023
+ //9Nt///Tbb/0024/2RNs/8KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATbv/Hk23
+ /4dNt//yTbf//023//9Nt///Tbf//023//9Nt///Tbf//023//9Nt//6TLb/VAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASrX/Jk23
+ //1Nt///Tbf//023//9Nt///Tbf//023//9Nt//xUbn/FgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE25
+ /yFNt//bTbf//023//9Nt///Tbf//023//9Nt///Tbf//023//9Nt///Tbf//023//ZNtv+zTrj/dk65
+ /0VNuP8rS7T/Iku0/yJMt/9ATrj/dk63/8JNt//9Tbf//023//9Nt///Tbf//023//9Nt///Tbf//023
+ //9Nt///Tbf/9064/0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATrf/q023//9Nt///Tbf//023//9Nt///Tbf//023
+ //9Mt/+nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE68/xdNuP/BTbf//023//9Nt///Tbf//023
+ //9Nt///Tbf//023//9Nt///Tbf//023//9Nt///Tbf//023//9Nt///Tbf//023//9Nt///Tbf//023
+ //9Nt///Tbf//023//9Nt///Tbf//023//9Nt///Tbf//023//VOuP9IAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AABQtv8jTbf/+k23//9Nt///Tbf//023//9Nt///Tbf//023//9NuP9kAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAICA/wJOt/95Tbf/9023//9Nt///Tbf//023//9Nt///Tbf//023//9Nt///Tbf//023
+ //9Nt///Tbf//023//9Nt///Tbf//023//9Nt///Tbf//023//9Nt///Tbf//023//9Nt///Tbf//023
+ //9Nt//dTLj/LwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABNt/+LTbf//023//9Nt///Tbf//023
+ //9Nt///Tbf//023//lNtv8/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMuv8lTbb/uk23
+ //9Nt///Tbf//023//9Nt///Tbf//023//9Nt///Tbf//023//9Nt///Tbf//023//9Nt///Tbf//023
+ //9Nt///Tbf//023//9Nt///Tbf//023//9Nt///Tbf/o0e4/xIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAFW//wxNt//iTbf//023//9Nt///Tbf//023//9Nt///Tbf//023/+5MuP8vAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATbf/PE23/7dNt///Tbf//023//9Nt///Tbf//023
+ //9Nt///Tbf//023//9Nt///Tbf//023//9Nt///Tbf//023//9Nt///Tbf//023//9Nt///Tbf/1U65
+ /0UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEy3/0pNt//+Tbf//023
+ //9Nt///Tbf//023//9Nt///Tbf//023/+pLuf8sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAE+2/ypNt/+RTbj/7023//9Nt///Tbf//023//9Nt///Tbf//023//9Nt///Tbf//023
+ //9Nt///Tbf//023//9Nt///Tbf/y062/2JAv/8EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAE24/5ZNt///Tbf//023//9Nt///Tbf//023//9Nt///Tbf//022
+ /+hOtf8+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVqv8GTbb/Rky2
+ /5NOuP/PTbf/+k23//9Nt///Tbf//023//9Nt///Tbf//023//VNt//KTrj/fUu5/ywAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASbb/B023
+ /8lNt///Tbf//023//9Nt///Tbf//023//9Nt///Tbf//023//1Ntv+CZsz/BQAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVqv8GT7X/LU62/ztPuP9ETbb/Qku5
+ /zNJtv8cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATbv/Hk23/+dNt///Tbf//023//9Nt///Tbf//023
+ //9Nt///Tbf//023//9Nt//JT7b/KgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK2kkjiupJGrrqSRq66kkauupJGrrqSRqwAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAATbj/Mk24/+9Nt///Tbf//023//9Nt///Tbf//023//9Nt///Tbf//023//9Nt//6Tbj/j0q1
+ /xgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAArqSRq66kkauupJGrrqSRq66kkautpJI4AAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAArqWQVa6kkP+upJD/rqSQ/66kkP+upJD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATbj/Mk23/+tNt///Tbf//023
+ //9Nt///Tbf//023//9Nt///Tbf//023//9Nt///Tbf/9ky2/5BLtP8iAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACupJD/rqSQ/66k
+ kP+upJD/rqSQ/66lkFUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACupZBVrqSQ/66kkP+upJD/rqSQ/66k
+ kP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAATbj/K023/+BNt///Tbf//023//9Nt///Tbf//023//9Nt///Tbf//023
+ //9Nt///Tbf//023//5Nt//ETLj/aEq1/x8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAK6kkP+upJD/rqSQ/66kkP+upJD/rqWQVQAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAK6lkFWupJD/rqSQ/66kkP+upJD/rqSQ/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASbb/FU63
+ /8JNt///Tbf//023//9Nt///Tbf//023//9Nt///Tbf//023//9Nt///Tbf//023//9Nt///Tbf//023
+ /99Nt/+iTbb/d022/1BMuP8vTrr/GmbM/wUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArqSQ/66k
+ kP+upJD/rqSQ/66kkP+upZBVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArqWQVa6kkP+upJD/rqSQ/66k
+ kP+upJD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVar/Bky2/4lNt//7Tbf//023//9Nt///Tbf//023
+ //9Nt///Tbf//023//9Nt///Tbf//023//9Nt///Tbf//023//9Nt///Tbf//023//9Nt///Tbf//023
+ //9Nt///Tbf//023//BNt//STLf/dUC//wQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACupJD/rqSQ/66kkP+upJD/rqSQ/66lkFUAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAACupZBVrqSQ/66kkP+upJD/rqSQ/66kkP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAEu5/zNOuP/PTbf//023//9Nt///Tbf//023//9Nt///Tbf//023//9Nt///Tbf//023
+ //9Nt///Tbf//023//9Nt///Tbf//023//9Nt///Tbf//023//9Nt///Tbf//023//9Nt///Tbf/nwAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK6k
+ kP+upJD/rqSQ/66kkP+upJD/rqWQVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK6lkFWupJD/rqSQ/66k
+ kP+upJD/rqSQ/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGbM/wVNtv93Tbf/6023
+ //9Nt///Tbf//023//9Nt///Tbf//023//9Nt///Tbf//023//9Nt///Tbf//023//9Nt///Tbf//023
+ //9Nt///Tbf//023//9Nt///Tbf//023//9Nt///S7T/KQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArqSQ/66kkP+upJD/rqSQ/66kkP+upZBVAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAArqWQVa6kkP+upJD/rqSQ/66kkP+upJD/AAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABNs/8KTbf/ak23/9xNt///Tbf//023//9Nt///Tbf//023
+ //9Nt///Tbf//023//9Nt///Tbf//023//9Nt///Tbf//023//9Nt///Tbf//023//9Nt///Tbf//023
+ //9Ot/9YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AACupJD/rqSQ/66kkP+upJD/rqSQ/66lkFUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACupZBVrqSQ/66k
+ kP+upJD/rqSQ/66kkP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAVar/A064/0tOt/+kTbf/9E23//9Nt///Tbf//023//9Nt///Tbf//023//9Nt///Tbf//023
+ //9Nt///Tbf//023//9Nt///Tbf//023//9Nt///Tbf//024/zIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK6kkP+upJD/rqSQ/66kkP+upJD/rqWQVQAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAK6lkFWupJD/rqSQ/66kkP+upJD/rqSQ/wAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABNs/8KTbj/Vk23
+ /5hNuP/WTbf//023//9Nt///Tbf//023//9Nt///Tbf//023//9Nt///Tbf//023//9Nt///Tbf//023
+ //9Nt/+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAArqSQ/66kkP+upJD/rqSQ/66kkP+upZBVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArqWQVa6k
+ kP+upJD/rqSQ/66kkP+upJD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABOvP8XTrn/RUy4/2tMtv+TTLf/sU24
+ /8hOt//jTbf/7k23/+5Nt//uTbf/7k23//xOt//ZTLf/hkC//wgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACupJD/rqSQ/66kkP+upJD/rqSQ/66l
+ kFUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACupZBVrqSQ/66kkP+upJD/rqSQ/66kkP8AAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAK6kkP+upJD/rqSQ/66kkP+upJD/rqWQVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK6l
+ kFWupJD/rqSQ/66kkP+upJD/rqSQ/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArqSQ/66kkP+upJD/rqSQ/66k
+ kP+upZBVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArqWQVa6kkP+upJD/rqSQ/66kkP+upJD/rqWQVa6l
+ kFWupZBVrqWQVa6lkFWupZBVrqWQVa6lkFWupZBVrqWQVa6lkFWupZBVrqWQVa2kkhwAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAraSSHK6lkFWupZBVrqWQVa6lkFWupZBVrqWQVa6lkFWupZBVrqWQVa6l
+ kFWupZBVrqWQVa6lkFWupJD/rqSQ/66kkP+upJD/rqSQ/66lkFUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AACupZBVrqSQ/66kkP+upJD/rqSQ/66kkP+upJD/rqSQ/66kkP+upJD/rqSQ/66kkP+upJD/rqSQ/66k
+ kP+upJD/rqSQ/66kkP+upJD/rqWQVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACupZBVrqSQ/66k
+ kP+upJD/rqSQ/66kkP+upJD/rqSQ/66kkP+upJD/rqSQ/66kkP+upJD/rqSQ/66kkP+upJD/rqSQ/66k
+ kP+upJD/rqWQVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK6lkFWupJD/rqSQ/66kkP+upJD/rqSQ/66k
+ kP+upJD/rqSQ/66kkP+upJD/rqSQ/66kkP+upJD/rqSQ/66kkP+upJD/rqSQ/66kkP+upZBVAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAK6lkFWupJD/rqSQ/66kkP+upJD/rqSQ/66kkP+upJD/rqSQ/66k
+ kP+upJD/rqSQ/66kkP+upJD/rqSQ/66kkP+upJD/rqSQ/66kkP+upZBVAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAArqWQVa6kkP+upJD/rqSQ/66kkP+upJD/rqSQ/66kkP+upJD/rqSQ/66kkP+upJD/rqSQ/66k
+ kP+upJD/rqSQ/66kkP+upJD/rqSQ/66lkFUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArqWQVa6k
+ kP+upJD/rqSQ/66kkP+upJD/rqSQ/66kkP+upJD/rqSQ/66kkP+upJD/rqSQ/66kkP+upJD/rqSQ/66k
+ kP+upJD/rqSQ/66lkFUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACupZBVrqSQ/66kkP+upJD/rqSQ/66k
+ kP+upJD/rqSQ/66kkP+upJD/rqSQ/66kkP+upJD/rqSQ/66kkP+upJD/rqSQ/66kkP+upJD/rqWQVQAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACupZBVrqSQ/66kkP+upJD/rqSQ/66kkP+upJD/rqSQ/66k
+ kP+upJD/rqSQ/66kkP+upJD/rqSQ/66kkP+upJD/rqSQ/66kkP+upJD/rqWQVQAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAK6lkFWupJD/rqSQ/66kkP+upJD/rqSQ/66kkP+upJD/rqSQ/66kkP+upJD/rqSQ/66k
+ kP+upJD/rqSQ/66kkP+upJD/rqSQ/66kkP+upZBVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK6l
+ kFWupJD/rqSQ/66kkP+upJD/rqSQ/66kkP+upJD/rqSQ/66kkP+upJD/rqSQ/66kkP+upJD/rqSQ/66k
+ kP+upJD/rqSQ/66kkP+upZBVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAD/////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////gAAAAAAAAAAAAAAAAf///4AAAAAAAAAAAAAAAAH///+AAAAAAAAAAA
+ AAAAAB////gAAAAAAAAAAAAAAAAf///4AAAAAAAAAAAAAAAAH///+AAAAAAAAAAAAAAAAB////gAAAAA
+ AAAAAAAAAAAf///4AAAAAAAAAAAAAAAAH///+AAAAAAAAAAAAAAAAB////gAAAAAAAAAAAAAAAAf///4
+ AAAAAAAAAAAAAAAAH///+AAAAAAAAAAAAAAAAB////gAAAAAAAAAAAAAAAAf///4AAAAAAAAAAAAAAAA
+ H///+AAAAAAAAAAAAAAAAB////gAAAAAAAAAAAAAAAAf///4AAAAAAAAAAAAAAAAH///+AAAAAAAAAAA
+ AAAAAB////gAAAAAAAAAAAAAAAAf///4AAAAAAAAAAAAAAAAH///+AAAAAAAAAAAAAAAAB////gAAAAA
+ AAAAAAAAAAAf///4AAAAAAAAAAAAAAAAH///+AAAAAAAAAAAAAAAAB////gAAAAAAAAAAAAAAAAf///4
+ AAAAAAAAAAAAAAAAH///+AAAAAAAAAAAAAAAAB////gAAAAAAAAAAAAAAAAf///4AAAAAAAAAAAAAAAA
+ H///+AAAAAAAAAAAAAAAAB////gAAAAAAAAAAAAAAAAf///4AAAAAAAAAAAAAAAAH///+AAAAAAAAAAA
+ AAAAAB////gAAAAAAAAAAAAAAAAf///4AAAAAAAAAAAAAAAAH///+AAAAAAAAAAAAAAAAB////gAAAAA
+ AAAAAAAAAAAf///8AAAAAAAAAAAAAAAAP/////////gHgHwB8Af////////////4D4D4A+AH////////
+ ////+A8A8AfAB/////////////gPAfAPwA/////////////4HwHgH4A/////////////8B4B4D8Af///
+ //////////AeA8A+AP/////////////wHgPAfgHz////////////8B4DwHwDwf////////////AeA4D8
+ B8D////////////wHgOA+AeA////////////8B4DgPgPgP////////////AeA4HwDwH//////////8fw
+ HgOB8B8B//////////+D8B4DgeAeAf//////////AfAeA8PgPgP//////////wHwHwH/wDwD////////
+ //8B8B8A/8B8B///////////AfgfAH+A+Af//////////wD4D4A/APgP//////////+A+A/AAAHwD///
+ ////////gPwHwAAB4B///////////4D8B+AAA8Af//////////+AfgPwAAfAP///////////wH4B/AAP
+ gH///////////8B/AP8AHwB////////////APwB/4P4A////////////4D+AP//8Af///////////+Af
+ wA//8AP////////////gH+AD/8AH////////////8A/wAH8AD/////////////AH+AAAAB//////////
+ ///4B/4AAAA/////////////+AP/AAAAf/////////////wB/8AAAf/////////////+AP/wAAf/////
+ /////////gB//gA///////////////8AH///////////////////gA///////////////+D//8AD////
+ ////B//////g///gAP///////wf/////4P//8AA///////8H/////+D///gAA///////B//////g///8
+ AAAA/////wf/////4P///wAAAD////8H/////+D////AAAA/////B//////g////8AAAP////wf/////
+ 4P////wAAD////8H/////+D/////gAA/////B//////g//////wAf////wf/////4P////////////8H
+ /////+D/////////////B//////g/////////////wf/////4AAH////////4AAH/////+AAB///////
+ /+AAB//////gAAf////////gAAf/////4AAH////////4AAH/////+AAB////////+AAB///////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////4lQTkcNChoKAAAADUlIRFIAAAEAAAABAAgGAAAAXHKoZgAAAAFzUkdCAK7OHOkAAAAE
+ Z0FNQQAAsY8L/GEFAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAABmJLR0QA/wD/AP+gvaeTAAAmEUlEQVR4
+ Xu3dCYBUxbUA0FuvZ4UZ9h2FCILsoCCIcUMjzAz0QFTUuHzzk6g/8RvXuCYRTKKicd8SlyRfTWJARWYH
+ jYDGKATEBSMIikFZBxhnBpit59W/t7pUlu7X71Uv0z19T9LTVW9w9rpd9arqFjDGGGOMMcYYY4wxxhhj
+ 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
+
+
+
\ No newline at end of file
diff --git a/PMAlignTool/PMAlign.cs b/PMAlignTool/PMAlign.cs
new file mode 100644
index 0000000..5d969a4
--- /dev/null
+++ b/PMAlignTool/PMAlign.cs
@@ -0,0 +1,160 @@
+/*
+* ==============================================================================
+*
+* Filename: PMAlign
+* Description:
+*
+* Version: 1.0
+* Created: 2021/3/30 14:07:10
+*
+* Author: liu.wenjie
+*
+* ==============================================================================
+*/
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using CommonMethods;
+using HalconDotNet;
+using ToolBase;
+using static DataStruct.DataStruct;
+
+namespace PMAlignTool
+{
+ [Serializable]
+ public class PMAlign:IToolBase
+ {
+
+ ///
+ /// 是否显示匹配到的模板
+ ///
+ internal bool showTemplate { get; set; } = true;
+ ///
+ /// 是否显示中心十字架
+ ///
+ internal bool showCross { get; set; } = true;
+ ///
+ /// 是否显示特征
+ ///
+ internal bool showFeature { get; set; } = true;
+ ///
+ /// 显示结果序号
+ ///
+ internal bool showIndex { get; set; } = true;
+ ///
+ /// 是否显示搜索区域
+ ///
+ internal bool showSearchRegion { get; set; } = true;
+ ///
+ /// 模板句柄
+ ///
+ internal HTuple modelID { get; set; } = -1;
+ ///
+ /// 行列间隔像素数
+ ///
+ internal int spanPixelNum { get; set; } = 100;
+ ///
+ /// 排序模式
+ ///
+ // internal SortMode sortMode = SortMode.从上至下且从左至右;
+ ///
+ /// 模板区域
+ ///
+ internal HObject templateRegion { get; set; }
+ ///
+ /// 在进行模板创建及匹配时进行的图像预处理
+ ///
+ public ImagePreProcess imageProcess { get; set; } = new ImagePreProcess();
+
+ internal HObject totalRegion;
+ ///
+ /// 搜索区域图像
+ ///
+ internal HObject reducedImage;
+ ///
+ /// 最小匹配分数
+ ///
+ internal double minScore { get; set; } = 0.5;
+ ///
+ /// 匹配个数
+ ///
+ internal int matchNum { get; set; } = 1;
+ ///
+ /// 起始角度
+ ///
+ internal int startAngle { get; set; } = -30;
+ ///
+ /// 角度范围
+ ///
+ internal int angleRange { get; set; } = 30;
+ ///
+ /// 角度步长
+ ///
+ internal int angleStep { get; set; } = 1;
+ ///
+ /// 对比度
+ ///
+ internal int contrast { get; set; } = 30;
+ ///
+ /// 训练时所使用的模板图像,不点击获取图像时,不进行更新
+ ///
+ public HObject oldTrainImage { get; set; }
+
+ internal void DispMainWindow(object dispHWindow)
+ {
+ throw new NotImplementedException();
+ }
+
+ ///
+ /// 极性
+ ///
+ internal string polarity { get; set; } = "use_polarity";
+
+ ///
+ /// 工具锁
+ ///
+ private object obj { get; set; } = new object();
+ ///
+ /// 模板匹配结果
+ ///
+ internal List L_result = new List();
+
+ public override void Run(SoftwareRunState softwareRunState)
+ {
+
+ }
+
+ public override void DispImage()
+ {
+ if (inputImage != null)
+ {
+ FormPMAlignTool.Instance.myHwindow.DispHWindow.DispObj(inputImage);
+ }
+ }
+
+ public override void DispMainWindow(HWindow window)
+ {
+ throw new NotImplementedException();
+ }
+
+ public void CreateModelTemplate()
+ {
+
+ }
+ }
+ [Serializable]
+ public class ImagePreProcess
+ {
+ public ProcessAlg erosionValue1 { get; set; } = new ProcessAlg();
+ public ProcessAlg dilationValue { get; set; } = new ProcessAlg();
+ public ProcessAlg erosionValue2 { get; set; } = new ProcessAlg();
+ }
+ [Serializable]
+ public class ProcessAlg
+ {
+ public double algValue { get; set; } = 0;
+ public bool isEnable { get; set; } = false;
+ }
+}
diff --git a/ToolLib.Log/LogForm/LogForm.csproj b/PMAlignTool/PMAlignTool.csproj
similarity index 50%
rename from ToolLib.Log/LogForm/LogForm.csproj
rename to PMAlignTool/PMAlignTool.csproj
index 67ab386..b33b7d6 100644
--- a/ToolLib.Log/LogForm/LogForm.csproj
+++ b/PMAlignTool/PMAlignTool.csproj
@@ -4,14 +4,13 @@
Debug
AnyCPU
- {6B38D68F-E77B-4761-BDE5-A261EA8925DD}
+ {C1C08195-2EC8-42E9-93BB-D5331E6C6687}
Library
Properties
- LogForm
- LogForm
+ PMAlignTool
+ PMAlignTool
v4.5.2
512
-
true
@@ -31,9 +30,17 @@
4
+
+ ..\UsingControl\Controls\obj\Debug\Controls.dll
+
+
+ C:\Program Files\MVTec\HALCON-19.05-Progress\bin\dotnet20\halcondotnet.dll
+
+
+
@@ -43,37 +50,59 @@
-
+
Form
-
- DetailMesForm.cs
+
+ FormPMAlignTool.cs
+
+
-
- UserControl
-
-
- UserLogger.cs
+
+ True
+ True
+ Resources.resx
-
- DetailMesForm.cs
+
+ FormPMAlignTool.cs
-
- UserLogger.cs
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
-
- {bec2389f-b8b4-4e8a-8c71-189cde14e962}
- EnumList
+
+ {1C8D0DDC-2086-48A9-9586-F2B643E2FC54}
+ CommonHelper
-
- {d4e052b9-e541-4b67-a1f9-273073ef1d4b}
+
+ {DF3D4D4C-02DF-4F92-9FD4-0A861F64B0EF}
+ DataStruct
+
+
+ {8C6FC8C6-8874-494B-8260-071F291AA33D}
+ FormLib
+
+
+ {9BAA53FD-89B5-43E2-AC59-A27B006DEBB6}
+ HWindow_Tool
+
+
+ {7CD50B44-BF56-4E8E-8FA1-05F6968C1835}
+ ToolBase
+
+
+ {D4E052B9-E541-4B67-A1F9-273073EF1D4B}
Logger
+
+ {16E8FF17-98A8-4452-AB9E-C433DC9C21F7}
+ ToolLib.VisionJob
+
" + Regex.Split(myJob.L_toolList[i].toolInput[j].value.ToString(), "->")[1];
- TreeNode bbb = myJob.GetToolIONodeByNodeText(toolNodeText, toolIONodeText);
myJob.D_itemAndSource.Add(treeNode, myJob.GetToolIONodeByNodeText(toolNodeText, toolIONodeText));
}
if (myJob.L_toolList[i].toolType == ToolType.Output)
{
string toolNodeText = Regex.Split(treeNode.Text, "->")[0].Substring(3);
string toolIONodeText = Regex.Split(treeNode.Text, "->")[1];
- TreeNode aaa = myJob.GetToolIONodeByNodeText(toolNodeText, "-->" + toolIONodeText);
myJob.D_itemAndSource.Add(treeNode, myJob.GetToolIONodeByNodeText(toolNodeText, "-->" + toolIONodeText));
}
}
diff --git a/ToolLib.VisionJob/OperateTreeView.cs b/ToolLib.VisionJob/OperateTreeView.cs
index d63704b..5ce9c36 100644
--- a/ToolLib.VisionJob/OperateTreeView.cs
+++ b/ToolLib.VisionJob/OperateTreeView.cs
@@ -88,7 +88,6 @@ namespace ToolLib.VisionJob
IToolInfo insertTool = VisionToolFactory.CreateToolVision(tool, toolName);
TreeNode insertNode = new TreeNode();
insertNode = GetJobTree(jobName).Nodes.Add("", insertTool.toolName, (int)tool, (int)tool); // 该工具对应的节点
-
// 判断节点是否添加默认输入输出图
// 输入
for (int i = 0; i < insertTool.toolInput.Count; i++)
diff --git a/ToolLib.VisionJob/ToolLib.VisionJob.csproj b/ToolLib.VisionJob/ToolLib.VisionJob.csproj
index 1eb83e3..fd27022 100644
--- a/ToolLib.VisionJob/ToolLib.VisionJob.csproj
+++ b/ToolLib.VisionJob/ToolLib.VisionJob.csproj
@@ -83,12 +83,8 @@
{df3d4d4c-02df-4f92-9fd4-0a861f64b0ef}
DataStruct
-
- {6b38d68f-e77b-4761-bde5-a261ea8925dd}
- LogForm
-
- {d4e052b9-e541-4b67-a1f9-273073ef1d4b}
+ {D4E052B9-E541-4B67-A1F9-273073EF1D4B}
Logger
diff --git a/ToolLib.VisionJob/VisionJob.cs b/ToolLib.VisionJob/VisionJob.cs
index b236ba8..24595af 100644
--- a/ToolLib.VisionJob/VisionJob.cs
+++ b/ToolLib.VisionJob/VisionJob.cs
@@ -420,7 +420,8 @@ namespace ToolLib.VisionJob
{
if ((item1.Value.Bounds.X < maxLength && item1.Key.Bounds.X < maxLength) || (item1.Value.Bounds.X < maxLength && item1.Key.Bounds.X < maxLength))
{
- max += (15 - Math.Abs(max - item.Key));
+ if (item1.Value.Bounds.Y > startNode.Bounds.Y || item1.Key.Bounds.Y > startNode.Bounds.Y) //20200612加
+ max += (10 - Math.Abs(max - item.Key));
}
}
}
diff --git a/ToolLib.VisionToolList/ToolLib.VisionToolList.csproj b/ToolLib.VisionToolList/ToolLib.VisionToolList.csproj
index 98d5079..010ee90 100644
--- a/ToolLib.VisionToolList/ToolLib.VisionToolList.csproj
+++ b/ToolLib.VisionToolList/ToolLib.VisionToolList.csproj
@@ -65,6 +65,10 @@
{F5669FB7-77EC-44B9-898B-6D575B7D26EA}
HalconTool
+
+ {C1C08195-2EC8-42E9-93BB-D5331E6C6687}
+ PMAlignTool
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/UsingControl/Controls/CCheckBox.cs b/UsingControl/Controls/CCheckBox.cs
new file mode 100644
index 0000000..6e86e69
--- /dev/null
+++ b/UsingControl/Controls/CCheckBox.cs
@@ -0,0 +1,76 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using Controls.Properties;
+
+namespace Controls
+{
+ public delegate void DCheckChanged(bool Checked);
+ public partial class CCheckBox : UserControl
+ {
+ public CCheckBox()
+ {
+ InitializeComponent();
+ ckb_box.Text = TextStr;
+ }
+
+ ///
+ /// 状态改变事件
+ ///
+ public event DCheckChanged CheckChanged;
+ ///
+ /// 勾选状态
+ ///
+ private bool _checked = false;
+ public bool Checked
+ {
+ get { return _checked; }
+ set
+ {
+ _checked = value;
+ ckb_box.Checked = value;
+ }
+ }
+ ///
+ /// 文本
+ ///
+ private string _textStr = "复选框";
+ public string TextStr
+ {
+ get { return _textStr; }
+ set
+ {
+ _textStr = value;
+ ckb_box.Text = value;
+ }
+ }
+
+
+ private void pic_image_Click(object sender, EventArgs e)
+ {
+ ckb_box.Checked = !ckb_box.Checked;
+ }
+ private void ckb_box_CheckedChanged(object sender, EventArgs e)
+ {
+ if (ckb_box.Checked)
+ {
+ pic_image.Image = Resources.复选框;
+ Checked = true;
+ }
+ else
+ {
+ pic_image.Image = Resources.去复选框;
+ Checked = false;
+ }
+ if (CheckChanged != null)
+ CheckChanged(ckb_box.Checked);
+ }
+
+ }
+}
diff --git a/UsingControl/Controls/CCheckBox.designer.cs b/UsingControl/Controls/CCheckBox.designer.cs
new file mode 100644
index 0000000..f32e812
--- /dev/null
+++ b/UsingControl/Controls/CCheckBox.designer.cs
@@ -0,0 +1,85 @@
+namespace Controls
+{
+ partial class CCheckBox
+ {
+ ///
+ /// 必需的设计器变量。
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// 清理所有正在使用的资源。
+ ///
+ /// 如果应释放托管资源,为 true;否则为 false。
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region 组件设计器生成的代码
+
+ ///
+ /// 设计器支持所需的方法 - 不要
+ /// 使用代码编辑器修改此方法的内容。
+ ///
+ private void InitializeComponent()
+ {
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(CCheckBox));
+ this.pic_image = new System.Windows.Forms.PictureBox();
+ this.ckb_box = new System.Windows.Forms.CheckBox();
+ ((System.ComponentModel.ISupportInitialize)(this.pic_image)).BeginInit();
+ this.SuspendLayout();
+ //
+ // pic_image
+ //
+ this.pic_image.Image = ((System.Drawing.Image)(resources.GetObject("pic_image.Image")));
+ this.pic_image.Location = new System.Drawing.Point(1, 1);
+ this.pic_image.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
+ this.pic_image.Name = "pic_image";
+ this.pic_image.Size = new System.Drawing.Size(18, 18);
+ this.pic_image.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
+ this.pic_image.TabIndex = 0;
+ this.pic_image.TabStop = false;
+ this.pic_image.Click += new System.EventHandler(this.pic_image_Click);
+ //
+ // ckb_box
+ //
+ this.ckb_box.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.ckb_box.BackColor = System.Drawing.Color.White;
+ this.ckb_box.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
+ this.ckb_box.Location = new System.Drawing.Point(5, 1);
+ this.ckb_box.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
+ this.ckb_box.Name = "ckb_box";
+ this.ckb_box.Size = new System.Drawing.Size(161, 23);
+ this.ckb_box.TabIndex = 1;
+ this.ckb_box.Text = "复选框";
+ this.ckb_box.UseVisualStyleBackColor = false;
+ this.ckb_box.CheckedChanged += new System.EventHandler(this.ckb_box_CheckedChanged);
+ //
+ // CCheckBox
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 17F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.BackColor = System.Drawing.Color.White;
+ this.Controls.Add(this.pic_image);
+ this.Controls.Add(this.ckb_box);
+ this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
+ this.Name = "CCheckBox";
+ this.Size = new System.Drawing.Size(167, 20);
+ ((System.ComponentModel.ISupportInitialize)(this.pic_image)).EndInit();
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.PictureBox pic_image;
+ private System.Windows.Forms.CheckBox ckb_box;
+ }
+}
diff --git a/UsingControl/Controls/CCheckBox.resx b/UsingControl/Controls/CCheckBox.resx
new file mode 100644
index 0000000..bee23b0
--- /dev/null
+++ b/UsingControl/Controls/CCheckBox.resx
@@ -0,0 +1,145 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAABGdBTUEAALGPC/xhBQAABGFJREFUeF7t
+ nYFR20AQRSnBJVBCOgglpIPQQdxBKIEOoBKTDkgHSQdJB8n/mTXjEYJIp7vT7u3/M29gQNrz+D9sy9jy
+ laIoiqIoiqIoiqIU5unp6fp0On0U7eB1bFf3/uGFAV/AM/gjusLrnNd9fyGw6AE8gLkLJvrDLg5WT9tg
+ oRvwyxYWfmAnH6ymNsECtxcLCp/cWl11g8H8y59bUPij7i0BBvI+Xzf7cWBX9R4TYNjjxXARg0erb1sw
+ iId6cwsI/2w/RMSQ42SoiMPRaiwPhuhJnrg8W43lmRkqAmE1lgUDdP8fn/LHAdhZx/7xubE614c7T4aJ
+ eEiA5EiA5EiA5EiA5EiA5EiA5EiA5EiA5EiA5EiA5EiA5EiA5EiA5EiA5EgAb5xOp5/4ylda3+H7b5e/
+ a4AE8ALK/o2vr965g5/xXdWtRJAAHrDy333HDrb5Pt2vAhJgb5aUz3Cby/0qIQH2ZGn552B7Pj6YnVWI
+ BNiLteUz2Kf2YwEJsAcl5TMSYABKy2emsyogAXqysfy7y1mVkAC92Fh+iyMAIgF6UKH8VifgkACtcVw+
+ kQAtcV4+kQCtCFA+kQAtCFI+kQCNKLpisV/P8okEaEDRyRixX+/yiQSoTKTyiQSoSLTyiQSoRMTyiQSo
+ QNTyiV8BcCh1fnHkPb5v/eLIUiKXT/wJYMfQr65Y/IwvjmzxurhSopdPXN4CvHuhnNwajFA+cSfAnY1/
+ M9jmsPMtwSjlE3cCLLpA2G4vCUYqn/gSwEYvCrbvLcFo5RN3twCrzl2L7XtJMGL5xJ0An2z84mCf1hKM
+ Wj5xJ8APG78q2K+VBCOXT9wJQB5siVXBfrUlKC2fH6IV5YM0XApA9pYgQ/nErQBkiwRb3kOXpXziWgBS
+ fB8MCfiU8tzM98hUPnEvAOklQbbySQgBSGsJMpZPwghAWkmQtXwSSgBSW4LM5ZNwApBaEmQvn4QUgGyV
+ oOjDk7HfSOWTsAKQUgmKPiwR+41WPgktACmSYG2wzojlk/ACkKL34C0N5o9aPhlCAP7XrYkEmDty+WQI
+ AUh1CTBv9PLJMAKQahJgTobyyVACkM0SYP8s5ZPhBCDFEmC/TOWTIQUgqyXA9tnKJ8MKQBZLgO0ylk+G
+ FoD8VwL8Pmv5ZHgByJsS4OeZyycpBDjzFfwTAV+vwWdAOea2zUIqAcRrJEByJEByJEByJEByJEByJEBy
+ JEByJEByJEByJEByJEByJEByJEByJEByJEByJEByJEByJEByNgnA19XNDRVxKDpXwktmBopAWI3lOfU5
+ VbtoALuzGsuDQcfpYBGGo9VYHgzR44C4bLv/PweD+Nl+cwsIv9xbfduDYTw795LTsQoHWFcHq69OMJCf
+ kDG7oHDHqrfNLw4G304WEv5oe1o9LLD07NyiI9ZJm7/8abAQ33KtB4Z+uAd17/OXBIvyEPHIJxzsgohO
+ 2HXO52jqHOrVCC8M4D+QRDv8FK4oiqIoiqIoiqLEytXVXycxKra7YoNwAAAAAElFTkSuQmCC
+
+
+
\ No newline at end of file
diff --git a/UsingControl/Controls/CComboBox.cs b/UsingControl/Controls/CComboBox.cs
new file mode 100644
index 0000000..c75b193
--- /dev/null
+++ b/UsingControl/Controls/CComboBox.cs
@@ -0,0 +1,134 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using Controls.Properties;
+
+namespace Controls
+{
+ public delegate void DSelectedIndexChanged();
+ public partial class CComboBox : UserControl
+ {
+ public CComboBox()
+ {
+ InitializeComponent();
+ cbx_item.Items.AddRange(Items);
+ }
+
+ ///
+ /// 选中项改变事件
+ ///
+ public event DSelectedIndexChanged SelectedIndexChanged;
+ ///
+ /// 选中项索引
+ ///
+ private int _selectedIndex = -1;
+ public int SelectedIndex
+ {
+ get { return _selectedIndex; }
+ set
+ {
+ _selectedIndex = value;
+ cbx_item.SelectedIndex = value;
+ }
+ }
+ ///
+ /// 文本
+ ///
+ private string _text = string.Empty;
+ public string TextStr
+ {
+ get { return _text; }
+ set
+ {
+ _text = value;
+ cbx_item.Text = value;
+ }
+ }
+ ///
+ /// 是否可以编辑
+ ///
+ private bool _canEdit = false;
+ public bool CanEdit
+ {
+ get { return _canEdit; }
+ set
+ {
+ _canEdit = value;
+ if (value)
+ cbx_item.DropDownStyle = ComboBoxStyle.DropDown;
+ else
+ cbx_item.DropDownStyle = ComboBoxStyle.DropDownList;
+ }
+ }
+ ///
+ /// 项
+ ///
+ private string[] _items = new string[] { };
+ public string[] Items
+ {
+ get { return _items; }
+ set
+ {
+ _items = value;
+ cbx_item.Items.Clear();
+ cbx_item.Items.AddRange(value);
+ }
+ }
+
+
+ ///
+ /// 删除所有项
+ ///
+ public void Clear()
+ {
+ Items = new string[] { };
+ cbx_item.Items.Clear();
+ }
+ ///
+ /// 添加项
+ ///
+ /// 项
+ public void Add(string item)
+ {
+ string[] items = new string[Items.Length + 1];
+ for (int i = 0; i < Items.Length; i++)
+ {
+ items[i] = Items[i];
+ }
+ items[Items.Length] = item;
+ Items = items;
+ }
+
+
+ private void cbx_item_SelectedIndexChanged(object sender, EventArgs e)
+ {
+ SelectedIndex = cbx_item.SelectedIndex;
+ TextStr = cbx_item.Text;
+ if (SelectedIndexChanged != null)
+ SelectedIndexChanged();
+ }
+ private void ComboBox_Enter(object sender, EventArgs e)
+ {
+ lbl_line.Height = 2;
+ lbl_line.BackColor = Color.FromArgb(18, 150, 219);
+ btn_showItem.Image = Resources.BlueImage;
+ }
+ private void ComboBox_Leave(object sender, EventArgs e)
+ {
+ lbl_line.Height = 1;
+ lbl_line.BackColor = Color.Gray;
+ btn_showItem.Image = Resources.GrayImage;
+ }
+ private void btn_showItem_Click(object sender, EventArgs e)
+ {
+ cbx_item.DroppedDown = true;
+ }
+
+ }
+}
diff --git a/UsingControl/Controls/CComboBox.designer.cs b/UsingControl/Controls/CComboBox.designer.cs
new file mode 100644
index 0000000..82159b6
--- /dev/null
+++ b/UsingControl/Controls/CComboBox.designer.cs
@@ -0,0 +1,108 @@
+namespace Controls
+{
+ partial class CComboBox
+ {
+ ///
+ /// 必需的设计器变量。
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// 清理所有正在使用的资源。
+ ///
+ /// 如果应释放托管资源,为 true;否则为 false。
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region 组件设计器生成的代码
+
+ ///
+ /// 设计器支持所需的方法 - 不要
+ /// 使用代码编辑器修改此方法的内容。
+ ///
+ private void InitializeComponent()
+ {
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(CComboBox));
+ this.cbx_item = new System.Windows.Forms.ComboBox();
+ this.lbl_line = new System.Windows.Forms.Label();
+ this.btn_showItem = new System.Windows.Forms.Button();
+ this.SuspendLayout();
+ //
+ // cbx_item
+ //
+ this.cbx_item.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.cbx_item.BackColor = System.Drawing.Color.White;
+ this.cbx_item.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+ this.cbx_item.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
+ this.cbx_item.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
+ this.cbx_item.FormattingEnabled = true;
+ this.cbx_item.Location = new System.Drawing.Point(2, -3);
+ this.cbx_item.Margin = new System.Windows.Forms.Padding(0);
+ this.cbx_item.Name = "cbx_item";
+ this.cbx_item.Size = new System.Drawing.Size(120, 25);
+ this.cbx_item.TabIndex = 10;
+ this.cbx_item.TabStop = false;
+ this.cbx_item.SelectedIndexChanged += new System.EventHandler(this.cbx_item_SelectedIndexChanged);
+ //
+ // lbl_line
+ //
+ this.lbl_line.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.lbl_line.BackColor = System.Drawing.Color.Gray;
+ this.lbl_line.Location = new System.Drawing.Point(3, 20);
+ this.lbl_line.Name = "lbl_line";
+ this.lbl_line.Size = new System.Drawing.Size(120, 1);
+ this.lbl_line.TabIndex = 11;
+ //
+ // btn_showItem
+ //
+ this.btn_showItem.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.btn_showItem.BackColor = System.Drawing.Color.White;
+ this.btn_showItem.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
+ this.btn_showItem.FlatAppearance.BorderColor = System.Drawing.Color.White;
+ this.btn_showItem.FlatAppearance.BorderSize = 0;
+ this.btn_showItem.FlatAppearance.MouseDownBackColor = System.Drawing.Color.Gray;
+ this.btn_showItem.FlatAppearance.MouseOverBackColor = System.Drawing.Color.DarkGray;
+ this.btn_showItem.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
+ this.btn_showItem.Image = ((System.Drawing.Image)(resources.GetObject("btn_showItem.Image")));
+ this.btn_showItem.ImageAlign = System.Drawing.ContentAlignment.BottomCenter;
+ this.btn_showItem.Location = new System.Drawing.Point(103, -1);
+ this.btn_showItem.Margin = new System.Windows.Forms.Padding(0);
+ this.btn_showItem.Name = "btn_showItem";
+ this.btn_showItem.Size = new System.Drawing.Size(17, 20);
+ this.btn_showItem.TabIndex = 12;
+ this.btn_showItem.UseVisualStyleBackColor = false;
+ this.btn_showItem.Click += new System.EventHandler(this.btn_showItem_Click);
+ //
+ // CComboBox
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 17F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.BackColor = System.Drawing.Color.White;
+ this.Controls.Add(this.btn_showItem);
+ this.Controls.Add(this.lbl_line);
+ this.Controls.Add(this.cbx_item);
+ this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.Margin = new System.Windows.Forms.Padding(0);
+ this.Name = "CComboBox";
+ this.Size = new System.Drawing.Size(120, 22);
+ this.Enter += new System.EventHandler(this.ComboBox_Enter);
+ this.Leave += new System.EventHandler(this.ComboBox_Leave);
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.ComboBox cbx_item;
+ private System.Windows.Forms.Label lbl_line;
+ private System.Windows.Forms.Button btn_showItem;
+ }
+}
diff --git a/UsingControl/Controls/CComboBox.resx b/UsingControl/Controls/CComboBox.resx
new file mode 100644
index 0000000..484c649
--- /dev/null
+++ b/UsingControl/Controls/CComboBox.resx
@@ -0,0 +1,128 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAABGdBTUEAALGPC/xhBQAAADlJREFUKFNj
+ 6OrqMuju7q7HhkFyYAWdnZ0fgPR/ZAwVM2AAARADWRGKJAzAFGGVhAGQBE5JWgEGBgBpDD29jSJy5QAA
+ AABJRU5ErkJggg==
+
+
+
\ No newline at end of file
diff --git a/UsingControl/Controls/CNumeric.cs b/UsingControl/Controls/CNumeric.cs
new file mode 100644
index 0000000..d89abd2
--- /dev/null
+++ b/UsingControl/Controls/CNumeric.cs
@@ -0,0 +1,77 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace Controls
+{
+ public partial class CNumeric : UserControl
+ {
+ public CNumeric()
+ {
+ InitializeComponent();
+ tbx_value.Text = _value.ToString();
+ }
+
+ ///
+ /// 值改变事件
+ ///
+ public event DValueChanged ValueChanged;
+ ///
+ /// 值
+ ///
+ private string _value = string.Empty;
+ public string Value
+ {
+ get
+ {
+ return _value;
+ }
+ set
+ {
+ _value = value;
+ tbx_value.Text = value.ToString();
+ }
+ }
+
+
+ private void tbx_value_KeyPress(object sender, KeyPressEventArgs e)
+ {
+ try
+ {
+ /*只能数字键、退格键、负号、小数点*/
+ if (((int)e.KeyChar < 48 || (int)e.KeyChar > 57) && (int)e.KeyChar != 8 &&
+ (int)e.KeyChar != 45 && (int)e.KeyChar != 46) e.Handled = true;
+ /*输入为负号和小数点时,且只能输入一次(负号只能最前面输入,小数点不可最前面输入)*/
+ if (e.KeyChar == 45 && (((TextBox)sender).SelectionStart != 0 ||
+ ((TextBox)sender).Text.IndexOf("-") >= 0)) e.Handled = true;
+ if (e.KeyChar == 46 && (((TextBox)sender).SelectionStart == 0 ||
+ ((TextBox)sender).Text.IndexOf(".") >= 0)) e.Handled = true;
+ }
+ catch { }
+ }
+ private void Numeric_Enter(object sender, EventArgs e)
+ {
+ lbl_line.Height = 2;
+ lbl_line.BackColor = Color.FromArgb(18, 150, 219);
+ }
+ private void Numeric_Leave(object sender, EventArgs e)
+ {
+ lbl_line.Height = 1;
+ lbl_line.BackColor = Color.Gray;
+ }
+ private void tbx_value_TextChanged(object sender, EventArgs e)
+ {
+ if (tbx_value.Text != string.Empty && tbx_value.Text != Value.ToString())
+ Value = tbx_value.Text;
+ if (ValueChanged != null)
+ ValueChanged(Convert.ToDouble(Value));
+ }
+
+ }
+}
diff --git a/UsingControl/Controls/CNumeric.designer.cs b/UsingControl/Controls/CNumeric.designer.cs
new file mode 100644
index 0000000..fb6fdda
--- /dev/null
+++ b/UsingControl/Controls/CNumeric.designer.cs
@@ -0,0 +1,79 @@
+namespace Controls
+{
+ partial class CNumeric
+ {
+ ///
+ /// 必需的设计器变量。
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// 清理所有正在使用的资源。
+ ///
+ /// 如果应释放托管资源,为 true;否则为 false。
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region 组件设计器生成的代码
+
+ ///
+ /// 设计器支持所需的方法 - 不要
+ /// 使用代码编辑器修改此方法的内容。
+ ///
+ private void InitializeComponent()
+ {
+ this.lbl_line = new System.Windows.Forms.Label();
+ this.tbx_value = new System.Windows.Forms.TextBox();
+ this.SuspendLayout();
+ //
+ // lbl_line
+ //
+ this.lbl_line.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
+ this.lbl_line.BackColor = System.Drawing.Color.Gray;
+ this.lbl_line.Location = new System.Drawing.Point(0, 20);
+ this.lbl_line.Name = "lbl_line";
+ this.lbl_line.Size = new System.Drawing.Size(120, 1);
+ this.lbl_line.TabIndex = 8;
+ //
+ // tbx_value
+ //
+ this.tbx_value.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
+ this.tbx_value.BorderStyle = System.Windows.Forms.BorderStyle.None;
+ this.tbx_value.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
+ this.tbx_value.Location = new System.Drawing.Point(3, 0);
+ this.tbx_value.Name = "tbx_value";
+ this.tbx_value.Size = new System.Drawing.Size(114, 16);
+ this.tbx_value.TabIndex = 9;
+ this.tbx_value.TextChanged += new System.EventHandler(this.tbx_value_TextChanged);
+ this.tbx_value.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.tbx_value_KeyPress);
+ //
+ // CNumeric
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 17F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.BackColor = System.Drawing.Color.White;
+ this.Controls.Add(this.tbx_value);
+ this.Controls.Add(this.lbl_line);
+ this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
+ this.Name = "CNumeric";
+ this.Size = new System.Drawing.Size(121, 22);
+ this.Enter += new System.EventHandler(this.Numeric_Enter);
+ this.Leave += new System.EventHandler(this.Numeric_Leave);
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.Label lbl_line;
+ private System.Windows.Forms.TextBox tbx_value;
+ }
+}
diff --git a/UsingControl/Controls/CNumeric.resx b/UsingControl/Controls/CNumeric.resx
new file mode 100644
index 0000000..1af7de1
--- /dev/null
+++ b/UsingControl/Controls/CNumeric.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/UsingControl/Controls/CNumericUpDown.cs b/UsingControl/Controls/CNumericUpDown.cs
new file mode 100644
index 0000000..453f511
--- /dev/null
+++ b/UsingControl/Controls/CNumericUpDown.cs
@@ -0,0 +1,193 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using System.Text.RegularExpressions;
+using Controls.Properties;
+
+namespace Controls
+{
+ public delegate void DValueChanged(double value);
+ public partial class CNumericUpDown : UserControl
+ {
+ public CNumericUpDown()
+ {
+ InitializeComponent();
+ nud_value.Text = Value.ToString();
+ }
+
+ ///
+ /// 值改变事件
+ ///
+ public event DValueChanged ValueChanged;
+ ///
+ /// 点击一下值的变化量
+ ///
+ private decimal _incremeent = 1;
+ public decimal Incremeent
+ {
+ get { return _incremeent; }
+ set { _incremeent = value; }
+ }
+
+ ///
+ /// 小数位数
+ ///
+ private int _decimalPlaces = 0;
+ public int DecimalPlaces
+ {
+ get { return _decimalPlaces; }
+ set
+ {
+ _decimalPlaces = value;
+ nud_value.DecimalPlaces = value;
+ }
+ }
+
+ ///
+ /// 最小值
+ ///
+ private decimal _minValue = 0;
+ public decimal MinValue
+ {
+ get { return _minValue; }
+ set
+ {
+ _minValue = value;
+ nud_value.Minimum = value;
+ }
+ }
+
+ ///
+ /// 最大值
+ ///
+ private decimal _maxValue = 100;
+ public decimal MaxValue
+ {
+ get { return _maxValue; }
+ set
+ {
+ _maxValue = value;
+ nud_value.Maximum = value;
+ }
+ }
+
+ ///
+ /// 值
+ ///
+ private double _value = 0;
+ public double Value
+ {
+ get
+ {
+ return _value;
+ }
+ set
+ {
+ _value = value;
+ nud_value.Text = value.ToString();
+ }
+ }
+
+
+ private void btn_add_MouseEnter(object sender, EventArgs e)
+ {
+ try
+ {
+ btn_add.BringToFront();
+ if (nud_value.Value < MaxValue)
+ {
+ btn_add.FlatAppearance.MouseDownBackColor = Color.Gray;
+ btn_add.FlatAppearance.MouseOverBackColor = Color.DarkGray;
+ btn_add.Image = Resources.blueAdd;
+ }
+ else
+ {
+ btn_add.FlatAppearance.MouseDownBackColor = Color.White;
+ btn_add.FlatAppearance.MouseOverBackColor = Color.White;
+ }
+ }
+ catch { }
+ }
+ private void btn_add_MouseLeave(object sender, EventArgs e)
+ {
+ btn_add.Image = Resources.grayAdd;
+ }
+ private void btn_sub_MouseEnter(object sender, EventArgs e)
+ {
+ try
+ {
+ btn_sub.BringToFront();
+ if (nud_value.Value >= MinValue)
+ {
+ btn_sub.FlatAppearance.MouseDownBackColor = Color.Gray;
+ btn_sub.FlatAppearance.MouseOverBackColor = Color.DarkGray;
+ btn_sub.Image = Resources.blueSub;
+ }
+ else
+ {
+ btn_sub.FlatAppearance.MouseDownBackColor = Color.White;
+ btn_sub.FlatAppearance.MouseOverBackColor = Color.White;
+ }
+ }
+ catch { }
+ }
+ private void btn_add_Click(object sender, EventArgs e)
+ {
+ try
+ {
+ if (nud_value.Value + Incremeent <= MaxValue)
+ nud_value.Text = (nud_value.Value + Incremeent).ToString();
+
+ if (nud_value.Value >= MaxValue)
+ {
+ btn_add.FlatAppearance.MouseDownBackColor = Color.White;
+ btn_add.FlatAppearance.MouseOverBackColor = Color.White;
+ btn_add.Image = Resources.grayAdd;
+ }
+ }
+ catch { }
+ }
+ private void btn_sub_Click(object sender, EventArgs e)
+ {
+ try
+ {
+ if (nud_value.Value + Incremeent > MinValue)
+ nud_value.Text = (nud_value.Value - Incremeent).ToString();
+
+ if (nud_value.Value <= MinValue)
+ {
+ btn_sub.FlatAppearance.MouseDownBackColor = Color.White;
+ btn_sub.FlatAppearance.MouseOverBackColor = Color.White;
+ btn_sub.Image = Resources.graySub;
+ }
+ }
+ catch { }
+ }
+ private void nud_value_ValueChanged(object sender, EventArgs e)
+ {
+ Value = (double)nud_value.Value;
+ if (ValueChanged != null)
+ ValueChanged(Value);
+ }
+ private void UserControl1_Leave(object sender, EventArgs e)
+ {
+ lbl_line.Height = 1;
+ lbl_line.BackColor = Color.Gray;
+ }
+ private void UserControl1_Enter(object sender, EventArgs e)
+ {
+ lbl_line.Height = 2;
+ lbl_line.BackColor = Color.FromArgb(18, 150, 219);
+ }
+ private void btn_sub_MouseLeave(object sender, EventArgs e)
+ {
+ btn_sub.Image = Resources.graySub;
+ }
+
+ }
+}
diff --git a/UsingControl/Controls/CNumericUpDown.designer.cs b/UsingControl/Controls/CNumericUpDown.designer.cs
new file mode 100644
index 0000000..d2ff417
--- /dev/null
+++ b/UsingControl/Controls/CNumericUpDown.designer.cs
@@ -0,0 +1,133 @@
+namespace Controls
+{
+ partial class CNumericUpDown
+ {
+ ///
+ /// 必需的设计器变量。
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// 清理所有正在使用的资源。
+ ///
+ /// 如果应释放托管资源,为 true;否则为 false。
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region 组件设计器生成的代码
+
+ ///
+ /// 设计器支持所需的方法 - 不要
+ /// 使用代码编辑器修改此方法的内容。
+ ///
+ private void InitializeComponent()
+ {
+ this.btn_add = new System.Windows.Forms.Button();
+ this.btn_sub = new System.Windows.Forms.Button();
+ this.lbl_line = new System.Windows.Forms.Label();
+ this.nud_value = new System.Windows.Forms.NumericUpDown();
+ ((System.ComponentModel.ISupportInitialize)(this.nud_value)).BeginInit();
+ this.SuspendLayout();
+ //
+ // btn_add
+ //
+ this.btn_add.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.btn_add.BackColor = System.Drawing.Color.White;
+ this.btn_add.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
+ this.btn_add.FlatAppearance.BorderSize = 0;
+ this.btn_add.FlatAppearance.MouseDownBackColor = System.Drawing.Color.Gray;
+ this.btn_add.FlatAppearance.MouseOverBackColor = System.Drawing.Color.DarkGray;
+ this.btn_add.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
+ this.btn_add.Image = global::Controls.Properties.Resources.grayAdd;
+ this.btn_add.Location = new System.Drawing.Point(119, 0);
+ this.btn_add.Margin = new System.Windows.Forms.Padding(3, 6, 3, 6);
+ this.btn_add.Name = "btn_add";
+ this.btn_add.Size = new System.Drawing.Size(20, 23);
+ this.btn_add.TabIndex = 7;
+ this.btn_add.TabStop = false;
+ this.btn_add.UseVisualStyleBackColor = false;
+ this.btn_add.Click += new System.EventHandler(this.btn_add_Click);
+ this.btn_add.MouseEnter += new System.EventHandler(this.btn_add_MouseEnter);
+ this.btn_add.MouseLeave += new System.EventHandler(this.btn_add_MouseLeave);
+ //
+ // btn_sub
+ //
+ this.btn_sub.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.btn_sub.BackColor = System.Drawing.Color.White;
+ this.btn_sub.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
+ this.btn_sub.FlatAppearance.BorderSize = 0;
+ this.btn_sub.FlatAppearance.MouseDownBackColor = System.Drawing.Color.Gray;
+ this.btn_sub.FlatAppearance.MouseOverBackColor = System.Drawing.Color.DarkGray;
+ this.btn_sub.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
+ this.btn_sub.Image = global::Controls.Properties.Resources.graySub;
+ this.btn_sub.Location = new System.Drawing.Point(101, 0);
+ this.btn_sub.Margin = new System.Windows.Forms.Padding(14, 20, 14, 20);
+ this.btn_sub.Name = "btn_sub";
+ this.btn_sub.Size = new System.Drawing.Size(20, 23);
+ this.btn_sub.TabIndex = 6;
+ this.btn_sub.TabStop = false;
+ this.btn_sub.UseVisualStyleBackColor = false;
+ this.btn_sub.Click += new System.EventHandler(this.btn_sub_Click);
+ this.btn_sub.MouseEnter += new System.EventHandler(this.btn_sub_MouseEnter);
+ this.btn_sub.MouseLeave += new System.EventHandler(this.btn_sub_MouseLeave);
+ //
+ // lbl_line
+ //
+ this.lbl_line.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.lbl_line.BackColor = System.Drawing.Color.Gray;
+ this.lbl_line.Location = new System.Drawing.Point(3, 24);
+ this.lbl_line.Name = "lbl_line";
+ this.lbl_line.Size = new System.Drawing.Size(137, 1);
+ this.lbl_line.TabIndex = 5;
+ //
+ // nud_value
+ //
+ this.nud_value.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.nud_value.BorderStyle = System.Windows.Forms.BorderStyle.None;
+ this.nud_value.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
+ this.nud_value.Location = new System.Drawing.Point(6, 4);
+ this.nud_value.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
+ this.nud_value.Name = "nud_value";
+ this.nud_value.Size = new System.Drawing.Size(130, 19);
+ this.nud_value.TabIndex = 8;
+ this.nud_value.ValueChanged += new System.EventHandler(this.nud_value_ValueChanged);
+ //
+ // CNumericUpDown
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 17F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.BackColor = System.Drawing.Color.White;
+ this.Controls.Add(this.btn_add);
+ this.Controls.Add(this.btn_sub);
+ this.Controls.Add(this.lbl_line);
+ this.Controls.Add(this.nud_value);
+ this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
+ this.MaximumSize = new System.Drawing.Size(300, 26);
+ this.MinimumSize = new System.Drawing.Size(50, 26);
+ this.Name = "CNumericUpDown";
+ this.Size = new System.Drawing.Size(140, 26);
+ this.Enter += new System.EventHandler(this.UserControl1_Enter);
+ this.Leave += new System.EventHandler(this.UserControl1_Leave);
+ ((System.ComponentModel.ISupportInitialize)(this.nud_value)).EndInit();
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.Button btn_add;
+ private System.Windows.Forms.Button btn_sub;
+ private System.Windows.Forms.Label lbl_line;
+ private System.Windows.Forms.NumericUpDown nud_value;
+ }
+}
diff --git a/UsingControl/Controls/CNumericUpDown.resx b/UsingControl/Controls/CNumericUpDown.resx
new file mode 100644
index 0000000..1af7de1
--- /dev/null
+++ b/UsingControl/Controls/CNumericUpDown.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/UsingControl/Controls/CRadioBox.cs b/UsingControl/Controls/CRadioBox.cs
new file mode 100644
index 0000000..c29f054
--- /dev/null
+++ b/UsingControl/Controls/CRadioBox.cs
@@ -0,0 +1,75 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using Controls.Properties;
+
+namespace Controls
+{
+ public partial class CRadioBox : UserControl
+ {
+ public CRadioBox()
+ {
+ InitializeComponent();
+ ckb_box.Text = TextStr;
+ }
+
+ ///
+ /// 状态改变事件
+ ///
+ public event DCheckChanged CheckChanged;
+ ///
+ /// 勾选状态
+ ///
+ private bool _checked = false;
+ public bool Checked
+ {
+ get { return _checked; }
+ set
+ {
+ _checked = value;
+ ckb_box.Checked = value;
+ }
+ }
+ ///
+ /// 文本
+ ///
+ private string _textStr = "复选框";
+ public string TextStr
+ {
+ get { return _textStr; }
+ set
+ {
+ _textStr = value;
+ ckb_box.Text = value;
+ }
+ }
+
+
+ private void pic_image_Click(object sender, EventArgs e)
+ {
+ ckb_box.Checked = !ckb_box.Checked;
+ }
+ private void ckb_box_CheckedChanged(object sender, EventArgs e)
+ {
+ if (ckb_box.Checked)
+ {
+ pic_image.Image = Resources.勾选;
+ Checked = true;
+ }
+ else
+ {
+ pic_image.Image = Resources.去勾选;
+ Checked = false;
+ }
+ if (CheckChanged != null)
+ CheckChanged(ckb_box.Checked);
+ }
+
+ }
+}
diff --git a/UsingControl/Controls/CRadioBox.designer.cs b/UsingControl/Controls/CRadioBox.designer.cs
new file mode 100644
index 0000000..e0ea3e9
--- /dev/null
+++ b/UsingControl/Controls/CRadioBox.designer.cs
@@ -0,0 +1,86 @@
+namespace Controls
+{
+ partial class CRadioBox
+ {
+ ///
+ /// 必需的设计器变量。
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// 清理所有正在使用的资源。
+ ///
+ /// 如果应释放托管资源,为 true;否则为 false。
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region 组件设计器生成的代码
+
+ ///
+ /// 设计器支持所需的方法 - 不要
+ /// 使用代码编辑器修改此方法的内容。
+ ///
+ private void InitializeComponent()
+ {
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(CRadioBox));
+ this.pic_image = new System.Windows.Forms.PictureBox();
+ this.ckb_box = new System.Windows.Forms.CheckBox();
+ ((System.ComponentModel.ISupportInitialize)(this.pic_image)).BeginInit();
+ this.SuspendLayout();
+ //
+ // pic_image
+ //
+ this.pic_image.Image = ((System.Drawing.Image)(resources.GetObject("pic_image.Image")));
+ this.pic_image.Location = new System.Drawing.Point(2, 2);
+ this.pic_image.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
+ this.pic_image.Name = "pic_image";
+ this.pic_image.Padding = new System.Windows.Forms.Padding(1);
+ this.pic_image.Size = new System.Drawing.Size(20, 20);
+ this.pic_image.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
+ this.pic_image.TabIndex = 0;
+ this.pic_image.TabStop = false;
+ this.pic_image.Click += new System.EventHandler(this.pic_image_Click);
+ //
+ // ckb_box
+ //
+ this.ckb_box.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.ckb_box.BackColor = System.Drawing.Color.White;
+ this.ckb_box.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
+ this.ckb_box.Location = new System.Drawing.Point(7, 4);
+ this.ckb_box.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
+ this.ckb_box.Name = "ckb_box";
+ this.ckb_box.Size = new System.Drawing.Size(91, 23);
+ this.ckb_box.TabIndex = 1;
+ this.ckb_box.Text = "复选框";
+ this.ckb_box.UseVisualStyleBackColor = false;
+ this.ckb_box.CheckedChanged += new System.EventHandler(this.ckb_box_CheckedChanged);
+ //
+ // RadioBox
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 17F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.BackColor = System.Drawing.Color.White;
+ this.Controls.Add(this.pic_image);
+ this.Controls.Add(this.ckb_box);
+ this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
+ this.Name = "RadioBox";
+ this.Size = new System.Drawing.Size(97, 24);
+ ((System.ComponentModel.ISupportInitialize)(this.pic_image)).EndInit();
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.PictureBox pic_image;
+ private System.Windows.Forms.CheckBox ckb_box;
+ }
+}
diff --git a/UsingControl/Controls/CRadioBox.resx b/UsingControl/Controls/CRadioBox.resx
new file mode 100644
index 0000000..25c8d49
--- /dev/null
+++ b/UsingControl/Controls/CRadioBox.resx
@@ -0,0 +1,157 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+
+
+ 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
+
+
+
\ No newline at end of file
diff --git a/UsingControl/Controls/CTextBox.cs b/UsingControl/Controls/CTextBox.cs
new file mode 100644
index 0000000..e3f5c12
--- /dev/null
+++ b/UsingControl/Controls/CTextBox.cs
@@ -0,0 +1,190 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using Controls.Properties;
+
+namespace Controls
+{
+ public delegate void DTextStrChanged(string textStr);
+ public partial class CTextBox : UserControl
+ {
+ public CTextBox()
+ {
+ InitializeComponent();
+ tbx_text.Text = DefaultText;
+ //if (PasswordChar && tbx_text.Text != DefaultText)
+ //{
+
+ //}
+ //else
+ //{
+
+ //}
+ //if (PasswordChar)
+ //{
+ // tbx_text.PasswordChar = '*';
+ // btn_eye.Visible = true;
+ //}
+ //else
+ //{
+
+ //}
+
+ if (!PasswordChar)
+ {
+ tbx_text.PasswordChar = '\0';
+ btn_eye.Visible = false;
+ }
+ else
+ {
+ tbx_text.PasswordChar = '\0';
+ btn_eye.Visible = true ;
+ }
+ }
+
+ ///
+ /// 文本改变事件
+ ///
+ public event DTextStrChanged TextStrChanged;
+ ///
+ /// 控件文本
+ ///
+ private string _text = string.Empty;
+ public string TextStr
+ {
+ get
+ {
+ return _text;
+ }
+ set
+ {
+ if (value == string.Empty)
+ {
+ tbx_text.PasswordChar = '\0';
+ tbx_text.ForeColor = Color.DarkGray;
+ tbx_text.Text = DefaultText;
+ _text = value;
+ }
+ else
+ {
+ if (PasswordChar)
+ tbx_text.PasswordChar = '*';
+ else
+ tbx_text.PasswordChar = '\0';
+ tbx_text.ForeColor = Color.FromArgb(64, 64, 64);
+ _text = value;
+ tbx_text.Text = _text;
+ }
+ }
+ }
+ ///
+ /// 默认文本
+ ///
+ private string _defaultText = string.Empty;
+ public string DefaultText
+ {
+ get { return _defaultText; }
+ set { _defaultText = value; }
+ }
+ ///
+ /// 是否以密码形式显示
+ ///
+ private bool _passwordChar = false;
+ public bool PasswordChar
+ {
+ get { return _passwordChar; }
+ set
+ {
+ _passwordChar = value;
+ if (PasswordChar)
+ {
+ tbx_text.PasswordChar = '*';
+ }
+ else
+ {
+ tbx_text.PasswordChar = '\0';
+ }
+ }
+ }
+
+
+ private void TextBox_Enter(object sender, EventArgs e)
+ {
+ lbl_line.Height = 2;
+ lbl_line.BackColor = Color.FromArgb(18, 150, 219);
+ if (tbx_text.Text == DefaultText)
+ {
+ tbx_text.SelectionStart = 0;
+ tbx_text.SelectionLength = 0;
+ }
+ }
+ private void TextBox_Leave(object sender, EventArgs e)
+ {
+ lbl_line.Height = 1;
+ lbl_line.BackColor = Color.Gray;
+ }
+ private void tbx_text_TextChanged(object sender, EventArgs e)
+ {
+ if (tbx_text.Text != DefaultText && tbx_text.Text != TextStr)
+ TextStr = tbx_text.Text;
+ if (TextStrChanged != null)
+ TextStrChanged(TextStr);
+ if (PasswordChar && TextStr != string.Empty)
+ tbx_text.PasswordChar = '*';
+ else if (TextStr ==string .Empty )
+ tbx_text.PasswordChar = '\0';
+ }
+ private void tbx_text_KeyDown(object sender, KeyEventArgs e)
+ {
+ if (tbx_text.Text == DefaultText && e.KeyCode != Keys.Back)
+ tbx_text.Text = string.Empty;
+ }
+ private void tbx_text_MouseUp(object sender, MouseEventArgs e)
+ {
+ if (e.Button == MouseButtons.Left)
+ {
+ if (tbx_text.Text == DefaultText)
+ {
+ tbx_text.SelectionStart = 0;
+ tbx_text.SelectionLength = 0;
+ }
+ }
+ }
+ private void btn_eye_MouseDown(object sender, MouseEventArgs e)
+ {
+ tbx_text.PasswordChar = '\0';
+ btn_eye.BackgroundImage = Resources.Show;
+ //tbx_text.Width = tbx_text.Width - 30;
+ }
+ private void btn_eye_MouseUp(object sender, MouseEventArgs e)
+ {
+ if (TextStr != string.Empty)
+ tbx_text.PasswordChar = '*';
+ btn_eye.BackgroundImage = Resources.Hide;
+ tbx_text.Width = tbx_text.Width + 30;
+ tbx_text.Focus();
+ tbx_text.SelectionStart = 0;
+ tbx_text.SelectionLength = 0;
+ }
+ private void TextBox_Load(object sender, EventArgs e)
+ {
+ if (!PasswordChar)
+ {
+ tbx_text.PasswordChar = '\0';
+ btn_eye.Visible = false;
+ }
+ else
+ {
+ tbx_text.PasswordChar = '\0';
+ btn_eye.Visible = true ;
+ }
+ }
+
+ }
+}
diff --git a/UsingControl/Controls/CTextBox.designer.cs b/UsingControl/Controls/CTextBox.designer.cs
new file mode 100644
index 0000000..57d6927
--- /dev/null
+++ b/UsingControl/Controls/CTextBox.designer.cs
@@ -0,0 +1,108 @@
+namespace Controls
+{
+ partial class CTextBox
+ {
+ ///
+ /// 必需的设计器变量。
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// 清理所有正在使用的资源。
+ ///
+ /// 如果应释放托管资源,为 true;否则为 false。
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region 组件设计器生成的代码
+
+ ///
+ /// 设计器支持所需的方法 - 不要
+ /// 使用代码编辑器修改此方法的内容。
+ ///
+ private void InitializeComponent()
+ {
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(CTextBox));
+ this.lbl_line = new System.Windows.Forms.Label();
+ this.tbx_text = new System.Windows.Forms.TextBox();
+ this.btn_eye = new System.Windows.Forms.Button();
+ this.SuspendLayout();
+ //
+ // lbl_line
+ //
+ this.lbl_line.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.lbl_line.BackColor = System.Drawing.Color.Gray;
+ this.lbl_line.Location = new System.Drawing.Point(2, 20);
+ this.lbl_line.Name = "lbl_line";
+ this.lbl_line.Size = new System.Drawing.Size(133, 1);
+ this.lbl_line.TabIndex = 10;
+ //
+ // tbx_text
+ //
+ this.tbx_text.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.tbx_text.BorderStyle = System.Windows.Forms.BorderStyle.None;
+ this.tbx_text.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
+ this.tbx_text.Location = new System.Drawing.Point(6, 1);
+ this.tbx_text.Margin = new System.Windows.Forms.Padding(3, 6, 3, 6);
+ this.tbx_text.Name = "tbx_text";
+ this.tbx_text.Size = new System.Drawing.Size(125, 16);
+ this.tbx_text.TabIndex = 9;
+ this.tbx_text.TextChanged += new System.EventHandler(this.tbx_text_TextChanged);
+ this.tbx_text.KeyDown += new System.Windows.Forms.KeyEventHandler(this.tbx_text_KeyDown);
+ this.tbx_text.MouseUp += new System.Windows.Forms.MouseEventHandler(this.tbx_text_MouseUp);
+ //
+ // btn_eye
+ //
+ this.btn_eye.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.btn_eye.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("btn_eye.BackgroundImage")));
+ this.btn_eye.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
+ this.btn_eye.FlatAppearance.BorderSize = 0;
+ this.btn_eye.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
+ this.btn_eye.Location = new System.Drawing.Point(110, 1);
+ this.btn_eye.Name = "btn_eye";
+ this.btn_eye.Size = new System.Drawing.Size(21, 18);
+ this.btn_eye.TabIndex = 11;
+ this.btn_eye.TabStop = false;
+ this.btn_eye.UseVisualStyleBackColor = true;
+ this.btn_eye.MouseDown += new System.Windows.Forms.MouseEventHandler(this.btn_eye_MouseDown);
+ this.btn_eye.MouseUp += new System.Windows.Forms.MouseEventHandler(this.btn_eye_MouseUp);
+ //
+ // CTextBox
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 17F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.BackColor = System.Drawing.Color.White;
+ this.Controls.Add(this.btn_eye);
+ this.Controls.Add(this.lbl_line);
+ this.Controls.Add(this.tbx_text);
+ this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
+ this.MaximumSize = new System.Drawing.Size(400, 22);
+ this.MinimumSize = new System.Drawing.Size(20, 22);
+ this.Name = "CTextBox";
+ this.Size = new System.Drawing.Size(137, 22);
+ this.Load += new System.EventHandler(this.TextBox_Load);
+ this.Enter += new System.EventHandler(this.TextBox_Enter);
+ this.Leave += new System.EventHandler(this.TextBox_Leave);
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.Label lbl_line;
+ private System.Windows.Forms.TextBox tbx_text;
+ private System.Windows.Forms.Button btn_eye;
+ }
+}
diff --git a/UsingControl/Controls/CTextBox.resx b/UsingControl/Controls/CTextBox.resx
new file mode 100644
index 0000000..56208fd
--- /dev/null
+++ b/UsingControl/Controls/CTextBox.resx
@@ -0,0 +1,131 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAABGdBTUEAALGPC/xhBQAAAPxJREFUOE/N
+ kj0KwlAQhHMEj+ARvIDghfIH3sLG0sqktBcsxc5KCVjYKIhIbAQjgrZ+89zEKNhnYNid3XlvN494zUIU
+ RR1LHX71X8gYhuGD2LaSh76geya/EQTBAMNaOaYW+Ym4iuN4TJyhb6pbPxWVOyDaGM5wS54rJy5KWk+c
+ owvf97t2tJq2gXu26EvDFL2EE2nVyXfkB2k7+l7FGtVqaH2nq8Op1TVEvs/aKuhmkzJpXWdQlHYNYBsc
+ TTrDkIImuRcmH5lOYA7Li8q3GUlXoDClWcgoExxCt4HpRBfKZ0e+YY+VYXgSr/Bei1n90/4Coyb1aqx+
+ mCbA816Kvb06q+4cHAAAAABJRU5ErkJggg==
+
+
+
\ No newline at end of file
diff --git a/UsingControl/Controls/Controls.csproj b/UsingControl/Controls/Controls.csproj
new file mode 100644
index 0000000..13534a7
--- /dev/null
+++ b/UsingControl/Controls/Controls.csproj
@@ -0,0 +1,178 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {6D2088CB-161B-47FB-9C35-0EE8DE61A3DF}
+ Library
+ Properties
+ Controls
+ Controls
+ v4.5.2
+ 512
+
+
+
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ UserControl
+
+
+ CButton.cs
+
+
+ UserControl
+
+
+ CCheckBox.cs
+
+
+ UserControl
+
+
+ CComboBox.cs
+
+
+ UserControl
+
+
+ CNumeric.cs
+
+
+ UserControl
+
+
+ CNumericUpDown.cs
+
+
+
+ True
+ True
+ Resources.resx
+
+
+ UserControl
+
+
+ CRadioBox.cs
+
+
+ UserControl
+
+
+ CTextBox.cs
+
+
+
+
+
+ CButton.cs
+
+
+ CCheckBox.cs
+
+
+ CComboBox.cs
+
+
+ CNumeric.cs
+
+
+ CNumericUpDown.cs
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+
+
+ CRadioBox.cs
+
+
+ CTextBox.cs
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/UsingControl/Controls/Properties/AssemblyInfo.cs b/UsingControl/Controls/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..35fd4a4
--- /dev/null
+++ b/UsingControl/Controls/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 有关程序集的常规信息通过以下
+// 特性集控制。更改这些特性值可修改
+// 与程序集关联的信息。
+[assembly: AssemblyTitle("Controls")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Controls")]
+[assembly: AssemblyCopyright("Copyright © 2020")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 将 ComVisible 设置为 false 使此程序集中的类型
+// 对 COM 组件不可见。 如果需要从 COM 访问此程序集中的类型,
+// 则将该类型上的 ComVisible 特性设置为 true。
+[assembly: ComVisible(false)]
+
+// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
+[assembly: Guid("2eb3123a-4223-4587-83e5-2b1cf8508df3")]
+
+// 程序集的版本信息由下面四个值组成:
+//
+// 主版本
+// 次版本
+// 生成号
+// 修订号
+//
+// 可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值,
+// 方法是按如下所示使用“*”:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/UsingControl/Controls/Properties/Resources.Designer.cs b/UsingControl/Controls/Properties/Resources.Designer.cs
new file mode 100644
index 0000000..6110779
--- /dev/null
+++ b/UsingControl/Controls/Properties/Resources.Designer.cs
@@ -0,0 +1,213 @@
+//------------------------------------------------------------------------------
+//
+// 此代码由工具生成。
+// 运行时版本:4.0.30319.42000
+//
+// 对此文件的更改可能会导致不正确的行为,并且如果
+// 重新生成代码,这些更改将会丢失。
+//
+//------------------------------------------------------------------------------
+
+namespace Controls.Properties {
+ using System;
+
+
+ ///
+ /// 一个强类型的资源类,用于查找本地化的字符串等。
+ ///
+ // 此类是由 StronglyTypedResourceBuilder
+ // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
+ // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
+ // (以 /str 作为命令选项),或重新生成 VS 项目。
+ [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() {
+ }
+
+ ///
+ /// 返回此类使用的缓存的 ResourceManager 实例。
+ ///
+ [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("Controls.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// 使用此强类型资源类,为所有资源查找
+ /// 重写当前线程的 CurrentUICulture 属性。
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap blueAdd {
+ get {
+ object obj = ResourceManager.GetObject("blueAdd", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap BlueImage {
+ get {
+ object obj = ResourceManager.GetObject("BlueImage", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap blueSub {
+ get {
+ object obj = ResourceManager.GetObject("blueSub", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap ButtonDown {
+ get {
+ object obj = ResourceManager.GetObject("ButtonDown", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap ButtonEnter {
+ get {
+ object obj = ResourceManager.GetObject("ButtonEnter", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap ButtonUp {
+ get {
+ object obj = ResourceManager.GetObject("ButtonUp", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap grayAdd {
+ get {
+ object obj = ResourceManager.GetObject("grayAdd", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap GrayImage {
+ get {
+ object obj = ResourceManager.GetObject("GrayImage", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap graySub {
+ get {
+ object obj = ResourceManager.GetObject("graySub", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap Hide {
+ get {
+ object obj = ResourceManager.GetObject("Hide", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap Show {
+ get {
+ object obj = ResourceManager.GetObject("Show", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap 勾选 {
+ get {
+ object obj = ResourceManager.GetObject("勾选", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap 去勾选 {
+ get {
+ object obj = ResourceManager.GetObject("去勾选", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap 去复选框 {
+ get {
+ object obj = ResourceManager.GetObject("去复选框", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap 复选框 {
+ get {
+ object obj = ResourceManager.GetObject("复选框", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+ }
+}
diff --git a/UsingControl/Controls/Properties/Resources.resx b/UsingControl/Controls/Properties/Resources.resx
new file mode 100644
index 0000000..1993014
--- /dev/null
+++ b/UsingControl/Controls/Properties/Resources.resx
@@ -0,0 +1,166 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+
+ ..\Resources\blueAdd.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\BlueImage.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\blueSub.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\grayAdd.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\GrayImage.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\graySub.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\Hide.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\Show.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\勾选.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\去勾选.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\去复选框.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\复选框.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\ButtonDown.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\ButtonEnter.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\ButtonUp.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
\ No newline at end of file
diff --git a/UsingControl/Controls/Resources/BlueImage.png b/UsingControl/Controls/Resources/BlueImage.png
new file mode 100644
index 0000000..7474b64
Binary files /dev/null and b/UsingControl/Controls/Resources/BlueImage.png differ
diff --git a/UsingControl/Controls/Resources/ButtonDown.png b/UsingControl/Controls/Resources/ButtonDown.png
new file mode 100644
index 0000000..ee0efb2
Binary files /dev/null and b/UsingControl/Controls/Resources/ButtonDown.png differ
diff --git a/UsingControl/Controls/Resources/ButtonEnter.png b/UsingControl/Controls/Resources/ButtonEnter.png
new file mode 100644
index 0000000..13bbe86
Binary files /dev/null and b/UsingControl/Controls/Resources/ButtonEnter.png differ
diff --git a/UsingControl/Controls/Resources/ButtonUp.png b/UsingControl/Controls/Resources/ButtonUp.png
new file mode 100644
index 0000000..a7351dc
Binary files /dev/null and b/UsingControl/Controls/Resources/ButtonUp.png differ
diff --git a/UsingControl/Controls/Resources/GrayImage.png b/UsingControl/Controls/Resources/GrayImage.png
new file mode 100644
index 0000000..e37e349
Binary files /dev/null and b/UsingControl/Controls/Resources/GrayImage.png differ
diff --git a/UsingControl/Controls/Resources/Hide.png b/UsingControl/Controls/Resources/Hide.png
new file mode 100644
index 0000000..4577692
Binary files /dev/null and b/UsingControl/Controls/Resources/Hide.png differ
diff --git a/UsingControl/Controls/Resources/Show.png b/UsingControl/Controls/Resources/Show.png
new file mode 100644
index 0000000..7cbf881
Binary files /dev/null and b/UsingControl/Controls/Resources/Show.png differ
diff --git a/UsingControl/Controls/Resources/blueAdd.png b/UsingControl/Controls/Resources/blueAdd.png
new file mode 100644
index 0000000..3ed0eb9
Binary files /dev/null and b/UsingControl/Controls/Resources/blueAdd.png differ
diff --git a/UsingControl/Controls/Resources/blueSub.png b/UsingControl/Controls/Resources/blueSub.png
new file mode 100644
index 0000000..b9bc8a1
Binary files /dev/null and b/UsingControl/Controls/Resources/blueSub.png differ
diff --git a/UsingControl/Controls/Resources/grayAdd.png b/UsingControl/Controls/Resources/grayAdd.png
new file mode 100644
index 0000000..b6ed999
Binary files /dev/null and b/UsingControl/Controls/Resources/grayAdd.png differ
diff --git a/UsingControl/Controls/Resources/graySub.png b/UsingControl/Controls/Resources/graySub.png
new file mode 100644
index 0000000..2d6f054
Binary files /dev/null and b/UsingControl/Controls/Resources/graySub.png differ
diff --git a/UsingControl/Controls/Resources/勾选.png b/UsingControl/Controls/Resources/勾选.png
new file mode 100644
index 0000000..ef7e25e
Binary files /dev/null and b/UsingControl/Controls/Resources/勾选.png differ
diff --git a/UsingControl/Controls/Resources/去勾选.png b/UsingControl/Controls/Resources/去勾选.png
new file mode 100644
index 0000000..164318b
Binary files /dev/null and b/UsingControl/Controls/Resources/去勾选.png differ
diff --git a/UsingControl/Controls/Resources/去复选框.png b/UsingControl/Controls/Resources/去复选框.png
new file mode 100644
index 0000000..d88e6ac
Binary files /dev/null and b/UsingControl/Controls/Resources/去复选框.png differ
diff --git a/UsingControl/Controls/Resources/复选框.png b/UsingControl/Controls/Resources/复选框.png
new file mode 100644
index 0000000..cc707d5
Binary files /dev/null and b/UsingControl/Controls/Resources/复选框.png differ
diff --git a/UsingControl/HZHControls/Colors/BasisColors.cs b/UsingControl/HZHControls/Colors/BasisColors.cs
new file mode 100644
index 0000000..0bd25d1
--- /dev/null
+++ b/UsingControl/HZHControls/Colors/BasisColors.cs
@@ -0,0 +1,73 @@
+// ***********************************************************************
+// Assembly : HZH_Controls
+// Created : 2019-09-30
+//
+// ***********************************************************************
+//
+// Copyright by Huang Zhenghui(黄正辉) All, QQ group:568015492 QQ:623128629 Email:623128629@qq.com
+//
+//
+// Blog: https://www.cnblogs.com/bfyx
+// GitHub:https://github.com/kwwwvagaa/NetWinformControl
+// gitee:https://gitee.com/kwwwvagaa/net_winform_custom_control.git
+//
+// If you use this code, please keep this note.
+// ***********************************************************************
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Drawing;
+
+namespace HZH_Controls
+{
+ ///
+ /// Class BasisColors.
+ ///
+ public class BasisColors
+ {
+ ///
+ /// The light
+ ///
+ private static Color light = ColorTranslator.FromHtml("#f5f7fa");
+
+ ///
+ /// Gets the light.
+ ///
+ /// The light.
+ public static Color Light
+ {
+ get { return light; }
+ internal set { light = value; }
+ }
+ ///
+ /// The medium
+ ///
+ private static Color medium = ColorTranslator.FromHtml("#f0f2f5");
+
+ ///
+ /// Gets the medium.
+ ///
+ /// The medium.
+ public static Color Medium
+ {
+ get { return medium; }
+ internal set { medium = value; }
+ }
+ ///
+ /// The dark
+ ///
+ private static Color dark = ColorTranslator.FromHtml("#000000");
+
+ ///
+ /// Gets the dark.
+ ///
+ /// The dark.
+ public static Color Dark
+ {
+ get { return dark; }
+ internal set { dark = value; }
+ }
+
+ }
+}
diff --git a/UsingControl/HZHControls/Colors/BorderColors.cs b/UsingControl/HZHControls/Colors/BorderColors.cs
new file mode 100644
index 0000000..2ff69d1
--- /dev/null
+++ b/UsingControl/HZHControls/Colors/BorderColors.cs
@@ -0,0 +1,86 @@
+// ***********************************************************************
+// Assembly : HZH_Controls
+// Created : 2019-09-30
+//
+// ***********************************************************************
+//
+// Copyright by Huang Zhenghui(黄正辉) All, QQ group:568015492 QQ:623128629 Email:623128629@qq.com
+//
+//
+// Blog: https://www.cnblogs.com/bfyx
+// GitHub:https://github.com/kwwwvagaa/NetWinformControl
+// gitee:https://gitee.com/kwwwvagaa/net_winform_custom_control.git
+//
+// If you use this code, please keep this note.
+// ***********************************************************************
+using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+
+namespace HZH_Controls
+{
+ ///
+ /// Class BorderColors.
+ ///
+ public class BorderColors
+ {
+ ///
+ /// The green
+ ///
+ private static Color green = ColorTranslator.FromHtml("#f0f9ea");
+
+ ///
+ /// Gets the green.
+ ///
+ /// The green.
+ public static Color Green
+ {
+ get { return green; }
+ internal set { green = value; }
+ }
+ ///
+ /// The blue
+ ///
+ private static Color blue = ColorTranslator.FromHtml("#ecf5ff");
+
+ ///
+ /// Gets the blue.
+ ///
+ /// The blue.
+ public static Color Blue
+ {
+ get { return blue; }
+ internal set { blue = value; }
+ }
+ ///
+ /// The red
+ ///
+ private static Color red = ColorTranslator.FromHtml("#fef0f0");
+
+ ///
+ /// Gets the red.
+ ///
+ /// The red.
+ public static Color Red
+ {
+ get { return red; }
+ internal set { red = value; }
+ }
+ ///
+ /// The yellow
+ ///
+ private static Color yellow = ColorTranslator.FromHtml("#fdf5e6");
+
+ ///
+ /// Gets the yellow.
+ ///
+ /// The yellow.
+ public static Color Yellow
+ {
+ get { return yellow; }
+ internal set { yellow = value; }
+ }
+ }
+}
diff --git a/UsingControl/HZHControls/Colors/ColorEnums.cs b/UsingControl/HZHControls/Colors/ColorEnums.cs
new file mode 100644
index 0000000..43895ad
--- /dev/null
+++ b/UsingControl/HZHControls/Colors/ColorEnums.cs
@@ -0,0 +1,203 @@
+// ***********************************************************************
+// Assembly : HZH_Controls
+// Created : 2019-09-30
+//
+// ***********************************************************************
+//
+// Copyright by Huang Zhenghui(黄正辉) All, QQ group:568015492 QQ:623128629 Email:623128629@qq.com
+//
+//
+// Blog: https://www.cnblogs.com/bfyx
+// GitHub:https://github.com/kwwwvagaa/NetWinformControl
+// gitee:https://gitee.com/kwwwvagaa/net_winform_custom_control.git
+//
+// If you use this code, please keep this note.
+// ***********************************************************************
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HZH_Controls
+{
+ ///
+ /// Enum BasisColorsTypes
+ ///
+ public enum BasisColorsTypes
+ {
+ ///
+ /// The light
+ ///
+ Light = 1,
+ ///
+ /// The medium
+ ///
+ Medium = 2,
+ ///
+ /// The dark
+ ///
+ Dark = 3
+ }
+
+ ///
+ /// Enum BorderColorsTypes
+ ///
+ public enum BorderColorsTypes
+ {
+ ///
+ /// The green
+ ///
+ Green = 1,
+ ///
+ /// The blue
+ ///
+ Blue = 2,
+ ///
+ /// The red
+ ///
+ Red = 3,
+ ///
+ /// The yellow
+ ///
+ Yellow = 4
+ }
+
+ ///
+ /// Enum GradientColorsTypes
+ ///
+ public enum GradientColorsTypes
+ {
+ ///
+ /// The orange
+ ///
+ Orange = 1,
+ ///
+ /// The light green
+ ///
+ LightGreen = 2,
+ ///
+ /// The green
+ ///
+ Green = 3,
+ ///
+ /// The blue
+ ///
+ Blue = 4,
+ ///
+ /// The blue green
+ ///
+ BlueGreen = 5,
+ ///
+ /// The light violet
+ ///
+ LightViolet = 6,
+ ///
+ /// The violet
+ ///
+ Violet = 7,
+ ///
+ /// The gray
+ ///
+ Gray = 8
+ }
+
+ ///
+ /// Enum LineColorsTypes
+ ///
+ public enum LineColorsTypes
+ {
+ ///
+ /// The more light
+ ///
+ MoreLight = 1,
+ ///
+ /// The light
+ ///
+ Light = 2,
+ ///
+ /// The dark
+ ///
+ Dark = 3,
+ ///
+ /// The more dark
+ ///
+ MoreDark = 4
+ }
+
+ ///
+ /// Enum StatusColorsTypes
+ ///
+ public enum StatusColorsTypes
+ {
+ ///
+ /// The primary
+ ///
+ Primary = 1,
+ ///
+ /// The success
+ ///
+ Success = 2,
+ ///
+ /// The warning
+ ///
+ Warning = 3,
+ ///
+ /// The danger
+ ///
+ Danger = 4,
+ ///
+ /// The information
+ ///
+ Info = 5
+ }
+
+ ///
+ /// Enum TableColorsTypes
+ ///
+ public enum TableColorsTypes
+ {
+ ///
+ /// The green
+ ///
+ Green = 1,
+ ///
+ /// The blue
+ ///
+ Blue = 2,
+ ///
+ /// The red
+ ///
+ Red = 3,
+ ///
+ /// The yellow
+ ///
+ Yellow = 4,
+ ///
+ /// The gray
+ ///
+ Gray = 5
+ }
+
+ ///
+ /// Enum TextColorsTypes
+ ///
+ public enum TextColorsTypes
+ {
+ ///
+ /// The more light
+ ///
+ MoreLight = 1,
+ ///
+ /// The light
+ ///
+ Light = 2,
+ ///
+ /// The dark
+ ///
+ Dark = 3,
+ ///
+ /// The more dark
+ ///
+ MoreDark = 4
+ }
+}
diff --git a/UsingControl/HZHControls/Colors/ColorExt.cs b/UsingControl/HZHControls/Colors/ColorExt.cs
new file mode 100644
index 0000000..d9e407c
--- /dev/null
+++ b/UsingControl/HZHControls/Colors/ColorExt.cs
@@ -0,0 +1,264 @@
+// ***********************************************************************
+// Assembly : HZH_Controls
+// Created : 2019-09-30
+//
+// ***********************************************************************
+//
+// Copyright by Huang Zhenghui(黄正辉) All, QQ group:568015492 QQ:623128629 Email:623128629@qq.com
+//
+//
+// Blog: https://www.cnblogs.com/bfyx
+// GitHub:https://github.com/kwwwvagaa/NetWinformControl
+// gitee:https://gitee.com/kwwwvagaa/net_winform_custom_control.git
+//
+// If you use this code, please keep this note.
+// ***********************************************************************
+using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+
+namespace HZH_Controls
+{
+ ///
+ /// Class ColorExt.
+ ///
+ public static class ColorExt
+ {
+ #region 重置内置的颜色 English:Reset color
+ ///
+ /// Resets the color.
+ ///
+ /// The type.
+ /// The light.
+ /// The medium.
+ /// The dark.
+ public static void ResetColor(
+ this BasisColors type,
+ Color light,
+ Color medium,
+ Color dark)
+ {
+ BasisColors.Light = light;
+ BasisColors.Medium = medium;
+ BasisColors.Dark = dark;
+ }
+
+ ///
+ /// Resets the color.
+ ///
+ /// The type.
+ /// The green.
+ /// The blue.
+ /// The red.
+ /// The yellow.
+ public static void ResetColor(
+ this BorderColors type,
+ Color green,
+ Color blue,
+ Color red,
+ Color yellow)
+ {
+ BorderColors.Green = green;
+ BorderColors.Blue = blue;
+ BorderColors.Red = red;
+ BorderColors.Yellow = yellow;
+ }
+
+ ///
+ /// Resets the color.
+ ///
+ /// The type.
+ /// The orange.
+ /// The light green.
+ /// The green.
+ /// The blue.
+ /// The blue green.
+ /// The light violet.
+ /// The violet.
+ /// The gray.
+ public static void ResetColor(
+ this GradientColors type,
+ Color[] orange,
+ Color[] lightGreen,
+ Color[] green,
+ Color[] blue,
+ Color[] blueGreen,
+ Color[] lightViolet,
+ Color[] violet,
+ Color[] gray
+ )
+ {
+ if (orange != null && orange.Length == 2)
+ GradientColors.Orange = orange;
+ if (orange != null && orange.Length == 2)
+ GradientColors.LightGreen = lightGreen;
+ if (orange != null && orange.Length == 2)
+ GradientColors.Green = green;
+ if (orange != null && orange.Length == 2)
+ GradientColors.Blue = blue;
+ if (orange != null && orange.Length == 2)
+ GradientColors.BlueGreen = blueGreen;
+ if (orange != null && orange.Length == 2)
+ GradientColors.LightViolet = lightViolet;
+ if (orange != null && orange.Length == 2)
+ GradientColors.Violet = violet;
+ if (orange != null && orange.Length == 2)
+ GradientColors.Gray = gray;
+ }
+ ///
+ /// Resets the color.
+ ///
+ /// The type.
+ /// The more light.
+ /// The light.
+ /// The dark.
+ /// The more dark.
+ public static void ResetColor(
+ this LineColors type,
+ Color moreLight,
+ Color light,
+ Color dark,
+ Color moreDark)
+ {
+ LineColors.MoreLight = moreLight;
+ LineColors.Light = light;
+ LineColors.Dark = dark;
+ LineColors.MoreDark = moreDark;
+ }
+ ///
+ /// Resets the color.
+ ///
+ /// The type.
+ /// The primary.
+ /// The success.
+ /// The warning.
+ /// The danger.
+ /// The information.
+ public static void ResetColor(
+ this StatusColors type,
+ Color primary,
+ Color success,
+ Color warning,
+ Color danger,
+ Color info
+ )
+ {
+ StatusColors.Primary = primary;
+ StatusColors.Success = success;
+ StatusColors.Warning = warning;
+ StatusColors.Danger = danger;
+ StatusColors.Info = info;
+ }
+ ///
+ /// Resets the color.
+ ///
+ /// The type.
+ /// The green.
+ /// The blue.
+ /// The red.
+ /// The yellow.
+ /// The gray.
+ public static void ResetColor(
+ this TableColors type,
+ Color green,
+ Color blue,
+ Color red,
+ Color yellow,
+ Color gray
+ )
+ {
+ TableColors.Green = green;
+ TableColors.Blue = blue;
+ TableColors.Red = red;
+ TableColors.Yellow = yellow;
+ TableColors.Gray = gray;
+ }
+
+ ///
+ /// Resets the color.
+ ///
+ /// The type.
+ /// The more light.
+ /// The light.
+ /// The dark.
+ /// The more dark.
+ public static void ResetColor(
+ this TextColors type,
+ Color moreLight,
+ Color light,
+ Color dark,
+ Color moreDark)
+ {
+ TextColors.MoreLight = moreLight;
+ TextColors.Light = light;
+ TextColors.Dark = dark;
+ TextColors.MoreDark = moreDark;
+ }
+ #endregion
+
+ #region 获取一个内置颜色 English:Get a built-in color
+ ///
+ /// 功能描述:获取一个内置颜色 English:Get a built-in color
+ /// 作 者:HZH
+ /// 创建日期:2019-09-30 11:08:04
+ /// 任务编号:POS
+ ///
+ ///
+ /// t
+ /// 颜色列表
+ public static Color[] GetInternalColor(T t)
+ {
+ Type type = null;
+ if (t is BasisColorsTypes)
+ {
+ type = typeof(BasisColors);
+ }
+ else if (t is BorderColorsTypes)
+ {
+ type = typeof(BorderColors);
+ }
+ else if (t is GradientColorsTypes)
+ {
+ type = typeof(GradientColors);
+ }
+ else if (t is LineColorsTypes)
+ {
+ type = typeof(LineColors);
+ }
+ else if (t is StatusColorsTypes)
+ {
+ type = typeof(StatusColors);
+ }
+ else if (t is TableColorsTypes)
+ {
+ type = typeof(TableColors);
+ }
+ else if (t is TextColorsTypes)
+ {
+ type = typeof(TextColors);
+ }
+ if (type == null)
+ return new Color[] { Color.Empty };
+ else
+ {
+ string strName = t.ToString();
+ var pi = type.GetProperty(strName);
+ if (pi == null)
+ return new Color[] { Color.Empty };
+ else
+ {
+ var c = pi.GetValue(null, null);
+ if (c == null)
+ return new Color[] { Color.Empty };
+ else if (c is Color[])
+ return (Color[])c;
+ else
+ return new Color[] { (Color)c };
+ }
+ }
+ }
+ #endregion
+ }
+}
diff --git a/UsingControl/HZHControls/Colors/GradientColors.cs b/UsingControl/HZHControls/Colors/GradientColors.cs
new file mode 100644
index 0000000..e457277
--- /dev/null
+++ b/UsingControl/HZHControls/Colors/GradientColors.cs
@@ -0,0 +1,142 @@
+// ***********************************************************************
+// Assembly : HZH_Controls
+// Created : 2019-09-30
+//
+// ***********************************************************************
+//
+// Copyright by Huang Zhenghui(黄正辉) All, QQ group:568015492 QQ:623128629 Email:623128629@qq.com
+//
+//
+// Blog: https://www.cnblogs.com/bfyx
+// GitHub:https://github.com/kwwwvagaa/NetWinformControl
+// gitee:https://gitee.com/kwwwvagaa/net_winform_custom_control.git
+//
+// If you use this code, please keep this note.
+// ***********************************************************************
+using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+
+namespace HZH_Controls
+{
+ ///
+ /// Class GradientColors.
+ ///
+ public class GradientColors
+ {
+ ///
+ /// The orange
+ ///
+ private static Color[] orange = new Color[] { Color.FromArgb(252, 196, 136), Color.FromArgb(243, 138, 159) };
+
+ ///
+ /// Gets the orange.
+ ///
+ /// The orange.
+ public static Color[] Orange
+ {
+ get { return GradientColors.orange; }
+ internal set { GradientColors.orange = value; }
+ }
+ ///
+ /// The light green
+ ///
+ private static Color[] lightGreen = new Color[] { Color.FromArgb(210, 251, 123), Color.FromArgb(152, 231, 160) };
+
+ ///
+ /// Gets the light green.
+ ///
+ /// The light green.
+ public static Color[] LightGreen
+ {
+ get { return GradientColors.lightGreen; }
+ internal set { GradientColors.lightGreen = value; }
+ }
+ ///
+ /// The green
+ ///
+ private static Color[] green = new Color[] { Color.FromArgb(138, 241, 124), Color.FromArgb(32, 190, 179) };
+
+ ///
+ /// Gets the green.
+ ///
+ /// The green.
+ public static Color[] Green
+ {
+ get { return GradientColors.green; }
+ internal set { GradientColors.green = value; }
+ }
+ ///
+ /// The blue
+ ///
+ private static Color[] blue = new Color[] { Color.FromArgb(193, 232, 251), Color.FromArgb(162, 197, 253) };
+
+ ///
+ /// Gets the blue.
+ ///
+ /// The blue.
+ public static Color[] Blue
+ {
+ get { return GradientColors.blue; }
+ internal set { GradientColors.blue = value; }
+ }
+ ///
+ /// The blue green
+ ///
+ private static Color[] blueGreen = new Color[] { Color.FromArgb(122, 251, 218), Color.FromArgb(16, 193, 252) };
+
+ ///
+ /// Gets the blue green.
+ ///
+ /// The blue green.
+ public static Color[] BlueGreen
+ {
+ get { return GradientColors.blueGreen; }
+ internal set { GradientColors.blueGreen = value; }
+ }
+ ///
+ /// The light violet
+ ///
+ private static Color[] lightViolet = new Color[] { Color.FromArgb(248, 192, 234), Color.FromArgb(164, 142, 210) };
+
+ ///
+ /// Gets the light violet.
+ ///
+ /// The light violet.
+ public static Color[] LightViolet
+ {
+ get { return GradientColors.lightViolet; }
+ internal set { GradientColors.lightViolet = value; }
+ }
+ ///
+ /// The violet
+ ///
+ private static Color[] violet = new Color[] { Color.FromArgb(185, 154, 241), Color.FromArgb(137, 124, 242) };
+
+ ///
+ /// Gets the violet.
+ ///
+ /// The violet.
+ public static Color[] Violet
+ {
+ get { return GradientColors.violet; }
+ internal set { GradientColors.violet = value; }
+ }
+ ///
+ /// The gray
+ ///
+ private static Color[] gray = new Color[] { Color.FromArgb(233, 238, 239), Color.FromArgb(147, 162, 175) };
+
+ ///
+ /// Gets the gray.
+ ///
+ /// The gray.
+ public static Color[] Gray
+ {
+ get { return GradientColors.gray; }
+ internal set { GradientColors.gray = value; }
+ }
+ }
+}
diff --git a/UsingControl/HZHControls/Colors/LineColors.cs b/UsingControl/HZHControls/Colors/LineColors.cs
new file mode 100644
index 0000000..88fbf0d
--- /dev/null
+++ b/UsingControl/HZHControls/Colors/LineColors.cs
@@ -0,0 +1,86 @@
+// ***********************************************************************
+// Assembly : HZH_Controls
+// Created : 2019-09-30
+//
+// ***********************************************************************
+//
+// Copyright by Huang Zhenghui(黄正辉) All, QQ group:568015492 QQ:623128629 Email:623128629@qq.com
+//
+//
+// Blog: https://www.cnblogs.com/bfyx
+// GitHub:https://github.com/kwwwvagaa/NetWinformControl
+// gitee:https://gitee.com/kwwwvagaa/net_winform_custom_control.git
+//
+// If you use this code, please keep this note.
+// ***********************************************************************
+using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+
+namespace HZH_Controls
+{
+ ///
+ /// Class LineColors.
+ ///
+ public class LineColors
+ {
+ ///
+ /// The more light
+ ///
+ private static Color _MoreLight = ColorTranslator.FromHtml("#f2f6fc");
+
+ ///
+ /// Gets the more light.
+ ///
+ /// The more light.
+ public static Color MoreLight
+ {
+ get { return _MoreLight; }
+ internal set { _MoreLight = value; }
+ }
+ ///
+ /// The light
+ ///
+ private static Color _Light = ColorTranslator.FromHtml("#ebeef5");
+
+ ///
+ /// Gets the light.
+ ///
+ /// The light.
+ public static Color Light
+ {
+ get { return _Light; }
+ internal set { _Light = value; }
+ }
+ ///
+ /// The dark
+ ///
+ private static Color _Dark = ColorTranslator.FromHtml("#e4e7ed");
+
+ ///
+ /// Gets the dark.
+ ///
+ /// The dark.
+ public static Color Dark
+ {
+ get { return _Dark; }
+ internal set { _Dark = value; }
+ }
+ ///
+ /// The more dark
+ ///
+ private static Color _MoreDark = ColorTranslator.FromHtml("#dcdfe6");
+
+ ///
+ /// Gets the more dark.
+ ///
+ /// The more dark.
+ public static Color MoreDark
+ {
+ get { return _MoreDark; }
+ internal set { _MoreDark = value; }
+ }
+ }
+}
diff --git a/UsingControl/HZHControls/Colors/StatusColors.cs b/UsingControl/HZHControls/Colors/StatusColors.cs
new file mode 100644
index 0000000..c342dd9
--- /dev/null
+++ b/UsingControl/HZHControls/Colors/StatusColors.cs
@@ -0,0 +1,100 @@
+// ***********************************************************************
+// Assembly : HZH_Controls
+// Created : 2019-09-30
+//
+// ***********************************************************************
+//
+// Copyright by Huang Zhenghui(黄正辉) All, QQ group:568015492 QQ:623128629 Email:623128629@qq.com
+//
+//
+// Blog: https://www.cnblogs.com/bfyx
+// GitHub:https://github.com/kwwwvagaa/NetWinformControl
+// gitee:https://gitee.com/kwwwvagaa/net_winform_custom_control.git
+//
+// If you use this code, please keep this note.
+// ***********************************************************************
+using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+
+namespace HZH_Controls
+{
+ ///
+ /// 状态颜色
+ ///
+ public class StatusColors
+ {
+ ///
+ /// The primary
+ ///
+ private static Color _Primary = ColorTranslator.FromHtml("#409eff");
+
+ ///
+ /// Gets or sets the primary.
+ ///
+ /// The primary.
+ public static Color Primary
+ {
+ get { return _Primary; }
+ internal set { _Primary = value; }
+ }
+ ///
+ /// The success
+ ///
+ private static Color _Success = ColorTranslator.FromHtml("#67c23a");
+
+ ///
+ /// Gets or sets the success.
+ ///
+ /// The success.
+ public static Color Success
+ {
+ get { return _Success; }
+ internal set { _Success = value; }
+ }
+ ///
+ /// The warning
+ ///
+ private static Color _Warning = ColorTranslator.FromHtml("#e6a23c");
+
+ ///
+ /// Gets or sets the warning.
+ ///
+ /// The warning.
+ public static Color Warning
+ {
+ get { return _Warning; }
+ internal set { _Warning = value; }
+ }
+ ///
+ /// The danger
+ ///
+ private static Color _Danger = ColorTranslator.FromHtml("#f56c6c");
+
+ ///
+ /// Gets or sets the danger.
+ ///
+ /// The danger.
+ public static Color Danger
+ {
+ get { return _Danger; }
+ internal set { _Danger = value; }
+ }
+ ///
+ /// The information
+ ///
+ private static Color _Info = ColorTranslator.FromHtml("#909399");
+
+ ///
+ /// Gets or sets the information.
+ ///
+ /// The information.
+ public static Color Info
+ {
+ get { return _Info; }
+ internal set { _Info = value; }
+ }
+ }
+}
diff --git a/UsingControl/HZHControls/Colors/TableColors.cs b/UsingControl/HZHControls/Colors/TableColors.cs
new file mode 100644
index 0000000..06bfc41
--- /dev/null
+++ b/UsingControl/HZHControls/Colors/TableColors.cs
@@ -0,0 +1,100 @@
+// ***********************************************************************
+// Assembly : HZH_Controls
+// Created : 2019-09-30
+//
+// ***********************************************************************
+//
+// Copyright by Huang Zhenghui(黄正辉) All, QQ group:568015492 QQ:623128629 Email:623128629@qq.com
+//
+//
+// Blog: https://www.cnblogs.com/bfyx
+// GitHub:https://github.com/kwwwvagaa/NetWinformControl
+// gitee:https://gitee.com/kwwwvagaa/net_winform_custom_control.git
+//
+// If you use this code, please keep this note.
+// ***********************************************************************
+using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+
+namespace HZH_Controls
+{
+ ///
+ /// Class TableColors.
+ ///
+ public class TableColors
+ {
+ ///
+ /// The green
+ ///
+ private static Color green = ColorTranslator.FromHtml("#c2e7b0");
+
+ ///
+ /// Gets the green.
+ ///
+ /// The green.
+ public static Color Green
+ {
+ get { return green; }
+ internal set { green = value; }
+ }
+ ///
+ /// The blue
+ ///
+ private static Color blue = ColorTranslator.FromHtml("#a3d0fd");
+
+ ///
+ /// Gets the blue.
+ ///
+ /// The blue.
+ public static Color Blue
+ {
+ get { return blue; }
+ internal set { blue = value; }
+ }
+ ///
+ /// The red
+ ///
+ private static Color red = ColorTranslator.FromHtml("#fbc4c4");
+
+ ///
+ /// Gets the red.
+ ///
+ /// The red.
+ public static Color Red
+ {
+ get { return red; }
+ internal set { red = value; }
+ }
+ ///
+ /// The yellow
+ ///
+ private static Color yellow = ColorTranslator.FromHtml("#f5dab1");
+
+ ///
+ /// Gets the yellow.
+ ///
+ /// The yellow.
+ public static Color Yellow
+ {
+ get { return yellow; }
+ internal set { yellow = value; }
+ }
+ ///
+ /// The gray
+ ///
+ private static Color gray = ColorTranslator.FromHtml("#d3d4d6");
+
+ ///
+ /// Gets the gray.
+ ///
+ /// The gray.
+ public static Color Gray
+ {
+ get { return gray; }
+ internal set { gray = value; }
+ }
+ }
+}
diff --git a/UsingControl/HZHControls/Colors/TextColors.cs b/UsingControl/HZHControls/Colors/TextColors.cs
new file mode 100644
index 0000000..f9a5564
--- /dev/null
+++ b/UsingControl/HZHControls/Colors/TextColors.cs
@@ -0,0 +1,86 @@
+// ***********************************************************************
+// Assembly : HZH_Controls
+// Created : 2019-09-30
+//
+// ***********************************************************************
+//
+// Copyright by Huang Zhenghui(黄正辉) All, QQ group:568015492 QQ:623128629 Email:623128629@qq.com
+//
+//
+// Blog: https://www.cnblogs.com/bfyx
+// GitHub:https://github.com/kwwwvagaa/NetWinformControl
+// gitee:https://gitee.com/kwwwvagaa/net_winform_custom_control.git
+//
+// If you use this code, please keep this note.
+// ***********************************************************************
+using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+
+namespace HZH_Controls
+{
+ ///
+ /// Class TextColor.
+ ///
+ public class TextColors
+ {
+ ///
+ /// The more light
+ ///
+ private static Color _MoreLight = ColorTranslator.FromHtml("#c0c4cc");
+
+ ///
+ /// Gets the more light.
+ ///
+ /// The more light.
+ public static Color MoreLight
+ {
+ get { return _MoreLight; }
+ internal set { _MoreLight = value; }
+ }
+ ///
+ /// The light
+ ///
+ private static Color _Light = ColorTranslator.FromHtml("#909399");
+
+ ///
+ /// Gets the light.
+ ///
+ /// The light.
+ public static Color Light
+ {
+ get { return _Light; }
+ internal set { _Light = value; }
+ }
+ ///
+ /// The dark
+ ///
+ private static Color _Dark = ColorTranslator.FromHtml("#606266");
+
+ ///
+ /// Gets the dark.
+ ///
+ /// The dark.
+ public static Color Dark
+ {
+ get { return _Dark; }
+ internal set { _Dark = value; }
+ }
+ ///
+ /// The more dark
+ ///
+ private static Color _MoreDark = ColorTranslator.FromHtml("#303133");
+
+ ///
+ /// Gets the more dark.
+ ///
+ /// The more dark.
+ public static Color MoreDark
+ {
+ get { return _MoreDark; }
+ internal set { _MoreDark = value; }
+ }
+ }
+}
diff --git a/UsingControl/HZHControls/Controls/Btn/UCBtnExt.Designer.cs b/UsingControl/HZHControls/Controls/Btn/UCBtnExt.Designer.cs
new file mode 100644
index 0000000..2e14ec1
--- /dev/null
+++ b/UsingControl/HZHControls/Controls/Btn/UCBtnExt.Designer.cs
@@ -0,0 +1,116 @@
+// ***********************************************************************
+// Assembly : HZH_Controls
+// Created : 08-08-2019
+//
+// ***********************************************************************
+//
+// Copyright by Huang Zhenghui(黄正辉) All, QQ group:568015492 QQ:623128629 Email:623128629@qq.com
+//
+//
+// Blog: https://www.cnblogs.com/bfyx
+// GitHub:https://github.com/kwwwvagaa/NetWinformControl
+// gitee:https://gitee.com/kwwwvagaa/net_winform_custom_control.git
+//
+// If you use this code, please keep this note.
+// ***********************************************************************
+namespace HZH_Controls.Controls
+{
+ ///
+ /// Class UCBtnExt.
+ /// Implements the
+ ///
+ ///
+ public partial class UCBtnExt
+ {
+ ///
+ /// 必需的设计器变量。
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// 清理所有正在使用的资源。
+ ///
+ /// 如果应释放托管资源,为 true;否则为 false。
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region 组件设计器生成的代码
+
+ ///
+ /// 设计器支持所需的方法 - 不要
+ /// 使用代码编辑器修改此方法的内容。
+ ///
+ private void InitializeComponent()
+ {
+ this.lbl = new System.Windows.Forms.Label();
+ this.lblTips = new System.Windows.Forms.Label();
+ this.SuspendLayout();
+ //
+ // lbl
+ //
+ this.lbl.BackColor = System.Drawing.Color.Transparent;
+ this.lbl.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.lbl.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.lbl.ForeColor = System.Drawing.Color.White;
+ this.lbl.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ this.lbl.Location = new System.Drawing.Point(0, 0);
+ this.lbl.Name = "lbl";
+ this.lbl.Size = new System.Drawing.Size(184, 60);
+ this.lbl.TabIndex = 0;
+ this.lbl.Text = "自定义按钮";
+ this.lbl.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ this.lbl.MouseDown += new System.Windows.Forms.MouseEventHandler(this.lbl_MouseDown);
+ //
+ // lblTips
+ //
+ this.lblTips.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.lblTips.BackColor = System.Drawing.Color.Transparent;
+ this.lblTips.Font = new System.Drawing.Font("Arial Unicode MS", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.lblTips.ForeColor = System.Drawing.Color.White;
+ this.lblTips.ImageIndex = 0;
+ this.lblTips.Location = new System.Drawing.Point(158, 0);
+ this.lblTips.Name = "lblTips";
+ this.lblTips.Size = new System.Drawing.Size(24, 24);
+ this.lblTips.TabIndex = 1;
+ this.lblTips.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ this.lblTips.Visible = false;
+ //
+ // UCBtnExt
+ //
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
+ this.BackColor = System.Drawing.Color.Transparent;
+ this.ConerRadius = 5;
+ this.Controls.Add(this.lblTips);
+ this.Controls.Add(this.lbl);
+ this.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(77)))), ((int)(((byte)(59)))));
+ this.IsRadius = true;
+ this.IsShowRect = true;
+ this.Margin = new System.Windows.Forms.Padding(0);
+ this.Name = "UCBtnExt";
+ this.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(77)))), ((int)(((byte)(58)))));
+ this.Size = new System.Drawing.Size(184, 60);
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ ///
+ /// The label
+ ///
+ public System.Windows.Forms.Label lbl;
+ ///
+ /// The label tips
+ ///
+ private System.Windows.Forms.Label lblTips;
+
+
+ }
+}
diff --git a/UsingControl/HZHControls/Controls/Btn/UCBtnExt.cs b/UsingControl/HZHControls/Controls/Btn/UCBtnExt.cs
new file mode 100644
index 0000000..e0f6464
--- /dev/null
+++ b/UsingControl/HZHControls/Controls/Btn/UCBtnExt.cs
@@ -0,0 +1,255 @@
+// ***********************************************************************
+// Assembly : HZH_Controls
+// Created : 08-08-2019
+//
+// ***********************************************************************
+//
+// Copyright by Huang Zhenghui(黄正辉) All, QQ group:568015492 QQ:623128629 Email:623128629@qq.com
+//
+//
+// Blog: https://www.cnblogs.com/bfyx
+// GitHub:https://github.com/kwwwvagaa/NetWinformControl
+// gitee:https://gitee.com/kwwwvagaa/net_winform_custom_control.git
+//
+// If you use this code, please keep this note.
+// ***********************************************************************
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+
+namespace HZH_Controls.Controls
+{
+ ///
+ /// Class UCBtnExt.
+ /// Implements the
+ ///
+ ///
+ [DefaultEvent("BtnClick")]
+
+ public partial class UCBtnExt : UCControlBase
+ {
+ #region 字段属性
+ private bool enabledMouseEffect = false;
+ [Description("是否启用鼠标效果"), Category("自定义")]
+ public bool EnabledMouseEffect
+ {
+ get { return enabledMouseEffect; }
+ set { enabledMouseEffect = value; }
+ }
+
+ ///
+ /// 是否显示角标
+ ///
+ /// true if this instance is show tips; otherwise, false.
+ [Description("是否显示角标"), Category("自定义")]
+ public bool IsShowTips
+ {
+ get
+ {
+ return this.lblTips.Visible;
+ }
+ set
+ {
+ this.lblTips.Visible = value;
+ }
+ }
+ ///
+ /// 角标文字
+ ///
+ /// The tips text.
+ [Description("角标文字"), Category("自定义")]
+ public string TipsText
+ {
+ get
+ {
+ return this.lblTips.Text;
+ }
+ set
+ {
+ this.lblTips.Text = value;
+ }
+ }
+
+ ///
+ /// The BTN back color
+ ///
+ private Color _btnBackColor = Color.White;
+ ///
+ /// 按钮背景色
+ ///
+ /// The color of the BTN back.
+ [Description("按钮背景色"), Category("自定义")]
+ public Color BtnBackColor
+ {
+ get { return _btnBackColor; }
+ set
+ {
+ _btnBackColor = value;
+ this.BackColor = value;
+ }
+ }
+
+ ///
+ /// The BTN fore color
+ ///
+ private Color _btnForeColor = Color.White;
+ ///
+ /// 按钮字体颜色
+ ///
+ /// The color of the BTN fore.
+ [Description("按钮字体颜色"), Category("自定义")]
+ public virtual Color BtnForeColor
+ {
+ get { return _btnForeColor; }
+ set
+ {
+ _btnForeColor = value;
+ this.lbl.ForeColor = value;
+ }
+ }
+
+ ///
+ /// The BTN font
+ ///
+ private Font _btnFont = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ ///
+ /// 按钮字体
+ ///
+ /// The BTN font.
+ [Description("按钮字体"), Category("自定义")]
+ public Font BtnFont
+ {
+ get { return _btnFont; }
+ set
+ {
+ _btnFont = value;
+ this.lbl.Font = value;
+ }
+ }
+
+ ///
+ /// 按钮点击事件
+ ///
+ [Description("按钮点击事件"), Category("自定义")]
+ public event EventHandler BtnClick;
+
+ ///
+ /// The BTN text
+ ///
+ private string _btnText;
+ ///
+ /// 按钮文字
+ ///
+ /// The BTN text.
+ [Description("按钮文字"), Category("自定义")]
+ public virtual string BtnText
+ {
+ get { return _btnText; }
+ set
+ {
+ _btnText = value;
+ lbl.Text = value;
+ }
+ }
+
+ ///
+ /// The m tips color
+ ///
+ private Color m_tipsColor = Color.FromArgb(232, 30, 99);
+ ///
+ /// 角标颜色
+ ///
+ /// The color of the tips.
+ [Description("角标颜色"), Category("自定义")]
+ public Color TipsColor
+ {
+ get { return m_tipsColor; }
+ set { m_tipsColor = value; }
+ }
+ [Description("鼠标效果生效时发生,需要和MouseEffected同时使用,否则无效"), Category("自定义")]
+ public event EventHandler MouseEffecting;
+ [Description("鼠标效果结束时发生,需要和MouseEffecting同时使用,否则无效"), Category("自定义")]
+ public event EventHandler MouseEffected;
+ #endregion
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ public UCBtnExt()
+ {
+ InitializeComponent();
+ this.TabStop = false;
+ lblTips.Paint += lblTips_Paint;
+ this.lbl.MouseEnter += lbl_MouseEnter;
+ this.lbl.MouseLeave += lbl_MouseLeave;
+ }
+ Color m_cacheColor = Color.Empty;
+ void lbl_MouseLeave(object sender, EventArgs e)
+ {
+ if (enabledMouseEffect)
+ {
+ if (MouseEffecting != null && MouseEffected != null)
+ {
+ MouseEffected(this, e);
+ }
+ else
+ {
+ if (m_cacheColor != Color.Empty)
+ {
+ this.FillColor = m_cacheColor;
+ m_cacheColor = Color.Empty;
+ }
+ }
+ }
+ }
+
+ void lbl_MouseEnter(object sender, EventArgs e)
+ {
+ if (enabledMouseEffect)
+ {
+ if (MouseEffecting != null && MouseEffected != null)
+ {
+ MouseEffecting(this, e);
+ }
+ else
+ {
+ if (FillColor != Color.Empty && FillColor != null)
+ {
+ m_cacheColor = this.FillColor;
+ this.FillColor = Color.FromArgb(230, this.FillColor);
+ }
+ }
+ }
+ }
+
+ ///
+ /// Handles the Paint event of the lblTips control.
+ ///
+ /// The source of the event.
+ /// The instance containing the event data.
+ void lblTips_Paint(object sender, PaintEventArgs e)
+ {
+ e.Graphics.SetGDIHigh();
+ e.Graphics.FillEllipse(new SolidBrush(m_tipsColor), new Rectangle(0, 0, lblTips.Width - 1, lblTips.Height - 1));
+ System.Drawing.SizeF sizeEnd = e.Graphics.MeasureString(TipsText, lblTips.Font);
+
+ e.Graphics.DrawString(TipsText, lblTips.Font, new SolidBrush(lblTips.ForeColor), new PointF((lblTips.Width - sizeEnd.Width) / 2, (lblTips.Height - sizeEnd.Height) / 2 + 1));
+ }
+
+ ///
+ /// Handles the MouseDown event of the lbl control.
+ ///
+ /// The source of the event.
+ /// The instance containing the event data.
+ private void lbl_MouseDown(object sender, MouseEventArgs e)
+ {
+ if (this.BtnClick != null)
+ BtnClick(this, e);
+ }
+ }
+}
diff --git a/UsingControl/HZHControls/Controls/Btn/UCBtnExt.resx b/UsingControl/HZHControls/Controls/Btn/UCBtnExt.resx
new file mode 100644
index 0000000..1af7de1
--- /dev/null
+++ b/UsingControl/HZHControls/Controls/Btn/UCBtnExt.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/UsingControl/HZHControls/Controls/Btn/UCBtnFillet.Designer.cs b/UsingControl/HZHControls/Controls/Btn/UCBtnFillet.Designer.cs
new file mode 100644
index 0000000..8380d81
--- /dev/null
+++ b/UsingControl/HZHControls/Controls/Btn/UCBtnFillet.Designer.cs
@@ -0,0 +1,90 @@
+// ***********************************************************************
+// Assembly : HZH_Controls
+// Created : 08-08-2019
+//
+// ***********************************************************************
+//
+// Copyright by Huang Zhenghui(黄正辉) All, QQ group:568015492 QQ:623128629 Email:623128629@qq.com
+//
+//
+// Blog: https://www.cnblogs.com/bfyx
+// GitHub:https://github.com/kwwwvagaa/NetWinformControl
+// gitee:https://gitee.com/kwwwvagaa/net_winform_custom_control.git
+//
+// If you use this code, please keep this note.
+// ***********************************************************************
+namespace HZH_Controls.Controls
+{
+ ///
+ /// Class UCBtnFillet.
+ /// Implements the
+ ///
+ ///
+ partial class UCBtnFillet
+ {
+ ///
+ /// 必需的设计器变量。
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// 清理所有正在使用的资源。
+ ///
+ /// 如果应释放托管资源,为 true;否则为 false。
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region 组件设计器生成的代码
+
+ ///
+ /// 设计器支持所需的方法 - 不要
+ /// 使用代码编辑器修改此方法的内容。
+ ///
+ private void InitializeComponent()
+ {
+ this.lbl = new System.Windows.Forms.Label();
+ this.SuspendLayout();
+ //
+ // lbl
+ //
+ this.lbl.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.lbl.Font = new System.Drawing.Font("微软雅黑", 18F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Pixel);
+ this.lbl.Image = global::HZH_Controls.Properties.Resources.alarm;
+ this.lbl.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ this.lbl.Location = new System.Drawing.Point(0, 0);
+ this.lbl.Name = "lbl";
+ this.lbl.Padding = new System.Windows.Forms.Padding(5, 0, 0, 0);
+ this.lbl.Size = new System.Drawing.Size(120, 76);
+ this.lbl.TabIndex = 0;
+ this.lbl.Text = "按钮1 ";
+ this.lbl.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ this.lbl.MouseDown += new System.Windows.Forms.MouseEventHandler(this.lbl_MouseDown);
+ //
+ // UCBtnFillet
+ //
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
+ this.BackColor = System.Drawing.Color.Transparent;
+ this.ConerRadius = 5;
+ this.Controls.Add(this.lbl);
+ this.IsShowRect = true;
+ this.IsRadius = true;
+ this.Name = "UCBtnFillet";
+ this.Size = new System.Drawing.Size(120, 76);
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ ///
+ /// The label
+ ///
+ private System.Windows.Forms.Label lbl;
+ }
+}
diff --git a/UsingControl/HZHControls/Controls/Btn/UCBtnFillet.cs b/UsingControl/HZHControls/Controls/Btn/UCBtnFillet.cs
new file mode 100644
index 0000000..54d9a21
--- /dev/null
+++ b/UsingControl/HZHControls/Controls/Btn/UCBtnFillet.cs
@@ -0,0 +1,88 @@
+// ***********************************************************************
+// Assembly : HZH_Controls
+// Created : 08-08-2019
+//
+// ***********************************************************************
+//
+// Copyright by Huang Zhenghui(黄正辉) All, QQ group:568015492 QQ:623128629 Email:623128629@qq.com
+//
+//
+// Blog: https://www.cnblogs.com/bfyx
+// GitHub:https://github.com/kwwwvagaa/NetWinformControl
+// gitee:https://gitee.com/kwwwvagaa/net_winform_custom_control.git
+//
+// If you use this code, please keep this note.
+// ***********************************************************************
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+
+namespace HZH_Controls.Controls
+{
+ ///
+ /// Class UCBtnFillet.
+ /// Implements the
+ ///
+ ///
+ [DefaultEvent("BtnClick")]
+ public partial class UCBtnFillet : UCControlBase
+ {
+ ///
+ /// 按钮点击事件
+ ///
+ [Description("按钮点击事件"), Category("自定义")]
+ public event EventHandler BtnClick;
+ ///
+ /// 按钮图片
+ ///
+ /// The BTN image.
+ [Description("按钮图片"), Category("自定义")]
+ public Image BtnImage
+ {
+ get
+ {
+ return lbl.Image;
+ }
+ set
+ {
+ lbl.Image = value;
+ }
+ }
+ ///
+ /// 按钮文字
+ ///
+ /// The BTN text.
+ [Description("按钮文字"), Category("自定义")]
+ public string BtnText
+ {
+ get { return lbl.Text; }
+ set
+ {
+ lbl.Text = value;
+ }
+ }
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ public UCBtnFillet()
+ {
+ InitializeComponent();
+ }
+
+ ///
+ /// Handles the MouseDown event of the lbl control.
+ ///
+ /// The source of the event.
+ /// The instance containing the event data.
+ private void lbl_MouseDown(object sender, MouseEventArgs e)
+ {
+ if (BtnClick != null)
+ BtnClick(this, e);
+ }
+ }
+}
diff --git a/UsingControl/HZHControls/Controls/Btn/UCBtnFillet.resx b/UsingControl/HZHControls/Controls/Btn/UCBtnFillet.resx
new file mode 100644
index 0000000..1af7de1
--- /dev/null
+++ b/UsingControl/HZHControls/Controls/Btn/UCBtnFillet.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/UsingControl/HZHControls/Controls/Btn/UCBtnImg.Designer.cs b/UsingControl/HZHControls/Controls/Btn/UCBtnImg.Designer.cs
new file mode 100644
index 0000000..597b2b1
--- /dev/null
+++ b/UsingControl/HZHControls/Controls/Btn/UCBtnImg.Designer.cs
@@ -0,0 +1,69 @@
+// ***********************************************************************
+// Assembly : HZH_Controls
+// Created : 08-08-2019
+//
+// ***********************************************************************
+//
+// Copyright by Huang Zhenghui(黄正辉) All, QQ group:568015492 QQ:623128629 Email:623128629@qq.com
+//
+//
+// Blog: https://www.cnblogs.com/bfyx
+// GitHub:https://github.com/kwwwvagaa/NetWinformControl
+// gitee:https://gitee.com/kwwwvagaa/net_winform_custom_control.git
+//
+// If you use this code, please keep this note.
+// ***********************************************************************
+namespace HZH_Controls.Controls
+{
+ ///
+ /// Class UCBtnImg.
+ /// Implements the
+ ///
+ ///
+ partial class UCBtnImg
+ {
+ ///
+ /// 必需的设计器变量。
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// 清理所有正在使用的资源。
+ ///
+ /// 如果应释放托管资源,为 true;否则为 false。
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region 组件设计器生成的代码
+
+ ///
+ /// 设计器支持所需的方法 - 不要
+ /// 使用代码编辑器修改此方法的内容。
+ ///
+ private void InitializeComponent()
+ {
+ this.SuspendLayout();
+ //
+ // lbl
+ //
+ this.lbl.Image = global::HZH_Controls.Properties.Resources.back;
+ //
+ // UCBtnImg
+ //
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
+ this.IsShowTips = true;
+ this.Name = "UCBtnImg";
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ }
+}
diff --git a/UsingControl/HZHControls/Controls/Btn/UCBtnImg.cs b/UsingControl/HZHControls/Controls/Btn/UCBtnImg.cs
new file mode 100644
index 0000000..25b0bbb
--- /dev/null
+++ b/UsingControl/HZHControls/Controls/Btn/UCBtnImg.cs
@@ -0,0 +1,129 @@
+// ***********************************************************************
+// Assembly : HZH_Controls
+// Created : 08-08-2019
+//
+// ***********************************************************************
+//
+// Copyright by Huang Zhenghui(黄正辉) All, QQ group:568015492 QQ:623128629 Email:623128629@qq.com
+//
+//
+// Blog: https://www.cnblogs.com/bfyx
+// GitHub:https://github.com/kwwwvagaa/NetWinformControl
+// gitee:https://gitee.com/kwwwvagaa/net_winform_custom_control.git
+//
+// If you use this code, please keep this note.
+// ***********************************************************************
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+
+namespace HZH_Controls.Controls
+{
+ ///
+ /// Class UCBtnImg.
+ /// Implements the
+ ///
+ ///
+ public partial class UCBtnImg : UCBtnExt
+ {
+ ///
+ /// The BTN text
+ ///
+ private string _btnText = "自定义按钮";
+ ///
+ /// 按钮文字
+ ///
+ /// The BTN text.
+ [Description("按钮文字"), Category("自定义")]
+ public override string BtnText
+ {
+ get { return _btnText; }
+ set
+ {
+ _btnText = value;
+ lbl.Text = value;
+ lbl.Refresh();
+ }
+ }
+ ///
+ /// 图片
+ ///
+ /// The image.
+ [Description("图片"), Category("自定义")]
+ public virtual Image Image
+ {
+ get
+ {
+ return this.lbl.Image;
+ }
+ set
+ {
+ this.lbl.Image = value;
+ }
+ }
+
+ ///
+ /// The image font icons
+ ///
+ private object imageFontIcons;
+ ///
+ /// Gets or sets the image font icons.
+ ///
+ /// The image font icons.
+ [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
+ [Editor(typeof(ImagePropertyEditor), typeof(System.Drawing.Design.UITypeEditor))]
+ public object ImageFontIcons
+ {
+ get { return imageFontIcons; }
+ set
+ {
+ if (value == null || value is Image)
+ {
+ imageFontIcons = value;
+ if (value != null)
+ {
+ Image = (Image)value;
+ }
+ }
+ }
+ }
+
+ ///
+ /// 图片位置
+ ///
+ /// The image align.
+ [Description("图片位置"), Category("自定义")]
+ public virtual ContentAlignment ImageAlign
+ {
+ get { return this.lbl.ImageAlign; }
+ set { lbl.ImageAlign = value; }
+ }
+ ///
+ /// 文字位置
+ ///
+ /// The text align.
+ [Description("文字位置"), Category("自定义")]
+ public virtual ContentAlignment TextAlign
+ {
+ get { return this.lbl.TextAlign; }
+ set { lbl.TextAlign = value; }
+ }
+
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ public UCBtnImg()
+ {
+ InitializeComponent();
+ IsShowTips = false;
+ base.BtnForeColor = ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(102)))), ((int)(((byte)(102)))), ((int)(((byte)(102)))));
+ base.BtnFont = new System.Drawing.Font("微软雅黑", 17F);
+ base.BtnText = "自定义按钮";
+ }
+ }
+}
diff --git a/UsingControl/HZHControls/Controls/Btn/UCBtnImg.resx b/UsingControl/HZHControls/Controls/Btn/UCBtnImg.resx
new file mode 100644
index 0000000..1af7de1
--- /dev/null
+++ b/UsingControl/HZHControls/Controls/Btn/UCBtnImg.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/UsingControl/HZHControls/Controls/Btn/UCDropDownBtn.Designer.cs b/UsingControl/HZHControls/Controls/Btn/UCDropDownBtn.Designer.cs
new file mode 100644
index 0000000..a27df1e
--- /dev/null
+++ b/UsingControl/HZHControls/Controls/Btn/UCDropDownBtn.Designer.cs
@@ -0,0 +1,79 @@
+// ***********************************************************************
+// Assembly : HZH_Controls
+// Created : 08-27-2019
+//
+// ***********************************************************************
+//
+// Copyright by Huang Zhenghui(黄正辉) All, QQ group:568015492 QQ:623128629 Email:623128629@qq.com
+//
+//
+// Blog: https://www.cnblogs.com/bfyx
+// GitHub:https://github.com/kwwwvagaa/NetWinformControl
+// gitee:https://gitee.com/kwwwvagaa/net_winform_custom_control.git
+//
+// If you use this code, please keep this note.
+// ***********************************************************************
+namespace HZH_Controls.Controls
+{
+ ///
+ /// Class UCDropDownBtn.
+ /// Implements the
+ ///
+ ///
+ partial class UCDropDownBtn
+ {
+ ///
+ /// 必需的设计器变量。
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// 清理所有正在使用的资源。
+ ///
+ /// 如果应释放托管资源,为 true;否则为 false。
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region 组件设计器生成的代码
+
+ ///
+ /// 设计器支持所需的方法 - 不要
+ /// 使用代码编辑器修改此方法的内容。
+ ///
+ private void InitializeComponent()
+ {
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(UCDropDownBtn));
+ this.SuspendLayout();
+ //
+ // lbl
+ //
+ this.lbl.Font = new System.Drawing.Font("微软雅黑", 14F);
+ this.lbl.ForeColor = System.Drawing.Color.White;
+ this.lbl.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
+ this.lbl.ImageList = null;
+ this.lbl.Text = "自定义按钮";
+ this.lbl.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ //
+ // UCDropDownBtn
+ //
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
+ this.BtnFont = new System.Drawing.Font("微软雅黑", 14F);
+ this.BtnForeColor = System.Drawing.Color.White;
+ this.ForeColor = System.Drawing.Color.White;
+ this.Image = ((System.Drawing.Image)(resources.GetObject("$this.Image")));
+ this.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
+ this.Margin = new System.Windows.Forms.Padding(2);
+ this.Name = "UCDropDownBtn";
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+ }
+}
diff --git a/UsingControl/HZHControls/Controls/Btn/UCDropDownBtn.cs b/UsingControl/HZHControls/Controls/Btn/UCDropDownBtn.cs
new file mode 100644
index 0000000..e39d75d
--- /dev/null
+++ b/UsingControl/HZHControls/Controls/Btn/UCDropDownBtn.cs
@@ -0,0 +1,211 @@
+// ***********************************************************************
+// Assembly : HZH_Controls
+// Created : 08-27-2019
+//
+// ***********************************************************************
+//
+// Copyright by Huang Zhenghui(黄正辉) All, QQ group:568015492 QQ:623128629 Email:623128629@qq.com
+//
+//
+// Blog: https://www.cnblogs.com/bfyx
+// GitHub:https://github.com/kwwwvagaa/NetWinformControl
+// gitee:https://gitee.com/kwwwvagaa/net_winform_custom_control.git
+//
+// If you use this code, please keep this note.
+// ***********************************************************************
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using System.Drawing;
+using System.Drawing.Drawing2D;
+
+namespace HZH_Controls.Controls
+{
+ ///
+ /// Class UCDropDownBtn.
+ /// Implements the
+ ///
+ ///
+ [DefaultEvent("BtnClick")]
+ public partial class UCDropDownBtn : UCBtnImg
+ {
+ ///
+ /// The FRM anchor
+ ///
+ Forms.FrmAnchor _frmAnchor;
+ ///
+ /// The drop panel height
+ ///
+ private int _dropPanelHeight = -1;
+ ///
+ /// 按钮点击事件
+ ///
+ public new event EventHandler BtnClick;
+ ///
+ /// 下拉框高度
+ ///
+ /// The height of the drop panel.
+ [Description("下拉框高度"), Category("自定义")]
+ public int DropPanelHeight
+ {
+ get { return _dropPanelHeight; }
+ set { _dropPanelHeight = value; }
+ }
+ ///
+ /// The BTNS
+ ///
+ private string[] btns;
+ ///
+ /// 需要显示的按钮文字
+ ///
+ /// The BTNS.
+ [Description("需要显示的按钮文字"), Category("自定义")]
+ public string[] Btns
+ {
+ get { return btns; }
+ set { btns = value; }
+ }
+ ///
+ /// 图片
+ ///
+ /// The image.
+ [Obsolete("不再可用的属性")]
+ [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+ public override Image Image
+ {
+ get;
+ set;
+ }
+ ///
+ /// 图片位置
+ ///
+ /// The image align.
+ [Obsolete("不再可用的属性")]
+ [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+ public override ContentAlignment ImageAlign
+ {
+ get;
+ set;
+ }
+ ///
+ /// 按钮字体颜色
+ ///
+ /// The color of the BTN fore.
+ [Description("按钮字体颜色"), Category("自定义")]
+ public override Color BtnForeColor
+ {
+ get
+ {
+ return base.BtnForeColor;
+ }
+ set
+ {
+ base.BtnForeColor = value;
+ Bitmap bit = new Bitmap(12, 10);
+ Graphics g = Graphics.FromImage(bit);
+ g.SetGDIHigh();
+ GraphicsPath path = new GraphicsPath();
+ path.AddLines(new Point[]
+ {
+ new Point(1,1),
+ new Point(11,1),
+ new Point(6,10),
+ new Point(1,1)
+ });
+ g.FillPath(new SolidBrush(value), path);
+ g.Dispose();
+ this.lbl.Image = bit;
+ }
+ }
+
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ public UCDropDownBtn()
+ {
+ InitializeComponent();
+ IsShowTips = false;
+ this.lbl.ImageAlign = ContentAlignment.MiddleRight;
+ base.BtnClick += UCDropDownBtn_BtnClick;
+ }
+
+ ///
+ /// Handles the BtnClick event of the UCDropDownBtn control.
+ ///
+ /// The source of the event.
+ /// The instance containing the event data.
+ void UCDropDownBtn_BtnClick(object sender, EventArgs e)
+ {
+ if (_frmAnchor == null || _frmAnchor.IsDisposed || _frmAnchor.Visible == false)
+ {
+
+ if (Btns != null && Btns.Length > 0)
+ {
+ int intRow = 0;
+ int intCom = 1;
+ var p = this.PointToScreen(this.Location);
+ while (true)
+ {
+ int intScreenHeight = Screen.PrimaryScreen.Bounds.Height;
+ if ((p.Y + this.Height + Btns.Length / intCom * 50 < intScreenHeight || p.Y - Btns.Length / intCom * 50 > 0)
+ && (_dropPanelHeight <= 0 ? true : (Btns.Length / intCom * 50 <= _dropPanelHeight)))
+ {
+ intRow = Btns.Length / intCom + (Btns.Length % intCom != 0 ? 1 : 0);
+ break;
+ }
+ intCom++;
+ }
+ UCTimePanel ucTime = new UCTimePanel();
+ ucTime.IsShowBorder = true;
+ int intWidth = this.Width / intCom;
+
+ Size size = new Size(intCom * intWidth, intRow * 50);
+ ucTime.Size = size;
+ ucTime.FirstEvent = true;
+ ucTime.SelectSourceEvent += ucTime_SelectSourceEvent;
+ ucTime.Row = intRow;
+ ucTime.Column = intCom;
+
+ List> lst = new List>();
+ foreach (var item in Btns)
+ {
+ lst.Add(new KeyValuePair(item, item));
+ }
+ ucTime.Source = lst;
+
+ _frmAnchor = new Forms.FrmAnchor(this, ucTime);
+ _frmAnchor.Load += (a, b) => { (a as Form).Size = size; };
+
+ _frmAnchor.Show(this.FindForm());
+
+ }
+ }
+ else
+ {
+ _frmAnchor.Close();
+ }
+ }
+ ///
+ /// Handles the SelectSourceEvent event of the ucTime control.
+ ///
+ /// The source of the event.
+ /// The instance containing the event data.
+ void ucTime_SelectSourceEvent(object sender, EventArgs e)
+ {
+ if (_frmAnchor != null && !_frmAnchor.IsDisposed && _frmAnchor.Visible)
+ {
+ _frmAnchor.Close();
+
+ if (BtnClick != null)
+ {
+ BtnClick(sender.ToString(), e);
+ }
+ }
+ }
+ }
+}
diff --git a/UsingControl/HZHControls/Controls/Btn/UCDropDownBtn.resx b/UsingControl/HZHControls/Controls/Btn/UCDropDownBtn.resx
new file mode 100644
index 0000000..7d5161d
--- /dev/null
+++ b/UsingControl/HZHControls/Controls/Btn/UCDropDownBtn.resx
@@ -0,0 +1,131 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAAA4AAAAYCAYAAADKx8xXAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAD0SURBVDhPjZLtDcIwDES9Ezt1py7AMCgrdIGKH3SC0OfE
+ JZ/FJxmR+E55livP1ycua4iPJboKLxnZti0HPeFwemPc9z3KcRx68AbX04uEHw4eXB4A8wqmOcfmsvCE
+ oLkoCOb/uAlT5zMxp+IOA6noQYY3x6TAnb/YYSIOXN7NaZhdkEuaoxBlmFUQcaG4g5DN14UQlzNcne+t
+ uT6Ifmupq1tDK2YAqd5n+qirNbQCBdzyNea7xUQ0MZW4/O/W0Ipmu5bpGlrVc4b+a5kJk+G6ME2YbC2U
+ CxNhMlzKlNtzZZ/i2hpQbt8LI6+6MU3qLpSvC4l8ASkgxV0fp9H6AAAAAElFTkSuQmCC
+
+
+
\ No newline at end of file
diff --git a/UsingControl/HZHControls/Controls/BtnsGroup/UCBtnsGroup.Designer.cs b/UsingControl/HZHControls/Controls/BtnsGroup/UCBtnsGroup.Designer.cs
new file mode 100644
index 0000000..37da5dd
--- /dev/null
+++ b/UsingControl/HZHControls/Controls/BtnsGroup/UCBtnsGroup.Designer.cs
@@ -0,0 +1,81 @@
+// ***********************************************************************
+// Assembly : HZH_Controls
+// Created : 08-15-2019
+//
+// ***********************************************************************
+//
+// Copyright by Huang Zhenghui(黄正辉) All, QQ group:568015492 QQ:623128629 Email:623128629@qq.com
+//
+//
+// Blog: https://www.cnblogs.com/bfyx
+// GitHub:https://github.com/kwwwvagaa/NetWinformControl
+// gitee:https://gitee.com/kwwwvagaa/net_winform_custom_control.git
+//
+// If you use this code, please keep this note.
+// ***********************************************************************
+namespace HZH_Controls.Controls
+{
+ ///
+ /// Class UCBtnsGroup.
+ /// Implements the
+ ///
+ ///
+ partial class UCBtnsGroup
+ {
+ ///
+ /// 必需的设计器变量。
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// 清理所有正在使用的资源。
+ ///
+ /// 如果应释放托管资源,为 true;否则为 false。
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region 组件设计器生成的代码
+
+ ///
+ /// 设计器支持所需的方法 - 不要
+ /// 使用代码编辑器修改此方法的内容。
+ ///
+ private void InitializeComponent()
+ {
+ this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel();
+ this.SuspendLayout();
+ //
+ // flowLayoutPanel1
+ //
+ this.flowLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.flowLayoutPanel1.Location = new System.Drawing.Point(0, 0);
+ this.flowLayoutPanel1.Name = "flowLayoutPanel1";
+ this.flowLayoutPanel1.Size = new System.Drawing.Size(420, 50);
+ this.flowLayoutPanel1.TabIndex = 0;
+ //
+ // UCBtnsGroup
+ //
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
+ this.BackColor = System.Drawing.Color.White;
+ this.Controls.Add(this.flowLayoutPanel1);
+ this.MinimumSize = new System.Drawing.Size(0, 50);
+ this.Name = "UCBtnsGroup";
+ this.Size = new System.Drawing.Size(420, 50);
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ ///
+ /// The flow layout panel1
+ ///
+ private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel1;
+ }
+}
diff --git a/UsingControl/HZHControls/Controls/BtnsGroup/UCBtnsGroup.cs b/UsingControl/HZHControls/Controls/BtnsGroup/UCBtnsGroup.cs
new file mode 100644
index 0000000..26ccca6
--- /dev/null
+++ b/UsingControl/HZHControls/Controls/BtnsGroup/UCBtnsGroup.cs
@@ -0,0 +1,229 @@
+// ***********************************************************************
+// Assembly : HZH_Controls
+// Created : 08-15-2019
+//
+// ***********************************************************************
+//
+// Copyright by Huang Zhenghui(黄正辉) All, QQ group:568015492 QQ:623128629 Email:623128629@qq.com
+//
+//
+// Blog: https://www.cnblogs.com/bfyx
+// GitHub:https://github.com/kwwwvagaa/NetWinformControl
+// gitee:https://gitee.com/kwwwvagaa/net_winform_custom_control.git
+//
+// If you use this code, please keep this note.
+// ***********************************************************************
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+
+namespace HZH_Controls.Controls
+{
+ ///
+ /// Class UCBtnsGroup.
+ /// Implements the
+ ///
+ ///
+ public partial class UCBtnsGroup : UserControl
+ {
+ ///
+ /// 选中改变事件
+ ///
+ [Description("选中改变事件"), Category("自定义")]
+ public event EventHandler SelectedItemChanged;
+ ///
+ /// The m data source
+ ///
+ private Dictionary m_dataSource = new Dictionary();
+ ///
+ /// 数据源
+ ///
+ /// The data source.
+ [Description("数据源"), Category("自定义")]
+ public Dictionary DataSource
+ {
+ get { return m_dataSource; }
+ set
+ {
+ m_dataSource = value;
+ Reload();
+ }
+ }
+
+ ///
+ /// The m select item
+ ///
+ private List m_selectItem = new List();
+ ///
+ /// 选中项
+ ///
+ /// The select item.
+ [Description("选中项"), Category("自定义")]
+ public List SelectItem
+ {
+ get { return m_selectItem; }
+ set
+ {
+ m_selectItem = value;
+ if (m_selectItem == null)
+ m_selectItem = new List();
+ SetSelected();
+ }
+ }
+
+ ///
+ /// The m is multiple
+ ///
+ private bool m_isMultiple = false;
+ ///
+ /// 是否多选
+ ///
+ /// true if this instance is multiple; otherwise, false.
+ [Description("是否多选"), Category("自定义")]
+ public bool IsMultiple
+ {
+ get { return m_isMultiple; }
+ set { m_isMultiple = value; }
+ }
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ public UCBtnsGroup()
+ {
+ InitializeComponent();
+ }
+
+ ///
+ /// Reloads this instance.
+ ///
+ private void Reload()
+ {
+ try
+ {
+ ControlHelper.FreezeControl(flowLayoutPanel1, true);
+ this.flowLayoutPanel1.Controls.Clear();
+ if (DataSource != null)
+ {
+ foreach (var item in DataSource)
+ {
+ UCBtnExt btn = new UCBtnExt();
+ btn.BackColor = System.Drawing.Color.Transparent;
+ btn.BtnBackColor = System.Drawing.Color.White;
+ btn.BtnFont = new System.Drawing.Font("微软雅黑", 10F);
+ btn.BtnForeColor = System.Drawing.Color.Gray;
+ btn.BtnText = item.Value;
+ btn.ConerRadius = 5;
+ btn.Cursor = System.Windows.Forms.Cursors.Hand;
+ btn.FillColor = System.Drawing.Color.White;
+ btn.Font = new System.Drawing.Font("微软雅黑", 15F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Pixel);
+ btn.IsRadius = true;
+ btn.IsShowRect = true;
+ btn.IsShowTips = false;
+ btn.Location = new System.Drawing.Point(5, 5);
+ btn.Margin = new System.Windows.Forms.Padding(5);
+ btn.Name = item.Key;
+ btn.RectColor = System.Drawing.Color.FromArgb(224, 224, 224);
+ btn.RectWidth = 1;
+ btn.Size = new System.Drawing.Size(72, 38);
+ btn.TabStop = false;
+ btn.BtnClick += btn_BtnClick;
+ this.flowLayoutPanel1.Controls.Add(btn);
+ }
+ }
+ }
+ finally
+ {
+ ControlHelper.FreezeControl(flowLayoutPanel1, false);
+ }
+ SetSelected();
+ }
+
+ ///
+ /// Handles the BtnClick event of the btn control.
+ ///
+ /// The source of the event.
+ /// The instance containing the event data.
+ void btn_BtnClick(object sender, EventArgs e)
+ {
+ var btn = sender as UCBtnExt;
+ if (m_selectItem.Contains(btn.Name))
+ {
+ btn.RectColor = System.Drawing.Color.FromArgb(224, 224, 224);
+ m_selectItem.Remove(btn.Name);
+ }
+ else
+ {
+ if (!m_isMultiple)
+ {
+ foreach (var item in m_selectItem)
+ {
+ var lst = this.flowLayoutPanel1.Controls.Find(item, false);
+ if (lst.Length == 1)
+ {
+ var _btn = lst[0] as UCBtnExt;
+ _btn.RectColor = System.Drawing.Color.FromArgb(224, 224, 224);
+ }
+ }
+ m_selectItem.Clear();
+ }
+ btn.RectColor = System.Drawing.Color.FromArgb(255, 77, 59);
+ m_selectItem.Add(btn.Name);
+ }
+ if (SelectedItemChanged != null)
+ SelectedItemChanged(this, e);
+ }
+
+ ///
+ /// Sets the selected.
+ ///
+ private void SetSelected()
+ {
+ if (m_selectItem != null && m_selectItem.Count > 0 && DataSource != null && DataSource.Count > 0)
+ {
+ try
+ {
+ ControlHelper.FreezeControl(flowLayoutPanel1, true);
+ if (m_isMultiple)
+ {
+ foreach (var item in m_selectItem)
+ {
+ var lst = this.flowLayoutPanel1.Controls.Find(item, false);
+ if (lst.Length == 1)
+ {
+ var btn = lst[0] as UCBtnExt;
+ btn.RectColor = System.Drawing.Color.FromArgb(255, 77, 59);
+ }
+ }
+ }
+ else
+ {
+ UCBtnExt btn = null;
+ foreach (var item in m_selectItem)
+ {
+ var lst = this.flowLayoutPanel1.Controls.Find(item, false);
+ if (lst.Length == 1)
+ {
+ btn = lst[0] as UCBtnExt;
+ break;
+ }
+ }
+ if (btn != null)
+ {
+ m_selectItem = new List() { btn.Name };
+ btn.RectColor = System.Drawing.Color.FromArgb(255, 77, 59);
+ }
+ }
+ }
+ finally
+ {
+ ControlHelper.FreezeControl(flowLayoutPanel1, false);
+ }
+ }
+ }
+ }
+}
diff --git a/UsingControl/HZHControls/Controls/BtnsGroup/UCBtnsGroup.resx b/UsingControl/HZHControls/Controls/BtnsGroup/UCBtnsGroup.resx
new file mode 100644
index 0000000..1af7de1
--- /dev/null
+++ b/UsingControl/HZHControls/Controls/BtnsGroup/UCBtnsGroup.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/UsingControl/HZHControls/Controls/Charts/AuxiliaryLable.cs b/UsingControl/HZHControls/Controls/Charts/AuxiliaryLable.cs
new file mode 100644
index 0000000..7af33dc
--- /dev/null
+++ b/UsingControl/HZHControls/Controls/Charts/AuxiliaryLable.cs
@@ -0,0 +1,38 @@
+using System.Drawing;
+
+namespace HZH_Controls.Controls
+{
+ public class AuxiliaryLable
+ {
+ public string Text
+ {
+ get;
+ set;
+ }
+
+ public Brush TextBrush
+ {
+ get;
+ set;
+ }
+
+ public Brush TextBack
+ {
+ get;
+ set;
+ }
+
+ public float LocationX
+ {
+ get;
+ set;
+ }
+
+ public AuxiliaryLable()
+ {
+ TextBrush = Brushes.Black;
+ TextBack = Brushes.Transparent;
+ LocationX = 0.5f;
+ }
+ }
+}
diff --git a/UsingControl/HZHControls/Controls/Charts/AuxiliaryLine.cs b/UsingControl/HZHControls/Controls/Charts/AuxiliaryLine.cs
new file mode 100644
index 0000000..6b771df
--- /dev/null
+++ b/UsingControl/HZHControls/Controls/Charts/AuxiliaryLine.cs
@@ -0,0 +1,122 @@
+// ***********************************************************************
+// Assembly : HZH_Controls
+// Created : 2019-09-17
+//
+// ***********************************************************************
+//
+// Copyright by Huang Zhenghui() All, QQ group:568015492 QQ:623128629 Email:623128629@qq.com
+//
+//
+// Blog: https://www.cnblogs.com/bfyx
+// GitHubhttps://github.com/kwwwvagaa/NetWinformControl
+// giteehttps://gitee.com/kwwwvagaa/net_winform_custom_control.git
+//
+// If you use this code, please keep this note.
+// ***********************************************************************
+using System;
+using System.Drawing;
+
+namespace HZH_Controls.Controls
+{
+ ///
+ /// Class AuxiliaryLine.
+ /// Implements the
+ ///
+ ///
+ internal class AuxiliaryLine : IDisposable
+ {
+ private bool disposedValue = false;
+
+ public float Value
+ {
+ get;
+ set;
+ }
+
+ public float PaintValue
+ {
+ get;
+ set;
+ }
+
+ public float PaintValueBackUp
+ {
+ get;
+ set;
+ }
+
+ public Color LineColor
+ {
+ get;
+ set;
+ }
+
+ public Pen PenDash
+ {
+ get;
+ set;
+ }
+
+ public Pen PenSolid
+ {
+ get;
+ set;
+ }
+
+ public float LineThickness
+ {
+ get;
+ set;
+ }
+
+ public Brush LineTextBrush
+ {
+ get;
+ set;
+ }
+
+ public bool IsLeftFrame
+ {
+ get;
+ set;
+ }
+
+ private bool isDashStyle = true;
+
+ public bool IsDashStyle
+ {
+ get { return isDashStyle; }
+ set { isDashStyle = value; }
+ }
+
+
+ public Pen GetPen()
+ {
+ return IsDashStyle ? PenDash : PenSolid;
+ }
+
+ protected virtual void Dispose(bool disposing)
+ {
+ if (!disposedValue)
+ {
+ if (disposing)
+ {
+ if(PenDash==null)
+ PenDash.Dispose();
+ if(PenSolid==null)
+ PenSolid.Dispose();
+ if(LineTextBrush==null)
+ LineTextBrush.Dispose();
+ }
+ disposedValue = true;
+ }
+ }
+
+ public string Tip { get; set; }
+
+ public void Dispose()
+ {
+ Dispose(true);
+ }
+ }
+}
diff --git a/UsingControl/HZHControls/Controls/Charts/FunnelChart/FunelChartAlignment.cs b/UsingControl/HZHControls/Controls/Charts/FunnelChart/FunelChartAlignment.cs
new file mode 100644
index 0000000..c13398e
--- /dev/null
+++ b/UsingControl/HZHControls/Controls/Charts/FunnelChart/FunelChartAlignment.cs
@@ -0,0 +1,41 @@
+// ***********************************************************************
+// Assembly : HZH_Controls
+// Created : 2019-09-26
+//
+// ***********************************************************************
+//
+// Copyright by Huang Zhenghui(黄正辉) All, QQ group:568015492 QQ:623128629 Email:623128629@qq.com
+//
+//
+// Blog: https://www.cnblogs.com/bfyx
+// GitHub:https://github.com/kwwwvagaa/NetWinformControl
+// gitee:https://gitee.com/kwwwvagaa/net_winform_custom_control.git
+//
+// If you use this code, please keep this note.
+// ***********************************************************************
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HZH_Controls.Controls
+{
+ ///
+ /// Enum FunelChartAlignment
+ ///
+ public enum FunelChartAlignment
+ {
+ ///
+ /// The left
+ ///
+ Left,
+ ///
+ /// The center
+ ///
+ Center,
+ ///
+ /// The right
+ ///
+ Right
+ }
+}
diff --git a/UsingControl/HZHControls/Controls/Charts/FunnelChart/FunelChartDirection.cs b/UsingControl/HZHControls/Controls/Charts/FunnelChart/FunelChartDirection.cs
new file mode 100644
index 0000000..be0843f
--- /dev/null
+++ b/UsingControl/HZHControls/Controls/Charts/FunnelChart/FunelChartDirection.cs
@@ -0,0 +1,37 @@
+// ***********************************************************************
+// Assembly : HZH_Controls
+// Created : 2019-09-26
+//
+// ***********************************************************************
+//
+// Copyright by Huang Zhenghui(黄正辉) All, QQ group:568015492 QQ:623128629 Email:623128629@qq.com
+//
+//
+// Blog: https://www.cnblogs.com/bfyx
+// GitHub:https://github.com/kwwwvagaa/NetWinformControl
+// gitee:https://gitee.com/kwwwvagaa/net_winform_custom_control.git
+//
+// If you use this code, please keep this note.
+// ***********************************************************************
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HZH_Controls.Controls
+{
+ ///
+ /// Enum FunelChartDirection
+ ///
+ public enum FunelChartDirection
+ {
+ ///
+ /// Up
+ ///
+ UP,
+ ///
+ /// Down
+ ///
+ Down
+ }
+}
diff --git a/UsingControl/HZHControls/Controls/Charts/FunnelChart/FunelChartItem.cs b/UsingControl/HZHControls/Controls/Charts/FunnelChart/FunelChartItem.cs
new file mode 100644
index 0000000..cb1cfb8
--- /dev/null
+++ b/UsingControl/HZHControls/Controls/Charts/FunnelChart/FunelChartItem.cs
@@ -0,0 +1,49 @@
+// ***********************************************************************
+// Assembly : HZH_Controls
+// Created : 2019-09-26
+//
+// ***********************************************************************
+//
+// Copyright by Huang Zhenghui(黄正辉) All, QQ group:568015492 QQ:623128629 Email:623128629@qq.com
+//
+//
+// Blog: https://www.cnblogs.com/bfyx
+// GitHub:https://github.com/kwwwvagaa/NetWinformControl
+// gitee:https://gitee.com/kwwwvagaa/net_winform_custom_control.git
+//
+// If you use this code, please keep this note.
+// ***********************************************************************
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HZH_Controls.Controls
+{
+ ///
+ /// Class FunelChartItem.
+ ///
+ public class FunelChartItem
+ {
+ ///
+ /// Gets or sets the text.
+ ///
+ /// The text.
+ public string Text { get; set; }
+ ///
+ /// Gets or sets the value.
+ ///
+ /// The value.
+ public float Value { get; set; }
+ ///
+ /// Gets or sets the color of the value.
+ ///
+ /// The color of the value.
+ public System.Drawing.Color? ValueColor { get; set; }
+ ///
+ /// Gets or sets the color of the text fore.
+ ///
+ /// The color of the text fore.
+ public System.Drawing.Color? TextForeColor { get; set; }
+ }
+}
diff --git a/UsingControl/HZHControls/Controls/Charts/FunnelChart/UCFunnelChart.cs b/UsingControl/HZHControls/Controls/Charts/FunnelChart/UCFunnelChart.cs
new file mode 100644
index 0000000..7cb6040
--- /dev/null
+++ b/UsingControl/HZHControls/Controls/Charts/FunnelChart/UCFunnelChart.cs
@@ -0,0 +1,506 @@
+// ***********************************************************************
+// Assembly : HZH_Controls
+// Created : 2019-09-26
+//
+// ***********************************************************************
+//
+// Copyright by Huang Zhenghui(黄正辉) All, QQ group:568015492 QQ:623128629 Email:623128629@qq.com
+//
+//
+// Blog: https://www.cnblogs.com/bfyx
+// GitHub:https://github.com/kwwwvagaa/NetWinformControl
+// gitee:https://gitee.com/kwwwvagaa/net_winform_custom_control.git
+//
+// If you use this code, please keep this note.
+// ***********************************************************************
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using System.Drawing;
+using System.Drawing.Drawing2D;
+using System.ComponentModel;
+
+namespace HZH_Controls.Controls
+{
+ ///
+ /// Class UCFunnelChart.
+ /// Implements the
+ ///
+ ///
+ public class UCFunnelChart : UserControl
+ {
+ ///
+ /// The title
+ ///
+ private string title;
+ ///
+ /// Gets or sets the title.
+ ///
+ /// The title.
+ [Browsable(true)]
+ [Category("自定义")]
+ [Description("获取或设置标题")]
+ public string Title
+ {
+ get { return title; }
+ set
+ {
+ title = value;
+ ResetTitleSize();
+ Invalidate();
+ }
+ }
+
+ ///
+ /// The title font
+ ///
+ private Font titleFont = new Font("微软雅黑", 12);
+ ///
+ /// Gets or sets the title font.
+ ///
+ /// The title font.
+ [Browsable(true)]
+ [Category("自定义")]
+ [Description("获取或设置标题字体")]
+ public Font TitleFont
+ {
+ get { return titleFont; }
+ set
+ {
+ titleFont = value;
+ ResetTitleSize();
+ Invalidate();
+ }
+ }
+
+ ///
+ /// The title fore color
+ ///
+ private Color titleForeColor = Color.Black;
+ ///
+ /// Gets or sets the color of the title fore.
+ ///
+ /// The color of the title fore.
+ [Browsable(true)]
+ [Category("自定义")]
+ [Description("获取或设置标题文字颜色")]
+ public Color TitleForeColor
+ {
+ get { return titleForeColor; }
+ set
+ {
+ titleForeColor = value;
+ Invalidate();
+ }
+ }
+ ///
+ /// The items
+ ///
+ private FunelChartItem[] items;
+ ///
+ /// Gets or sets the items.
+ ///
+ /// The items.
+ [Browsable(true)]
+ [Category("自定义")]
+ [Description("获取或设置项目")]
+ public FunelChartItem[] Items
+ {
+ get { return items; }
+ set
+ {
+ items = value;
+ Invalidate();
+ }
+ }
+
+ ///
+ /// The direction
+ ///
+ private FunelChartDirection direction = FunelChartDirection.UP;
+ ///
+ /// Gets or sets the direction.
+ ///
+ /// The direction.
+ [Browsable(true)]
+ [Category("自定义")]
+ [Description("获取或设置方向")]
+ public FunelChartDirection Direction
+ {
+ get { return direction; }
+ set
+ {
+ direction = value;
+ Invalidate();
+ }
+ }
+
+ ///
+ /// The alignment
+ ///
+ private FunelChartAlignment alignment = FunelChartAlignment.Center;
+ ///
+ /// Gets or sets the alignment.
+ ///
+ /// The alignment.
+ [Browsable(true)]
+ [Category("自定义")]
+ [Description("获取或设置对齐方式")]
+ public FunelChartAlignment Alignment
+ {
+ get { return alignment; }
+ set
+ {
+ alignment = value;
+ Invalidate();
+ }
+ }
+
+ ///
+ /// The item text align
+ ///
+ private FunelChartAlignment itemTextAlign = FunelChartAlignment.Center;
+ ///
+ /// Gets or sets the item text align.
+ ///
+ /// The item text align.
+ [Browsable(true)]
+ [Category("自定义")]
+ [Description("获取或设置文字位置")]
+ public FunelChartAlignment ItemTextAlign
+ {
+ get { return itemTextAlign; }
+ set
+ {
+ itemTextAlign = value;
+ ResetWorkingRect();
+ Invalidate();
+ }
+ }
+ ///
+ /// The show value
+ ///
+ private bool showValue = false;
+ ///
+ /// Gets or sets a value indicating whether [show value].
+ ///
+ /// true if [show value]; otherwise, false.
+ [Browsable(true)]
+ [Category("自定义")]
+ [Description("获取或设置是否显示值")]
+ public bool ShowValue
+ {
+ get { return showValue; }
+ set
+ {
+ showValue = value;
+ Invalidate();
+ }
+ }
+
+
+ ///
+ /// The value format
+ ///
+ private string valueFormat = "0.##";
+ ///
+ /// Gets or sets the value format.
+ ///
+ /// The value format.
+ [Browsable(true)]
+ [Category("自定义")]
+ [Description("获取或设置值格式化")]
+ public string ValueFormat
+ {
+ get { return valueFormat; }
+ set
+ {
+ valueFormat = value;
+ Invalidate();
+ }
+ }
+
+ ///
+ /// The m rect working
+ ///
+ RectangleF m_rectWorking;
+ ///
+ /// The m title size
+ ///
+ SizeF m_titleSize = SizeF.Empty;
+ ///
+ /// The int split width
+ ///
+ int intSplitWidth = 1;
+
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ public UCFunnelChart()
+ {
+ this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
+ this.SetStyle(ControlStyles.DoubleBuffer, true);
+ this.SetStyle(ControlStyles.ResizeRedraw, true);
+ this.SetStyle(ControlStyles.Selectable, true);
+ this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
+ this.SetStyle(ControlStyles.UserPaint, true);
+ this.FontChanged += UCFunnelChart_FontChanged;
+ Font = new Font("微软雅黑", 8);
+
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
+ this.SizeChanged += UCFunnelChart_SizeChanged;
+ Size = new System.Drawing.Size(150, 150);
+ items = new FunelChartItem[0];
+ if (ControlHelper.IsDesignMode())
+ {
+ items = new FunelChartItem[5];
+ for (int i = 0; i < 5; i++)
+ {
+ items[i] = new FunelChartItem()
+ {
+ Text = "item" + i,
+ Value = 10 * (i + 1)
+ };
+ }
+ }
+ }
+
+ ///
+ /// Handles the FontChanged event of the UCFunnelChart control.
+ ///
+ /// The source of the event.
+ /// The instance containing the event data.
+ void UCFunnelChart_FontChanged(object sender, EventArgs e)
+ {
+ ResetWorkingRect();
+ }
+
+ ///
+ /// Handles the SizeChanged event of the UCFunnelChart control.
+ ///
+ /// The source of the event.
+ /// The instance containing the event data.
+ void UCFunnelChart_SizeChanged(object sender, EventArgs e)
+ {
+ ResetWorkingRect();
+ }
+
+ ///
+ /// Resets the working rect.
+ ///
+ private void ResetWorkingRect()
+ {
+ if (itemTextAlign == FunelChartAlignment.Center)
+ {
+ m_rectWorking = new RectangleF(0, m_titleSize.Height == 0 ? 0 : (m_titleSize.Height + 10), this.Width, this.Height - (m_titleSize.Height == 0 ? 0 : (m_titleSize.Height + 10)));
+ }
+ else if (itemTextAlign == FunelChartAlignment.Left)
+ {
+ float fltMax = 0;
+ if (items != null && items.Length > 0)
+ {
+ using (Graphics g = this.CreateGraphics())
+ {
+ fltMax = items.Max(p => g.MeasureString(p.Text, Font).Width);
+ }
+ }
+ m_rectWorking = new RectangleF(fltMax, m_titleSize.Height == 0 ? 0 : (m_titleSize.Height + 10), this.Width - fltMax, this.Height - (m_titleSize.Height == 0 ? 0 : (m_titleSize.Height + 10)));
+ }
+ else
+ {
+ float fltMax = 0;
+ if (items != null && items.Length > 0)
+ {
+ using (Graphics g = this.CreateGraphics())
+ {
+ fltMax = items.Max(p => g.MeasureString(p.Text, Font).Width);
+ }
+ }
+ m_rectWorking = new RectangleF(0, m_titleSize.Height == 0 ? 0 : (m_titleSize.Height + 10), this.Width - fltMax, this.Height - (m_titleSize.Height == 0 ? 0 : (m_titleSize.Height + 10)));
+ }
+ }
+
+ ///
+ /// Resets the size of the title.
+ ///
+ private void ResetTitleSize()
+ {
+ if (string.IsNullOrEmpty(title))
+ {
+ m_titleSize = SizeF.Empty;
+ }
+ else
+ {
+ using (Graphics g = this.CreateGraphics())
+ {
+ m_titleSize = g.MeasureString(title, titleFont);
+ m_titleSize.Height += 20;
+ }
+ }
+ ResetWorkingRect();
+ }
+
+ ///
+ /// 引发 事件。
+ ///
+ /// 包含事件数据的 。
+ protected override void OnPaint(PaintEventArgs e)
+ {
+ base.OnPaint(e);
+ var g = e.Graphics;
+ g.SetGDIHigh();
+
+ if (!string.IsNullOrEmpty(title))
+ {
+ g.DrawString(title, titleFont, new SolidBrush(titleForeColor), new RectangleF(0, 0, this.Width, m_titleSize.Height), new StringFormat() { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center });
+ }
+
+ if (items == null || items.Length <= 0)
+ {
+ g.DrawString("没有数据", Font, new SolidBrush(Color.Black), this.m_rectWorking, new StringFormat() { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center });
+ return;
+ }
+
+ List lstItems;
+ if (direction == FunelChartDirection.UP)
+ {
+ lstItems = items.OrderBy(p => p.Value).ToList();
+ }
+ else
+ {
+ lstItems = items.OrderByDescending(p => p.Value).ToList();
+ }
+
+ List lstRects = new List();
+ List lstPaths = new List();
+ float maxValue = lstItems.Max(p => p.Value);
+ float dblSplitHeight = m_rectWorking.Height / lstItems.Count;
+ for (int i = 0; i < lstItems.Count; i++)
+ {
+ FunelChartItem item = lstItems[i];
+ if (item.ValueColor == null || item.ValueColor == Color.Empty || item.ValueColor == Color.Transparent)
+ item.ValueColor = ControlHelper.Colors[i];
+
+ switch (alignment)
+ {
+ case FunelChartAlignment.Left:
+ lstRects.Add(new RectangleF(m_rectWorking.Left, m_rectWorking.Top + dblSplitHeight * i, item.Value / maxValue * m_rectWorking.Width, dblSplitHeight));
+ break;
+ case FunelChartAlignment.Center:
+ lstRects.Add(new RectangleF(m_rectWorking.Left + (m_rectWorking.Width - (item.Value / maxValue * m_rectWorking.Width)) / 2, m_rectWorking.Top + dblSplitHeight * i, item.Value / maxValue * m_rectWorking.Width, dblSplitHeight));
+ break;
+ case FunelChartAlignment.Right:
+ lstRects.Add(new RectangleF(m_rectWorking.Right - (item.Value / maxValue * m_rectWorking.Width), m_rectWorking.Top + dblSplitHeight * i, item.Value / maxValue * m_rectWorking.Width, dblSplitHeight));
+ break;
+ }
+ }
+
+ for (int i = 0; i < lstRects.Count; i++)
+ {
+ var rect = lstRects[i];
+ GraphicsPath path = new GraphicsPath();
+ List lstPoints = new List();
+ if (direction == FunelChartDirection.UP)
+ {
+ switch (alignment)
+ {
+ case FunelChartAlignment.Left:
+ lstPoints.Add(new PointF(rect.Left, rect.Top));
+ if (i != 0)
+ {
+ lstPoints.Add(new PointF(lstRects[i - 1].Right, rect.Top));
+ }
+ break;
+ case FunelChartAlignment.Center:
+ if (i == 0)
+ {
+ lstPoints.Add(new PointF(rect.Left + rect.Width / 2, rect.Top));
+ }
+ else
+ {
+ lstPoints.Add(new PointF(lstRects[i - 1].Left, rect.Top));
+ lstPoints.Add(new PointF(lstRects[i - 1].Right, rect.Top));
+ }
+ break;
+ case FunelChartAlignment.Right:
+ if (i == 0)
+ {
+ lstPoints.Add(new PointF(rect.Right, rect.Top));
+ }
+ else
+ {
+ lstPoints.Add(new PointF(rect.Right - lstRects[i - 1].Width, rect.Top));
+ lstPoints.Add(new PointF(rect.Right, rect.Top));
+ }
+ break;
+ }
+ lstPoints.Add(new PointF(rect.Right, rect.Bottom - intSplitWidth));
+ lstPoints.Add(new PointF(rect.Left, rect.Bottom - intSplitWidth));
+ }
+ else
+ {
+ lstPoints.Add(new PointF(rect.Left, rect.Top + intSplitWidth));
+ lstPoints.Add(new PointF(rect.Right, rect.Top + intSplitWidth));
+ switch (alignment)
+ {
+ case FunelChartAlignment.Left:
+ if (i == lstRects.Count - 1)
+ {
+ lstPoints.Add(new PointF(rect.Left, rect.Bottom));
+ }
+ else
+ {
+ lstPoints.Add(new PointF(lstRects[i + 1].Right, rect.Bottom));
+ lstPoints.Add(new PointF(rect.Left, rect.Bottom));
+ }
+ break;
+ case FunelChartAlignment.Center:
+ if (i == lstRects.Count - 1)
+ {
+ lstPoints.Add(new PointF(rect.Left + rect.Width / 2, rect.Bottom));
+ }
+ else
+ {
+ lstPoints.Add(new PointF(lstRects[i + 1].Right, rect.Bottom));
+ lstPoints.Add(new PointF(lstRects[i + 1].Left, rect.Bottom));
+ }
+ break;
+ case FunelChartAlignment.Right:
+ if (i == lstRects.Count - 1)
+ {
+ lstPoints.Add(new PointF(rect.Right, rect.Bottom));
+ }
+ else
+ {
+ lstPoints.Add(new PointF(rect.Right, rect.Bottom));
+ lstPoints.Add(new PointF(lstRects[i + 1].Left, rect.Bottom));
+ }
+ break;
+ }
+ }
+ path.AddLines(lstPoints.ToArray());
+ path.CloseAllFigures();
+ // g.DrawPath(new Pen(new SolidBrush(lstItems[i].ValueColor.Value)), path);
+ g.FillPath(new SolidBrush(lstItems[i].ValueColor.Value), path);
+
+ //写字
+ if (itemTextAlign == FunelChartAlignment.Center)
+ {
+ g.DrawString(lstItems[i].Text + (ShowValue ? lstItems[i].Value.ToString("\n" + valueFormat) : ""), Font, new SolidBrush((lstItems[i].TextForeColor == null || lstItems[i].TextForeColor == Color.Empty || lstItems[i].TextForeColor == Color.Transparent) ? Color.White : lstItems[i].TextForeColor.Value), rect, new StringFormat() { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center });
+ }
+ else if (itemTextAlign == FunelChartAlignment.Left)
+ {
+ g.DrawString(lstItems[i].Text + (ShowValue ? lstItems[i].Value.ToString("\n" + valueFormat) : ""), Font, new SolidBrush((lstItems[i].TextForeColor == null || lstItems[i].TextForeColor == Color.Empty || lstItems[i].TextForeColor == Color.Transparent) ? lstItems[i].ValueColor.Value : lstItems[i].TextForeColor.Value), new RectangleF(0, rect.Top, rect.Left, rect.Height), new StringFormat() { Alignment = StringAlignment.Far, LineAlignment = StringAlignment.Center });
+ g.DrawLine(new Pen(new SolidBrush((lstItems[i].TextForeColor == null || lstItems[i].TextForeColor == Color.Empty || lstItems[i].TextForeColor == Color.Transparent) ? lstItems[i].ValueColor.Value : lstItems[i].TextForeColor.Value)), rect.Left, rect.Top + rect.Height / 2, rect.Left + rect.Width / 2, rect.Top + rect.Height / 2);
+ }
+ else
+ {
+ g.DrawString(lstItems[i].Text + (ShowValue ? lstItems[i].Value.ToString("\n" + valueFormat) : ""), Font, new SolidBrush((lstItems[i].TextForeColor == null || lstItems[i].TextForeColor == Color.Empty || lstItems[i].TextForeColor == Color.Transparent) ? lstItems[i].ValueColor.Value : lstItems[i].TextForeColor.Value), new RectangleF(rect.Right, rect.Top, this.Width - rect.Right, rect.Height), new StringFormat() { Alignment = StringAlignment.Near, LineAlignment = StringAlignment.Center });
+ g.DrawLine(new Pen(new SolidBrush((lstItems[i].TextForeColor == null || lstItems[i].TextForeColor == Color.Empty || lstItems[i].TextForeColor == Color.Transparent) ? lstItems[i].ValueColor.Value : lstItems[i].TextForeColor.Value)), rect.Left + rect.Width / 2, rect.Top + rect.Height / 2, rect.Right, rect.Top + rect.Height / 2);
+ }
+ }
+ }
+ }
+}
diff --git a/UsingControl/HZHControls/Controls/Charts/MarkText.cs b/UsingControl/HZHControls/Controls/Charts/MarkText.cs
new file mode 100644
index 0000000..52d6655
--- /dev/null
+++ b/UsingControl/HZHControls/Controls/Charts/MarkText.cs
@@ -0,0 +1,113 @@
+// ***********************************************************************
+// Assembly : HZH_Controls
+// Created : 2019-09-23
+//
+// ***********************************************************************
+//
+// Copyright by Huang Zhenghui() All, QQ group:568015492 QQ:623128629 Email:623128629@qq.com
+//
+//
+// Blog: https://www.cnblogs.com/bfyx
+// GitHubhttps://github.com/kwwwvagaa/NetWinformControl
+// giteehttps://gitee.com/kwwwvagaa/net_winform_custom_control.git
+//
+// If you use this code, please keep this note.
+// ***********************************************************************
+using System.Drawing;
+
+namespace HZH_Controls.Controls
+{
+ ///
+ /// Class MarkText.
+ ///
+ public class MarkText
+ {
+ ///
+ /// The mark text offect
+ ///
+ public static readonly int MarkTextOffect = 5;
+
+ ///
+ /// Gets or sets the curve key.
+ ///
+ /// The curve key.
+ public string CurveKey
+ {
+ get;
+ set;
+ }
+
+ ///
+ /// Gets or sets the index.
+ ///
+ /// The index.
+ public int Index
+ {
+ get;
+ set;
+ }
+
+ ///
+ /// Gets or sets the mark text.
+ ///
+ /// The mark text.
+ public string Text
+ {
+ get;
+ set;
+ }
+
+ private Color? textColor = null;
+
+ public Color? TextColor
+ {
+ get { return textColor; }
+ set { textColor = value; }
+ }
+
+
+ ///
+ /// The position style
+ ///
+ private MarkTextPositionStyle positionStyle = MarkTextPositionStyle.Auto;
+
+ ///
+ /// Gets or sets the position style.
+ ///
+ /// The position style.
+ public MarkTextPositionStyle PositionStyle
+ {
+ get { return positionStyle; }
+ set { positionStyle = value; }
+ }
+
+ ///
+ /// Calculates the index of the direction from data.
+ ///
+ /// The data.
+ /// The index.
+ /// MarkTextPositionStyle.
+ public static MarkTextPositionStyle CalculateDirectionFromDataIndex(float[] data, int Index)
+ {
+ float num = (Index == 0) ? data[Index] : data[Index - 1];
+ float num2 = (Index == data.Length - 1) ? data[Index] : data[Index + 1];
+ if (num < data[Index] && data[Index] < num2)
+ {
+ return MarkTextPositionStyle.Left;
+ }
+ if (num > data[Index] && data[Index] > num2)
+ {
+ return MarkTextPositionStyle.Right;
+ }
+ if (num <= data[Index] && data[Index] >= num2)
+ {
+ return MarkTextPositionStyle.Up;
+ }
+ if (num >= data[Index] && data[Index] <= num2)
+ {
+ return MarkTextPositionStyle.Down;
+ }
+ return MarkTextPositionStyle.Up;
+ }
+ }
+}
diff --git a/UsingControl/HZHControls/Controls/Charts/MarkTextPositionStyle.cs b/UsingControl/HZHControls/Controls/Charts/MarkTextPositionStyle.cs
new file mode 100644
index 0000000..e191618
--- /dev/null
+++ b/UsingControl/HZHControls/Controls/Charts/MarkTextPositionStyle.cs
@@ -0,0 +1,11 @@
+namespace HZH_Controls.Controls
+{
+ public enum MarkTextPositionStyle
+ {
+ Up = 1,
+ Right = 2,
+ Down = 4,
+ Left = 8,
+ Auto = 16
+ }
+}
diff --git a/UsingControl/HZHControls/Controls/Charts/RadarChart/RadarLine.cs b/UsingControl/HZHControls/Controls/Charts/RadarChart/RadarLine.cs
new file mode 100644
index 0000000..e88d850
--- /dev/null
+++ b/UsingControl/HZHControls/Controls/Charts/RadarChart/RadarLine.cs
@@ -0,0 +1,55 @@
+// ***********************************************************************
+// Assembly : HZH_Controls
+// Created : 2019-09-25
+//
+// ***********************************************************************
+//
+// Copyright by Huang Zhenghui(黄正辉) All, QQ group:568015492 QQ:623128629 Email:623128629@qq.com
+//
+//
+// Blog: https://www.cnblogs.com/bfyx
+// GitHub:https://github.com/kwwwvagaa/NetWinformControl
+// gitee:https://gitee.com/kwwwvagaa/net_winform_custom_control.git
+//
+// If you use this code, please keep this note.
+// ***********************************************************************
+using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+
+namespace HZH_Controls.Controls
+{
+ ///
+ /// Class RadarLine.
+ ///
+ public class RadarLine
+ {
+ ///
+ /// Gets or sets the name.
+ ///
+ /// The name.
+ public string Name { get; set; }
+ ///
+ /// Gets or sets the values.
+ ///
+ /// The values.
+ public double[] Values { get; set; }
+ ///
+ /// Gets or sets the color of the line.
+ ///
+ /// The color of the line.
+ public Color? LineColor { get; set; }
+ ///
+ /// Gets or sets a value indicating whether [show value text].
+ ///
+ /// true if [show value text]; otherwise, false.
+ public bool ShowValueText { get; set; }
+ ///
+ /// Gets or sets the color of the fill.
+ ///
+ /// The color of the fill.
+ public Color? FillColor { get; set; }
+ }
+}
diff --git a/UsingControl/HZHControls/Controls/Charts/RadarChart/RadarPosition.cs b/UsingControl/HZHControls/Controls/Charts/RadarChart/RadarPosition.cs
new file mode 100644
index 0000000..622d65e
--- /dev/null
+++ b/UsingControl/HZHControls/Controls/Charts/RadarChart/RadarPosition.cs
@@ -0,0 +1,13 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HZH_Controls.Controls
+{
+ public class RadarPosition
+ {
+ public string Text { get; set; }
+ public double MaxValue { get; set; }
+ }
+}
diff --git a/UsingControl/HZHControls/Controls/Charts/RadarChart/UCRadarChart.cs b/UsingControl/HZHControls/Controls/Charts/RadarChart/UCRadarChart.cs
new file mode 100644
index 0000000..c36a232
--- /dev/null
+++ b/UsingControl/HZHControls/Controls/Charts/RadarChart/UCRadarChart.cs
@@ -0,0 +1,663 @@
+// ***********************************************************************
+// Assembly : HZH_Controls
+// Created : 2019-09-25
+//
+// ***********************************************************************
+//
+// Copyright by Huang Zhenghui(黄正辉) All, QQ group:568015492 QQ:623128629 Email:623128629@qq.com
+//
+//
+// Blog: https://www.cnblogs.com/bfyx
+// GitHub:https://github.com/kwwwvagaa/NetWinformControl
+// gitee:https://gitee.com/kwwwvagaa/net_winform_custom_control.git
+//
+// If you use this code, please keep this note.
+// ***********************************************************************
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using System.Drawing;
+using System.Drawing.Drawing2D;
+using System.ComponentModel;
+
+namespace HZH_Controls.Controls
+{
+ ///
+ /// Class UCRadarChart.
+ /// Implements the
+ ///
+ ///
+ public class UCRadarChart : UserControl
+ {
+ ///
+ /// The split count
+ ///
+ private int splitCount = 5;
+ ///
+ /// Gets or sets the split count.
+ ///
+ /// The split count.
+ [Browsable(true)]
+ [Category("自定义")]
+ [Description("获取或设置分隔份数")]
+ public int SplitCount
+ {
+ get { return splitCount; }
+ set
+ {
+ splitCount = value;
+ Invalidate();
+ }
+ }
+ [Browsable(true)]
+ [Category("自定义")]
+ [Description("获取或设置是否使用圆代替连线进行分隔")]
+ public bool UseRoundSplit { get; set; }
+
+ ///
+ /// The split odd color
+ ///
+ private Color splitOddColor = Color.White;
+ ///
+ /// 分隔奇数栏背景色
+ ///
+ /// The color of the split odd.
+ [Browsable(true)]
+ [Category("自定义")]
+ [Description("获取或设置分隔奇数栏背景色")]
+ public Color SplitOddColor
+ {
+ get { return splitOddColor; }
+ set
+ {
+ splitOddColor = value;
+ Invalidate();
+ }
+ }
+ ///
+ /// The split even color
+ ///
+ private Color splitEvenColor = Color.FromArgb(232, 232, 232);
+ ///
+ /// 分隔偶数栏背景色
+ ///
+ /// The color of the split even.
+ [Browsable(true)]
+ [Category("自定义")]
+ [Description("获取或设置分隔偶数栏背景色")]
+ public Color SplitEvenColor
+ {
+ get { return splitEvenColor; }
+ set
+ {
+ splitEvenColor = value;
+ Invalidate();
+ }
+ }
+
+ ///
+ /// The line color
+ ///
+ private Color lineColor = Color.FromArgb(153, 153, 153);
+ ///
+ /// Gets or sets the color of the line.
+ ///
+ /// The color of the line.
+ [Browsable(true)]
+ [Category("自定义")]
+ [Description("获取或设置线条色")]
+ public Color LineColor
+ {
+ get { return lineColor; }
+ set
+ {
+ lineColor = value;
+ Invalidate();
+ }
+ }
+
+ ///
+ /// The radar positions
+ ///
+ private RadarPosition[] radarPositions;
+ ///
+ /// 节点列表,至少需要3个
+ ///
+ /// The radar positions.
+ [Browsable(true)]
+ [Category("自定义")]
+ [Description("获取或设置节点,至少需要3个")]
+ public RadarPosition[] RadarPositions
+ {
+ get { return radarPositions; }
+ set
+ {
+ radarPositions = value;
+ Invalidate();
+ }
+ }
+
+ ///
+ /// The title
+ ///
+ private string title;
+ ///
+ /// 标题
+ ///
+ /// The title.
+ [Browsable(true)]
+ [Category("自定义")]
+ [Description("获取或设置标题")]
+ public string Title
+ {
+ get { return title; }
+ set
+ {
+ title = value;
+ ResetTitleSize();
+ Invalidate();
+ }
+ }
+
+ ///
+ /// The title font
+ ///
+ private Font titleFont = new Font("微软雅黑", 12);
+ ///
+ /// Gets or sets the title font.
+ ///
+ /// The title font.
+ [Browsable(true)]
+ [Category("自定义")]
+ [Description("获取或设置标题字体")]
+ public Font TitleFont
+ {
+ get { return titleFont; }
+ set
+ {
+ titleFont = value;
+ ResetTitleSize();
+ Invalidate();
+ }
+ }
+
+ ///
+ /// The title color
+ ///
+ private Color titleColor = Color.Black;
+ ///
+ /// Gets or sets the color of the title.
+ ///
+ /// The color of the title.
+ [Browsable(true)]
+ [Category("自定义")]
+ [Description("获取或设置标题文本颜色")]
+ public Color TitleColor
+ {
+ get { return titleColor; }
+ set
+ {
+ titleColor = value;
+ Invalidate();
+ }
+ }
+
+ ///
+ /// The lines
+ ///
+ private RadarLine[] lines;
+ ///
+ /// Gets or sets the lines.
+ ///
+ /// The lines.
+ [Browsable(true)]
+ [Category("自定义")]
+ [Description("获取或设置值线条,Values长度必须与RadarPositions长度一致,否则无法显示")]
+ public RadarLine[] Lines
+ {
+ get { return lines; }
+ set
+ {
+ lines = value;
+ Invalidate();
+ }
+ }
+
+
+
+ ///
+ /// The title size
+ ///
+ SizeF titleSize = SizeF.Empty;
+ ///
+ /// The m rect working
+ ///
+ private RectangleF m_rectWorking = Rectangle.Empty;
+ ///
+ /// The line value type size
+ ///
+ SizeF lineValueTypeSize = SizeF.Empty;
+ ///
+ /// The int line value COM count
+ ///
+ int intLineValueComCount = 0;
+ ///
+ /// The int line value row count
+ ///
+ int intLineValueRowCount = 0;
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ public UCRadarChart()
+ {
+ this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
+ this.SetStyle(ControlStyles.DoubleBuffer, true);
+ this.SetStyle(ControlStyles.ResizeRedraw, true);
+ this.SetStyle(ControlStyles.Selectable, true);
+ this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
+ this.SetStyle(ControlStyles.UserPaint, true);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
+ this.SizeChanged += UCRadarChart_SizeChanged;
+ Size = new System.Drawing.Size(150, 150);
+ radarPositions = new RadarPosition[0];
+ if (ControlHelper.IsDesignMode())
+ {
+ radarPositions = new RadarPosition[6];
+ for (int i = 0; i < 6; i++)
+ {
+ radarPositions[i] = new RadarPosition
+ {
+ Text = "Item" + (i + 1),
+ MaxValue = 100
+ };
+ }
+ }
+
+ lines = new RadarLine[0];
+ if (ControlHelper.IsDesignMode())
+ {
+ Random r = new Random();
+ lines = new RadarLine[2];
+ for (int i = 0; i < 2; i++)
+ {
+ lines[i] = new RadarLine()
+ {
+ Name = "line" + i
+ };
+ lines[i].Values = new double[radarPositions.Length];
+ for (int j = 0; j < radarPositions.Length; j++)
+ {
+ lines[i].Values[j] = r.Next(20, (int)radarPositions[j].MaxValue);
+ }
+ }
+ }
+ }
+
+ ///
+ /// Handles the SizeChanged event of the UCRadarChart control.
+ ///
+ /// The source of the event.
+ /// The instance containing the event data.
+ void UCRadarChart_SizeChanged(object sender, EventArgs e)
+ {
+ ResetWorkingRect();
+ }
+
+ ///
+ /// Resets the working rect.
+ ///
+ private void ResetWorkingRect()
+ {
+ if (lines != null && lines.Length > 0)
+ {
+ using (Graphics g = this.CreateGraphics())
+ {
+ foreach (var item in lines)
+ {
+ var s = g.MeasureString(item.Name, Font);
+ if (s.Width > lineValueTypeSize.Width)
+ lineValueTypeSize = s;
+ }
+ }
+ }
+ var lineTypePanelHeight = 0f;
+ if (lineValueTypeSize != SizeF.Empty)
+ {
+ intLineValueComCount = (int)(this.Width / (lineValueTypeSize.Width + 25));
+
+ intLineValueRowCount = lines.Length / intLineValueComCount;
+ if (lines.Length % intLineValueComCount != 0)
+ {
+ intLineValueRowCount++;
+ }
+ lineTypePanelHeight = (lineValueTypeSize.Height + 10) * intLineValueRowCount;
+ }
+ var min = Math.Min(this.Width, this.Height - titleSize.Height - lineTypePanelHeight);
+ var rectWorking = new RectangleF((this.Width - min) / 2 + 10, titleSize.Height + lineTypePanelHeight + 10, min - 10, min - 10);
+ //处理文字
+ float fltSplitAngle = 360F / radarPositions.Length;
+ float fltRadiusWidth = rectWorking.Width / 2;
+ float minX = rectWorking.Left;
+ float maxX = rectWorking.Right;
+ float minY = rectWorking.Top;
+ float maxY = rectWorking.Bottom;
+ using (Graphics g = this.CreateGraphics())
+ {
+ PointF centrePoint = new PointF(rectWorking.Left + rectWorking.Width / 2, rectWorking.Top + rectWorking.Height / 2);
+ for (int i = 0; i < radarPositions.Length; i++)
+ {
+ float fltAngle = 270 + fltSplitAngle * i;
+ fltAngle = fltAngle % 360;
+ PointF _point = GetPointByAngle(centrePoint, fltAngle, fltRadiusWidth);
+ var _txtSize = g.MeasureString(radarPositions[i].Text, Font);
+ if (_point.X < centrePoint.X)//左
+ {
+ if (_point.X - _txtSize.Width < minX)
+ {
+ minX = rectWorking.Left + _txtSize.Width;
+ }
+ }
+ else//右
+ {
+ if (_point.X + _txtSize.Width > maxX)
+ {
+ maxX = rectWorking.Right - _txtSize.Width;
+ }
+ }
+ if (_point.Y < centrePoint.Y)//上
+ {
+ if (_point.Y - _txtSize.Height < minY)
+ {
+ minY = rectWorking.Top + _txtSize.Height;
+ }
+ }
+ else//下
+ {
+ if (_point.Y + _txtSize.Height > maxY)
+ {
+ maxY = rectWorking.Bottom - _txtSize.Height;
+ }
+ }
+ }
+ }
+
+ min = Math.Min(maxX - minX, maxY - minY);
+ m_rectWorking = new RectangleF(minX, minY, min, min);
+ }
+
+ ///
+ /// 引发 事件。
+ ///
+ /// 包含事件数据的 。
+ protected override void OnPaint(PaintEventArgs e)
+ {
+ base.OnPaint(e);
+ var g = e.Graphics;
+ g.SetGDIHigh();
+
+ if (!string.IsNullOrEmpty(title))
+ {
+ g.DrawString(title, titleFont, new SolidBrush(titleColor), new RectangleF(m_rectWorking.Left + (m_rectWorking.Width - titleSize.Width) / 2, m_rectWorking.Top - titleSize.Height - 10 - (intLineValueRowCount * (10 + lineValueTypeSize.Height)), titleSize.Width, titleSize.Height));
+ }
+
+ if (radarPositions.Length <= 2)
+ {
+ g.DrawString("至少需要3个顶点", Font, new SolidBrush(Color.Black), m_rectWorking, new StringFormat() { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center });
+ return;
+ }
+
+ var y = m_rectWorking.Top - 20 - (intLineValueRowCount * (10 + lineValueTypeSize.Height));
+
+ for (int i = 0; i < intLineValueRowCount; i++)
+ {
+ var x = 0f;
+ int intCount = intLineValueComCount;
+ if (i == intLineValueRowCount - 1)
+ {
+ intCount = lines.Length % intLineValueComCount;
+
+ }
+ x = m_rectWorking.Left + (m_rectWorking.Width - intCount * (lineValueTypeSize.Width + 25)) / 2;
+
+ for (int j = 0; j < intCount; j++)
+ {
+ g.FillRectangle(new SolidBrush(lines[i * intLineValueComCount + j].LineColor.Value), new RectangleF(x + (lineValueTypeSize.Width + 25) * j, y + lineValueTypeSize.Height * i, 15, lineValueTypeSize.Height));
+ g.DrawString(lines[i * intLineValueComCount + j].Name, Font, new SolidBrush(lines[i * intLineValueComCount + j].LineColor.Value), new PointF(x + (lineValueTypeSize.Width + 25) * j + 20, y + lineValueTypeSize.Height * i));
+ }
+ }
+
+ float fltSplitAngle = 360F / radarPositions.Length;
+ float fltRadiusWidth = m_rectWorking.Width / 2;
+ float fltSplitRadiusWidth = fltRadiusWidth / splitCount;
+ PointF centrePoint = new PointF(m_rectWorking.Left + m_rectWorking.Width / 2, m_rectWorking.Top + m_rectWorking.Height / 2);
+
+ List> lstRingPoints = new List>(splitCount);
+ //分割点
+ for (int i = 0; i < radarPositions.Length; i++)
+ {
+ float fltAngle = 270 + fltSplitAngle * i;
+ fltAngle = fltAngle % 360;
+ for (int j = 0; j < splitCount; j++)
+ {
+ if (i == 0)
+ {
+ lstRingPoints.Add(new List());
+ }
+ PointF _point = GetPointByAngle(centrePoint, fltAngle, fltSplitRadiusWidth * (splitCount - j));
+ lstRingPoints[j].Add(_point);
+ }
+ }
+
+ if (UseRoundSplit)
+ {
+ for (int i = 0; i < splitCount; i++)
+ {
+ RectangleF rect = new RectangleF(centrePoint.X - fltSplitRadiusWidth * (splitCount - i), centrePoint.Y - fltSplitRadiusWidth * (splitCount - i), fltSplitRadiusWidth * (splitCount - i) * 2, fltSplitRadiusWidth * (splitCount - i) * 2);
+ if (i % 2 == 0)
+ {
+ g.FillEllipse(new SolidBrush(splitOddColor), rect);
+ }
+ else
+ {
+ g.FillEllipse(new SolidBrush(splitEvenColor), rect);
+ }
+
+ g.DrawEllipse(new Pen(new SolidBrush(lineColor)), rect);
+ }
+ }
+ else
+ {
+ //间隔颜色
+ for (int i = 0; i < lstRingPoints.Count; i++)
+ {
+ var ring = lstRingPoints[i];
+ GraphicsPath path = new GraphicsPath();
+ path.AddLines(ring.ToArray());
+ if ((lstRingPoints.Count - i) % 2 == 0)
+ {
+ g.FillPath(new SolidBrush(splitEvenColor), path);
+ }
+ else
+ {
+ g.FillPath(new SolidBrush(splitOddColor), path);
+ }
+ }
+ //画环
+ foreach (var ring in lstRingPoints)
+ {
+ ring.Add(ring[0]);
+ g.DrawLines(new Pen(new SolidBrush(lineColor)), ring.ToArray());
+ }
+ }
+ //分割线
+ foreach (var item in lstRingPoints[0])
+ {
+ g.DrawLine(new Pen(new SolidBrush(lineColor)), centrePoint, item);
+ }
+
+ //值
+ for (int i = 0; i < lines.Length; i++)
+ {
+ var line = lines[i];
+ if (line.Values.Length != radarPositions.Length)//如果数据长度和节点长度不一致则不绘制
+ continue;
+ if (line.LineColor == null || line.LineColor == Color.Empty || line.LineColor == Color.Transparent)
+ line.LineColor = ControlHelper.Colors[i + 13];
+ List ps = new List();
+ for (int j = 0; j < radarPositions.Length; j++)
+ {
+ float fltAngle = 270 + fltSplitAngle * j;
+ fltAngle = fltAngle % 360;
+ PointF _point = GetPointByAngle(centrePoint, fltAngle, fltRadiusWidth * (float)(line.Values[j] / radarPositions[i].MaxValue));
+ ps.Add(_point);
+ }
+ ps.Add(ps[0]);
+ if (line.FillColor != null && line.FillColor != Color.Empty && line.FillColor != Color.Transparent)
+ {
+ GraphicsPath path = new GraphicsPath();
+ path.AddLines(ps.ToArray());
+ g.FillPath(new SolidBrush(line.FillColor.Value), path);
+ }
+ g.DrawLines(new Pen(new SolidBrush(line.LineColor.Value), 2), ps.ToArray());
+
+ for (int j = 0; j < radarPositions.Length; j++)
+ {
+ var item = ps[j];
+ g.FillEllipse(new SolidBrush(Color.White), new RectangleF(item.X - 3, item.Y - 3, 6, 6));
+ g.DrawEllipse(new Pen(new SolidBrush(line.LineColor.Value)), new RectangleF(item.X - 3, item.Y - 3, 6, 6));
+ if (line.ShowValueText)
+ {
+ var valueSize = g.MeasureString(line.Values[j].ToString("0.##"), Font);
+ g.DrawString(line.Values[j].ToString("0.##"), Font, new SolidBrush(line.LineColor.Value), new PointF(item.X - valueSize.Width / 2, item.Y - valueSize.Height - 5));
+ }
+ }
+ }
+
+ //文本
+
+ for (int i = 0; i < radarPositions.Length; i++)
+ {
+ PointF point = lstRingPoints[0][i];
+ var txtSize = g.MeasureString(radarPositions[i].Text, Font);
+
+ if (point.X == centrePoint.X)
+ {
+ if (point.Y > centrePoint.Y)
+ {
+ g.DrawString(radarPositions[i].Text, Font, new SolidBrush(ForeColor), new PointF(point.X - txtSize.Width / 2, point.Y + 10));
+ }
+ else
+ {
+ g.DrawString(radarPositions[i].Text, Font, new SolidBrush(ForeColor), new PointF(point.X - txtSize.Width / 2, point.Y - 10 - txtSize.Height));
+ }
+ }
+ else if (point.Y == centrePoint.Y)
+ {
+ if (point.X < centrePoint.X)
+ g.DrawString(radarPositions[i].Text, Font, new SolidBrush(ForeColor), new PointF(point.X - 10 - txtSize.Width, point.Y - txtSize.Height / 2));
+ else
+ g.DrawString(radarPositions[i].Text, Font, new SolidBrush(ForeColor), new PointF(point.X + 10, point.Y - txtSize.Height / 2));
+ }
+ else if (point.X < centrePoint.X)//左
+ {
+ if (point.Y < centrePoint.Y)//左上
+ {
+ g.DrawString(radarPositions[i].Text, Font, new SolidBrush(ForeColor), new PointF(point.X - 10 - txtSize.Width, point.Y - 10 + txtSize.Height / 2));
+ }
+ else//左下
+ {
+ g.DrawString(radarPositions[i].Text, Font, new SolidBrush(ForeColor), new PointF(point.X - 10 - txtSize.Width, point.Y + 10 - txtSize.Height / 2));
+ }
+ }
+ else
+ {
+ if (point.Y < centrePoint.Y)//右上
+ {
+ g.DrawString(radarPositions[i].Text, Font, new SolidBrush(ForeColor), new PointF(point.X + 10, point.Y - 10 + txtSize.Height / 2));
+ }
+ else//右下
+ {
+ g.DrawString(radarPositions[i].Text, Font, new SolidBrush(ForeColor), new PointF(point.X + 10, point.Y + 10 - txtSize.Height / 2));
+ }
+ }
+ }
+
+ }
+
+ #region 根据中心点、角度、半径计算圆边坐标点 English:Calculating the coordinate points of circular edge according to the center point, angle and radius
+ ///
+ /// 功能描述:根据中心点、角度、半径计算圆边坐标点 English:Calculating the coordinate points of circular edge according to the center point, angle and radius
+ /// 作 者:HZH
+ /// 创建日期:2019-09-25 09:46:32
+ /// 任务编号:POS
+ ///
+ /// centrePoint
+ /// fltAngle
+ /// fltRadiusWidth
+ /// 返回值
+ private PointF GetPointByAngle(PointF centrePoint, float fltAngle, float fltRadiusWidth)
+ {
+ PointF p = centrePoint;
+ if (fltAngle == 0)
+ {
+ p.X += fltRadiusWidth;
+ }
+ else if (fltAngle == 90)
+ {
+ p.Y += fltRadiusWidth;
+ }
+ else if (fltAngle == 180)
+ {
+ p.X -= fltRadiusWidth;
+ }
+ else if (fltAngle == 270)
+ {
+ p.Y -= fltRadiusWidth;
+ }
+ else if (fltAngle > 0 && fltAngle < 90)
+ {
+ p.Y += (float)Math.Sin(Math.PI * (fltAngle / 180.00F)) * fltRadiusWidth;
+ p.X += (float)Math.Cos(Math.PI * (fltAngle / 180.00F)) * fltRadiusWidth;
+ }
+ else if (fltAngle > 90 && fltAngle < 180)
+ {
+ p.Y += (float)Math.Sin(Math.PI * ((180 - fltAngle) / 180.00F)) * fltRadiusWidth;
+ p.X -= (float)Math.Cos(Math.PI * ((180 - fltAngle) / 180.00F)) * fltRadiusWidth;
+ }
+ else if (fltAngle > 180 && fltAngle < 270)
+ {
+ p.Y -= (float)Math.Sin(Math.PI * ((fltAngle - 180) / 180.00F)) * fltRadiusWidth;
+ p.X -= (float)Math.Cos(Math.PI * ((fltAngle - 180) / 180.00F)) * fltRadiusWidth;
+ }
+ else if (fltAngle > 270 && fltAngle < 360)
+ {
+ p.Y -= (float)Math.Sin(Math.PI * ((360 - fltAngle) / 180.00F)) * fltRadiusWidth;
+ p.X += (float)Math.Cos(Math.PI * ((360 - fltAngle) / 180.00F)) * fltRadiusWidth;
+ }
+ return p;
+ }
+ #endregion
+
+ ///
+ /// Resets the size of the title.
+ ///
+ private void ResetTitleSize()
+ {
+ if (!string.IsNullOrEmpty(title))
+ {
+ using (Graphics g = this.CreateGraphics())
+ {
+ titleSize = g.MeasureString(title, titleFont);
+ }
+ }
+ else
+ {
+ titleSize = SizeF.Empty;
+ }
+ titleSize.Height += 20;
+ ResetWorkingRect();
+ }
+ }
+}
diff --git a/UsingControl/HZHControls/Controls/Charts/ZoomType.cs b/UsingControl/HZHControls/Controls/Charts/ZoomType.cs
new file mode 100644
index 0000000..d5628f6
--- /dev/null
+++ b/UsingControl/HZHControls/Controls/Charts/ZoomType.cs
@@ -0,0 +1,36 @@
+// ***********************************************************************
+// Assembly : HZH_Controls
+// Created : 2019-09-17
+//
+// ***********************************************************************
+//
+// Copyright by Huang Zhenghui() All, QQ group:568015492 QQ:623128629 Email:623128629@qq.com
+//
+//
+// Blog: https://www.cnblogs.com/bfyx
+// GitHubhttps://github.com/kwwwvagaa/NetWinformControl
+// giteehttps://gitee.com/kwwwvagaa/net_winform_custom_control.git
+//
+// If you use this code, please keep this note.
+// ***********************************************************************
+namespace HZH_Controls.Controls
+{
+ ///
+ /// Enum ZoomType
+ ///
+ public enum ZoomType
+ {
+ ///
+ /// The none
+ ///
+ None,
+ ///
+ /// The enlarge
+ ///
+ Enlarge,
+ ///
+ /// The reduce
+ ///
+ Reduce
+ }
+}
diff --git a/UsingControl/HZHControls/Controls/Checkbox/UCCheckBox.Designer.cs b/UsingControl/HZHControls/Controls/Checkbox/UCCheckBox.Designer.cs
new file mode 100644
index 0000000..f0b93b1
--- /dev/null
+++ b/UsingControl/HZHControls/Controls/Checkbox/UCCheckBox.Designer.cs
@@ -0,0 +1,105 @@
+// ***********************************************************************
+// Assembly : HZH_Controls
+// Created : 08-08-2019
+//
+// ***********************************************************************
+//
+// Copyright by Huang Zhenghui(黄正辉) All, QQ group:568015492 QQ:623128629 Email:623128629@qq.com
+//
+//
+// Blog: https://www.cnblogs.com/bfyx
+// GitHub:https://github.com/kwwwvagaa/NetWinformControl
+// gitee:https://gitee.com/kwwwvagaa/net_winform_custom_control.git
+//
+// If you use this code, please keep this note.
+// ***********************************************************************
+namespace HZH_Controls.Controls
+{
+ ///
+ /// Class UCCheckBox.
+ /// Implements the
+ ///
+ ///
+ partial class UCCheckBox
+ {
+ ///
+ /// 必需的设计器变量。
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// 清理所有正在使用的资源。
+ ///
+ /// 如果应释放托管资源,为 true;否则为 false。
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region 组件设计器生成的代码
+
+ ///
+ /// 设计器支持所需的方法 - 不要
+ /// 使用代码编辑器修改此方法的内容。
+ ///
+ private void InitializeComponent()
+ {
+ this.panel1 = new System.Windows.Forms.Panel();
+ this.label1 = new System.Windows.Forms.Label();
+ this.SuspendLayout();
+ //
+ // panel1
+ //
+ this.panel1.BackgroundImage = global::HZH_Controls.Properties.Resources.checkbox0;
+ this.panel1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom;
+ this.panel1.Dock = System.Windows.Forms.DockStyle.Left;
+ this.panel1.Location = new System.Drawing.Point(1, 1);
+ this.panel1.Name = "panel1";
+ this.panel1.Size = new System.Drawing.Size(18, 28);
+ this.panel1.TabIndex = 0;
+ this.panel1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.CheckBox_MouseDown);
+ //
+ // label1
+ //
+ this.label1.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.label1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.label1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(62)))), ((int)(((byte)(62)))), ((int)(((byte)(62)))));
+ this.label1.Location = new System.Drawing.Point(19, 1);
+ this.label1.Name = "label1";
+ this.label1.Padding = new System.Windows.Forms.Padding(5, 0, 0, 0);
+ this.label1.Size = new System.Drawing.Size(213, 28);
+ this.label1.TabIndex = 1;
+ this.label1.Text = "复选框";
+ this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ this.label1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.CheckBox_MouseDown);
+ //
+ // UCCheckBox
+ //
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
+ this.BackColor = System.Drawing.Color.Transparent;
+ this.Controls.Add(this.label1);
+ this.Controls.Add(this.panel1);
+ this.Name = "UCCheckBox";
+ this.Padding = new System.Windows.Forms.Padding(1);
+ this.Size = new System.Drawing.Size(233, 30);
+ this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.CheckBox_MouseDown);
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ ///
+ /// The panel1
+ ///
+ private System.Windows.Forms.Panel panel1;
+ ///
+ /// The label1
+ ///
+ private System.Windows.Forms.Label label1;
+ }
+}
diff --git a/UsingControl/HZHControls/Controls/Checkbox/UCCheckBox.cs b/UsingControl/HZHControls/Controls/Checkbox/UCCheckBox.cs
new file mode 100644
index 0000000..58e1475
--- /dev/null
+++ b/UsingControl/HZHControls/Controls/Checkbox/UCCheckBox.cs
@@ -0,0 +1,216 @@
+// ***********************************************************************
+// Assembly : HZH_Controls
+// Created : 08-08-2019
+//
+// ***********************************************************************
+//
+// Copyright by Huang Zhenghui(黄正辉) All, QQ group:568015492 QQ:623128629 Email:623128629@qq.com
+//
+//
+// Blog: https://www.cnblogs.com/bfyx
+// GitHub:https://github.com/kwwwvagaa/NetWinformControl
+// gitee:https://gitee.com/kwwwvagaa/net_winform_custom_control.git
+//
+// If you use this code, please keep this note.
+// ***********************************************************************
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+
+namespace HZH_Controls.Controls
+{
+ ///
+ /// Class UCCheckBox.
+ /// Implements the
+ ///
+ ///
+ [DefaultEvent("CheckedChangeEvent")]
+ public partial class UCCheckBox : UserControl
+ {
+ ///
+ /// 选中改变事件
+ ///
+ [Description("选中改变事件"), Category("自定义")]
+ public event EventHandler CheckedChangeEvent;
+ ///
+ /// 字体
+ ///
+ /// The font.
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ [Description("字体"), Category("自定义")]
+ public override Font Font
+ {
+ get
+ {
+ return base.Font;
+ }
+ set
+ {
+ base.Font = value;
+ label1.Font = value;
+ }
+ }
+
+ ///
+ /// The fore color
+ ///
+ private Color _ForeColor = Color.FromArgb(62, 62, 62);
+ ///
+ /// 字体颜色
+ ///
+ /// The color of the fore.
+ ///
+ ///
+ ///
+ [Description("字体颜色"), Category("自定义")]
+ public new Color ForeColor
+ {
+ get { return _ForeColor; }
+ set
+ {
+ base.ForeColor = value;
+ label1.ForeColor = value;
+ _ForeColor = value;
+ }
+ }
+ ///
+ /// The text
+ ///
+ private string _Text = "复选框";
+ ///
+ /// 文本
+ ///
+ /// The text value.
+ [Description("文本"), Category("自定义")]
+ public string TextValue
+ {
+ get { return _Text; }
+ set
+ {
+ label1.Text = value;
+ _Text = value;
+ }
+ }
+ ///
+ /// The checked
+ ///
+ private bool _checked = false;
+ ///
+ /// 是否选中
+ ///
+ /// true if checked; otherwise, false.
+ [Description("是否选中"), Category("自定义")]
+ public bool Checked
+ {
+ get
+ {
+ return _checked;
+ }
+ set
+ {
+ if (_checked != value)
+ {
+ _checked = value;
+ if (base.Enabled)
+ {
+ if (_checked)
+ {
+ panel1.BackgroundImage = Properties.Resources.checkbox1;
+ }
+ else
+ {
+ panel1.BackgroundImage = Properties.Resources.checkbox0;
+ }
+ }
+ else
+ {
+ if (_checked)
+ {
+ panel1.BackgroundImage = Properties.Resources.checkbox10;
+ }
+ else
+ {
+ panel1.BackgroundImage = Properties.Resources.checkbox00;
+ }
+ }
+
+ if (CheckedChangeEvent != null)
+ {
+ CheckedChangeEvent(this, null);
+ }
+ }
+ }
+ }
+
+ ///
+ /// 获取或设置一个值,该值指示控件是否可以对用户交互作出响应。
+ ///
+ /// true if enabled; otherwise, false.
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public new bool Enabled
+ {
+ get
+ {
+ return base.Enabled;
+ }
+ set
+ {
+ base.Enabled = value;
+ if (value)
+ {
+ if (_checked)
+ {
+ panel1.BackgroundImage = Properties.Resources.checkbox1;
+ }
+ else
+ {
+ panel1.BackgroundImage = Properties.Resources.checkbox0;
+ }
+ }
+ else
+ {
+ if (_checked)
+ {
+ panel1.BackgroundImage = Properties.Resources.checkbox10;
+ }
+ else
+ {
+ panel1.BackgroundImage = Properties.Resources.checkbox00;
+ }
+ }
+ }
+ }
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ public UCCheckBox()
+ {
+ InitializeComponent();
+ }
+
+ ///
+ /// Handles the MouseDown event of the CheckBox control.
+ ///
+ /// The source of the event.
+ /// The instance containing the event data.
+ private void CheckBox_MouseDown(object sender, MouseEventArgs e)
+ {
+ Checked = !Checked;
+ }
+ }
+}
diff --git a/UsingControl/HZHControls/Controls/Checkbox/UCCheckBox.resx b/UsingControl/HZHControls/Controls/Checkbox/UCCheckBox.resx
new file mode 100644
index 0000000..1af7de1
--- /dev/null
+++ b/UsingControl/HZHControls/Controls/Checkbox/UCCheckBox.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/UsingControl/HZHControls/Controls/ComboBox/UCCombox.Designer.cs b/UsingControl/HZHControls/Controls/ComboBox/UCCombox.Designer.cs
new file mode 100644
index 0000000..9c636ce
--- /dev/null
+++ b/UsingControl/HZHControls/Controls/ComboBox/UCCombox.Designer.cs
@@ -0,0 +1,147 @@
+// ***********************************************************************
+// Assembly : HZH_Controls
+// Created : 08-08-2019
+//
+// ***********************************************************************
+//
+// Copyright by Huang Zhenghui(黄正辉) All, QQ group:568015492 QQ:623128629 Email:623128629@qq.com
+//
+//
+// Blog: https://www.cnblogs.com/bfyx
+// GitHub:https://github.com/kwwwvagaa/NetWinformControl
+// gitee:https://gitee.com/kwwwvagaa/net_winform_custom_control.git
+//
+// If you use this code, please keep this note.
+// ***********************************************************************
+namespace HZH_Controls.Controls
+{
+ ///
+ /// Class UCCombox.
+ /// Implements the
+ ///
+ ///
+ partial class UCCombox
+ {
+ ///
+ /// 必需的设计器变量。
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// 清理所有正在使用的资源。
+ ///
+ /// 如果应释放托管资源,为 true;否则为 false。
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region 组件设计器生成的代码
+
+ ///
+ /// 设计器支持所需的方法 - 不要
+ /// 使用代码编辑器修改此方法的内容。
+ ///
+ private void InitializeComponent()
+ {
+ this.panel1 = new System.Windows.Forms.Panel();
+ this.txtInput = new HZH_Controls.Controls.TextBoxEx();
+ this.lblInput = new System.Windows.Forms.Label();
+ this.SuspendLayout();
+ //
+ // panel1
+ //
+ this.panel1.BackColor = System.Drawing.Color.Transparent;
+ this.panel1.BackgroundImage = global::HZH_Controls.Properties.Resources.ComboBox;
+ this.panel1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
+ this.panel1.Dock = System.Windows.Forms.DockStyle.Right;
+ this.panel1.Location = new System.Drawing.Point(136, 0);
+ this.panel1.Name = "panel1";
+ this.panel1.Size = new System.Drawing.Size(37, 32);
+ this.panel1.TabIndex = 0;
+ this.panel1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.click_MouseDown);
+ //
+ // txtInput
+ //
+ this.txtInput.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
+ this.txtInput.BackColor = System.Drawing.Color.White;
+ this.txtInput.BorderStyle = System.Windows.Forms.BorderStyle.None;
+ this.txtInput.DecLength = 2;
+ this.txtInput.Font = new System.Drawing.Font("微软雅黑", 18F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Pixel);
+ this.txtInput.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
+ this.txtInput.InputType = HZH_Controls.TextInputType.NotControl;
+ this.txtInput.Location = new System.Drawing.Point(3, 4);
+ this.txtInput.Margin = new System.Windows.Forms.Padding(3, 3, 10, 3);
+ this.txtInput.MaxValue = new decimal(new int[] {
+ 1000000,
+ 0,
+ 0,
+ 0});
+ this.txtInput.MinValue = new decimal(new int[] {
+ 1000000,
+ 0,
+ 0,
+ -2147483648});
+ this.txtInput.MyRectangle = new System.Drawing.Rectangle(0, 0, 0, 0);
+ this.txtInput.Name = "txtInput";
+ this.txtInput.OldText = null;
+ this.txtInput.PromptColor = System.Drawing.Color.Silver;
+ this.txtInput.PromptFont = new System.Drawing.Font("微软雅黑", 15F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Pixel);
+ this.txtInput.PromptText = "";
+ this.txtInput.RegexPattern = "";
+ this.txtInput.Size = new System.Drawing.Size(133, 24);
+ this.txtInput.TabIndex = 1;
+ this.txtInput.TextChanged += new System.EventHandler(this.txtInput_TextChanged);
+ //
+ // lblInput
+ //
+ this.lblInput.AutoSize = true;
+ this.lblInput.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
+ this.lblInput.Location = new System.Drawing.Point(3, 6);
+ this.lblInput.Name = "lblInput";
+ this.lblInput.Size = new System.Drawing.Size(0, 20);
+ this.lblInput.TabIndex = 2;
+ this.lblInput.Visible = false;
+ this.lblInput.MouseDown += new System.Windows.Forms.MouseEventHandler(this.click_MouseDown);
+ //
+ // UCCombox
+ //
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
+ this.BackColor = System.Drawing.Color.Transparent;
+ this.ConerRadius = 5;
+ this.Controls.Add(this.panel1);
+ this.Controls.Add(this.txtInput);
+ this.Controls.Add(this.lblInput);
+ this.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(240)))), ((int)(((byte)(240)))), ((int)(((byte)(240)))));
+ this.IsRadius = true;
+ this.IsShowRect = true;
+ this.Name = "UCCombox";
+ this.Size = new System.Drawing.Size(173, 32);
+ this.Load += new System.EventHandler(this.UCComboBox_Load);
+ this.SizeChanged += new System.EventHandler(this.UCComboBox_SizeChanged);
+ this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.click_MouseDown);
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ ///
+ /// The panel1
+ ///
+ private System.Windows.Forms.Panel panel1;
+ ///
+ /// The text input
+ ///
+ public TextBoxEx txtInput;
+ ///
+ /// The label input
+ ///
+ private System.Windows.Forms.Label lblInput;
+ }
+}
diff --git a/UsingControl/HZHControls/Controls/ComboBox/UCCombox.cs b/UsingControl/HZHControls/Controls/ComboBox/UCCombox.cs
new file mode 100644
index 0000000..8bcb2f2
--- /dev/null
+++ b/UsingControl/HZHControls/Controls/ComboBox/UCCombox.cs
@@ -0,0 +1,586 @@
+// ***********************************************************************
+// Assembly : HZH_Controls
+// Created : 08-08-2019
+//
+// ***********************************************************************
+//
+// Copyright by Huang Zhenghui(黄正辉) All, QQ group:568015492 QQ:623128629 Email:623128629@qq.com
+//
+//
+// Blog: https://www.cnblogs.com/bfyx
+// GitHub:https://github.com/kwwwvagaa/NetWinformControl
+// gitee:https://gitee.com/kwwwvagaa/net_winform_custom_control.git
+//
+// If you use this code, please keep this note.
+// ***********************************************************************
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using System.Drawing.Drawing2D;
+
+namespace HZH_Controls.Controls
+{
+ ///
+ /// Class UCCombox.
+ /// Implements the
+ ///
+ ///
+ [DefaultEvent("SelectedChangedEvent")]
+ public partial class UCCombox : UCControlBase
+ {
+ ///
+ /// The fore color
+ ///
+ Color _ForeColor = Color.FromArgb(64, 64, 64);
+ ///
+ /// 文字颜色
+ ///
+ /// The color of the fore.
+ ///
+ ///
+ ///
+ [Description("文字颜色"), Category("自定义")]
+ public override Color ForeColor
+ {
+ get
+ {
+ return _ForeColor;
+ }
+ set
+ {
+ _ForeColor = value;
+ lblInput.ForeColor = value;
+ txtInput.ForeColor = value;
+ }
+ }
+ ///
+ /// 选中事件
+ ///
+ [Description("选中事件"), Category("自定义")]
+ public event EventHandler SelectedChangedEvent;
+ ///
+ /// 文本改变事件
+ ///
+ [Description("文本改变事件"), Category("自定义")]
+ public event EventHandler TextChangedEvent;
+
+ ///
+ /// The box style
+ ///
+ private ComboBoxStyle _BoxStyle = ComboBoxStyle.DropDown;
+ ///
+ /// 控件样式
+ ///
+ /// The box style.
+ [Description("控件样式"), Category("自定义")]
+ public ComboBoxStyle BoxStyle
+ {
+ get { return _BoxStyle; }
+ set
+ {
+ _BoxStyle = value;
+ if (value == ComboBoxStyle.DropDownList)
+ {
+ lblInput.Visible = true;
+ txtInput.Visible = false;
+ }
+ else
+ {
+ lblInput.Visible = false;
+ txtInput.Visible = true;
+ }
+
+ if (this._BoxStyle == ComboBoxStyle.DropDownList)
+ {
+ txtInput.BackColor = _BackColor;
+ base.FillColor = _BackColor;
+ base.RectColor = _BackColor;
+ }
+ else
+ {
+ txtInput.BackColor = Color.White;
+ base.FillColor = Color.White;
+ base.RectColor = Color.FromArgb(220, 220, 220);
+ }
+ }
+ }
+
+ ///
+ /// The font
+ ///
+ private Font _Font = new Font("微软雅黑", 12);
+ ///
+ /// 字体
+ ///
+ /// The font.
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ [Description("字体"), Category("自定义")]
+ public new Font Font
+ {
+ get { return _Font; }
+ set
+ {
+ _Font = value;
+ lblInput.Font = value;
+ txtInput.Font = value;
+ txtInput.PromptFont = value;
+ this.txtInput.Location = new Point(this.txtInput.Location.X, (this.Height - txtInput.Height) / 2);
+ this.lblInput.Location = new Point(this.lblInput.Location.X, (this.Height - lblInput.Height) / 2);
+ }
+ }
+
+
+ ///
+ /// 当使用边框时填充颜色,当值为背景色或透明色或空值则不填充
+ ///
+ /// The color of the fill.
+ [Obsolete("不再可用的属性")]
+ [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+ private new Color FillColor
+ {
+ get;
+ set;
+ }
+
+ ///
+ /// 边框颜色
+ ///
+ /// The color of the rect.
+ [Obsolete("不再可用的属性")]
+ [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+ private new Color RectColor
+ {
+ get;
+ set;
+ }
+
+ ///
+ /// The text value
+ ///
+ private string _TextValue;
+ ///
+ /// 文字
+ ///
+ /// The text value.
+ [Description("文字"), Category("自定义")]
+ public string TextValue
+ {
+ get { return _TextValue; }
+ set
+ {
+ _TextValue = value;
+ if (lblInput.Text != value)
+ lblInput.Text = value;
+ if (txtInput.Text != value)
+ txtInput.Text = value;
+ }
+ }
+
+ ///
+ /// The source
+ ///
+ private List> _source = null;
+ ///
+ /// 数据源
+ ///
+ /// The source.
+ [Description("数据源"), Category("自定义")]
+ public List> Source
+ {
+ get { return _source; }
+ set
+ {
+ _source = value;
+ _selectedIndex = -1;
+ _selectedValue = "";
+ _selectedItem = new KeyValuePair();
+ _selectedText = "";
+ lblInput.Text = "";
+ txtInput.Text = "";
+ }
+ }
+
+ ///
+ /// The selected item
+ ///
+ private KeyValuePair _selectedItem = new KeyValuePair();
+
+ ///
+ /// The selected index
+ ///
+ private int _selectedIndex = -1;
+ ///
+ /// 选中的数据下标
+ ///
+ /// The index of the selected.
+ [Description("选中的数据下标"), Category("自定义")]
+ public int SelectedIndex
+ {
+ get
+ {
+ return _selectedIndex;
+ }
+ set
+ {
+ if (value < 0 || _source == null || _source.Count <= 0 || value >= _source.Count)
+ {
+ _selectedIndex = -1;
+ _selectedValue = "";
+ _selectedItem = new KeyValuePair();
+ SelectedText = "";
+ }
+ else
+ {
+ _selectedIndex = value;
+ _selectedItem = _source[value];
+ _selectedValue = _source[value].Key;
+ SelectedText = _source[value].Value;
+ }
+ }
+ }
+
+ ///
+ /// The selected value
+ ///
+ private string _selectedValue = "";
+ ///
+ /// 选中的值
+ ///
+ /// The selected value.
+ [Description("选中的值"), Category("自定义")]
+ public string SelectedValue
+ {
+ get
+ {
+ return _selectedValue;
+ }
+ set
+ {
+ if (_source == null || _source.Count <= 0)
+ {
+ SelectedText = "";
+ _selectedValue = "";
+ _selectedIndex = -1;
+ _selectedItem = new KeyValuePair();
+ }
+ else
+ {
+ for (int i = 0; i < _source.Count; i++)
+ {
+ if (_source[i].Key == value)
+ {
+ _selectedValue = value;
+ _selectedIndex = i;
+ _selectedItem = _source[i];
+ SelectedText = _source[i].Value;
+ return;
+ }
+ }
+ _selectedValue = "";
+ _selectedIndex = -1;
+ _selectedItem = new KeyValuePair();
+ SelectedText = "";
+ }
+ }
+ }
+
+ ///
+ /// The selected text
+ ///
+ private string _selectedText = "";
+ ///
+ /// 选中的文本
+ ///
+ /// The selected text.
+ [Description("选中的文本"), Category("自定义")]
+ public string SelectedText
+ {
+ get { return _selectedText; }
+ private set
+ {
+ _selectedText = value;
+ lblInput.Text = _selectedText;
+ txtInput.Text = _selectedText;
+ if (SelectedChangedEvent != null)
+ {
+ SelectedChangedEvent(this, null);
+ }
+ }
+ }
+
+ ///
+ /// The item width
+ ///
+ private int _ItemWidth = 70;
+ ///
+ /// 项宽度
+ ///
+ /// The width of the item.
+ [Description("项宽度"), Category("自定义")]
+ public int ItemWidth
+ {
+ get { return _ItemWidth; }
+ set { _ItemWidth = value; }
+ }
+
+ ///
+ /// The drop panel height
+ ///
+ private int _dropPanelHeight = -1;
+ ///
+ /// 下拉面板高度
+ ///
+ /// The height of the drop panel.
+ [Description("下拉面板高度"), Category("自定义")]
+ public int DropPanelHeight
+ {
+ get { return _dropPanelHeight; }
+ set { _dropPanelHeight = value; }
+ }
+ ///
+ /// 获取或设置控件的背景色。
+ ///
+ /// The color of the back.
+ ///
+ ///
+ ///
+ [Obsolete("不再可用的属性,如需要改变背景色,请使用BackColorExt")]
+ [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+ private new Color BackColor
+ {
+ get
+ {
+ return base.BackColor;
+ }
+ set
+ {
+ base.BackColor = Color.Transparent;
+ }
+ }
+
+ ///
+ /// The back color
+ ///
+ private Color _BackColor = Color.FromArgb(240, 240, 240);
+ ///
+ /// 背景色
+ ///
+ /// The back color ext.
+ [Description("背景色"), Category("自定义")]
+ public Color BackColorExt
+ {
+ get
+ {
+ return _BackColor;
+ }
+ set
+ {
+ if (value == Color.Transparent)
+ return;
+ _BackColor = value;
+ lblInput.BackColor = value;
+
+ if (this._BoxStyle == ComboBoxStyle.DropDownList)
+ {
+ txtInput.BackColor = value;
+ base.FillColor = value;
+ base.RectColor = value;
+ }
+ else
+ {
+ txtInput.BackColor = Color.White;
+ base.FillColor = Color.White;
+ base.RectColor = Color.FromArgb(220, 220, 220);
+ }
+ }
+ }
+
+ ///
+ /// The triangle color
+ ///
+ private Color triangleColor = Color.FromArgb(255, 77, 59);
+ ///
+ /// 三角颜色
+ ///
+ /// The color of the triangle.
+ [Description("三角颜色"), Category("自定义")]
+ public Color TriangleColor
+ {
+ get { return triangleColor; }
+ set
+ {
+ triangleColor = value;
+ Bitmap bit = new Bitmap(12, 10);
+ Graphics g = Graphics.FromImage(bit);
+ g.SetGDIHigh();
+ GraphicsPath path = new GraphicsPath();
+ path.AddLines(new Point[]
+ {
+ new Point(1,1),
+ new Point(11,1),
+ new Point(6,10),
+ new Point(1,1)
+ });
+ g.FillPath(new SolidBrush(value), path);
+ g.Dispose();
+ panel1.BackgroundImage = bit;
+ }
+ }
+
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ public UCCombox()
+ {
+ InitializeComponent();
+ lblInput.BackColor = _BackColor;
+ if (this._BoxStyle == ComboBoxStyle.DropDownList)
+ {
+ txtInput.BackColor = _BackColor;
+ base.FillColor = _BackColor;
+ base.RectColor = _BackColor;
+ }
+ else
+ {
+ txtInput.BackColor = Color.White;
+ base.FillColor = Color.White;
+ base.RectColor = Color.FromArgb(220, 220, 220);
+ }
+ base.BackColor = Color.Transparent;
+ }
+
+ ///
+ /// Handles the SizeChanged event of the UCComboBox control.
+ ///
+ /// The source of the event.
+ /// The instance containing the event data.
+ private void UCComboBox_SizeChanged(object sender, EventArgs e)
+ {
+ this.txtInput.Location = new Point(this.txtInput.Location.X, (this.Height - txtInput.Height) / 2);
+ this.lblInput.Location = new Point(this.lblInput.Location.X, (this.Height - lblInput.Height) / 2);
+ }
+
+ ///
+ /// Handles the TextChanged event of the txtInput control.
+ ///
+ /// The source of the event.
+ /// The instance containing the event data.
+ private void txtInput_TextChanged(object sender, EventArgs e)
+ {
+ TextValue = txtInput.Text;
+ if (TextChangedEvent != null)
+ {
+ TextChangedEvent(this, null);
+ }
+ }
+
+ ///
+ /// Handles the MouseDown event of the click control.
+ ///
+ /// The source of the event.
+ /// The instance containing the event data.
+ protected virtual void click_MouseDown(object sender, MouseEventArgs e)
+ {
+ if (_frmAnchor == null || _frmAnchor.IsDisposed || _frmAnchor.Visible == false)
+ {
+
+ if (this.Source != null && this.Source.Count > 0)
+ {
+ int intRow = 0;
+ int intCom = 1;
+ var p = this.PointToScreen(this.Location);
+ while (true)
+ {
+ int intScreenHeight = Screen.PrimaryScreen.Bounds.Height;
+ if ((p.Y + this.Height + this.Source.Count / intCom * 50 < intScreenHeight || p.Y - this.Source.Count / intCom * 50 > 0)
+ && (_dropPanelHeight <= 0 ? true : (this.Source.Count / intCom * 50 <= _dropPanelHeight)))
+ {
+ intRow = this.Source.Count / intCom + (this.Source.Count % intCom != 0 ? 1 : 0);
+ break;
+ }
+ intCom++;
+ }
+ UCTimePanel ucTime = new UCTimePanel();
+ ucTime.IsShowBorder = true;
+ int intWidth = this.Width / intCom;
+ if (intWidth < _ItemWidth)
+ intWidth = _ItemWidth;
+ Size size = new Size(intCom * intWidth, intRow * 50);
+ ucTime.Size = size;
+ ucTime.FirstEvent = true;
+ ucTime.SelectSourceEvent += ucTime_SelectSourceEvent;
+ ucTime.Row = intRow;
+ ucTime.Column = intCom;
+ List> lst = new List>();
+ foreach (var item in this.Source)
+ {
+ lst.Add(new KeyValuePair(item.Key, item.Value));
+ }
+ ucTime.Source = lst;
+
+ ucTime.SetSelect(_selectedValue);
+
+ _frmAnchor = new Forms.FrmAnchor(this, ucTime);
+ _frmAnchor.Load += (a, b) => { (a as Form).Size = size; };
+
+ _frmAnchor.Show(this.FindForm());
+
+ }
+ }
+ else
+ {
+ _frmAnchor.Close();
+ }
+ }
+
+
+ ///
+ /// The FRM anchor
+ ///
+ Forms.FrmAnchor _frmAnchor;
+ ///
+ /// Handles the SelectSourceEvent event of the ucTime control.
+ ///
+ /// The source of the event.
+ /// The instance containing the event data.
+ void ucTime_SelectSourceEvent(object sender, EventArgs e)
+ {
+ if (_frmAnchor != null && !_frmAnchor.IsDisposed && _frmAnchor.Visible)
+ {
+ SelectedValue = sender.ToString();
+ _frmAnchor.Close();
+ }
+ }
+
+ ///
+ /// Handles the Load event of the UCComboBox control.
+ ///
+ /// The source of the event.
+ /// The instance containing the event data.
+ private void UCComboBox_Load(object sender, EventArgs e)
+ {
+ if (this._BoxStyle == ComboBoxStyle.DropDownList)
+ {
+ txtInput.BackColor = _BackColor;
+ base.FillColor = _BackColor;
+ base.RectColor = _BackColor;
+ }
+ else
+ {
+ txtInput.BackColor = Color.White;
+ base.FillColor = Color.White;
+ base.RectColor = Color.FromArgb(220, 220, 220);
+ }
+ }
+ }
+}
diff --git a/UsingControl/HZHControls/Controls/ComboBox/UCCombox.resx b/UsingControl/HZHControls/Controls/ComboBox/UCCombox.resx
new file mode 100644
index 0000000..1af7de1
--- /dev/null
+++ b/UsingControl/HZHControls/Controls/ComboBox/UCCombox.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/UsingControl/HZHControls/Controls/ComboBox/UCComboxGrid.Designer.cs b/UsingControl/HZHControls/Controls/ComboBox/UCComboxGrid.Designer.cs
new file mode 100644
index 0000000..a986c78
--- /dev/null
+++ b/UsingControl/HZHControls/Controls/ComboBox/UCComboxGrid.Designer.cs
@@ -0,0 +1,73 @@
+// ***********************************************************************
+// Assembly : HZH_Controls
+// Created : 08-28-2019
+//
+// ***********************************************************************
+//
+// Copyright by Huang Zhenghui(黄正辉) All, QQ group:568015492 QQ:623128629 Email:623128629@qq.com
+//
+//
+// Blog: https://www.cnblogs.com/bfyx
+// GitHub:https://github.com/kwwwvagaa/NetWinformControl
+// gitee:https://gitee.com/kwwwvagaa/net_winform_custom_control.git
+//
+// If you use this code, please keep this note.
+// ***********************************************************************
+namespace HZH_Controls.Controls
+{
+ ///
+ /// Class UCComboxGrid.
+ /// Implements the
+ ///
+ ///
+ partial class UCComboxGrid
+ {
+ ///
+ /// 必需的设计器变量。
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// 清理所有正在使用的资源。
+ ///
+ /// 如果应释放托管资源,为 true;否则为 false。
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region 组件设计器生成的代码
+
+ ///
+ /// 设计器支持所需的方法 - 不要
+ /// 使用代码编辑器修改此方法的内容。
+ ///
+ private void InitializeComponent()
+ {
+ this.SuspendLayout();
+ //
+ // txtInput
+ //
+ this.txtInput.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(240)))), ((int)(((byte)(240)))), ((int)(((byte)(240)))));
+ //
+ // UCComboxGrid
+ //
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
+ this.BackColor = System.Drawing.Color.Transparent;
+ this.BoxStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+ this.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(240)))), ((int)(((byte)(240)))), ((int)(((byte)(240)))));
+ this.Name = "UCComboxGrid";
+ this.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(240)))), ((int)(((byte)(240)))), ((int)(((byte)(240)))));
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ }
+}
diff --git a/UsingControl/HZHControls/Controls/ComboBox/UCComboxGrid.cs b/UsingControl/HZHControls/Controls/ComboBox/UCComboxGrid.cs
new file mode 100644
index 0000000..08b9483
--- /dev/null
+++ b/UsingControl/HZHControls/Controls/ComboBox/UCComboxGrid.cs
@@ -0,0 +1,229 @@
+// ***********************************************************************
+// Assembly : HZH_Controls
+// Created : 08-28-2019
+//
+// ***********************************************************************
+//
+// Copyright by Huang Zhenghui(黄正辉) All, QQ group:568015492 QQ:623128629 Email:623128629@qq.com
+//
+//
+// Blog: https://www.cnblogs.com/bfyx
+// GitHub:https://github.com/kwwwvagaa/NetWinformControl
+// gitee:https://gitee.com/kwwwvagaa/net_winform_custom_control.git
+//
+// If you use this code, please keep this note.
+// ***********************************************************************
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using HZH_Controls.Controls;
+
+namespace HZH_Controls.Controls
+{
+ ///
+ /// Class UCComboxGrid.
+ /// Implements the
+ ///
+ ///
+ public partial class UCComboxGrid : UCCombox
+ {
+
+ ///
+ /// The m row type
+ ///
+ private Type m_rowType = typeof(UCDataGridViewRow);
+ ///
+ /// 表格行类型
+ ///
+ /// The type of the grid row.
+ [Description("表格行类型"), Category("自定义")]
+ public Type GridRowType
+ {
+ get { return m_rowType; }
+ set
+ {
+ m_rowType = value;
+ }
+ }
+ ///
+ /// The int width
+ ///
+ int intWidth = 0;
+
+ ///
+ /// The m columns
+ ///
+ private List m_columns = null;
+ ///
+ /// 表格列
+ ///
+ /// The grid columns.
+ [Description("表格列"), Category("自定义")]
+ public List GridColumns
+ {
+ get { return m_columns; }
+ set
+ {
+ m_columns = value;
+ if (value != null)
+ intWidth = value.Sum(p => p.WidthType == SizeType.Absolute ? p.Width : (p.Width < 80 ? 80 : p.Width));
+ }
+ }
+ ///
+ /// The m data source
+ ///
+ private List