diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d4150f0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.vs/ +*.onnx diff --git a/README.md b/README.md new file mode 100644 index 0000000..10835db --- /dev/null +++ b/README.md @@ -0,0 +1,15 @@ +Tongue Segmentation +---- +舌抽出サーバー + +## 開発 +- Visual C# 2022 +- resnet.onnx ファイル必要 + +## 使い方 +- 5556ポートで舌画像を受信 +- 左:受信画像 右:検出マスク +- ZeroMQ Request/Response +- 舌画像は舌領域が矩形抽出されている前提 +- モノクロ マスク画像を返す ただしマスク画像は2値化前の状態 +- 左ペインに画像D&D で処理可能 diff --git a/TongueSegmentation.sln b/TongueSegmentation.sln new file mode 100644 index 0000000..7844501 --- /dev/null +++ b/TongueSegmentation.sln @@ -0,0 +1,31 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.8.34316.72 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TongueSegmentation", "TongueSegmentation\TongueSegmentation.csproj", "{87BF247A-DA31-43B4-8111-6B96D302218C}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|x64 = Debug|x64 + Release|Any CPU = Release|Any CPU + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {87BF247A-DA31-43B4-8111-6B96D302218C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {87BF247A-DA31-43B4-8111-6B96D302218C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {87BF247A-DA31-43B4-8111-6B96D302218C}.Debug|x64.ActiveCfg = Debug|x64 + {87BF247A-DA31-43B4-8111-6B96D302218C}.Debug|x64.Build.0 = Debug|x64 + {87BF247A-DA31-43B4-8111-6B96D302218C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {87BF247A-DA31-43B4-8111-6B96D302218C}.Release|Any CPU.Build.0 = Release|Any CPU + {87BF247A-DA31-43B4-8111-6B96D302218C}.Release|x64.ActiveCfg = Release|x64 + {87BF247A-DA31-43B4-8111-6B96D302218C}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {D5C750B5-52B5-476C-B559-F2CA18CE9CF3} + EndGlobalSection +EndGlobal diff --git a/TongueSegmentation/App.config b/TongueSegmentation/App.config new file mode 100644 index 0000000..d5240a7 --- /dev/null +++ b/TongueSegmentation/App.config @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/TongueSegmentation/MainForm.Designer.cs b/TongueSegmentation/MainForm.Designer.cs new file mode 100644 index 0000000..e9e512e --- /dev/null +++ b/TongueSegmentation/MainForm.Designer.cs @@ -0,0 +1,159 @@ +namespace TongueSegmentation { + partial class MainForm { + /// + /// 必要なデザイナー変数です。 + /// + 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(MainForm)); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + this.pictureBox2 = new System.Windows.Forms.PictureBox(); + this.backgroundWorker1 = new System.ComponentModel.BackgroundWorker(); + this.splitContainer2 = new System.Windows.Forms.SplitContainer(); + this.textBox1 = new System.Windows.Forms.TextBox(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit(); + this.splitContainer2.Panel1.SuspendLayout(); + this.splitContainer2.Panel2.SuspendLayout(); + this.splitContainer2.SuspendLayout(); + this.SuspendLayout(); + // + // splitContainer1 + // + this.splitContainer1.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.splitContainer1.Location = new System.Drawing.Point(3, 3); + this.splitContainer1.Name = "splitContainer1"; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.pictureBox1); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.pictureBox2); + this.splitContainer1.Size = new System.Drawing.Size(815, 409); + this.splitContainer1.SplitterDistance = 396; + this.splitContainer1.TabIndex = 0; + // + // pictureBox1 + // + this.pictureBox1.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.pictureBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBox1.Location = new System.Drawing.Point(0, 3); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(393, 403); + this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.pictureBox1.TabIndex = 0; + this.pictureBox1.TabStop = false; + this.pictureBox1.DragDrop += new System.Windows.Forms.DragEventHandler(this.pictureBox1_DragDrop); + this.pictureBox1.DragEnter += new System.Windows.Forms.DragEventHandler(this.pictureBox1_DragEnter); + // + // pictureBox2 + // + this.pictureBox2.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.pictureBox2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBox2.Location = new System.Drawing.Point(3, 3); + this.pictureBox2.Name = "pictureBox2"; + this.pictureBox2.Size = new System.Drawing.Size(409, 403); + this.pictureBox2.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.pictureBox2.TabIndex = 0; + this.pictureBox2.TabStop = false; + // + // splitContainer2 + // + this.splitContainer2.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.splitContainer2.Location = new System.Drawing.Point(1, 2); + this.splitContainer2.Name = "splitContainer2"; + this.splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer2.Panel1 + // + this.splitContainer2.Panel1.Controls.Add(this.splitContainer1); + // + // splitContainer2.Panel2 + // + this.splitContainer2.Panel2.Controls.Add(this.textBox1); + this.splitContainer2.Size = new System.Drawing.Size(821, 522); + this.splitContainer2.SplitterDistance = 415; + this.splitContainer2.TabIndex = 1; + // + // textBox1 + // + this.textBox1.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.textBox1.Location = new System.Drawing.Point(3, 3); + this.textBox1.Multiline = true; + this.textBox1.Name = "textBox1"; + this.textBox1.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.textBox1.Size = new System.Drawing.Size(812, 97); + this.textBox1.TabIndex = 0; + // + // MainForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(824, 523); + this.Controls.Add(this.splitContainer2); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "MainForm"; + this.Text = "Tongue Segmentation"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.MainForm_FormClosing); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit(); + this.splitContainer2.Panel1.ResumeLayout(false); + this.splitContainer2.Panel2.ResumeLayout(false); + this.splitContainer2.Panel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit(); + this.splitContainer2.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.SplitContainer splitContainer1; + private System.Windows.Forms.PictureBox pictureBox1; + private System.Windows.Forms.PictureBox pictureBox2; + private System.ComponentModel.BackgroundWorker backgroundWorker1; + private System.Windows.Forms.SplitContainer splitContainer2; + private System.Windows.Forms.TextBox textBox1; + } +} + diff --git a/TongueSegmentation/MainForm.cs b/TongueSegmentation/MainForm.cs new file mode 100644 index 0000000..028e1a9 --- /dev/null +++ b/TongueSegmentation/MainForm.cs @@ -0,0 +1,196 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Diagnostics.Eventing.Reader; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using OpenCvSharp; +using OpenCvSharp.Extensions; +using Microsoft.ML.OnnxRuntime; +using Microsoft.ML.OnnxRuntime.Tensors; +using System.Threading; +using System.Diagnostics; +using NetMQ.Sockets; +using NetMQ; +using System.IO; + +namespace TongueSegmentation { + public partial class MainForm : Form { + static readonly string MODEL_FILE = "ResUNet.onnx"; + static readonly int PORT = 5556; + static readonly string SERVER_SOCKET = $"@tcp://*:{PORT}"; + bool _isRunning = true; + int _processCounter = 0; + + /// + /// コンストラクタ + /// + public MainForm() { + InitializeComponent(); + pictureBox1.AllowDrop = true; + + var thread = new Thread(new ThreadStart(ServerThread)); + thread.Start(); + } + + /// + /// ZeroMQサーバー + /// + private void ServerThread() { + Debug.WriteLine("Server Start."); + textBox1.BeginInvoke((MethodInvoker)delegate { + textBox1.Text = $"サーバー起動 待ち受けポート {PORT}\r\n"; + }); + + using (var server = new ResponseSocket(SERVER_SOCKET)) { + while (_isRunning) { + // 舌画像受信 + string b64strTongue; + if (server.TryReceiveFrameString(out b64strTongue)) { + var startTime = DateTime.Now; + textBox1.BeginInvoke((MethodInvoker)delegate { + _processCounter++; + var msg = _processCounter.ToString("[000] ") + + startTime.ToString("yyyy-MM-dd HH:mm:ss.fff 受信"); + textBox1.Text += msg; + }); + //Debug.WriteLine("Receive"); + + var byteTongue = Convert.FromBase64String(b64strTongue); + var imgTongue = Cv2.ImDecode(byteTongue, ImreadModes.Color); + pictureBox1.BeginInvoke((MethodInvoker)delegate { + pictureBox1.Image = BitmapConverter.ToBitmap(imgTongue); + }); + + // 舌抽出 + var imgMask = TongueSegmentation(imgTongue); + pictureBox2.BeginInvoke((MethodInvoker)delegate { + pictureBox2.Image = BitmapConverter.ToBitmap(imgMask); + }); + + // マスク送信 + byte[] byteMask; + var result = Cv2.ImEncode(".png", imgMask, out byteMask); + var b64strMask = Convert.ToBase64String(byteMask); + server.SendFrame(b64strMask); + + textBox1.BeginInvoke((MethodInvoker)delegate { + var endTime = DateTime.Now; + var elaplse = endTime - startTime; + var msg = " " + endTime.ToString("HH:mm:ss.fff 送信"); + msg += " 処理時間 " + (elaplse.TotalMilliseconds / 1000).ToString("0.000") + "秒\r\n"; + textBox1.Text += msg; + }); + } else { + Thread.Sleep(10); + } + } + } + + Debug.WriteLine("Server thread end."); + } + + /// + /// ドラッグ&ドロップ時 + /// + /// + /// + private void pictureBox1_DragDrop(object sender, DragEventArgs e) { + // ドラッグされたファイルのパスを取得 + string[] fileName = (string[])e.Data.GetData(DataFormats.FileDrop); + // 複数の場合、1個目の画像を表示 + pictureBox1.ImageLocation = fileName[0]; + + var imgIn = Cv2.ImRead(fileName[0]); + if (imgIn.Empty()) { + MessageBox.Show("ファイルを読み込めません", this.Text); + return; + } + + var startTime = DateTime.Now; + _processCounter++; + var msg = _processCounter.ToString("[000] ") + + startTime.ToString("yyyy-MM-dd HH:mm:ss.fff ドロップ"); + textBox1.Text += msg; + var mask = TongueSegmentation(imgIn); + + var bmp = BitmapConverter.ToBitmap(mask); + pictureBox2.Image = bmp; + + var endTime = DateTime.Now; + var elaplse = endTime - startTime; + msg = " " + DateTime.Now.ToString("HH:mm:ss.fff 終了"); + msg += " 処理時間 " + (elaplse.TotalMilliseconds / 1000).ToString("0.000") + "秒\r\n"; + textBox1.Text += msg; + } + + /// + /// ドラッグエンター時 + /// + /// + /// + private void pictureBox1_DragEnter(object sender, DragEventArgs e) { + if (e.Data.GetDataPresent(DataFormats.FileDrop)) { + e.Effect = DragDropEffects.All; + } else { + e.Effect = DragDropEffects.None; + } + } + + /// + /// 舌抽出 + /// + /// + /// + // Ref:https://book2525stack.com/2021/06/03/net_hand_written_digit_recognition/ + private Mat TongueSegmentation(Mat imgTongueOrig) { + + var imgTongue = imgTongueOrig.Resize(new OpenCvSharp.Size(256, 256), 0, 0, InterpolationFlags.Cubic); + var imgMask = new Mat(imgTongue.Size(), MatType.CV_8UC1); + + // 推論 + using (var session = new InferenceSession(MODEL_FILE)) { + var inputMeta = session.InputMetadata; + + //input shape = [1, 3, 256, 256] = [batchsize, channels, w, h] + var flattenTongue = new float[imgTongue.Channels() * imgTongue.Width * imgTongue.Height]; + int idx = 0; + for (int c = 0; c < imgTongue.Channels(); c++) + for (int i = 0; i < imgTongue.Height; i++) + for (int j = 0; j < imgTongue.Width; j++, idx++) { + flattenTongue[idx] = (float)(imgTongue.At(i, j)[c] / 255.0); + } + var tensor = new DenseTensor(flattenTongue, inputMeta[inputMeta.Keys.First()].Dimensions, false); + var namedOnnxValues = new List { + NamedOnnxValue.CreateFromTensor(inputMeta.Keys.First(), tensor) + }; + + // output shape = [1, 2, 256, 256] = [batchsize, class probability, w, h] + using (var results = session.Run(namedOnnxValues)) { + var result = results.First().AsTensor().ToArray(); + for (int i = 0; i < imgTongue.Height; i++) + for (int j = 0; j < imgTongue.Width; j++) { + var proba = result[j + (i * imgTongue.Width)]; + var value = (byte)((float)(1.0 / (1.0 + Math.Pow(Math.E, -proba))) * 255.0); + imgMask.Set(i, j, value); + } + } + } + GC.Collect(); + return imgMask.Resize(imgTongueOrig.Size(), 0,0, InterpolationFlags.Cubic); + } + + /// + /// フォーム閉じる時 + /// + /// + /// + private void MainForm_FormClosing(object sender, FormClosingEventArgs e) { + _isRunning = false; + } + } +} diff --git a/TongueSegmentation/MainForm.resx b/TongueSegmentation/MainForm.resx new file mode 100644 index 0000000..bddeb7b --- /dev/null +++ b/TongueSegmentation/MainForm.resx @@ -0,0 +1,983 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + + AAABAAEAgIAAAAEAGAAoyAAAFgAAACgAAACAAAAAAAEAAAEAGAAAAAAAAAAAACQAAAAkAAAAAAAAAAAA + AAD///////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////////19f/m5v3X + 1/TX1/Tm5v329v////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////////////////l + 5fioqNl1dbxJSaIjI5QICH4AAHYAAHYAAHYAAHYAAHYAAHYJCX8jI5RJSaJ2dr2oqNnl5fj///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////T0+54eL8qKpQAAHYAAHYAAHYAAHYBAXcAAHYAAHYAAHYAAHYAAHYAAHYAAHYA + AHYBAXcAAHYAAHYAAHYAAHYqKpR4eL/T0+7///////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////5+f+iotMzM5kAAHYAAHYAAHYAAHYAAHYAAHYAAHYA + AHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYyMpmiotP6+v// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////9/f+entQfH4wAAHYA + AHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYA + AHYAAHYAAHYAAHYAAHYAAHYAAHYfH4yfn9T+/v////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////NzeszM5kAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYJCX8bG5Aq + KpgqKpgbG5AKCoAAAHYAAHYAAHYAAHYBAXcAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYzM5nNzev///// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////8/P+BgcMEBHoAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYA + AHYVFYgaGq4UFM0JCeYfH/0AAP8AAP8AAP8AAP8AAP8AAP8fH/0JCeYUFM0aGq4VFYgAAHYAAHYAAHYA + AHYAAHYAAHYAAHYAAHYAAHYEBHqBgcP8/P////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////s7PhERKIAAHYAAHYA + AHYAAHYAAHYAAHYAAHYAAHYKCoAWFrITE+cAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8TE+cWFrILC4EAAHYAAHYAAHYAAHYAAHYAAHYAAHYBAXdCQqHs7Pj///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////e3vUkJJAAAHYAAHYAAHYAAHYAAHYAAHYAAHYREYIiIsMQEPoAAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8QEPoiIsMREYIAAHYAAHYA + AHYAAHYAAHYAAHYAAHYkJJDe3vX///////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////X1+0YGIcAAHYAAHYAAHYAAHYAAHYAAHYCAngeHrkP + D/kAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8PD/keHrkCAngAAHYAAHYAAHYAAHYAAHYAAHYYGIfX1+3///////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////f3/YZGYgAAHYA + AHYAAHYAAHYAAHYAAHYTE44XF+YAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8XF+YTE44AAHYAAHYAAHYA + AHYAAHYAAHYZGYff3/b///////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////v7/goKJEAAHYAAHYAAHYAAHYAAHYAAHYfH6oDA/kAAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8DA/ofH6oAAHYAAHYAAHYAAHYAAHYAAHYnJ5Hv7/j///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////9/f9ISKUAAHYAAHYAAHYAAHYAAHYAAHYODrgA + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8ODrcAAHYAAHYAAHYAAHYAAHYA + AHZISKX+/v////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////////+/v+FhcUA + AHYAAHYAAHYAAHYAAHYAAHYgIMoAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8gIMkAAHYAAHYAAHYAAHYAAHYAAHaFhcX///////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////OzusFBXsAAHYAAHYAAHYAAHYAAHYMDLYAAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8MDLYAAHYAAHYAAHYAAHYAAHYFBXvOzuv/ + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////8/P8wMJcAAHYAAHYAAHYAAHYAAHYc + HKgAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8cHKgAAHYAAHYAAHYAAHYAAHYwMJb8/P////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //+QkMwAAHYAAHYAAHYAAHYAAHYREY4CAvkAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8CAvkREY4AAHYAAHYAAHYAAHYAAHaQkMz///////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////v7/oTE4MAAHYAAHYAAHYAAHYCAngXF+YAAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8XF+YCAngA + AHYAAHYAAHYAAHYTE4Pv7/r///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////95eb8AAHYAAHYAAHYA + AHYAAHYjI7sAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8iIrsAAHYAAHYAAHYAAHYAAHZ5eb////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////w8PoNDYEAAHYAAHYAAHYAAHYKCokFBfsAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8FBfsKCogAAHYAAHYAAHYA + AHYNDYHw8Pr///////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////+JicgAAHYAAHYAAHYAAHYAAHYeHtIAAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8VFf8qKv8q + Kv8qKv8qKv8VFf8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8eHtIAAHYAAHYAAHYAAHYAAHaIiMj///////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////////8/P8eHosA + AHYAAHYAAHYAAHYVFY8NDf8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8qKrsAAHYAAHYAAHYAAHYqKrsAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8NDf8VFY8AAHYAAHYAAHYAAHYeHov8/P// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////+zs98AAHYAAHYAAHYAAHYAAHYbG88AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8qKrsAAHYAAHYAAHYAAHYqKrsA + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8bG88AAHYAAHYAAHYAAHYAAHazs9////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////9VVasAAHYAAHYAAHYAAHYTE4UI + CP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8qKrsAAHYAAHYAAHYAAHYqKrsAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8ICP8UFIUAAHYAAHYAAHYAAHZWVqv///////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///z8/0ICH4AAHYAAHYAAHYAAHYREboAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8qKrsAAHYAAHYAAHYAAHYqKrsAAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8REboAAHYA + AHYAAHYAAHYICH7z8/3///////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////+np9YAAHYAAHYAAHYAAHYAAHYhIe4AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8qKrsAAHYA + AHYAAHYAAHYqKrsAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8hIe4AAHYAAHYAAHYAAHYAAHanp9b///////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////9aWq0AAHYAAHYA + AHYAAHYXF5EAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8qKrsAAHYAAHYAAHYAAHYqKrsAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8XF5EAAHYAAHYAAHYAAHZa + Wq3///////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////8UFIcAAHYAAHYAAHYAAHYaGr8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8qKrsAAHYAAHYAAHYAAHYqKrsA + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8aGr8AAHYAAHYAAHYAAHYUFIf///////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////Pz+wAAHYAAHYAAHYAAHYAAHYTE+cAAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8qKrsAAHYAAHYAAHYAAHYqKrsAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8TE+cAAHYAAHYAAHYAAHYAAHbOzuz///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////+S + kssAAHYAAHYAAHYAAHYKCoAMDP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8qKrsAAHYAAHYAAHYAAHYqKrsAAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8MDP8K + CoAAAHYAAHYAAHYAAHaSksv///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////9YWK0AAHYAAHYAAHYAAHYVFaEAAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8qKrsAAHYA + AHYAAHYAAHYqKrsAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8VFaEAAHYAAHYAAHYAAHZYWK3///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////8lJZIAAHYAAHYAAHYA + AHYQEMAAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8qKrsAAHYAAHYAAHYAAHYqKrsAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8QEMAAAHYAAHYAAHYA + AHYlJZL///////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////09P8CAngAAHYAAHYAAHYAAHYTE9wAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8qKrsAAHYAAHYAAHYAAHYqKrsA + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8TE90AAHYAAHYAAHYAAHYDA3n09P////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////KyugAAHYAAHYAAHYAAHYAAHYhIfgAAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8qKrsAAHYAAHYAAHYAAHYqKrsAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8iIvgAAHYAAHYAAHYAAHYAAHbKyuj///// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////+kpNgA + AHYAAHYAAHYBAXcMDIIAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8qKrsAAHYAAHYAAHYAAHYqKrsAAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8MDIIAAHYAAHYAAHYAAHakpNj///////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////+EhL8AAHYAAHYAAHYBAXcXF5kAAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8qKrsAAHYA + AHYAAHYAAHYqKrsAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8XF5kAAHYAAHYAAHYAAHaEhL////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////9gYLUAAHYAAHYAAHYAAHYU + FKwAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8qKrsAAHYAAHYAAHYAAHYqKrsAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8UFKwAAHYAAHYA + AHYAAHZgYLX///////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////9HR58AAHYAAHYAAHYAAHYWFrsAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8qKrsAAHYAAHYAAHYAAHYqKrsA + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8WFrsAAHYAAHYAAHYAAHZHR5////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////8yMpgAAHYAAHYAAHYAAHYNDcgAAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8qKrsAAHYAAHYAAHYAAHYqKrsAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8NDcgAAHYAAHYAAHYAAHYyMpj///// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////8aGpAA + AHYAAHYAAHYAAHYjI9oAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8qKrsAAHYAAHYAAHYAAHYqKrsAAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8jI9oAAHYAAHYAAHYAAHYaGpD///////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////8JCX8AAHYAAHYAAHYAAHYLC90AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8qKrsAAHYA + AHYAAHYAAHYqKrsAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8LC90AAHYAAHYAAHYAAHYICH7///////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////8BAXcAAHYAAHYAAHYAAHYH + B+MAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8qKrsAAHYAAHYAAHYAAHYqKrsAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8HB+MAAHYAAHYA + AHYAAHYBAXf///////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////19f8AAHYAAHYAAHYAAHYAAHYPD+wAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8qKrsAAHYAAHYAAHYAAHYqKrsA + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8PD+wAAHYAAHYAAHYAAHYAAHb19f////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////p6f8AAHYAAHYAAHYAAHYAAHYXF/QAAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8qKrsAAHYAAHYAAHYAAHYqKrsAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8XF/QAAHYAAHYAAHYAAHYAAHbp6f// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////////p6f8AAHYA + AHYAAHYAAHYAAHYXF/QAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8qKrsAAHYAAHYAAHYAAHYqKrsAAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8XF/QAAHYAAHYAAHYAAHYAAHbp6f////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////p6f8AAHYAAHYAAHYAAHYAAHYXF/QAAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8qKrsAAHYA + AHYAAHYAAHYqKrsAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8XF/QAAHYAAHYAAHYAAHYAAHbp6f////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////p6f8AAHYAAHYAAHYAAHYAAHYX + F/QAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8qKrsAAHYAAHYAAHYAAHYqKrsAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8XF/QAAHYAAHYA + AHYAAHYAAHbp6f////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////p6f8AAHYAAHYAAHYAAHYAAHYXF/QAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8qKrsAAHYAAHYAAHYAAHYqKrsA + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8XF/QAAHYAAHYAAHYAAHYAAHbp6f////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////p6f8AAHYAAHYAAHYAAHYAAHYXF/QAAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8qKrsAAHYAAHYAAHYAAHYqKrsAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8XF/QAAHYAAHYAAHYAAHYAAHbp6f// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////////p6f8AAHYA + AHYAAHYAAHYAAHYXF/QAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8qKrsAAHYAAHYAAHYAAHYqKrsAAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8XF/QAAHYAAHYAAHYAAHYAAHbp6f////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////p6f8AAHYAAHYAAHYAAHYAAHYXF/QAAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8qKrsAAHYA + AHYAAHYAAHYqKrsAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8XF/QAAHYAAHYAAHYAAHYAAHbp6f////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////p6f8AAHYAAHYAAHYAAHYAAHYX + F/QAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8qKrsAAHYAAHYAAHYAAHYqKrsAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8XF/QAAHYAAHYA + AHYAAHYAAHbp6f////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////p6f8AAHYAAHYAAHYAAHYAAHYXF/QAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8qKrsAAHYAAHYAAHYAAHYqKrsA + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8XF/QAAHYAAHYAAHYAAHYAAHbp6f////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////p6f8AAHYAAHYAAHYAAHYAAHYXF/QAAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8qKrsAAHYAAHYAAHYAAHYqKrsAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8XF/QAAHYAAHYAAHYAAHYAAHbp6f// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////////p6f8AAHYA + AHYAAHYAAHYAAHYXF/QAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8qKrsAAHYAAHYAAHYAAHYqKrsAAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8XF/QAAHYAAHYAAHYAAHYAAHbp6f////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////p6f8AAHYAAHYAAHYAAHYAAHYXF/QAAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8qKrsAAHYA + AHYAAHYAAHYqKrsAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8XF/QAAHYAAHYAAHYAAHYAAHbp6f////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////p6f8AAHYAAHYAAHYAAHYAAHYX + F/QAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8qKrsAAHYAAHYAAHYAAHYqKrsAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8XF/QAAHYAAHYA + AHYAAHYAAHbp6f////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////p6f8AAHYAAHYAAHYAAHYAAHYXF/QAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8qKrsAAHYAAHYAAHYAAHYqKrsA + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8XF/QAAHYAAHYAAHYAAHYAAHbp6f////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////p6f8AAHYAAHYAAHYAAHYAAHYXF/QAAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8qKrsAAHYAAHYAAHYAAHYqKrsAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8XF/QAAHYAAHYAAHYAAHYAAHbp6f// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////////p6f8AAHYA + AHYAAHYAAHYAAHYXF/QAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8qKrsAAHYAAHYAAHYAAHYqKrsAAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8XF/QAAHYAAHYAAHYAAHYAAHbp6f////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////p6f8AAHYAAHYAAHYAAHYAAHYXF/QAAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8qKrsAAHYA + AHYAAHYAAHYqKrsAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8XF/QAAHYAAHYAAHYAAHYAAHbp6f////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////p6f8AAHYAAHYAAHYAAHYAAHYX + F/QAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8qKrsAAHYAAHYAAHYAAHYqKrsAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8XF/QAAHYAAHYA + AHYAAHYAAHbp6f////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////p6f8AAHYAAHYAAHYAAHYAAHYXF/QAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8qKrsAAHYAAHYAAHYAAHYqKrsA + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8XF/QAAHYAAHYAAHYAAHYAAHbp6f////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////p6f8AAHYAAHYAAHYAAHYAAHYXF/QAAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8qKrsAAHYAAHYAAHYAAHYqKrsAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8XF/QAAHYAAHYAAHYAAHYAAHbp6f// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////////p6f8AAHYA + AHYAAHYAAHYAAHYXF/QAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8qKrsAAHYAAHYAAHYAAHYqKrsAAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8XF/QAAHYAAHYAAHYAAHYAAHbp6f////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////p6f8AAHYAAHYAAHYAAHYAAHYXF/QAAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8qKrsAAHYA + AHYAAHYAAHYqKrsAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8XF/QAAHYAAHYAAHYAAHYAAHbp6f////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////p6f8AAHYAAHYAAHYAAHYAAHYX + F/QAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8qKrsAAHYAAHYAAHYAAHYqKrsAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8XF/QAAHYAAHYA + AHYAAHYAAHbp6f////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////p6f8AAHYAAHYAAHYAAHYAAHYXF/QAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8qKrsAAHYAAHYAAHYAAHYqKrsA + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8XF/QAAHYAAHYAAHYAAHYAAHbp6f////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////p6f8AAHYAAHYAAHYAAHYAAHYXF/QAAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8qKrsAAHYAAHYAAHYAAHYqKrsAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8XF/QAAHYAAHYAAHYAAHYAAHbp6f// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////////p6f8AAHYA + AHYAAHYAAHYAAHYXF/QAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8qKrsAAHYAAHYAAHYAAHYqKrsAAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8XF/QAAHYAAHYAAHYAAHYAAHbp6f////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////p6f8AAHYAAHYAAHYAAHYAAHYXF/QAAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8qKrsAAHYA + AHYAAHYAAHYqKrsAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8XF/QAAHYAAHYAAHYAAHYAAHbp6f////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////p6f8AAHYAAHYAAHYAAHYAAHYX + F/QAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8qKrsAAHYAAHYAAHYAAHYqKrsAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8XF/QAAHYAAHYA + AHYAAHYAAHbp6f////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////S0u6fn9V5ebxSUqo8PJkkJJYYGI4LC4EJCX8NDYMaGpAzM5lJSaJra7iU + lM3Nzezo6P8AAHYAAHYAAHYAAHYAAHYXF/QAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8qKrsAAHYAAHYAAHYAAHYqKrsA + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8XF/QAAHYAAHYAAHYAAHYAAHbo6P/NzeyUlM1sbLhJSaIyMpkZGY8NDYMJCX8K + CoAYGI4kJJY9PZlSUqp5ebyentXS0u7///////////////////////////////////////////////// + //////////////////////////////////////////+1td9aWqwTE4cAAHYAAHYAAHYAAHYAAHYAAHYA + AHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYUFIoAAHYAAHYAAHYAAHYAAHYXF/QAAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8qKrsAAHYAAHYAAHYAAHYqKrsAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8XF/QAAHYAAHYAAHYAAHYAAHYVFYoA + AHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYTE4daWqy1td////// + //////////////////////////////////////////////////////////////////////////8qKpkA + AHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYA + AHYAAHYAAHYAAHYXF/QAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8qKrsAAHYAAHYAAHYAAHYqKrsAAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8XF/QAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYA + AHYAAHYAAHYAAHYAAHYAAHYqKpj///////////////////////////////////////////////////// + //////////////////////////8qKpgAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYA + AHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYgINkAAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8qKrsAAHYA + AHYAAHYAAHYqKrsAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8gINkAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYA + AHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYqKpj///////////////////// + //////////////////////////////////////////////////////////8qKpgAAHYAAHYAAHYAAHYA + AHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYA + AHYZGZ0QENwAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8LC/8ODuseHtwfH6IAAHYAAHYAAHYAAHYfH6IeHtwODusLC/8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8QENwaGp0AAHYAAHYAAHYA + AHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYA + AHYAAHYqKpj///////////////////////////////////////////////////////////////////// + //////////8qKpgAAHYAAHYAAHYCAngjI5FMTKVycruLi8afn9iqqt2/v92trd2hodmLi8ZtbbhAQJ4K + CoAAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYPD4wbG78bG+sAAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAP8AAP8AAP8AAP8AAP8AAP8VFf8aGuEaGr8aGp0FBXsAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYA + AHYAAHYFBXsaGpwaGr8aGuEWFv8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8b + G+sbG78PD4wAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYKCoBAQJ5tbbiLi8ajo9qtrd2/v92q + qt2fn9iLi8ZycrtMTKUjI5ECAngAAHYAAHYAAHYqKpj///////////////////////////////////// + //////////////////////////////////////////8qKpggIIxvb7i1td/v7/z///////////////// + ///////////////////////////////5+f+6uuNkZLEMDIEAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYA + AHYAAHYTE4cLC6MNDb0aGtIWFt0AAN0AAN0AAN0gIN0ZGdMEBL4ZGbAREZYDA3kAAHYAAHYAAHYAAHYA + AHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYDA3kREZYZGbAEBL4ZGdMgIN0A + AN0AAN0AAN0WFt0ZGdINDb0LC6QTE4cAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYMDIFkZLC6 + uuP5+f/////////////////////////////////////+/v/////////w8Py1td9vb7ggIIwqKpn///// + ///////////////////////////////////////////////////////////////////////////S0vH/ + ///////////////////////////////////////////////////////////////////////////w8PqJ + iccVFYUAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYA + AHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYA + AHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYA + AHYAAHYAAHYAAHYVFYWJicfw8Pr///////////////////////////////////////////////////// + ///////////////////////S0vH///////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////09PyJiccREYIAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYA + AHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYA + AHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYA + AHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYREYKJicfz8/z///////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////////////w8PqD + g8MVFYUAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYA + AHYAAHYAAHYAAHYGBnwyMphYWK96eruIiMOIiMN6ertYWK8yMpgFBXsAAHYAAHYAAHYAAHYAAHYAAHYA + AHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYWFoaDg8Tw8Pr///// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////39/+kpNRHR6YFBXsAAHYAAHYAAHYAAHYAAHYAAHYAAHYA + AHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYICH4+Pp6CgsPCwuX4+P////////////////////////////// + ///4+P/CwuWCgsM+Pp8ICH4AAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYAAHYA + AHYFBXtHR6akpNT39/////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////////////////y + 8v21td+BgcBVVa04OJkeHpIPD4UICH4ICH4MDIIaGpAxMZhJSaJsbLiUlM3Hx+b5+f////////////// + ///////////////////////////////////////////////////5+f/Hx+aUlM1sbLhJSaIxMZgZGY8L + C4EJCX8JCX8ODoQeHpM4OJlVVa2BgcC1td7y8v7///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + + + \ No newline at end of file diff --git a/TongueSegmentation/Program.cs b/TongueSegmentation/Program.cs new file mode 100644 index 0000000..f82bd28 --- /dev/null +++ b/TongueSegmentation/Program.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace TongueSegmentation { + internal static class Program { + /// + /// アプリケーションのメイン エントリ ポイントです。 + /// + [STAThread] + static void Main() { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new MainForm()); + } + } +} diff --git a/TongueSegmentation/Properties/AssemblyInfo.cs b/TongueSegmentation/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..971ba84 --- /dev/null +++ b/TongueSegmentation/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// アセンブリに関する一般的な情報は、次の方法で制御されます +// 制御されます。アセンブリに関連付けられている情報を変更するには、 +// これらの属性値を変更します。 +[assembly: AssemblyTitle("TongueSegmentation")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("TongueSegmentation")] +[assembly: AssemblyCopyright("Copyright © 2024")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// ComVisible を false に設定すると、このアセンブリ内の型は COM コンポーネントから +// 参照できなくなります。COM からこのアセンブリ内の型にアクセスする必要がある場合は、 +// その型の ComVisible 属性を true に設定してください。 +[assembly: ComVisible(false)] + +// このプロジェクトが COM に公開される場合、次の GUID が typelib の ID になります +[assembly: Guid("87bf247a-da31-43b4-8111-6b96d302218c")] + +// アセンブリのバージョン情報は、以下の 4 つの値で構成されています: +// +// メジャー バージョン +// マイナー バージョン +// ビルド番号 +// リビジョン +// +// すべての値を指定するか、次を使用してビルド番号とリビジョン番号を既定に設定できます +// 既定値にすることができます: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/TongueSegmentation/Properties/Resources.Designer.cs b/TongueSegmentation/Properties/Resources.Designer.cs new file mode 100644 index 0000000..8aaa3be --- /dev/null +++ b/TongueSegmentation/Properties/Resources.Designer.cs @@ -0,0 +1,62 @@ +//------------------------------------------------------------------------------ +// +// このコードはツールによって生成されました。 +// ランタイム バージョン:4.0.30319.42000 +// +// このファイルへの変更は、以下の状況下で不正な動作の原因になったり、 +// コードが再生成されるときに損失したりします +// +//------------------------------------------------------------------------------ + +namespace TongueSegmentation.Properties { + + + /// + /// ローカライズされた文字列などを検索するための、厳密に型指定されたリソース クラスです。 + /// + // このクラスは StronglyTypedResourceBuilder クラスが ResGen + // または Visual Studio のようなツールを使用して自動生成されました。 + // メンバーを追加または削除するには、.ResX ファイルを編集して、/str オプションと共に + // ResGen を実行し直すか、または 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("TongueSegmentation.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// すべてについて、現在のスレッドの CurrentUICulture プロパティをオーバーライドします + /// 現在のスレッドの 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/TongueSegmentation/Properties/Resources.resx b/TongueSegmentation/Properties/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/TongueSegmentation/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/TongueSegmentation/Properties/Settings.Designer.cs b/TongueSegmentation/Properties/Settings.Designer.cs new file mode 100644 index 0000000..0005063 --- /dev/null +++ b/TongueSegmentation/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// 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 TongueSegmentation.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/TongueSegmentation/Properties/Settings.settings b/TongueSegmentation/Properties/Settings.settings new file mode 100644 index 0000000..3964565 --- /dev/null +++ b/TongueSegmentation/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/TongueSegmentation/TongueSegmentation.csproj b/TongueSegmentation/TongueSegmentation.csproj new file mode 100644 index 0000000..373a08c --- /dev/null +++ b/TongueSegmentation/TongueSegmentation.csproj @@ -0,0 +1,229 @@ + + + + + + + + + Debug + AnyCPU + {87BF247A-DA31-43B4-8111-6B96D302218C} + WinExe + TongueSegmentation + TongueSegmentation + v4.8 + 512 + true + true + + + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + true + bin\x64\Debug\ + DEBUG;TRACE + full + x64 + 7.3 + prompt + true + + + bin\x64\Release\ + TRACE + true + pdbonly + x64 + 7.3 + prompt + true + + + tongue.ico + + + + ..\packages\AsyncIO.0.1.69\lib\net40\AsyncIO.dll + + + ..\packages\Microsoft.Bcl.Numerics.8.0.0\lib\net462\Microsoft.Bcl.Numerics.dll + + + ..\packages\Microsoft.ML.3.0.1\lib\netstandard2.0\Microsoft.ML.dll + + + ..\packages\Microsoft.ML.3.0.1\lib\netstandard2.0\Microsoft.ML.Core.dll + + + ..\packages\Microsoft.ML.CpuMath.3.0.1\lib\netstandard2.0\Microsoft.ML.CpuMath.dll + + + ..\packages\Microsoft.ML.3.0.1\lib\netstandard2.0\Microsoft.ML.Data.dll + + + ..\packages\Microsoft.ML.DataView.3.0.1\lib\netstandard2.0\Microsoft.ML.DataView.dll + + + ..\packages\Microsoft.ML.3.0.1\lib\netstandard2.0\Microsoft.ML.KMeansClustering.dll + + + ..\packages\Microsoft.ML.OnnxRuntime.Managed.1.17.3\lib\netstandard2.0\Microsoft.ML.OnnxRuntime.dll + + + ..\packages\Microsoft.ML.3.0.1\lib\netstandard2.0\Microsoft.ML.PCA.dll + + + ..\packages\Microsoft.ML.3.0.1\lib\netstandard2.0\Microsoft.ML.StandardTrainers.dll + + + ..\packages\Microsoft.ML.3.0.1\lib\netstandard2.0\Microsoft.ML.Transforms.dll + + + ..\packages\NaCl.Net.0.1.13\lib\net472\NaCl.dll + + + ..\packages\NetMQ.4.0.1.13\lib\net47\NetMQ.dll + + + ..\packages\Newtonsoft.Json.13.0.1\lib\net45\Newtonsoft.Json.dll + + + ..\packages\OpenCvSharp4.4.9.0.20240103\lib\net48\OpenCvSharp.dll + + + ..\packages\OpenCvSharp4.Extensions.4.9.0.20240103\lib\net48\OpenCvSharp.Extensions.dll + + + ..\packages\OpenCvSharp4.WpfExtensions.4.9.0.20240103\lib\net48\OpenCvSharp.WpfExtensions.dll + + + + + + ..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll + + + ..\packages\System.CodeDom.4.5.0\lib\net461\System.CodeDom.dll + + + ..\packages\System.Collections.Immutable.1.5.0\lib\netstandard2.0\System.Collections.Immutable.dll + + + + ..\packages\System.Drawing.Common.7.0.0\lib\net462\System.Drawing.Common.dll + + + ..\packages\System.Memory.4.5.5\lib\net461\System.Memory.dll + + + + ..\packages\System.Numerics.Tensors.8.0.0\lib\net462\System.Numerics.Tensors.dll + + + ..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll + + + ..\packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\net461\System.Runtime.CompilerServices.Unsafe.dll + + + + + ..\packages\System.Threading.Channels.4.7.1\lib\net461\System.Threading.Channels.dll + + + ..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll + + + ..\packages\System.ValueTuple.4.5.0\lib\net47\System.ValueTuple.dll + + + + + + + + + + + + + + + + + Form + + + MainForm.cs + + + + + MainForm.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + PreserveNewest + + + + + + + + + + + + このプロジェクトは、このコンピューター上にない NuGet パッケージを参照しています。それらのパッケージをダウンロードするには、[NuGet パッケージの復元] を使用します。詳細については、http://go.microsoft.com/fwlink/?LinkID=322105 を参照してください。見つからないファイルは {0} です。 + + + + + + + + + + + + + \ No newline at end of file diff --git a/TongueSegmentation/packages.config b/TongueSegmentation/packages.config new file mode 100644 index 0000000..429d31e --- /dev/null +++ b/TongueSegmentation/packages.config @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/TongueSegmentation/tongue.ico b/TongueSegmentation/tongue.ico new file mode 100644 index 0000000..d87a9bb --- /dev/null +++ b/TongueSegmentation/tongue.ico Binary files differ