From c32b82512f6eecf99234535dface1f69db564f68 Mon Sep 17 00:00:00 2001 From: kshman Date: Thu, 3 Jun 2021 20:54:27 +0900 Subject: [PATCH] Bring ping to left tab, Korean for global --- Data/DcLang-Korean.txt | 98 +++++++ DcControl.Designer.cs | 12 + DcControl.cs | 8 + DutyContent.csproj | 12 + Overlay/DutyOvForm.cs | 5 + Tab/DutyForm.Designer.cs | 271 +----------------- Tab/DutyForm.cs | 302 +------------------- Tab/DutyForm.resx | 592 +++++++++++++++++++-------------------- Tab/PingForm.Designer.cs | 281 +++++++++++++++++++ Tab/PingForm.cs | 324 +++++++++++++++++++++ Tab/PingForm.resx | 120 ++++++++ 11 files changed, 1183 insertions(+), 842 deletions(-) create mode 100644 Data/DcLang-Korean.txt create mode 100644 Tab/PingForm.Designer.cs create mode 100644 Tab/PingForm.cs create mode 100644 Tab/PingForm.resx diff --git a/Data/DcLang-Korean.txt b/Data/DcLang-Korean.txt new file mode 100644 index 0000000..8f596c3 --- /dev/null +++ b/Data/DcLang-Korean.txt @@ -0,0 +1,98 @@ +# 한국말 메시지 +LANG=한국어 + +0=FFXIV dc +1=준비됐습니다 +2=FFXIV 플러그인이 없어요! +3=FFXIV 플러그인을 찾았어요! +4=FFXIV 듀티 콘텐츠 시작합니다! +5=ACT 정보: {0} ({1}) +6=FFXIV 플러그인 정보: {0} ({1}) +7=잘못된 데이터: {0} +8=분석할 수 없어요 +9=알수없는 듀티: {0} +10=알수없는 인스턴스: {0} +11=알수없는 지역: {0} +12=알수없는 페이트: {0} +13=데이터를 읽을 수가 없어요! +14=데이터 파일이 없어요! {0} +20=듀티 콘텐츠 정보: {1}({0}) / A:{2} / R:{3} / I:{4} / F:{5} ({6}) +21=루렛 +22=인스턴스 +23=페이트 +24=스커미시 +25=크리티컬 인게이지먼트 +26=기본 +27=없음 + +99=듀티 콘텐츠 플러그인 {0} + +101=소리 파일을 선택하세요 +102=소리 파일 (*.wav)|*.wav|모든 파일 (*.*)|*.* +103=알림 테스트입니다!! +104=마우스 눌림 방지 + +200=설정 +201=표시 언어 +202=FFXIV를 보고 있지 않을때 오버레이를 감춥니다 + +300=듀티 +301=콘텐츠 +302=설정 +303=패킷 +304=데이터셋 +305=로그 글꼴 +306=오버레이 보기 +307=투명도 +308=소리 듣기 +309=인스턴스 +310=페이트 +311=라인 알림 +312=라인 토큰 +313=텔레그램 알림 +314=텔레그램 ID +315=텔레그램 토큰 +316=패킷 찾기 +317=설명 +318=세이브더퀸 찾기 +319=기능 +320=현재값 +321=상태 +322=찾은값 +323=CE 이름 +324=상태 +325=사람수 +326=진행도 +327=핑 +328=핑 사용 +329=속도별 색깔 +330=매우 좋음 +331=좋음 +332=보통 +333=나쁨 +334=그래프 보기 +335=클라이언트의 접속이 없을때 사용할 DC 선택 + +10001="{0}" 발생했어요! +10002=찾습니다: {0} +10003=매칭됐어요: {0} +10004=들어가요: {0} +10005={0} 발생했어요! +10006=대기 갯수: {0} +10007=시작 +10008=취소 +10009=적용 및 저장 +10010=중부 라노시아로 가시면 값이 채워집니다. 또는 남부 보즈야 전선의 스커미시로도 알 수 있습니다. +10011=토벌전 "성도 이슈가르드 방어전"에 해제로 입장해보세요. +10012=매치 +10013=인스턴스 +10014=남부 보즈야 전선으로 가서 크리티컬 인게이지먼트를 기다리세요. 오른쪽 보즈야 찾기에 후보 데이터가 뜨면 맞는 데이터를 선택하세요. +10015=설명을 볼 항목을 선택하세요 +10016=확인됨 +10017=끝남 +10018=등록중 +10019=입장하는중 +10020=진행중 +10021=알수없어요 +10022=패킷 데이터를 적용하고 덮어쓰실거예요? +10023=선택함 diff --git a/DcControl.Designer.cs b/DcControl.Designer.cs index b8b6bca..88b1356 100644 --- a/DcControl.Designer.cs +++ b/DcControl.Designer.cs @@ -35,6 +35,7 @@ namespace DutyContent this.tabPageConfig = new System.Windows.Forms.TabPage(); this.txtMesg = new System.Windows.Forms.RichTextBox(); this.btnClearMesg = new System.Windows.Forms.Button(); + this.tabPagePing = new System.Windows.Forms.TabPage(); ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); this.splitContainer1.Panel1.SuspendLayout(); this.splitContainer1.Panel2.SuspendLayout(); @@ -65,6 +66,7 @@ namespace DutyContent // this.tabMain.Alignment = System.Windows.Forms.TabAlignment.Left; this.tabMain.Controls.Add(this.tabPageDuty); + this.tabMain.Controls.Add(this.tabPagePing); this.tabMain.Controls.Add(this.tabPageConfig); this.tabMain.Dock = System.Windows.Forms.DockStyle.Fill; this.tabMain.DrawMode = System.Windows.Forms.TabDrawMode.OwnerDrawFixed; @@ -120,6 +122,15 @@ namespace DutyContent this.btnClearMesg.Text = "Clear Mesg"; this.btnClearMesg.UseVisualStyleBackColor = true; // + // tabPagePing + // + this.tabPagePing.Location = new System.Drawing.Point(104, 4); + this.tabPagePing.Name = "tabPagePing"; + this.tabPagePing.Size = new System.Drawing.Size(684, 489); + this.tabPagePing.TabIndex = 2; + this.tabPagePing.Text = "Ping"; + this.tabPagePing.UseVisualStyleBackColor = true; + // // DcControl // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -144,5 +155,6 @@ namespace DutyContent private System.Windows.Forms.TabPage tabPageDuty; private System.Windows.Forms.TabPage tabPageConfig; private System.Windows.Forms.RichTextBox txtMesg; + private System.Windows.Forms.TabPage tabPagePing; } } diff --git a/DcControl.cs b/DcControl.cs index 595364e..9e5909f 100644 --- a/DcControl.cs +++ b/DcControl.cs @@ -55,6 +55,9 @@ namespace DutyContent Tab.DutyForm dutyform = new Tab.DutyForm(); tabPageDuty.Controls.Add(dutyform.Controls[0]); + Tab.PingForm pingform = new Tab.PingForm(); + tabPagePing.Controls.Add(pingform.Controls[0]); + Tab.ConfigForm configform = new Tab.ConfigForm(); tabPageConfig.Controls.Add(configform.Controls[0]); } @@ -130,6 +133,7 @@ namespace DutyContent DcConfig.PluginEnable = false; + Tab.PingForm.Self?.PluginDeinitialize(); Tab.DutyForm.Self?.PluginDeinitialize(); Tab.ConfigForm.Self?.PluginDeinitialize(); DcConfig.SaveConfig(); @@ -184,6 +188,7 @@ namespace DutyContent // Tab.ConfigForm.Self?.PluginInitialize(); Tab.DutyForm.Self?.PluginInitialize(); + Tab.PingForm.Self?.PluginInitialize(); // DcConfig.PluginEnable = true; @@ -314,6 +319,9 @@ namespace DutyContent tabPageDuty.Text = MesgLog.Text(300); Tab.DutyForm.Self?.UpdateUiLocale(); + tabPagePing.Text = MesgLog.Text(327); + Tab.PingForm.Self?.UpdateUiLocale(); + tabPageConfig.Text = MesgLog.Text(200); Tab.ConfigForm.Self?.UpdateUiLocale(); } diff --git a/DutyContent.csproj b/DutyContent.csproj index 2f8abbd..e46e571 100644 --- a/DutyContent.csproj +++ b/DutyContent.csproj @@ -95,6 +95,12 @@ DutyOvForm.cs + + Form + + + PingForm.cs + @@ -132,6 +138,9 @@ ResXFileCodeGenerator Resources.Designer.cs + + PingForm.cs + @@ -175,6 +184,9 @@ + + + if exist "%25APPDATA%25\Advanced Combat Tracker\Plugins\DutyContent" copy $(TargetPath) "%25APPDATA%25\Advanced Combat Tracker\Plugins\DutyContent" /y diff --git a/Overlay/DutyOvForm.cs b/Overlay/DutyOvForm.cs index 3f016f7..6b5fcb2 100644 --- a/Overlay/DutyOvForm.cs +++ b/Overlay/DutyOvForm.cs @@ -6,6 +6,9 @@ namespace DutyContent.Overlay { public partial class DutyOvForm : Form { + private static DutyOvForm _self; + public static DutyOvForm Self => _self; + private const int BlinkTime = 300; private const int BlinkCount = 20; @@ -21,6 +24,8 @@ namespace DutyContent.Overlay // public DutyOvForm() { + _self = this; + InitializeComponent(); Location = DcConfig.Duty.OverlayLocation; diff --git a/Tab/DutyForm.Designer.cs b/Tab/DutyForm.Designer.cs index 1370c04..3db0e5f 100644 --- a/Tab/DutyForm.Designer.cs +++ b/Tab/DutyForm.Designer.cs @@ -59,6 +59,7 @@ namespace DutyContent.Tab this.tabContent = new System.Windows.Forms.TabControl(); this.tabPageContent = new System.Windows.Forms.TabPage(); this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.chkShowDebug = new System.Windows.Forms.CheckBox(); this.rdoFatePreset4 = new System.Windows.Forms.RadioButton(); this.rdoFatePreset3 = new System.Windows.Forms.RadioButton(); this.rdoFatePreset2 = new System.Windows.Forms.RadioButton(); @@ -99,23 +100,6 @@ namespace DutyContent.Tab this.btnOverlayDimming = new System.Windows.Forms.Button(); this.lblOverlayTransparent = new System.Windows.Forms.Label(); this.chkEnableOverlay = new System.Windows.Forms.CheckBox(); - this.tabPagePing = new System.Windows.Forms.TabPage(); - this.panel6 = new System.Windows.Forms.Panel(); - this.cboPingDefAddr = new System.Windows.Forms.ComboBox(); - this.lblPingDefAddr = new System.Windows.Forms.Label(); - this.pbxPingGraph = new System.Windows.Forms.PictureBox(); - this.chkPingGraph = new System.Windows.Forms.CheckBox(); - this.tlpnPingColors = new System.Windows.Forms.TableLayoutPanel(); - this.lblPingStat1 = new System.Windows.Forms.Label(); - this.btnPingColor4 = new System.Windows.Forms.Button(); - this.btnPingColor2 = new System.Windows.Forms.Button(); - this.btnPingColor3 = new System.Windows.Forms.Button(); - this.lblPingStat2 = new System.Windows.Forms.Label(); - this.lblPingStat4 = new System.Windows.Forms.Label(); - this.btnPingColor1 = new System.Windows.Forms.Button(); - this.lblPingStat3 = new System.Windows.Forms.Label(); - this.lblPingColors = new System.Windows.Forms.Label(); - this.chkUsePing = new System.Windows.Forms.CheckBox(); this.tabPagePacket = new System.Windows.Forms.TabPage(); this.panel5 = new System.Windows.Forms.Panel(); this.txtPacketDescription = new System.Windows.Forms.TextBox(); @@ -136,7 +120,6 @@ namespace DutyContent.Tab this.columnHeader4 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); this.lblPacketFinder = new System.Windows.Forms.Label(); this.ilTabContent = new System.Windows.Forms.ImageList(this.components); - this.chkShowDebug = new System.Windows.Forms.CheckBox(); this.tabContent.SuspendLayout(); this.tabPageContent.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); @@ -148,10 +131,6 @@ namespace DutyContent.Tab this.panel3.SuspendLayout(); this.panel2.SuspendLayout(); this.panel1.SuspendLayout(); - this.tabPagePing.SuspendLayout(); - this.panel6.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pbxPingGraph)).BeginInit(); - this.tlpnPingColors.SuspendLayout(); this.tabPagePacket.SuspendLayout(); this.panel5.SuspendLayout(); this.SuspendLayout(); @@ -160,7 +139,6 @@ namespace DutyContent.Tab // this.tabContent.Controls.Add(this.tabPageContent); this.tabContent.Controls.Add(this.tabPageSetting); - this.tabContent.Controls.Add(this.tabPagePing); this.tabContent.Controls.Add(this.tabPagePacket); this.tabContent.Dock = System.Windows.Forms.DockStyle.Fill; this.tabContent.ImageList = this.ilTabContent; @@ -204,6 +182,17 @@ namespace DutyContent.Tab this.splitContainer1.SplitterDistance = 262; this.splitContainer1.TabIndex = 0; // + // chkShowDebug + // + this.chkShowDebug.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.chkShowDebug.AutoSize = true; + this.chkShowDebug.Location = new System.Drawing.Point(201, 7); + this.chkShowDebug.Name = "chkShowDebug"; + this.chkShowDebug.Size = new System.Drawing.Size(58, 17); + this.chkShowDebug.TabIndex = 5; + this.chkShowDebug.Text = "Debug"; + this.chkShowDebug.UseVisualStyleBackColor = true; + // // rdoFatePreset4 // this.rdoFatePreset4.AutoSize = true; @@ -670,208 +659,6 @@ namespace DutyContent.Tab this.chkEnableOverlay.UseVisualStyleBackColor = true; this.chkEnableOverlay.CheckedChanged += new System.EventHandler(this.ChkEnableOverlay_CheckedChanged); // - // tabPagePing - // - this.tabPagePing.Controls.Add(this.panel6); - this.tabPagePing.ImageIndex = 3; - this.tabPagePing.Location = new System.Drawing.Point(4, 39); - this.tabPagePing.Name = "tabPagePing"; - this.tabPagePing.Size = new System.Drawing.Size(792, 459); - this.tabPagePing.TabIndex = 3; - this.tabPagePing.Text = "327"; - this.tabPagePing.UseVisualStyleBackColor = true; - // - // panel6 - // - this.panel6.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.panel6.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.panel6.Controls.Add(this.cboPingDefAddr); - this.panel6.Controls.Add(this.lblPingDefAddr); - this.panel6.Controls.Add(this.pbxPingGraph); - this.panel6.Controls.Add(this.chkPingGraph); - this.panel6.Controls.Add(this.tlpnPingColors); - this.panel6.Controls.Add(this.lblPingColors); - this.panel6.Controls.Add(this.chkUsePing); - this.panel6.Location = new System.Drawing.Point(6, 8); - this.panel6.Name = "panel6"; - this.panel6.Size = new System.Drawing.Size(778, 353); - this.panel6.TabIndex = 1; - // - // cboPingDefAddr - // - this.cboPingDefAddr.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.cboPingDefAddr.FormattingEnabled = true; - this.cboPingDefAddr.Location = new System.Drawing.Point(535, 51); - this.cboPingDefAddr.Name = "cboPingDefAddr"; - this.cboPingDefAddr.Size = new System.Drawing.Size(238, 21); - this.cboPingDefAddr.TabIndex = 15; - this.cboPingDefAddr.SelectedIndexChanged += new System.EventHandler(this.CboPingDefAddr_SelectedIndexChanged); - // - // lblPingDefAddr - // - this.lblPingDefAddr.AutoSize = true; - this.lblPingDefAddr.Location = new System.Drawing.Point(515, 35); - this.lblPingDefAddr.Name = "lblPingDefAddr"; - this.lblPingDefAddr.Size = new System.Drawing.Size(25, 13); - this.lblPingDefAddr.TabIndex = 14; - this.lblPingDefAddr.Text = "335"; - // - // pbxPingGraph - // - this.pbxPingGraph.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.pbxPingGraph.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.pbxPingGraph.Location = new System.Drawing.Point(129, 108); - this.pbxPingGraph.Name = "pbxPingGraph"; - this.pbxPingGraph.Size = new System.Drawing.Size(644, 114); - this.pbxPingGraph.TabIndex = 13; - this.pbxPingGraph.TabStop = false; - // - // chkPingGraph - // - this.chkPingGraph.AutoSize = true; - this.chkPingGraph.Location = new System.Drawing.Point(26, 108); - this.chkPingGraph.Name = "chkPingGraph"; - this.chkPingGraph.Size = new System.Drawing.Size(44, 17); - this.chkPingGraph.TabIndex = 12; - this.chkPingGraph.Text = "334"; - this.chkPingGraph.UseVisualStyleBackColor = true; - this.chkPingGraph.CheckedChanged += new System.EventHandler(this.ChkPingGraph_CheckedChanged); - // - // tlpnPingColors - // - this.tlpnPingColors.ColumnCount = 4; - this.tlpnPingColors.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F)); - this.tlpnPingColors.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F)); - this.tlpnPingColors.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F)); - this.tlpnPingColors.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F)); - this.tlpnPingColors.Controls.Add(this.lblPingStat1, 0, 0); - this.tlpnPingColors.Controls.Add(this.btnPingColor4, 3, 1); - this.tlpnPingColors.Controls.Add(this.btnPingColor2, 1, 1); - this.tlpnPingColors.Controls.Add(this.btnPingColor3, 2, 1); - this.tlpnPingColors.Controls.Add(this.lblPingStat2, 1, 0); - this.tlpnPingColors.Controls.Add(this.lblPingStat4, 3, 0); - this.tlpnPingColors.Controls.Add(this.btnPingColor1, 0, 1); - this.tlpnPingColors.Controls.Add(this.lblPingStat3, 2, 0); - this.tlpnPingColors.Location = new System.Drawing.Point(129, 35); - this.tlpnPingColors.Name = "tlpnPingColors"; - this.tlpnPingColors.Padding = new System.Windows.Forms.Padding(3); - this.tlpnPingColors.RowCount = 2; - this.tlpnPingColors.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 40F)); - this.tlpnPingColors.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 60F)); - this.tlpnPingColors.Size = new System.Drawing.Size(318, 62); - this.tlpnPingColors.TabIndex = 11; - // - // lblPingStat1 - // - this.lblPingStat1.AutoSize = true; - this.lblPingStat1.Dock = System.Windows.Forms.DockStyle.Fill; - this.lblPingStat1.Location = new System.Drawing.Point(6, 3); - this.lblPingStat1.Name = "lblPingStat1"; - this.lblPingStat1.Size = new System.Drawing.Size(72, 22); - this.lblPingStat1.TabIndex = 6; - this.lblPingStat1.Text = "330"; - this.lblPingStat1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; - // - // btnPingColor4 - // - this.btnPingColor4.BackColor = System.Drawing.Color.Plum; - this.btnPingColor4.Dock = System.Windows.Forms.DockStyle.Fill; - this.btnPingColor4.Location = new System.Drawing.Point(240, 28); - this.btnPingColor4.Name = "btnPingColor4"; - this.btnPingColor4.Size = new System.Drawing.Size(72, 28); - this.btnPingColor4.TabIndex = 8; - this.btnPingColor4.UseVisualStyleBackColor = false; - this.btnPingColor4.Click += new System.EventHandler(this.BtnPingColor4_Click); - // - // btnPingColor2 - // - this.btnPingColor2.BackColor = System.Drawing.Color.Aqua; - this.btnPingColor2.Dock = System.Windows.Forms.DockStyle.Fill; - this.btnPingColor2.Location = new System.Drawing.Point(84, 28); - this.btnPingColor2.Name = "btnPingColor2"; - this.btnPingColor2.Size = new System.Drawing.Size(72, 28); - this.btnPingColor2.TabIndex = 10; - this.btnPingColor2.UseVisualStyleBackColor = false; - this.btnPingColor2.Click += new System.EventHandler(this.BtnPingColor2_Click); - // - // btnPingColor3 - // - this.btnPingColor3.BackColor = System.Drawing.Color.LawnGreen; - this.btnPingColor3.Dock = System.Windows.Forms.DockStyle.Fill; - this.btnPingColor3.Location = new System.Drawing.Point(162, 28); - this.btnPingColor3.Name = "btnPingColor3"; - this.btnPingColor3.Size = new System.Drawing.Size(72, 28); - this.btnPingColor3.TabIndex = 9; - this.btnPingColor3.UseVisualStyleBackColor = false; - this.btnPingColor3.Click += new System.EventHandler(this.BtnPingColor3_Click); - // - // lblPingStat2 - // - this.lblPingStat2.AutoSize = true; - this.lblPingStat2.Dock = System.Windows.Forms.DockStyle.Fill; - this.lblPingStat2.Location = new System.Drawing.Point(84, 3); - this.lblPingStat2.Name = "lblPingStat2"; - this.lblPingStat2.Size = new System.Drawing.Size(72, 22); - this.lblPingStat2.TabIndex = 5; - this.lblPingStat2.Text = "331"; - this.lblPingStat2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; - // - // lblPingStat4 - // - this.lblPingStat4.AutoSize = true; - this.lblPingStat4.Dock = System.Windows.Forms.DockStyle.Fill; - this.lblPingStat4.Location = new System.Drawing.Point(240, 3); - this.lblPingStat4.Name = "lblPingStat4"; - this.lblPingStat4.Size = new System.Drawing.Size(72, 22); - this.lblPingStat4.TabIndex = 3; - this.lblPingStat4.Text = "333"; - this.lblPingStat4.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; - // - // btnPingColor1 - // - this.btnPingColor1.BackColor = System.Drawing.Color.RoyalBlue; - this.btnPingColor1.Dock = System.Windows.Forms.DockStyle.Fill; - this.btnPingColor1.Location = new System.Drawing.Point(6, 28); - this.btnPingColor1.Name = "btnPingColor1"; - this.btnPingColor1.Size = new System.Drawing.Size(72, 28); - this.btnPingColor1.TabIndex = 7; - this.btnPingColor1.UseVisualStyleBackColor = false; - this.btnPingColor1.Click += new System.EventHandler(this.BtnPingColor1_Click); - // - // lblPingStat3 - // - this.lblPingStat3.AutoSize = true; - this.lblPingStat3.Dock = System.Windows.Forms.DockStyle.Fill; - this.lblPingStat3.Location = new System.Drawing.Point(162, 3); - this.lblPingStat3.Name = "lblPingStat3"; - this.lblPingStat3.Size = new System.Drawing.Size(72, 22); - this.lblPingStat3.TabIndex = 4; - this.lblPingStat3.Text = "332"; - this.lblPingStat3.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; - // - // lblPingColors - // - this.lblPingColors.AutoSize = true; - this.lblPingColors.Location = new System.Drawing.Point(23, 35); - this.lblPingColors.Name = "lblPingColors"; - this.lblPingColors.Size = new System.Drawing.Size(25, 13); - this.lblPingColors.TabIndex = 2; - this.lblPingColors.Text = "329"; - // - // chkUsePing - // - this.chkUsePing.AutoSize = true; - this.chkUsePing.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.chkUsePing.Location = new System.Drawing.Point(3, 3); - this.chkUsePing.Name = "chkUsePing"; - this.chkUsePing.Size = new System.Drawing.Size(58, 24); - this.chkUsePing.TabIndex = 0; - this.chkUsePing.Text = "328"; - this.chkUsePing.UseVisualStyleBackColor = true; - this.chkUsePing.CheckedChanged += new System.EventHandler(this.ChkUsePing_CheckedChanged); - // // tabPagePacket // this.tabPagePacket.Controls.Add(this.panel5); @@ -1075,17 +862,6 @@ namespace DutyContent.Tab this.ilTabContent.Images.SetKeyName(2, "pix_tab_tool.png"); this.ilTabContent.Images.SetKeyName(3, "pix_tab_ping.png"); // - // chkShowDebug - // - this.chkShowDebug.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.chkShowDebug.AutoSize = true; - this.chkShowDebug.Location = new System.Drawing.Point(201, 7); - this.chkShowDebug.Name = "chkShowDebug"; - this.chkShowDebug.Size = new System.Drawing.Size(58, 17); - this.chkShowDebug.TabIndex = 5; - this.chkShowDebug.Text = "Debug"; - this.chkShowDebug.UseVisualStyleBackColor = true; - // // DutyForm // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -1112,12 +888,6 @@ namespace DutyContent.Tab this.panel2.PerformLayout(); this.panel1.ResumeLayout(false); this.panel1.PerformLayout(); - this.tabPagePing.ResumeLayout(false); - this.panel6.ResumeLayout(false); - this.panel6.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pbxPingGraph)).EndInit(); - this.tlpnPingColors.ResumeLayout(false); - this.tlpnPingColors.PerformLayout(); this.tabPagePacket.ResumeLayout(false); this.panel5.ResumeLayout(false); this.panel5.PerformLayout(); @@ -1190,23 +960,6 @@ namespace DutyContent.Tab private System.Windows.Forms.Label lblPacketDesc; private System.Windows.Forms.ColumnHeader columnHeader8; private System.Windows.Forms.CheckBox chkOverlayClickThru; - private System.Windows.Forms.TabPage tabPagePing; - private System.Windows.Forms.Panel panel6; - private System.Windows.Forms.Label lblPingColors; - private System.Windows.Forms.CheckBox chkUsePing; - private System.Windows.Forms.Button btnPingColor2; - private System.Windows.Forms.Label lblPingStat4; - private System.Windows.Forms.Label lblPingStat2; - private System.Windows.Forms.Label lblPingStat3; - private System.Windows.Forms.Button btnPingColor4; - private System.Windows.Forms.Button btnPingColor1; - private System.Windows.Forms.Button btnPingColor3; - private System.Windows.Forms.Label lblPingStat1; - private System.Windows.Forms.TableLayoutPanel tlpnPingColors; - private System.Windows.Forms.PictureBox pbxPingGraph; - private System.Windows.Forms.CheckBox chkPingGraph; - private System.Windows.Forms.Label lblPingDefAddr; - private System.Windows.Forms.ComboBox cboPingDefAddr; private System.Windows.Forms.CheckBox chkShowDebug; } } \ No newline at end of file diff --git a/Tab/DutyForm.cs b/Tab/DutyForm.cs index 2074232..d0d9f51 100644 --- a/Tab/DutyForm.cs +++ b/Tab/DutyForm.cs @@ -1,5 +1,4 @@ -using DutyContent.Interface; -using System; +using System; using System.Collections.Generic; using System.Diagnostics; using System.Drawing; @@ -10,8 +9,6 @@ using System.Net; using System.Net.Http; using System.Text; using System.IO; -using System.Threading; -using System.Net.NetworkInformation; namespace DutyContent.Tab { @@ -28,12 +25,6 @@ namespace DutyContent.Tab private Overlay.DutyOvForm _overlay; - private System.Timers.Timer _ping_timer; - private long _ping_last; - private Color _ping_color = Color.Transparent; - private Libre.PingGrapher _ping_grpr; - private List _ping_keeps = new List() { 0, 0, }; - public DutyForm() { _self = this; @@ -41,7 +32,6 @@ namespace DutyContent.Tab InitializeComponent(); _overlay = new Overlay.DutyOvForm(); - _ping_grpr = new Libre.PingGrapher(pbxPingGraph); } private void DutyTabForm_FormClosing(object sender, FormClosingEventArgs e) @@ -112,14 +102,6 @@ namespace DutyContent.Tab btnTestNotify.Enabled = DcConfig.Duty.EnableNotify; - // - chkUsePing.Checked = DcConfig.Duty.UsePing; - btnPingColor1.BackColor = DcConfig.Duty.PingColors[0]; - btnPingColor2.BackColor = DcConfig.Duty.PingColors[1]; - btnPingColor3.BackColor = DcConfig.Duty.PingColors[2]; - btnPingColor4.BackColor = DcConfig.Duty.PingColors[3]; - chkPingGraph.Checked = DcConfig.Duty.PingGraph; - // switch (DcConfig.Duty.ActiveFate) { @@ -129,52 +111,10 @@ namespace DutyContent.Tab case 3: rdoFatePreset4.Checked = true; break; } UpdateFates(); - - // - try - { - var svl = File.ReadAllLines(Path.Combine(DcConfig.DataPath, "ServerList.txt")); - int ssv = -1; - - for (var i = 0; i < svl.Length; i++) - { - cboPingDefAddr.Items.Add(svl[i]); - - if (svl[i].StartsWith(DcConfig.Duty.PingDefAddr)) - ssv = i; - } - - if (string.IsNullOrEmpty(DcConfig.Duty.PingDefAddr)) - ssv = -1; - - cboPingDefAddr.SelectedIndex = ssv > 0 ? ssv : 0; - } - catch - { - cboPingDefAddr.Items.Clear(); - cboPingDefAddr.Items.Add(MesgLog.Text(27)); - cboPingDefAddr.SelectedIndex = 0; - } - - // - _ping_timer = new System.Timers.Timer() { Interval = 5000 }; - _ping_timer.Elapsed += (sender, e) => PingOnce(); - - if (DcConfig.Duty.UsePing) - { - PingOnce(false); - _ping_timer.Start(); - } } public void PluginDeinitialize() { - if (_ping_timer != null) - { - _ping_timer.Stop(); - _ping_timer = null; - } - _overlay.Hide(); _overlay = null; } @@ -209,7 +149,6 @@ namespace DutyContent.Tab tabPageContent.Text = MesgLog.Text(301); tabPageSetting.Text = MesgLog.Text(302); tabPagePacket.Text = MesgLog.Text(303); - tabPagePing.Text = MesgLog.Text(327); lblDataSet.Text = MesgLog.Text(304); lblLogFont.Text = MesgLog.Text(305); @@ -245,15 +184,6 @@ namespace DutyContent.Tab btnPacketStart.Text = MesgLog.Text(10007); btnPacketApply.Text = MesgLog.Text(10009); - - chkUsePing.Text = MesgLog.Text(328); - lblPingColors.Text = MesgLog.Text(329); - lblPingStat1.Text = MesgLog.Text(330); - lblPingStat2.Text = MesgLog.Text(331); - lblPingStat3.Text = MesgLog.Text(332); - lblPingStat4.Text = MesgLog.Text(333); - chkPingGraph.Text = MesgLog.Text(334); - lblPingDefAddr.Text = MesgLog.Text(335); } public void PacketHandler(string pid, byte[] message) @@ -405,8 +335,8 @@ namespace DutyContent.Tab var stq = _stq_type == DcContent.SaveTheQueenType.Bozja ? 30000 : - _stq_type == DcContent.SaveTheQueenType.Zadnor ? 30100 : - 30100; // temporary + _stq_type == DcContent.SaveTheQueenType.Zadnor ? 30100 : + 30100; // temporary var ce = stq + data[8]; var stat = data[10]; @@ -1209,7 +1139,12 @@ namespace DutyContent.Tab 1597, 1598, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1617, 1618, 1619, - 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628 + 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, + + // zadnor + 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, + 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, + 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, }; // @@ -1303,7 +1238,7 @@ namespace DutyContent.Tab } // critical engagement - if (data.Length >= 12) + if (data.Length >= 12 && _stq_type != DcContent.SaveTheQueenType.No) { // 0[4] timestamp // 4[2] mmss @@ -1354,7 +1289,11 @@ namespace DutyContent.Tab if (ok) { - var ce = DcContent.GetFate(code + 30000); + var stq = + _stq_type == DcContent.SaveTheQueenType.Bozja ? 30000 : + _stq_type == DcContent.SaveTheQueenType.Zadnor ? 30100 : + 30100; // temporary + var ce = DcContent.GetFate(code + stq); var li = new ListViewItem(new string[] { @@ -1375,216 +1314,5 @@ namespace DutyContent.Tab } } } - - private void ChkUsePing_CheckedChanged(object sender, EventArgs e) - { - if (!DcConfig.PluginEnable) - return; - - DcConfig.Duty.UsePing = chkUsePing.Checked; - - SaveConfig(); - - if (chkUsePing.Checked) - { - PingOnce(); - _ping_timer.Start(); - } - else - { - _ping_timer.Stop(); - _overlay.ResetStat(); - } - } - - private void PingColorWorker(int index, Button button) - { - Color color = (Color)WorkerAct.Invoker(new WorkerAct.ObjectReturnerDelegate(() => - { - var dg = new ColorDialog() - { - AnyColor = true, - Color = DcConfig.Duty.PingColors[index], - }; - - return dg.ShowDialog() == DialogResult.OK ? dg.Color : DcConfig.Duty.PingColors[index]; - })); - - if (DcConfig.Duty.PingColors[index] != color) - { - button.BackColor = color; - DcConfig.Duty.PingColors[index] = color; - SaveConfig(); - } - } - - private void BtnPingColor1_Click(object sender, EventArgs e) - { - PingColorWorker(0, btnPingColor1); - } - - private void BtnPingColor2_Click(object sender, EventArgs e) - { - PingColorWorker(1, btnPingColor2); - } - - private void BtnPingColor3_Click(object sender, EventArgs e) - { - PingColorWorker(2, btnPingColor3); - } - - private void BtnPingColor4_Click(object sender, EventArgs e) - { - PingColorWorker(3, btnPingColor4); - } - - private void ChkPingGraph_CheckedChanged(object sender, EventArgs e) - { - if (!DcConfig.PluginEnable) - return; - - DcConfig.Duty.PingGraph = chkPingGraph.Checked; - - SaveConfig(); - } - - private void CboPingDefAddr_SelectedIndexChanged(object sender, EventArgs e) - { - if (!DcConfig.PluginEnable) - return; - - var val = cboPingDefAddr.SelectedItem as string; - - if (!string.IsNullOrEmpty(val)) - { - var ss = val.Split(' '); - if (ss.Length > 0) - { - DcConfig.Duty.PingDefAddr = ss[0].Trim(); - - SaveConfig(); - - return; - } - } - - DcConfig.Duty.PingDefAddr = string.Empty; - - SaveConfig(); - } - - // - private void PingOnce(bool check_plugin_enable = true) - { - if (!DcConfig.Duty.UsePing) - return; - - if (check_plugin_enable && !DcConfig.PluginEnable) - return; - - var conns = DcConfig.Connections.CopyConnection(); - long rtt = 0; - double loss = 0; - - if (conns.Length > 0) - { - foreach (var row in conns) - { - var (r, l) = CalcPing(row.RemoteAddress); - - if (rtt < r) - rtt = r; - - if (loss < l) - loss = l; - } - } - else - { - if (string.IsNullOrEmpty(DcConfig.Duty.PingDefAddr)) - { - _overlay.ResetStat(); - return; - } - - var defip = ThirdParty.Converter.ToIPAddressFromIPV4(DcConfig.Duty.PingDefAddr); - - if (defip == IPAddress.None || defip == IPAddress.IPv6None) - { - _overlay.ResetStat(); - return; - } - - var (r, l) = CalcPing(defip); - - if (rtt < r) - rtt = r; - - if (loss < l) - loss = l; - } - - //MesgLog.L("Ping: {0}, {1}%", rtt, loss); - - Color color; - if (loss > 0.0 || rtt > 150) - color = DcConfig.Duty.PingColors[3]; - else if (rtt > 100) - color = DcConfig.Duty.PingColors[2]; - else if (rtt > 50) - color = DcConfig.Duty.PingColors[1]; - else - color = DcConfig.Duty.PingColors[0]; - - if (_ping_last != rtt || loss > 0.0 || _ping_color != color) - { - _ping_last = rtt; - _ping_color = color; - - _overlay.SetStatPing(color, rtt, loss); - } - - // - if (DcConfig.Duty.PingGraph) - { - _ping_keeps.Add((int)rtt); - if (_ping_keeps.Count > 120) - _ping_keeps.RemoveAt(0); - - _ping_grpr.Enter(); - _ping_grpr.DrawValues(_ping_keeps); - WorkerAct.Invoker(() => _ping_grpr.Leave()); - } - } - - // http://forum.codecall.net/topic/37643-c-packet-lossping-program/ - - private static readonly PingOptions _ping_options = new PingOptions { DontFragment = true }; - private static readonly byte[] _ping_buffers = Encoding.ASCII.GetBytes("01234567890123456789012345678901"); - private static readonly int _ping_timerout = 120; - - // - private (long Rtt, double Loss) CalcPing(IPAddress host, int amount = 6) - { - var ps = new Ping(); - - int failed = 0; - long rtt = 0; - - for (var i = 0; i < amount; i++) - { - PingReply pr = ps.Send(host, _ping_timerout, _ping_buffers, _ping_options); - - if (pr.Status != IPStatus.Success) - failed++; - - if (rtt < pr.RoundtripTime) - rtt = pr.RoundtripTime; - } - - double loss = (failed / amount) * 100; - - return (rtt, loss); - } } } diff --git a/Tab/DutyForm.resx b/Tab/DutyForm.resx index 0e045a1..5699061 100644 --- a/Tab/DutyForm.resx +++ b/Tab/DutyForm.resx @@ -124,306 +124,306 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 - ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAG - RgAAAk1TRnQBSQFMAgEBBAEAASgBAQEoAQEBIAEAASABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAGA + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAD+ + RQAAAk1TRnQBSQFMAgEBBAEAATABAQEwAQEBIAEAASABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAGA AwABQAMAAQEBAAEgBgABgP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A /wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A - /wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8AWgADNgRZAcQDVQHqAxIB/wMSAf8DEgH/AxIB/wMSAf8DEgH/ - AxIB/wMSAf8DEgH/AxIB/wMSAf8DEgH/AxIB/wMSAf8DEgH/AxIB/wMSAf8DEgH/AxIB/wMSAf8DEgH/ - AxIB/wNdAeIDVAGuAykBPwgAAwcBCgNIAYUCEgGqAf8CDQGqAf8CDAGkAf8CDAGkAf8CDAGkAf8CDAGk - Af8CDAGkAf8CDAGkAf8CDAGjAf8CDAGiAf8CDAGiAf8CDAGiAf8CDAGiAf8CDAGiAf8CDAGiAf8CDAGi - Af8CDAGiAf8CDAGiAf8CDAGiAf8CDAGjAf8CDAGkAf8CDAGkAf8CDAGkAf8CDAGkAf8CDAGkAf8CDAGk - Af8CDQGqAf8CEgGqAf8DSAGFAwcBCv8ABQADTgGXAzMB/wOyAf8DzQH/A90B/wPdAf8D3QH/A90B/wPd + /wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8AWgADNgRZAcQDVQHqAxEB/wMRAf8DEQH/AxEB/wMRAf8DEQH/ + AxEB/wMRAf8DEQH/AxEB/wMRAf8DEQH/AxEB/wMRAf8DEQH/AxEB/wMRAf8DEQH/AxEB/wMRAf8DEQH/ + AxEB/wNdAeIDVAGuAykBPwgAAwcBCgNIAYUCEQGqAf8CDAGqAf8CCwGkAf8CCwGkAf8CCwGkAf8CCwGk + Af8CCwGkAf8CCwGkAf8CCwGjAf8CCwGiAf8CCwGiAf8CCwGiAf8CCwGiAf8CCwGiAf8CCwGiAf8CCwGi + Af8CCwGiAf8CCwGiAf8CCwGiAf8CCwGjAf8CCwGkAf8CCwGkAf8CCwGkAf8CCwGkAf8CCwGkAf8CCwGk + Af8CDAGqAf8CEQGqAf8DSAGFAwcBCv8ABQADTgGXAzIB/wOyAf8DzQH/A90B/wPdAf8D3QH/A90B/wPd Af8D3QH/A90B/wPdAf8D3QH/A90B/wPdAf8D3QH/A90B/wPdAf8D3QH/A90B/wPdAf8D3QH/A90B/wPd - Af8D3QH/A90B/wPIAf8DogH/AyQB/wNGAYEEAANIAYUCDAGkAf8CDAGiAf8CDAGhAf8CDAGhAf8CDAGh - Af8CDAGhAf8CDAGhAf8CCQGgAf8CCQGeAf8CCQGbAf8CCQGZAf8CCQGZAf8CCQGXAf8CCQGVAf8CCQGV - Af8CCQGVAf8CCQGVAf8CCQGXAf8CCQGZAf8CCQGZAf8CCQGbAf8CCQGeAf8CCQGgAf8CDAGhAf8CDAGh - Af8CDAGhAf8CDAGhAf8CDAGhAf8CDAGiAf8CDAGkAf8DSAGFVwABAQMCBAMEBAEGAwQBBgMDAQQDAQEC - AwABAYwAAzcBWgM/Af8D2wH/A4sB/wMpAf8DEgH/AxIB/wMSAf8DEgH/AxIB/wMSAf8DEgH/AxIB/wMS - Af8DEgH/AxIB/wMSAf8DEgH/AxIB/wMSAf8DEgH/AxIB/wMSAf8DEgH/AxIB/wMSAf8DEgH/AykB/wOH - Af8DzQH/AysB/wMrAUICDAGkAf8CDAGiAf8CCQGdAf8CBwGYAf8CBwGXAf8CBwGXAf8CBwGXAf8CBwGX - Af8CBAGRAf8CBAGPAf8CBAGMAf8CBAGKAf8CBAGKAf8CAgGIAf8CAAGGAf8CAAGGAf8CAAGGAf8CAQGG - Af8CBAGIAf8CBAGKAf8CBAGKAf8CBAGMAf8CBAGPAf8CBAGVAf8CBwGXAf8CBwGXAf8CBwGXAf8CBwGX - Af8CBwGYAf8CCQGdAf8CDAGiAf8CDAGkAf9QAAMCAQMDBgEIAw0BEgMaASQDIwEzAyEBMAMWAR4DCgEO - AwQBBgMAAQGIAANZAcMDsgH/A4oB/wFPAT0BIwH/AbkBkwE1Af8BzgGiATsB/wHOAaIBOwH/Ac4BogE7 - Af8BzgGiATsB/wHOAaIBOwH/Ac4BogE7Af8BzgGiATsB/wHOAaIBOwH/Ac4BogE7Af8BzgGiATsB/wG9 - AZUBMwH/AaMBgAEnAf8BvQGVATMB/wHOAaIBOwH/Ac4BogE7Af8BzgGiATsB/wHOAaIBOwH/Ac4BogE7 - Af8BzgGiATsB/wHOAaIBOwH/Ac4BogE7Af8BzgGiATsB/wG5AZMBNQH/AVoBRQEmAf8DhQH/A6MB/wNU - AasCDAGjAf8CCQGaAf8CBQGRAf8CAAGNAf8CAAGNAf8CAAGKAf8CAAGGAf8CAAGBAf8CAAFZAf8CAAFX - Af8CAAFSAf8CAAFRAf8CAAFRAf8CAAFRAf8CAAFNAf8CAAFKAf8CAAFKAf8CAAFNAf8CAAFRAf8CAAFR - Af8CAAFRAf8CAAFSAf8CAAFXAf8CAAGAAf8CAAGGAf8CAAGGAf8CAAGKAf8CAAGNAf8CAAGNAf8CBQGR - Af8CCQGaAf8CDAGjAf9MAAMCAQMDBwEKAxcBIAMwAUwBRQJGAX4BTwJRAZwBTQJOAZYDQQFyAyoBQQMS - ARkDBQEHAwABAS8AAf8DAAH/AwAB/wMAAf8DAAH/RAADQQH5A8oB/wMnAf8BuQGPATQB/wHVAaIBPAH/ - AdUBogE8Af8B1QGiATwB/wHVAaIBPAH/AdUBogE8Af8B1QGiATwB/wHVAaIBPAH/AdUBogE8Af8B1QGi - ATwB/wHVAaIBPAH/AcQBlQE0Af8BiQFGASAB/wEbASoBMAH/AZQBSwEfAf8B0wGhATsB/wHVAaIBPAH/ - AdUBogE8Af8B1QGiATwB/wHVAaIBPAH/AdUBogE8Af8B1QGiATwB/wHVAaIBPAH/AdUBogE8Af8B1QGi - ATwB/wHAAZMBNgH/AyAB/wPFAf8DTgHwAgoBmQH/AgABiwH/AgABVwH/AgABUwH/AgABSwH/AgABSwH/ - AgABRgH/AgABQwH/AgABQgH/AgABPwH/AgABOwH/AgABOwH/AgABOgH/AgABNwH/AgABMwH/AgABMwH/ - AgABMwH/AgABMwH/AgABNwH/AgABOgH/AgABOwH/AgABOwH/AgABPwH/AgABQgH/AgABRQH/AgABSwH/ - AgABSwH/AgABSwH/AgABUwH/AgABVwH/AgABiwH/AgoBmQH/SAADAQECAwcBCQMYASIDOAFeAVMCVQGt - AV0CYQHiA20B9wNlAfQBXgJhAdoDUAGaAy0BRgMOARMDAwEELwAB/wMAAf8DAAH/AwAB/wMAAf9EAAMS - Af8DwgH/AxQB/wHMAZUBOQH/AdUBmwE7Af8B1QGbATsB/wHVAZsBOwH/AdUBmwE7Af8B1QGbATsB/wHV - AZsBOwH/AdUBmwE7Af8B1QGbATsB/wHVAZsBOwH/Ab8BiwExAf8BkwFGAR4B/wEaASgBMQH/AQABMAGO - Af8BSQE2ASIB/wGVAUcBHgH/Ac8BlwE4Af8B1QGbATsB/wHVAZsBOwH/AdUBmwE7Af8B1QGbATsB/wHV - AZsBOwH/AdUBmwE7Af8B1QGbATsB/wHVAZsBOwH/AcUBkAE3Af8DGgH/A8IB/wMSAf8CCAGRAf8BAgEH - AYIB/wECAR4BhAH/AQgBJwGFAf8BCAEnAYAB/wEIASkBgwH/AQgBKQGDAf8BCAEpAYMB/wEIASkBWQH/ - AQgBKQFZAf8BCAEpAVkB/wEIASkBWQH/AQgBKQFUAf8BCAEmAVEB/wEIASYBUQH/AQgBJgFRAf8BCAEm - AVEB/wEIASYBUQH/AQgBJgFRAf8BCAEmAVEB/wEIASYBVgH/AQgBJgFWAf8BCAEmAVYB/wEIASYBVgH/ - AQgBJwGDAf8BCAEpAYMB/wEIASkBgwH/AQgBKQGDAf8BCAEpAYgB/wEEAR4BhwH/AQIBBwGDAf8CCAGR - Af9HAAEBAwYBCAMWAR4DOAFdA1UBtQNkAfEB8wH4AfwB/wHtA/8B8wP/AZIBogGsAf4DXwHgA0gBhQMf - ASwDBQEHLwAB/wMAAf8DAAH/AwAB/wMAAf9EAAMSAf8DtAH/AxIB/wHOAZABOAH/AdUBlAE6Af8B1QGU - AToB/wHVAZQBOgH/AdUBlAE6Af8B1QGUAToB/wHVAZQBOgH/AdQBkwE6Af8B0AGRATgB/wG0AVgBKwH/ - AYoBPgEeAf8BEAEmATYB/wEAARQBUwH/AQABFAFOAf8BAAEbAVQB/wEzASwBJgH/AZIBQQEdAf8BuQGA - AS0B/wHSAZIBOQH/AdUBlAE6Af8B1QGUAToB/wHVAZQBOgH/AdUBlAE6Af8B1QGUAToB/wHVAZQBOgH/ - AcUBiwE2Af8DGQH/A7QB/wMSAf8CAwGKAf8BBwEgAYcB/wEZAYUBqQH/ATABqwHUAf8BSQHRAd4B/wFO - AdQB4QH/AVEB1AHhAf8BUwHUAeEB/wFTAdQB4QH/AVEB1AHhAf8BTgHUAeEB/wFOAdQB4QH/AU4B0wHg - Af8BTgHRAd4B/wFOAdEB3gH/AU4B0QHeAf8BTgHRAd4B/wFOAdEB3gH/AU4B0QHeAf8BTgHRAd4B/wFO - AdEB3gH/AU4B0QHeAf8BTgHRAd4B/wFOAdEB3gH/AU4B0QHhAf8BTgHUAeEB/wFOAdQB4QH/AUkB1AHh - Af8BMQGyAdgB/wEbAYUBrwH/AQcBIAGLAf8CAwGKAf9DAAEBAwUBBwMUARsDNQFWA1QBrwFaAl0B8AHz - AfgB/AH/AdQD/wHEAfwC/wHGAf4C/wHoA/8BdgGEAYgB+wFVAlYBsQMtAUUDBwEKLwAB/wMAAf8DAAH/ - AwAB/wMAAf9EAAMSAf8DpwH/AxIB/wHOAYcBNwH/AdUBiwE5Af8B1QGLATkB/wHLAYQBNQH/Ab0BVgEu - Af8BxAGAATIB/wHAAVgBMAH/AZUBPAEdAf8BjQE5AR4B/wE3ASoBJgH/AQABHgFLAf8BAAEDAUEB/wEZ - AZEBsgH/AU4B1QHmAf8BAAE3AYkB/wEAAQkBRwH/AQABIgFCAf8BTQEwASEB/wGSATsBHQH/AbEBTwEp - Af8BwwGAATEB/wHDAYABMQH/AboBVQEtAf8B0wGKATgB/wHVAYsBOQH/AcUBggE1Af8DGQH/A6cB/wMS - Af8CAgGBAf8BCwEsAZAB/wEsAaEBwgH/AR0BVgGkAf8BEQEoAVcB/wESASgBhAH/ARMBKAGIAf8BFAEo - AYgB/wEUASgBgQH/ARMBKAGBAf8BEgEoAYEB/wESASgBVwH/ARIBKAFWAf8BEgEoAVYB/wESASgBVgH/ - ARIBKAFWAf8BEgEoAVYB/wESASgBVgH/ARIBKAFWAf8BEgEoAVYB/wESASgBgQH/ARIBKAGBAf8BEgEo - AYEB/wESASgBgQH/ARQBKQGIAf8BFwEsAYgB/wESASgBhAH/AREBKAFXAf8BHQFYAaQB/wEsAaEBwwH/ - AQsBLAGRAf8CAgGBAf8/AAEBAwQBBgMSARgDMgFQA1IBqQFZAmQB7AGSAaIBrAH+AdkD/wHEAfwC/wHD - AfsC/wHDAfsC/wHXA/8CqAGrAf0BVwJZAb8DMgFQAwgBCy8AAf8DAAH/AwAB/wMAAf8DAAH/RAADEgH/ - A5sB/wMSAf8BzgFaATUB/wHVAYMBNwH/AcsBWAEzAf8BgwExAR4B/wFDASkBIQH/AVEBLAEfAf8BSQEq - ASAB/wEaAScBMgH/AQABIQFPAf8BAAEJAUsB/wEAASYBVQH/AUgB0AHnAf8BUwHdAfEB/wE4AacBsQH/ - AVkB4QH3Af8BLwGpAcUB/wEAAQoBQQH/AQABFQFSAf8BAAEkAUcB/wErAScBKQH/AU8BKwEfAf8BUAEr - AR8B/wE+ASkBJQH/AZQBNgEbAf8B0wGCATYB/wHFAVYBMwH/AxgB/wObAf8DEgH/AgIBWQH/AQwBLQGL - Af8BJQGcAb0B/wEDARQBRAH/AQABBwFQAf8BCAEuAZgB/wEHATEBnQH/AQcBLwGdAf8BBwEuAZwB/wEH - AS4BlgH/AQYBLQGVAf8BCQErAZEB/wEAAQUBUAH/AgABRwH/AgABRwH/AgABRwH/AgABRwH/AgABRwH/ - AQABAwFOAf8BCAEnAZIB/wEHASkBlAH/AQEBHwGNAf8BCwE1AZgB/wEAARgBjgH/AQsBNQGfAf8BBwEl - AZMB/wEDAQgBUAH/AgABQQH/AQMBEgFCAf8BJQGXAbQB/wEMASwBiAH/AgIBWQH/OwABAQMEAQYDEAEV - AywBQwFPAlABmwFYAmIB6QGSAaIBrAH+Ad4D/wHGAf4C/wHDAfsC/wHDAfsC/wHIA/8B7AP/AXYBhQGI - AfsBVQJWAbEDLQFFAwcBCi8AAf8DAAH/AwAB/wMAAf8DAAH/DgAC/wIAAv8CAAL/AgAC/wIAAv8kAAMS - Af8DkwH/AxIB/wHMAVIBMwH/AdMBVQE1Af8BzgFSATMB/wGKAS4BGwH/AQABNgGEAf8BAAEuAY0B/wEA - ASYBiAH/AQABHAGBAf8BCgFRAZ8B/wFMAdUB5gH/AZAB7wH+Af8BLwGbAbwB/wE7AREBKAH/AZEBDQEm - Af8BKgEnAT8B/wFGAcoB5gH/AZAB7QH6Af8BNgG0AcoB/wEAATcBkgH/AQABHgGBAf8BAAEnAYcB/wEA - ATgBlgH/ARgBKAE7Af8BkwEwARoB/wHSAVUBNQH/AcMBTgExAf8DFwH/A5MB/wMSAf8CAgFZAf8BDAEu - AYsB/wElAZ0BvQH/AQMBFAFLAf8BBgEtAZUB/wFCAdYB6QH/AUMB1wHwAf8BQgHSAfAB/wFCAdEB8AH/ - AUIB0QHuAf8BPwHNAesB/wE8AcUB5wH/AQABEQGKAf8CBAFRAf8CBAFRAf8CBAFRAf8CBAFRAf8BAwEF - AVIB/wEAARMBjAH/AT0BwQHiAf8BNwHEAegB/wEVAYoBzwH/AUsB4QH1Af8BAgFLAcMB/wFNAeEB9QH/ - ASgBogHVAf8BAAESAZIB/wEAAQEBTQH/AQMBEgFKAf8BIwGUAbQB/wEMASkBiAH/AgIBWQH/OAADBAEF - Aw0BEgMoATwDSgGKAV4CYQHaAqgBqgH9AeID/wHGAf4C/wHDAfsC/wHDAfsC/wHJA/8B6QP/AqgBqgH9 - AVwCYQHcA0cBggMdASoDBQEHLwAB/wMAAf8DAAH/AwAB/wMAAf8OAAL/AgAC/wIAAv8CAAL/AgAC/yQA - AxIB/wOPAf8DEgH/AckBTwEyAf8B0AFSATQB/wHQAVIBNAH/AaYBOgEiAf8BIAEkATIB/wEGAVABowH/ - ATgBqwHSAf8BkgHrAfgB/wGJAeoB9wH/ATcBogG8Af8BNwEkAT0B/wGaARgBPgH/Ab8BKwGLAf8BwQEw - AZMB/wG7ASkBggH/AYIBEQEwAf8BLwFAAVoB/wFGAcMB2wH/AZMB8AH8Af8BhgHhAfMB/wElAZEBuQH/ - AQABSwGfAf8BTQElAR0B/wG8AUcBLAH/AdABUgE0Af8BwAFLATAB/wMXAf8DjwH/AxIB/wICAVkB/wEM - AS4BiwH/ASUBnQG9Af8BAwEUAU8B/wEDAS8BnwH/AUkB4gH1Af8BUAHsAv8BVQHuAv8BVgHuAv8BVgHu - Av8BVgHuAv8BNQHAAesB/wEAAREBjwH/AgQBVgH/AgQBUwH/AgQBUQH/AgQBUgH/AQABCQGCAf8BFwFV - Ab4B/wFHAdoB+AH/ARcBmAHfAf8BNgHEAfEB/wEqAbYB6gH/ASIBrAHlAf8BQgHWAfkB/wEcAZ8B4QH/ - ASUBnwHTAf8BAwEeAYwB/wECARIBTQH/ASABlAG0Af8BDAEpAYgB/wICAVkB/yQAAwEBAgMDBAQEBgQI - AQsDDwEUAyQBNgFGAkcBgAFYAlwB0QF2AYUBiQH7AekD/wHIA/8BwwH7Av8BwwH7Av8BzAP/AfAD/wF2 - AYUBiQH7AVkCXQHXA0wBkgMrAUIDDQESAwMBBC8AAf8DAAH/AwAB/wMAAf8DAAH/DgAC/wIAAv8CAAL/ - AgAC/wIAAv8kAAMSAf8DjwH/AxIB/wHHAU0BMgH/Ac4BUAE0Af8BzgFQATQB/wGmAToBIwH/AiABLgH/ - AQABQAGQAf8BHwGHAakB/wESAScBPwH/AUYBCgEhAf8BpQEZAUEB/wHCASwBjAH/AcsBOwGkAf8B0gFD - AbEB/wHUAUQBtAH/AdEBQQGwAf8BygE6AaIB/wG+ASoBhAH/AZIBEwE3Af8BOAEPASEB/wEKAToBWAH/ - ASQBigGsAf8BAAE1AYgB/wFMASUBHQH/Ab0BRgEtAf8BzgFQATQB/wG/AUoBMAH/AxcB/wOPAf8DEgH/ - AgIBWQH/AQwBLQGLAf8BJQGcAbkB/wEDARQBSQH/AQMBLwGfAf8BSQHhAfUB/wFOAecC/wFPAegC/wFQ - AegC/wFSAeoC/wFWAe4C/wE1AcAB6wH/AQABEQGOAf8CBAFQAf8CBAFPAf8CBAFOAf8CBAFOAf8BAAEK - AYEB/wEtAaEB1AH/AU4B5gL/AQQBRwHBAf8BTgHmAv8BFgGPAdQB/wE7AckB8QH/ATsByQHxAf8BFgGP - AdUB/wFEAdwB9QH/AQgBLQGYAf8BAwESAUgB/wEkAZQBtAH/AQwBKQGIAf8CAgFZAf8cAAMCAQMDBgEI - Aw0BEQMXASADIgEyAyoBQAMsAUMDMQFOA0cBggFZAlwBzAFrAXQBeAH6Ae0D/wHJA/8BwwH7Av8BwwH7 - Av8BzQP/AfgD/wFcAW8BcwH4AVwCXgHOAUgCSQGHAysBQgMRARcDBAEGAwABAS8AAf8DAAH/AwAB/wMA - Af8DAAH/DgAC/wIAAv8CAAL/AgAC/wIAAv8kAAMSAf8DkAH/AxIB/wHFAUsBMQH/AcwBTgEzAf8BzAFO - ATMB/wGkATcBIgH/AR0BIAEwAf8BAAE6AYkB/wEAAT8BjQH/ASkBGQEzAf8BvAEiAVcB/wHEATIBnAH/ - AdEBQgGvAf8B3AFOAcEB/wHmAVcBzQH/AekBWgHSAf8B5gFYAc0B/wHdAU8BwQH/AdABQgGvAf8BxQEz - AZsB/wGzAR4BRgH/AQABJwFIAf8BCwFGAZAB/wEAAS8BgwH/AUsBJAEdAf8BuwFFASwB/wHMAU4BMwH/ - Ab0BSAEvAf8DFwH/A5AB/wMSAf8CAgFZAf8BDAEtAYsB/wElAZsBuAH/AQMBEwFHAf8BBgEnAZIB/wEy - AbsB4AH/ATYBvAHmAf8BNgG/AeYB/wE9Ab8B5AH/AT0BwQHnAf8BPQHFAesB/wE4Ab8B5AH/AQABDgGE - Af8CAwFOAf8CAgFOAf8CAAFOAf8CAAFOAf8BAAECAVEB/wEAAQsBhQH/AQABEQGNAf8BAAEMAYgB/wEA - AREBjwH/AQABDQGLAf8BAAEQAZQB/wEAAREBlgH/AQEBEQGTAf8BAAERAZIB/wEAAQUBUgH/AQMBEgFH - Af8BJQGUAbQB/wEMASkBiAH/AgIBWQH/FwABAQMEAQUDCgEOAxoBJQMxAU0DRAF5AU8CUAGbAVMCVAGs - A1QBrgNVAbUBWgJeAdgDbQH3AfQD/wHKA/8BwwH7Av8BxAH8Av8B0Qf/A20B9wFYAlsBxgNDAXgDJgE4 - AxABFQMEAQYDAAEBMwAB/wMAAf8DAAH/AwAB/wMAAf8OAAL/AgAC/wIAAv8CAAL/AgAC/yQAAxIB/wOS - Af8DEgH/AcMBSAEwAf8BygFLATIB/wHIAUoBMQH/AYwBKQEYAf8BBgEfATwB/wEBAT8BjAH/AQEBSwGd - Af8BRgEXATMB/wHCASwBkAH/Ac0BPQGrAf8B3gFRAcQB/wHvAYcB2gH/AfsBkwHsAf8B/QGYAfQB/wH7 - AZMB7AH/Ae8BhwHaAf8B3gFRAcQB/wHOAT0BrAH/Ab0BKQGEAf8BFQEpAUkB/wETAVIBnQH/AQABLgGE - Af8BOQEgASIB/wGwAT0BJwH/AcoBSwEyAf8BuwFFAS4B/wMXAf8DkgH/AxIB/wICAVkB/wEMAS0BigH/ - ASUBlwG2Af8BAwESAUcB/wEAAQMBUAH/AQABEAGPAf8BAAESAZcB/wEAARIBlwH/AQABEgGPAf8BAAES - AY8B/wEAARIBjwH/AQABDwGIAf8BAAEDAVIB/wIAAU4B/wIAAU4B/wIAAU4B/wIAAU4B/wIAAU4B/wIA - AU4B/wIDAU4B/wIEAVAB/wIEAVYB/wIEAVYB/wIEAVoB/wIEAYMB/wIEAYMB/wIEAVkB/wIAAUgB/wED - ARIBRwH/ASUBlAG0Af8BDAEpAYgB/wICAVkB/xMAAQEDBAEGAw8BFAMkATUBPwJAAW8DVgGzAVsCYQHh - A2UB9AFmAXIBdwH6AVwBbwFzAfgCWQFaAfUBVAFvAXYC+gP/Ac0D/wHDAfsC/wHEAfwC/wHUA/8B8wH4 - AfwB/wJZAVwB9QFWAlgBwQNAAXADIAEuAwsBDwMEAQUDAAEBGwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/ - AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/DgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/ - AgAC/wIAAv8MAAMSAf8DlgH/AxIB/wHBAUUBMAH/AcgBSAExAf8BxAFGAS8B/wGHASYBGAH/AQABJQFP - Af8BEwFNAZcB/wEFAUgBlwH/AYABFgE3Af8BxgEyAZoB/wHVAUYBtwH/AeoBgAHSAf8B/AGWAfEC/wGo - Af4C/wGvA/8BqAH+Af8B/AGWAfEB/wHqAYAB0gH/AdYBRgG3Af8BxQEwAZMB/wEsASIBPgH/AREBVAGg - Af8BAAE6AY0B/wEXAR8BMwH/AYwBJwEXAf8BxwFIATEB/wG5AUIBLgH/AxgB/wOWAf8DEgH/AgIBWAH/ - AQwBKwGFAf8BIgGVAbQB/wECARIBRwH/AgABSAH/AgQBWQH/AgQBgwH/AgQBgwH/AgQBVgH/AgQBVgH/ - AgQBUwH/AgQBTwH/AgABTgH/AgABTgH/AgABTgH/AgABTgH/AgABTgH/AgABTgH/AgABTgH/AgIBTgH/ - AgQBUAH/AgQBVgH/AgQBVgH/AgQBVgH/AgQBgwH/AgQBgwH/AgQBWQH/AgABSAH/AQMBEgFHAf8BJQGU - AbQB/wEMASkBiAH/AgIBWQH/EAADAgEDAwsBDwMjATQBRAJFAXwBVwJaAcUDbQH3AfMB+AH8Af8B8QP/ - AecD/wHqA/8B7wP/AeQD/wHNA/8BwwH7Av8BxgH+Av8B2gP/AfMB+AH8Af8BZAJlAfQBVgJYAbwDPQFp - Ax0BKgMKAQ0DAwEEIwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/ - DgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8MAAMSAf8DmgH/AxIB/wG+ - AUQBLwH/AcUBRgEwAf8BrwE6AScB/wFGASABGwH/AQABLwGLAf8BKgGJAasB/wEDATcBWgH/AakBHgFI - Af8ByAE2AaEB/wHaAUsBvAH/AfABiAHcAf8B/gGfAfoC/wG0A/8BwgP/AbQC/wH+AZ8B+gH/AfABiAHc - Af8B2wFLAb0B/wHJATUBnQH/AVIBFwE2Af8BDQFRAZ0B/wEZAVYBogH/AQABJAFPAf8BhgElARcB/wHD - AUUBLwH/AbYBQQEtAf8DGAH/A5oB/wMSAf8CAgFXAf8BDAEpAYMB/wEkAZQBtAH/AQMBEgFHAf8CAAFI - Af8CBAFZAf8CBAGDAf8CBAGDAf8CBAFWAf8CBAFWAf8CBAFRAf8CBAFOAf8CAAFOAf8CAAFOAf8CAAFO - Af8CAAFOAf8CAAFOAf8CAAFOAf8CAAFOAf8CAAFOAf8CBAFOAf8CBAFSAf8CBAFWAf8CBAFWAf8CBAGD - Af8CBAGDAf8CBAFZAf8CAAFIAf8BAwESAUcB/wElAZQBtAH/AQwBKQGIAf8CAgFZAf8QAAMDAQQDGAEh - Az0BaQFXAlkBvwFuAXQBeAH6AfED/wHOA/8BxAH8Av8BwwH7Av8BwwH7Av8BwwH7Av8BwwH7Av8BwwH7 - Av8BxgH+Av8B3gP/AZIBogGsAf4BTgJdAfABVQJXAbcDOwFjAxoBJQMJAQwDAwEEJwAB/wMAAf8DAAH/ - AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/DgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/ - AgAC/wIAAv8CAAL/AgAC/wIAAv8MAAMSAf8DnwH/AxIB/wG7AUEBLgH/AcABQgEuAf8BhgEkARYB/wEJ - AR4BNwH/AQABPQGUAf8BMQGVAbkB/wEhASgBQwH/AbgBIQFVAf8BxwE2AaAB/wHZAUoBuwH/Ae8BhQHa - Af8B/gGdAfoC/wGxA/8BvAP/AbEC/wH+AZ0B+gH/Ae8BhQHaAf8B2QFKAbwB/wHHATUBnwH/AaQBGwFE - Af8BDAFBAYkB/wE3AZcBuAH/AQABLQGKAf8BRQEfARwB/wGtATgBJgH/AbMBPgEsAf8DGAH/A58B/wMS - Af8CAgFXAf8BDAEpAYMB/wElAZQBtAH/AQMBEgFHAf8BAAEPAVkB/wELATkBrAH/AQwBPgG2Af8BCgE8 - AbAB/wEEASsBogH/AQABFQGOAf8BAQEIAVkB/wIEAVAB/wIAAU4B/wIAAU4B/wIAAU4B/wIAAU4B/wIA - AU4B/wIAAU4B/wIAAU4B/wIAAU4B/wIEAU4B/wIEAVEB/wIEAVYB/wIEAVYB/wIEAYMB/wIEAYMB/wIE - AVkB/wIAAUgB/wEDARIBRwH/ASQBlAG0Af8BDAEpAYgB/wICAVkB/xAAAwQBBgMjATMBTQJOAZUDZQH0 - BP8B2gP/AdkD/wHgA/8B3QP/Ac8D/wHFAf0C/wHDAfsC/wHDAfsC/wHTA/8BkgGiAawB/gFOAl0B8AFV - AlcBtwM6AWADGAEiAwgBCwMCAQMrAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/ - AwAB/wMAAf8OAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wwAAxIB/wOk - Af8DEgH/AbkBPgEsAf8BoAEwASAB/wFAARwBGgH/AQABHgFWAf8BIAFVAaIB/wEIAUYBkgH/AU4BDgEf - Af8BtwEhAVgB/wHCATIBmwH/AdMBRAGzAf8B5gFZAc8B/wH6AZEB6wL/AaAB/AL/AagB/gL/AaAB/AH/ - AfoBkQHrAf8B5gFZAc8B/wHTAUQBtAH/AcMBMQGaAf8BtgEfAUwB/wEiARoBLgH/ARwBVwGkAf8BAAE7 - AZEB/wEEARYBMgH/AYQBIgEUAf8BqQE3AScB/wMYAf8DpAH/AxIB/wICAVgB/wEMASkBhQH/ASUBlAG0 - Af8BAwESAUcB/wEKAS8BkgH/AUkB5AH1Af8BTgHpAv8BRwHgAfgB/wEqAbEB3wH/ARIBRwG1Af8BBAEW - AYoB/wEEAQYBUAH/AgABTgH/AgABTgH/AgABTgH/AgABTgH/AgABTgH/AgABTgH/AgABTgH/AgIBTgH/ - AgQBTwH/AgQBUwH/AgQBWAH/AQEBCQGEAf8BAAEOAY0B/wEAAQwBjAH/AQMBBwGDAf8CAAFJAf8BAgES - AUcB/wEiAZUBtAH/AQwBKwGIAf8CAgFZAf8QAAMEAQYDIgEyAUwCTQGRA2QB8QKoAakB/QGGAZsBqQH+ - AqgBqgH9AWQBggGIAfsBZQF3AX0B/AHnAfEB+AH/AdUD/wHDAfsC/wHDAfsC/wHgA/8BXwF5AYYB+wFa - Al0B0wNCAXQDGgElAwYBCAMBAQIvAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/ - AwAB/wMAAf8OAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wwAAxIB/wOq - Af8DEgH/AakBNAElAf8BSAEdARoB/wE5AZYBtQH/AVIBwQHkAf8BlAHYAesB/wEAASwBiAH/AQABHwFA - Af8BoQEXAT8B/wG/ASoBjgH/AcoBOgGmAf8B2gFLAbwB/wHoAYEB0gH/AfQBigHhAf8B+QGQAegB/wH0 - AYoB4QH/AegBgQHSAf8B2gFLAb0B/wHLAToBpQH/AcABKQGKAf8BWAEWATMB/wEAAR0BTQH/ARkBVwGp - Af8BnAHhAe8B/wFEAbAB1gH/ASwBJQEtAf8BkAEpARwB/wMZAf8DqgH/AxIB/wICAVkB/wEMASkBiAH/ - ASUBlAG0Af8BAwESAUcB/wEAARkBigH/ARMBjAHPAf8BEwGTAdwB/wEUAY8B1QH/AQoBUQHDAf8BBAEr - AaUB/wEAAQ8BiQH/AQABBQFVAf8CAwFOAf8CAAFOAf8CAAFOAf8CAAFOAf8CAAFOAf8CAAFOAf8CAAFO - Af8CAwFOAf8CBAFQAf8CBAFYAf8BBAETAY4B/wERAUkBuAH/AScBmgHSAf8BHgGNAcsB/wEIATABpQH/ - AQABBQFRAf8BAwESAUcB/wElAZcBtgH/AQwBLQGKAf8CAgFZAf8QAAMDAQQDFgEeAzYBWQFPAlEBnAFX - AlkBvwFZAlwByQFaAl0BygFcAl4BzgFYAl8B4wFXAmIB9gHwA/8BwwH7Av8BwwH7Av8B3QP/AW8BewF/ - AfwDWQHHAzcBWwMPARQDAAEBTwAB/wMAAf8DAAH/AwAB/wMAAf8OAAL/AgAC/wIAAv8CAAL/AgAC/yQA - AxIB/wOwAf8DEgH/Aa8BNQEoAf8BVwEcARQB/wE6ARcBGQH/ATUBUQGFAf8BsAHuAfcB/wGbAeMB7wH/ - AQABLwGRAf8BBAErAUQB/wGlARsBRwH/AcABLgGVAf8BywE8AakB/wHWAUcBtwH/Ad4BUQHCAf8B4QFT - AcYB/wHeAVEBwgH/AdYBRwG3Af8BywE8AagB/wHDAS0BkQH/AYEBFwE5Af8BAAE1AYAB/wEMAU8BpQH/ - AbcB8wH6Af8BlgHaAeQB/wEtASIBKgH/AU0BGwEWAf8BowEwASUB/wMZAf8DsAH/AxIB/wICAVkB/wEM - ASkBiAH/ASUBlAG0Af8BAwESAUcB/wEAAScBjwH/ATMBxwHoAf8BOgHQAfMB/wE7AcsB8gH/ATEBuwHm - Af8BGwGNAcwB/wEHATIBpQH/AQIBDgGBAf8BAAEDAU4B/wIAAU4B/wIAAU4B/wIAAU4B/wIAAU4B/wIA - AU4B/wIAAU4B/wIAAU4B/wIEAU4B/wEBAQcBWAH/AQ0BRwG1Af8BPAHQAfEB/wFMAekB/QH/AUkB5QH7 - Af8BJQGpAdwB/wEAARYBhAH/AQMBEwFHAf8BJQGbAbgB/wEMAS0BiwH/AgIBWQH/EAADAgEDAwoBDQMc - AScDLwFJAzwBZgNEAXoDSAGEAU4CTwGXAVkCXAHMAVMCZAHxBP8BwwH7Av8BwwH7Av8B1wP/AqgBqwH9 - A1sByAM3AVoDCwEPUwAB/wMAAf8DAAH/AwAB/wMAAf8OAAL/AgAC/wIAAv8CAAL/AgAC/yQAAxIB/wO2 - Af8DEgH/AbABNAEoAf8BsgE0AScB/wGfASsBHwH/AVgBGwESAf8BHwEXASYB/wGTAdQB6AH/AZYB3gHv - Af8BAAE+AZYB/wEXASIBOQH/AbgBHwFSAf8BvwEsAZMB/wHGATUBoAH/AcsBOwGmAf8BzQE9AaoB/wHL - ATsBpgH/AcYBNQGgAf8BwAEsAZEB/wGdARoBQwH/AQABNwFRAf8BDAFOAagB/wGvAesB+AH/AUsBoAHD - Af8BPQIWAf8BWgEbAREB/wGtATIBJQH/AakBMgEnAf8DGQH/A7YB/wMSAf8CAgFZAf8BDAEpAYgB/wEk - AZQBtAH/AQMBEgFHAf8BAAEiAY4B/wEsAcMB5wH/ATMBzgHyAf8BMwHIAfIB/wEpAbQB5gH/ARYBigHK - Af8BBgEwAZ8B/wEAAQoBVAH/AgABRQH/AgABQwH/AgABQwH/AgABQwH/AgABQwH/AgABQwH/AgABQwH/ - AgABQwH/AgABRAH/AQABBAFSAf8BHQGVAcsB/wFBAekB/QH/AUMB7gL/AUMB7gL/ATUB1QHwAf8BAAEj - AZAB/wEDARQBRwH/ASUBnAG5Af8BDAEtAYsB/wICAVkB/xMAAQEDBwEJAxYBHwMvAUkBQQJCAXMBTAJN - AZEBUAJSAaMBVQJXAboDXwHgAUkCYgH2AfMD/wHDAfsC/wHDAfsC/wHdA/8BbwF7AX8B/AFXAloBvQMx - AU8DCQEMUwAB/wMAAf8DAAH/AwAB/wMAAf8OAAL/AgAC/wIAAv8CAAL/AgAC/yQAAxIB/wO7Af8DEgH/ - Aa0BMQEnAf8BswEzASgB/wGzATMBKAH/AagBLgEjAf8BVwEYAREB/wEfARcBJgH/AZEB0QHqAf8BVgG6 - Ad0B/wEAAUcBkwH/AUABFAEvAf8BuAEdAVUB/wG8ASUBhwH/AcABJwGKAf8BvwEoAYwB/wHAAScBigH/ - AbwBJAGGAf8BtAEcAU0B/wETASUBOgH/AQEBTQGiAf8BnQHeAfEB/wFLAaABxgH/AT8BFQEWAf8BlgEl - ARwB/wGyATMBKAH/AbMBMwEoAf8BpgEvASYB/wMaAf8DuwH/AxIB/wICAVkB/wEMASkBiAH/ASABlAG0 - Af8BAgESAUcB/wEAARQBhQH/AQoBggHKAf8BCQGOAdcB/wEJAYoB1wH/AQkBhgHPAf8BCQFRAcAB/wED - ATgBqgH/AQABGQGMAf8CAAFAAf8CAAE6Af8CAAE6Af8CAAE6Af8CAAE6Af8CAAE6Af8CAAE6Af8CAAE8 - Af8CAAE+Af8BAAEBAU4B/wETAYABwQH/ATYB4wH7Af8BOgHuAv8BOgHuAv8BJwHGAeoB/wEAARsBjAH/ - AQMBFAFJAf8BJQGdAb0B/wEMAS4BiwH/AgIBWQH/EwABAQMKAQ0DKgFAAU4CTwGXAVgCXAHRA1wB6gNn - AfICWQFcAfUBZAGCAYgB+wHaAeoB9QH/AdgD/wHDAfsC/wHFAf0C/wHvA/8DYgH2AVACUgGjAycBOgMH - AQlTAAH/AwAB/wMAAf8DAAH/AwAB/w4AAv8CAAL/AgAC/wIAAv8CAAL/JAADEgH/A8AB/wMSAf8BqQEv - ASUB/wGvATABJgH/Aa8BMAEmAf8BrwEwASYB/wGlASsBIgH/AVMBFgEPAf8BIAEpAT4B/wGYAdoB8QH/ - ASwBjwG8Af8BAAEyAU4B/wFPAQoBIAH/AUMBFgExAf8BMgEcATcB/wEyARwBNwH/ATYBGwE2Af8BSwES - AS0B/wE5AQ0BHgH/AQABQgGQAf8BWgG8AeAB/wGEAbsB4QH/ATEBEwEZAf8BkQEiARkB/wGvATABJgH/ - Aa8BMAEmAf8BrwEwASYB/wGiAS0BJAH/AxoB/wPAAf8DEgH/AgIBWgH/AQwBKQGLAf8BIwGUAbQB/wEA - AQ4BQwH/AQABIgGMAf8BKwHaAesB/wEwAeQB9QH/ATAB4gH1Af8BKwHZAfMB/wElAcIB6QH/ARYBkwHR - Af8BBgEyAaMB/wIAATcB/wIAATAB/wIAATAB/wIAATAB/wIAATAB/wIAATAB/wIAATAB/wIAATMB/wIA - ATMB/wIAATsB/wEAASEBkAH/ARcBngHWAf8BKwHRAfAB/wElAcMB6gH/AQwBUgG9Af8BAAEFAVAB/wEA - ARABSQH/ASUBnQG9Af8BDAEuAY4B/wICAVoB/xMAAQEDDwEUAzsBYwNeAdgE/wH7A/8B8wP/Ae4D/wHi - A/8B0QP/AcYB/gL/AcQB/AL/AdYD/wHnAfEB+AH/AVcCXAHfA0QBeQMYASIDBAEGUwAB/wMAAf8DAAH/ - AwAB/wMAAf8OAAL/AgAC/wIAAv8CAAL/AgAC/yQAAxIB/wPHAf8DEgH/AaYBKwEkAf8BrAEsASUB/wGs - ASwBJQH/AawBLAElAf8BrAEsASUB/wGaASQBHQH/AUoBFAESAf8BPQGQAbIB/wGWAdIB8QH/AQIBRQGi - Af8BAAE+AYsB/wEAAUYBkwH/AQABTAGaAf8BAgFOAZwB/wEAAUsBlwH/AQABRgGTAf8BAAE5AYsB/wEn - AYkBuwH/AZgB2AHzAf8BIQEvAUUB/wFSARQBDwH/AasBKwEkAf8BrAEsASUB/wGsASwBJQH/AawBLAEl - Af8BnwEqASMB/wMaAf8DxwH/AxIB/wIEAYUB/wEQATABjQH/ASUBlwG0Af8BAAEMAUEB/wEAAQMBQgH/ - AQABJgGMAf8BAAEoAZIB/wEAASgBkgH/AQABJgGQAf8BAAEhAYYB/wEAARQBVAH/AQABBQFEAf8CAAEt - Af8CAAEnAf8CAAEnAf8CAAEnAf8CAAEnAf8CAAEnAf8CAAEnAf8CAAEnAf8CAAEtAf8CAAEuAf8CAAE5 - Af8BAAEMAVQB/wEAASIBigH/AQABGgGFAf8BAAEFAU0B/wIAAToB/wEAAQ0BQgH/ASUBnAG5Af8BEAEx - AZEB/wIEAYUB/xMAAQEDDQESAzgBXAFYAlsBywGSAZ8BqAH+AeoD/wHNA/8BxAH8Av8BwwH7Av8BwwH7 - Av8BxgH+Av8B2AP/AfMB+AH8Af8DXQHwA1IBqQMuAUcDDAEQAwIBA1MAAf8DAAH/AwAB/wMAAf8DAAH/ - RAADEgH/A88B/wMSAf8BowEoASIB/wGoASkBIwH/AagBKQEjAf8BqAEpASMB/wGoASkBIwH/AagBKQEj - Af8BjQEcARcB/wElARcBIgH/AYwB0gHzAf8BwwHwAfgB/wHVAe4B9wH/AeAB9wH8Af8B5wP/AegD/wHm - Af4C/wHdAfIB+gH/Ac0B7QH3Af8BtQHvAfsB/wFLAasBzwH/AUABEAESAf8BlgEhARsB/wGoASkBIwH/ - AagBKQEjAf8BqAEpASMB/wGoASkBIwH/AZ0BJwEhAf8DGwH/A88B/wMSAf8CCgGKAf8BEQEzAZgB/wEm - AZUBtgH/ARABNwGIAf8BAgEQAUAB/wECARABRQH/AQIBEAFFAf8BAgEQAUUB/wECARABPwH/AQIBEAE/ - Af8BAgEQAT8B/wECARABOgH/AQABCgE5Af8BAAEKATkB/wEAAQoBOQH/AQABCgE5Af8BAAEKATkB/wEA - AQoBOQH/AQABCgE5Af8BAAEKATkB/wECARABOgH/AQIBEQFAAf8BAgESAUEB/wECARIBQQH/AQIBEgFH - Af8BAgESAUcB/wECAREBRgH/AQIBEAFAAf8BDgE3AYcB/wElAZQBtQH/AREBMwGYAf8CCgGKAf8TAAEB - AwcBCgMmATgDSgGLAVkCXAHPAWEBbwFzAfgB8wH4AfwB/wHyA/8B5gP/AegD/wH6A/8BkgGiAawB/gNh - Ae4DVQGyAzgBXAMVAR0DBQEHAwABAVMAAf8DAAH/AwAB/wMAAf8DAAH/RAADEgH/A9cB/wMSAf8BnwEl - ASEB/wGkASYBIgH/AaQBJgEiAf8BpAEmASIB/wGkASYBIgH/AaQBJgEiAf8BmQEhAR0B/wE6AQ4BEgH/ - Aa8B3AHkAf8B4gHwAfIB/wGNAaQBrwH/AT4BRAFQAf8BLAEoATYB/wEtASkBNwH/AS8BLAE5Af8BSQFV - AYYB/wGlAcABxQH/Ae8C+wH/ATUBggGXAf8BSwEPAQ4B/wGjASUBIQH/AaQBJgEiAf8BpAEmASIB/wGk - ASYBIgH/AaQBJgEiAf8BmQEkASAB/wMbAf8D1wH/AxIB/wILAZQB/wEQAS4BmwH/ATEBogHDAf8BRAG3 - Ac0B/wFAAbkBzQH/AUABuQHNAf8BPgG5Ac0B/wE9AbkBzQH/AT0BuQHNAf8BPQG5Ac0B/wE9AbkBzQH/ - AT0BuQHNAf8BPQG5Ac0B/wE9AbkBzQH/AT0BuQHNAf8BPQG5Ac0B/wE9AbkBzQH/AT0BuQHNAf8BPQG5 - Ac0B/wE9AbkBzQH/AUABuQHNAf8BQAG8Ac8B/wFAAb8B0gH/AUABvwHSAf8BQAG/AdIB/wFAAb8B0gH/ - AT4BvAHPAf8BPQG5Ac0B/wE8AbYByAH/ASwBngHAAf8BEAEtAZsB/wILAZQB/xQAAwQBBQMRARcDKQE/ - A0QBeQFVAlYBtAFcAmEB3ANfAfMBZgFyAXcB+gFmAXIBdwH6A10B7QFbAl4B0AFQAlEBnwM2AVkDGAEh - AwcBCgMBAQJXAAH/AwAB/wMAAf8DAAH/AwAB/0QAAxIB/wPfAf8DEgH/AZwBIgEgAf8BoQEjASEB/wGh - ASMBIQH/AaEBIwEhAf8BoQEjASEB/wGhASMBIQH/AZsBIAEeAf8BQAENARAB/wGPAZYBoQH/AS4BCwET - Af8BSAINAf8BSwENAQwB/wGBARUBEwH/AYEBFQETAf8BgQEVARMB/wFKAQ0BDAH/AUUBDQEOAf8BIgEW - ASUB/wFSAVYBiAH/AUoBDQEMAf8BoAEiASAB/wGhASMBIQH/AaEBIwEhAf8BoQEjASEB/wGhASMBIQH/ - AZYBIQEfAf8DHAH/A98B/wMSAf8CDAGeAf8BDQEUAZQB/wEcATYBnwH/AS8BVgGuAf8BMgFaAasB/wEy - AVoBqwH/ATABWgGrAf8BLwFaAacB/wEvAVoBpgH/AS0BVwGmAf8BKQFUAaYB/wEpAVQBogH/ASkBVAGh - Af8BKQFUAaEB/wEpAVQBoQH/ASkBVAGhAf8BKQFUAaEB/wEpAVQBoQH/ASkBVAGhAf8BKQFUAaEB/wEt - AVQBogH/AS0BVAGmAf8BMAFXAaYB/wEyAVoBpgH/ATIBWgGnAf8BMgFaAasB/wEwAVoBqwH/AS8BWgGr - Af8BLAFWAa4B/wEaATYBnwH/AQ0BFAGUAf8CDAGeAf8XAAEBAwQBBgMMARADHAEoAzEBTQNCAXUDTgGZ - AVMCVQGtA1IBqQNLAY4BPAI9AWcDKQE+AxQBGwMHAQkDAgEDWwAB/wMAAf8DAAH/AwAB/wMAAf9EAANM - AfMD3wH/AykB/wGKAhwB/wGbAR4BHwH/AZsBHgEfAf8BmwEeAR8B/wGbAR4BHwH/AZsBHgEfAf8BmgEd - AR4B/wFFAQoBCwH/AT8BCgENAf8BRwIKAf8BmQEdAR4B/wGaAR4BHwH/AZsBHgEfAf8BmwEeAR8B/wGb - AR4BHwH/AZoBHQEeAf8BkgEaARsB/wFGAgoB/wE8AQoBDgH/AUcCCgH/AZoBHgEfAf8BmwEeAR8B/wGb - AR4BHwH/AZsBHgEfAf8BmwEeAR8B/wFXARoBGwH/AzEB/wPdAf8DTgHwAhEBpAH/AgwBngH/AgsBlAH/ - AgoBjwH/AgoBjAH/AgoBhgH/AgoBggH/AgUBWQH/AgQBWQH/AgMBVgH/AgIBUwH/AgIBUQH/AgIBUQH/ - AgIBUQH/AgIBUQH/AgIBUQH/AgIBUQH/AgIBUQH/AgIBUQH/AgIBUQH/AgIBUQH/AgIBUwH/AgMBVgH/ - AgQBWQH/AgUBWQH/AgoBggH/AgoBhgH/AgoBjAH/AgoBjwH/AgsBlAH/AgwBngH/AhEBpAH/GwABAQMC - AQMDBgEIAwwBEAMWAR4DIgEyAyoBQAMpAT4DHwEsAxIBGQMKAQ0DBAEGAwEBAl8AAf8DAAH/AwAB/wMA - Af8DAAH/RAADVwG9A78B/wOUAf8BPQEbAR0B/wGKARoBIAH/AZMBGAEfAf8BkwEYAR8B/wGTARgBHwH/ - AZMBGAEfAf8BkwEYAR8B/wGSARgBHgH/AY4BFgEdAf8BkgEYAR8B/wGTARgBHwH/AZMBGAEfAf8BkwEY - AR8B/wGTARgBHwH/AZMBGAEfAf8BkwEYAR8B/wGTARgBHwH/AZIBGAEeAf8BjQEWARwB/wGSARgBHwH/ - AZMBGAEfAf8BkwEYAR8B/wGTARgBHwH/AZMBGAEfAf8BgAEbASAB/wEyARoBHAH/A7QB/wO0Af8DVAGu - AhQBrAH/AhQBqQH/AhQBpgH/Ag8BpgH/Ag4BpgH/Ag4BowH/Ag4BnwH/AgwBngH/AgwBlwH/AgwBlwH/ - AgwBlgH/AgwBlgH/AgwBjgH/AgwBjgH/AgwBjgH/AgwBjgH/AgwBjgH/AgwBjgH/AgwBjgH/AgwBjgH/ - AgwBlgH/AgwBlgH/AgwBlwH/AgwBlwH/AgwBngH/Ag4BnwH/Ag4BowH/Ag4BpgH/Ag8BpgH/AhQBpgH/ - AhQBqQH/AhQBrAH/JAADAQECAwMEBAQGAQgDBgEIAwQBBgMDAQQDAAEBZwAB/wMAAf8DAAH/AwAB/wMA - Af9EAAM0AVQDQQH/A+4B/wOTAf8DKAH/AxIB/wMSAf8DEgH/AxIB/wMSAf8DEgH/AxIB/wMSAf8DEgH/ - AxIB/wMSAf8DEgH/AxIB/wMSAf8DEgH/AxIB/wMSAf8DEgH/AxIB/wMSAf8DEgH/AxIB/wMxAf8DsgH/ - A+oB/wMxAf8DLQFFAhQBrAH/AhQBrAH/AhQBrAH/AhQBrAH/AhQBrAH/AhQBrAH/AhQBrAH/AhABqAH/ - Ag8BpAH/AgwBogH/AgwBnwH/AgwBnwH/AgwBnAH/AgwBnAH/AgwBnAH/AgwBnAH/AgwBnAH/AgwBnAH/ - AgwBnAH/AgwBnAH/AgwBnwH/AgwBnwH/AgwBogH/Ag8BpwH/AhABqAH/AhQBrAH/AhQBrAH/AhQBrAH/ - AhQBrAH/AhQBrAH/AhQBrAH/AhQBrAH//wAFAANKAY0DQAH/A80B/wP5Af8D+wH/A/sB/wP7Af8D+wH/ + Af8D3QH/A90B/wPIAf8DogH/AyMB/wNGAYEEAANIAYUCCwGkAf8CCwGiAf8CCwGhAf8CCwGhAf8CCwGh + Af8CCwGhAf8CCwGhAf8CCAGgAf8CCAGeAf8CCAGbAf8CCAGZAf8CCAGZAf8CCAGXAf8CCAGVAf8CCAGV + Af8CCAGVAf8CCAGVAf8CCAGXAf8CCAGZAf8CCAGZAf8CCAGbAf8CCAGeAf8CCAGgAf8CCwGhAf8CCwGh + Af8CCwGhAf8CCwGhAf8CCwGhAf8CCwGiAf8CCwGkAf8DSAGFVwABAQMCBAMEBAEGAwQBBgMDAQQDAQEC + AwABAYwAAzcBWgM+Af8D2wH/A4sB/wMoAf8DEQH/AxEB/wMRAf8DEQH/AxEB/wMRAf8DEQH/AxEB/wMR + Af8DEQH/AxEB/wMRAf8DEQH/AxEB/wMRAf8DEQH/AxEB/wMRAf8DEQH/AxEB/wMRAf8DEQH/AygB/wOH + Af8DzQH/AyoB/wMrAUICCwGkAf8CCwGiAf8CCAGdAf8CBgGYAf8CBgGXAf8CBgGXAf8CBgGXAf8CBgGX + Af8CAwGRAf8CAwGPAf8CAwGMAf8CAwGKAf8CAwGKAf8CAQGIAf8CAAGGAf8CAAGGAf8CAAGGAf8CAAGG + Af8CAwGIAf8CAwGKAf8CAwGKAf8CAwGMAf8CAwGPAf8CAwGVAf8CBgGXAf8CBgGXAf8CBgGXAf8CBgGX + Af8CBgGYAf8CCAGdAf8CCwGiAf8CCwGkAf9QAAMCAQMDBgEIAw0BEgMaASQDIwEzAyEBMAMWAR4DCgEO + AwQBBgMAAQGIAANZAcMDsgH/A4oB/wFOATwBIgH/AbkBkwE0Af8BzgGiAToB/wHOAaIBOgH/Ac4BogE6 + Af8BzgGiAToB/wHOAaIBOgH/Ac4BogE6Af8BzgGiAToB/wHOAaIBOgH/Ac4BogE6Af8BzgGiAToB/wG9 + AZUBMgH/AaMBgAEmAf8BvQGVATIB/wHOAaIBOgH/Ac4BogE6Af8BzgGiAToB/wHOAaIBOgH/Ac4BogE6 + Af8BzgGiAToB/wHOAaIBOgH/Ac4BogE6Af8BzgGiAToB/wG5AZMBNAH/AVkBRAElAf8DhQH/A6MB/wNU + AasCCwGjAf8CCAGaAf8CBAGRAf8CAAGNAf8CAAGNAf8CAAGKAf8CAAGGAf8CAAGBAf8CAAFYAf8CAAFW + Af8CAAFRAf8CAAFQAf8CAAFQAf8CAAFQAf8CAAFMAf8CAAFJAf8CAAFJAf8CAAFMAf8CAAFQAf8CAAFQ + Af8CAAFQAf8CAAFRAf8CAAFWAf8CAAGAAf8CAAGGAf8CAAGGAf8CAAGKAf8CAAGNAf8CAAGNAf8CBAGR + Af8CCAGaAf8CCwGjAf9MAAMCAQMDBwEKAxcBIAMwAUwBRQJGAX4BTwJRAZwBTQJOAZYDQQFyAyoBQQMS + ARkDBQEHAwABAS8AAf8DAAH/AwAB/wMAAf8DAAH/RAADQQH5A8oB/wMmAf8BuQGPATMB/wHVAaIBOwH/ + AdUBogE7Af8B1QGiATsB/wHVAaIBOwH/AdUBogE7Af8B1QGiATsB/wHVAaIBOwH/AdUBogE7Af8B1QGi + ATsB/wHVAaIBOwH/AcQBlQEzAf8BiQFFAR8B/wEaASkBLwH/AZQBSgEeAf8B0wGhAToB/wHVAaIBOwH/ + AdUBogE7Af8B1QGiATsB/wHVAaIBOwH/AdUBogE7Af8B1QGiATsB/wHVAaIBOwH/AdUBogE7Af8B1QGi + ATsB/wHAAZMBNQH/Ax8B/wPFAf8DTgHwAgkBmQH/AgABiwH/AgABVgH/AgABUgH/AgABSgH/AgABSgH/ + AgABRQH/AgABQgH/AgABQQH/AgABPgH/AgABOgH/AgABOgH/AgABOQH/AgABNgH/AgABMgH/AgABMgH/ + AgABMgH/AgABMgH/AgABNgH/AgABOQH/AgABOgH/AgABOgH/AgABPgH/AgABQQH/AgABRAH/AgABSgH/ + AgABSgH/AgABSgH/AgABUgH/AgABVgH/AgABiwH/AgkBmQH/SAADAQECAwcBCQMYASIDOAFeAVMCVQGt + AV0CYQHiA20B9wNlAfQBXgJhAdoDUAGaAy0BRgMOARMDAwEELwAB/wMAAf8DAAH/AwAB/wMAAf9EAAMR + Af8DwgH/AxMB/wHMAZUBOAH/AdUBmwE6Af8B1QGbAToB/wHVAZsBOgH/AdUBmwE6Af8B1QGbAToB/wHV + AZsBOgH/AdUBmwE6Af8B1QGbAToB/wHVAZsBOgH/Ab8BiwEwAf8BkwFFAR0B/wEZAScBMAH/AQABLwGO + Af8BSAE1ASEB/wGVAUYBHQH/Ac8BlwE3Af8B1QGbAToB/wHVAZsBOgH/AdUBmwE6Af8B1QGbAToB/wHV + AZsBOgH/AdUBmwE6Af8B1QGbAToB/wHVAZsBOgH/AcUBkAE2Af8DGQH/A8IB/wMRAf8CBwGRAf8BAQEG + AYIB/wEBAR0BhAH/AQcBJgGFAf8BBwEmAYAB/wEHASgBgwH/AQcBKAGDAf8BBwEoAYMB/wEHASgBWAH/ + AQcBKAFYAf8BBwEoAVgB/wEHASgBWAH/AQcBKAFTAf8BBwElAVAB/wEHASUBUAH/AQcBJQFQAf8BBwEl + AVAB/wEHASUBUAH/AQcBJQFQAf8BBwElAVAB/wEHASUBVQH/AQcBJQFVAf8BBwElAVUB/wEHASUBVQH/ + AQcBJgGDAf8BBwEoAYMB/wEHASgBgwH/AQcBKAGDAf8BBwEoAYgB/wEDAR0BhwH/AQEBBgGDAf8CBwGR + Af9HAAEBAwYBCAMWAR4DOAFdA1UBtQNkAfEB8wH4AfwB/wHtA/8B8wP/AZABoAGqAf4DXwHgA0gBhQMf + ASwDBQEHLwAB/wMAAf8DAAH/AwAB/wMAAf9EAAMRAf8DtAH/AxEB/wHOAZABNwH/AdUBlAE5Af8B1QGU + ATkB/wHVAZQBOQH/AdUBlAE5Af8B1QGUATkB/wHVAZQBOQH/AdQBkwE5Af8B0AGRATcB/wG0AVcBKgH/ + AYoBPQEdAf8BDwElATUB/wEAARMBUgH/AQABEwFNAf8BAAEaAVMB/wEyASsBJQH/AZIBQAEcAf8BuQGA + ASwB/wHSAZIBOAH/AdUBlAE5Af8B1QGUATkB/wHVAZQBOQH/AdUBlAE5Af8B1QGUATkB/wHVAZQBOQH/ + AcUBiwE1Af8DGAH/A7QB/wMRAf8CAgGKAf8BBgEfAYcB/wEYAYUBqQH/AS8BqwHUAf8BSAHRAd4B/wFN + AdQB4QH/AVAB1AHhAf8BUgHUAeEB/wFSAdQB4QH/AVAB1AHhAf8BTQHUAeEB/wFNAdQB4QH/AU0B0wHg + Af8BTQHRAd4B/wFNAdEB3gH/AU0B0QHeAf8BTQHRAd4B/wFNAdEB3gH/AU0B0QHeAf8BTQHRAd4B/wFN + AdEB3gH/AU0B0QHeAf8BTQHRAd4B/wFNAdEB3gH/AU0B0QHhAf8BTQHUAeEB/wFNAdQB4QH/AUgB1AHh + Af8BMAGyAdgB/wEaAYUBrwH/AQYBHwGLAf8CAgGKAf9DAAEBAwUBBwMUARsDNQFWA1QBrwFaAl0B8AHz + AfgB/AH/AdQD/wHEAfwC/wHGAf4C/wHoA/8BcwGDAYcB+wFVAlYBsQMtAUUDBwEKLwAB/wMAAf8DAAH/ + AwAB/wMAAf9EAAMRAf8DpwH/AxEB/wHOAYcBNgH/AdUBiwE4Af8B1QGLATgB/wHLAYQBNAH/Ab0BVQEt + Af8BxAGAATEB/wHAAVcBLwH/AZUBOwEcAf8BjQE4AR0B/wE2ASkBJQH/AQABHQFKAf8BAAECAUAB/wEY + AZEBsgH/AU0B1QHmAf8BAAE2AYkB/wEAAQgBRgH/AQABIQFBAf8BTAEvASAB/wGSAToBHAH/AbEBTgEo + Af8BwwGAATAB/wHDAYABMAH/AboBVAEsAf8B0wGKATcB/wHVAYsBOAH/AcUBggE0Af8DGAH/A6cB/wMR + Af8CAQGBAf8BCgErAZAB/wErAaEBwgH/ARwBVQGkAf8BEAEnAVYB/wERAScBhAH/ARIBJwGIAf8BEwEn + AYgB/wETAScBgQH/ARIBJwGBAf8BEQEnAYEB/wERAScBVgH/AREBJwFVAf8BEQEnAVUB/wERAScBVQH/ + AREBJwFVAf8BEQEnAVUB/wERAScBVQH/AREBJwFVAf8BEQEnAVUB/wERAScBgQH/AREBJwGBAf8BEQEn + AYEB/wERAScBgQH/ARMBKAGIAf8BFgErAYgB/wERAScBhAH/ARABJwFWAf8BHAFXAaQB/wErAaEBwwH/ + AQoBKwGRAf8CAQGBAf8/AAEBAwQBBgMSARgDMgFQA1IBqQFZAmQB7AGQAaABqgH+AdkD/wHEAfwC/wHD + AfsC/wHDAfsC/wHXA/8CqAGqAf0BVwJZAb8DMgFQAwgBCy8AAf8DAAH/AwAB/wMAAf8DAAH/RAADEQH/ + A5sB/wMRAf8BzgFZATQB/wHVAYMBNgH/AcsBVwEyAf8BgwEwAR0B/wFCASgBIAH/AVABKwEeAf8BSAEp + AR8B/wEZASYBMQH/AQABIAFOAf8BAAEIAUoB/wEAASUBVAH/AUcB0AHnAf8BUgHdAfEB/wE3AacBsQH/ + AVgB4QH3Af8BLgGpAcUB/wEAAQkBQAH/AQABFAFRAf8BAAEjAUYB/wEqASYBKAH/AU4BKgEeAf8BTwEq + AR4B/wE9ASgBJAH/AZQBNQEaAf8B0wGCATUB/wHFAVUBMgH/AxcB/wObAf8DEQH/AgEBWAH/AQsBLAGL + Af8BJAGcAb0B/wECARMBQwH/AQABBgFPAf8BBwEtAZgB/wEGATABnQH/AQYBLgGdAf8BBgEtAZwB/wEG + AS0BlgH/AQUBLAGVAf8BCAEqAZEB/wEAAQQBTwH/AgABRgH/AgABRgH/AgABRgH/AgABRgH/AgABRgH/ + AQABAgFNAf8BBwEmAZIB/wEGASgBlAH/AQABHgGNAf8BCgE0AZgB/wEAARcBjgH/AQoBNAGfAf8BBgEk + AZMB/wECAQcBTwH/AgABQAH/AQIBEQFBAf8BJAGXAbQB/wELASsBiAH/AgEBWAH/OwABAQMEAQYDEAEV + AywBQwFPAlABmwFYAmIB6QGQAaABqgH+Ad4D/wHGAf4C/wHDAfsC/wHDAfsC/wHIA/8B7AP/AXMBhAGH + AfsBVQJWAbEDLQFFAwcBCi8AAf8DAAH/AwAB/wMAAf8DAAH/DgAC/wIAAv8CAAL/AgAC/wIAAv8kAAMR + Af8DkwH/AxEB/wHMAVEBMgH/AdMBVAE0Af8BzgFRATIB/wGKAS0BGgH/AQABNQGEAf8BAAEtAY0B/wEA + ASUBiAH/AQABGwGBAf8BCQFQAZ8B/wFLAdUB5gH/AZAB7wH+Af8BLgGbAbwB/wE6ARABJwH/AZEBDAEl + Af8BKQEmAT4B/wFFAcoB5gH/AZAB7QH6Af8BNQG0AcoB/wEAATYBkgH/AQABHQGBAf8BAAEmAYcB/wEA + ATcBlgH/ARcBJwE6Af8BkwEvARkB/wHSAVQBNAH/AcMBTQEwAf8DFgH/A5MB/wMRAf8CAQFYAf8BCwEt + AYsB/wEkAZ0BvQH/AQIBEwFKAf8BBQEsAZUB/wFBAdYB6QH/AUIB1wHwAf8BQQHSAfAB/wFBAdEB8AH/ + AUEB0QHuAf8BPgHNAesB/wE7AcUB5wH/AQABEAGKAf8CAwFQAf8CAwFQAf8CAwFQAf8CAwFQAf8BAgEE + AVEB/wEAARIBjAH/ATwBwQHiAf8BNgHEAegB/wEUAYoBzwH/AUoB4QH1Af8BAQFKAcMB/wFMAeEB9QH/ + AScBogHVAf8BAAERAZIB/wIAAUwB/wECAREBSQH/ASIBlAG0Af8BCwEoAYgB/wIBAVgB/zgAAwQBBQMN + ARIDKAE8A0oBigFeAmEB2gKoAakB/QHiA/8BxgH+Av8BwwH7Av8BwwH7Av8ByQP/AekD/wKoAakB/QFc + AmEB3ANHAYIDHQEqAwUBBy8AAf8DAAH/AwAB/wMAAf8DAAH/DgAC/wIAAv8CAAL/AgAC/wIAAv8kAAMR + Af8DjwH/AxEB/wHJAU4BMQH/AdABUQEzAf8B0AFRATMB/wGmATkBIQH/AR8BIwExAf8BBQFPAaMB/wE3 + AasB0gH/AZIB6wH4Af8BiQHqAfcB/wE2AaIBvAH/ATYBIwE8Af8BmgEXAT0B/wG/ASoBiwH/AcEBLwGT + Af8BuwEoAYIB/wGCARABLwH/AS4BPwFZAf8BRQHDAdsB/wGTAfAB/AH/AYYB4QHzAf8BJAGRAbkB/wEA + AUoBnwH/AUwBJAEcAf8BvAFGASsB/wHQAVEBMwH/AcABSgEvAf8DFgH/A48B/wMRAf8CAQFYAf8BCwEt + AYsB/wEkAZ0BvQH/AQIBEwFOAf8BAgEuAZ8B/wFIAeIB9QH/AU8B7AL/AVQB7gL/AVUB7gL/AVUB7gL/ + AVUB7gL/ATQBwAHrAf8BAAEQAY8B/wIDAVUB/wIDAVIB/wIDAVAB/wIDAVEB/wEAAQgBggH/ARYBVAG+ + Af8BRgHaAfgB/wEWAZgB3wH/ATUBxAHxAf8BKQG2AeoB/wEhAawB5QH/AUEB1gH5Af8BGwGfAeEB/wEk + AZ8B0wH/AQIBHQGMAf8BAQERAUwB/wEfAZQBtAH/AQsBKAGIAf8CAQFYAf8kAAMBAQIDAwQEBAYECAEL + Aw8BFAMkATYBRgJHAYABWAJcAdEBcwGEAYgB+wHpA/8ByAP/AcMB+wL/AcMB+wL/AcwD/wHwA/8BcwGE + AYgB+wFZAl0B1wNMAZIDKwFCAw0BEgMDAQQvAAH/AwAB/wMAAf8DAAH/AwAB/w4AAv8CAAL/AgAC/wIA + Av8CAAL/JAADEQH/A48B/wMRAf8BxwFMATEB/wHOAU8BMwH/Ac4BTwEzAf8BpgE5ASIB/wIfAS0B/wEA + AT8BkAH/AR4BhwGpAf8BEQEmAT4B/wFFAQkBIAH/AaUBGAFAAf8BwgErAYwB/wHLAToBpAH/AdIBQgGx + Af8B1AFDAbQB/wHRAUABsAH/AcoBOQGiAf8BvgEpAYQB/wGSARIBNgH/ATcBDgEgAf8BCQE5AVcB/wEj + AYoBrAH/AQABNAGIAf8BSwEkARwB/wG9AUUBLAH/Ac4BTwEzAf8BvwFJAS8B/wMWAf8DjwH/AxEB/wIB + AVgB/wELASwBiwH/ASQBnAG5Af8BAgETAUgB/wECAS4BnwH/AUgB4QH1Af8BTQHnAv8BTgHoAv8BTwHo + Av8BUQHqAv8BVQHuAv8BNAHAAesB/wEAARABjgH/AgMBTwH/AgMBTgH/AgMBTQH/AgMBTQH/AQABCQGB + Af8BLAGhAdQB/wFNAeYC/wEDAUYBwQH/AU0B5gL/ARUBjwHUAf8BOgHJAfEB/wE6AckB8QH/ARUBjwHV + Af8BQwHcAfUB/wEHASwBmAH/AQIBEQFHAf8BIwGUAbQB/wELASgBiAH/AgEBWAH/HAADAgEDAwYBCAMN + AREDFwEgAyIBMgMqAUADLAFDAzEBTgNHAYIBWQJcAcwBagFzAXcB+gHtA/8ByQP/AcMB+wL/AcMB+wL/ + Ac0D/wH4A/8BXAFuAXIB+AFcAl4BzgFIAkkBhwMrAUIDEQEXAwQBBgMAAQEvAAH/AwAB/wMAAf8DAAH/ + AwAB/w4AAv8CAAL/AgAC/wIAAv8CAAL/JAADEQH/A5AB/wMRAf8BxQFKATAB/wHMAU0BMgH/AcwBTQEy + Af8BpAE2ASEB/wEcAR8BLwH/AQABOQGJAf8BAAE+AY0B/wEoARgBMgH/AbwBIQFWAf8BxAExAZwB/wHR + AUEBrwH/AdwBTQHBAf8B5gFWAc0B/wHpAVkB0gH/AeYBVwHNAf8B3QFOAcEB/wHQAUEBrwH/AcUBMgGb + Af8BswEdAUUB/wEAASYBRwH/AQoBRQGQAf8BAAEuAYMB/wFKASMBHAH/AbsBRAErAf8BzAFNATIB/wG9 + AUcBLgH/AxYB/wOQAf8DEQH/AgEBWAH/AQsBLAGLAf8BJAGbAbgB/wECARIBRgH/AQUBJgGSAf8BMQG7 + AeAB/wE1AbwB5gH/ATUBvwHmAf8BPAG/AeQB/wE8AcEB5wH/ATwBxQHrAf8BNwG/AeQB/wEAAQ0BhAH/ + AgIBTQH/AgEBTQH/AgABTQH/AgABTQH/AQABAQFQAf8BAAEKAYUB/wEAARABjQH/AQABCwGIAf8BAAEQ + AY8B/wEAAQwBiwH/AQABDwGUAf8BAAEQAZYB/wEAARABkwH/AQABEAGSAf8BAAEEAVEB/wECAREBRgH/ + ASQBlAG0Af8BCwEoAYgB/wIBAVgB/xcAAQEDBAEFAwoBDgMaASUDMQFNA0QBeQFPAlABmwFTAlQBrANU + Aa4DVQG1AVoCXgHYA20B9wH0A/8BygP/AcMB+wL/AcQB/AL/AdEH/wNtAfcBWAJbAcYDQwF4AyYBOAMQ + ARUDBAEGAwABATMAAf8DAAH/AwAB/wMAAf8DAAH/DgAC/wIAAv8CAAL/AgAC/wIAAv8kAAMRAf8DkgH/ + AxEB/wHDAUcBLwH/AcoBSgExAf8ByAFJATAB/wGMASgBFwH/AQUBHgE7Af8BAAE+AYwB/wEAAUoBnQH/ + AUUBFgEyAf8BwgErAZAB/wHNATwBqwH/Ad4BUAHEAf8B7wGHAdoB/wH7AZMB7AH/Af0BmAH0Af8B+wGT + AewB/wHvAYcB2gH/Ad4BUAHEAf8BzgE8AawB/wG9ASgBhAH/ARQBKAFIAf8BEgFRAZ0B/wEAAS0BhAH/ + ATgBHwEhAf8BsAE8ASYB/wHKAUoBMQH/AbsBRAEtAf8DFgH/A5IB/wMRAf8CAQFYAf8BCwEsAYoB/wEk + AZcBtgH/AQIBEQFGAf8BAAECAU8B/wEAAQ8BjwH/AQABEQGXAf8BAAERAZcB/wEAAREBjwH/AQABEQGP + Af8BAAERAY8B/wEAAQ4BiAH/AQABAgFRAf8CAAFNAf8CAAFNAf8CAAFNAf8CAAFNAf8CAAFNAf8CAAFN + Af8CAgFNAf8CAwFPAf8CAwFVAf8CAwFVAf8CAwFZAf8CAwGDAf8CAwGDAf8CAwFYAf8CAAFHAf8BAgER + AUYB/wEkAZQBtAH/AQsBKAGIAf8CAQFYAf8TAAEBAwQBBgMPARQDJAE1AT8CQAFvA1YBswFbAmEB4QNl + AfQBZAFxAXYB+gFcAW4BcgH4A1kB9QFTAW4BdQL6A/8BzQP/AcMB+wL/AcQB/AL/AdQD/wHzAfgB/AH/ + AlkBWgH1AVYCWAHBA0ABcAMgAS4DCwEPAwQBBQMAAQEbAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/ + AwAB/wMAAf8DAAH/AwAB/wMAAf8OAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/ + AgAC/wwAAxEB/wOWAf8DEQH/AcEBRAEvAf8ByAFHATAB/wHEAUUBLgH/AYcBJQEXAf8BAAEkAU4B/wES + AUwBlwH/AQQBRwGXAf8BgAEVATYB/wHGATEBmgH/AdUBRQG3Af8B6gGAAdIB/wH8AZYB8QL/AagB/gL/ + Aa8D/wGoAf4B/wH8AZYB8QH/AeoBgAHSAf8B1gFFAbcB/wHFAS8BkwH/ASsBIQE9Af8BEAFTAaAB/wEA + ATkBjQH/ARYBHgEyAf8BjAEmARYB/wHHAUcBMAH/AbkBQQEtAf8DFwH/A5YB/wMRAf8CAQFXAf8BCwEq + AYUB/wEhAZUBtAH/AQEBEQFGAf8CAAFHAf8CAwFYAf8CAwGDAf8CAwGDAf8CAwFVAf8CAwFVAf8CAwFS + Af8CAwFOAf8CAAFNAf8CAAFNAf8CAAFNAf8CAAFNAf8CAAFNAf8CAAFNAf8CAAFNAf8CAQFNAf8CAwFP + Af8CAwFVAf8CAwFVAf8CAwFVAf8CAwGDAf8CAwGDAf8CAwFYAf8CAAFHAf8BAgERAUYB/wEkAZQBtAH/ + AQsBKAGIAf8CAQFYAf8QAAMCAQMDCwEPAyMBNAFEAkUBfAFXAloBxQNtAfcB8wH4AfwB/wHxA/8B5wP/ + AeoD/wHvA/8B5AP/Ac0D/wHDAfsC/wHGAf4C/wHaA/8B8wH4AfwB/wFkAmUB9AFWAlgBvAM9AWkDHQEq + AwoBDQMDAQQjAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8OAAL/ + AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wwAAxEB/wOaAf8DEQH/Ab4BQwEu + Af8BxQFFAS8B/wGvATkBJgH/AUUBHwEaAf8BAAEuAYsB/wEpAYkBqwH/AQIBNgFZAf8BqQEdAUcB/wHI + ATUBoQH/AdoBSgG8Af8B8AGIAdwB/wH+AZ8B+gL/AbQD/wHCA/8BtAL/Af4BnwH6Af8B8AGIAdwB/wHb + AUoBvQH/AckBNAGdAf8BUQEWATUB/wEMAVABnQH/ARgBVQGiAf8BAAEjAU4B/wGGASQBFgH/AcMBRAEu + Af8BtgFAASwB/wMXAf8DmgH/AxEB/wIBAVYB/wELASgBgwH/ASMBlAG0Af8BAgERAUYB/wIAAUcB/wID + AVgB/wIDAYMB/wIDAYMB/wIDAVUB/wIDAVUB/wIDAVAB/wIDAU0B/wIAAU0B/wIAAU0B/wIAAU0B/wIA + AU0B/wIAAU0B/wIAAU0B/wIAAU0B/wIAAU0B/wIDAU0B/wIDAVEB/wIDAVUB/wIDAVUB/wIDAYMB/wID + AYMB/wIDAVgB/wIAAUcB/wECAREBRgH/ASQBlAG0Af8BCwEoAYgB/wIBAVgB/xAAAwMBBAMYASEDPQFp + AVcCWQG/AW0BcwF3AfoB8QP/Ac4D/wHEAfwC/wHDAfsC/wHDAfsC/wHDAfsC/wHDAfsC/wHDAfsC/wHG + Af4C/wHeA/8BkAGgAaoB/gFOAl0B8AFVAlcBtwM7AWMDGgElAwkBDAMDAQQnAAH/AwAB/wMAAf8DAAH/ + AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8OAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/ + AgAC/wIAAv8CAAL/AgAC/wwAAxEB/wOfAf8DEQH/AbsBQAEtAf8BwAFBAS0B/wGGASMBFQH/AQgBHQE2 + Af8BAAE8AZQB/wEwAZUBuQH/ASABJwFCAf8BuAEgAVQB/wHHATUBoAH/AdkBSQG7Af8B7wGFAdoB/wH+ + AZ0B+gL/AbED/wG8A/8BsQL/Af4BnQH6Af8B7wGFAdoB/wHZAUkBvAH/AccBNAGfAf8BpAEaAUMB/wEL + AUABiQH/ATYBlwG4Af8BAAEsAYoB/wFEAR4BGwH/Aa0BNwElAf8BswE9ASsB/wMXAf8DnwH/AxEB/wIB + AVYB/wELASgBgwH/ASQBlAG0Af8BAgERAUYB/wEAAQ4BWAH/AQoBOAGsAf8BCwE9AbYB/wEJATsBsAH/ + AQMBKgGiAf8BAAEUAY4B/wEAAQcBWAH/AgMBTwH/AgABTQH/AgABTQH/AgABTQH/AgABTQH/AgABTQH/ + AgABTQH/AgABTQH/AgABTQH/AgMBTQH/AgMBUAH/AgMBVQH/AgMBVQH/AgMBgwH/AgMBgwH/AgMBWAH/ + AgABRwH/AQIBEQFGAf8BIwGUAbQB/wELASgBiAH/AgEBWAH/EAADBAEGAyMBMwFNAk4BlQNlAfQE/wHa + A/8B2QP/AeAD/wHdA/8BzwP/AcUB/QL/AcMB+wL/AcMB+wL/AdMD/wGQAaABqgH+AU4CXQHwAVUCVwG3 + AzoBYAMYASIDCAELAwIBAysAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/ + AwAB/w4AAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/DAADEQH/A6QB/wMR + Af8BuQE9ASsB/wGgAS8BHwH/AT8BGwEZAf8BAAEdAVUB/wEfAVQBogH/AQcBRQGSAf8BTQENAR4B/wG3 + ASABVwH/AcIBMQGbAf8B0wFDAbMB/wHmAVgBzwH/AfoBkQHrAv8BoAH8Av8BqAH+Av8BoAH8Af8B+gGR + AesB/wHmAVgBzwH/AdMBQwG0Af8BwwEwAZoB/wG2AR4BSwH/ASEBGQEtAf8BGwFWAaQB/wEAAToBkQH/ + AQMBFQExAf8BhAEhARMB/wGpATYBJgH/AxcB/wOkAf8DEQH/AgEBVwH/AQsBKAGFAf8BJAGUAbQB/wEC + AREBRgH/AQkBLgGSAf8BSAHkAfUB/wFNAekC/wFGAeAB+AH/ASkBsQHfAf8BEQFGAbUB/wEDARUBigH/ + AQMBBQFPAf8CAAFNAf8CAAFNAf8CAAFNAf8CAAFNAf8CAAFNAf8CAAFNAf8CAAFNAf8CAQFNAf8CAwFO + Af8CAwFSAf8CAwFXAf8BAAEIAYQB/wEAAQ0BjQH/AQABCwGMAf8BAgEGAYMB/wIAAUgB/wEBAREBRgH/ + ASEBlQG0Af8BCwEqAYgB/wIBAVgB/xAAAwQBBgMiATIBTAJNAZEDZAHxA6gB/QGEAZkBpwH+AqgBqQH9 + AWIBgQGHAfsBZAF2AXwB/AHnAfEB+AH/AdUD/wHDAfsC/wHDAfsC/wHgA/8BXwF2AYUB+wFaAl0B0wNC + AXQDGgElAwYBCAMBAQIvAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMA + Af8OAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wwAAxEB/wOqAf8DEQH/ + AakBMwEkAf8BRwEcARkB/wE4AZYBtQH/AVEBwQHkAf8BlAHYAesB/wEAASsBiAH/AQABHgE/Af8BoQEW + AT4B/wG/ASkBjgH/AcoBOQGmAf8B2gFKAbwB/wHoAYEB0gH/AfQBigHhAf8B+QGQAegB/wH0AYoB4QH/ + AegBgQHSAf8B2gFKAb0B/wHLATkBpQH/AcABKAGKAf8BVwEVATIB/wEAARwBTAH/ARgBVgGpAf8BnAHh + Ae8B/wFDAbAB1gH/ASsBJAEsAf8BkAEoARsB/wMYAf8DqgH/AxEB/wIBAVgB/wELASgBiAH/ASQBlAG0 + Af8BAgERAUYB/wEAARgBigH/ARIBjAHPAf8BEgGTAdwB/wETAY8B1QH/AQkBUAHDAf8BAwEqAaUB/wEA + AQ4BiQH/AQABBAFUAf8CAgFNAf8CAAFNAf8CAAFNAf8CAAFNAf8CAAFNAf8CAAFNAf8CAAFNAf8CAgFN + Af8CAwFPAf8CAwFXAf8BAwESAY4B/wEQAUgBuAH/ASYBmgHSAf8BHQGNAcsB/wEHAS8BpQH/AQABBAFQ + Af8BAgERAUYB/wEkAZcBtgH/AQsBLAGKAf8CAQFYAf8QAAMDAQQDFgEeAzYBWQFPAlEBnAFXAlkBvwFZ + AlwByQFaAl0BygFcAl4BzgFYAl8B4wFXAmIB9gHwA/8BwwH7Av8BwwH7Av8B3QP/AW4BegF+AfwDWQHH + AzcBWwMPARQDAAEBTwAB/wMAAf8DAAH/AwAB/wMAAf8OAAL/AgAC/wIAAv8CAAL/AgAC/yQAAxEB/wOw + Af8DEQH/Aa8BNAEnAf8BVgEbARMB/wE5ARYBGAH/ATQBUAGFAf8BsAHuAfcB/wGbAeMB7wH/AQABLgGR + Af8BAwEqAUMB/wGlARoBRgH/AcABLQGVAf8BywE7AakB/wHWAUYBtwH/Ad4BUAHCAf8B4QFSAcYB/wHe + AVABwgH/AdYBRgG3Af8BywE7AagB/wHDASwBkQH/AYEBFgE4Af8BAAE0AYAB/wELAU4BpQH/AbcB8wH6 + Af8BlgHaAeQB/wEsASEBKQH/AUwBGgEVAf8BowEvASQB/wMYAf8DsAH/AxEB/wIBAVgB/wELASgBiAH/ + ASQBlAG0Af8BAgERAUYB/wEAASYBjwH/ATIBxwHoAf8BOQHQAfMB/wE6AcsB8gH/ATABuwHmAf8BGgGN + AcwB/wEGATEBpQH/AQEBDQGBAf8BAAECAU0B/wIAAU0B/wIAAU0B/wIAAU0B/wIAAU0B/wIAAU0B/wIA + AU0B/wIAAU0B/wIDAU0B/wEAAQYBVwH/AQwBRgG1Af8BOwHQAfEB/wFLAekB/QH/AUgB5QH7Af8BJAGp + AdwB/wEAARUBhAH/AQIBEgFGAf8BJAGbAbgB/wELASwBiwH/AgEBWAH/EAADAgEDAwoBDQMcAScDLwFJ + AzwBZgNEAXoDSAGEAU4CTwGXAVkCXAHMAVMCZAHxBP8BwwH7Av8BwwH7Av8B1wP/AqgBqgH9A1sByAM3 + AVoDCwEPUwAB/wMAAf8DAAH/AwAB/wMAAf8OAAL/AgAC/wIAAv8CAAL/AgAC/yQAAxEB/wO2Af8DEQH/ + AbABMwEnAf8BsgEzASYB/wGfASoBHgH/AVcBGgERAf8BHgEWASUB/wGTAdQB6AH/AZYB3gHvAf8BAAE9 + AZYB/wEWASEBOAH/AbgBHgFRAf8BvwErAZMB/wHGATQBoAH/AcsBOgGmAf8BzQE8AaoB/wHLAToBpgH/ + AcYBNAGgAf8BwAErAZEB/wGdARkBQgH/AQABNgFQAf8BCwFNAagB/wGvAesB+AH/AUoBoAHDAf8BPAIV + Af8BWQEaARAB/wGtATEBJAH/AakBMQEmAf8DGAH/A7YB/wMRAf8CAQFYAf8BCwEoAYgB/wEjAZQBtAH/ + AQIBEQFGAf8BAAEhAY4B/wErAcMB5wH/ATIBzgHyAf8BMgHIAfIB/wEoAbQB5gH/ARUBigHKAf8BBQEv + AZ8B/wEAAQkBUwH/AgABRAH/AgABQgH/AgABQgH/AgABQgH/AgABQgH/AgABQgH/AgABQgH/AgABQgH/ + AgABQwH/AQABAwFRAf8BHAGVAcsB/wFAAekB/QH/AUIB7gL/AUIB7gL/ATQB1QHwAf8BAAEiAZAB/wEC + ARMBRgH/ASQBnAG5Af8BCwEsAYsB/wIBAVgB/xMAAQEDBwEJAxYBHwMvAUkBQQJCAXMBTAJNAZEBUAJS + AaMBVQJXAboDXwHgAUkCYgH2AfMD/wHDAfsC/wHDAfsC/wHdA/8BbgF6AX4B/AFXAloBvQMxAU8DCQEM + UwAB/wMAAf8DAAH/AwAB/wMAAf8OAAL/AgAC/wIAAv8CAAL/AgAC/yQAAxEB/wO7Af8DEQH/Aa0BMAEm + Af8BswEyAScB/wGzATIBJwH/AagBLQEiAf8BVgEXARAB/wEeARYBJQH/AZEB0QHqAf8BVQG6Ad0B/wEA + AUYBkwH/AT8BEwEuAf8BuAEcAVQB/wG8ASQBhwH/AcABJgGKAf8BvwEnAYwB/wHAASYBigH/AbwBIwGG + Af8BtAEbAUwB/wESASQBOQH/AQABTAGiAf8BnQHeAfEB/wFKAaABxgH/AT4BFAEVAf8BlgEkARsB/wGy + ATIBJwH/AbMBMgEnAf8BpgEuASUB/wMZAf8DuwH/AxEB/wIBAVgB/wELASgBiAH/AR8BlAG0Af8BAQER + AUYB/wEAARMBhQH/AQkBggHKAf8BCAGOAdcB/wEIAYoB1wH/AQgBhgHPAf8BCAFQAcAB/wECATcBqgH/ + AQABGAGMAf8CAAE/Af8CAAE5Af8CAAE5Af8CAAE5Af8CAAE5Af8CAAE5Af8CAAE5Af8CAAE7Af8CAAE9 + Af8CAAFNAf8BEgGAAcEB/wE1AeMB+wH/ATkB7gL/ATkB7gL/ASYBxgHqAf8BAAEaAYwB/wECARMBSAH/ + ASQBnQG9Af8BCwEtAYsB/wIBAVgB/xMAAQEDCgENAyoBQAFOAk8BlwFYAlwB0QNcAeoDZwHyAlkBWgH1 + AWIBgQGHAfsB2gHqAfUB/wHYA/8BwwH7Av8BxQH9Av8B7wP/A2IB9gFQAlIBowMnAToDBwEJUwAB/wMA + Af8DAAH/AwAB/wMAAf8OAAL/AgAC/wIAAv8CAAL/AgAC/yQAAxEB/wPAAf8DEQH/AakBLgEkAf8BrwEv + ASUB/wGvAS8BJQH/Aa8BLwElAf8BpQEqASEB/wFSARUBDgH/AR8BKAE9Af8BmAHaAfEB/wErAY8BvAH/ + AQABMQFNAf8BTgEJAR8B/wFCARUBMAH/ATEBGwE2Af8BMQEbATYB/wE1ARoBNQH/AUoBEQEsAf8BOAEM + AR0B/wEAAUEBkAH/AVkBvAHgAf8BhAG7AeEB/wEwARIBGAH/AZEBIQEYAf8BrwEvASUB/wGvAS8BJQH/ + Aa8BLwElAf8BogEsASMB/wMZAf8DwAH/AxEB/wIBAVkB/wELASgBiwH/ASIBlAG0Af8BAAENAUIB/wEA + ASEBjAH/ASoB2gHrAf8BLwHkAfUB/wEvAeIB9QH/ASoB2QHzAf8BJAHCAekB/wEVAZMB0QH/AQUBMQGj + Af8CAAE2Af8CAAEvAf8CAAEvAf8CAAEvAf8CAAEvAf8CAAEvAf8CAAEvAf8CAAEyAf8CAAEyAf8CAAE6 + Af8BAAEgAZAB/wEWAZ4B1gH/ASoB0QHwAf8BJAHDAeoB/wELAVEBvQH/AQABBAFPAf8BAAEPAUgB/wEk + AZ0BvQH/AQsBLQGOAf8CAQFZAf8TAAEBAw8BFAM7AWMDXgHYBP8B+wP/AfMD/wHuA/8B4gP/AdED/wHG + Af4C/wHEAfwC/wHWA/8B5wHxAfgB/wFXAlwB3wNEAXkDGAEiAwQBBlMAAf8DAAH/AwAB/wMAAf8DAAH/ + DgAC/wIAAv8CAAL/AgAC/wIAAv8kAAMRAf8DxwH/AxEB/wGmASoBIwH/AawBKwEkAf8BrAErASQB/wGs + ASsBJAH/AawBKwEkAf8BmgEjARwB/wFJARMBEQH/ATwBkAGyAf8BlgHSAfEB/wEBAUQBogH/AQABPQGL + Af8BAAFFAZMB/wEAAUsBmgH/AQEBTQGcAf8BAAFKAZcB/wEAAUUBkwH/AQABOAGLAf8BJgGJAbsB/wGY + AdgB8wH/ASABLgFEAf8BUQETAQ4B/wGrASoBIwH/AawBKwEkAf8BrAErASQB/wGsASsBJAH/AZ8BKQEi + Af8DGQH/A8cB/wMRAf8CAwGFAf8BDwEvAY0B/wEkAZcBtAH/AQABCwFAAf8BAAECAUEB/wEAASUBjAH/ + AQABJwGSAf8BAAEnAZIB/wEAASUBkAH/AQABIAGGAf8BAAETAVMB/wEAAQQBQwH/AgABLAH/AgABJgH/ + AgABJgH/AgABJgH/AgABJgH/AgABJgH/AgABJgH/AgABJgH/AgABLAH/AgABLQH/AgABOAH/AQABCwFT + Af8BAAEhAYoB/wEAARkBhQH/AQABBAFMAf8CAAE5Af8BAAEMAUEB/wEkAZwBuQH/AQ8BMAGRAf8CAwGF + Af8TAAEBAw0BEgM4AVwBWAJbAcsBkAGdAaYB/gHqA/8BzQP/AcQB/AL/AcMB+wL/AcMB+wL/AcYB/gL/ + AdgD/wHzAfgB/AH/A10B8ANSAakDLgFHAwwBEAMCAQNTAAH/AwAB/wMAAf8DAAH/AwAB/0QAAxEB/wPP + Af8DEQH/AaMBJwEhAf8BqAEoASIB/wGoASgBIgH/AagBKAEiAf8BqAEoASIB/wGoASgBIgH/AY0BGwEW + Af8BJAEWASEB/wGMAdIB8wH/AcMB8AH4Af8B1QHuAfcB/wHgAfcB/AH/AecD/wHoA/8B5gH+Av8B3QHy + AfoB/wHNAe0B9wH/AbUB7wH7Af8BSgGrAc8B/wE/AQ8BEQH/AZYBIAEaAf8BqAEoASIB/wGoASgBIgH/ + AagBKAEiAf8BqAEoASIB/wGdASYBIAH/AxoB/wPPAf8DEQH/AgkBigH/ARABMgGYAf8BJQGVAbYB/wEP + ATYBiAH/AQEBDwE/Af8BAQEPAUQB/wEBAQ8BRAH/AQEBDwFEAf8BAQEPAT4B/wEBAQ8BPgH/AQEBDwE+ + Af8BAQEPATkB/wEAAQkBOAH/AQABCQE4Af8BAAEJATgB/wEAAQkBOAH/AQABCQE4Af8BAAEJATgB/wEA + AQkBOAH/AQABCQE4Af8BAQEPATkB/wEBARABPwH/AQEBEQFAAf8BAQERAUAB/wEBAREBRgH/AQEBEQFG + Af8BAQEQAUUB/wEBAQ8BPwH/AQ0BNgGHAf8BJAGUAbUB/wEQATIBmAH/AgkBigH/EwABAQMHAQoDJgE4 + A0oBiwFZAlwBzwFfAW4BcgH4AfMB+AH8Af8B8gP/AeYD/wHoA/8B+gP/AZABoAGqAf4DYQHuA1UBsgM4 + AVwDFQEdAwUBBwMAAQFTAAH/AwAB/wMAAf8DAAH/AwAB/0QAAxEB/wPXAf8DEQH/AZ8BJAEgAf8BpAEl + ASEB/wGkASUBIQH/AaQBJQEhAf8BpAElASEB/wGkASUBIQH/AZkBIAEcAf8BOQENAREB/wGvAdwB5AH/ + AeIB8AHyAf8BjQGkAa8B/wE9AUMBTwH/ASsBJwE1Af8BLAEoATYB/wEuASsBOAH/AUgBVAGGAf8BpQHA + AcUB/wHvAvsB/wE0AYIBlwH/AUoBDgENAf8BowEkASAB/wGkASUBIQH/AaQBJQEhAf8BpAElASEB/wGk + ASUBIQH/AZkBIwEfAf8DGgH/A9cB/wMRAf8CCgGUAf8BDwEtAZsB/wEwAaIBwwH/AUMBtwHNAf8BPwG5 + Ac0B/wE/AbkBzQH/AT0BuQHNAf8BPAG5Ac0B/wE8AbkBzQH/ATwBuQHNAf8BPAG5Ac0B/wE8AbkBzQH/ + ATwBuQHNAf8BPAG5Ac0B/wE8AbkBzQH/ATwBuQHNAf8BPAG5Ac0B/wE8AbkBzQH/ATwBuQHNAf8BPAG5 + Ac0B/wE/AbkBzQH/AT8BvAHPAf8BPwG/AdIB/wE/Ab8B0gH/AT8BvwHSAf8BPwG/AdIB/wE9AbwBzwH/ + ATwBuQHNAf8BOwG2AcgB/wErAZ4BwAH/AQ8BLAGbAf8CCgGUAf8UAAMEAQUDEQEXAykBPwNEAXkBVQJW + AbQBXAJhAdwDXwHzAWQBcQF2AfoBZAFxAXYB+gNdAe0BWwJeAdABUAJRAZ8DNgFZAxgBIQMHAQoDAQEC + VwAB/wMAAf8DAAH/AwAB/wMAAf9EAAMRAf8D3wH/AxEB/wGcASEBHwH/AaEBIgEgAf8BoQEiASAB/wGh + ASIBIAH/AaEBIgEgAf8BoQEiASAB/wGbAR8BHQH/AT8BDAEPAf8BjwGWAaEB/wEtAQoBEgH/AUcCDAH/ + AUoBDAELAf8BgQEUARIB/wGBARQBEgH/AYEBFAESAf8BSQEMAQsB/wFEAQwBDQH/ASEBFQEkAf8BUQFV + AYgB/wFJAQwBCwH/AaABIQEfAf8BoQEiASAB/wGhASIBIAH/AaEBIgEgAf8BoQEiASAB/wGWASABHgH/ + AxsB/wPfAf8DEQH/AgsBngH/AQwBEwGUAf8BGwE1AZ8B/wEuAVUBrgH/ATEBWQGrAf8BMQFZAasB/wEv + AVkBqwH/AS4BWQGnAf8BLgFZAaYB/wEsAVYBpgH/ASgBUwGmAf8BKAFTAaIB/wEoAVMBoQH/ASgBUwGh + Af8BKAFTAaEB/wEoAVMBoQH/ASgBUwGhAf8BKAFTAaEB/wEoAVMBoQH/ASgBUwGhAf8BLAFTAaIB/wEs + AVMBpgH/AS8BVgGmAf8BMQFZAaYB/wExAVkBpwH/ATEBWQGrAf8BLwFZAasB/wEuAVkBqwH/ASsBVQGu + Af8BGQE1AZ8B/wEMARMBlAH/AgsBngH/FwABAQMEAQYDDAEQAxwBKAMxAU0DQgF1A04BmQFTAlUBrQNS + AakDSwGOATwCPQFnAykBPgMUARsDBwEJAwIBA1sAAf8DAAH/AwAB/wMAAf8DAAH/RAADTAHzA98B/wMo + Af8BigIbAf8BmwEdAR4B/wGbAR0BHgH/AZsBHQEeAf8BmwEdAR4B/wGbAR0BHgH/AZoBHAEdAf8BRAEJ + AQoB/wE+AQkBDAH/AUYCCQH/AZkBHAEdAf8BmgEdAR4B/wGbAR0BHgH/AZsBHQEeAf8BmwEdAR4B/wGa + ARwBHQH/AZIBGQEaAf8BRQIJAf8BOwEJAQ0B/wFGAgkB/wGaAR0BHgH/AZsBHQEeAf8BmwEdAR4B/wGb + AR0BHgH/AZsBHQEeAf8BVgEZARoB/wMwAf8D3QH/A04B8AIQAaQB/wILAZ4B/wIKAZQB/wIJAY8B/wIJ + AYwB/wIJAYYB/wIJAYIB/wIEAVgB/wIDAVgB/wICAVUB/wIBAVIB/wIBAVAB/wIBAVAB/wIBAVAB/wIB + AVAB/wIBAVAB/wIBAVAB/wIBAVAB/wIBAVAB/wIBAVAB/wIBAVAB/wIBAVIB/wICAVUB/wIDAVgB/wIE + AVgB/wIJAYIB/wIJAYYB/wIJAYwB/wIJAY8B/wIKAZQB/wILAZ4B/wIQAaQB/xsAAQEDAgEDAwYBCAMM + ARADFgEeAyIBMgMqAUADKQE+Ax8BLAMSARkDCgENAwQBBgMBAQJfAAH/AwAB/wMAAf8DAAH/AwAB/0QA + A1cBvQO/Af8DlAH/ATwBGgEcAf8BigEZAR8B/wGTARcBHgH/AZMBFwEeAf8BkwEXAR4B/wGTARcBHgH/ + AZMBFwEeAf8BkgEXAR0B/wGOARUBHAH/AZIBFwEeAf8BkwEXAR4B/wGTARcBHgH/AZMBFwEeAf8BkwEX + AR4B/wGTARcBHgH/AZMBFwEeAf8BkwEXAR4B/wGSARcBHQH/AY0BFQEbAf8BkgEXAR4B/wGTARcBHgH/ + AZMBFwEeAf8BkwEXAR4B/wGTARcBHgH/AYABGgEfAf8BMQEZARsB/wO0Af8DtAH/A1QBrgITAawB/wIT + AakB/wITAaYB/wIOAaYB/wINAaYB/wINAaMB/wINAZ8B/wILAZ4B/wILAZcB/wILAZcB/wILAZYB/wIL + AZYB/wILAY4B/wILAY4B/wILAY4B/wILAY4B/wILAY4B/wILAY4B/wILAY4B/wILAY4B/wILAZYB/wIL + AZYB/wILAZcB/wILAZcB/wILAZ4B/wINAZ8B/wINAaMB/wINAaYB/wIOAaYB/wITAaYB/wITAakB/wIT + AawB/yQAAwEBAgMDBAQEBgEIAwYBCAMEAQYDAwEEAwABAWcAAf8DAAH/AwAB/wMAAf8DAAH/RAADNAFU + A0AB/wPuAf8DkwH/AycB/wMRAf8DEQH/AxEB/wMRAf8DEQH/AxEB/wMRAf8DEQH/AxEB/wMRAf8DEQH/ + AxEB/wMRAf8DEQH/AxEB/wMRAf8DEQH/AxEB/wMRAf8DEQH/AxEB/wMRAf8DMAH/A7IB/wPqAf8DMAH/ + Ay0BRQITAawB/wITAawB/wITAawB/wITAawB/wITAawB/wITAawB/wITAawB/wIPAagB/wIOAaQB/wIL + AaIB/wILAZ8B/wILAZ8B/wILAZwB/wILAZwB/wILAZwB/wILAZwB/wILAZwB/wILAZwB/wILAZwB/wIL + AZwB/wILAZ8B/wILAZ8B/wILAaIB/wIOAacB/wIPAagB/wITAawB/wITAawB/wITAawB/wITAawB/wIT + AawB/wITAawB/wITAawB//8ABQADSgGNAz8B/wPNAf8D+QH/A/sB/wP7Af8D+wH/A/sB/wP7Af8D+wH/ A/sB/wP7Af8D+wH/A/sB/wP7Af8D+wH/A/sB/wP7Af8D+wH/A/sB/wP7Af8D+wH/A/sB/wP7Af8D+wH/ - A/sB/wP7Af8D+wH/A+sB/wO9Af8DKwH/A0gBhwQAA0gBhQIUAawB/wIUAawB/wIUAawB/wIUAawB/wIU - AawB/wIUAawB/wIUAawB/wITAakB/wIRAakB/wIRAaYB/wINAaQB/wIMAaEB/wIMAaEB/wIMAaEB/wIM - AaEB/wIMAaEB/wIMAaEB/wIMAaEB/wIMAaEB/wINAaQB/wIRAaYB/wIRAakB/wITAasB/wIUAawB/wIU - AawB/wIUAawB/wIUAawB/wIUAawB/wIUAawB/wIUAawB/wNIAYX/AAkAAzcBWgNZAcMDKwH8AxIB/wMS - Af8DEgH/AxIB/wMSAf8DEgH/AxIB/wMSAf8DEgH/AxIB/wMSAf8DEgH/AxIB/wMSAf8DEgH/AxIB/wMS - Af8DEgH/AxIB/wMSAf8DEgH/AxIB/wNVAeoDVAGuAy0BRQgAAwcBCgNIAYUCFAGsAf8CFAGsAf8CFAGs - Af8CFAGsAf8CFAGsAf8CFAGsAf8CFAGsAf8CFAGsAf8CFAGrAf8CEwGqAf8CEgGqAf8CEgGoAf8CEgGk - Af8CEgGkAf8CEgGkAf8CEgGkAf8CEgGoAf8CEgGqAf8CEwGqAf8CFAGrAf8CFAGsAf8CFAGsAf8CFAGs - Af8CFAGsAf8CFAGsAf8CFAGsAf8CFAGsAf8CFAGsAf8DSAGFAwcBCv8AAQABQgFNAT4HAAE+AwABKAMA - AYADAAFAAwABAQEAAQEGAAEEFgAD//8A/wADAAHAAgABAwQACP8BgAIAAQEEAAL/AfgBBwT/CAAC/wHw - AQME/wgAAv8B4AEBAf8BwQL/CAAC/wHAAQEB/wHBAv8IAAL/AYABAQH/AcEC/wgAAv8BAAEBAf8BwQL/ - CAAB/wH+AQABAQH/AcEC/wgAAf8B/AEAAQEB/wLBAf8IAAH/AfwBAAEBAf8CwQH/CAAB/wGAAQABAQH/ - AsEB/wgAAf4CAAEBAf8CwQH/CAAB+AIAAQMB/wLBAf8IAAHwAgABBwHgAQEBwAEHCAAB8AIAAR8B4AEB - AcABBwgAAfACAAE/AeABAQHAAQcIAAHwAgABfwHgAQEBwAEHCAAB8AIAAf8B4AEBAcABBwgAAfABAAEB - Av8CwQH/CAAB8AEAAQMC/wLBAf8IAAHwAQABAwL/AsEB/wgAAfABAAEDAv8CwQH/CAAB8AEAAQMC/wLB - Af8IAAHwAQABAwL/AcEC/wgAAfABAAEDAv8BwQL/CAAB+AEAAQcC/wHBAv8IAAH4AQABDwL/AcEC/wgA - AfwBAAEfAv8BwQL/CAAB/wGAAX8C/wHBAv8IAAj/AYACAAEBBAAI/wHAAgABAwQACP8L + A/sB/wPrAf8DvQH/AyoB/wNIAYcEAANIAYUCEwGsAf8CEwGsAf8CEwGsAf8CEwGsAf8CEwGsAf8CEwGs + Af8CEwGsAf8CEgGpAf8CEAGpAf8CEAGmAf8CDAGkAf8CCwGhAf8CCwGhAf8CCwGhAf8CCwGhAf8CCwGh + Af8CCwGhAf8CCwGhAf8CCwGhAf8CDAGkAf8CEAGmAf8CEAGpAf8CEgGrAf8CEwGsAf8CEwGsAf8CEwGs + Af8CEwGsAf8CEwGsAf8CEwGsAf8CEwGsAf8DSAGF/wAJAAM3AVoDWQHDAysB/AMRAf8DEQH/AxEB/wMR + Af8DEQH/AxEB/wMRAf8DEQH/AxEB/wMRAf8DEQH/AxEB/wMRAf8DEQH/AxEB/wMRAf8DEQH/AxEB/wMR + Af8DEQH/AxEB/wMRAf8DVQHqA1QBrgMtAUUIAAMHAQoDSAGFAhMBrAH/AhMBrAH/AhMBrAH/AhMBrAH/ + AhMBrAH/AhMBrAH/AhMBrAH/AhMBrAH/AhMBqwH/AhIBqgH/AhEBqgH/AhEBqAH/AhEBpAH/AhEBpAH/ + AhEBpAH/AhEBpAH/AhEBqAH/AhEBqgH/AhIBqgH/AhMBqwH/AhMBrAH/AhMBrAH/AhMBrAH/AhMBrAH/ + AhMBrAH/AhMBrAH/AhMBrAH/AhMBrAH/A0gBhQMHAQr/AAEAAUIBTQE+BwABPgMAASgDAAGAAwABQAMA + AQEBAAEBBgABBBYAA///AP8AAwABwAIAAQMEAAj/AYACAAEBBAAC/wH4AQcE/wgAAv8B8AEDBP8IAAL/ + AeABAQH/AcEC/wgAAv8BwAEBAf8BwQL/CAAC/wGAAQEB/wHBAv8IAAL/AQABAQH/AcEC/wgAAf8B/gEA + AQEB/wHBAv8IAAH/AfwBAAEBAf8CwQH/CAAB/wH8AQABAQH/AsEB/wgAAf8BgAEAAQEB/wLBAf8IAAH+ + AgABAQH/AsEB/wgAAfgCAAEDAf8CwQH/CAAB8AIAAQcB4AEBAcABBwgAAfACAAEfAeABAQHAAQcIAAHw + AgABPwHgAQEBwAEHCAAB8AIAAX8B4AEBAcABBwgAAfACAAH/AeABAQHAAQcIAAHwAQABAQL/AsEB/wgA + AfABAAEDAv8CwQH/CAAB8AEAAQMC/wLBAf8IAAHwAQABAwL/AsEB/wgAAfABAAEDAv8CwQH/CAAB8AEA + AQMC/wHBAv8IAAHwAQABAwL/AcEC/wgAAfgBAAEHAv8BwQL/CAAB+AEAAQ8C/wHBAv8IAAH8AQABHwL/ + AcEC/wgAAf8BgAF/Av8BwQL/CAAI/wGAAgABAQQACP8BwAIAAQMEAAj/Cw== \ No newline at end of file diff --git a/Tab/PingForm.Designer.cs b/Tab/PingForm.Designer.cs new file mode 100644 index 0000000..6b342f1 --- /dev/null +++ b/Tab/PingForm.Designer.cs @@ -0,0 +1,281 @@ + +namespace DutyContent.Tab +{ + partial class PingForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.panel6 = new System.Windows.Forms.Panel(); + this.cboPingDefAddr = new System.Windows.Forms.ComboBox(); + this.lblPingDefAddr = new System.Windows.Forms.Label(); + this.pbxPingGraph = new System.Windows.Forms.PictureBox(); + this.chkPingGraph = new System.Windows.Forms.CheckBox(); + this.tlpnPingColors = new System.Windows.Forms.TableLayoutPanel(); + this.lblPingStat1 = new System.Windows.Forms.Label(); + this.btnPingColor4 = new System.Windows.Forms.Button(); + this.btnPingColor2 = new System.Windows.Forms.Button(); + this.btnPingColor3 = new System.Windows.Forms.Button(); + this.lblPingStat2 = new System.Windows.Forms.Label(); + this.lblPingStat4 = new System.Windows.Forms.Label(); + this.btnPingColor1 = new System.Windows.Forms.Button(); + this.lblPingStat3 = new System.Windows.Forms.Label(); + this.lblPingColors = new System.Windows.Forms.Label(); + this.chkUsePing = new System.Windows.Forms.CheckBox(); + this.panel6.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbxPingGraph)).BeginInit(); + this.tlpnPingColors.SuspendLayout(); + this.SuspendLayout(); + // + // panel6 + // + this.panel6.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.panel6.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.panel6.Controls.Add(this.cboPingDefAddr); + this.panel6.Controls.Add(this.lblPingDefAddr); + this.panel6.Controls.Add(this.pbxPingGraph); + this.panel6.Controls.Add(this.chkPingGraph); + this.panel6.Controls.Add(this.tlpnPingColors); + this.panel6.Controls.Add(this.lblPingColors); + this.panel6.Controls.Add(this.chkUsePing); + this.panel6.Location = new System.Drawing.Point(10, 12); + this.panel6.Name = "panel6"; + this.panel6.Size = new System.Drawing.Size(778, 426); + this.panel6.TabIndex = 2; + // + // cboPingDefAddr + // + this.cboPingDefAddr.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cboPingDefAddr.FormattingEnabled = true; + this.cboPingDefAddr.Location = new System.Drawing.Point(535, 51); + this.cboPingDefAddr.Name = "cboPingDefAddr"; + this.cboPingDefAddr.Size = new System.Drawing.Size(238, 21); + this.cboPingDefAddr.TabIndex = 15; + this.cboPingDefAddr.SelectedIndexChanged += new System.EventHandler(this.CboPingDefAddr_SelectedIndexChanged); + // + // lblPingDefAddr + // + this.lblPingDefAddr.AutoSize = true; + this.lblPingDefAddr.Location = new System.Drawing.Point(515, 35); + this.lblPingDefAddr.Name = "lblPingDefAddr"; + this.lblPingDefAddr.Size = new System.Drawing.Size(25, 13); + this.lblPingDefAddr.TabIndex = 14; + this.lblPingDefAddr.Text = "335"; + // + // pbxPingGraph + // + this.pbxPingGraph.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.pbxPingGraph.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pbxPingGraph.Location = new System.Drawing.Point(129, 108); + this.pbxPingGraph.Name = "pbxPingGraph"; + this.pbxPingGraph.Size = new System.Drawing.Size(644, 186); + this.pbxPingGraph.TabIndex = 13; + this.pbxPingGraph.TabStop = false; + // + // chkPingGraph + // + this.chkPingGraph.AutoSize = true; + this.chkPingGraph.Location = new System.Drawing.Point(26, 108); + this.chkPingGraph.Name = "chkPingGraph"; + this.chkPingGraph.Size = new System.Drawing.Size(44, 17); + this.chkPingGraph.TabIndex = 12; + this.chkPingGraph.Text = "334"; + this.chkPingGraph.UseVisualStyleBackColor = true; + this.chkPingGraph.CheckedChanged += new System.EventHandler(this.ChkPingGraph_CheckedChanged); + // + // tlpnPingColors + // + this.tlpnPingColors.ColumnCount = 4; + this.tlpnPingColors.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F)); + this.tlpnPingColors.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F)); + this.tlpnPingColors.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F)); + this.tlpnPingColors.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F)); + this.tlpnPingColors.Controls.Add(this.lblPingStat1, 0, 0); + this.tlpnPingColors.Controls.Add(this.btnPingColor4, 3, 1); + this.tlpnPingColors.Controls.Add(this.btnPingColor2, 1, 1); + this.tlpnPingColors.Controls.Add(this.btnPingColor3, 2, 1); + this.tlpnPingColors.Controls.Add(this.lblPingStat2, 1, 0); + this.tlpnPingColors.Controls.Add(this.lblPingStat4, 3, 0); + this.tlpnPingColors.Controls.Add(this.btnPingColor1, 0, 1); + this.tlpnPingColors.Controls.Add(this.lblPingStat3, 2, 0); + this.tlpnPingColors.Location = new System.Drawing.Point(129, 35); + this.tlpnPingColors.Name = "tlpnPingColors"; + this.tlpnPingColors.Padding = new System.Windows.Forms.Padding(3); + this.tlpnPingColors.RowCount = 2; + this.tlpnPingColors.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 40F)); + this.tlpnPingColors.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 60F)); + this.tlpnPingColors.Size = new System.Drawing.Size(318, 62); + this.tlpnPingColors.TabIndex = 11; + // + // lblPingStat1 + // + this.lblPingStat1.AutoSize = true; + this.lblPingStat1.Dock = System.Windows.Forms.DockStyle.Fill; + this.lblPingStat1.Location = new System.Drawing.Point(6, 3); + this.lblPingStat1.Name = "lblPingStat1"; + this.lblPingStat1.Size = new System.Drawing.Size(72, 22); + this.lblPingStat1.TabIndex = 6; + this.lblPingStat1.Text = "330"; + this.lblPingStat1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // btnPingColor4 + // + this.btnPingColor4.BackColor = System.Drawing.Color.Plum; + this.btnPingColor4.Dock = System.Windows.Forms.DockStyle.Fill; + this.btnPingColor4.Location = new System.Drawing.Point(240, 28); + this.btnPingColor4.Name = "btnPingColor4"; + this.btnPingColor4.Size = new System.Drawing.Size(72, 28); + this.btnPingColor4.TabIndex = 8; + this.btnPingColor4.UseVisualStyleBackColor = false; + this.btnPingColor4.Click += new System.EventHandler(this.BtnPingColor4_Click); + // + // btnPingColor2 + // + this.btnPingColor2.BackColor = System.Drawing.Color.Aqua; + this.btnPingColor2.Dock = System.Windows.Forms.DockStyle.Fill; + this.btnPingColor2.Location = new System.Drawing.Point(84, 28); + this.btnPingColor2.Name = "btnPingColor2"; + this.btnPingColor2.Size = new System.Drawing.Size(72, 28); + this.btnPingColor2.TabIndex = 10; + this.btnPingColor2.UseVisualStyleBackColor = false; + this.btnPingColor2.Click += new System.EventHandler(this.BtnPingColor2_Click); + // + // btnPingColor3 + // + this.btnPingColor3.BackColor = System.Drawing.Color.LawnGreen; + this.btnPingColor3.Dock = System.Windows.Forms.DockStyle.Fill; + this.btnPingColor3.Location = new System.Drawing.Point(162, 28); + this.btnPingColor3.Name = "btnPingColor3"; + this.btnPingColor3.Size = new System.Drawing.Size(72, 28); + this.btnPingColor3.TabIndex = 9; + this.btnPingColor3.UseVisualStyleBackColor = false; + this.btnPingColor3.Click += new System.EventHandler(this.BtnPingColor3_Click); + // + // lblPingStat2 + // + this.lblPingStat2.AutoSize = true; + this.lblPingStat2.Dock = System.Windows.Forms.DockStyle.Fill; + this.lblPingStat2.Location = new System.Drawing.Point(84, 3); + this.lblPingStat2.Name = "lblPingStat2"; + this.lblPingStat2.Size = new System.Drawing.Size(72, 22); + this.lblPingStat2.TabIndex = 5; + this.lblPingStat2.Text = "331"; + this.lblPingStat2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // lblPingStat4 + // + this.lblPingStat4.AutoSize = true; + this.lblPingStat4.Dock = System.Windows.Forms.DockStyle.Fill; + this.lblPingStat4.Location = new System.Drawing.Point(240, 3); + this.lblPingStat4.Name = "lblPingStat4"; + this.lblPingStat4.Size = new System.Drawing.Size(72, 22); + this.lblPingStat4.TabIndex = 3; + this.lblPingStat4.Text = "333"; + this.lblPingStat4.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // btnPingColor1 + // + this.btnPingColor1.BackColor = System.Drawing.Color.RoyalBlue; + this.btnPingColor1.Dock = System.Windows.Forms.DockStyle.Fill; + this.btnPingColor1.Location = new System.Drawing.Point(6, 28); + this.btnPingColor1.Name = "btnPingColor1"; + this.btnPingColor1.Size = new System.Drawing.Size(72, 28); + this.btnPingColor1.TabIndex = 7; + this.btnPingColor1.UseVisualStyleBackColor = false; + this.btnPingColor1.Click += new System.EventHandler(this.BtnPingColor1_Click); + // + // lblPingStat3 + // + this.lblPingStat3.AutoSize = true; + this.lblPingStat3.Dock = System.Windows.Forms.DockStyle.Fill; + this.lblPingStat3.Location = new System.Drawing.Point(162, 3); + this.lblPingStat3.Name = "lblPingStat3"; + this.lblPingStat3.Size = new System.Drawing.Size(72, 22); + this.lblPingStat3.TabIndex = 4; + this.lblPingStat3.Text = "332"; + this.lblPingStat3.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // lblPingColors + // + this.lblPingColors.AutoSize = true; + this.lblPingColors.Location = new System.Drawing.Point(23, 35); + this.lblPingColors.Name = "lblPingColors"; + this.lblPingColors.Size = new System.Drawing.Size(25, 13); + this.lblPingColors.TabIndex = 2; + this.lblPingColors.Text = "329"; + // + // chkUsePing + // + this.chkUsePing.AutoSize = true; + this.chkUsePing.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.chkUsePing.Location = new System.Drawing.Point(3, 3); + this.chkUsePing.Name = "chkUsePing"; + this.chkUsePing.Size = new System.Drawing.Size(58, 24); + this.chkUsePing.TabIndex = 0; + this.chkUsePing.Text = "328"; + this.chkUsePing.UseVisualStyleBackColor = true; + this.chkUsePing.CheckedChanged += new System.EventHandler(this.ChkUsePing_CheckedChanged); + // + // PingForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(800, 450); + this.Controls.Add(this.panel6); + this.Name = "PingForm"; + this.Text = "Ping"; + this.panel6.ResumeLayout(false); + this.panel6.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbxPingGraph)).EndInit(); + this.tlpnPingColors.ResumeLayout(false); + this.tlpnPingColors.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel panel6; + private System.Windows.Forms.ComboBox cboPingDefAddr; + private System.Windows.Forms.Label lblPingDefAddr; + private System.Windows.Forms.PictureBox pbxPingGraph; + private System.Windows.Forms.CheckBox chkPingGraph; + private System.Windows.Forms.TableLayoutPanel tlpnPingColors; + private System.Windows.Forms.Label lblPingStat1; + private System.Windows.Forms.Button btnPingColor4; + private System.Windows.Forms.Button btnPingColor2; + private System.Windows.Forms.Button btnPingColor3; + private System.Windows.Forms.Label lblPingStat2; + private System.Windows.Forms.Label lblPingStat4; + private System.Windows.Forms.Button btnPingColor1; + private System.Windows.Forms.Label lblPingStat3; + private System.Windows.Forms.Label lblPingColors; + private System.Windows.Forms.CheckBox chkUsePing; + } +} \ No newline at end of file diff --git a/Tab/PingForm.cs b/Tab/PingForm.cs new file mode 100644 index 0000000..33c732a --- /dev/null +++ b/Tab/PingForm.cs @@ -0,0 +1,324 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using System.IO; +using System.Threading; +using System.Net.NetworkInformation; +using DutyContent.Interface; +using System.Net; + +namespace DutyContent.Tab +{ + public partial class PingForm : Form, Interface.ISuppLocale, Interface.ISuppActPlugin + { + private static PingForm _self; + public static PingForm Self => _self; + + // + private System.Timers.Timer _timer; + private long _last_ping; + private Color _color = Color.Transparent; + private Libre.PingGrapher _grpr; + private List _kepts = new List { 0, 0 }; + + public PingForm() + { + _self = this; + + InitializeComponent(); + + _grpr = new Libre.PingGrapher(pbxPingGraph); + } + + public void PluginInitialize() + { + chkUsePing.Checked = DcConfig.Duty.UsePing; + btnPingColor1.BackColor = DcConfig.Duty.PingColors[0]; + btnPingColor2.BackColor = DcConfig.Duty.PingColors[1]; + btnPingColor3.BackColor = DcConfig.Duty.PingColors[2]; + btnPingColor4.BackColor = DcConfig.Duty.PingColors[3]; + chkPingGraph.Checked = DcConfig.Duty.PingGraph; + + // + try + { + var svl = File.ReadAllLines(Path.Combine(DcConfig.DataPath, "ServerList.txt")); + int ssv = -1; + + for (var i = 0; i < svl.Length; i++) + { + cboPingDefAddr.Items.Add(svl[i]); + + if (svl[i].StartsWith(DcConfig.Duty.PingDefAddr)) + ssv = i; + } + + if (string.IsNullOrEmpty(DcConfig.Duty.PingDefAddr)) + ssv = -1; + + cboPingDefAddr.SelectedIndex = ssv > 0 ? ssv : 0; + } + catch + { + cboPingDefAddr.Items.Clear(); + cboPingDefAddr.Items.Add(MesgLog.Text(27)); + cboPingDefAddr.SelectedIndex = 0; + } + + // + _timer = new System.Timers.Timer() { Interval = 5000 }; + _timer.Elapsed += (sender, e) => PingOnce(); + + if (DcConfig.Duty.UsePing) + { + PingOnce(false); + _timer.Start(); + } + + } + + public void PluginDeinitialize() + { + _timer?.Stop(); + } + + public void RefreshLocale() + { + + } + + public void UpdateUiLocale() + { + chkUsePing.Text = MesgLog.Text(328); + lblPingColors.Text = MesgLog.Text(329); + lblPingStat1.Text = MesgLog.Text(330); + lblPingStat2.Text = MesgLog.Text(331); + lblPingStat3.Text = MesgLog.Text(332); + lblPingStat4.Text = MesgLog.Text(333); + chkPingGraph.Text = MesgLog.Text(334); + lblPingDefAddr.Text = MesgLog.Text(335); + } + + private void SaveConfig(int interval = 5000) + { + DcControl.Self.RefreshSaveConfig(interval); + } + + private void ChkUsePing_CheckedChanged(object sender, EventArgs e) + { + if (!DcConfig.PluginEnable) + return; + + DcConfig.Duty.UsePing = chkUsePing.Checked; + + SaveConfig(); + + if (chkUsePing.Checked) + { + PingOnce(); + _timer.Start(); + } + else + { + _timer.Stop(); + Overlay.DutyOvForm.Self?.ResetStat(); + } + } + + private void PingColorWorker(int index, Button button) + { + Color color = (Color)WorkerAct.Invoker(new WorkerAct.ObjectReturnerDelegate(() => + { + var dg = new ColorDialog() + { + AnyColor = true, + Color = DcConfig.Duty.PingColors[index], + }; + + return dg.ShowDialog() == DialogResult.OK ? dg.Color : DcConfig.Duty.PingColors[index]; + })); + + if (DcConfig.Duty.PingColors[index] != color) + { + button.BackColor = color; + DcConfig.Duty.PingColors[index] = color; + SaveConfig(); + } + } + + private void BtnPingColor1_Click(object sender, EventArgs e) + { + PingColorWorker(0, btnPingColor1); + } + + private void BtnPingColor2_Click(object sender, EventArgs e) + { + PingColorWorker(1, btnPingColor2); + } + + private void BtnPingColor3_Click(object sender, EventArgs e) + { + PingColorWorker(2, btnPingColor3); + } + + private void BtnPingColor4_Click(object sender, EventArgs e) + { + PingColorWorker(3, btnPingColor4); + } + + private void ChkPingGraph_CheckedChanged(object sender, EventArgs e) + { + if (!DcConfig.PluginEnable) + return; + + DcConfig.Duty.PingGraph = chkPingGraph.Checked; + + SaveConfig(); + } + + private void CboPingDefAddr_SelectedIndexChanged(object sender, EventArgs e) + { + if (!DcConfig.PluginEnable) + return; + + var val = cboPingDefAddr.SelectedItem as string; + + if (!string.IsNullOrEmpty(val)) + { + var ss = val.Split(' '); + if (ss.Length > 0) + { + DcConfig.Duty.PingDefAddr = ss[0].Trim(); + + SaveConfig(); + + return; + } + } + + DcConfig.Duty.PingDefAddr = string.Empty; + + SaveConfig(); + } + + // + private void PingOnce(bool check_plugin_enable = true) + { + if (!DcConfig.Duty.UsePing) + return; + + if (check_plugin_enable && !DcConfig.PluginEnable) + return; + + var conns = DcConfig.Connections.CopyConnection(); + long rtt = 0; + double loss = 0; + + if (conns.Length > 0) + { + foreach (var row in conns) + { + var (r, l) = CalcPing(row.RemoteAddress); + + if (rtt < r) + rtt = r; + + if (loss < l) + loss = l; + } + } + else + { + if (string.IsNullOrEmpty(DcConfig.Duty.PingDefAddr)) + { + Overlay.DutyOvForm.Self?.ResetStat(); + return; + } + + var defip = ThirdParty.Converter.ToIPAddressFromIPV4(DcConfig.Duty.PingDefAddr); + + if (defip == IPAddress.None || defip == IPAddress.IPv6None) + { + Overlay.DutyOvForm.Self?.ResetStat(); + return; + } + + var (r, l) = CalcPing(defip); + + if (rtt < r) + rtt = r; + + if (loss < l) + loss = l; + } + + //MesgLog.L("Ping: {0}, {1}%", rtt, loss); + + Color color; + if (loss > 0.0 || rtt > 150) + color = DcConfig.Duty.PingColors[3]; + else if (rtt > 100) + color = DcConfig.Duty.PingColors[2]; + else if (rtt > 50) + color = DcConfig.Duty.PingColors[1]; + else + color = DcConfig.Duty.PingColors[0]; + + if (_last_ping != rtt || loss > 0.0 || _color != color) + { + _last_ping = rtt; + _color = color; + + Overlay.DutyOvForm.Self?.SetStatPing(color, rtt, loss); + } + + // + if (DcConfig.Duty.PingGraph) + { + _kepts.Add((int)rtt); + if (_kepts.Count > 120) + _kepts.RemoveAt(0); + + _grpr.Enter(); + _grpr.DrawValues(_kepts); + WorkerAct.Invoker(() => _grpr.Leave()); + } + } + + // http://forum.codecall.net/topic/37643-c-packet-lossping-program/ + + private static readonly PingOptions _ping_options = new PingOptions { DontFragment = true }; + private static readonly byte[] _ping_buffers = Encoding.ASCII.GetBytes("01234567890123456789012345678901"); + private static readonly int _ping_timerout = 120; + + // + private (long Rtt, double Loss) CalcPing(IPAddress host, int amount = 6) + { + var ps = new Ping(); + + int failed = 0; + long rtt = 0; + + for (var i = 0; i < amount; i++) + { + PingReply pr = ps.Send(host, _ping_timerout, _ping_buffers, _ping_options); + + if (pr.Status != IPStatus.Success) + failed++; + + if (rtt < pr.RoundtripTime) + rtt = pr.RoundtripTime; + } + + double loss = (failed / amount) * 100; + + return (rtt, loss); + } + } +} diff --git a/Tab/PingForm.resx b/Tab/PingForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/Tab/PingForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file