diff --git a/YTDX202303TCP.sln b/YTDX202303TCP.sln
new file mode 100644
index 0000000..bee32ec
--- /dev/null
+++ b/YTDX202303TCP.sln
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.4.33403.182
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "YTDX202303TCP", "YTDX202303TCP\YTDX202303TCP.csproj", "{99EB89BC-A17C-48A3-8E8F-A62D84EB02D1}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {99EB89BC-A17C-48A3-8E8F-A62D84EB02D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {99EB89BC-A17C-48A3-8E8F-A62D84EB02D1}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {99EB89BC-A17C-48A3-8E8F-A62D84EB02D1}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {99EB89BC-A17C-48A3-8E8F-A62D84EB02D1}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {0A92B70F-1BDF-484D-9775-72426781D90C}
+ EndGlobalSection
+EndGlobal
diff --git a/YTDX202303TCP/App.config b/YTDX202303TCP/App.config
new file mode 100644
index 0000000..56efbc7
--- /dev/null
+++ b/YTDX202303TCP/App.config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/YTDX202303TCP/Client.cs b/YTDX202303TCP/Client.cs
new file mode 100644
index 0000000..4472bf5
--- /dev/null
+++ b/YTDX202303TCP/Client.cs
@@ -0,0 +1,197 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Net.Sockets;
+using System.Net;
+using System.Text;
+using System.Threading;
+using System.Threading.Tasks;
+using static YTDX202303TCP.Sockets;
+
+namespace YTDX202303TCP
+{
+ public class Client : SocketObject
+ {
+ public PushSockets pushSockets;
+
+ bool IsClose = false;
+ ///
+ /// 当前管理对象
+ ///
+ Sockets sk;
+ ///
+ /// 客户端
+ ///
+ TcpClient client;
+ ///
+ /// 当前连接服务端地址
+ ///
+ IPAddress Ipaddress;
+ ///
+ /// 当前连接服务端端口号
+ ///
+ int Port;
+ ///
+ /// 服务端IP+端口
+ ///
+ IPEndPoint ip;
+ ///
+ /// 发送与接收使用的流
+ ///
+ NetworkStream nStream;
+
+ ///
+ /// 初始化Socket
+ ///
+ ///
+ ///
+ public override void InitSocket(IPAddress ipaddress, int port)
+ {
+ Ipaddress = ipaddress;
+ Port = port;
+ ip = new IPEndPoint(Ipaddress, Port);
+ client = new TcpClient();
+ }
+ ///
+ /// 初始化Socket
+ ///
+ /// ipd地址
+ /// 端口
+ public override void InitSocket(string ipaddress, int port)
+ {
+ Ipaddress = IPAddress.Parse(ipaddress);
+ Port = port;
+ ip = new IPEndPoint(Ipaddress, Port);
+ client = new TcpClient();
+ }
+ ///
+ /// 重写Start方法,其实就是连接服务端
+ ///
+ public override void Start()
+ {
+ Connect();
+ }
+ ///
+ /// 连接
+ ///
+ public bool Connect()
+ {
+ try
+ {
+ client.Connect(ip);
+ }
+ catch (Exception)
+ {
+ return false;
+ }
+ nStream = new NetworkStream(client.Client, true);
+ sk = new Sockets(ip, client, nStream);
+ sk.nStream.BeginRead(sk.RecBuffer, 0, sk.RecBuffer.Length, new AsyncCallback(EndReader), sk);
+ return true;
+ }
+ ///
+ /// 读取
+ ///
+ private void EndReader(IAsyncResult ir)
+ {
+ Sockets s = ir.AsyncState as Sockets;
+ try
+ {
+ if (s != null)
+ {
+ if (IsClose && client == null)
+ {
+ sk.nStream.Close();
+ sk.nStream.Dispose();
+ return;
+ }
+ s.Offset = s.nStream.EndRead(ir);
+ if (pushSockets != null)
+ pushSockets.Invoke(s);//推送至UI
+ sk.nStream.BeginRead(sk.RecBuffer, 0, sk.RecBuffer.Length, new AsyncCallback(EndReader), sk);
+ }
+ }
+ catch (Exception skex)
+ {
+ Sockets sks = s;
+ sks.ex = skex;
+ sks.ClientDispose = true;
+ if (pushSockets != null)
+ pushSockets.Invoke(sks);//推送至UI
+ }
+ }
+ ///
+ /// 停止
+ ///
+ public override void Stop()
+ {
+ Sockets sks = new Sockets();
+ try
+ {
+ if (client != null)
+ {
+ client.Client.Shutdown(SocketShutdown.Both);
+ Thread.Sleep(10);
+ client.Close();
+ IsClose = true;
+ client = null;
+ }
+ else
+ {
+ sks.ex = new Exception("客户端没有初始化.!");
+ }
+ if (pushSockets != null)
+ pushSockets.Invoke(sks);//推送至UI
+ }
+ catch (Exception ex)
+ {
+ sks.ex = ex;
+ }
+ }
+ ///
+ /// 发送消息
+ ///
+ public void SendData(byte[] SendData)
+ {
+ try
+ {
+ if (client == null || !client.Connected)
+ {
+ Sockets sks = new Sockets();
+ sks.ex = new Exception("客户端无连接..");
+ sks.ClientDispose = true;
+ if (pushSockets != null)
+ pushSockets.Invoke(sks);//推送至UI
+ }
+ if (client.Connected) //如果连接则发送
+ {
+ if (nStream == null)
+ {
+ nStream = client.GetStream();
+ }
+ nStream.Write(SendData, 0, SendData.Length);
+ }
+ }
+ catch (Exception skex)
+ {
+ Sockets sks = new Sockets();
+ sks.ex = skex;
+ sks.ClientDispose = true;
+ if (pushSockets != null)
+ pushSockets.Invoke(sks);//推送至UI
+ }
+ }
+
+ public bool Is_Connected()
+ {
+ return client.Connected;
+ }
+
+ public bool IsOnline()
+ {
+ if (client == null)
+ return false;
+ return !((client.Client.Poll(1000, SelectMode.SelectRead) && (client.Client.Available == 0)) || !client.Client.Connected);
+ }
+ }
+}
diff --git a/YTDX202303TCP/Data.cs b/YTDX202303TCP/Data.cs
new file mode 100644
index 0000000..528ad7c
--- /dev/null
+++ b/YTDX202303TCP/Data.cs
@@ -0,0 +1,34 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace YTDX202303TCP
+{
+ public class Data
+ {
+ public float AIN0 { get; set; }
+ public float AIN1 { get; set; }
+ public float AIN2 { get; set; }
+ public float AIN3 { get; set; }
+ public float AIN4 { get; set; }
+ public float AIN5 { get; set; }
+ public float AIN6 { get; set; }
+ public float AIN7 { get; set; }
+
+
+
+ public float DI1 { get; set; }
+ public float DI2 { get; set; }
+ public float DI3 { get; set; }
+ public float DI4 { get; set; }
+
+
+ public string DO1 { get; set; } = "关";
+ public string DO2 { get; set; } = "关";
+ public string DO3 { get; set; } = "关";
+ public string DO4 { get; set; } = "关";
+
+ }
+}
diff --git a/YTDX202303TCP/Form1.Designer.cs b/YTDX202303TCP/Form1.Designer.cs
new file mode 100644
index 0000000..bf963c8
--- /dev/null
+++ b/YTDX202303TCP/Form1.Designer.cs
@@ -0,0 +1,637 @@
+namespace YTDX202303TCP
+{
+ partial class Form1
+ {
+ ///
+ /// 必需的设计器变量。
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// 清理所有正在使用的资源。
+ ///
+ /// 如果应释放托管资源,为 true;否则为 false。
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows 窗体设计器生成的代码
+
+ ///
+ /// 设计器支持所需的方法 - 不要修改
+ /// 使用代码编辑器修改此方法的内容。
+ ///
+ private void InitializeComponent()
+ {
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1));
+ this.groupBox1 = new System.Windows.Forms.GroupBox();
+ this.button1 = new System.Windows.Forms.Button();
+ this.textBox2 = new System.Windows.Forms.TextBox();
+ this.label2 = new System.Windows.Forms.Label();
+ this.textBox1 = new System.Windows.Forms.TextBox();
+ this.label1 = new System.Windows.Forms.Label();
+ this.groupBox2 = new System.Windows.Forms.GroupBox();
+ this.label37 = new System.Windows.Forms.Label();
+ this.label36 = new System.Windows.Forms.Label();
+ this.label35 = new System.Windows.Forms.Label();
+ this.label34 = new System.Windows.Forms.Label();
+ this.label33 = new System.Windows.Forms.Label();
+ this.label32 = new System.Windows.Forms.Label();
+ this.label31 = new System.Windows.Forms.Label();
+ this.label30 = new System.Windows.Forms.Label();
+ this.label21 = new System.Windows.Forms.Label();
+ this.label20 = new System.Windows.Forms.Label();
+ this.label19 = new System.Windows.Forms.Label();
+ this.label18 = new System.Windows.Forms.Label();
+ this.label17 = new System.Windows.Forms.Label();
+ this.label16 = new System.Windows.Forms.Label();
+ this.label15 = new System.Windows.Forms.Label();
+ this.label14 = new System.Windows.Forms.Label();
+ this.label13 = new System.Windows.Forms.Label();
+ this.label12 = new System.Windows.Forms.Label();
+ this.label11 = new System.Windows.Forms.Label();
+ this.label10 = new System.Windows.Forms.Label();
+ this.label9 = new System.Windows.Forms.Label();
+ this.label8 = new System.Windows.Forms.Label();
+ this.label7 = new System.Windows.Forms.Label();
+ this.label6 = new System.Windows.Forms.Label();
+ this.label5 = new System.Windows.Forms.Label();
+ this.label4 = new System.Windows.Forms.Label();
+ this.groupBox3 = new System.Windows.Forms.GroupBox();
+ this.button11 = new System.Windows.Forms.Button();
+ this.button10 = new System.Windows.Forms.Button();
+ this.button9 = new System.Windows.Forms.Button();
+ this.button8 = new System.Windows.Forms.Button();
+ this.button7 = new System.Windows.Forms.Button();
+ this.button6 = new System.Windows.Forms.Button();
+ this.button5 = new System.Windows.Forms.Button();
+ this.button4 = new System.Windows.Forms.Button();
+ this.button3 = new System.Windows.Forms.Button();
+ this.button2 = new System.Windows.Forms.Button();
+ this.label3 = new System.Windows.Forms.Label();
+ this.label22 = new System.Windows.Forms.Label();
+ this.textBox3 = new System.Windows.Forms.TextBox();
+ this.groupBox1.SuspendLayout();
+ this.groupBox2.SuspendLayout();
+ this.groupBox3.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // groupBox1
+ //
+ this.groupBox1.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.groupBox1.Controls.Add(this.button1);
+ this.groupBox1.Controls.Add(this.textBox2);
+ this.groupBox1.Controls.Add(this.label2);
+ this.groupBox1.Controls.Add(this.textBox3);
+ this.groupBox1.Controls.Add(this.label22);
+ this.groupBox1.Controls.Add(this.textBox1);
+ this.groupBox1.Controls.Add(this.label1);
+ this.groupBox1.Font = new System.Drawing.Font("宋体", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.groupBox1.Location = new System.Drawing.Point(12, 12);
+ this.groupBox1.Name = "groupBox1";
+ this.groupBox1.Size = new System.Drawing.Size(510, 118);
+ this.groupBox1.TabIndex = 0;
+ this.groupBox1.TabStop = false;
+ this.groupBox1.Text = "TCPClient";
+ //
+ // button1
+ //
+ this.button1.Location = new System.Drawing.Point(410, 31);
+ this.button1.Name = "button1";
+ this.button1.Size = new System.Drawing.Size(75, 23);
+ this.button1.TabIndex = 4;
+ this.button1.Text = "连接";
+ this.button1.UseVisualStyleBackColor = true;
+ this.button1.Click += new System.EventHandler(this.button1_Click);
+ //
+ // textBox2
+ //
+ this.textBox2.Location = new System.Drawing.Point(281, 31);
+ this.textBox2.Name = "textBox2";
+ this.textBox2.Size = new System.Drawing.Size(100, 23);
+ this.textBox2.TabIndex = 3;
+ //
+ // label2
+ //
+ this.label2.AutoSize = true;
+ this.label2.Location = new System.Drawing.Point(212, 34);
+ this.label2.Name = "label2";
+ this.label2.Size = new System.Drawing.Size(63, 14);
+ this.label2.TabIndex = 2;
+ this.label2.Text = "端口号:";
+ //
+ // textBox1
+ //
+ this.textBox1.Location = new System.Drawing.Point(78, 31);
+ this.textBox1.Name = "textBox1";
+ this.textBox1.Size = new System.Drawing.Size(116, 23);
+ this.textBox1.TabIndex = 1;
+ //
+ // label1
+ //
+ this.label1.AutoSize = true;
+ this.label1.Location = new System.Drawing.Point(9, 34);
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size(63, 14);
+ this.label1.TabIndex = 0;
+ this.label1.Text = "目标IP:";
+ //
+ // groupBox2
+ //
+ this.groupBox2.Controls.Add(this.label37);
+ this.groupBox2.Controls.Add(this.label36);
+ this.groupBox2.Controls.Add(this.label35);
+ this.groupBox2.Controls.Add(this.label34);
+ this.groupBox2.Controls.Add(this.label33);
+ this.groupBox2.Controls.Add(this.label32);
+ this.groupBox2.Controls.Add(this.label31);
+ this.groupBox2.Controls.Add(this.label30);
+ this.groupBox2.Controls.Add(this.label21);
+ this.groupBox2.Controls.Add(this.label20);
+ this.groupBox2.Controls.Add(this.label19);
+ this.groupBox2.Controls.Add(this.label18);
+ this.groupBox2.Controls.Add(this.label17);
+ this.groupBox2.Controls.Add(this.label16);
+ this.groupBox2.Controls.Add(this.label15);
+ this.groupBox2.Controls.Add(this.label14);
+ this.groupBox2.Controls.Add(this.label13);
+ this.groupBox2.Controls.Add(this.label12);
+ this.groupBox2.Controls.Add(this.label11);
+ this.groupBox2.Controls.Add(this.label10);
+ this.groupBox2.Controls.Add(this.label9);
+ this.groupBox2.Controls.Add(this.label8);
+ this.groupBox2.Controls.Add(this.label7);
+ this.groupBox2.Controls.Add(this.label6);
+ this.groupBox2.Controls.Add(this.label5);
+ this.groupBox2.Controls.Add(this.label4);
+ this.groupBox2.Font = new System.Drawing.Font("宋体", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.groupBox2.Location = new System.Drawing.Point(12, 136);
+ this.groupBox2.Name = "groupBox2";
+ this.groupBox2.Size = new System.Drawing.Size(275, 439);
+ this.groupBox2.TabIndex = 1;
+ this.groupBox2.TabStop = false;
+ this.groupBox2.Text = "RTU IO 状态";
+ //
+ // label37
+ //
+ this.label37.AutoSize = true;
+ this.label37.Location = new System.Drawing.Point(154, 413);
+ this.label37.Name = "label37";
+ this.label37.Size = new System.Drawing.Size(21, 14);
+ this.label37.TabIndex = 32;
+ this.label37.Text = "关";
+ //
+ // label36
+ //
+ this.label36.AutoSize = true;
+ this.label36.Location = new System.Drawing.Point(154, 372);
+ this.label36.Name = "label36";
+ this.label36.Size = new System.Drawing.Size(21, 14);
+ this.label36.TabIndex = 31;
+ this.label36.Text = "关";
+ //
+ // label35
+ //
+ this.label35.AutoSize = true;
+ this.label35.Location = new System.Drawing.Point(154, 332);
+ this.label35.Name = "label35";
+ this.label35.Size = new System.Drawing.Size(21, 14);
+ this.label35.TabIndex = 30;
+ this.label35.Text = "关";
+ //
+ // label34
+ //
+ this.label34.AutoSize = true;
+ this.label34.Location = new System.Drawing.Point(154, 298);
+ this.label34.Name = "label34";
+ this.label34.Size = new System.Drawing.Size(21, 14);
+ this.label34.TabIndex = 29;
+ this.label34.Text = "关";
+ //
+ // label33
+ //
+ this.label33.AutoSize = true;
+ this.label33.Location = new System.Drawing.Point(9, 372);
+ this.label33.Name = "label33";
+ this.label33.Size = new System.Drawing.Size(35, 14);
+ this.label33.TabIndex = 28;
+ this.label33.Text = "复位";
+ //
+ // label32
+ //
+ this.label32.AutoSize = true;
+ this.label32.Location = new System.Drawing.Point(9, 332);
+ this.label32.Name = "label32";
+ this.label32.Size = new System.Drawing.Size(77, 14);
+ this.label32.TabIndex = 27;
+ this.label32.Text = "继电器控制";
+ //
+ // label31
+ //
+ this.label31.AutoSize = true;
+ this.label31.Location = new System.Drawing.Point(8, 413);
+ this.label31.Name = "label31";
+ this.label31.Size = new System.Drawing.Size(28, 14);
+ this.label31.TabIndex = 27;
+ this.label31.Text = "DO4";
+ //
+ // label30
+ //
+ this.label30.AutoSize = true;
+ this.label30.Location = new System.Drawing.Point(9, 298);
+ this.label30.Name = "label30";
+ this.label30.Size = new System.Drawing.Size(91, 14);
+ this.label30.TabIndex = 26;
+ this.label30.Text = "电子开关控制";
+ //
+ // label21
+ //
+ this.label21.AutoSize = true;
+ this.label21.Location = new System.Drawing.Point(154, 260);
+ this.label21.Name = "label21";
+ this.label21.Size = new System.Drawing.Size(14, 14);
+ this.label21.TabIndex = 17;
+ this.label21.Text = "0";
+ //
+ // label20
+ //
+ this.label20.AutoSize = true;
+ this.label20.Location = new System.Drawing.Point(154, 230);
+ this.label20.Name = "label20";
+ this.label20.Size = new System.Drawing.Size(14, 14);
+ this.label20.TabIndex = 16;
+ this.label20.Text = "0";
+ //
+ // label19
+ //
+ this.label19.AutoSize = true;
+ this.label19.Location = new System.Drawing.Point(154, 201);
+ this.label19.Name = "label19";
+ this.label19.Size = new System.Drawing.Size(14, 14);
+ this.label19.TabIndex = 15;
+ this.label19.Text = "0";
+ //
+ // label18
+ //
+ this.label18.AutoSize = true;
+ this.label18.Location = new System.Drawing.Point(154, 172);
+ this.label18.Name = "label18";
+ this.label18.Size = new System.Drawing.Size(14, 14);
+ this.label18.TabIndex = 14;
+ this.label18.Text = "0";
+ //
+ // label17
+ //
+ this.label17.AutoSize = true;
+ this.label17.Location = new System.Drawing.Point(154, 144);
+ this.label17.Name = "label17";
+ this.label17.Size = new System.Drawing.Size(14, 14);
+ this.label17.TabIndex = 13;
+ this.label17.Text = "0";
+ //
+ // label16
+ //
+ this.label16.AutoSize = true;
+ this.label16.Location = new System.Drawing.Point(154, 115);
+ this.label16.Name = "label16";
+ this.label16.Size = new System.Drawing.Size(14, 14);
+ this.label16.TabIndex = 12;
+ this.label16.Text = "0";
+ //
+ // label15
+ //
+ this.label15.AutoSize = true;
+ this.label15.Location = new System.Drawing.Point(154, 87);
+ this.label15.Name = "label15";
+ this.label15.Size = new System.Drawing.Size(14, 14);
+ this.label15.TabIndex = 11;
+ this.label15.Text = "0";
+ //
+ // label14
+ //
+ this.label14.AutoSize = true;
+ this.label14.Location = new System.Drawing.Point(9, 260);
+ this.label14.Name = "label14";
+ this.label14.Size = new System.Drawing.Size(35, 14);
+ this.label14.TabIndex = 10;
+ this.label14.Text = "AIN7";
+ //
+ // label13
+ //
+ this.label13.AutoSize = true;
+ this.label13.Location = new System.Drawing.Point(9, 230);
+ this.label13.Name = "label13";
+ this.label13.Size = new System.Drawing.Size(35, 14);
+ this.label13.TabIndex = 9;
+ this.label13.Text = "AIN6";
+ //
+ // label12
+ //
+ this.label12.AutoSize = true;
+ this.label12.Location = new System.Drawing.Point(9, 201);
+ this.label12.Name = "label12";
+ this.label12.Size = new System.Drawing.Size(35, 14);
+ this.label12.TabIndex = 8;
+ this.label12.Text = "湿度";
+ //
+ // label11
+ //
+ this.label11.AutoSize = true;
+ this.label11.Location = new System.Drawing.Point(9, 172);
+ this.label11.Name = "label11";
+ this.label11.Size = new System.Drawing.Size(35, 14);
+ this.label11.TabIndex = 7;
+ this.label11.Text = "温度";
+ //
+ // label10
+ //
+ this.label10.AutoSize = true;
+ this.label10.Location = new System.Drawing.Point(9, 144);
+ this.label10.Name = "label10";
+ this.label10.Size = new System.Drawing.Size(77, 14);
+ this.label10.TabIndex = 6;
+ this.label10.Text = "短路故障位";
+ //
+ // label9
+ //
+ this.label9.AutoSize = true;
+ this.label9.Location = new System.Drawing.Point(9, 115);
+ this.label9.Name = "label9";
+ this.label9.Size = new System.Drawing.Size(77, 14);
+ this.label9.TabIndex = 5;
+ this.label9.Text = "过流故障位";
+ //
+ // label8
+ //
+ this.label8.AutoSize = true;
+ this.label8.Location = new System.Drawing.Point(9, 87);
+ this.label8.Name = "label8";
+ this.label8.Size = new System.Drawing.Size(35, 14);
+ this.label8.TabIndex = 4;
+ this.label8.Text = "电流";
+ //
+ // label7
+ //
+ this.label7.AutoSize = true;
+ this.label7.Location = new System.Drawing.Point(154, 58);
+ this.label7.Name = "label7";
+ this.label7.Size = new System.Drawing.Size(14, 14);
+ this.label7.TabIndex = 3;
+ this.label7.Text = "0";
+ //
+ // label6
+ //
+ this.label6.AutoSize = true;
+ this.label6.Location = new System.Drawing.Point(9, 58);
+ this.label6.Name = "label6";
+ this.label6.Size = new System.Drawing.Size(35, 14);
+ this.label6.TabIndex = 2;
+ this.label6.Text = "电压";
+ //
+ // label5
+ //
+ this.label5.AutoSize = true;
+ this.label5.Location = new System.Drawing.Point(157, 28);
+ this.label5.Name = "label5";
+ this.label5.Size = new System.Drawing.Size(35, 14);
+ this.label5.TabIndex = 1;
+ this.label5.Text = "数据";
+ //
+ // label4
+ //
+ this.label4.AutoSize = true;
+ this.label4.Location = new System.Drawing.Point(28, 28);
+ this.label4.Name = "label4";
+ this.label4.Size = new System.Drawing.Size(35, 14);
+ this.label4.TabIndex = 0;
+ this.label4.Text = "名称";
+ //
+ // groupBox3
+ //
+ this.groupBox3.Controls.Add(this.button11);
+ this.groupBox3.Controls.Add(this.button10);
+ this.groupBox3.Controls.Add(this.button9);
+ this.groupBox3.Controls.Add(this.button8);
+ this.groupBox3.Controls.Add(this.button7);
+ this.groupBox3.Controls.Add(this.button6);
+ this.groupBox3.Controls.Add(this.button5);
+ this.groupBox3.Controls.Add(this.button4);
+ this.groupBox3.Controls.Add(this.button3);
+ this.groupBox3.Controls.Add(this.button2);
+ this.groupBox3.Controls.Add(this.label3);
+ this.groupBox3.Font = new System.Drawing.Font("宋体", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.groupBox3.Location = new System.Drawing.Point(310, 136);
+ this.groupBox3.Name = "groupBox3";
+ this.groupBox3.Size = new System.Drawing.Size(212, 439);
+ this.groupBox3.TabIndex = 2;
+ this.groupBox3.TabStop = false;
+ this.groupBox3.Text = "RTU DO 控制";
+ //
+ // button11
+ //
+ this.button11.Location = new System.Drawing.Point(18, 389);
+ this.button11.Name = "button11";
+ this.button11.Size = new System.Drawing.Size(75, 23);
+ this.button11.TabIndex = 10;
+ this.button11.Text = "自动读取";
+ this.button11.UseVisualStyleBackColor = true;
+ this.button11.Click += new System.EventHandler(this.button11_Click);
+ //
+ // button10
+ //
+ this.button10.Location = new System.Drawing.Point(115, 304);
+ this.button10.Name = "button10";
+ this.button10.Size = new System.Drawing.Size(88, 23);
+ this.button10.TabIndex = 9;
+ this.button10.Text = "继电器4关";
+ this.button10.UseVisualStyleBackColor = true;
+ this.button10.Click += new System.EventHandler(this.button10_Click);
+ //
+ // button9
+ //
+ this.button9.Location = new System.Drawing.Point(18, 304);
+ this.button9.Name = "button9";
+ this.button9.Size = new System.Drawing.Size(88, 23);
+ this.button9.TabIndex = 8;
+ this.button9.Text = "继电器4开";
+ this.button9.UseVisualStyleBackColor = true;
+ this.button9.Click += new System.EventHandler(this.button9_Click);
+ //
+ // button8
+ //
+ this.button8.Location = new System.Drawing.Point(115, 230);
+ this.button8.Name = "button8";
+ this.button8.Size = new System.Drawing.Size(88, 23);
+ this.button8.TabIndex = 7;
+ this.button8.Text = "继电器3关";
+ this.button8.UseVisualStyleBackColor = true;
+ this.button8.Click += new System.EventHandler(this.button8_Click);
+ //
+ // button7
+ //
+ this.button7.Location = new System.Drawing.Point(18, 230);
+ this.button7.Name = "button7";
+ this.button7.Size = new System.Drawing.Size(88, 23);
+ this.button7.TabIndex = 6;
+ this.button7.Text = "继电器3开";
+ this.button7.UseVisualStyleBackColor = true;
+ this.button7.Click += new System.EventHandler(this.button7_Click);
+ //
+ // button6
+ //
+ this.button6.Location = new System.Drawing.Point(115, 163);
+ this.button6.Name = "button6";
+ this.button6.Size = new System.Drawing.Size(88, 23);
+ this.button6.TabIndex = 5;
+ this.button6.Text = "继电器2关";
+ this.button6.UseVisualStyleBackColor = true;
+ this.button6.Click += new System.EventHandler(this.button6_Click);
+ //
+ // button5
+ //
+ this.button5.Location = new System.Drawing.Point(18, 163);
+ this.button5.Name = "button5";
+ this.button5.Size = new System.Drawing.Size(88, 23);
+ this.button5.TabIndex = 4;
+ this.button5.Text = "继电器2开";
+ this.button5.UseVisualStyleBackColor = true;
+ this.button5.Click += new System.EventHandler(this.button5_Click);
+ //
+ // button4
+ //
+ this.button4.Location = new System.Drawing.Point(115, 87);
+ this.button4.Name = "button4";
+ this.button4.Size = new System.Drawing.Size(88, 23);
+ this.button4.TabIndex = 3;
+ this.button4.Text = "继电器1关";
+ this.button4.UseVisualStyleBackColor = true;
+ this.button4.Click += new System.EventHandler(this.button4_Click);
+ //
+ // button3
+ //
+ this.button3.Location = new System.Drawing.Point(18, 87);
+ this.button3.Name = "button3";
+ this.button3.Size = new System.Drawing.Size(88, 23);
+ this.button3.TabIndex = 2;
+ this.button3.Text = "继电器1开";
+ this.button3.UseVisualStyleBackColor = true;
+ this.button3.Click += new System.EventHandler(this.button3_Click);
+ //
+ // button2
+ //
+ this.button2.Location = new System.Drawing.Point(117, 28);
+ this.button2.Name = "button2";
+ this.button2.Size = new System.Drawing.Size(75, 23);
+ this.button2.TabIndex = 1;
+ this.button2.Text = "读取";
+ this.button2.UseVisualStyleBackColor = true;
+ this.button2.Click += new System.EventHandler(this.button2_Click);
+ //
+ // label3
+ //
+ this.label3.AutoSize = true;
+ this.label3.Location = new System.Drawing.Point(15, 33);
+ this.label3.Name = "label3";
+ this.label3.Size = new System.Drawing.Size(91, 14);
+ this.label3.TabIndex = 0;
+ this.label3.Text = "读取系统状态";
+ //
+ // label22
+ //
+ this.label22.AutoSize = true;
+ this.label22.Location = new System.Drawing.Point(9, 79);
+ this.label22.Name = "label22";
+ this.label22.Size = new System.Drawing.Size(63, 14);
+ this.label22.TabIndex = 0;
+ this.label22.Text = "子站地址";
+ //
+ // textBox3
+ //
+ this.textBox3.Location = new System.Drawing.Point(78, 76);
+ this.textBox3.Name = "textBox3";
+ this.textBox3.Size = new System.Drawing.Size(116, 23);
+ this.textBox3.TabIndex = 1;
+ this.textBox3.TextChanged += new System.EventHandler(this.textBox3_TextChanged);
+ //
+ // Form1
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(534, 608);
+ this.Controls.Add(this.groupBox3);
+ this.Controls.Add(this.groupBox2);
+ this.Controls.Add(this.groupBox1);
+ this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+ this.MaximizeBox = false;
+ this.Name = "Form1";
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
+ this.Text = "YTDA202303TCP";
+ this.groupBox1.ResumeLayout(false);
+ this.groupBox1.PerformLayout();
+ this.groupBox2.ResumeLayout(false);
+ this.groupBox2.PerformLayout();
+ this.groupBox3.ResumeLayout(false);
+ this.groupBox3.PerformLayout();
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.GroupBox groupBox1;
+ private System.Windows.Forms.Button button1;
+ private System.Windows.Forms.TextBox textBox2;
+ private System.Windows.Forms.Label label2;
+ private System.Windows.Forms.TextBox textBox1;
+ private System.Windows.Forms.Label label1;
+ private System.Windows.Forms.GroupBox groupBox2;
+ private System.Windows.Forms.GroupBox groupBox3;
+ private System.Windows.Forms.Button button2;
+ private System.Windows.Forms.Label label3;
+ private System.Windows.Forms.Label label5;
+ private System.Windows.Forms.Label label4;
+ private System.Windows.Forms.Label label21;
+ private System.Windows.Forms.Label label20;
+ private System.Windows.Forms.Label label19;
+ private System.Windows.Forms.Label label18;
+ private System.Windows.Forms.Label label17;
+ private System.Windows.Forms.Label label16;
+ private System.Windows.Forms.Label label15;
+ private System.Windows.Forms.Label label14;
+ private System.Windows.Forms.Label label13;
+ private System.Windows.Forms.Label label12;
+ private System.Windows.Forms.Label label11;
+ private System.Windows.Forms.Label label10;
+ private System.Windows.Forms.Label label9;
+ private System.Windows.Forms.Label label8;
+ private System.Windows.Forms.Label label7;
+ private System.Windows.Forms.Label label6;
+ private System.Windows.Forms.Label label37;
+ private System.Windows.Forms.Label label36;
+ private System.Windows.Forms.Label label35;
+ private System.Windows.Forms.Label label34;
+ private System.Windows.Forms.Label label33;
+ private System.Windows.Forms.Label label32;
+ private System.Windows.Forms.Label label31;
+ private System.Windows.Forms.Label label30;
+ private System.Windows.Forms.Button button5;
+ private System.Windows.Forms.Button button4;
+ private System.Windows.Forms.Button button3;
+ private System.Windows.Forms.Button button10;
+ private System.Windows.Forms.Button button9;
+ private System.Windows.Forms.Button button8;
+ private System.Windows.Forms.Button button7;
+ private System.Windows.Forms.Button button6;
+ private System.Windows.Forms.Button button11;
+ private System.Windows.Forms.TextBox textBox3;
+ private System.Windows.Forms.Label label22;
+ }
+}
+
diff --git a/YTDX202303TCP/Form1.cs b/YTDX202303TCP/Form1.cs
new file mode 100644
index 0000000..bf238e4
--- /dev/null
+++ b/YTDX202303TCP/Form1.cs
@@ -0,0 +1,492 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Reflection.Emit;
+using System.Text;
+using System.Threading;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using System.Windows.Threading;
+using static System.Windows.Forms.VisualStyles.VisualStyleElement;
+using static System.Windows.Forms.VisualStyles.VisualStyleElement.TaskbarClock;
+using static System.Windows.Forms.VisualStyles.VisualStyleElement.ToolBar;
+
+namespace YTDX202303TCP
+{
+ public partial class Form1 : Form
+ {
+ private string main_ip = "192.168.0.65"; //IP
+ private int main_port = 502; //端口
+ private Client _client = new Client(); //主板客户端
+ //单线程
+ private System.Threading.Timer _flash_page;
+ private Data data = new Data();
+ static bool isSending = false;//数据是否定时发送
+
+ private int station_id = 100;
+
+ public Form1()
+ {
+ InitializeComponent();
+ textBox1.Text = main_ip;
+ textBox2.Text = main_port.ToString();
+ textBox3.Text = station_id.ToString();
+ //刷新界面的线程
+ _flash_page = new System.Threading.Timer(new System.Threading.TimerCallback(WritetoPage), null, 2000, 1000);
+ }
+
+ ///
+ /// 数据写入界面
+ ///
+ ///
+ private void WritetoPage(object sender)
+ {
+ Invoke((EventHandler)(delegate
+ {
+ label7.Text = data.AIN0.ToString("0.00") + " V";
+ label15.Text = data.AIN1.ToString("0.00") + " A";
+ label16.Text = data.AIN2.ToString("0.00") + " V";
+ label17.Text = data.AIN3.ToString("0.00") + " V";
+ label18.Text = data.AIN4.ToString("0.00") + " ℃";
+ label19.Text = data.AIN5.ToString("0.00") + " %";
+ label20.Text = data.AIN6.ToString("0.00") + " V";
+ label21.Text = data.AIN7.ToString("0.00") + " V";
+
+ label34.Text = data.DO1;
+ label35.Text = data.DO2;
+ label36.Text = data.DO3;
+ label37.Text = data.DO4;
+
+ }));
+ }
+
+
+ ///
+ /// 连接
+ ///
+ ///
+ ///
+ private void button1_Click(object sender, EventArgs e)
+ {
+ if (button1.Text == "连接")
+ {
+ //连接Socket
+ _client.InitSocket(textBox1.Text, Convert.ToInt32(textBox2.Text));
+ bool isConnected = _client.Connect();
+ if (isConnected)
+ {
+ _client.pushSockets = ReceiveMess;//注册推送器
+ button1.Text = "断开";
+ textBox1.Enabled = false;
+ textBox2.Enabled = false;
+ }
+ }
+ else if (button1.Text == "断开")
+ {
+ if (button11.Text == "停止")
+ {
+ MessageBox.Show("请先关闭自动读取功能!");
+ }
+ else
+ {
+ _client.Stop();
+ button1.Text = "连接";
+ textBox1.Enabled = true;
+ textBox2.Enabled = true;
+ }
+
+ }
+ }
+
+
+ ///
+ /// 客户端数据接收
+ ///
+ ///
+ private void ReceiveMess(Sockets sks)
+ {
+ if (sks.ex != null)
+ {
+ if (sks.ClientDispose == true)
+ {
+ //由于未知原因引发异常.导致客户端下线. 比如网络故障.或服务器断开连接.
+ //wirte_textbox(string.Format("客户端下线.!异常消息:{0}\r\n", sks.ex));
+ }
+ else
+ {
+ //SetClientState(string.Format("异常消息:{0}\r\n", sks.ex));
+ }
+ //timerConnect.Enabled = true;
+ }
+ else if (sks.Offset == 0)
+ {
+ //客户端主动下线
+ //wirte_textbox("客户端下线!");
+ }
+ else
+ {
+ byte[] buffer = new byte[sks.Offset];
+ Array.Copy(sks.RecBuffer, buffer, sks.Offset);
+ string str = Encoding.UTF8.GetString(buffer);
+
+ try
+ {
+ ParsingData(new List(buffer));
+ }
+ catch (Exception)
+ {
+ return;
+ }
+ }
+ }
+
+
+
+ ///
+ /// 数据解析
+ ///
+ ///
+ private void ParsingData(List byteList)
+ {
+ string rec_16 = null;
+ for (int i = 0; i < byteList.Count; i++)
+ {
+ rec_16 += byteList[i].ToString("X2"); //16进制显示
+ }
+ //string _message = tools.HexStringToString(rec_16, Encoding.Default).Replace("\r\n", "");
+
+ //校验当前List是否为空或者长度
+ if (byteList == null || byteList.Count == 0)
+ return;
+ //获取当前系统时间
+ DateTime time_DataBase = DateTime.Now;
+ //帧头
+ byte[] _header = new byte[] { (byte)station_id };
+ //功能码
+ byte _fun_code = 0;
+ //操作功能
+ byte _operation = 0;
+ //传感器类型
+ byte _kind = 0;
+
+ //校验帧头
+ if (byteList[0] != _header[0])
+ {
+ return;
+ }
+
+ //读取状态显示
+ if (rec_16.StartsWith(station_id.ToString("x2") + "0330"))
+ {
+ data.AIN0 = (float)tools.bytetofloat(byteList, 3) * 118F; //电压
+ data.AIN1 = (float)tools.bytetofloat(byteList, 7) / 0.75F; //电流
+ data.AIN2 = (float)tools.bytetofloat(byteList, 11);
+ data.AIN3 = (float)tools.bytetofloat(byteList, 15);
+ data.AIN4 = (float)tools.bytetofloat(byteList, 19) * 100F; //温度
+ data.AIN5 = (float)tools.bytetofloat(byteList, 23) * 100F / 3F; //湿度
+ data.AIN6 = (float)tools.bytetofloat(byteList, 27);
+ data.AIN7 = (float)tools.bytetofloat(byteList, 31);
+
+ if (byteList[44] == 1)
+ {
+ data.DO1 = "开";
+ }
+ else
+ {
+ data.DO1 = "关";
+ }
+
+ if (byteList[46] == 1)
+ {
+ data.DO2 = "开";
+ }
+ else
+ {
+ data.DO2 = "关";
+ }
+
+ if (byteList[48] == 1)
+ {
+ data.DO3 = "开";
+ }
+ else
+ {
+ data.DO3 = "关";
+ }
+
+ if (byteList[50] == 1)
+ {
+ data.DO4 = "开";
+ }
+ else
+ {
+ data.DO4 = "关";
+ }
+
+ }
+
+ }
+
+
+ ///
+ /// 继电器1开
+ ///
+ ///
+ ///
+ private void button3_Click(object sender, EventArgs e)
+ {
+ Control(20, 01);
+ }
+
+ ///
+ /// 继电器1关
+ ///
+ ///
+ ///
+ private void button4_Click(object sender, EventArgs e)
+ {
+ Control(20, 00);
+ }
+
+ ///
+ /// 继电器2开
+ ///
+ ///
+ ///
+ private void button5_Click(object sender, EventArgs e)
+ {
+ Control(21, 01);
+ //Thread.Sleep(500);
+ //button3_Click(null, null);
+
+ }
+
+ ///
+ /// 继电器2关
+ ///
+ ///
+ ///
+ private void button6_Click(object sender, EventArgs e)
+ {
+ Control(21, 00);
+ }
+
+ ///
+ /// 继电器3开
+ ///
+ ///
+ ///
+ private void button7_Click(object sender, EventArgs e)
+ {
+ Control(22, 01);
+ }
+
+ ///
+ /// 继电器3关
+ ///
+ ///
+ ///
+ private void button8_Click(object sender, EventArgs e)
+ {
+ Control(22, 00);
+ }
+
+ ///
+ /// 继电器4开
+ ///
+ ///
+ ///
+ private void button9_Click(object sender, EventArgs e)
+ {
+ Control(23, 01);
+ }
+
+ ///
+ /// 继电器4关
+ ///
+ ///
+ ///
+ private void button10_Click(object sender, EventArgs e)
+ {
+ Control(23, 00);
+ }
+
+ ///
+ /// 读取
+ ///
+ ///
+ ///
+ private void button2_Click(object sender, EventArgs e)
+ {
+ //byte[] byte_read = new byte[] { (byte)station_id, 03, 00, 00, 00, 24, 76, 53 };
+ byte[] byte_read = new byte[] { (byte)station_id, 03, 00, 00, 00, 24 };
+ byte[] nr_crc = new byte[2];
+ nr_crc = Crc16(byte_read, byte_read.Length);
+ List data = byte_read.ToList();
+ data.AddRange(nr_crc);
+ string list = tools.byteToHexStr(data.ToArray());
+ byte[] bytea = tools.ConvertHexStringToBytes(list);
+ _client.SendData(bytea);
+ }
+
+
+ //创建读取线程
+ private System.Threading.Timer timer_Read;
+ ///
+ /// 定时读取
+ ///
+ ///
+ ///
+ private void button11_Click(object sender, EventArgs e)
+ {
+ if (button11.Text == "自动读取")
+ {
+ int time = 1;//间隔
+ isSending = true;
+ //byte[] byte_read = new byte[] { (byte)station_id, 03, 00, 00, 00, 24 };
+ //byte[] nr_crc = new byte[2];
+ //nr_crc = Crc16(byte_read, byte_read.Length);
+ //List data = byte_read.ToList();
+ //data.AddRange(nr_crc);
+ //string list = tools.byteToHexStr(data.ToArray());
+ //byte[] bytea = tools.ConvertHexStringToBytes(list);
+ //Time_Send(time, bytea);
+
+ timer_Read = new System.Threading.Timer(new System.Threading.TimerCallback(Time_Send), null, 0, 1000);
+ button11.Text = "停止";
+ }
+ else if (button11.Text == "停止")
+ {
+ timer_Read.Dispose();
+ isSending = false;
+ button11.Text = "自动读取";
+ }
+ }
+
+ ///
+ /// 定时发送数据
+ ///
+ ///
+ ///
+ //private async void Time_Send(int time, byte[] message)
+ //{
+ // while (isSending)
+ // {
+ // _client.SendData(message);
+ // //间隔
+ // await Task.Delay(1000 * time);
+ // }
+ //}
+
+ private void Time_Send(object sender)
+ {
+ byte[] byte_read = new byte[] { (byte)station_id, 03, 00, 00, 00, 24 };
+ byte[] nr_crc = new byte[2];
+ nr_crc = Crc16(byte_read, byte_read.Length);
+ List data = byte_read.ToList();
+ data.AddRange(nr_crc);
+ string list = tools.byteToHexStr(data.ToArray());
+ byte[] bytea = tools.ConvertHexStringToBytes(list);
+ _client.SendData(bytea);
+ }
+
+
+ ///
+ /// 远程控制
+ ///
+ ///
+ ///
+ ///
+ ///
+ private void Control(int kind, int Sensor_Id)
+ {
+ byte[] byteaq = new byte[] { (byte)station_id, 16, 00, (byte)kind, 00, 01, 02, 00, (byte)Sensor_Id };
+ byte[] nr_crc = new byte[2];
+ nr_crc = Crc16(byteaq, byteaq.Length);
+ List data = byteaq.ToList();
+ data.AddRange(nr_crc);
+ string list = tools.byteToHexStr(data.ToArray());
+ byte[] bytea = tools.ConvertHexStringToBytes(list);
+ _client.SendData(bytea);
+ }
+
+ private void textBox3_TextChanged(object sender, EventArgs e)
+ {
+ if (string.IsNullOrEmpty(textBox3.Text))
+ return;
+ station_id = Convert.ToInt32(this.textBox3.Text);
+ }
+
+ #region CRC校验
+ private static readonly byte[] aucCRCHi = {
+ 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
+ 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
+ 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
+ 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
+ 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
+ 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
+ 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
+ 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
+ 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
+ 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
+ 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
+ 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
+ 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
+ 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
+ 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
+ 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
+ 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
+ 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
+ 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
+ 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
+ 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
+ 0x00, 0xC1, 0x81, 0x40
+ };
+ private static readonly byte[] aucCRCLo = {
+ 0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06, 0x07, 0xC7,
+ 0x05, 0xC5, 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD, 0x0F, 0xCF, 0xCE, 0x0E,
+ 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09, 0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9,
+ 0x1B, 0xDB, 0xDA, 0x1A, 0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC,
+ 0x14, 0xD4, 0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3,
+ 0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3, 0xF2, 0x32,
+ 0x36, 0xF6, 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4, 0x3C, 0xFC, 0xFD, 0x3D,
+ 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A, 0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38,
+ 0x28, 0xE8, 0xE9, 0x29, 0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF,
+ 0x2D, 0xED, 0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26,
+ 0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60, 0x61, 0xA1,
+ 0x63, 0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67, 0xA5, 0x65, 0x64, 0xA4,
+ 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F, 0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB,
+ 0x69, 0xA9, 0xA8, 0x68, 0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA,
+ 0xBE, 0x7E, 0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5,
+ 0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71, 0x70, 0xB0,
+ 0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92, 0x96, 0x56, 0x57, 0x97,
+ 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C, 0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E,
+ 0x5A, 0x9A, 0x9B, 0x5B, 0x99, 0x59, 0x58, 0x98, 0x88, 0x48, 0x49, 0x89,
+ 0x4B, 0x8B, 0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C,
+ 0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42, 0x43, 0x83,
+ 0x41, 0x81, 0x80, 0x40
+ };
+ private static byte[] Crc16(byte[] pucFrame, int usLen)
+ {
+ int i = 0;
+ byte crcHi = 0xFF;
+ byte crcLo = 0xFF;
+ UInt16 iIndex = 0x0000;
+
+ while (usLen-- > 0)
+ {
+ iIndex = (UInt16)(crcLo ^ pucFrame[i++]);
+ crcLo = (byte)(crcHi ^ aucCRCHi[iIndex]);
+ crcHi = aucCRCLo[iIndex];
+ }
+
+ return new byte[] { crcLo, crcHi };
+ }
+
+
+ #endregion
+ }
+}
diff --git a/YTDX202303TCP/Form1.resx b/YTDX202303TCP/Form1.resx
new file mode 100644
index 0000000..3603b24
--- /dev/null
+++ b/YTDX202303TCP/Form1.resx
@@ -0,0 +1,1253 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
+
+
+
+
+ AAABAAEAgIAAAAEAIAAoCAEAFgAAACgAAACAAAAAAAEAAAEAIAAAAAAAAAABAMMOAADDDgAAAAAAAAAA
+ AAD/////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////7+/v/+/v7//v//////
+ /////////fz7//n28v/49O//+fXx//z59v/+/v7///////7////+/////v/+//7+/v/+/v7//v7+////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////7+fb/8ebc/+HGrv/Po3v/wYlW/72CS/+/hlH/xpRl/9Os
+ h//kzLX/9Ovj//38+////////v/+//3+/v/+/v7/////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////7///////////////z59//w49f/27ud/8GM
+ Wv+vZyX/plYN/6FOAf+gTAD/oEsA/6BLAP+gTAD/ok8B/6ZYD/+zbzD/yptv/+TOuP/28ez//v7+//7/
+ //////////////////////////////////////7/////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////v7+//7+
+ /v/+/////f7+//fy7f/kzbf/yZhr/7BqKf+jUgf/oEsA/6BMAP+hTQD/oE0A/6RSCP+uZiT/sm0t/6te
+ GP+iTwL/oUwA/6FMAP+hTAH/qFoS/7yCS//ZuJj/8OTY//z7+f///////v7+//7+/v/+/////v7+//7+
+ /v//////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////+/////v7+//Xu5//ewab/v4hU/6ldFv+hTQH/oUwA/6FN
+ AP+hTgD/ok4A/6FNAP+uZyX/06yJ/+zbzf/x5Nj/5s+6/8aTZP+mVw7/oU0A/6JOAP+gTQD/oUwA/6RU
+ Cf+zcDL/zqR8/+zay//8+ff//v////7+///+/v7//v7+////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////////n0
+ 7//ewaf/vIBK/6hZEf+gTQD/oU0A/6JNAP+iTgD/oU4A/6FNAP+hTAD/sWws/+PLtP/9+/r///////7/
+ ////////+fTw/9OsiP+oWhL/oUwA/6FOAP+iTgD/oE0A/6BMAP+jUAT/r2gm/8qccP/q2Mf//Pr4////
+ ///+/v//////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////v/////////+//////////v49f/mz7r/wIhU/6ZYD/+hTQD/oU0A/6FOAP+hTgD/oU4A/6FO
+ AP+hTQD/oU0A/7JsLP/kzrj//f39//7+///+/v7//v7+//7+/v//////+/j1/9Wxj/+pXBX/oU0A/6FO
+ AP+hTgD/oU4A/6FNAP+hTAD/ok4C/6xjH//JmWz/69rK//z7+f////////////7////+/////v//////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////v7+//7+/v/+/v7//v////38+//t3c7/yJhr/6ld
+ F/+gTAD/oU0A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU0A/6FMAP+xbS7/5s+7//7+/v/+//7//v7+////
+ ///////////////////+/////Pn3/9i1lf+qXxn/oUwA/6FNAP+hTgD/oU4A/6FOAP+hTgD/oEwA/6FN
+ Af+tYyD/zaF5/+3f0f/9+/r//v////7//v/9/v7//v7+///////+//7/////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///+/v7//v/+//7////17+j/17ST/7JtLf+iTwL/oUwA/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTQD/s24v/+XQu//+/v7//v/+//7//v/+/v7///////////////////////7+/v/+////+/r3/9q4
+ mP+qXhn/oUwA/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6BMAP+iTwT/sm0v/9Ouiv/y6N///v79//7/
+ /v/+/v7//v7+///+////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////9/Pr/6NTC/8CIU/+mVgz/oUwA/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU0A/7JuL//lz7n//f39//7////+//7//v7+//7+
+ /v///////////////////////v7+//7+/v/+/////Pr5/9q5m/+qXxn/oUwA/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FNAP+gTAD/pFMI/7l6Qf/fxKn/+fbx//7////+/v//////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////v7///7/
+ ///+////9/Hr/9Sui/+uZiP/oU0B/6FNAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6BN
+ AP+ybi7/5c+7//39/P/+/v7//v7+/////////////v/+/////////////////////////////v/+//7+
+ /////////Pr5/9u7nv+rYRz/oU0A/6JOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTQD/oE0A/6hb
+ Ev/FkmH/7NzM//39/P///////v7+///////+////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////+/////fz8/+vay//AiFX/o1IH/6BMAP+hTQD/oU0A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTQD/s3Ax/+bSvv/+/v7//v7+//7+/v////7/////////
+ //////////////////////////////////////////////7//v/+/////Pv6/93ApP+tZCD/ok0A/6JO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU0A/6JNAf+waSf/1bGP//bv6f/+/////v7+//7+
+ /v//////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////////r1
+ 8f/bu57/sm0t/6FNAf+hTQD/oU0A/6FNAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU0A/7Rw
+ Mf/n08D//v/+//7//v/+/v7//f7+//7+/v//////////////////////////////////////////////
+ /////////v/+//3+/v/+/////fz7/97Cp/+uZSL/oUwA/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU0A/6FMAP+kUwr/wIhU/+nXxf/8+/r//v//////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////06+H/zJ5z/6hbFP+gTQD/oU0A/6BNAP+hTgD/oU4A/6FN
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FNAP+zcDL/5tG9//7+/f/+/v7//v7+//7+/v/+/v7//v7/////
+ ///////////////////////////////////////////////////+/v7//v7+//7+/v/+/////f37/+DE
+ qv+uZSL/oEwA/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU0A/6FNAP+hTQH/sGop/9e0
+ k//48u3/////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////v////7//v/+/v7///7+///////+/v7/69vK/72C
+ S/+jUQb/oE0A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FNAP+hTQD/s3Ax/+fR
+ vf/9/f3//f7+//7+/v//////////////////////////////////////////////////////////////
+ ///////////////////////////////////+/v///fz7/+HGrP+uZiT/oEwA/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FNAP+gTAD/plcO/8WRYf/w49f//v////7//////v//////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////v7+//7+/v//////+/n2/9/Dqf+xbCz/oU0A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oUwA/7VyNf/o1cL//v7+//3+/v/+/v7///7+////////////////////
+ //////////////////////////////////////////////////////////////////////////////7+
+ /v/9/v///f38/+PKs/+xain/oU0A/6FNAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6JN
+ AP+hTQD/oU4B/7RyNP/iyrL//Pr4////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////9/v7//v////fy7f/TrIf/ql8Z/6FM
+ AP+hTQD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FNAP+1cjT/6tbE//7/
+ ///+/v7//v7+//7+/v///v7/////////////////////////////////////////////////////////
+ /////////////////////////////////////////v7+//7+/v///////v39/+TMtf+xbCz/oUwA/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU0A/6FNAP+hTQD/oUwA/6xhHf/Vr43/+PLs////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////v7///7+
+ /v/+//7//v/////////06+P/yZhs/6VWDf+gTQD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTQD/tXM1/+fUwf/+/v7//v7+/////////////////////v//////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////7//////v///v79/+TNuP+xayv/oU0A/6FOAP+hTQD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU0A/6FOAP+hTgD/oE0A/6ZXDf/Hlmj/8uje///////+/v///v7+//7+/v/+/v7///7/////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////+//7//f7+//7+/v/+////7+LV/8CIVP+jUQb/oU0A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU0A/7VyNf/n08D//f79//7+
+ ///+/v7//v//////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////v79/+TO
+ uf+ybS7/oUwA/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU0A/6JR
+ Bf+9gkz/7d7Q//7//v/+/v7//v7+//7+/v/+////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////////7+
+ /v/+//7//f39/+jVwv+4eT7/ok4B/6FNAP+hTQD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FNAP+1dTj/6dfF//7+/v/+/v7//v7+//3+/v/+//7/////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////3+/v/+/v7//v7+/+bRvf+0cDH/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU0A/6FNAf+1cjT/5c64//38+//+/v///v7+//7/
+ /v//////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////v////38+//iybH/sm0t/6FMAP+hTQD/oU0A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTQD/tnQ3/+vZyP///////v/+//7/
+ /v/+//7//v7+//7//v//////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////+/v///v////7/
+ ///+/////v7+/+fTwP+1cjb/oU0B/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/ok0A/6BMAP+vaCb/3sGm//v6+P/+/////v7+////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////+/v7//v7+//7/
+ ///8+/n/3cCl/65mI/+gTQD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTQD/oU0A/7Z1OP/p1sX//v////7+/v////7//////////////////v////n18f/o1cP/9u7n////
+ ///////////////////////////////////+/v7//v7+//Pp3//n07//9e/n//7+/v///v///v7+//7+
+ /v/+/v7//v7+//7+/v/+/v7//v/+//79/f/x5dr/4sqy//Xt5f/+///////+/+nVw/+1czb/oE0A/6FO
+ AP+hTQD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6BNAP+sYh3/2biY//z5
+ 9//+/////v7///3+/v/+/v7/////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////v7///7+/v/+////+/n3/9m5mf+rYRz/oEwA/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FNAP+2dTj/6dbE//7+/v/+/v7//v7+//7+
+ /v//////////////////////5Mu0/61jIP/XtJP///////////////////////////////////////7/
+ ///7+vj/zJ50/6lbE/+8gEj/38Oq//r28//+/////v7+//7+/v/+/v7//v7+//7////59vL/3L2h/7Z1
+ Of+nWRD/2LaX//7////+/////v7+/+jVw/+1dDf/oU0A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FMAP+pXBb/17OS//v59//+/////f7+//7+/v/+////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////v////r3
+ 9P/WsY//ql0W/6FNAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/t3Y7/+rYx//+/v7//v7+//7+/v/9/v7//v7+///////////////////////cvaD/o1IH/9Cl
+ fv///////////////////////////////////////v/+//z9+//bvJ//r2gn/6FOAv+nWhH/yptv//Pr
+ 4v/9/////v7+//7+/v/+////9Ovi/8mZbP+nWBD/ok8D/7VxM//o1MH//v////7+/v/+/v7//v7+/+nX
+ x/+2djv/oU4B/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6BM
+ AP+oWxP/1bGO//r49P/+/////v/+////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////v/+/v7//v7+///////69vL/0quH/6dZEf+hTQD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU0A/7d3O//r3Mz//v////7+/v/+/v7//v7+//7+
+ /v/+/v7//v/+/////v/+/////////92+of+lUwj/0KZ//////////////////////////////v////7+
+ /v///////v////39/P/w49f/zaB4/6tgGv+iTgP/wIpW//Pr4v/+/////v////Hm2/+/hlH/ok4D/6xh
+ HP/PpHz/8ufc//7+/v/+//7//v/+//7////+/////v///+vay/+5ej//oU4B/6FNAP+hTQD/oU0A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FMAP+nWhL/1K+L//r39P/+/////v7/////
+ ///+//7////+////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////v7+//7+/v/+////+vby/9Gp
+ g/+mVw//oUwA/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6JN
+ Af+3djz/6tnJ//7////+/v7//v7+//7+/v/9/v7//v7+//7/////////////////////////3L6i/6RT
+ CP/Qp4D///////////////////////7////+/v7//v7+///////////////////////8+vj/4Mat/7Jt
+ Lf+iTgP/yptv//r49f/17eX/wotY/6JOA/+1cjX/48my//z6+P/+//////7+//////////////////7+
+ ///+/v///v///+zczf+5ekD/ok0B/6FNAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6BMAP+oWxT/1rKR//v59//+/////v/+//7+/v///v7/////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////+/v///v////r28//RqoX/p1gQ/6FMAP+iTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+iTgH/t3g8/+rYx//+/v7//v7+//7+/v/+//7//v7+//3+
+ /v/+/v7/9u/n/+jUwf/m0Lz/5tG8/+fSvf/NoHf/pFIG/8SPXv/n0r3/59G8/+bRvP/m0bz/7t/R//z6
+ +P/+/v7////////////////////+//7+///9/f3/48qz/61kIP+oWxT/38Oq/9Gpg/+kUQf/tHEz/+nX
+ xf/+/v3//v////7+/v/+/v7//////////////////v7+//3//v/9/v7//v///+zczf+6e0L/ok4B/6FN
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU0A/6BNAP+pXRf/27ue//38
+ +//+//7//v/+///+/v//////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////v////7////6+PT/062J/6dZ
+ Ef+hTAD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4B/7h5
+ Pv/r2sr//v7+//7+/v/+/v7//v/+//7//v/+/v7//v////fy7f/GlGX/qV0V/6haEf+nWRL/qFkS/6VV
+ C/+hTgH/pFQI/6haEf+oWhH/qFoR/6haEv+ybCz/5c65/////////v///////////////////v7///7/
+ ///9/Pv/062I/6RSBv+ybi7/q2Id/6peGf/ky7X//v////7+///+//7//v7+//7+/v//////////////
+ //////7//v7+//7+/v/+/v7//v///+3dz/+6fUT/ok4C/6FNAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU0A/6FMAP+sYx7/4Mat//39/f/+/v7//v7+////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///+//7//v7+//7+/v/9////+/n3/9aykP+nWhL/oEwA/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/ok0A/6FNAf+4eT//7N3O//7////9/v7//v7+////////////////////
+ ////////8OLW/65mI/+nWBD/vIFK/7+GUP+/hlD/sm8v/6FPAf+yayv/xJBf/8WQYP/Djlz/rmUi/6BM
+ AP/TrIj//v7+//7+/v/+/v7//v/+//7+/v/+/v7//v7+///////z6d//sm4v/59LAP+iTwL/zJ91//v6
+ +P/9/f7//f39//39/f/+/v7//v7+///////////////////////////////////////+//7//////+7h
+ 1P+8gEn/ok4D/6FNAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6BN
+ AP+wain/5c+6//39/f/+/v7/////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////7//v/+/v7//f7+//39/P/cvaD/qV0X/6BM
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+iTgH/uHk+/+zd
+ zf///////f/+//3+/v/+///////////////////////////////v4dT/rGIe/7d4Pf/17eb/+vby//r3
+ 8//Ztpf/o1IG/8yfdf/8+/n//Pr5//r18f/EkF//oEwA/9Cog//9/f3//v/+//7////v4tf/062J/8+l
+ ff/PpX7/z6V+/86kfP+xair/oEwA/6VTCP/Bilf/z6Z+/8+lff/PpX3/z6V9/+LJsv/9/fz/////////
+ //////////////////////////////7+/v/9/v7//v///+/i1v+9g0z/ok4C/6FNAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FNAP+2dDj/69rK////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////7///7+/v/+/v//5M23/65mIv+hTAD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/ok4B/7l6QP/r2sr//v////7+/v/9/v7//v7+///+/v//////////////
+ /////////////+/h1P+sYh3/uXxC//r39P///////////92+of+kUgf/zqJ5//7////+////+/r4/8WT
+ Y/+gTAD/0aiD//79/f////7//v///9azkv+kVAn/oU4A/6FOAf+hTgH/ok4B/6JOAf+iTgD/oU4B/6JO
+ Af+iTgH/ok4B/6JOAf+gTAD/vH9H//v49f///////////////////////////////////////v7+//3+
+ /v/9/v7//////+/j1v+9g03/ok8D/6FNAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FNAf+8gEn/8ubc////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////v////7////+/////////+3bzP+1czb/oU0A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU0A/6FOAf+5e0H/69zN//7/
+ /v/+//7//v7+//7+///+/v7//v//////////////////////////////7+HU/6xiHf+5fEL/+vf0////
+ ////////3b6i/6NSBv/Ponr////////////8+/n/xpNk/6BMAP/QqIP//f39//7//v/+////7+HU/9Kq
+ hv/No3v/zaN7/86je//PpHz/voRN/6JOAP+zbi7/zaB3/8+kfP/PpHv/z6R7/8+ke//iybL//fz8////
+ /////////////////////////////////////////v7+//7+/v/+//7//v////Dk1/++hE7/ok8D/6FN
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTQD/oU0A/6JPAv/EkF//+PLs////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////////7+
+ /v/+/v7//f7+//7////y6N//vYNN/6JOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6BNAP+hTQH/unxD/+3f0f/+/////v7+//7+/v//////////////////////////////
+ /////////v7+//7////u4dT/rWMf/7FsK//hx67/5c+6/+bPu//LnHH/olAE/76ETv/fxKr/4MSr/93A
+ pf+4eT//oE0A/9Gqhf/+/f3//v7+//3+/v/+/////v7+//3+/v/+/v7//v7+///////bvaD/ok4B/8WQ
+ YP/79/T////////////+//7//v79//7+/v/+/v7/////////////////////////////////////////
+ ///////////////////+/v7///////Hm3P/AiFX/olAE/6FNAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU0A/6NSB//Oonn/+vfz//7////+/v//////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////v7+//7+/v/+////+fTv/8mabv+jUQX/oU0A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTQD/oU4B/7p7Qf/u39H//v////7+
+ /v/9/v7//v7+///////////////////////////////////////+//7//v////Lp3/+2dDf/oU4B/6dY
+ D/+oWRD/p1kQ/6RTCf+iTQD/ok8D/6VTCP+lUwn/pFMJ/6FPAv+kVAn/27ue///////+/v7//v7+//7+
+ /v/+/v7//Pr4//v49f/7+PX//Pr4/9q5mv+hTgD/w41c//jx7P/8+ff//Pn2//z59//9/fz//v7+//7+
+ /v////////////////////////////////////////////////////////////7+/v/+/v7///////Lo
+ 3v/Ci1j/o1AE/6FNAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU0A/6ha
+ Ev/YtpX//Pr5//7/////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///+/v7//v7+//39/P/ZtpX/plgP/6FNAP+iTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAf+5fEL/7N3N//7////+/v7//v7+//7+/v/+//7/////////////////////////
+ //////////////7//v/+/v7//Pv5/+HHrv/GlGX/woxa/8KMWv/CjFr/tnU5/6JPA/+xbS3/w41b/8KM
+ Wv/Djl3/xJFh/9GphP/06+P//v////7+/v/+/v7//v///+rZyP/Gk2b/w45c/8ONXf/Dj17/tnY6/6FN
+ AP+uZiP/wYtZ/8OOXf/Djl3/w49e/97Bp//8+/r//v7+////////////////////////////////////
+ /////////////////////////v7+//7//v/+/v7///////Pp3//Ci1j/o1EF/6FNAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU0A/65lIv/jyrP//v7+////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////7+/v//////6NTB/65lIv+gTQD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgH/uXtC/+vczf/+/////v7+//7+
+ /v///v///v/+/////////////////////////////////////////////v///////v///////v79//v5
+ 9v/69/P/+/f0//v49v/auJn/o1EG/82heP/7+PX/+/f0//v49P/7+PX//fz6///////+/v7//v7+//7+
+ /v/+////2LeX/6RTCP+iTwP/ok8D/6JQA/+iUQT/o1IG/6NRBf+iUAP/olAD/6JQA/+iTwH/xpNk//r3
+ 9P/+/v///////////////////////////////////////////////////////////////////v/+//7/
+ //////////////Pp3//DjFv/o1EF/6FNAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU0A/7V0N//u3tH///////7+///+//7/////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////Pp3/+6fkb/oU0A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTQD/oU4B/7l7Qv/t3tD//v////7+/v/+/v7/////////////////////////////////////////
+ /////////////////////////////////////////////////////////////+nWxf+8f0b/4MSr////
+ ///////////////////////////////////+/v7//v7+//7////27uf/4Mav/97Bpv/ewaf/38Gn/9/C
+ p//fwqf/38Kn/9/Cp//fwqf/38Kn/+DDqf/w4tb//f39//7+/v//////////////////////////////
+ //////////////////////////////////////////////7//v/+/v7//v////Tr4v/EkGD/o1EG/6FN
+ AP+hTQD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FNAP+iTQD/oU0A/7+HUv/27+j//v////7+
+ /v//////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////69/T/zJ50/6NRBf+hTQD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAv+6fEP/7d/S//7////+/v7//v7+//7/
+ /v/+//7/////////////////////////////////////////////////////////////////////////
+ ///////////////////+/////Pz7//fx6//8+vn///////////////////////////////////////7/
+ /v/+/v7//v7+////////////////////////////////////////////////////////////////////
+ ///+/v7//v////7/////////////////////////////////////////////////////////////////
+ //////////7+//7+/v/+/v7//v////Xt5f/Gk2T/pFEH/6FNAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+gTQD/oU0A/6FOAP+hTQD/o1EF/82hef/69/T//v//////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////v7+/9/Dqf+qXhj/oU0A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTwL/un5G/+3f0f/+/////v////7+/v/+/v7//v/+////////////////////////////////////
+ /////////////////////////////////////////////////////////////////v/+//7///////7/
+ /v///////////////////////////////////////v7+//7//v/+/v7//v7///7//v/+//7//v7+//7/
+ ///////////////////////////////////+//7///7+//7+/v/+/v7/////////////////////////
+ ///////////////////////////////////////////////////+//7//v7+//7+/v/+/v7///////Xu
+ 5v/Gk2T/pFIH/6FNAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6BOAP+hTQD/oU4A/6FOAP+hTQD/qFwU/9y8
+ oP/9/fz//v//////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////+//7//v/+//7////w49j/t3Y6/6FNAP+iTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+gTQD/oU4B/7p+Rv/s3tD//v////7////+/v//////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////+/v7///////Xt5v/GlWf/pFIH/6FNAP+hTQD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTQD/smwt/+nXxf/+/////v7+//7+/v///v7/////////
+ //////////////////////////////////////////////////////////////////////////////7/
+ /v/+////+/j1/8mabv+iTwL/ok0A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU0A/6FO
+ Af+6fkX/7t/S//7////+/v7//v7+//7/////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////////7+
+ /v/9/v7//v////bu5//ImGv/pFMJ/6FNAP+iTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTQD/voRO//Tr5P/+/////f7+//7+/v//////////////////////////////////////////////
+ /////////////////////////////////////////v/+//7////gxqz/p1oS/6FNAP+hTQD/oU0A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgH/un5G/+/i1v///////v7+//7+/v/+/v7//v/+////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////7///7+/v/+/v7///////fx6//Km3D/pVQK/6FN
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTQD/oU4A/6FNAP+jUQX/zqN7//v59//+/////f/+////
+ ///////////////////////////////////////////////////////////////////+/////v////7+
+ /v/+////8uje/7l5Pv+hTAD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU8C/7p+
+ Rf/t39H////////+/v/+/v7//v/////////+//7/////////////////////////////////////////
+ /////////////////////////////////////////////////////////v7+//////////////7+////
+ /v/+/v7//v7+//7+/////////////////////v7//fz7//v28//38ev/9u7n//bt5f/27+j/+fPt//v4
+ 9v/+/fz//v/+/////////////v////7+/////v7////////+///+/v7//v7+//7//v//////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////7+/v/+/////v////jy7f/LnHH/pVQK/6FNAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FNAP+pXBb/4cev//7////+//7/////////////////////////////////////////
+ //////////////////////////////3//v/+/v7//v////v69//PpHz/pFIG/6JOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU0A/6FOAf+7fkb/7N7Q//3////+/v///v7+//7/////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////+/v7////////////+//7//v7+//7//////////f38//fw6v/r2sr/38Gn/9Gp
+ hP/Hlmj/wYhU/7yASP+5e0L/uHpA/7l8Q/+9gkz/woxZ/8mabv/Ur4z/4smx/+/g0//69fH//v7+////
+ ///+/////v7+//7+/v/+/v7//v7+////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////+/v7///////fx
+ 6//LnnP/pVUL/6BNAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FMAP+3dTn/8OTY////
+ /////////////////////////////////////////////////////////////////////////v7+//7+
+ /v/+////5tC8/6xjH/+gTQD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgH/u31F/+7e
+ 0f/+/////v7+//7+/v/+/v7/////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///+/f3/9e3l/+LIsf/LnHL/uHk+/6thHP+kUwn/oU4C/6BLAP+gSwD/oUwA/6JNAP+hTgD/oU0A/6FL
+ AP+fSgD/oEwA/6NQBP+mVw3/r2cl/7yBSv/RqIP/6NTC//j08P/+/v7//v////7+/v/+/v7/////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////v////7+/v/+/v7///////fx7P/MoHb/plUL/6FNAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU0A/6JQBP/JmW3/+vby////////////////////////////////////
+ ///////////////////////////////////+/v7//v////bv6f+/h1P/oE0A/6BNAP+hTQD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU8B/7uASf/v4tb//v////7+/v/+//7///////7+/v////7/////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////7+Pb/69vM/9Cngf+0cjT/pVUK/6BMAP+hTQH/pVYN/61k
+ IP+4eD3/wYpX/8mZbf/PpX7/062J/9Wvi//Tq4b/zqN6/8eVZ/+/hlH/tHI2/6tfGv+kUwj/oEwA/6FM
+ AP+oWxP/u39I/9i2l//x5tv//Pz7//7////+////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////+/////v7+//7/
+ /v/+/v7///////j07//PpHz/pVcN/6BNAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oE0A/6ha
+ E//dv6T//v79//////////////////////////////////////////////////////////////////7+
+ /v/9/f3/2bia/6VWDf+hTQD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTQD/oU0A/6JPAv+8gEn/7+PW////
+ ///+/v7//v7+////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////7+/v/9/v7//f7+///////9+/n/6tnI/8qb
+ b/+uZiP/oU0C/6FNAf+pXRb/untB/82gd//gxKv/7uDT//fv6P/8+vf/////////////////////////
+ /////////v7+//v38//07OP/69nJ/9u6nP/Hlmn/tXI0/6ZWDf+gSwD/o1EH/7RxNP/Tron/8ufd//7+
+ /f///////v7+//7+/v//////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////+/////v////n18f/PpX7/plYN/6FN
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oE0A/7Z1OP/w49f//v////7+/v///v//////////
+ //////////////////////////////////////////////Hk2f+0cTT/oEwA/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+jTgL/vYFJ/+7g0////////v7+//7+/v/+/v7/////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////v////3+/v/+/v7/8+nf/9Gog/+vaCb/oU0C/6JOA/+wain/y51y/+XOuP/27eb//fz7////
+ //////////////////////////////////////////////////////////////////////////////v5
+ 9//y593/3sGm/8KNW/+rYBr/oEwA/6RRB/+3dzz/3L2f//jz7v/+/////v//////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////7+/v/+/v7///////n18P/Qpn//p1cP/6FNAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/olAE/8yfdf/8+ff//v7///7/////////////////////////////////////////////////
+ ///9/Pv/zqN6/6JPAv+hTQD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4B/7yASP/u4dP//v////7/
+ /v/+/v7//v7+//7/////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////Pv6/+PLtP+6e0L/o1EH/6FM
+ Af+vaSf/0aeB/+7f0v/8+vj///////7////+/////v7+//7//v//////////////////////////////
+ ///////////////////////////+//7+/v/+/v7//v7+///////+////+fXx/+fTwP/HlWf/qV0W/59L
+ AP+nWBD/xZBf/+3f0f/+/v7/////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////v7+//7+/v/9/v7//v////n1
+ 8P/QqIL/p1gP/6FNAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+gTQD/ql4Y/+XOuf/+/////v//////
+ /////////////////////////v7+//7+/v/+/v7//////+jVw/+sYx//oEwA/6FOAP+hTgD/oU4A/6FO
+ AP+hTQD/oU4A/6FPAf+8gUr/8OPX//7////+/v7//v7+//7+/v/+////////////////////////////
+ /////////////////////////////////////////////////////////////////////////v////7+
+ /v/+/v////////jy7f/SqoX/ql8Y/6BLAP+pXBX/yptu/+/g0//9/Pv///////7////+/v7//v////7/
+ /v/+/v7//////////////////v///////////////////////////////v////7+/v/+//7///7///7+
+ ///+/v7//v7+//7+/v////////////v59//m0b3/voRO/6VUCv+hTQH/sW0t/+DFq//9+vj//v////7+
+ /v////7/////////////////////////////////////////////////////////////////////////
+ /////////////////////v7//v7+//7//v/+/v7//v////r28//TrIf/qFkR/6FNAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTAD/vYNO//fx7P///////v7///7+/v////7////////////+/v7//v7+//7/
+ ///59O//xI9d/6FNAP+hTQD/oU4A/6FOAP+hTgD/oU4A/6FNAP+iTgL/vIBI//Dj1//////////+//7+
+ /v//////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////+/v///v7+//7////z6eD/xpVm/6VSCP+iTgP/t3Y6/+HF
+ rP/8+ff//v////7////////////////////////////////////+//////7///7+/v/+/v///v7+////
+ /v////////7////+/v/+/v7//v7+//7+/v///////////////////////////////////v7//v7/////
+ ///38Or/1LCN/65mJP+gTAD/ql4Y/9WvjP/59O///v/////+////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /v/+/v7//v////r49f/Urov/p1oR/6FNAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FNAP+lVgz/2rmb//7+
+ /v/+/v///v7+//7+/v////////////7////+/v7//v///+DFrP+pXBX/oU0A/6JNAP+hTgD/oU4A/6FO
+ AP+hTgD/ok8C/72BSf/u4dP//////////v/+/v7//v7+////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////////7+
+ /v/+////8OPX/8CIVP+iUAT/pFMK/8SQX//v4dT//v7+//7+/v/9/v7//v//////////////////////
+ //////////////7+///+/////////////////////v////7////////////////////+/////v//////
+ ///////////////////////////////+///+/v7//v/+//7////9+/r/5s+7/7l6QP+hTQH/p1gQ/86j
+ ev/38uz/////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////+//7+/v/+/v7//v////r49P/Ur4v/qFsT/6FM
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6BNAP+3djv/8ebc///////+/v7//////////////////v/+//7/
+ ///17ub/vYJM/6FNAP+hTQD/oU4A/6FOAP+hTgD/oU4A/6FOAf+8gEn/7uDS//7////+/v7//v7+//7+
+ /v/+//7/////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////Dl2f++hE//ok4C/6ZWDf/Oo3z/9vDp//7/
+ ///+/v7//v7+//7+/v/+//7//////////////////////////////////fv6//Ts5P/r2sn/48my/9u7
+ nf/Xs5L/1rOR/9i4mf/fxKv/6NTB//Hm2//7+PX//////////////////////////////////v/+//3+
+ /v/+/v7//v7+//7+////////8OPX/8CIVP+iTgP/pVQL/8yfdv/59fD/////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////v///v7+//7+/v/+/v7//v////r39P/VsY3/qVwU/6BNAP+hTgD/oU4A/6FOAP+hTgD/oU0A/6VT
+ CP/Urov//fz8//7+/v/+//7////////////+//7//f39/9m4mv+lVgz/oU0A/6FNAP+hTQD/oU0A/6FO
+ AP+iTgH/vIBJ/+/i1f///////v7+//7+/v///v//////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////+/v7//v/+////
+ ///06+L/v4dS/6FOAf+nWBH/06yI//r49P/+/////v/+//7+///+/v7//v/+//7+/v/+//7//v//////
+ ///8+ff/7+LV/9q5m//DjVr/s3Ax/6pfGP+lVAr/o1IG/6NRBf+jUQX/o1IG/6RTCP+oWhL/r2oo/7yB
+ Sv/Tq4b/6dbE//j07//+/v7//v////7+/v/+/v7//v7+//7+/v/+/v7//v////7//v//////9Ovj/8WQ
+ YP+jUQX/pFMJ/9CmgP/7+PX//v////7+////////////////////////////////////////////////
+ ///////////////////////////////////////////////////+/v///v/+///////+/v7//v////v5
+ 9v/XtJP/qV0W/6FNAP+hTgD/oU0A/6FOAP+hTgD/oEwA/7RyNf/w5Nn//v////3+/v////////////7/
+ ///y6N7/tnU5/6BMAP+hTgD/oU4A/6FOAP+hTgD/oU8C/7x/SP/w49j///////7+/v/+/v7/////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////7+/v/+////+PPu/8eWZ/+iTgL/p1kQ/9OsiP/7+fX//v7///7+
+ /v////7////////////+/v7//v/+//7////69vP/5tC8/8iWaf+vZyT/o1AE/6BMAP+gTAD/oE0A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FNAP+gTAD/oEwA/6FNAf+pXRb/voVP/92/o//17uf//v7///7/
+ /v/+/v7//v7+//7+/v//////////////////////9ezk/8SQX/+iUAT/p1gQ/9i2lv/8+/r//v7/////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////+//7//v////z6+P/Zt5j/qV0X/6FMAP+hTgD/oU4A/6FO
+ AP+hTQD/o1IH/9axj//9/fz//v7//////////////v7//9axj/+jUQX/oU0A/6FOAP+hTgD/oU4A/6JP
+ Av+8gEn/7+HU//7////+/v7//v7+//7+/v//////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////7+//z6
+ +P/Ur4v/plUL/6VTCf/NoXj/+fXx//7////+/v7//f7+//7+/v/////////////////+/fz/7NzM/8eW
+ aP+qYBr/oU0B/6FMAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU0A/6FNAP+hTAD/plcN/72CS//iybH/+vf0//7////+/v7//v/+///////////////////+
+ /v/+////8ujd/76ETv+hTQD/r2Ui/+TNt//+//7/////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////v7+//3+
+ /v/+/v7//v////z6+P/Yt5j/ql8Z/6FNAP+hTgD/oU4A/6FOAP+gTAD/t3g9//Xt5P//////////////
+ ///07OT/tXQ3/6BMAP+hTgD/oU4A/6FOAP+hTgH/u39H/+7g0//+/////v7+//7+/v/+/v7//v/+////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////7////+////5M64/61kIP+hTQD/woxa//bu6P/+/////f/+//7/
+ /v/+/v7//v7+////////////+vby/9m5mv+ybS3/ok8C/6FNAP+hTQD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTQD/oU0A/6FOAP+hTQD/oUwA/6pe
+ Gf/MnnT/8+nf//7////+/v///////////////////v/+//7+///+////7N3O/7NvMf+hSwD/untC//Lm
+ 3P//////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////v7//v7+//7+///+/v///v////z59//auJn/q2Aa/6FN
+ AP+hTgD/oU4A/6FNAP+lVgz/4MWr///////+/v7//v///9u8nv+kVAn/oU0A/6JOAP+hTQD/oU4B/7t9
+ Rf/t39H//f////7+/v/+/v7/////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////v7+//7+/v/+/v7//v////Tr
+ 4v+7gEj/oEsA/7NwMf/u4dT//v////7+/v/9/v7//v7+//7+/v/+/v7//v////Xt5v/KnHH/p1gQ/6BN
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oE0A/6NRBf+8gEj/7NvL//7+/v/+/v7//v7+//7+
+ /v/+/v7/////////////////4MWs/6lbFP+iTwP/zaB3//v59v////7//v7+//7//v//////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////+/v7//v7///z6+P/cu53/rGAb/6BNAP+hTgD/oU4A/6BMAP/FkmL/+/n3//7/
+ ///59PD/v4ZR/6FMAP+hTgD/ok0A/6FOAP+5fEL/7+HU//7////+/v7//v7+////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////7+//7+/v/8+/r/0qyI/6NRBv+nWBD/3sKn//7////9/v7//v7+//7+
+ /v/+//7//v7+//7////z6eD/wotY/6JPBP+hTQD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FMAP+zbzD/59O///3+/f/+//7//v7+//3+/v/////////////////8+ff/zaF4/6JQ
+ BP+qXhf/5c65//7////+/v7//v7+////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////7//v/+/v7//v////38
+ +//dv6T/rGIe/6FMAP+hTgD/oUwA/69pJ//v4tX//////+vayv+tZCD/oUwA/6FNAP+hTgH/t3k//+3d
+ zv/+/////v7///7+/v/+/v7//v/+////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////7+///+/v7//v///+3f
+ 0f+wain/oU0A/8aTZP/69vL//v/////+/v///v7//v7+//7+/v/+////8+ri/8KMWv+iTwP/oU0A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FMAP+zcDL/6NPB//7+
+ /v/+/v7//v7+///////////////////////x5dn/t3Y6/6BLAP/Ah1L/+fTv///////+//7/////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////v7+//7+/v/+/v7//v////38+//dv6P/rWMg/6BNAP+hTQD/pVcN/9y9
+ oP/+////2rqb/6RTCP+hTQD/oU0A/7Z1OP/q2cj//v////3+///+/v///v/////////+//7/////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////7+//7+/v/9/Pv/zaF4/6FNAP+uZiP/6tfG///////+///////+//7+
+ ///+/v7//v////fy7f/JmGv/o1IG/6FNAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FNAP+4eD7/7uDS//7////+//7///////////////////////79
+ /f/auZr/plYM/6dYD//hxqz//v////7+/v//////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////+//7///7+////
+ /////v7//v7+//z7+v/ewaX/rmUh/6FNAP+iTwP/yptv//z6+P/LnXP/ok8B/6BNAP+qXxn/4ciw//3+
+ /v/9/v7//v7+////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////v////////Di
+ 1v+vaCb/oU4B/8uedf/7+ff//v////////////////////7////8+/r/1rKQ/6ZWDv+hTQD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6JP
+ Av/DjVv/9/Dr//////////////////////////7//v////Xt5f+6fkX/oUwA/8GIVP/59O//////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////7////+/v7//v////38+v/dwKT/ql8Y/6FN
+ AP+5e0L/+vbz/8GKV/+hTAD/oU0A/8GKV//59fH//v////7+/v/+/v7/////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////7+/v/9/f3/06yJ/6JPAv+tZiL/6tnI//7////+/v7/////////
+ /////////////+fTwP+tZSH/oE0A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU0A/6RTCP/VsI7//f38//////////////////7+
+ /v/+/v7//v///9q6nf+kVAn/ql4X/+XPuv//////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////7///3+/v/+/v7//v////r39P/EkF//oU0A/61kIf/59fH/vYRO/6BLAP+jTgL/z6V9//39
+ /f/+/v7//v7+//7+/v//////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////////Xu
+ 5/+5ekD/oEwA/8aSYv/7+PX///7///7+/v/////////////////59O//wIlV/6FMAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTQD/oEwA/69oJv/t3s///////////////////v7+//7+/v//////8+ri/7RxNP+hTQD/y55z//37
+ +P//////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////v7+//3+/v/+/v7//f38/8+l
+ ff+hTgH/qVwV//r28v/AiFT/oEsA/6FOAP/Il2r/+/r4//7////+/v7//v7+///+////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////5M24/6lcFP+mVg3/4MSr///////+/v7//v7+//7/
+ /v/+/v7//////9/Eq/+mVw3/oU0A/6FNAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/8qbcP/8+/n//v7+//7+
+ /v/+//7//////////////v7/zqJ5/6BMAP+1dDf/8+je//7////+/v7//v/+////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////7////+/v7//v7+//7////48+7/wIdU/6FMAP+nWRH/+/n2/8iYa/+hTgH/oEwA/7Ft
+ Lf/t3c////////7+/v/9/v7//v//////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////////79
+ /P/PpX3/oU4B/7NwMf/z6uH//////////v/+/v7//v7+//7////49PD/voVP/6BMAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6JNAP+hTAD/rmYj/+zbzP///////v7+//7////////////////////m0b3/p1gP/6da
+ Ef/iybL//v////7+/v/+//7/////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////3+/v/9/v7//v39/92+
+ ov+pWxX/oE0A/6haEv/+/v7/17SV/6RSB/+hTQD/ok8C/8GIVf/y6N3//v////7+/v////7/////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////9/Hr/72BSv+gSwD/x5Vn//38+//+/v7//v7+//7+
+ /v/+/v7//////+XPuv+oXBX/oUwA/6FOAP+hTQD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU0A/6FOAP+jUAT/0KeA//38
+ +//+/v7//v/+//////////////////bu5/+2dTj/oEwA/9Ckff/9/Pv//v7+//7+/v//////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////v7///39/P/iyLD/r2gl/6FNAP+hTQD/q18a///////p1sX/rGId/6FN
+ AP+iTQD/o1AD/8CHU//x5dr//v////7//////v7//v7+///+////////////////////////////////
+ ///////////////////////////////////////////////////////////////////+///////+////
+ ///u39H/rmck/6JPAv/bvJ/////////+/v/+//7//v7+//7+/v/9/Pv/zJ91/6JOAv+hTQD/oU4A/6FN
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+iTgD/oU4A/6FMAP+5eT//9Ozk//7//////////////////////////Pv6/8eX
+ aP+gSwD/voRP//jz7//+/////v/+////////////////////////////////////////////////////
+ //////////////////////////////////////////////7+///+/v7//v////7////+/v3/4smy/69n
+ Jf+gTQD/oU4A/6JOAP+3dzz//v////jz7v++hE7/oUwA/6FNAP+hTQD/ok8C/7+FUP/w5Nj////////+
+ /v/+/v7//v7+////////////////////////////////////////////////////////////////////
+ //////////////////////////////7+/v/+//7//v///+LIsP+mWA//qFoS/+vayv//////////////
+ ///+/v7//v////Xs5f+5eT7/oEwA/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU0A/6pd
+ F//m0Lz///////7/////////////////////////2LeX/6JPAv+xayr/8uje///////+/v7//v//////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////v7+//7+/f/+/v7//v79/+TMtv+wair/oEwA/6FOAP+iTgD/pFIG/8+ke//+/v7//v///9m3
+ mP+kUgf/oU0A/6FOAP+hTQD/ok8D/72DTP/v4dX//v////7+/v/+/v7/////////////////////////
+ /////////////////////////////////////////////////////////////////////////v////7+
+ /v/+/v7/1bGP/6JPAv+ybi//9Ovh///////////////////+/v/+////6dbE/6tgG/+hTAD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTQD/o1EF/9Wvjf/+/v7//v7+////////////////////
+ ///lz7r/p1kQ/6ldFv/p1sT///////7+/v//////////////////////////////////////////////
+ ///////////////////////////////////////////////////+/v7//v7+//3+/v/kzLb/sWws/6FN
+ AP+hTgD/ok4A/6JNAP+rYBv/59TB//7+/v/+////8+rg/7RxM/+gTAD/oU4A/6FOAP+hTQD/ok8C/7t/
+ Rv/t3tD//v/+//7+/v//////////////////////////////////////////////////////////////
+ ///////////////////////////////////+//7//v7+//z8+//Mn3T/n0oA/7yASP/69vL/////////
+ ///////////+//7////bu57/pVUK/6FNAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTAD/xpNk//v49f///////////////////////////+3ez/+uZyP/pVMI/+DEq////////v7+////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////7////9/f3/5Mu1/7FrKv+hTQD/oU0A/6FOAP+hTgD/oEsA/76FUP/59fD/////////
+ ///+//7/1bCO/6NRBf+gTQD/oU4A/6FOAP+hTgD/oU0A/7l6QP/s28v//v////7//v/+/v7//v/+////
+ /v//////////////////////////////////////////////////////////////////////////////
+ /v//////+vj0/8SQYP+fSgD/w49e//z8+v///////////////////v///f79/8+lfv+iTgH/oU0A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6BMAP+7fkb/9vDp////////////////////
+ ////////8+rh/7RyNP+hTAD/2baX//////////7/////////////////////////////////////////
+ ///////////////////////////////////+/////v7+//7+/v/+/////v79/+PLtP+waSj/oU0A/6FO
+ AP+hTgD/oU4A/6FNAP+kUQb/2rqd///////////////////////y6N7/tXU5/6BMAP+hTgD/oU4A/6FO
+ AP+hTgD/oU0A/7h4Pf/r2sn//v////3+/v/9/v7//v//////////////////////////////////////
+ /////////////////////////////////////////v////7////49O//voZR/6BLAP/KnG///f38////
+ ///////////////////8+vj/x5Zp/6BMAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oEwA/7NvMP/z6eD////////////////////////////48ev/uHk//59JAP/SrIj//v////7+
+ /v////////////////////////////////////////////////////////////////////////////7/
+ /v///v3//v7+//7+/f/kzLb/sGoo/6FNAP+hTgD/oU4A/6FOAP+hTgD/oEwA/7JuL//x5tv//v//////
+ /////////v////39/f/Ztpf/pVUL/6FNAP+hTgD/oU4A/6FOAP+hTQD/oU0A/7d2O//p1sX///7///7+
+ /v/+////////////////////////////////////////////////////////////////////////////
+ /////////v////fx7P+7gEj/oEwA/86je//+/v3///////////////////////r28//DjVv/oEwA/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FNAP+gTAD/r2ck//Hl2v//////////////
+ //////////////j07/+7f0f/n0kA/8+lfv/+/v7//v//////////////////////////////////////
+ /////////////////////////////////////////v/+//7+/v/9/v3/5My2/7JrLP+hTQD/oU0A/6FN
+ AP+hTgD/oU4A/6FOAP+iTwL/zqJ6//z6+f/+/v/////////////+//7//v////Xt5f+8gUn/oE0A/6FO
+ AP+hTgD/oU4A/6FNAP+hTQD/oU0A/7VzNv/o08H//v7+//7//v//////////////////////////////
+ //////////////////////////////////////////////7+/v/+////9/Hr/7p+Rf+hTAD/z6V+//7+
+ /f//////////////////////+fXw/8GJV/+gSwD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6BMAP+uZSL/7+LW///////////////////////+////+fXw/72CS/+fSgD/zqJ6//7+
+ /v/+////////////////////////////////////////////////////////////////////////////
+ ///+/////f39/+TMtv+xayv/oU0A/6FOAP+iTQD/oU4A/6FOAP+hTgD/oE0A/61lIv/q2Mf//v////7+
+ /v////////////7+///+/v7//v///+HHrv+pXRb/oU0A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU0A/7Ju
+ L//lz7r//v7+//7//v/+/v7//v7+//7//v//////////////////////////////////////////////
+ /////////v7+//7////48uz/vIBI/6BMAP/Oonr//v39///////////////////////59fH/wotZ/6BM
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oEwA/65mIv/w5Nj/////////
+ //////////////7////48+//u39H/59KAP/Ppn7//v7+//7+/v//////////////////////////////
+ /////////////////////////v////7+/v/+/v7//v7+//7+/f/ky7T/sGko/6BMAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FNAP+iTgH/yZhr//r49f/+/////v7+/////////////v/+//3+/v/+////+vXx/8aT
+ ZP+iTgH/oU0A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU0A/7FsK//lzrj//v79//7+///+/v7/////////
+ /////////////////////////////////////////////////////v///v////j07/+/hlH/oEsA/8qb
+ cP/+/Pz//////////////////v////v49f/GkmP/oEwA/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+gTAD/sWwq//Lo3v////////////////////////////fx6/+5eT//n0oA/9St
+ if////////7+///////////////////////////////////////////////////////+/////v7+//7+
+ /v/9/v3/5M24/7FqKf+hTQD/oE0A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oE0A/61jH//n07///v////7+
+ /v/+/v7////////////+//7//f7+//3+/v//////69nJ/69mJf+gTAD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgH/oU0A/7FsK//jyrP//f39//7+/v/+////////////////////////////////////////////
+ ///////////////+////////+vf1/8SRYP+fSgD/w45d//37+v///////////////////////fz7/8uf
+ df+hTQD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6BMAP+4eD3/9e3m////
+ ////////////////////////8+nf/7RxM/+hTAD/2beY///////+/v7/////////////////////////
+ //////////////////////////////7////+/////v79/+TMtf+ybCv/oU0A/6FNAP+hTQD/oU4A/6FO
+ AP+hTgD/oU4A/6FNAP+iTgH/x5Zn//r39P/+//7//v7+//7+/v////////////7////+/v7//v7+//7+
+ ///9/fz/0quG/6NQBP+hTQD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU0A/7BpKP/hx67//f38//7/
+ ///+/v7//v7+//7//v////////////////////////////////////////7+//7+///9/Pv/zJ91/59K
+ AP+7f0f/+vby//////////////////7////+/v7/1rOR/6RSBv+hTQD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oEwA/8KLWP/59fD////////////////////////////t3c//rmYj/6VU
+ Cf/gxaz///////7+/v///////////////////////////////////////v7///7//v/+/v///v////7+
+ /v/kzLb/smwr/6FNAP+hTgD/oU4A/6FNAP+hTgD/oU4A/6FOAP+hTgD/oEwA/6xhHf/o1cL///////7/
+ /v/+//7//v7+///////////////////////////////////////07OT/unxD/6BMAP+hTQD/oU4A/6FN
+ AP+hTgD/oU4A/6FOAP+hTQD/oUwA/65lIv/ewqj//Pz7//7////+/v7//v7+////////////////////
+ //////////////////////////////7+/v/WspH/o1AD/7JtLf/z6eD///////////////////7+////
+ ///kzbf/qFsT/6FNAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+iTwL/z6V9//38
+ /P/+/v7//////////////////////+TNuP+mWA//qV0X/+nXxv///////v7+////////////////////
+ ///////////////////+/v7//v79//7+///+/f3/48u0/7BqKP+hTQD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FNAP+hTQD/y5xx//z7+f/+////////////////////////////////////////////
+ /////////v7+//7////ix6//ql0Y/6BMAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FNAP+hTgD/oUwA/6xi
+ Hv/dwKT//fv6//7////+//7////////////////////////////////////////////+/v7//////+PK
+ s/+nWRD/qFkQ/+vZyP////////////////////////////Hl2v+zbi//oEwA/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU0A/6dYD//fxKv//v////7+///////////////////+////17WV/6JP
+ Af+xbCz/8unf///////+//7///////////////////////////////////////7+/v/+/v7//f7+/+TM
+ tf+waSj/oU0A/6FNAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oEwA/7BoJ//t3tD///////7/
+ ///////////////////////////////////////////////////+/v7//v////r28v/Kmm7/o08D/6FN
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FNAP+hTQD/oEwA/6xiHv/cvZ///Pr5////////////////////
+ ////////////////////////////////////////7uDT/69oJv+iTwL/2rqc////////////////////
+ /v/+/v//+vf0/8SQYP+hTQD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+gTAD/sm4u/+/j
+ 2P/+/////v/+//////////////////z7+f/GlGb/oEsA/7+HUv/59PD/////////////////////////
+ /////////////////////////v////7+/f/kzLb/sWsq/6FNAP+hTQD/oU0A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+jUgb/0qqF//z8+v/+/v7/////////////////////////////////////////
+ /////////////////////////////+7g0/+0cjT/oEwA/6JNAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU0A/6xhHP/auZv//Pr4//7////+/v7//v7+////////////////////////////////////
+ ///38uz/vYJM/6BKAP/Gk2T//fz7//7+/v/+/v7//v7+//7+/v/+////3L2h/6VVCv+hTQD/ok4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FNAP/HlGb/+/j2///+///+/v//////////////////9e3l/7Rz
+ Nv+hTQD/0KaA//38/P/+/v7//v7+//////////////////7////+/v7//v7+//7////+/v7/5My2/7Js
+ LP+hTQD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oEwA/7h4Pf/y593//v////7+
+ /v///v///////////////////////////////////////////////////////////////////v7+/92+
+ ov+nWRH/oU0A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oUwA/6pdF//XtJP/+/n2//7/
+ ///+/v7///////////////////////////////////////79/f/Qp4H/ok8C/7NuLv/y6N////////7+
+ /v/+/v7//v7+///////z6eD/tXM1/6BMAP+hTgD/oU0A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6JNAP+hTQD/qFsT/+LK
+ sv/+/////v7+//7//v/////////////////lz7r/plYN/6haEv/jy7X///////7+/v/+/v7/////////
+ /////////v////7+/v/+/v///f39/+PLtP+xain/oU0A/6JNAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU0A/6FMAP+oWxP/3sGm//7+/v/+//7//v7+//7/////////////////////////////////
+ ////////////////////////////////////////+fby/8aUZf+hTgH/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6JOAP+hTgD/oUwA/6haE//VsY//+/j1///////+//7/////////////////////////
+ /////////////+bQvP+qXhf/pVUL/97Cp////////v/+//7+/v/+/v7//v7+//7+/v/TrYn/olAE/6FO
+ AP+hTQD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FMAP++hE//+PPu//7////+/v7//v7+/////////////v79/8ue
+ dP+gSwD/tnY6//Pq4P///////v7+//7////////////////////+/////v////7+/v/jy7T/sGko/6FM
+ AP+hTQD/oU0A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/ok8C/8aTZP/59fD//v////7+
+ /v/+/v7////////////////////////////////////////////////////////////////////////+
+ /v//////7uDT/7NvL/+gTAD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU0A/6lb
+ E//Urov/+vbz///////+/v///v//////////////////////////////9vDp/7t9Rf+gTAD/w49e//r2
+ 8//+/////v7///7//v///v7///////Ln3f+0cjT/oEwA/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6JOAP+hTAD/qFkR/+LI
+ sP///////v7///7////+//7////////////z6N7/s28w/6FOAP/OoXj//Pv5//7/////////////////
+ ///+//7//v////7////+/v3/5My2/7FrKv+hTQD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6BMAP+xayv/7NvM/////////v7//v7+//7+/v//////////////////////////////
+ /////////////////////////////////////////v7+///+/v/+/v7/27yf/6dYEP+hTQD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU0A/6haE//SqoX/+vby///////+/v7//v7+////
+ //////////////7+///+/v//1bCO/6JPA/+sYx//6NbE///////+/v7//////////////////v7+/9q6
+ m/+mVg3/oU0A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FNAP/FkmP/+vbz//////////////////7//v/+/v7//v///9m3
+ mP+kUwj/ql8a/+fRvv///////////////////////v/+//7+/v/+/v///v79/+TMtv+xbCz/oU0A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/ok4A/6JOAP+iTQD/pVQK/9m2l//9/f3//v//////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///+/v7//v7+//7////49fD/x5dq/6JQA/+hTQD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU0A/6dYD//Qpn//+fTw//7////+/v7//////////////////v/+///////w5Nn/sGoq/6FN
+ AP/Km2//+/j2//7////////////////////+////+PPu/8WSYf+iTwL/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+gTAD/tHEy/+7f
+ 0f///////////////////////v7+//7////06+P/uXtC/6BMAP/Ci1f/+fXw////////////////////
+ ///+/v7//v7+//39/f/kzLX/sWsq/6FNAP+hTQD/ok4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FN
+ AP+hTgD/oU0A/6FNAP/DjVv/+PTv//7////+//7/////////////////////////////////////////
+ //////////////////////////////////////////////7+/v/+/v7//v7+///////w49b/t3c8/6FN
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU0A/6VVC//NoXj/+PPv//7/
+ ///////////////////+/v7//v7+//39/f/Ppn//oU0B/6xjH//n08H///////////////////////7+
+ ///+////7+LV/7h6P/+hTQD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oEwA/6xhHf/hxqz//v39//7+/v/////////////////+//7//f38/9e1
+ lP+lVAr/qFoR/+PKsv/+/////v7+//////////////////7////+/v3/5Mu0/7FpKP+hTQD/oU4A/6FO
+ Af+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6JNAP+gTAD/sm4v/+zdzv///////v7+////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////7+/v/gxq3/q18Z/6BMAP+iTQD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU0A/6VVC//NoHb/9/Hr//7////+/v7//v7+//7+/v/+/v7//v///+/i
+ 1f+ybS7/oEwA/8OOXP/49O////////7+/v/+/v7//v7+//7//v/+/v7/59O//7JuLv+gTAD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU0A/6BMAP+oWxP/17OS//z6
+ +P/+/v///v/+//7+/v/+/v7//v/+//7////v4dT/tXI0/6BLAP/Bi1j/+vby//7////+/v7//v7+//7+
+ /v/+/////v79/+TMtv+xain/oU0A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oUwA/6hbFP/cvKD//v38////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////v////v5
+ 9//PpX7/o1EG/6FNAP+hTQD/oU0A/6FNAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU0A/6VV
+ C//KnHD/9/Dq//7////+/v7//v7+//7+/v/+/v7//fz7/9Wxj/+kUwj/plcN/9u8n//+/////v7+//7+
+ /v/+/v7///7+//7+/v/+/f3/5M64/7BrKf+gTAD/oU0A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+gTAD/p1gR/9Sui//69/T//v////7+/v/9/v7//v7+//7+/v/+////+vj1/8mb
+ b/+iTgL/q2Ab/+fSv////////v7+//7+/v/+/v7//v7+//7+/f/kzLb/sWwr/6FNAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+jUQX/ypxx//n18v//////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////+/v7//v////bu5/++gkz/oUwA/6FNAP+hTQD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+iTQD/oE0A/6RUCf/ImGv/9u/p//7////+/v7//v7+//7+
+ /v/+////9ezl/72DTf+gTAD/sm0t/+3ez////////v7+//7+/v/+/v7///7+///////+/v3/5tG8/7V0
+ N/+hTgH/oE0A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oE0A/6tgG//XtJT/+/j2//7+
+ ///+/v7//f7+//3+/v/+/v7//f7+//7////ewab/qFoS/6NPBP/Po3z/+/r3//7+/v/+/v7//f7+//7+
+ ///9/f3/5My2/7FsK/+hTQD/oU0A/6JOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oE0A/7x/Sf/z6OD//v/////+////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////////7+
+ /v/+/v7//////+vZyf+ybCz/oEwA/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU0A/6FN
+ AP+hTgD/oU0A/6NRBf/FkmL/9e3m//7////+/v7//v7+//7+/v/+////59O//69nJP+hTQD/v4ZR//Tr
+ 4//+/////v7+//7+/v/+/////v7///7////+////7+HU/8OOXP+lVg3/oEwA/6FOAP+hTgD/oU4A/6BO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FN
+ AP+hTgD/oEwA/6JQBP+2dzv/4sqz//z8+v/+/////f7+//3+/v/+/v7//v7+//7+/v/+////6tjI/7Fq
+ Kv+gSwD/u4BI//Pp4P/9/////f7+//7+/v/+/v///v79/+PLtP+xaSj/oU0A/6FOAP+iTQD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6BMAP+wair/6tnJ//7////+/v7/////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////f38/9y+ov+pXRb/oU0A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU0A/6NQBf/EkWH/9Ori//7/
+ ///+//7//v/+//7//v/9+/r/2LSU/6dXDv+jUQb/yZpu//jy7P/+//////7+//7+/v/+/v7/////////
+ ////////+PHs/9i1lf+zbzD/olAE/6BMAP+hTgD/oU0A/6FOAP+hTgD/oU4A/6JOAP+iTgD/oU4A/6FO
+ AP+hTgD/oU0A/6FOAP+hTgD/oU4A/6FNAP+hTQD/oEwA/6BNAf+rYRz/y51z//Dj2P/+/v7/////////
+ ///+/v///v7+//7+/v/+/v7//v///+/j1/+7fkb/oEwA/69pJ//m0r7//v/+//3+/v/9/v7//v/+//7+
+ /f/kzLb/sGko/6FNAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6JO
+ AP+gTQD/ql4Y/97Bpv/+/v7//v7+//7+/v/+////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////+vbz/86ief+kUgj/oU0A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU0A/6NRBv/Djl3/8+jf//7////+/v7//v7+//7////59fH/yptw/6JP
+ BP+lVgz/z6V9//n18f///////v7+//7+/v///////////////////////f38/+7g0v/PpH3/sm0u/6RS
+ Bv+gSwD/oEwA/6FNAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTQD/oU4A/6FNAP+gTQD/oEsA/6FO
+ Av+sYh3/xZFh/+XPu//7+PX///////7+/v/////////////+/v/+/v3//v7+//7////y6N7/wIlW/6JP
+ A/+pXBX/3Lyf//z8+//+/v///v7+//7//v/+/v3/5My2/7FsLP+hTQD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU0A/6ZWDP/Sq4f/+vn2//7////+/v7//v7+////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////7+/v/+////9ezk/8CI
+ Vf+hTgH/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FNAP+hTgD/oU0A/6NR
+ Bf/Cilf/8ufd//7////+//7//v7+///////17eX/woxZ/6JOAv+mVw3/z6V+//r28v////////7+////
+ ///////////////////+//7//v////v7+f/v49f/2beX/7+GUf+tZCD/pFQJ/6FNAP+hTQD/oEwA/6BM
+ AP+gTAD/oEwA/6FMAP+hTQD/o1AE/6peF/+4eT7/0aiB/+nXxf/59fL//v7///7//v/+//7//v7+////
+ /////////v7+//7+/v/+////8ufd/8GKV/+iTwT/pVQL/9Osh//7+ff//v////7+/v/+/////f39/+TL
+ s/+ybCv/oU0A/6FNAP+hTQH/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FN
+ AP+jUQX/yZhr//jy7P/+/////v7+//7+/v/+/v7/////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////v7+//7+/v//////7uHU/7RzNv+gTAD/oU0A/6FNAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6JPA/++hE//8OXa//7////+/v7//v7+//7/
+ ///z6N//wYpX/6JPA/+kUwn/yZtv//Ts5P/+//////7///7+/v/+/v7//v7+//7////+////////////
+ //////7/+/j1//Dj1//hxq7/062J/8iWaf+/iFP/u4BI/7t/R/+9hE//xZFh/8+lfv/dvqH/69rK//nz
+ 7v/+/f3//////////////////v////7+/v///v7//v7+//7//v/+/////v7+/+3dz/+7gEj/oU0B/6ZW
+ Dv/Qpn//+vf0//7////+/v7//v////79/f/iyLD/r2gm/6FNAP+hTgD/ok4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTQD/ok8C/8GLWP/17OT//v////7//v/+////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////+/v7//v7+////
+ ////////5My3/61kIf+hTAD/oU0A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTQD/oU0A/6FOAf+9hE3/7+LW//7////+/v7//v7+//7////y593/w45d/6NRBv+iUAb/wIhU/+vb
+ y//9/f3//v////7+/v/+//7//////////////////////////////////////////////v7//fv7//v5
+ 9//7+PX/+/j1//v59v/9+/n//v3+/////////////////////////////////////////////v7///7+
+ /v/+/v7//v////v59//iyLD/tXM2/6BMAP+pWxT/0qqF//n18f/+/////f7+//7+/v/+/v3/4smx/65n
+ Jf+hTQD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTQD/ok4A/6FN
+ AP+7fkb/8eXa//7////9//7//v7/////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////+/v7//v7+///////9+/r/2bma/6lcFf+gTAD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FNAP+iTQD/ok4A/6JPA/+8gUv/7t/R////
+ ///+/v7//f7+//7////17OX/y5xw/6ZWDf+hTQL/tHAx/9u8nv/59fD///////7/////////////////
+ ///////////////////+///////////////+/////v7///7+//////////////7////+/v7//v////7+
+ /v/////////////////////////////////+/v7//v/////////z6uH/z6aA/6xiHf+hSwD/rWMf/9m2
+ lv/69/P//v7///7+/v/+/v7//f39/+LJs/+waSj/oU0A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FNAP+hTAD/tnY7/+vbzP/+/////v7+//7+/v/+/v7/////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////////7/
+ ///+/v7//v7+//7////69/T/0KeA/6VUCv+hTQD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU0A/6FOAP+hTQD/oU0A/6JPA/+7fkb/7d7Q///////+/v7//v7+//7////59PD/1rKR/61i
+ H/+gSwD/p1kQ/8WRYP/q2Mf//fz6/////////////////////////////////////v///v7//v7+////
+ //////////7///7+///+/////v7+//7//v/+/////v//////////////////////////////////////
+ ///69/P/4ceu/7p8Q/+kUgf/oE0B/7VzNv/jy7T//Pv6//7////9/v7//v7///7+/f/jyrP/sWop/6FN
+ AP+hTgD/oU0A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oUwA/7Rx
+ M//o1cP//f7+//7+/v/+/v7//v7+///+/v//////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////v7+//7////38uz/yZls/6NR
+ Bv+hTQD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU0A/6JO
+ Af+4eT7/69vM//7////+/v7//v7+//7////8+/r/59K//72CS/+lUwn/oUwB/6xjH//LnXH/69nI//v4
+ 9f/+//////////7////+/////v7+//7+/v/+//7////+//7+/v/+/v7//v7///7+/v/+/v7//v7+//7/
+ /v/+/////v7+//7+/v////////////7+/v/48u3/48u0/8KLWP+nWRH/oUwA/6hbE//Il2n/7+PX//7+
+ /v/9/v7//v7+//7+///+/fz/4smx/69pJ/+hTQD/oU0A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTQD/oU4A/6FNAP+0cDL/59O///7+/v/+//7/////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////+//7//v7+///////17uf/wo1b/6JPAv+hTQD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FNAP+3djr/6tnI//7+/v/+/v7//v7+//7+
+ /v/+////9u7n/9Wwjv+ybS3/oU8E/6BMAf+sYR3/xZFh/+DFrP/y593/+/j2//7+/v//////////////
+ //////////////7+///+/v///v7///7///////////////////////////79//r28v/v4NP/2reZ/76C
+ TP+oWRH/oEsA/6VUCv+6fUX/4MSq//r39P///////v7+//3+/v/9/v///v79/+LJsf+uZyX/oU0A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTQD/tHAy/+fS
+ v//+/v7//f7+//7+/v//////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////7+/v/+/v7//v7+////
+ ///x5tv/vYJM/6JOAv+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FN
+ AP+hTQD/oU0A/6FOAf+2djn/6NXC//7+/v/+/v///v7+//7+///+/////fz8/+3e0P/Oo3v/smws/6NQ
+ Bv+gSwD/plcN/7RzNf/Hlmj/27mb/+nVw//z6d//+PLt//v49f/8+/r//v79//7+/v/9/fz//Pv5//r2
+ 8//38ev/8OXZ/+TOuf/VsI7/woxa/7BqKf+kUgf/oEoA/6VWDP+4eT7/2LSU//Tr4//+/v7//v/////+
+ /v/+/v7///7///39/f/jyrP/r2ko/6FMAP+hTgD/oU0A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU0A/7RxNP/n07///v7+//7+/v/+/v7//v7+////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////v7+//7+/v/+/v7//v/+//7////u39H/un1F/6FOAf+hTQD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU0A/6FNAP+hTQD/oU0A/6JOAf+1czb/59PA//7+
+ /v/+/v7//f7+//7+/v/+/v7///////z6+P/u4NP/1bCN/7l7Qv+nWRH/oEsB/59LAP+kUgf/q2Ab/7Nv
+ L/+8gEj/xZBf/8qab//NoXj/zaJ6/8ygdv/ImGv/wYta/7l7Qf+wayr/qVwV/6JQA/+gSwD/oU0C/6tg
+ G//BiVb/3b6i//Tq4f/+/f3///////7+///9/v7//v7+//7+///+/f3/4smy/7BqKf+hTQD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FNAf+3djv/6dXD//7+
+ /f///v7//v7+//7+/v/+//7/////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////v7+//7//v/t3s//un1D/6JOAf+hTQD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/ok4A/6FNAP+zbi//5tC8//7+/v/+/v7//v7+////////////////////
+ ///9/fz/9u/p/+bQu//Qpn//un5G/61lIf+lVQv/oU4B/6FNAP+gTAD/oEsA/6BMAP+gTAD/oEsA/6BM
+ AP+hTAD/oU0A/6JPA/+oWhH/sGop/8GIVf/WspH/69vL//n18f/+/v7//////////////////v/+//7+
+ /v/+/v///v39/+LJsv+vaSj/oU0A/6FNAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FNAP+jUAT/vYJL/+3czf/+/v7//v7///7/////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////7////9/v7//v7+//7////u39L/u35G/6JO
+ Af+hTQD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTQD/oU0A/6FM
+ AP+wair/5M64//39/P/+/////////////////////v7+//7////+//////////7+/v/69vP/7+PX/+LJ
+ sv/Xs5L/zJ91/8SPX/++hU7/u35G/7p9Rf+7f0j/v4dT/8aTZP/PpHz/2rma/+bQvP/z6eD//Pn3///+
+ /v/+/////v////7////////////////////+/v7//v7///39/P/ix7D/r2cl/6FNAP+hTgD/oU0A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+gTAD/pFQK/8eUZf/z6d///v////7+
+ /v/9//7//v//////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////7+/v/+/v7//v7+///////v4dT/voNM/6JPA/+hTQD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FNAP+hTgD/oU4A/6FMAP+xayv/4smy//39/P//////////////
+ ///+/v7//v7+//3+/v/+/v///v////7////+//////////7////9/fz//Pr4//v49f/69/P/+vbz//r3
+ 9P/8+fb//Pv5//79/P/////////////////+/////v7+//7+/v/+//7//v////////////////////7/
+ ///9/fz/4sev/69nJf+gTAD/oU4A/6FNAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oE0A/6lcFf/PpX7/9/Hr///////+/v7//v7+//7+/v/+////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////+/////////////v7+////
+ ///x5dr/w45d/6NRB/+hTQD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6BNAP+waSj/4cat//39/P/+/////v/+//7+/////////v//////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////+/v7//v7+//7+/v///////f38/+HHr/+waCf/oE0A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FNAP+hTgD/oU0A/6FMAP+waSf/3Lyf//r38//+/////v7+////
+ ///////////+//7+/v/+/v7///7+//7//v/+/////v39//fx6//t3c7/5My1/+HGrv/kzrj/7uDS//jz
+ 7////v7//v/////+/v/+/v7//v7+////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////+//7//f7+//7////07eX/yptv/6VVDP+hTAD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FNAP+uZiP/38Sq//39
+ /P/+/////v//////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////7+/v/+/v7//v7+//39
+ /f/hx6//r2gm/6FNAP+hTQD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTQD/oU4A/6FN
+ AP+hTgL/uHk//+fSv//9/Pv//v////7+/v/+/////////////////////v7+//7+/v/+/v7//v79//Dk
+ 2f/SqoX/uXpA/69mJP+vZyX/r2gl/65nJP+vZyX/u39I/9e0k//06+L//v7+//7+///+/v7/////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////////7/
+ ///+/v7//f7+//7////59fH/1a+O/6pfGf+gTQD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+iTgD/ok4A/6FNAP+sYRz/3sCm//37+v//////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////7///7+/v/9/fz/4cat/65mI/+hTAD/ok0A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTQD/pVUL/8WRYf/y59z//v////7+/v/+/v7//v7+//7+
+ ///////////////////+/v7//v////v59v/dvqL/s28x/69oJv/Gk2T/3Lyf/+fRvf/p1sX/5c66/9i2
+ mP/Bilf/rWMg/7d4Pv/hybL//Pv5//7/////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////v////7+/v/+/v7//v7+//7////8+/n/3sKo/7Ju
+ Lv+hTgH/oU0A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FM
+ AP+sYh7/272f//z6+P//////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////v7//v7+/////////////f38/+LH
+ r/+uZiP/oEwA/6FNAP+iTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTQD/oU0A/6xj
+ Hv/TrYn/9/Ls///////+/v7////+//7+/v/+/v7///7///////////7////+//7////69/P/062K/61j
+ H//Djl3/6tnJ//z6+P////////////////////////////r39P/kzbj/u39I/61mI//bvJ///fv6////
+ ///+//7////+/////v//////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////v7+//7//v/9/Pv/6dfG/7+FT/+jUQb/oUwA/6FNAP+hTQD/ok4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FNAP+rYh3/2bma//z69//+/////v7+////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////7+/v/+/v7//v7///39/P/hx6//r2gn/6BMAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FNAP+hTQD/oUwA/6JOAv+3dzz/4smx//z59///////////////////////////////
+ /////////v7+//7//v/+//7//fz7/9m4mv+rYh7/zJ91//fx6//7+Pb/+PLt//z6+P//////////////
+ ///+/fz/+PPu//n18f/x5tv/w41b/65lIv/ix6///v7+//7+/v/+/v7//v/+////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////+/v7//v7+//7+
+ /v/+////8+rh/82geP+nWhP/oEwA/6FNAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+iTgD/ok4A/6FNAP+qXxr/2LeX//z7+f/+////////////////////////////////////////////
+ /////////////////////////////////////////////////////////v7+//7+/v/9/f3/4siw/69o
+ J/+gTQD/ok4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FMAP+lVAv/xZJh/+/j
+ 1v/+/v3//v///////////////////////////////////////v///v7//v7+//7////r2sr/sm0t/8SQ
+ YP/38ez//f38/9i2lv+8gEn/59K+//////////////////Ts5P/Ah1L/zqJ6//v59v/z6d//untD/7d2
+ Ov/x5dv//v////7+/v/+////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////7+/v/+//7//v7+//7+/v/+/////Pn3/9/Dqf+0cTL/ok8C/6FN
+ AP+iTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+iTgD/oU4A/6FMAP+pWxT/17OS//v5
+ 9///////////////////////////////////////////////////////////////////////////////
+ ///////////////////+/////f38/+HHrf+uZyT/oEwA/6JNAP+iTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgH/r2gm/9i1lf/59fD//v////7//v//////////////////////////////
+ ///////////+//7+/v/+//7//Pr4/8qbb/+ybS3/7d3P//7////7+vn/ypxx/6RUC//fwqj/////////
+ ////////7+LV/6lcFf/Ailf/+vj1///////kzbf/rGEc/9OsiP/9/Pz//f///////v//////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////////7/
+ ///+/////////////////////v7+/+7f0f/GlGX/qFoS/6FNAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6BNAP+oWxT/1bCO//r38////////v7+/////v//////////////
+ /////////////////////////////////////////v////7+/v/+//7//v////39/P/hx6//rmYj/6BM
+ AP+hTQD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU0A/6FOAP+gTAD/pVQK/7+GUf/o1cL//fz7//7/
+ /////////////////////////////////////////////////////////v7+//7////y59z/s24v/8ud
+ c//8+vj//v////z7+f/LnXL/pVYL/9/DqP/////////////////n0r//p1gQ/8WRYv/7+ff///////n1
+ 8f+/h1L/unxC//Xu5////////v//////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////v////jz
+ 7//bvJ//tHAz/6JOAv+hTQD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FN
+ AP+pWxT/062J//r28v/+///////+////////////////////////////////////////////////////
+ ///+/v7//v7+//7////+/fz/4cev/69oJv+gTAD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTQD/oU0A/61jH//Tq4f/9e3m//7////+/v//////////////////////////////////////////
+ ///////////////////+//7//////+XOuf+rYR3/4Mat///////+/v///Pv5/8udcv+lVQv/3L6h//v5
+ 9//59vP/8+ri/8eWZ/+mVgz/2LWV//7+/f/+/////v7+/9WvjP+uZiP/69rK///////+/v7/////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////+/v7//v////79/P/t39L/yJdr/6hbE/+hTAD/oU0A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+iTgD/oU0A/6BNAP+oWhL/0qqF//r39P//////////////
+ /////////////////////////////////////////////////v/+/v///f38/+DFrP+vZyb/oU0A/6FO
+ Af+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oEwA/6RSCP+9gk3/5dC7//z6+P/+/////v/+//7+
+ /v////////////////////////////////////////////////////////7///7//v//////27mb/69n
+ Jf/r2cn///////7////9+/n/y55z/6NRBf+3dzz/w41c/8CIVf+1cjX/qVwW/8mZbP/28On///////3+
+ /v/+////4ciw/6thG//jy7X///////7+/v//////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////////7/
+ ///+/////v/+//7////59/P/4ciw/7t+Rf+kUwj/oE0A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO
+ AP+hTgD/oU4A/6FNAP+nVw3/0aeA//v28//////////+/////////////////////////////v//////
+ /v///////v////38/P/fxKr/rmUi/6FNAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oE0A/6FO
+ Af+uZyX/1a+M//bu5//+/////v////7+/v/+/v7///7+////////////////////////////////////
+ /////////////////////////v7+///////XspH/sWsq/+3f0P/+/////v7///37+f/LnnP/o1EF/7V0
+ N//AiVb/v4ZQ/7Z0N/+vaCb/zJ5z//Pr4v/+/////v7+///////m0Lz/rGEb/+DFrP/+/////v7+////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////7/////////9e7m/9Sw
+ jf+xbS3/o1AE/6FMAP+hTgD/oU0A/6FNAP+hTgD/oU4A/6FOAP+hTgD/ok4A/6FNAP+mVQz/0KR9//jz
+ 7v/+/////v7+///////////////////////+/v7//v7+//7////9/fz/4MSq/61kIf+gTAD/oU4A/6FO
+ AP+hTgD/oU4A/6FNAP+hTQD/oU0A/6FNAP+nWhL/w45d/+vZyf/+/fz/////////////////////////
+ ///////////////////////////////////////////////////////////////////+/v7//////9u6
+ nP+uZyT/69nI//7////+/////fv6/8udc/+lVQv/3L6i//v6+P/6+PT/9/Hr/9Wwjf+mVg3/y5xx//v5
+ 9//+/////v///+HIr/+rYRv/48u1//7////+/v//////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////v///f7+//3+/v/+/////fz7/+zez//LnnP/rWQg/6FNAf+hTAD/oU0A/6FO
+ AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FNAP+mVw3/zaF4//fy7P/+//////////////////////////7+
+ /v/+/v///fz7/+DFrP+vZSP/okwA/6JOAP+hTgD/oU4A/6FOAP+hTgD/oU0A/6FMAP+kUgf/t3k+/9y/
+ o//48+7/////////////////////////////////////////////////////////////////////////
+ /////////////////////////v7+//7+/v//////5s+6/6xhHP/gxKz//v////7////9+/r/y51z/6VV
+ C//ewqj///////7/////////8eba/6leF/+3dzz/9e7n///////+/v3/066K/65mI//r28v///////7/
+ /v//////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////7+/v/+/v7//v7+//3+
+ /v/9/v7//v////r49f/n1MH/xpNk/6lcFf+gTAD/oE0A/6FOAP+hTgD/oU4A/6JOAP+hTgD/oU0A/6FN
+ AP+mVg3/zJ50//fy7P///////////////////////v////39/P/fxav/rmck/6FMAP+iTgD/oU4A/6FO
+ AP+hTgD/oU4A/6BMAP+hTQL/sGkn/9Ksh//y593//f79//7+///+//7/////////////////////////
+ /////////////////////////////////////////////////////////////////////v///v7+//7/
+ ///y6N7/s28x/8mabv/7+vf//v////37+v/LnXP/pVUM/9/Eqv////////////z6+P/fw6n/pVUL/7t+
+ Rv/38ez///////j07/+9g03/un1D//bu5//+/////v//////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////7///7+/v/+/v7//v7///7//v////7//v/+//7////69vP/5M65/8KM
+ Wv+oXBX/oU0B/6BNAP+hTgD/oU4A/6JOAP+hTQD/oU4A/6FNAP+lUwn/yZpu//fw6v//////////////
+ ///8/Pr/38Sq/65mJP+hTQD/ok0A/6FOAP+iTQD/oU0A/6BNAP+hTgH/rGIc/8qabf/s3c7//fz7////
+ ///+/////v7+//7/////////////////////////////////////////////////////////////////
+ ///////////////////////////////+///+//7//v////z7+f/Mn3X/sGop/+rZyP///////Pv5/8qc
+ cv+jUAb/voVQ/86ke//MnnT/wotY/6xiHf+pWxP/2LaW//79/P//////4sew/6pfGf/Urov//Pz7//7+
+ /v/+//7/////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////7////+////+vbz/+XOuP/Ej17/q18a/6JOAv+gTAD/oU0A/6FN
+ AP+hTQD/oU0A/6BNAP+jUQb/wYhU/+PLtP/u4dT/6tjH/8+nf/+sYhz/oU0A/6FOAP+hTgD/oU4A/6FM
+ AP+iTgL/rGEc/8eWZ//q18X//Pr4///////+////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////+7e0P+zcDH/wYlV//Xt5f/9/fz/17ST/7d3O/+1dDj/tXM2/7Z1Of+6fUT/xpJj/+DE
+ q//7+PX///////Dk2P+3djv/t3g9//Hn3f/+/////v7+////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////v7+//7+
+ /v/+//////////n28v/m0Lv/yJdp/65nJP+iUAT/oEwA/6FNAP+iTQD/oU4A/6FNAP+hTgH/qFoR/69o
+ Jv+rYBv/olAE/6FMAP+hTgD/oU0A/6BMAP+iTwP/rmQh/8eVZ//m0b3/+/f1///////+/v///v7+//7+
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////f38/9y/ov+tZCD/x5Vn//Ts
+ 4//7+ff/+PPu//fy7f/48u3/+PPu//n18P/8+ff///////7//v/v4tX/v4ZR/69mJP/jyrT///7+//7+
+ /v/+//7//v//////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////+/v7//v7+//7+/v/+/v7//v/////////79/T/69nI/8+l
+ fv+0cTL/pFMI/6BLAP+hTQD/oU0A/6FNAP+hTQD/oUwA/6BMAP+hTQD/oU0A/6BMAP+jUQb/sm0t/82g
+ eP/p1sX/+vfz///////+/v///v7+//7+/v/+/v7//v7+////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////+////+/n2/9i2lf+tZSH/voRO/+bQvP/69vP/////////////////////////
+ /v/48u3/4MSq/7d4Pf+vaCb/3cGl//38+/////////////7//v/+/v7/////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////Pv6//Hm3P/auZv/voVQ/6thHP+kUwf/oU0A/6BM
+ AP+hTQD/oU0A/6FPAv+oWxP/u39H/9i1lP/w49j//Pr5//////////////////7////+/////v/+////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////7+/v/+/////Pr5/+HI
+ sP+3dzz/rWQh/8CIVP/Vr43/4cau/+TNt//gxKr/06qG/7yASP+sYh3/u4BI/+XQu//9/Pv//v//////
+ /////////v//////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////////7+
+ /v/+//7//v////7////69/P/7+DS/96/o//Qpn7/yJdq/8WSZP/Jmm//1bCN/+jTwP/58+///v/+//7/
+ ///+/v///v7+////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////v7+//7+/v/+/v7//v/+//Tr4//Yt5n/v4ZS/7NvL/+xayr/sGop/7Br
+ Kf+zbzH/wYxa/92/pP/38Or///////7+/v/+/v7/////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////v7+//7+/v/+/v7//f/+//7///////////////7+
+ /f/8+vn/+/n2//37+v////////////7////+/v7//v7+//7+/v/+/v7/////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////+/v7//v7+//7+
+ /v/+/v7//v////7+/v/59fH/8OPX/+fSv//lzrj/6NTC//Hm2//69/T///////7////9/v7//v7+//7+
+ /v//////////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ 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
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
+
+
+
\ No newline at end of file
diff --git a/YTDX202303TCP/Program.cs b/YTDX202303TCP/Program.cs
new file mode 100644
index 0000000..33f726f
--- /dev/null
+++ b/YTDX202303TCP/Program.cs
@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace YTDX202303TCP
+{
+ internal static class Program
+ {
+ ///
+ /// 应用程序的主入口点。
+ ///
+ [STAThread]
+ static void Main()
+ {
+ Application.EnableVisualStyles();
+ Application.SetCompatibleTextRenderingDefault(false);
+ Application.Run(new Form1());
+ }
+ }
+}
diff --git a/YTDX202303TCP/Properties/AssemblyInfo.cs b/YTDX202303TCP/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..25e796a
--- /dev/null
+++ b/YTDX202303TCP/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 有关程序集的一般信息由以下
+// 控制。更改这些特性值可修改
+// 与程序集关联的信息。
+[assembly: AssemblyTitle("YTDX202303TCP")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("ZTT")]
+[assembly: AssemblyProduct("YTDX202303TCP")]
+[assembly: AssemblyCopyright("Copyright © ZTT 2023")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 将 ComVisible 设置为 false 会使此程序集中的类型
+//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
+//请将此类型的 ComVisible 特性设置为 true。
+[assembly: ComVisible(false)]
+
+// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
+[assembly: Guid("99eb89bc-a17c-48a3-8e8f-a62d84eb02d1")]
+
+// 程序集的版本信息由下列四个值组成:
+//
+// 主版本
+// 次版本
+// 生成号
+// 修订号
+//
+//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
+//通过使用 "*",如下所示:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/YTDX202303TCP/Properties/Resources.Designer.cs b/YTDX202303TCP/Properties/Resources.Designer.cs
new file mode 100644
index 0000000..17edacd
--- /dev/null
+++ b/YTDX202303TCP/Properties/Resources.Designer.cs
@@ -0,0 +1,71 @@
+//------------------------------------------------------------------------------
+//
+// 此代码由工具生成。
+// 运行时版本: 4.0.30319.42000
+//
+// 对此文件的更改可能导致不正确的行为,如果
+// 重新生成代码,则所做更改将丢失。
+//
+//------------------------------------------------------------------------------
+
+namespace YTDX202303TCP.Properties
+{
+
+
+ ///
+ /// 强类型资源类,用于查找本地化字符串等。
+ ///
+ // 此类是由 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 ((resourceMan == null))
+ {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("YTDX202303TCP.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;
+ }
+ }
+ }
+}
diff --git a/YTDX202303TCP/Properties/Resources.resx b/YTDX202303TCP/Properties/Resources.resx
new file mode 100644
index 0000000..af7dbeb
--- /dev/null
+++ b/YTDX202303TCP/Properties/Resources.resx
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/YTDX202303TCP/Properties/Settings.Designer.cs b/YTDX202303TCP/Properties/Settings.Designer.cs
new file mode 100644
index 0000000..f00f329
--- /dev/null
+++ b/YTDX202303TCP/Properties/Settings.Designer.cs
@@ -0,0 +1,30 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace YTDX202303TCP.Properties
+{
+
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
+ {
+
+ private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+ public static Settings Default
+ {
+ get
+ {
+ return defaultInstance;
+ }
+ }
+ }
+}
diff --git a/YTDX202303TCP/Properties/Settings.settings b/YTDX202303TCP/Properties/Settings.settings
new file mode 100644
index 0000000..3964565
--- /dev/null
+++ b/YTDX202303TCP/Properties/Settings.settings
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/YTDX202303TCP/Sockets.cs b/YTDX202303TCP/Sockets.cs
new file mode 100644
index 0000000..bfa57a9
--- /dev/null
+++ b/YTDX202303TCP/Sockets.cs
@@ -0,0 +1,109 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Net.Sockets;
+using System.Net;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace YTDX202303TCP
+{
+ public class Sockets
+ {
+ public delegate void PushSockets(Sockets sockets);
+
+ ///
+ ///
+ ///
+ public Sockets()
+ {
+
+ }
+ ///
+ /// 创建Sockets对象
+ ///
+ /// Ip地址
+ /// TcpClient
+ /// 承载客户端Socket的网络流
+ public Sockets(IPEndPoint ip, TcpClient client, NetworkStream ns)
+ {
+ Ip = ip;
+ Client = client;
+ nStream = ns;
+ }
+ ///
+ /// 创建Sockets对象
+ ///
+ /// 用户名
+ /// 密码
+ /// Ip地址
+ /// TcpClient
+ /// 承载客户端Socket的网络流
+ public Sockets(string name, string pass, IPEndPoint ip, TcpClient client, NetworkStream ns)
+ {
+ UserName = name;
+ Password = pass;
+ Ip = ip;
+ Client = client;
+ nStream = ns;
+ }
+ ///
+ /// 接收缓冲区
+ ///
+ public byte[] RecBuffer = new byte[8 * 1024];
+ ///
+ /// 发送缓冲区
+ ///
+ public byte[] SendBuffer = new byte[8 * 1024];
+ ///
+ /// 异步接收后包的大小
+ ///
+ public int Offset { get; set; }
+ ///
+ /// 用户名
+ ///
+ public string UserName { get; set; }
+ ///
+ /// 密码
+ ///
+ public string Password { get; set; }
+ ///
+ /// 当前IP地址,端口号
+ ///
+ public IPEndPoint Ip { get; set; }
+ ///
+ /// 客户端主通信程序
+ ///
+ public TcpClient Client { get; set; }
+ ///
+ /// 承载客户端Socket的网络流
+ ///
+ public NetworkStream nStream { get; set; }
+ ///
+ /// 发生异常时不为null
+ ///
+ public Exception ex { get; set; }
+ ///
+ /// 新客户端标识.如果推送器发现此标识为true,那么认为是客户端上线 仅服务端有效
+ ///
+ public bool NewClientFlag { get; set; }
+ ///
+ /// 客户端退出标识.如果服务端发现此标识为true,那么认为客户端下线
+ /// 客户端接收此标识时,认为客户端异常.
+ ///
+ public bool ClientDispose { get; set; }
+
+ }
+ ///
+ /// Socket基类(抽象类)
+ /// 抽象3个方法,初始化Socket(含一个构造),停止,启动方法.
+ /// 此抽象类为TcpServer与TcpClient的基类,前者实现后者抽象方法
+ ///
+ public abstract class SocketObject
+ {
+ public abstract void InitSocket(IPAddress ipaddress, int port);
+ public abstract void InitSocket(string ipaddress, int port);
+ public abstract void Start();
+ public abstract void Stop();
+ }
+}
diff --git a/YTDX202303TCP/YTDX202303TCP.csproj b/YTDX202303TCP/YTDX202303TCP.csproj
new file mode 100644
index 0000000..7bfd0cc
--- /dev/null
+++ b/YTDX202303TCP/YTDX202303TCP.csproj
@@ -0,0 +1,96 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {99EB89BC-A17C-48A3-8E8F-A62D84EB02D1}
+ WinExe
+ YTDX202303TCP
+ YTDX202303TCP
+ v4.7.2
+ 512
+ true
+ true
+
+
+ AnyCPU
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ AnyCPU
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+ bitbug_favicon.ico
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Form
+
+
+ Form1.cs
+
+
+
+
+
+
+ Form1.cs
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+ Designer
+
+
+ True
+ Resources.resx
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+ True
+ Settings.settings
+ True
+
+
+
+
+
+
+
+ Always
+
+
+
+
\ No newline at end of file
diff --git a/YTDX202303TCP/bitbug_favicon.ico b/YTDX202303TCP/bitbug_favicon.ico
new file mode 100644
index 0000000..74d5283
Binary files /dev/null and b/YTDX202303TCP/bitbug_favicon.ico differ
diff --git a/YTDX202303TCP/tools.cs b/YTDX202303TCP/tools.cs
new file mode 100644
index 0000000..6ca83e8
--- /dev/null
+++ b/YTDX202303TCP/tools.cs
@@ -0,0 +1,223 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace YTDX202303TCP
+{
+ class tools
+ {
+ //获取当前设备的所有端口号
+ public static string[] GetSerialPort()
+ {
+ string[] ports = null;
+ ports = System.IO.Ports.SerialPort.GetPortNames();
+ return ports;
+ }
+
+
+
+ /// 16进制原码字符串转字节数组
+ ///
+ /// "AABBCC"或"AA BB CC"格式的字符串
+ ///
+ public static byte[] ConvertHexStringToBytes(string hexString)
+ {
+ hexString = hexString.Replace(" ", "");
+ if (hexString.Length % 2 != 0)
+ {
+ throw new ArgumentException("参数长度不正确");
+ }
+
+ byte[] returnBytes = new byte[hexString.Length / 2];
+ for (int i = 0; i < returnBytes.Length; i++)
+ {
+ returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
+ }
+
+ return returnBytes;
+ }
+
+ ///
+ /// //16转2方法
+ ///
+ ///
+ ///
+ public static string HexString2BinString(string hexString)
+ {
+ try
+ {
+ string result = string.Empty;
+ foreach (char c in hexString)
+ {
+ int v = Convert.ToInt32(c.ToString(), 16);
+ int v2 = int.Parse(Convert.ToString(v, 2));
+ // 去掉格式串中的空格,即可去掉每个4位二进制数之间的空格,
+ result += string.Format("{0:d4} ", v2);
+ }
+ return result;
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine(ex.Message);
+ throw;
+ }
+
+ }
+
+
+ ///
+ /// 字节数组转16进制字符串
+ ///
+ ///
+ ///
+ public static string byteToHexStr(byte[] bytes)
+ {
+ string returnStr = "";
+ if (bytes != null)
+ {
+ for (int i = 0; i < bytes.Length; i++)
+ {
+ returnStr += bytes[i].ToString("X2");
+ }
+ }
+ return returnStr;
+ }
+
+
+ public static string HexStringToString(string hs, Encoding encode)
+ {
+ StringBuilder strTemp = new StringBuilder();
+ byte[] b = new byte[hs.Length / 2];
+ for (int i = 0; i < hs.Length / 2; i++)
+ {
+ strTemp.Clear();
+ strTemp.Append(hs.Substring(i * 2, 2));
+ b[i] = Convert.ToByte(strTemp.ToString(), 16);
+ }
+ return encode.GetString(b);
+ }
+
+
+ ///
+ /// txt文档自动保存
+ ///
+ ///
+ public static void AddLgoToTXT(string _file_name, string path, string logstring)
+ {
+ path = path + _file_name;
+ if (!System.IO.File.Exists(path))
+ {
+ FileStream stream = System.IO.File.Create(path);
+ stream.Close();
+ stream.Dispose();
+ }
+ //using (StreamWriter writer = new StreamWriter(path, true))
+ //{
+ // writer.WriteLine(logstring);
+ //}
+ //[1]创建文件流 文件路径 和枚举类型的文件操作类型
+ FileStream fs = new FileStream(path, FileMode.Append);
+ //[2]创建写入器
+ StreamWriter sw = new StreamWriter(fs);
+ //[3]以流的方式写入数据
+ //sw.Write(logstring.Trim());
+ sw.Write(logstring);
+ //[4]关闭写入器
+ sw.Close();
+ //[5]关闭文件流
+ fs.Close();
+ }
+
+ //十六进制转字符串
+ public string ConvertHexToString(string HexValue, string separator = null)
+ {
+ HexValue = string.IsNullOrEmpty(separator) ? HexValue : HexValue.Replace(string.Empty, separator);
+ StringBuilder sbStrValue = new StringBuilder();
+ while (HexValue.Length > 0)
+ {
+ sbStrValue.Append(Convert.ToChar(Convert.ToUInt32(HexValue.Substring(0, 2), 16)).ToString());
+ HexValue = HexValue.Substring(2);
+ }
+ return sbStrValue.ToString();
+ }
+ ///
+ /// 将传入的byte数组 从指定位置倒置
+ ///
+ ///
+ ///
+ public static float bytetofloat(List b, int start)
+ {
+ return BitConverter.ToSingle(new byte[] { b[start + 3], b[start + 2], b[start + 1], b[start] }, 0);
+ }
+
+ public static int bytetoint(List b, int start, int len)
+ {
+ string a = "";
+ for (int i = 0; i < len; i++)
+ {
+ a += b[start + i].ToString("X2");
+ }
+ return Convert.ToInt32(a, 16);
+ }
+
+ public static int ByteToInt16(List b, int start, int len)
+ {
+ string a = "";
+ for (int i = 0; i < len; i++)
+ {
+ a += b[start + i].ToString("X2");
+ }
+ return Convert.ToInt16(a, 16);
+ }
+
+ ///
+ /// 将一条十六进制字符串转换为ASCII
+ ///
+ /// 一条十六进制字符串
+ /// 返回一条ASCII码
+ public static string HexStringToASCII(string hexstring)
+ {
+ byte[] bt = HexStringToBinary(hexstring);
+ string lin = "";
+ for (int i = 0; i < bt.Length; i++)
+ {
+ lin = lin + bt[i] + " ";
+ }
+
+
+ string[] ss = lin.Trim().Split(new char[] { ' ' });
+ char[] c = new char[ss.Length];
+ int a;
+ for (int i = 0; i < c.Length; i++)
+ {
+ a = Convert.ToInt32(ss[i]);
+ c[i] = Convert.ToChar(a);
+ }
+
+ string b = new string(c);
+ return b;
+ }
+
+ /**/
+ ///
+ /// 16进制字符串转换为二进制数组
+ ///
+ /// 用空格切割字符串
+ /// 返回一个二进制字符串
+ public static byte[] HexStringToBinary(string hexstring)
+ {
+
+ string[] tmpary = hexstring.Trim().Split(' ');
+ byte[] buff = new byte[tmpary.Length];
+ for (int i = 0; i < buff.Length; i++)
+ {
+ buff[i] = Convert.ToByte(tmpary[i], 16);
+ }
+ return buff;
+ }
+ }
+}
+