</Compile>\r
<Content Include="DirectShowLib.dll" />\r
<Content Include="maestro.ico" />\r
+ <None Include="Resources\ic_stop_black_24dp_2x.png" />\r
+ <None Include="Resources\ic_play_arrow_black_24dp_2x.png" />\r
+ <None Include="Resources\ic_pause_black_24dp_2x.png" />\r
+ <None Include="Resources\ic_stop_black_24dp_1x.png" />\r
+ <None Include="Resources\ic_play_arrow_black_24dp_1x.png" />\r
+ <None Include="Resources\ic_pause_black_24dp_1x.png" />\r
<EmbeddedResource Include="StringResource.resx">\r
<Generator>ResXFileCodeGenerator</Generator>\r
<LastGenOutput>StringResource.Designer.cs</LastGenOutput>\r
\r
namespace DxPlay {\r
partial class PlayerForm : Form {\r
- private Panel panelVideo;\r
+ private Panel pVideo;\r
private Button btnPlay;\r
private Button btnPause;\r
- private Panel panel2;\r
private TextBox textCurrentTC;\r
private Button btnStop;\r
private TextBox txtStartTC;\r
this.components = new System.ComponentModel.Container();\r
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle();\r
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PlayerForm));\r
- this.panelVideo = new System.Windows.Forms.Panel();\r
- this.panel2 = new System.Windows.Forms.Panel();\r
- this.btnStop = new System.Windows.Forms.Button();\r
- this.btnPlay = new System.Windows.Forms.Button();\r
- this.btnPause = new System.Windows.Forms.Button();\r
+ this.pVideo = new System.Windows.Forms.Panel();\r
this.textCurrentTC = new System.Windows.Forms.TextBox();\r
this.txtStartTC = new System.Windows.Forms.TextBox();\r
this.txtEndTC = new System.Windows.Forms.TextBox();\r
this.panel3 = new System.Windows.Forms.Panel();\r
this.labelStatus = new System.Windows.Forms.Label();\r
+ this.trackBar1 = new DxPlay.ColorSlider();\r
this.label2 = new System.Windows.Forms.Label();\r
this.label1 = new System.Windows.Forms.Label();\r
- this.trackBar1 = new DxPlay.ColorSlider();\r
this.splitContainer1 = new System.Windows.Forms.SplitContainer();\r
this.panelPlayer = new System.Windows.Forms.Panel();\r
+ this.pControls = new System.Windows.Forms.FlowLayoutPanel();\r
+ this.btnPlay = new System.Windows.Forms.Button();\r
+ this.btnStop = new System.Windows.Forms.Button();\r
+ this.btnPause = new System.Windows.Forms.Button();\r
this.dgSegments = new System.Windows.Forms.DataGridView();\r
this.bsSegments = new System.Windows.Forms.BindingSource(this.components);\r
this.menuButtonSegmentActions = new DxPlay.MenuButton();\r
this.deleteSegmentToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\r
this.actualPositionToIntroToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\r
this.actualPositionToOutroToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\r
- this.panel2.SuspendLayout();\r
this.panel3.SuspendLayout();\r
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();\r
this.splitContainer1.Panel1.SuspendLayout();\r
this.splitContainer1.Panel2.SuspendLayout();\r
this.splitContainer1.SuspendLayout();\r
this.panelPlayer.SuspendLayout();\r
+ this.pControls.SuspendLayout();\r
((System.ComponentModel.ISupportInitialize)(this.dgSegments)).BeginInit();\r
((System.ComponentModel.ISupportInitialize)(this.bsSegments)).BeginInit();\r
this.ctxmSegmentActions.SuspendLayout();\r
this.SuspendLayout();\r
// \r
- // panelVideo\r
- // \r
- this.panelVideo.BackColor = System.Drawing.Color.Black;\r
- this.panelVideo.Dock = System.Windows.Forms.DockStyle.Fill;\r
- this.panelVideo.Location = new System.Drawing.Point(0, 0);\r
- this.panelVideo.Name = "panelVideo";\r
- this.panelVideo.Size = new System.Drawing.Size(675, 447);\r
- this.panelVideo.TabIndex = 10;\r
- this.panelVideo.TabStop = true;\r
- this.panelVideo.SizeChanged += new System.EventHandler(this.panel1_SizeChanged);\r
- this.panelVideo.MouseDown += new System.Windows.Forms.MouseEventHandler(this.panel1_MouseDown);\r
- // \r
- // panel2\r
- // \r
- this.panel2.BackColor = System.Drawing.SystemColors.Control;\r
- this.panel2.Controls.Add(this.btnStop);\r
- this.panel2.Controls.Add(this.btnPlay);\r
- this.panel2.Controls.Add(this.btnPause);\r
- this.panel2.Dock = System.Windows.Forms.DockStyle.Bottom;\r
- this.panel2.Location = new System.Drawing.Point(0, 510);\r
- this.panel2.Name = "panel2";\r
- this.panel2.Size = new System.Drawing.Size(675, 34);\r
- this.panel2.TabIndex = 14;\r
+ // pVideo\r
// \r
- // btnStop\r
- // \r
- this.btnStop.Image = global::DxPlay.Properties.Resources.Stop;\r
- this.btnStop.Location = new System.Drawing.Point(89, 3);\r
- this.btnStop.Name = "btnStop";\r
- this.btnStop.Size = new System.Drawing.Size(80, 25);\r
- this.btnStop.TabIndex = 16;\r
- this.btnStop.Text = "Stop";\r
- this.btnStop.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;\r
- this.btnStop.Click += new System.EventHandler(this.btnStop_Click);\r
- // \r
- // btnPlay\r
- // \r
- this.btnPlay.Image = global::DxPlay.Properties.Resources.Play;\r
- this.btnPlay.Location = new System.Drawing.Point(3, 3);\r
- this.btnPlay.Name = "btnPlay";\r
- this.btnPlay.Size = new System.Drawing.Size(80, 25);\r
- this.btnPlay.TabIndex = 1;\r
- this.btnPlay.Text = "Play";\r
- this.btnPlay.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;\r
- this.btnPlay.Click += new System.EventHandler(this.btnPlay_Click);\r
- // \r
- // btnPause\r
- // \r
- this.btnPause.Image = global::DxPlay.Properties.Resources.Pause;\r
- this.btnPause.Location = new System.Drawing.Point(175, 3);\r
- this.btnPause.Name = "btnPause";\r
- this.btnPause.Size = new System.Drawing.Size(80, 25);\r
- this.btnPause.TabIndex = 11;\r
- this.btnPause.Text = "Pause";\r
- this.btnPause.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;\r
- this.btnPause.Click += new System.EventHandler(this.btnPause_Click);\r
+ this.pVideo.BackColor = System.Drawing.Color.Black;\r
+ this.pVideo.Dock = System.Windows.Forms.DockStyle.Fill;\r
+ this.pVideo.Location = new System.Drawing.Point(0, 0);\r
+ this.pVideo.Name = "pVideo";\r
+ this.pVideo.Size = new System.Drawing.Size(675, 433);\r
+ this.pVideo.TabIndex = 10;\r
+ this.pVideo.TabStop = true;\r
+ this.pVideo.SizeChanged += new System.EventHandler(this.panel1_SizeChanged);\r
+ this.pVideo.MouseDown += new System.Windows.Forms.MouseEventHandler(this.panel1_MouseDown);\r
// \r
// textCurrentTC\r
// \r
- this.textCurrentTC.Anchor = System.Windows.Forms.AnchorStyles.Top;\r
+ this.textCurrentTC.Anchor = System.Windows.Forms.AnchorStyles.Bottom;\r
+ this.textCurrentTC.BackColor = System.Drawing.Color.White;\r
this.textCurrentTC.BorderStyle = System.Windows.Forms.BorderStyle.None;\r
this.textCurrentTC.Font = new System.Drawing.Font("Calibri", 16F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
- this.textCurrentTC.Location = new System.Drawing.Point(284, 13);\r
+ this.textCurrentTC.Location = new System.Drawing.Point(284, 12);\r
this.textCurrentTC.Name = "textCurrentTC";\r
this.textCurrentTC.ReadOnly = true;\r
this.textCurrentTC.Size = new System.Drawing.Size(108, 27);\r
this.textCurrentTC.TabIndex = 15;\r
+ this.textCurrentTC.TabStop = false;\r
this.textCurrentTC.Text = "00:00:00.00";\r
// \r
// txtStartTC\r
// \r
this.txtStartTC.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));\r
+ this.txtStartTC.BackColor = System.Drawing.Color.White;\r
this.txtStartTC.BorderStyle = System.Windows.Forms.BorderStyle.None;\r
this.txtStartTC.Font = new System.Drawing.Font("Calibri", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
this.txtStartTC.ForeColor = System.Drawing.SystemColors.WindowText;\r
this.txtStartTC.ReadOnly = true;\r
this.txtStartTC.Size = new System.Drawing.Size(66, 17);\r
this.txtStartTC.TabIndex = 16;\r
+ this.txtStartTC.TabStop = false;\r
this.txtStartTC.Text = "00:00:00.00";\r
// \r
// txtEndTC\r
// \r
this.txtEndTC.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));\r
+ this.txtEndTC.BackColor = System.Drawing.Color.White;\r
this.txtEndTC.BorderStyle = System.Windows.Forms.BorderStyle.None;\r
this.txtEndTC.Font = new System.Drawing.Font("Calibri", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
this.txtEndTC.ForeColor = System.Drawing.SystemColors.WindowText;\r
- this.txtEndTC.Location = new System.Drawing.Point(603, 21);\r
+ this.txtEndTC.Location = new System.Drawing.Point(605, 24);\r
this.txtEndTC.Name = "txtEndTC";\r
this.txtEndTC.ReadOnly = true;\r
this.txtEndTC.Size = new System.Drawing.Size(65, 17);\r
this.txtEndTC.TabIndex = 17;\r
+ this.txtEndTC.TabStop = false;\r
this.txtEndTC.Text = "00:00:00.00";\r
+ this.txtEndTC.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;\r
// \r
// panel3\r
// \r
this.panel3.Controls.Add(this.labelStatus);\r
+ this.panel3.Controls.Add(this.trackBar1);\r
this.panel3.Controls.Add(this.label2);\r
this.panel3.Controls.Add(this.label1);\r
this.panel3.Controls.Add(this.txtStartTC);\r
this.panel3.Controls.Add(this.txtEndTC);\r
this.panel3.Controls.Add(this.textCurrentTC);\r
this.panel3.Dock = System.Windows.Forms.DockStyle.Bottom;\r
- this.panel3.Location = new System.Drawing.Point(0, 447);\r
+ this.panel3.Location = new System.Drawing.Point(0, 433);\r
this.panel3.Name = "panel3";\r
- this.panel3.Size = new System.Drawing.Size(675, 41);\r
+ this.panel3.Size = new System.Drawing.Size(675, 51);\r
this.panel3.TabIndex = 19;\r
// \r
// labelStatus\r
// \r
- this.labelStatus.Anchor = System.Windows.Forms.AnchorStyles.Top;\r
+ this.labelStatus.Anchor = System.Windows.Forms.AnchorStyles.Bottom;\r
this.labelStatus.Font = new System.Drawing.Font("Calibri", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
- this.labelStatus.Location = new System.Drawing.Point(281, 5);\r
+ this.labelStatus.Location = new System.Drawing.Point(281, 4);\r
this.labelStatus.Name = "labelStatus";\r
this.labelStatus.Size = new System.Drawing.Size(111, 13);\r
this.labelStatus.TabIndex = 20;\r
this.labelStatus.Text = "NO INPUT";\r
this.labelStatus.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;\r
// \r
- // label2\r
- // \r
- this.label2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));\r
- this.label2.AutoSize = true;\r
- this.label2.Font = new System.Drawing.Font("Calibri", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
- this.label2.Location = new System.Drawing.Point(618, 5);\r
- this.label2.Name = "label2";\r
- this.label2.Size = new System.Drawing.Size(54, 13);\r
- this.label2.TabIndex = 19;\r
- this.label2.Text = "DURATION";\r
- // \r
- // label1\r
- // \r
- this.label1.AutoSize = true;\r
- this.label1.Font = new System.Drawing.Font("Calibri", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
- this.label1.Location = new System.Drawing.Point(4, 6);\r
- this.label1.Name = "label1";\r
- this.label1.Size = new System.Drawing.Size(33, 13);\r
- this.label1.TabIndex = 18;\r
- this.label1.Text = "START";\r
- // \r
// trackBar1\r
// \r
this.trackBar1.BackColor = System.Drawing.Color.Transparent;\r
this.trackBar1.ElapsedInnerColor = System.Drawing.Color.Black;\r
this.trackBar1.ElapsedOuterColor = System.Drawing.Color.DarkGray;\r
this.trackBar1.LargeChange = ((uint)(0u));\r
- this.trackBar1.Location = new System.Drawing.Point(0, 488);\r
+ this.trackBar1.Location = new System.Drawing.Point(0, 41);\r
this.trackBar1.Maximum = 1;\r
this.trackBar1.Name = "trackBar1";\r
- this.trackBar1.Size = new System.Drawing.Size(675, 22);\r
+ this.trackBar1.Size = new System.Drawing.Size(675, 10);\r
this.trackBar1.SmallChange = ((uint)(1u));\r
this.trackBar1.TabIndex = 18;\r
this.trackBar1.Text = "colorSlider1";\r
this.trackBar1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.trackBar1_MouseDown);\r
this.trackBar1.MouseUp += new System.Windows.Forms.MouseEventHandler(this.trackBar1_MouseUp);\r
// \r
+ // label2\r
+ // \r
+ this.label2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));\r
+ this.label2.Font = new System.Drawing.Font("Calibri", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+ this.label2.Location = new System.Drawing.Point(605, 5);\r
+ this.label2.Name = "label2";\r
+ this.label2.Size = new System.Drawing.Size(68, 13);\r
+ this.label2.TabIndex = 19;\r
+ this.label2.Text = "DURATION";\r
+ this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleRight;\r
+ // \r
+ // label1\r
+ // \r
+ this.label1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));\r
+ this.label1.Font = new System.Drawing.Font("Calibri", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+ this.label1.Location = new System.Drawing.Point(3, 5);\r
+ this.label1.Name = "label1";\r
+ this.label1.Size = new System.Drawing.Size(69, 13);\r
+ this.label1.TabIndex = 18;\r
+ this.label1.Text = "START";\r
+ this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;\r
+ // \r
// splitContainer1\r
// \r
this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;\r
// \r
// panelPlayer\r
// \r
- this.panelPlayer.Controls.Add(this.panelVideo);\r
+ this.panelPlayer.Controls.Add(this.pVideo);\r
this.panelPlayer.Controls.Add(this.panel3);\r
- this.panelPlayer.Controls.Add(this.trackBar1);\r
- this.panelPlayer.Controls.Add(this.panel2);\r
+ this.panelPlayer.Controls.Add(this.pControls);\r
this.panelPlayer.Dock = System.Windows.Forms.DockStyle.Fill;\r
this.panelPlayer.Location = new System.Drawing.Point(0, 0);\r
this.panelPlayer.Name = "panelPlayer";\r
this.panelPlayer.Size = new System.Drawing.Size(675, 544);\r
this.panelPlayer.TabIndex = 0;\r
// \r
+ // pControls\r
+ // \r
+ this.pControls.AutoSize = true;\r
+ this.pControls.Controls.Add(this.btnPlay);\r
+ this.pControls.Controls.Add(this.btnStop);\r
+ this.pControls.Controls.Add(this.btnPause);\r
+ this.pControls.Dock = System.Windows.Forms.DockStyle.Bottom;\r
+ this.pControls.Location = new System.Drawing.Point(0, 484);\r
+ this.pControls.Name = "pControls";\r
+ this.pControls.Size = new System.Drawing.Size(675, 60);\r
+ this.pControls.TabIndex = 20;\r
+ // \r
+ // btnPlay\r
+ // \r
+ this.btnPlay.AutoSize = true;\r
+ this.btnPlay.BackColor = System.Drawing.Color.White;\r
+ this.btnPlay.FlatAppearance.BorderSize = 0;\r
+ this.btnPlay.Image = global::DxPlay.Properties.Resources.ic_play_arrow_black_24dp_2x;\r
+ this.btnPlay.Location = new System.Drawing.Point(3, 3);\r
+ this.btnPlay.Name = "btnPlay";\r
+ this.btnPlay.Size = new System.Drawing.Size(54, 54);\r
+ this.btnPlay.TabIndex = 1;\r
+ this.btnPlay.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;\r
+ this.btnPlay.UseVisualStyleBackColor = false;\r
+ this.btnPlay.Click += new System.EventHandler(this.btnPlay_Click);\r
+ // \r
+ // btnStop\r
+ // \r
+ this.btnStop.AutoSize = true;\r
+ this.btnStop.BackColor = System.Drawing.Color.White;\r
+ this.btnStop.FlatAppearance.BorderSize = 0;\r
+ this.btnStop.FlatStyle = System.Windows.Forms.FlatStyle.Popup;\r
+ this.btnStop.Image = global::DxPlay.Properties.Resources.ic_stop_black_24dp_2x;\r
+ this.btnStop.Location = new System.Drawing.Point(63, 3);\r
+ this.btnStop.Name = "btnStop";\r
+ this.btnStop.Size = new System.Drawing.Size(54, 54);\r
+ this.btnStop.TabIndex = 16;\r
+ this.btnStop.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;\r
+ this.btnStop.UseVisualStyleBackColor = false;\r
+ this.btnStop.Click += new System.EventHandler(this.btnStop_Click);\r
+ // \r
+ // btnPause\r
+ // \r
+ this.btnPause.AutoSize = true;\r
+ this.btnPause.BackColor = System.Drawing.Color.White;\r
+ this.btnPause.FlatAppearance.BorderSize = 0;\r
+ this.btnPause.FlatStyle = System.Windows.Forms.FlatStyle.Popup;\r
+ this.btnPause.Image = global::DxPlay.Properties.Resources.ic_pause_black_24dp_2x;\r
+ this.btnPause.Location = new System.Drawing.Point(123, 3);\r
+ this.btnPause.Name = "btnPause";\r
+ this.btnPause.Size = new System.Drawing.Size(54, 54);\r
+ this.btnPause.TabIndex = 11;\r
+ this.btnPause.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;\r
+ this.btnPause.UseVisualStyleBackColor = false;\r
+ this.btnPause.Click += new System.EventHandler(this.btnPause_Click);\r
+ // \r
// dgSegments\r
// \r
this.dgSegments.AllowUserToAddRows = false;\r
// \r
this.AllowDrop = true;\r
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);\r
+ this.BackColor = System.Drawing.Color.White;\r
this.ClientSize = new System.Drawing.Size(936, 544);\r
this.Controls.Add(this.splitContainer1);\r
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));\r
this.DragEnter += new System.Windows.Forms.DragEventHandler(this.Form1_DragEnter);\r
this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.PlayerForm_KeyDown);\r
this.PreviewKeyDown += new System.Windows.Forms.PreviewKeyDownEventHandler(this.PlayerForm_PreviewKeyDown);\r
- this.panel2.ResumeLayout(false);\r
this.panel3.ResumeLayout(false);\r
this.panel3.PerformLayout();\r
this.splitContainer1.Panel1.ResumeLayout(false);\r
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();\r
this.splitContainer1.ResumeLayout(false);\r
this.panelPlayer.ResumeLayout(false);\r
+ this.panelPlayer.PerformLayout();\r
+ this.pControls.ResumeLayout(false);\r
+ this.pControls.PerformLayout();\r
((System.ComponentModel.ISupportInitialize)(this.dgSegments)).EndInit();\r
((System.ComponentModel.ISupportInitialize)(this.bsSegments)).EndInit();\r
this.ctxmSegmentActions.ResumeLayout(false);\r
private ToolStripMenuItem deleteSegmentToolStripMenuItem;\r
private ToolStripMenuItem actualPositionToIntroToolStripMenuItem;\r
private ToolStripMenuItem actualPositionToOutroToolStripMenuItem;\r
+ private FlowLayoutPanel pControls;\r
}\r
}\r
\r
deleteSegmentToolStripMenuItem.Text = StringResource.SZEGMENS_TORLESE;\r
menuButtonSegmentActions.Text = StringResource.SZEGMENSEK;\r
\r
- btnPause.Text = StringResource.SZUNET;\r
- btnPlay.Text = StringResource.LEJATSZAS;\r
- btnStop.Text = StringResource.LEALLITAS;\r
+ //btnPause.Text = StringResource.SZUNET;\r
+ //btnPlay.Text = StringResource.LEJATSZAS;\r
+ //btnStop.Text = StringResource.LEALLITAS;\r
labelStatus.Text = StringResource.NINCS_BEMENET;\r
label1.Text = StringResource.INDULASI_PONT;\r
label2.Text = StringResource.HOSSZ;\r
\r
trackBar1.Value = 0;\r
trackBar1.Minimum = 0;\r
- m_play = new DxPlayer(panelVideo, ref m_mediaDescription);\r
+ m_play = new DxPlayer(pVideo, ref m_mediaDescription);\r
if (m_play.IsError)\r
throw new Exception(selectedFile); \r
\r
\r
private void panel1_SizeChanged(object sender, EventArgs e) {\r
if (m_play != null)\r
- m_play.UpdateVideoWindow(panelVideo);\r
+ m_play.UpdateVideoWindow(pVideo);\r
}\r
\r
private void trackBar1_MouseDown(object sender, MouseEventArgs e) {\r
}\r
}\r
\r
+ /// <summary>\r
+ /// Looks up a localized resource of type System.Drawing.Bitmap.\r
+ /// </summary>\r
+ public static System.Drawing.Bitmap ic_pause_black_24dp_1x {\r
+ get {\r
+ object obj = ResourceManager.GetObject("ic_pause_black_24dp_1x", resourceCulture);\r
+ return ((System.Drawing.Bitmap)(obj));\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Looks up a localized resource of type System.Drawing.Bitmap.\r
+ /// </summary>\r
+ public static System.Drawing.Bitmap ic_pause_black_24dp_2x {\r
+ get {\r
+ object obj = ResourceManager.GetObject("ic_pause_black_24dp_2x", resourceCulture);\r
+ return ((System.Drawing.Bitmap)(obj));\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Looks up a localized resource of type System.Drawing.Bitmap.\r
+ /// </summary>\r
+ public static System.Drawing.Bitmap ic_play_arrow_black_24dp_1x {\r
+ get {\r
+ object obj = ResourceManager.GetObject("ic_play_arrow_black_24dp_1x", resourceCulture);\r
+ return ((System.Drawing.Bitmap)(obj));\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Looks up a localized resource of type System.Drawing.Bitmap.\r
+ /// </summary>\r
+ public static System.Drawing.Bitmap ic_play_arrow_black_24dp_2x {\r
+ get {\r
+ object obj = ResourceManager.GetObject("ic_play_arrow_black_24dp_2x", resourceCulture);\r
+ return ((System.Drawing.Bitmap)(obj));\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Looks up a localized resource of type System.Drawing.Bitmap.\r
+ /// </summary>\r
+ public static System.Drawing.Bitmap ic_stop_black_24dp_1x {\r
+ get {\r
+ object obj = ResourceManager.GetObject("ic_stop_black_24dp_1x", resourceCulture);\r
+ return ((System.Drawing.Bitmap)(obj));\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Looks up a localized resource of type System.Drawing.Bitmap.\r
+ /// </summary>\r
+ public static System.Drawing.Bitmap ic_stop_black_24dp_2x {\r
+ get {\r
+ object obj = ResourceManager.GetObject("ic_stop_black_24dp_2x", resourceCulture);\r
+ return ((System.Drawing.Bitmap)(obj));\r
+ }\r
+ }\r
+ \r
/// <summary>\r
/// Looks up a localized resource of type System.Drawing.Bitmap.\r
/// </summary>\r
<data name="Stop" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
<value>..\Resources\Stop.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
</data>\r
+ <data name="ic_pause_black_24dp_1x" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
+ <value>..\Resources\ic_pause_black_24dp_1x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
+ </data>\r
+ <data name="ic_pause_black_24dp_2x" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
+ <value>..\Resources\ic_pause_black_24dp_2x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
+ </data>\r
+ <data name="ic_play_arrow_black_24dp_1x" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
+ <value>..\Resources\ic_play_arrow_black_24dp_1x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
+ </data>\r
+ <data name="ic_play_arrow_black_24dp_2x" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
+ <value>..\Resources\ic_play_arrow_black_24dp_2x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
+ </data>\r
+ <data name="ic_stop_black_24dp_1x" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
+ <value>..\Resources\ic_stop_black_24dp_1x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
+ </data>\r
+ <data name="ic_stop_black_24dp_2x" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
+ <value>..\Resources\ic_stop_black_24dp_2x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
+ </data>\r
</root>
\ No newline at end of file
}\r
\r
/// <summary>\r
- /// Looks up a localized string similar to Indulási pont.\r
+ /// Looks up a localized string similar to Kezdés.\r
/// </summary>\r
internal static string INDULASI_PONT {\r
get {\r
<value>Indítás</value>\r
</data>\r
<data name="INDULASI_PONT" xml:space="preserve">\r
- <value>Indulási pont</value>\r
+ <value>Kezdés</value>\r
</data>\r
<data name="KILEPES" xml:space="preserve">\r
<value>Kilépés</value>\r
<Reference Include="MongoDB.Driver.Core, Version=2.4.4.0, Culture=neutral, processorArchitecture=MSIL">\r
<HintPath>..\packages\MongoDB.Driver.Core.2.4.4\lib\net45\MongoDB.Driver.Core.dll</HintPath>\r
</Reference>\r
+ <Reference Include="mysql.data, Version=5.2.7.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d, processorArchitecture=MSIL">\r
+ <SpecificVersion>False</SpecificVersion>\r
+ <HintPath>lib\mysql.data.dll</HintPath>\r
+ </Reference>\r
<Reference Include="Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">\r
<HintPath>..\packages\Newtonsoft.Json.10.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>\r
</Reference>\r
<HintPath>..\packages\System.Console.4.3.0\lib\net46\System.Console.dll</HintPath>\r
</Reference>\r
<Reference Include="System.Core" />\r
+ <Reference Include="System.Data" />\r
<Reference Include="System.Net.NameResolution, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">\r
<HintPath>..\packages\System.Net.NameResolution.4.3.0\lib\net46\System.Net.NameResolution.dll</HintPath>\r
</Reference>\r
<ItemGroup>\r
<WCFMetadata Include="Connected Services\" />\r
</ItemGroup>\r
+ <ItemGroup>\r
+ <Content Include="lib\mysql.data.dll" />\r
+ </ItemGroup>\r
<Import Project="$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets" Condition="Exists('$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets')" />\r
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />\r
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">\r
using BethesdaConsentFormWCFSvc;\r
using System.IO;\r
using System.Text.RegularExpressions;\r
+using MySql.Data.MySqlClient;\r
+using System.Text;\r
\r
namespace IntegrationTests {\r
public sealed class SafeTokenHandle : SafeHandleZeroOrMinusOneIsInvalid {\r
string[] files = Directory.GetFiles("\\\\10.10.1.100\\BRAAVOS\\Archive");\r
}\r
\r
+ [TestMethod]\r
+ public void TestMySQL() {\r
+ string server = "192.168.3.10";\r
+ string database = "echotv";\r
+ string uid = "vasary";\r
+ string password = "vasarydani";\r
+ string connectionString = "SERVER=" + server + ";" + "DATABASE=" +\r
+ database + ";" + "UID=" + uid + ";" + "PASSWORD=" + password + ";Convert Zero Datetime=true;";\r
+\r
+ \r
+ MySqlConnection connection = new MySqlConnection(connectionString);\r
+ try {\r
+ connection.Open();\r
+ //Query(connection, "SHOW TABLES;");\r
+ Query(connection, "SELECT * FROM archive_records;");\r
+ connection.Close();\r
+ }\r
+ catch (MySqlException ex) {\r
+ Debug.WriteLine(ex.Message);\r
+ }\r
+ }\r
+\r
\r
+ private void Query(MySqlConnection connection, string sql) {\r
+ MySqlCommand command = connection.CreateCommand();\r
+ command.CommandText = sql;\r
+ MySqlDataReader Reader = command.ExecuteReader();\r
+ StringBuilder sb = new StringBuilder();\r
+ while (Reader.Read()) {\r
+ for (int i = 0; i < Reader.FieldCount; i++) {\r
+ if (Reader.IsDBNull(i))\r
+ sb.Append("null, ");\r
+ else\r
+ sb.Append(Reader.GetValue(i).ToString() + ", ");\r
+ }\r
+\r
+ Debug.WriteLine(sb.ToString());\r
+ sb.Clear();\r
+ }\r
+ }\r
}\r
-}
\ No newline at end of file
+ }
\ No newline at end of file
using DxPlay;\r
+using Maestro.Metadata;\r
using System;\r
using System.Collections.Generic;\r
using System.Globalization;\r
<Material_Id>XMLTEST011</Material_Id>\r
<Title>Teszt Mozi</Title>\r
<On_Air_Duration>00000914</On_Air_Duration>\r
+ <Material_Type>PROGRAMME</Material_Type> //PROGRAMME, COMMERCIAL, JUNCTION\r
</Item>\r
<Instance>\r
<Device_Id>ISILON</Device_Id>\r
return tc?.Replace(":", "").Replace(".", "");\r
}\r
\r
- public static byte[] ToXML(string title, string fileName, string deviceID, List<MovieSegment> segments) {\r
+ public static byte[] ToXML(string title, string fileName, string deviceID, string type, List<MovieSegment> segments) {\r
+ if (String.IsNullOrEmpty(title))\r
+ throw new NullReferenceException("Hiányzik a cél állomány címe.");\r
+ if (String.IsNullOrEmpty(fileName))\r
+ throw new NullReferenceException("Hiányzik a cél állomány neve.");\r
+ if (String.IsNullOrEmpty(deviceID))\r
+ throw new NullReferenceException("Hiányzik a cél állomány eszköz leírója.");\r
+\r
+ byte[] result = null;\r
+ XmlDocument doc = new XmlDocument();\r
+ XmlElement rootElement = (XmlElement)doc.AppendChild(doc.CreateElement("ImportItems"));\r
+\r
+\r
+ Timecode duration = new Timecode();\r
+ Timecode tcIn = segments[0].TCIn;\r
+ Timecode tcOut = segments[segments.Count - 1].TCOut;\r
+ duration.Set(tcOut.Frames - tcIn.Frames);\r
+ XmlNode importItemNode = rootElement.AppendChild(doc.CreateElement("ImportItem"));\r
+ XmlElement itemElement = doc.CreateElement("Item");\r
+ importItemNode.AppendChild(itemElement);\r
+ itemElement.AppendChild(doc.CreateElement("Material_Id")).InnerText = fileName;\r
+ itemElement.AppendChild(doc.CreateElement("Title")).InnerText = title;\r
+ itemElement.AppendChild(doc.CreateElement("On_Air_Duration")).InnerText = FlattenTC(duration.ToString());\r
+ itemElement.AppendChild(doc.CreateElement("Material_Type")).InnerText = type;\r
+\r
+ XmlElement instanceElement = doc.CreateElement("Instance");\r
+ importItemNode.AppendChild(instanceElement);\r
+ instanceElement.AppendChild(doc.CreateElement("Long_File_Id")).InnerText = fileName;\r
+ instanceElement.AppendChild(doc.CreateElement("Device_Id")).InnerText = deviceID;\r
+ instanceElement.AppendChild(doc.CreateElement("Quality_Check")).InnerText = DateTime.Now.ToString("dd/MM/yyyy", CultureInfo.InvariantCulture);\r
+ instanceElement.AppendChild(doc.CreateElement("Timecode_In")).InnerText = FlattenTC(tcIn.ToString());\r
+ instanceElement.AppendChild(doc.CreateElement("Timecode_Out")).InnerText = FlattenTC(tcOut.ToString());\r
+\r
+ UTF8Encoding encoding = new UTF8Encoding(false, true);\r
+ using (MemoryStream output = new MemoryStream()) {\r
+ using (XmlTextWriter writer = new XmlTextWriter(output, encoding)) {\r
+ writer.Formatting = Formatting.Indented;\r
+ writer.WriteStartDocument();\r
+ doc.Save(writer);\r
+ }\r
+ result = output.ToArray();\r
+ }\r
+ return result;\r
+ }\r
+\r
+ public static byte[] ToXMLMultiSegments(string title, string fileName, string deviceID, string type, List<MovieSegment> segments) {\r
if (String.IsNullOrEmpty(title))\r
throw new NullReferenceException("Hiányzik a cél állomány címe.");\r
if (String.IsNullOrEmpty(fileName))\r
itemElement.AppendChild(doc.CreateElement("Material_Id")).InnerText = fileName;\r
itemElement.AppendChild(doc.CreateElement("Title")).InnerText = title;\r
itemElement.AppendChild(doc.CreateElement("On_Air_Duration")).InnerText = FlattenTC(duration.ToString());\r
+ itemElement.AppendChild(doc.CreateElement("Material_Type")).InnerText = type;\r
+\r
XmlElement instanceElement = doc.CreateElement("Instance");\r
importItemNode.AppendChild(instanceElement);\r
instanceElement.AppendChild(doc.CreateElement("Long_File_Id")).InnerText = fileName;\r
}\r
return result;\r
}\r
+\r
}\r
\r
}
\ No newline at end of file
--- /dev/null
+using Microsoft.Win32.SafeHandles;\r
+using System;\r
+using System.Diagnostics;\r
+using System.DirectoryServices.AccountManagement;\r
+using System.Runtime.ConstrainedExecution;\r
+using System.Runtime.InteropServices;\r
+using System.Security;\r
+using System.Security.Permissions;\r
+using System.Security.Principal;\r
+\r
+namespace Maestro.Commons {\r
+\r
+ class WindowsIdentityManager {\r
+\r
+ [DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Unicode)]\r
+ public static extern bool LogonUser(String lpszUsername, String lpszDomain, String lpszPassword,\r
+ int dwLogonType, int dwLogonProvider, out SafeTokenHandle phToken);\r
+\r
+ [DllImport("kernel32.dll", CharSet = CharSet.Auto)]\r
+ public extern static bool CloseHandle(IntPtr handle);\r
+\r
+ public sealed class SafeTokenHandle : SafeHandleZeroOrMinusOneIsInvalid {\r
+ private SafeTokenHandle()\r
+ : base(true) {\r
+ }\r
+\r
+ [DllImport("kernel32.dll")]\r
+ [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]\r
+ [SuppressUnmanagedCodeSecurity]\r
+ [return: MarshalAs(UnmanagedType.Bool)]\r
+ private static extern bool CloseHandle(IntPtr handle);\r
+\r
+ protected override bool ReleaseHandle() {\r
+ return CloseHandle(handle);\r
+ }\r
+ }\r
+\r
+ [PermissionSetAttribute(SecurityAction.Demand, Name = "FullTrust")]\r
+ public static void DoLogin(string domainName, string userName, string password) {\r
+ SafeTokenHandle safeTokenHandle;\r
+ const int LOGON32_PROVIDER_DEFAULT = 0;\r
+ const int LOGON32_PROVIDER_WINNT35 = 1;\r
+ const int LOGON32_PROVIDER_WINNT40 = 2;\r
+ const int LOGON32_PROVIDER_WINNT50 = 3;\r
+ const int LOGON32_LOGON_INTERACTIVE = 2;\r
+ const int LOGON32_LOGON_NETWORK = 3;\r
+ const int LOGON_TYPE_NEW_CREDENTIALS = 9;\r
+\r
+ // Call LogonUser to obtain a handle to an access token.\r
+ bool returnValue = LogonUser(userName, domainName, password, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, out safeTokenHandle);\r
+\r
+ if (!returnValue) {\r
+ int ret = Marshal.GetLastWin32Error();\r
+ Debug.WriteLine("LogonUser failed with error code : {0}", ret);\r
+ throw new Exception("Windows bejelentkezési hiba. Kód: " + ret);\r
+ }\r
+\r
+ using (safeTokenHandle) {\r
+ Debug.WriteLine("Before impersonation: " + WindowsIdentity.GetCurrent().Name);\r
+ // Use the token handle returned by LogonUser.\r
+ using (WindowsIdentity newId = new WindowsIdentity(safeTokenHandle.DangerousGetHandle())) {\r
+ using (WindowsImpersonationContext impersonatedUser = newId.Impersonate()) {\r
+\r
+ // Check the identity.\r
+ Debug.WriteLine("After impersonation: " + WindowsIdentity.GetCurrent().Name);\r
+ }\r
+ }\r
+ // Releasing the context object stops the impersonation\r
+ // Check the identity.\r
+ Debug.WriteLine("After closing the context: " + WindowsIdentity.GetCurrent().Name);\r
+ }\r
+\r
+ }\r
+\r
+ static void Test(string[] args) {\r
+ // Retrieve the Windows account token for the current user.\r
+ IntPtr logonToken = LogonUser();\r
+\r
+ // Constructor implementations.\r
+ IntPtrConstructor(logonToken);\r
+ IntPtrStringConstructor(logonToken);\r
+ IntPtrStringTypeConstructor(logonToken);\r
+ IntPrtStringTypeBoolConstructor(logonToken);\r
+\r
+ // Property implementations.\r
+ UseProperties(logonToken);\r
+\r
+ // Method implementations.\r
+ GetAnonymousUser();\r
+ ImpersonateIdentity(logonToken);\r
+\r
+ Debug.WriteLine("This sample completed successfully; " +\r
+ "press Enter to exit.");\r
+ Console.ReadLine();\r
+ }\r
+\r
+ // Create a WindowsIdentity object for the user represented by the\r
+ // specified Windows account token.\r
+ private static void IntPtrConstructor(IntPtr logonToken) {\r
+ // Construct a WindowsIdentity object using the input account token.\r
+ WindowsIdentity windowsIdentity = new WindowsIdentity(logonToken);\r
+\r
+ Debug.WriteLine("Created a Windows identity object named " +\r
+ windowsIdentity.Name + ".");\r
+ }\r
+\r
+\r
+ // Create a WindowsIdentity object for the user represented by the\r
+ // specified account token and authentication type.\r
+ private static void IntPtrStringConstructor(IntPtr logonToken) {\r
+ // Construct a WindowsIdentity object using the input account token \r
+ // and the specified authentication type.\r
+ string authenticationType = "WindowsAuthentication";\r
+ WindowsIdentity windowsIdentity =\r
+ new WindowsIdentity(logonToken, authenticationType);\r
+\r
+ Debug.WriteLine("Created a Windows identity object named " +\r
+ windowsIdentity.Name + ".");\r
+ }\r
+\r
+ // Create a WindowsIdentity object for the user represented by the\r
+ // specified account token, authentication type, and Windows account\r
+ // type.\r
+ private static void IntPtrStringTypeConstructor(IntPtr logonToken) {\r
+ // Construct a WindowsIdentity object using the input account token,\r
+ // and the specified authentication type, and Windows account type.\r
+ string authenticationType = "WindowsAuthentication";\r
+ WindowsAccountType guestAccount = WindowsAccountType.Guest;\r
+ WindowsIdentity windowsIdentity =\r
+ new WindowsIdentity(logonToken, authenticationType, guestAccount);\r
+\r
+ Debug.WriteLine("Created a Windows identity object named " +\r
+ windowsIdentity.Name + ".");\r
+ }\r
+\r
+ // Create a WindowsIdentity object for the user represented by the\r
+ // specified account token, authentication type, Windows account type, and\r
+ // Boolean authentication flag.\r
+ private static void IntPrtStringTypeBoolConstructor(IntPtr logonToken) {\r
+ // Construct a WindowsIdentity object using the input account token,\r
+ // and the specified authentication type, Windows account type, and\r
+ // authentication flag.\r
+ string authenticationType = "WindowsAuthentication";\r
+ WindowsAccountType guestAccount = WindowsAccountType.Guest;\r
+ bool isAuthenticated = true;\r
+ WindowsIdentity windowsIdentity = new WindowsIdentity(\r
+ logonToken, authenticationType, guestAccount, isAuthenticated);\r
+\r
+ Debug.WriteLine("Created a Windows identity object named " +\r
+ windowsIdentity.Name + ".");\r
+ }\r
+ // Access the properties of a WindowsIdentity object.\r
+ private static void UseProperties(IntPtr logonToken) {\r
+ WindowsIdentity windowsIdentity = new WindowsIdentity(logonToken);\r
+ string propertyDescription = "The Windows identity named ";\r
+\r
+ // Retrieve the Windows logon name from the Windows identity object.\r
+ propertyDescription += windowsIdentity.Name;\r
+\r
+ // Verify that the user account is not considered to be an Anonymous\r
+ // account by the system.\r
+ if (!windowsIdentity.IsAnonymous) {\r
+ propertyDescription += " is not an Anonymous account";\r
+ }\r
+\r
+ // Verify that the user account has been authenticated by Windows.\r
+ if (windowsIdentity.IsAuthenticated) {\r
+ propertyDescription += ", is authenticated";\r
+ }\r
+\r
+ // Verify that the user account is considered to be a System account\r
+ // by the system.\r
+ if (windowsIdentity.IsSystem) {\r
+ propertyDescription += ", is a System account";\r
+ }\r
+ // Verify that the user account is considered to be a Guest account\r
+ // by the system.\r
+ if (windowsIdentity.IsGuest) {\r
+ propertyDescription += ", is a Guest account";\r
+ }\r
+\r
+ // Retrieve the authentication type for the \r
+ String authenticationType = windowsIdentity.AuthenticationType;\r
+\r
+ // Append the authenication type to the output message.\r
+ if (authenticationType != null) {\r
+ propertyDescription += (" and uses " + authenticationType);\r
+ propertyDescription += (" authentication type.");\r
+ }\r
+\r
+ Debug.WriteLine(propertyDescription);\r
+\r
+ // Display the SID for the owner.\r
+ Console.Write("The SID for the owner is : ");\r
+ SecurityIdentifier si = windowsIdentity.Owner;\r
+ Debug.WriteLine(si.ToString());\r
+ // Display the SIDs for the groups the current user belongs to.\r
+ Debug.WriteLine("Display the SIDs for the groups the current user belongs to.");\r
+ IdentityReferenceCollection irc = windowsIdentity.Groups;\r
+ foreach (IdentityReference ir in irc)\r
+ Debug.WriteLine(ir.Value);\r
+ TokenImpersonationLevel token = windowsIdentity.ImpersonationLevel;\r
+ Debug.WriteLine("The impersonation level for the current user is : " + token.ToString());\r
+ }\r
+\r
+ // Retrieve the account token from the current WindowsIdentity object\r
+ // instead of calling the unmanaged LogonUser method in the advapi32.dll.\r
+ public static IntPtr LogonUser() {\r
+ IntPtr accountToken = WindowsIdentity.GetCurrent().Token;\r
+ Debug.WriteLine("Token number is: " + accountToken.ToString());\r
+ return accountToken;\r
+ }\r
+\r
+ // Get the WindowsIdentity object for an Anonymous user.\r
+ private static void GetAnonymousUser() {\r
+ // Retrieve a WindowsIdentity object that represents an anonymous\r
+ // Windows user.\r
+ WindowsIdentity windowsIdentity = WindowsIdentity.GetAnonymous();\r
+ }\r
+\r
+ // Impersonate a Windows identity.\r
+ public static WindowsImpersonationContext ImpersonateIdentity() {\r
+ IntPtr logonToken = LogonUser();\r
+ return ImpersonateIdentity(logonToken);\r
+ }\r
+\r
+ private static WindowsImpersonationContext ImpersonateIdentity(IntPtr logonToken) {\r
+ // Retrieve the Windows identity using the specified token.\r
+ WindowsIdentity windowsIdentity = new WindowsIdentity(logonToken);\r
+\r
+ // Create a WindowsImpersonationContext object by impersonating the\r
+ // Windows identity.\r
+ WindowsImpersonationContext impersonationContext =\r
+ windowsIdentity.Impersonate();\r
+\r
+ Debug.WriteLine("Name of the identity after impersonation: " + WindowsIdentity.GetCurrent().Name + ".");\r
+ Debug.WriteLine(windowsIdentity.ImpersonationLevel);\r
+ // Stop impersonating the user.\r
+ //impersonationContext.Undo();\r
+\r
+ // Check the identity name.\r
+ //Console.Write("Name of the identity after performing an Undo on the");\r
+ //Debug.WriteLine(" impersonation: " +\r
+ // WindowsIdentity.GetCurrent().Name);\r
+\r
+ return impersonationContext;\r
+ }\r
+ }\r
+}\r
}\r
\r
public class GlobalInfo {\r
- public string UserDomain { get; set; }\r
+ public Connection UserDomain { get; set; }\r
}\r
\r
public class ConfigurationInfo {\r
public int KillDateDays { get; set; }\r
public Connection Remote { get; set; }\r
public bool SaveSegments { get; set; }\r
- public bool CreateSubFolder { get; set; }\r
+ public string SubFolderFormat { get; set; }\r
public string Tag { get; set; }\r
public bool SaveArchiveMetadata { get; set; }\r
public bool SaveMorpheusMetadata { get; set; }\r
"processor": "FTPTargetProcessor",\r
"outputFormat": "%ID%-%SOURCENAME%",\r
"tag": "Betöltés",\r
- "createSubFolder": true,\r
+ "subFolderFormat": "%IDROOT%",\r
"killDateDays": 7,\r
"saveArchiveMetadata": false,\r
"remote": {\r
"processor": "FTPTargetProcessor",\r
"outputFormat": "%ID%-%SOURCENAME%",\r
"tag": "Betöltés",\r
- "createSubFolder": true,\r
+ "subFolderFormat": "%IDROOT%",\r
"killDateDays": 7,\r
"saveArchiveMetadata": false,\r
"remote": {\r
"processor": "FTPTargetProcessor",\r
"outputFormat": "%ID%-%SOURCENAME%",\r
"tag": "Betöltés",\r
- "createSubFolder": true,\r
+ "subFolderFormat": "%IDROOT%",\r
"killDateDays": 7,\r
"saveArchiveMetadata": false,\r
"remote": {\r
"processor": "FTPTargetProcessor",\r
"outputFormat": "%ID%-%SOURCENAME%",\r
"tag": "Betöltés",\r
- "createSubFolder": true,\r
+ "subFolderFormat": "%IDROOT%",\r
"killDateDays": 7,\r
"saveArchiveMetadata": false,\r
"remote": {\r
"processor": "FXPTargetProcessor",\r
"outputFormat": "%ID%",\r
"tag": "Újravágás",\r
- "createSubFolder": true,\r
+ "subFolderFormat": "%IDROOT%",\r
"remote": {\r
"address": "ftp://10.10.1.100/PLAYOUT_NLE",\r
"userName": "mediacube",\r
{\r
"title": "SxS",\r
- "active": false,\r
+ "active": true,\r
"startInTray": false,\r
"enableCustomMetadataId": true,\r
"player": {\r
"$type": "UNCSource",\r
"filter": "avi,wav,mxf",\r
"local": {\r
- "address": "file://e:/XDROOT/Clip"\r
+ "address": "file://c:/x"\r
}\r
},\r
"metadatas": [\r
"targets": [\r
{\r
"label": "Hír nyersanyag betöltés",\r
- "processor": "UNCTargetProcessor",\r
+ "processor": "FTPTargetProcessor",\r
"outputFormat": "%ID%-%SOURCENAME%",\r
"tag": "Betöltés",\r
- "createSubFolder": true,\r
+ "subFolderFormat": "%IDROOT%%TEXT%",\r
"killDateDays": 7,\r
"saveArchiveMetadata": false,\r
"remote": {\r
- "address": "file://10.10.1.100/BRAAVOS/OCTOPUS",\r
+ "address": "ftp://10.10.1.100/OCTOPUS",\r
"userName": "mediacube",\r
"password": "Dn8t4gfHcK98o8hyPgLDhr5SgSji4JCxsfpMJsODikUp3nXgrM0UNCi45lLAK8ZOnmEneO44P9qpJ4QDqhctN6MxZodjJgdZTyoZKmSa+ECzEzLr/wPYNgxVaXrVotEy",\r
"timeout": 1000\r
},\r
{\r
"label": "Magazin nyersanyag betöltés",\r
- "processor": "UNCTargetProcessor",\r
+ "processor": "FTPTargetProcessor",\r
"outputFormat": "%ID%-%SOURCENAME%",\r
"tag": "Betöltés",\r
- "createSubFolder": true,\r
+ "subFolderFormat": "%IDROOT%",\r
"killDateDays": 7,\r
"saveArchiveMetadata": false,\r
"remote": {\r
- "address": "file://10.10.1.100/BRAAVOS/PLAYOUT_NLE",\r
+ "address": "ftp://10.10.1.100/PLAYOUT_NLE",\r
"userName": "mediacube",\r
"password": "Dn8t4gfHcK98o8hyPgLDhr5SgSji4JCxsfpMJsODikUp3nXgrM0UNCi45lLAK8ZOnmEneO44P9qpJ4QDqhctN6MxZodjJgdZTyoZKmSa+ECzEzLr/wPYNgxVaXrVotEy",\r
"timeout": 1000\r
},\r
{\r
"label": "Lebonyba küldés",\r
- "processor": "UNCTargetProcessor",\r
+ "processor": "FTPTargetProcessor",\r
"outputFormat": "%ID%",\r
"tag": "Lebony",\r
"killDateDays": 7,\r
"remote": {\r
- "address": "file://10.10.1.100/BRAAVOS/PLAYOUT_CHECK",\r
+ "address": "ftp://10.10.1.100/PLAYOUT_CHECK",\r
"userName": "mediacube",\r
"password": "Dn8t4gfHcK98o8hyPgLDhr5SgSji4JCxsfpMJsODikUp3nXgrM0UNCi45lLAK8ZOnmEneO44P9qpJ4QDqhctN6MxZodjJgdZTyoZKmSa+ECzEzLr/wPYNgxVaXrVotEy",\r
"timeout": 1000\r
},\r
{\r
"label": "Archiválás",\r
- "processor": "UNCTargetProcessor",\r
+ "processor": "FTPTargetProcessor",\r
"outputFormat": "%ID%",\r
"tag": "Archiválás",\r
"saveArchiveMetadata": true,\r
"remote": {\r
- "address": "file://10.10.1.100/BRAAVOS/ARCHIVE",\r
+ "address": "ftp://10.10.1.100/ARCHIVE",\r
"userName": "mediacube",\r
"password": "Dn8t4gfHcK98o8hyPgLDhr5SgSji4JCxsfpMJsODikUp3nXgrM0UNCi45lLAK8ZOnmEneO44P9qpJ4QDqhctN6MxZodjJgdZTyoZKmSa+ECzEzLr/wPYNgxVaXrVotEy",\r
"timeout": 1000\r
{\r
- "userDomain": "intra.echotv.hu"\r
+ "userDomain": {\r
+ "address": "intra.echotv.hu",\r
+ "userName": "echotest",\r
+ "password": "F3QcfkSEW7hq+FcEraq9xv4UdHHeVoOh7jBH1G1k9SzEayTXyiT4WQ7XKtBO/ygnCpRU97AXoKXKoqXIGP8QlVkFurRqwzo8mywEb1q2VW7dUjkJcLFtLDkqQjM39+N9"\r
+ }\r
}\r
--- /dev/null
+namespace Maestro {\r
+ partial class LoginForm {\r
+ /// <summary>\r
+ /// Required designer variable.\r
+ /// </summary>\r
+ private System.ComponentModel.IContainer components = null;\r
+\r
+ /// <summary>\r
+ /// Clean up any resources being used.\r
+ /// </summary>\r
+ /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>\r
+ protected override void Dispose(bool disposing) {\r
+ if (disposing && (components != null)) {\r
+ components.Dispose();\r
+ }\r
+ base.Dispose(disposing);\r
+ }\r
+\r
+ #region Windows Form Designer generated code\r
+\r
+ /// <summary>\r
+ /// Required method for Designer support - do not modify\r
+ /// the contents of this method with the code editor.\r
+ /// </summary>\r
+ private void InitializeComponent() {\r
+ this.components = new System.ComponentModel.Container();\r
+ this.pButtons = new System.Windows.Forms.FlowLayoutPanel();\r
+ this.btnOk = new System.Windows.Forms.Button();\r
+ this.btnCancel = new System.Windows.Forms.Button();\r
+ this.pLayout = new System.Windows.Forms.FlowLayoutPanel();\r
+ this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel();\r
+ this.pictureBox1 = new System.Windows.Forms.PictureBox();\r
+ this.label1 = new System.Windows.Forms.Label();\r
+ this.loginFormBindingSource = new System.Windows.Forms.BindingSource(this.components);\r
+ this.label2 = new System.Windows.Forms.Label();\r
+ this.txtUserName = new System.Windows.Forms.TextBox();\r
+ this.label3 = new System.Windows.Forms.Label();\r
+ this.txtPassword = new System.Windows.Forms.TextBox();\r
+ this.pButtons.SuspendLayout();\r
+ this.pLayout.SuspendLayout();\r
+ this.flowLayoutPanel1.SuspendLayout();\r
+ ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();\r
+ ((System.ComponentModel.ISupportInitialize)(this.loginFormBindingSource)).BeginInit();\r
+ this.SuspendLayout();\r
+ // \r
+ // pButtons\r
+ // \r
+ this.pButtons.Controls.Add(this.btnOk);\r
+ this.pButtons.Controls.Add(this.btnCancel);\r
+ this.pButtons.FlowDirection = System.Windows.Forms.FlowDirection.RightToLeft;\r
+ this.pButtons.Location = new System.Drawing.Point(4, 142);\r
+ this.pButtons.Margin = new System.Windows.Forms.Padding(4);\r
+ this.pButtons.Name = "pButtons";\r
+ this.pButtons.Size = new System.Drawing.Size(413, 34);\r
+ this.pButtons.TabIndex = 7;\r
+ // \r
+ // btnOk\r
+ // \r
+ this.btnOk.AutoSize = true;\r
+ this.btnOk.Dock = System.Windows.Forms.DockStyle.Left;\r
+ this.btnOk.Location = new System.Drawing.Point(299, 4);\r
+ this.btnOk.Margin = new System.Windows.Forms.Padding(4);\r
+ this.btnOk.Name = "btnOk";\r
+ this.btnOk.Size = new System.Drawing.Size(110, 27);\r
+ this.btnOk.TabIndex = 1;\r
+ this.btnOk.Text = "Bejelentkezés";\r
+ this.btnOk.UseVisualStyleBackColor = true;\r
+ this.btnOk.Click += new System.EventHandler(this.btnOk_Click);\r
+ // \r
+ // btnCancel\r
+ // \r
+ this.btnCancel.AutoSize = true;\r
+ this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\r
+ this.btnCancel.Dock = System.Windows.Forms.DockStyle.Right;\r
+ this.btnCancel.Location = new System.Drawing.Point(191, 4);\r
+ this.btnCancel.Margin = new System.Windows.Forms.Padding(4);\r
+ this.btnCancel.Name = "btnCancel";\r
+ this.btnCancel.Size = new System.Drawing.Size(100, 27);\r
+ this.btnCancel.TabIndex = 3;\r
+ this.btnCancel.Text = "Mégsem";\r
+ this.btnCancel.UseVisualStyleBackColor = true;\r
+ this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click);\r
+ // \r
+ // pLayout\r
+ // \r
+ this.pLayout.Controls.Add(this.flowLayoutPanel1);\r
+ this.pLayout.Controls.Add(this.label2);\r
+ this.pLayout.Controls.Add(this.txtUserName);\r
+ this.pLayout.Controls.Add(this.label3);\r
+ this.pLayout.Controls.Add(this.txtPassword);\r
+ this.pLayout.Controls.Add(this.pButtons);\r
+ this.pLayout.Dock = System.Windows.Forms.DockStyle.Fill;\r
+ this.pLayout.FlowDirection = System.Windows.Forms.FlowDirection.TopDown;\r
+ this.pLayout.Location = new System.Drawing.Point(0, 0);\r
+ this.pLayout.Margin = new System.Windows.Forms.Padding(4);\r
+ this.pLayout.Name = "pLayout";\r
+ this.pLayout.Size = new System.Drawing.Size(421, 182);\r
+ this.pLayout.TabIndex = 8;\r
+ this.pLayout.WrapContents = false;\r
+ // \r
+ // flowLayoutPanel1\r
+ // \r
+ this.flowLayoutPanel1.Controls.Add(this.pictureBox1);\r
+ this.flowLayoutPanel1.Controls.Add(this.label1);\r
+ this.flowLayoutPanel1.Location = new System.Drawing.Point(4, 4);\r
+ this.flowLayoutPanel1.Margin = new System.Windows.Forms.Padding(4);\r
+ this.flowLayoutPanel1.Name = "flowLayoutPanel1";\r
+ this.flowLayoutPanel1.Size = new System.Drawing.Size(413, 34);\r
+ this.flowLayoutPanel1.TabIndex = 8;\r
+ // \r
+ // pictureBox1\r
+ // \r
+ this.pictureBox1.Image = global::Maestro.Properties.Resources.mediacube_logo_v2_half_hard_edge;\r
+ this.pictureBox1.Location = new System.Drawing.Point(3, 3);\r
+ this.pictureBox1.Name = "pictureBox1";\r
+ this.pictureBox1.Size = new System.Drawing.Size(27, 27);\r
+ this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;\r
+ this.pictureBox1.TabIndex = 9;\r
+ this.pictureBox1.TabStop = false;\r
+ // \r
+ // label1\r
+ // \r
+ this.label1.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.loginFormBindingSource, "DomainName", true));\r
+ this.label1.Location = new System.Drawing.Point(37, 0);\r
+ this.label1.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);\r
+ this.label1.Name = "label1";\r
+ this.label1.Size = new System.Drawing.Size(57, 30);\r
+ this.label1.TabIndex = 0;\r
+ this.label1.Text = "Domain";\r
+ this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;\r
+ // \r
+ // loginFormBindingSource\r
+ // \r
+ this.loginFormBindingSource.DataSource = this;\r
+ this.loginFormBindingSource.Position = 0;\r
+ // \r
+ // label2\r
+ // \r
+ this.label2.AutoSize = true;\r
+ this.label2.Location = new System.Drawing.Point(4, 42);\r
+ this.label2.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);\r
+ this.label2.Name = "label2";\r
+ this.label2.Size = new System.Drawing.Size(84, 17);\r
+ this.label2.TabIndex = 2;\r
+ this.label2.Text = "Felhasználó";\r
+ // \r
+ // txtUserName\r
+ // \r
+ this.txtUserName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) \r
+ | System.Windows.Forms.AnchorStyles.Right)));\r
+ this.txtUserName.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.loginFormBindingSource, "UserName", true));\r
+ this.txtUserName.Location = new System.Drawing.Point(4, 63);\r
+ this.txtUserName.Margin = new System.Windows.Forms.Padding(4);\r
+ this.txtUserName.Name = "txtUserName";\r
+ this.txtUserName.Size = new System.Drawing.Size(413, 23);\r
+ this.txtUserName.TabIndex = 3;\r
+ // \r
+ // label3\r
+ // \r
+ this.label3.AutoSize = true;\r
+ this.label3.Location = new System.Drawing.Point(4, 90);\r
+ this.label3.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);\r
+ this.label3.Name = "label3";\r
+ this.label3.Size = new System.Drawing.Size(48, 17);\r
+ this.label3.TabIndex = 4;\r
+ this.label3.Text = "Jelszó";\r
+ // \r
+ // txtPassword\r
+ // \r
+ this.txtPassword.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) \r
+ | System.Windows.Forms.AnchorStyles.Right)));\r
+ this.txtPassword.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.loginFormBindingSource, "Password", true));\r
+ this.txtPassword.Location = new System.Drawing.Point(4, 111);\r
+ this.txtPassword.Margin = new System.Windows.Forms.Padding(4);\r
+ this.txtPassword.Name = "txtPassword";\r
+ this.txtPassword.Size = new System.Drawing.Size(413, 23);\r
+ this.txtPassword.TabIndex = 5;\r
+ this.txtPassword.UseSystemPasswordChar = true;\r
+ // \r
+ // LoginForm\r
+ // \r
+ this.AcceptButton = this.btnOk;\r
+ this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);\r
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\r
+ this.CancelButton = this.btnCancel;\r
+ this.ClientSize = new System.Drawing.Size(421, 182);\r
+ this.ControlBox = false;\r
+ this.Controls.Add(this.pLayout);\r
+ this.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+ this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;\r
+ this.Margin = new System.Windows.Forms.Padding(4);\r
+ this.Name = "LoginForm";\r
+ this.ShowIcon = false;\r
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;\r
+ this.Text = "Maestro bejelentkezés";\r
+ this.TopMost = true;\r
+ this.pButtons.ResumeLayout(false);\r
+ this.pButtons.PerformLayout();\r
+ this.pLayout.ResumeLayout(false);\r
+ this.pLayout.PerformLayout();\r
+ this.flowLayoutPanel1.ResumeLayout(false);\r
+ ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();\r
+ ((System.ComponentModel.ISupportInitialize)(this.loginFormBindingSource)).EndInit();\r
+ this.ResumeLayout(false);\r
+\r
+ }\r
+\r
+ #endregion\r
+\r
+ private System.Windows.Forms.FlowLayoutPanel pButtons;\r
+ private System.Windows.Forms.Button btnOk;\r
+ private System.Windows.Forms.Button btnCancel;\r
+ private System.Windows.Forms.FlowLayoutPanel pLayout;\r
+ private System.Windows.Forms.Label label1;\r
+ private System.Windows.Forms.Label label2;\r
+ private System.Windows.Forms.TextBox txtUserName;\r
+ private System.Windows.Forms.Label label3;\r
+ private System.Windows.Forms.TextBox txtPassword;\r
+ private System.Windows.Forms.BindingSource loginFormBindingSource;\r
+ private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel1;\r
+ private System.Windows.Forms.PictureBox pictureBox1;\r
+ }\r
+}
\ No newline at end of file
--- /dev/null
+using System;\r
+using System.Windows.Forms;\r
+\r
+namespace Maestro {\r
+ public partial class LoginForm : Form {\r
+ public string DomainName { get; set; }\r
+ public string UserName { get; set; }\r
+ public string Password { get; set; }\r
+\r
+ public LoginForm() {\r
+ InitializeComponent();\r
+ }\r
+\r
+ private void btnOk_Click(object sender, EventArgs e) {\r
+ DialogResult = DialogResult.OK;\r
+ Close();\r
+ }\r
+\r
+ private void btnCancel_Click(object sender, EventArgs e) {\r
+ DialogResult = DialogResult.Cancel;\r
+ Close();\r
+ }\r
+ }\r
+}\r
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<root>\r
+ <!-- \r
+ Microsoft ResX Schema \r
+ \r
+ Version 2.0\r
+ \r
+ The primary goals of this format is to allow a simple XML format \r
+ that is mostly human readable. The generation and parsing of the \r
+ various data types are done through the TypeConverter classes \r
+ associated with the data types.\r
+ \r
+ Example:\r
+ \r
+ ... ado.net/XML headers & schema ...\r
+ <resheader name="resmimetype">text/microsoft-resx</resheader>\r
+ <resheader name="version">2.0</resheader>\r
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>\r
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>\r
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">\r
+ <value>[base64 mime encoded serialized .NET Framework object]</value>\r
+ </data>\r
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">\r
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r
+ <comment>This is a comment</comment>\r
+ </data>\r
+ \r
+ There are any number of "resheader" rows that contain simple \r
+ name/value pairs.\r
+ \r
+ Each data row contains a name, and value. The row also contains a \r
+ type or mimetype. Type corresponds to a .NET class that support \r
+ text/value conversion through the TypeConverter architecture. \r
+ Classes that don't support this are serialized and stored with the \r
+ mimetype set.\r
+ \r
+ The mimetype is used for serialized objects, and tells the \r
+ ResXResourceReader how to depersist the object. This is currently not \r
+ extensible. For a given mimetype the value must be set accordingly:\r
+ \r
+ Note - application/x-microsoft.net.object.binary.base64 is the format \r
+ that the ResXResourceWriter will generate, however the reader can \r
+ read any of the formats listed below.\r
+ \r
+ mimetype: application/x-microsoft.net.object.binary.base64\r
+ value : The object must be serialized with \r
+ : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r
+ : and then encoded with base64 encoding.\r
+ \r
+ mimetype: application/x-microsoft.net.object.soap.base64\r
+ value : The object must be serialized with \r
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r
+ : and then encoded with base64 encoding.\r
+\r
+ mimetype: application/x-microsoft.net.object.bytearray.base64\r
+ value : The object must be serialized into a byte array \r
+ : using a System.ComponentModel.TypeConverter\r
+ : and then encoded with base64 encoding.\r
+ -->\r
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">\r
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />\r
+ <xsd:element name="root" msdata:IsDataSet="true">\r
+ <xsd:complexType>\r
+ <xsd:choice maxOccurs="unbounded">\r
+ <xsd:element name="metadata">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" use="required" type="xsd:string" />\r
+ <xsd:attribute name="type" type="xsd:string" />\r
+ <xsd:attribute name="mimetype" type="xsd:string" />\r
+ <xsd:attribute ref="xml:space" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="assembly">\r
+ <xsd:complexType>\r
+ <xsd:attribute name="alias" type="xsd:string" />\r
+ <xsd:attribute name="name" type="xsd:string" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="data">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />\r
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />\r
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />\r
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />\r
+ <xsd:attribute ref="xml:space" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="resheader">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" type="xsd:string" use="required" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ </xsd:choice>\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ </xsd:schema>\r
+ <resheader name="resmimetype">\r
+ <value>text/microsoft-resx</value>\r
+ </resheader>\r
+ <resheader name="version">\r
+ <value>2.0</value>\r
+ </resheader>\r
+ <resheader name="reader">\r
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r
+ </resheader>\r
+ <resheader name="writer">\r
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r
+ </resheader>\r
+ <metadata name="loginFormBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">\r
+ <value>17, 17</value>\r
+ </metadata>\r
+ <metadata name="loginFormBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">\r
+ <value>17, 17</value>\r
+ </metadata>\r
+</root>
\ No newline at end of file
<Compile Include="Commons\ObjectExtensions.cs" />\r
<Compile Include="Commons\SambaClient.cs" />\r
<Compile Include="Commons\Win32File.cs" />\r
+ <Compile Include="Commons\WindowsIdentityMembers.cs" />\r
<Compile Include="Configuration\ConfigurationInfo.cs" />\r
<Compile Include="Configuration\KeysJsonConverter.cs" />\r
<Compile Include="Configuration\KnownTypesBinder.cs" />\r
+ <Compile Include="LoginForm.cs">\r
+ <SubType>Form</SubType>\r
+ </Compile>\r
+ <Compile Include="LoginForm.Designer.cs">\r
+ <DependentUpon>LoginForm.cs</DependentUpon>\r
+ </Compile>\r
<Compile Include="MaestroForm.Metadata.cs">\r
<SubType>Form</SubType>\r
</Compile>\r
<EmbeddedResource Include="ArchiveMetadataForm.resx">\r
<DependentUpon>ArchiveMetadataForm.cs</DependentUpon>\r
</EmbeddedResource>\r
+ <EmbeddedResource Include="LoginForm.resx">\r
+ <DependentUpon>LoginForm.cs</DependentUpon>\r
+ </EmbeddedResource>\r
<EmbeddedResource Include="MaestroForm.resx">\r
<DependentUpon>MaestroForm.cs</DependentUpon>\r
<SubType>Designer</SubType>\r
<None Include="packages.config" />\r
<None Include="Properties\app.manifest" />\r
<None Include="Properties\DataSources\ArchiveMetadataForm.datasource" />\r
+ <None Include="Properties\DataSources\LoginForm.datasource" />\r
<None Include="Properties\DataSources\Maestro.Metadata.MetadataInfo.datasource" />\r
<None Include="Properties\DataSources\SystemMessage.datasource" />\r
<None Include="Properties\Settings.settings">\r
<None Include="Resources\ic_play_arrow_black_24dp_1x.ico" />\r
<None Include="Resources\ic_search_black_24dp_1x.png" />\r
<None Include="Resources\ic_playlist_add_check_black_24dp_1x.png" />\r
+ <None Include="Resources\mediacube_logo_v2_half_hard_edge.png" />\r
<Content Include="TODO.txt" />\r
</ItemGroup>\r
<ItemGroup>\r
private void OnArchiveMetadataClick(object sender, EventArgs e) {\r
if (archiveMetadata == null)\r
archiveMetadata = GetArchiveMetadata();\r
- if (archiveMetadata == null || !archiveMetadata.IsFilled) {\r
+\r
+ //if (archiveMetadata == null || !archiveMetadata.IsFilled) {\r
+ //MC metaadta esetén nincs cím\r
+ if (archiveMetadata == null) {\r
MessageBox.Show("Nem található archív metaadat!");\r
return;\r
}\r
};\r
}\r
\r
- private void OnTrafficIDSelected(string id, int variantID) {\r
+ private void OnTrafficIDSelected(string id, int variantID, string text) {\r
octopusIDSelector.ClearSelection();\r
archiveMetadata = null;\r
if (id == null) {\r
SelectedMetadata = new MetadataInfo() {\r
Kind = metadataType,\r
ID = id,\r
+ MetadataText = text,\r
VariantID = variantID\r
};\r
}\r
//Cursor.Current = Cursors.Default;\r
}\r
\r
- private void LookupTraffic(MetadataType metadataType) {\r
- TrafficAPI api = trafficIDSelector.trafficAPI;\r
- List<TrafficItem> result = null;\r
- switch (metadataType) {\r
- case MetadataType.TrafficMaterial:\r
- result = api.GetMaterials(SelectedSource?.Prefix, false);\r
- break;\r
- case MetadataType.TrafficPromo:\r
- result = api.GetPromos(SelectedSource?.Prefix, false);\r
- break;\r
- case MetadataType.TrafficAD:\r
- result = api.GetADs(SelectedSource?.Prefix, false);\r
- break;\r
- }\r
- if (result == null || result.Count == 0) {\r
- MessageBox.Show(this, StringResources.NINCS_TALALAT);\r
- return;\r
- }\r
- if (result.Count == 1)\r
- OnTrafficIDSelected(result[0].MediaID, result[0].VariantID);\r
- else {\r
- TrafficLookupResultSelector lookupResult = new TrafficLookupResultSelector(result, OnTrafficIDSelected);\r
- lookupResult.ShowDialog();\r
- }\r
- }\r
-\r
private void picClearFilter_Click(object sender, EventArgs e) {\r
txtSourceFilter.Text = null;\r
bindingSource.Filter = null;\r
-using Commons;\r
-using LinkDotNet.MessageHandling;\r
+using LinkDotNet.MessageHandling;\r
using LinkDotNet.MessageHandling.Contracts;\r
+using Maestro.Commons;\r
using Maestro.Configuration;\r
using Maestro.Properties;\r
using NLog;\r
-using NLog.Targets;\r
using System;\r
using System.Collections.Concurrent;\r
using System.Collections.Generic;\r
using System.Diagnostics;\r
using System.DirectoryServices.AccountManagement;\r
-using System.Drawing;\r
-using System.Globalization;\r
using System.IO;\r
using System.Linq;\r
using System.Reflection;\r
using System.Runtime.InteropServices;\r
using System.Security.AccessControl;\r
using System.Security.Principal;\r
-using System.Text;\r
+using System.Text.RegularExpressions;\r
using System.Threading;\r
using System.Threading.Tasks;\r
using System.Windows.Forms;\r
-using System.Xml;\r
-using System.Xml.Linq;\r
\r
namespace Maestro {\r
\r
}\r
}\r
}\r
- //Application.EnableVisualStyles();\r
- //Application.SetCompatibleTextRenderingDefault(false);\r
- //Application.Run(new TrayApplicationContext());\r
}\r
}\r
\r
private const string CONFIG_ERROR = "Nem található aktív konfiguráció.";\r
private const string SYSCONFIG_ERROR = "Nem található a 'global.json' rendszer konfiguráció.";\r
private const string CONFIGURATION_FOLDER = "./Configuration";\r
+ private const string DOMAIN_QUERY_ERROR = "A bejelentkezett felhasználó domain információja nem elérhető.";\r
+ private const string NOSPLASH = "nosplash";\r
+ private const string NOLOGIN = "nologin";\r
private static Logger logger = LogManager.GetCurrentClassLogger();\r
private NotifyIcon trayIcon;\r
private ConcurrentBag<MeastroFormNotifyIcon> forms = new ConcurrentBag<MeastroFormNotifyIcon>();\r
private IMessageBus messageBus = new MessageBus();\r
\r
public TrayApplicationContext() {\r
+ string str = Regex.Replace("Aéá.ú-óüöA", "[^0-9A-Za-z-._]", "_");\r
+ Debug.WriteLine(str);\r
}\r
\r
- public void Start() {\r
+ private bool HasCommandlineParameter(string parameter) {\r
String[] arguments = Environment.GetCommandLineArgs();\r
- if (!arguments.ToList().Contains("nosplash")) {\r
+ return arguments.ToList().Contains(parameter);\r
+ }\r
+\r
+ public void Start() {\r
+ if (!HasCommandlineParameter(NOSPLASH)) {\r
Splash splash = new Splash();\r
Task.Run(() => {\r
Application.Run(splash);\r
});\r
}\r
- CreateForms();\r
+ string[] configFiles = Directory.GetFiles(CONFIGURATION_FOLDER, JSON_WILDCARD);\r
+ if (configFiles.Length == 0)\r
+ throw new Exception(CONFIG_ERROR);\r
+\r
+ CheckGlobalConfig(configFiles);\r
+ if (!HasCommandlineParameter(NOLOGIN))\r
+ CheckUser();\r
+ CreateForms(configFiles);\r
CreateTrayIcon();\r
}\r
\r
- private void CreateForms() {\r
- string[] files = Directory.GetFiles(CONFIGURATION_FOLDER, JSON_WILDCARD);\r
- if (files.Length == 0)\r
- throw new Exception(CONFIG_ERROR);\r
- \r
- CheckGlobalConfig(files);\r
- foreach (String file in files) {\r
+ private void CreateForms(string[] configFiles) {\r
+ foreach (String file in configFiles) {\r
string audioRecorderFile = Path.Combine(CONFIGURATION_FOLDER, AUDIORECORDER_JSON);\r
if (file.Equals(audioRecorderFile))\r
continue;\r
+ string globalFile = Path.Combine(CONFIGURATION_FOLDER, GLOBAL_JSON);\r
+ if (file.Equals(globalFile))\r
+ continue;\r
CreateForm(file);\r
}\r
if (forms.Count == 0)\r
\r
private void CheckGlobalConfig(string[] files) {\r
string globalFile = Path.Combine(CONFIGURATION_FOLDER, GLOBAL_JSON);\r
- if (files.Contains(globalFile)) {\r
- GlobalInfo global = Loader.Get<GlobalInfo>(globalFile);\r
- if (String.IsNullOrEmpty(global.UserDomain))\r
- throw new Exception(SYSCONFIG_ERROR);\r
- else {\r
- //using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, global.UserDomain)) {\r
- // bool isValid = pc.ValidateCredentials("echotest", "aA123456+");\r
- // Debug.WriteLine("User valid: " + isValid);\r
- //}\r
- }\r
- } else\r
+ if (!files.Contains(globalFile))\r
+ throw new Exception(SYSCONFIG_ERROR);\r
+ }\r
+\r
+ private bool IsDomainUser(string userName, string domainName) {\r
+ string[] domain = userName.Split('\\');\r
+ if (domain.Length < 2)\r
+ throw new Exception(DOMAIN_QUERY_ERROR);\r
+ string userDomainName = domain[0];\r
+ if (userDomainName.Contains("."))\r
+ userDomainName = userDomainName.Split('.')[0];\r
+ if (domainName.ToLower().Equals(userDomainName.ToLower()))\r
+ return true;\r
+ return false;\r
+ }\r
+\r
+ private void CheckUser() {\r
+ string globalFile = Path.Combine(CONFIGURATION_FOLDER, GLOBAL_JSON);\r
+ GlobalInfo global = Loader.Get<GlobalInfo>(globalFile);\r
+ string domainName = global.UserDomain.Address.ToString();\r
+ if (String.IsNullOrEmpty(domainName))\r
throw new Exception(SYSCONFIG_ERROR);\r
+ else {\r
+ string userName = WindowsIdentity.GetCurrent().Name;\r
+ if (IsDomainUser(userName, domainName))\r
+ return;\r
+ userName = global.UserDomain.UserName;\r
+ string password = global.UserDomain.Password;\r
+ LoginForm loginForm = null;\r
+ try {\r
+ using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, domainName)) {\r
+ while (true) {\r
+ bool isValid = pc.ValidateCredentials(userName, password);\r
+ if (isValid)\r
+ break;\r
+\r
+ if (loginForm == null)\r
+ loginForm = new LoginForm();\r
+ else\r
+ MessageBox.Show("Hibás a felhasználói név, vagy hibás a jelszó.");\r
+\r
+ DialogResult result = loginForm.ShowDialog();\r
+ if (result == DialogResult.Cancel)\r
+ throw new Exception("Bejelentkezés nélkül a Maestro alkalmazás nem indítható el.");\r
+ userName = loginForm.UserName;\r
+ password = loginForm.Password;\r
+ }\r
+ }\r
+ }\r
+ catch (Exception e) {\r
+ throw new Exception("Hiba a hitelesítő adatok lekérdezésekor. A rendszer üzenete: " + e.Message);\r
+ }\r
+\r
+ }\r
}\r
\r
private void CreateForm(string file) {\r
trayIcon.Visible = false;\r
trayIcon.Dispose();\r
}\r
+\r
}\r
}\r
}\r
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<!--\r
+ This file is automatically generated by Visual Studio .Net. It is \r
+ used to store generic object data source configuration information. \r
+ Renaming the file extension or editing the content of this file may \r
+ cause the file to be unrecognizable by the program.\r
+-->\r
+<GenericObjectDataSource DisplayName="LoginForm" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">\r
+ <TypeInfo>Maestro.LoginForm, Maestro, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>\r
+</GenericObjectDataSource>
\ No newline at end of file
}\r
}\r
\r
+ /// <summary>\r
+ /// Looks up a localized resource of type System.Drawing.Bitmap.\r
+ /// </summary>\r
+ internal static System.Drawing.Bitmap mediacube_logo_v2_half_hard_edge {\r
+ get {\r
+ object obj = ResourceManager.GetObject("mediacube_logo_v2_half_hard_edge", resourceCulture);\r
+ return ((System.Drawing.Bitmap)(obj));\r
+ }\r
+ }\r
+ \r
/// <summary>\r
/// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).\r
/// </summary>\r
<data name="ic_playlist_add_check_black_24dp_1x" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
<value>..\Resources\ic_playlist_add_check_black_24dp_1x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
</data>\r
+ <data name="mediacube_logo_v2_half_hard_edge" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
+ <value>..\Resources\mediacube_logo_v2_half_hard_edge.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
+ </data>\r
</root>
\ No newline at end of file
this.components = new System.ComponentModel.Container();\r
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Splash));\r
this.splashTimer = new System.Windows.Forms.Timer(this.components);\r
- this.pictureBox1 = new System.Windows.Forms.PictureBox();\r
+ this.picWorld = new System.Windows.Forms.PictureBox();\r
this.labelVersion = new System.Windows.Forms.Label();\r
- ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();\r
+ this.label1 = new System.Windows.Forms.Label();\r
+ ((System.ComponentModel.ISupportInitialize)(this.picWorld)).BeginInit();\r
this.SuspendLayout();\r
// \r
// splashTimer\r
this.splashTimer.Interval = 2000;\r
this.splashTimer.Tick += new System.EventHandler(this.splashTimer_Tick);\r
// \r
- // pictureBox1\r
+ // picWorld\r
// \r
- this.pictureBox1.BackColor = System.Drawing.Color.Transparent;\r
- this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image")));\r
- this.pictureBox1.Location = new System.Drawing.Point(16, 0);\r
- this.pictureBox1.Name = "pictureBox1";\r
- this.pictureBox1.Size = new System.Drawing.Size(320, 349);\r
- this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;\r
- this.pictureBox1.TabIndex = 0;\r
- this.pictureBox1.TabStop = false;\r
+ this.picWorld.BackColor = System.Drawing.Color.Transparent;\r
+ this.picWorld.Image = ((System.Drawing.Image)(resources.GetObject("picWorld.Image")));\r
+ this.picWorld.Location = new System.Drawing.Point(16, 0);\r
+ this.picWorld.Name = "picWorld";\r
+ this.picWorld.Size = new System.Drawing.Size(320, 349);\r
+ this.picWorld.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;\r
+ this.picWorld.TabIndex = 0;\r
+ this.picWorld.TabStop = false;\r
// \r
// labelVersion\r
// \r
this.labelVersion.BackColor = System.Drawing.Color.Transparent;\r
- this.labelVersion.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
- this.labelVersion.ForeColor = System.Drawing.Color.LightGray;\r
- this.labelVersion.Location = new System.Drawing.Point(16, 281);\r
+ this.labelVersion.Font = new System.Drawing.Font("Microsoft Sans Serif", 8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+ this.labelVersion.ForeColor = System.Drawing.Color.White;\r
+ this.labelVersion.Location = new System.Drawing.Point(16, 295);\r
this.labelVersion.Name = "labelVersion";\r
this.labelVersion.Size = new System.Drawing.Size(317, 23);\r
this.labelVersion.TabIndex = 1;\r
- this.labelVersion.Text = "label1";\r
+ this.labelVersion.Text = "0.0.0";\r
this.labelVersion.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;\r
// \r
+ // label1\r
+ // \r
+ this.label1.BackColor = System.Drawing.Color.Transparent;\r
+ this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+ this.label1.ForeColor = System.Drawing.Color.White;\r
+ this.label1.Location = new System.Drawing.Point(17, 277);\r
+ this.label1.Name = "label1";\r
+ this.label1.Size = new System.Drawing.Size(317, 23);\r
+ this.label1.TabIndex = 2;\r
+ this.label1.Text = "Maestro";\r
+ this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;\r
+ // \r
// Splash\r
// \r
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\r
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\r
- this.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("$this.BackgroundImage")));\r
+ this.BackgroundImage = global::Maestro.Properties.Resources.mediacube_logo_v2_half_hard_edge;\r
this.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;\r
- this.ClientSize = new System.Drawing.Size(348, 361);\r
+ this.ClientSize = new System.Drawing.Size(350, 361);\r
+ this.Controls.Add(this.label1);\r
this.Controls.Add(this.labelVersion);\r
- this.Controls.Add(this.pictureBox1);\r
+ this.Controls.Add(this.picWorld);\r
this.DoubleBuffered = true;\r
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;\r
this.Name = "Splash";\r
this.Text = "Splash";\r
this.TopMost = true;\r
this.TransparencyKey = System.Drawing.SystemColors.Control;\r
- ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();\r
+ ((System.ComponentModel.ISupportInitialize)(this.picWorld)).EndInit();\r
this.ResumeLayout(false);\r
\r
}\r
#endregion\r
\r
private System.Windows.Forms.Timer splashTimer;\r
- private System.Windows.Forms.PictureBox pictureBox1;\r
+ private System.Windows.Forms.PictureBox picWorld;\r
private System.Windows.Forms.Label labelVersion;\r
+ private System.Windows.Forms.Label label1;\r
}\r
}
\ No newline at end of file
using System;\r
-using System.Collections.Generic;\r
-using System.ComponentModel;\r
-using System.Data;\r
-using System.Diagnostics;\r
using System.Drawing;\r
-using System.Linq;\r
using System.Reflection;\r
-using System.Text;\r
-using System.Threading.Tasks;\r
using System.Windows.Forms;\r
\r
namespace Maestro {\r
public partial class Splash : Form {\r
public Splash() {\r
InitializeComponent();\r
- //Assembly assembly = Assembly.GetExecutingAssembly();\r
- //FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(assembly.Location);\r
- //labelVersion.Text = fvi.FileVersion;\r
-\r
Version version = Assembly.GetEntryAssembly().GetName().Version;\r
labelVersion.ForeColor = Color.White;\r
labelVersion.Text = String.Format("v{0}.{1}.{2}", version.Major, version.Minor, version.Build);\r
\r
private void splashTimer_Tick(object sender, EventArgs e) {\r
BeginInvoke(new Action(() => Close()));\r
- //Close(); \r
}\r
\r
}\r
<value>17, 17</value>\r
</metadata>\r
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />\r
- <data name="pictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">\r
+ <data name="picWorld.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">\r
<value>\r
R0lGODlhWAJ0ATAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQNFAAAACH5BA0UAAAALAAAAABYAnQBgf//\r
//DkQla06QAAAAL+hI+py93hYoSy2oubEIvmD4bieHjkqWwqyjpmC8fA20KrjOcMzfL6z+AofMCicXj8\r
RyPT6nCvEH38MUjzmixSgiOnLEbKF1ds0r/qsExNyysnHMIcMGfsUkuGnjTxRDLPSmJMGpk8EwUg4xTs\r
yxSpZA/FJXuUs01T2AQOxkCxcdNKOFsgNL00+RyUwzyTaUTRQcqY9EYuv8jQUU4gVXLEmgRi1M8qARFV\r
00FCC+wjRgM8ldHLTHkpAAAh/g5hdXRvbWF0dGljX2luYwA7\r
-</value>\r
- </data>\r
- <data name="$this.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">\r
- <value>\r
- iVBORw0KGgoAAAANSUhEUgAAAV4AAAFeCAYAAADNK3caAAAAIGNIUk0AAHolAACAgwAA+f8AAIDoAABS\r
- CAABFVgAADqXAAAXb9daH5AAAAAJcEhZcwAACxMAAAsTAQCanBgAAOwiSURBVHhe7J0FmBxV2oVncOIJ\r
- sKyw8q8ACwuL6+LuLsE1SNzdPYSECHEXICFCQgJxJa6TmfhYBA0QIETQ7z/nVt2e2zW3u6t6umcmoZ8n\r
- 79OTaquurnr71Hel0kQkLh6747oUKZLF0eAP4GJwN3gG1AbtQWvQBgwCvUBL0NZdVh08Dm4DF4LfAdvr\r
- p0hRZGxe9It1oR9sK5IiRRycCijKRmA4WAo+Bj8DKSI/gVwwGwwENcGNoDywrUuKFL6xedEv1oV+sK1I\r
- ihQ++CN4AvQDWeBXYJNmMjkIPgJdwJ2gArCta4oUEbF50S/WhX6wrUiKFBH4G6gLloCSEG0svgdTwSsg\r
- VZ5I4QubF/1iXegH24qkSGHAFPkCoGxtsiut/ADeA/eCdGD7bClSWL3oF+tCP9hWJEUK8A/QF+wDNrEd\r
- TuwGzUBlYPusKX7D2LzoF+tCP9hWJMVvmn+Ct4FNYIc7LEX0Br8Hts+e4jeIzYt+sS70g21FUvwm+RMY\r
- A2zCOtI4ANqBE4BtW6T4DWHzol+sC/1gW5EUvynY15Z9aH8ENkkdyXwOqgLbdknxG8HmRb9YF/rBtiIp\r
- fjM8CHYBm5R+S6wGFwHbNkpxhGPzol+sC/1gW5EURzz/Aez/apPQb5mx4BRg22YpjlBsXvSLdaEfbCuS\r
- 4ojlJMBRZTbppHDgoIwWgCUY2zZMcYRh86JfrAv9YFuRFEckHPjAVn2bbFIUZifg/BK2bZniCMLmRb9Y\r
- F/rBtiIpjig4f0IesMklRWwWg38D27ZNcQRg86JfrAv9YFuRFEcE/wKzgE0mKYLDWdQqAtu2TnEYY/Oi\r
- X6wL/WBbkRSHNWUBp1m0ySNF0dgPagHbdk9xmGLzol+sC/1gW5EUhy0vg73AJo0UiSMb3Axs30GKwwyb\r
- F/1iXegH24qkOOz4H9gEbJIoMarefq08dPP/5IEbr5B7rr1Ebv/fBXLLZefKDRefLddfdJbi2gvOVOj/\r
- 33jJf+SWy/+rHnvvdZfKAzddKQ/fcpV6Ldt7lDAzwN+B7TtJcZhg86JfrAv9YFuRFIcNfwWcgcsmhWLl\r
- 8Tuvl0dvu0buh2QpTS1TyvPR26+Rlx65S5q+/LR0alBd+rZrKoO6tJJ+HZrLqDc6yoge7fF3M7WsV+uG\r
- 0qH+q9Ko2hPy3P23KunedfVFode765qL5UHIuJSJuCc4Edi+oxSlHJsX/WJd6AfbiqQo9RwPOoESnRNX\r
- y/be6y+T6y78t9x06TlKiI0hzQGdWsi0kf0lY+5U+XTDMvlh52aRPfki33wi8sNXIj9/I/LT1yK/7hf5\r
- 5Xvnby47+KXzmC/yZH9eluxcs0hWz5gok4f2kV5tGkmtpx9SCVqnY4q+lEj4S/AcsH1fKUoxNi/6xbrQ\r
- D7YVSVGqeRLsAbaDv1igcFlCuPHis1XZ4Jn7bpEeLevL/AmjZM/GlSJf7oBEv8XudRBC3StyYI/It5Dp\r
- 3t0iX+10BAyxKj7PddD/34Pnfo3HfIPH7vvMEbF+rR++ll8/y5H8VQuU1Ds1rK6kS+nfesV58sitV6t1\r
- s61zMcKrcVwObN9dilKI6cOgWBf6wbYiKUolnEtgDbAd7MUCpcbTfIqOp/zt6r0sCyDb73M2iPyItCoH\r
- 8O8LR7CQKCWZSJSwKfBDSMd8L0h5T9YKSLifNKr2uNzs1o8fueWq0iDgieA0YPsuU5QiTB8GxbrQD7YV\r
- SVGq4CVs3gK2g7tYoMRYa1U11qsvlh4t6kne8nkFAvweyRRStMkymahkzUTMNPzNx7J+1nvSocGrSsC6\r
- 7FHCAv4FdACp4celGNOHQbEu9INtRVKUCvR0jYeA7aBOOkpakJcWWeeGNSR/5XyRX75zgPh+/TTbKsXi\r
- RqVs2Y/kvRcCniz1nntUNcjdedWFBZ/F8/mKkU9BavrJUorXiUGwLvSDbUVSlDj3gBKdrpGi0r0J2KC1\r
- dsZEkZ++hXD3Oem2lAg3DKyTSsEU8L7PZNboQfLU3TfJ1eedLvffcHlJy5esBBcA23eeooTwOjEI1oV+\r
- sK1IihLjHFCi0zVSTvffeLlcff7p8uRdN8r0Ef3kV50mS1HCjQoFzFqwHJTvd26WYd3byT3XXapKJSyZ\r
- lAIB80ofnCnOtg+kKGZMHwbFutAPthVJUezwSr6cC8B2kBYLlBG7hl0HOd2JpDuwcwv5NjcTu8hBke8+\r
- PTyEa6LWFwI+uAef4YDsXLVQOtR/RZVMOEBDf2bvdihGePmhRsC2P6QoRkwfBsW60A+2FUlRrNQDnAPA\r
- dnAmHS0fdseidNvWqSb5K+Zj13B6DUhIYh6xHS4w/bK7GmvSP+6V1R9OkJpP3i9Xn3eG6plRCtIvr4B8\r
- J7DtGymKAa8Tg2Bd6AfbiqQoFjjWPwfYDsZigdLhUF5K6JXH7pVlU95WfWXl131Od7DDWbheKGD2IZb9\r
- 8stXu+T9oX3UNrj6/DPUgIxSIOCFIDX9ZAngdWIQrAv9YFuRFEmFY/tnAtvBVyxQMuyPe+35Z8pDN18l\r
- Ewf2lJ/YR5Zlha93Jly48rnLF+wCxgYwSjACvG+P+1j3ebbXjBsK+LtP8VkPyTc5mTKgY3O5/coL5PqL\r
- z1alllIg4AGgHLDtOymSgOnDoFgX+sG2IimSAg+mN4DtYCsWKBXKhUNtKZs+bRvLV1vWYjeAcL//PGHC\r
- DZMsZUqRYvn+j3Pl0525kpObK1nZebIJrNmWJ+u3O3+TvLxc+QKPOfSJ+zp87teukPmanveKC8oXt3Lo\r
- K3z2/ZKzbI60qvWCany77YrzQ9vKu/2KEV4ppAaw7UcpEozpw6BYF/rBtiIpEs7zoMSma9QS4eQ1HHXG\r
- yWq2LZ6Jr/97p7TgysgqqQAoUarUmiM/fZoj+ZDoki35MiljhwxctVO6L9slHZbsklaLd0nTRbulOWi4\r
- cLc0WoD/L9wlzUCbxTvxmJ3SbdlOGbJ6h0zZkC8rtubJJztynffQqTgRSZgC5jBlllYg4SXvjVWT+bD0\r
- wsl9SkH63QauA7Z9KkWC8DoxCNaFfrCtSIqEwekaOXbfdlAVC5QHJUKZVHv4Tln47kj49gt89ZBuguq4\r
- IeHiNhdp9v0NO6TXip1KsPUX7JbGkGuLxbul9UcQK8TbDlDADjul/Uc7pZ1LG9AK8m0OmizcKfUg5Tqg\r
- Bf7fe8UOmZmVryQse/B+7nva1ikQFPDXu7BNDsqP2CYTBryu5qJgH+YHcVsKBPwh+Buw7WMpiojpw6BY\r
- F/rBtiIpigzH6E8CtoOoWKAs2GeVCZeDB97q3UV+QApVZYW9uxMr3C9yJGN7ngxCqmWKbQTZUroUa+el\r
- BXSy0BHiNaGITdqDtqAlxNto0U6pOX+XNF60S4YhDefmIq0iXasEbFm/wFDAHP4sh2TPptXSq1UDVXpQ\r
- w49vK/Hhx6Q7OAHY9rkUcWL6MCjWhX6wrUiKuOEwX47NL7HpGikHzlFAWZDXmtWRL7JW4quGcPd/kRjh\r
- Erd+uzMvV4as3qlKBs0g3U6QbRcI1RRuvNIl7Sy0RCquBQHXA2+vzZevdmF9vgZ77OsbCMoXt+x6xi5o\r
- WxZ9KE1eelKl3zv+d4HaviUs4K/BM8C2/6WIA68Tg2Bd6AfbiqSIC47F/wzYDpako4XAuQkoifrPV5XM\r
- uVOdKRV/+iZxdVy3sevb3bkyOWOHSrhNAOXaFdikS2JJ1yZepl2vdJl+27plCZYkas3jOuyQWZl5TqJn\r
- QxwSuG3dA0EBq54e+1XD4/zxw+X5B25TJZv7rr+spOVL1oPU9JMJwOvEIFgX+sG2IikCwbH3q4Dt4CgW\r
- KAHKgH1SOTfB7LGDlCwSOcxX9SiA1H7G34s25UOKTsMYywlauH6laxOvH+kq8UK4mnYf7cDtDoh/h7w6\r
- j6+zQ9Zu5Zy+roATVf9VQ6YPySH8PfaNTmr4MUs4pWT4Maef/D2w7ZspfGD6MCjWhX6wrUgKX3C6Ro65\r
- tx0MxQIPek7+zW5QbEAb3r2d7OeVHiAJTpOYEOHqOi5ktjE7T3qvcMoKbT8KF24ipUus0iUh6fJ2h7Qx\r
- qL9gh1Sfu0P6rciXHbm5znqzBmz5XIGhgPezUfKguqJG1ya11KxtpKr7Xdi+o2LiJ9AOHANs+2qKKJg+\r
- DIp1oR9sK5IiJk3Bj8B2ECQdHuSs4+rpGjs2eEU+XvcRvs6D+LcHknBEYRVIAHQdl70IRq7ZqXontFzk\r
- CNcrXb/i9UrXJt5oJQYtXaZdU7qaVot3SM15O6QuEvC4dfnyzW4IeC8+S6Lqvxx+rGZp+042zJkidZ99\r
- xJl+8uqL1PdSwgL+AjwEbPtsigh4nRgE60I/2FYkRUQ4XSPH1tt2+qSjD2xO13jN+WdInWceljWcrpEN\r
- QazlQgoJEa5bVvju41yZtoEy2y1NId3OS3ZJN8gzXunaxOtHukq8rnQd8dql2xrSJW1As0U75JW5O9Xt\r
- 3Kw8VSJJaPlBTT95QI2Cmzl6oCrx8DspJdNPrgDnAds+nMKD14lBsC70g21FUhSCY+g5lt62kxcLPJh5\r
- qXMe3I/dfp2aa8CpPeLg/yoxw3x1WeFX3C7fki9dl+2SRm4dVws3mdIlVukSQ7reEoMpXS8NF+yQl+fs\r
- xPrvkMztSej/q6afPCT78jfKkK5t5O5rL1Gln1Jy/beRoAqw7dMpXEwfBsW60A+2FUkRgsN8BwLbTl0s\r
- 8ODlMN8bcDBz5BnnFvg2Nwtf3aGETdcYquN+mS3bcvKk38qdSris45rCtUnXr3i90rWJ10+Jwa90WXIg\r
- +u8683fIq3M5gi5fPs4vqP/atkcguP3Zm0JdguiA7FqzWNrXexnf19lyq5p+ssT7//IKJg2Bbf9OAUwf\r
- BsW60A+2FUmh4Fh5jpm37cxJRx+st115nlx/4VnSutYLak4B1VOBcwzog94rgoCoxqevc+TLnbkybh1P\r
- zXdLy8W7pRvSrle6NvH6ka5NvH6kq8TrSlenXa90beLV0vXCbmevztsh9RbslEkZebLvY352CDhR9V8O\r
- P+b0kz/slZXTxkvNJx5QZyhMwaUg/eaD24BtX/9N43ViEKwL/WBbkd8414PtwLbzFgs8SNlliX1GX3r0\r
- bln63lvOnAqJHObLLld7c2T/JzkyanWuSoMc1kvhvga8wi0R6RJDun7Srk24LQ34mMYLd8iLc3ZIs4X5\r
- smgjticTfyLrv2r6yQPy69e7ZerQ3vLordeo75IzwpUCAc8HpwPbvv+bxPRhUKwL/WBbkd8o/wAcE2/b\r
- WYsFHpRqusYLzpSHb7laJg7sIT99oadr3JUY4SrJgC9yZG5WrlSfkyd3T8uTJ2bmSVMI6Y0VdvF6petX\r
- vF7p2sQbW7q8jS1dEku8pMWifEXd+flKwN2W5stm1n+5XdgDIlEC1tNPZm+Qfu2bqVIRLz9fSqaf7A/K\r
- Atux8JvC9GFQrAv9YFuR3xgc+/46sO2cxQIPwkdvu1ZN18i5AXq1bihfbeV0jYfUQIiECJd8BSCXTdtz\r
- IB4Id3qePA7hvgL5vgSen52H1LtDeiyPLV4/0rWJ1yvdWHVdnXYTKd3mLvy7Gag+N19qzNshb67Ilfxc\r
- bKNvnG1l246BoHxx65yt7JftS2ZLi+rPqsEXt11ZKqaf/A68DGzHxW8G04dBsS70g21FfkNwukaOfbft\r
- lEmHBx1hEmLKbfbKM7J10YzQZWoSOswXSe6zHTnSd3muPPRhnjwIKFtK92WXahDvi4AzhJnyLU7pesWb\r
- qBKDRktXQ/G2XcLGtzy5anK23Do1W4at5NzB2GbfOtvOtk0DQQGz/sv6/MEvZcnkMfLSI3er8gNLSqUg\r
- /W4B1wLbMXLE43ViEKwL/WBbkd8AHOO+Adh2wmKBB9u9112Gg+90ef6B22XhuyPckVE4OBN0+XTdH5dz\r
- GMzMypMXINW7kHKZbLVsvVC8LyMBsgtZj2WFpetXvF7p2sQbW7q8jS1dv+L1Spfw9epBug9Oz5YHPsiW\r
- u6Zly2UTs+WJGdkya4O7DZmAE1V+2MvpJw/JD3i9d/t1D00/ydtSIOD3wW9u+knTh0GxLvSDbUWOYDim\r
- nWPbbTtdscCDS03XeMG/1TDfsb06yyE1XeMh1S/310+22w/aADh1XBzkSGtrtuZKZyS652fvkCdnOSlX\r
- YxPvK5Dui3Py5dV5+UqonLw8GdItyRKDV7oPQLr3gYcg3oddbkbyvXJSttSZmy2ZW7E9WftlDdiyvQND\r
- Aau5NA7KV5tXS8+W9Z1RiJeco0YklgIBvwaOA7Zj6IjD9GFQrAv9YFuRI5BjAcey/wxsO1rS4cGkh/mS\r
- bk1qyWcbluErSPR0jSRbXf2h7woIdO4OabBgh9SGSJl4o0mXULzkBciXQ29ZamBjm1/p2sTrR7pe8Sa7\r
- xMDXqu+Rrgnl+yC45r1suQ50W5KtSjUq/Sao/6/6vjhz3K/fyaYFH0ijak+o+u8dV12o9pcSFvBX4Elg\r
- O56OKLxODIJ1oR9sK3KEwbHre4Bt50o6+gDS0zXWe/YRZ7pG1nE5zNc9CK0HZwBUHReJ7JvdOWqO2lrz\r
- dkp1iJOCYYMZZVsNxEq7Ji/MZsv/DpV62c3Mj3i90rWJN7Z0eRtbun7F65UuX7vRwnwlWJt0TR4B9+Ix\r
- VyD93vV+toxZnSM/8gwlkfVfPf3k/s9lwbhh8uz9t6oSVCmZfjIDXApsx9YRgdeJQbAu9INtRY4QLgTL\r
- gW1nKhZ40Nx3w+WqE/3T99ykxvQ7XYwOIDXtSExZwZiucXZWnjRZuENeRsptusgRE5NjvfnB0q7Ji5Bv\r
- IyRmW+qNR7olXWJo+xE+T0i621Wy9crWBh93B8R7GQT8zMxsmZ+F7c6zi4R1P9uONO1MP3nw420yumdH\r
- uefaUjX95LvgiJx+0vRhUKwL/WBbkcMcjk0fBWw7T7HAg+ThW6+W6y46S41aGtatjRzYtRWb+5Aa25+Q\r
- hMs6LruHIXVt2JYrHSAU1mZZVtAS4mQxlM/Lc51GsyBp14SvS5Hreq9Nujbx+pGuV7yJLDEw6UeS7r3T\r
- theSayy0pG+c4tR/G83nEGtXvomo/3K/YAI+sEftK59kLJUujWo4VxMpHdNP/gBagSNq+knTh0GxLvSD\r
- bUUOYxoDjk237TRJRx8Ut+AgYZ/cjvVflV1rFmEzI+Gq6RqdA8t60AVAJS1Id3d+rvRfmQ9xcipEp1+q\r
- FhBvKbGGC+JPu6+6sJdDNciX1z3rvvzwLDGY5YV4pGui67/sfnYDJPzGsmz5aie+k0TWf/nD6pajMmZN\r
- VjPRlaLpJz8F9wHbMXjY4XViEKwL/WBbkcMQjkHfCWw7SbHAA+Huay5WZYWaTz4gq6e/6zSc/PKtyBcJ\r
- mK6RdUWWFZCuOMfAhPV5SraUYlMIhdJlwtPSoYgoqOpIu7HEa5Mu0eJV8oV4Cfv4doN8g0q3JEsMfJ3G\r
- CZKuCeu/90x3yg/3T8uWSety5GcKkwLGd2X9HoPwyXZVklI/3DhT+mBEP3lSTz954xUlLV/yETgX2I7J\r
- wwavE4NgXegH24ocRpwBFgDbTlEscOfnMF92hudQUGe6xo+xaRM8XSNPZXEwL9zo1HHZ66ChK1wtGFM8\r
- THhNcP+LEGtR0q7JS3hPjvJqz8v9LIssXj/S9YrXJl0Sl3QBtwcHR/A1kiFdEybg297Plssh4BdnZcuy\r
- TfiuWAZKVP33EyRgd/rJ73dsliFdW6vky1JWKRl+PAJUBLZjtNRj+jAo1oV+sK3IYQDHmPcDtp2gWODO\r
- rqZrvPhsdfXZfh2ayjfZGdikh0T2JWi6RsIDGKevm7JzpcvSfNUft878AtlqKGAtHsqIwqk1LzFpV0Pp\r
- 8r5aeP+Orny90rWJN7Z0eRtbujbxmsLVhKSLv3k2QDEmS7oaXf+9fkq2XAUBt1yYLXnJGH58yJl+Mn/V\r
- AmlXt5ra/2694jzsjyVe/z0I6gHb8VqqMX0YFOtCP9hWpJTzCtgPbF9+0lE7N+BY+2sv/Le0rPGc5C6f\r
- i02JhMsx+e5BYj14AqDquEi57Ds6aCWH80J6SJxNXdFSLKZ4TfFQWpwCkd3HdBcym3SJV7jEJl1SY54D\r
- yxvsZtYJ8uy8NLp0Y5UYKN1Elxi0dDn72KMfJl+6JhTw/dOz5X+Ts+VmSLj/8mz5bje+S3Y/S1T994tc\r
- 1feXw8pXTR8v1R+/V3U/KyXTT+4ANwPbsVsq8ToxCNaFfrCtSCnlOrAV2L7sYoE79T3Yua/BTv5K1Xtk\r
- 6eSxaux9wqZrNOq4nK5xyvo8qQXJsT9t4wUQCkRCqWi0dL1pl+mRM28lOu1q8Wr51sc6UbydXPn6kW5h\r
- 8RaWrk28XuESU7iEJQavdO8pRumaPIL3vtsdfvwIRDxtPb5ffreJHH6spp88KD9/uUPeG9JLHsEZmJp+\r
- snQMP54D/gVsx3KpwvRhUKwL/WBbkVLGX8A0YPtyiwXuxA/dcpVce8G/1Zh6jrF3pmvkMN9dCRzmC3Bw\r
- Lt2UK80htWdnOlMXUiY8ZSZe6RZKu+7tK0YXMpt0iV/pElO6pLorX85t25XyhUy94o0tXd7Glq5NvOZn\r
- 1nBbaOlWLUHpmjAB34rke/mEbKk5O1vWbXG/Z5IoAe9j3/AfZO+2ddK3XWN1NnbDJf8pLfXfXqAMsB3b\r
- pQLTh0GxLvSDbUVKCRwrzjHjti+zWOBOy2G+7BrGYb4cU//VljXYbAcRcj8resIFoTou2J6TK68tzZfn\r
- INyakFpTyFfhka4pXjPtEibIBngOJ8JJVto14XN4QckukK8p3eIuMXBbtF6MdcF2Ksmk6+VhpF0mXt5e\r
- PzlbrpmULR0WZcvufHznia7/utNPZi8tmH6SM9+xNFbCAt4HXgS247zEMX0YFOtCP9hWpBTAMeIlPl0j\r
- x8xz521c7QnZvOADkV/3OV3E3J3dehAEQA/z/XJnjgxf7dRxOVKMZQUKt4kh3Uhp1+xCpkX1qtGFzCZd\r
- 4hUusUmX2IRL2J2NUuZj+P5aviVRYqB0uY1KS9IlTLsUruZR8MC0bLlyYrbcjhQ8nNNPfuIKOFHDj/X0\r
- kwf2yOKJo6TaI3ep7meckKkUpN+N4GpgO+ZLDK8Tg2Bd6AfbipQgl4D1wPalFQvcOTlGno0VHDM/f9xw\r
- NYmN2pk5XWOihvnuzVZj/qdtyJPaENezs/Kl/nxHtiZe6XrFawqIp+3sOpXM2q4pXQ1nMiOtIVTWfGNL\r
- l7eJlS6Tf9UZpUe6xJSuCfv/cvjxpROy5XH8UKjpJ/kjnKj6L/v/qitQH5Qf8f9xb76mrlCtpp8sHcOP\r
- Of3kacDmgGLH9GFQrAv9YFuREuAPYDywfUnFAndGNV0jEu69EO/oNzrKQe7ArON+sxtpIoF13D3ZsmpL\r
- rrSCLJ6eyQltHMky6RKvdCOJ19aFrKbRhcwmXeJXusQmXWKKtwZ+MF7BLbuZtYFgO3jkm8wSQ2s8tyW2\r
- w5OQbnH2XoiFTbgazv1LHgIcfnw5EnCdOdmStQ37RqKGHxMm4P3O9JN7Nq2SHi3qOdNPXloqpp/8FXQC\r
- xwObE4oN04dBsS70g21FihGO+W4NfgG2LyfpqJ1PTdd4jtohOTb+s8zl2DQQ7gF3ukYkU+uO7ROzjpuf\r
- myuvL82TZyBcjgRrZAjXlG4k8UZLu6y18ioS0bqQ2aRLbNL1k3a1eGsCNrixjzFla8pXS9cRb2Hp2sTr\r
- R7p8npLuTPYgKD3SJTbhEspWi1fLl+UHDj++FnT9KFu+SPT0k5/nGtNPTpcGzz+myg+h6Sctx0UxwpJi\r
- VWDzQ7HgdWIQrAv9YFuRYuJ+wDHfti8j6XBn407HEUA8Bav77COSMes9Z4gvp2vEzpqwOi5SzDe7cmQM\r
- 67iznMYzzqFA0UYSr0260dKu7kKmG9Vs0iV+pUts0iVe6RKmXUL51sP6s87bHvJNVomBr9Ny8eElXWJK\r
- 14T33QsBX4H0e8/7OTJhLfY/9tfdB1j/LeKPvyo/6Oknv/9c5r49RJ657xZVUrv/hstLOv2S1eC/wOaK\r
- pOJ1YhCsC/1gW5Ekw7LCTGDb+MXCE9jJONb9Ggj3ybtvlBmjBmAH/wybI9HTNebIL/h7VmauquM+NSNf\r
- 6uJWCzdRaVclP9xSrHqIsFe4xCZdYpNu0LSrxavl23DhDiVeR7bObaJKDFq6T5RC6RKvbDVm2uXfbHx7\r
- 5IMceezDHHkC8PZRLLt5ynb5zzvb5Pb3tsj7a7fiTAny/Q4kqv77DYe0/6CmnxzRvZ267puafvLWq0uD\r
- gDkilRcusLkjKZg+DIp1oR9sK5JE2FuBU8vZNnjS4U7Fvo3XX3SWmpicY97379iMzeBO15gI4RLW6L7M\r
- lvXbcqUNJPkkhFudZQVIqSHQ0vUjXlva9YqXQmMXspKo7ZppV6PLDpxTQvXnjSBdm3ijSZcNaZQ4l7Gm\r
- e7hIl93J2KBGyT4OuZJHAeV77/vb5dYp2+TaSVvl0gmb5dx3Nsm/38qSf47NknJDM+WYwZlyz9RNkrEF\r
- wvwW8v0GePa5wKjyWbbq+cD67yfrl0rnhtXVpYduvuy/paH++wm4DNgcknBMHwbFutAPthVJAvwFexvY\r
- NnLSUTsRuPWK89TYdo5x37FqAT4+p2v8EjuysyNad9IA6GG+u/NypffyPNVwxu5hDSAiLV1TvKZ0TfHG\r
- SrtmmUELK1YXMpt0iU26RUm7JnxMM8i34xInpRZFuoTSZWNaqZUuoGSr4pZyfRIwyfL/lOzd72+Tm97b\r
- JldN2iKXvrtZzoFkz3x7o/wDkv3z6Cw5Dfx1dKb8fUym/GNMlpwBAf8dt2mQb9lhmdJo7mbZw/ovyw+J\r
- 6v/L+i+nn/zpW1k7Y6LUfvohVXq765qLS0P65dy/Np8kFK8Tg2Bd6AfbiiSYv4NsYNuwSYc7D6drvOq8\r
- 09WYdjVd449saNiXmDpuaJhvtnz/cY68tZYCZO0xX+pBPBQtxeuVbiLTLueZLS1pV1Nb/43H8ofCm3i9\r
- 0o0lXk5HSXk/OzMH0i0sveJG9dH9MFsN1nhsBgQLHkeiZangQazfXVMdyV49cYtcDMmeO86R7F8h0r+A\r
- v4G/Q7j/GLtR/vXWRiRcChh/Y5nmdHU/gIB/DymnDcyUv47Kkn5LtzjTT+7LU/teQuq/X7nTT37zsXw4\r
- qr86blj/ZTe0J+66wXpsFRMfghOAzS0JwevEIFgX+sG2IgmEk2WUyMTk3HHUdI3nnyGP4tTpvcG95Gd3\r
- bLuarvGTBCRct3vYr7idl5WrGrcem+FIirLVaOn6Ea8t7ZriLdSFDMTqQmaTLrFJNxFpl9LV6MdwXdsh\r
- +QZNuywv8PFMu8/OonSLP+kWSDYnJNmqgMvvx/rcAcne+N5WuWrCFrlg/BY5G0n2DMiUYv0/V57/YvkA\r
- y/4BTvdA8VK6LC+Y4iX6NZSkIetKwzMlbUCmXDl+o8zO2IYffCRWliASUf9lAlbTT/4g3+VmycDOLVTj\r
- M0tzJTz8mMHtz8DmmCJj+jAo1oV+sK1IguAsYraNmFS4c+jpGm+/8nzp266JfJuTiY/6g7reWcLquG73\r
- sE3bc6Xt4nx5FMLlfLUcBMFrnMUSr026kcQbKe0yATbFqTznZGAXMpt0iV/pEpt0iVe6sdJumHzxHP4o\r
- sUzAdY5PurlJl64SLOAEN1Uh2cchV4qWqZbLOTjjNkj2+slb5cqJm+WCcZvk3Hc2ypluTZap9e9vbVKC\r
- pVCZcDX/BhQsiSRer3T5mpSuAtIlLD3w9vihEDAScNVpm2R7NhIrG9++5hmcfZ/1DeX7GTj0FY6Zg5K3\r
- Yr60rvWCmvuXpToeXyUkYA47Tkrd1/RhUKwL/WBbkQTAeTltGy9pqJ3hzusg2wvkugvPUmPVOWZddZ/5\r
- ATsRd8hE1XH35sinO3Kk34o8eWpmvjwzyxGLli5vbeKNlXZN8cZKu1q87DfLLmQ24RKbdIlNuolOuxqu\r
- Iy8vz+3ChE5iideU7nNJkK5NsrylZHlZn7unbVONXtdN2iKXT4Bkx2+ScyDZf78NKUK0FCNrsGdCmmdB\r
- qmeDs95G0gWmcDVnAJt0SbQyg1e8IQFj2R9ZfhiUKRUh4RbzNsu3nH7y+7zE9v9lSe6Hr2XF1HfUjHxX\r
- /fd0NUNfCcmXgy7uBjbnxI3XiUGwLvSDbUWKSGdg22hJgzsBR5uxU3i1h++UJZPGuL/YCZquETh13Bw5\r
- +EmOTFiXq64AURXSpVAoW4qXt17xJjLtUkZaupQS/8/yQmlOu4TbhnBbsfeFKd/ikG6BZJ0ES8mybEDp\r
- 3j99u9z5/ja5WfUs2CKXQbLnQ7L/HQdhUrBACRbCVYKFfP8DKFovZyrxhgtXczrQSdhLrDKDTbysFRPe\r
- d8pIpN/+GfJP/H/kiq1O33EmYNZ/LftyIFT9lyW6Q/LTlztk4oAeqtvZNeefWZLTTz4EbO6JC9OHQbEu\r
- 9INtRYpAO2DbUEmBX/rDN3O6xjPlgRuvkPH9usuP/JVmHffrBE7XyGGc2JkXb8yFTPNwwObLS5CIFq4p\r
- XZKMtEvMtMvGKs6HW1pruxqmXb2NlHwBt0FbfAabePWPSrzSVZKFUHU9VvWNxf953314rTsg2RunbJVr\r
- XMkyyf7H7V1AzqJUAdMtBWvDJl2ddm3iTVSZwSZeJd8x7AmRJeVZ/x24Qa6auFEWZW5zup4lqv5LAau+\r
- 7j/I15x+sq0z/SRn7iuh+u/DwOagwJg+DIp1oR9sKxIntYFtAyUc9SVzmO+l7Hd4rhqD/sXGlfg4EO5+\r
- d5ivbecJQKiO+3WObMvOkY5LKNw8yCBPycQrFC3dWGk3knhtadcUr60LmZ5z1yZd4le6xCZd4pVu0LTr\r
- 3U6Ey9nH1yte9dkgXQ4zfnF2dOmapQItWZYK2F+W97Mee7tu9IJkL3GT7DlIspQrBcr6LKX7n3GbVK8D\r
- zX/VbbhsTWzi/XeMMgPTrk28tjIDiVZmYI8IU7x/g3i5jPwJpA3JlPTBmfLcB5skPyfb6f3ARmDPPh4Y\r
- Vf/FMfHjXhxr38uWRTOk2avPqMEXvPwVj8tiFjAvjmBzUSBMHwbFutAPthWJg2eAbcMkFP3F8kvmqLOG\r
- LzyWnOka3Toup2scuDJPnpiZhwM7T13DrC4SL8XhlUlxp12+1uGWdk3q4PU4twRLDmHSRdKtBulSnKy1\r
- eiVLuZqSfWD6dlWPZaPXDZDslRMp2S1ygerC5SZXShQoqUK+54Hz8TcxhathmSFo4o1WZtDi9UqXOGWG\r
- cPGyvssyw9+ATbyFpZuplrObGsX7Fzznd6Mg4AGZctKwLGk/f4sc/Bj7tK7/JqIBbo87/eR+Z/rJFx68\r
- XXU/Y8mPI0Ntx28S+BGcD2xO8o3XiUGwLvSDbUUCciOwbZSEQuFyukbWcTnGnGPNOeZc9T1M6HSNOfIT\r
- dswpGbmqdvowUi4vkV4b0q0DtFRMiRRn2qWkKKsabhcym3SJX+kSm3SJV7qJSLt6e9XF5ya8Npyq+brS\r
- fWlOrtwLmT7sDqXVDV4ULyWr67HXTd6iehZcOmGTXPSuI8z/QKjngv+O3wy5OmUEQtF6oXTPA17pEorX\r
- Jlxiky7LDJHE66fMYKvvhtIugUyji9dJu6cZ/NldVpnlh/4b5Ay8zjurtuEsLtcZgJGo8oOafvKQ/ID/\r
- v927i5r3gaU/zvRXTOl3N/gTsLnJF6YPg2Jd6AfbigTgH2AvsG2QhMAv75Fbr1anM7yY38geHeQQv3B2\r
- D/vm48TVcdUw3xxZsTlXGizIkwch3BcgsNpIuEy6pngjlRlsadcUr026kcQbKe2yJ4N52Xa/0iU26ZZE\r
- 2lXbC5+b4uUtf0y6LNupfuDug1yZdHnrSHarkuz/KFkI9vzxSKMQ439xewG4EBK9EMuZcMPAcsLygk26\r
- xCkpeKXLW7t0SSTxRiozkEjiTWSZgX+HiVeNgnNgCj6G3c/6Z8qNkzbJmk04flj7JZbjITBMwGrO6kPy\r
- edZK6dakVmj6SZYEi0HAy8FRwOaomJg+DIp1oR9sK+ITTum4Ctg2RJHRX5b+Ajld4ycZS7HKB9UYc1VS\r
- KGJZwazj8lLcXZbmyUMz8uTpWY5sTSheLZVCEnGxiTdW2jXFa0u7NvGyd0DQLmQ26RKbdIlXuolMu5St\r
- Fm8DfO5WSLpPz8hRpYJrIdnLVblgsxLq+ZCgI1hHshdgGZcz5V7scqFXuj7F65WuI974ygw24ZLiLDOY\r
- 4v2LK10KmN3OOBz5VMDuZ8cOzpRXZmyST/IpTNZ/c63HRyAoX9yqmf1+3Scb502T+s9XVQOYOAiDx3OS\r
- BTwc2DwVE68Tg2Bd6AfbivhkBLBtgCLDIYqcMYkXl+TY8YxZk0V+2edM2chTpCIKVw3zdadr/HZXjgxf\r
- lSePz8yTRyDd6q5oORqMaPHGSrtBupCZ4o2Vds0yA0/Hzcu2+5UusUm3JNMuaYrP1ASfh126fj8yU4ni\r
- ciTbiwFlSqleYkDZUrpe8RaSLoFgiVe6WryJKzNQsNHLDDbxJrrMwNKCTbwU7h8A5Uv4uJPZ/WzABqk4\r
- eIN0nrdJfuaACQr4ywQMwODZ6B53+PG+z2TWmIHy1D03Od3PbrpSHk/u8OMawOaqqHidGATrQj/YVsQH\r
- zwLbBy8S+heRo85YpJ8ypDdOh3gF1QRO1+h2D/sFtx9uyFWyYlnhJZzmmsI1pWuWGQpJxKU40i4b1Sis\r
- wz3tshtcC3yWmvPzkHC3yjnjNsn/jd4oxw7cIKeNypKLkXavVBPJhItXS1eLl8uiifdwLDNE60YWtMxA\r
- +Wrhmvx5dKZqgDtuQIakvbZG/jk8Qyat2oLjgvVfCDhR9d9vOf3kITm4a4sM7NhcjXxjF7QkN77x8mE2\r
- Z0XE9GFQrAv9YFuRGJwFEj61I78MNbfCeadLoxefkE+zVmD19DDfBHUPc+u467blSrOFeUhaefLsLEgW\r
- AmBjFbGJt6hpN5J4bWnXFG9YFzKIirVQdiHjVSb8SpfYpJustEvMbeSlET8bPsdTM3Mg0M3y73cgUIiW\r
- 0is/NFOOG5QhlYdtUFJjXffyCQWCNcWr0+5FXuESCDbeMoPTxcyOV7rkcCgzmPwJ0v0znvdH3FYevF7K\r
- D1ovab3XSdrra+WG8ZmStXmbI99v8qzHUSDccqAefrxxwXR1HUM2viVx6sl14Ghgc5cV04dBsS70g21F\r
- YpDwScxZWuBVUDkZx/BubVQNV40601+e9wsNiO4exktqd1+WqxLu4ywrQGJauF7x2tJuJPHa0q4pXpt0\r
- I4k3WtrlVStKoidDosoM7D7WEJ+V/XPZf5ZJl+LUnDI8S8oM2aA4cXCG/HlUppLu/ybqZFuQdrV4o9V3\r
- vdLV4o1WZohU37VJN1qZgVCwtrQbrczgZ7SaKd5YZQaveE9j2sXzWNqpAOlWBBUg4OMHQsA91srRvdbK\r
- q9Oy5OsdbvnhqwTN/6CufnxIvt+9TdrWekH1Tnro5v8la+azN4DNXVZMHwbFutAPthWJQh1g+6Bxww3P\r
- az/ddsX5ModX9MWXw25iCSkruN3D9n2cI2PX5MiTM/PkAUj3ZQi3JvCKN1raJaZEijXturD+HGnAhE26\r
- xCbdIGk3UpnBlK2JuY0IRcxt1HLxTrx3nlw1aasabHD+eEe2FCfhJOCnjdooZQZvkApDNyD9bpATIF+d\r
- fi+HfC9B+qV8/ZQZbOL9rZUZ/uTK1iteJt5ThmM7Q7aUbzkXSvi4fki/3ddK5QHrpc/CTfILj6H9+c7w\r
- 40TUfzn4Agzr2lolX3Y/S5J8rwU2hxXC68QgWBf6wbYiETgT/ARsHzIuuMFZ82HaXT93KlbnBzUuvKgp\r
- N9Q9DDvLok2UUq7cM53zK+Qq2ZrYxFva0q7uQhZ0wIRNusQmXWKTblHSLv/faKFzEc7HZ2Qr2Z6FpKtl\r
- a3LpxM0Qz6aQeDU6/Z6G9Mu0SwHrtEsBR5Ju8PpufGWGWKPVvNIllK5XvLEmxTHFa6bdwGUGcBqeW2Vo\r
- RmHx4v+VAAWc3hcCfm2tnD1ivcxeu8XpepaI+i/lq4YeH5T3hvaW6yDf+5Ij3zXA5rFCmD4MinWhH2wr\r
- EoH3gO0DxoWW7j3XXCwbF8/EqvykTkeKIt1Q9zCwJTtXuizJl2dnQlhKTLkgD+KJLt1I4jWFoqUbSbyx\r
- 0q4pXlvaNcXLui7FS9lFKjPYpEts0i3OtNsUwmXavXPqNiXcczwp1+QSiJfz2DLpElO+TvrdIJWR0jiP\r
- AgdOXIb0y+dFEq9Xulq8xVZmAEF7MxRHmUHVd/EjVmmwI1rWeMsa4tVUwv/LDIB8e65BAl4jd767QbZu\r
- hTQ5+m1vEeu/lK973bf3hvdVyTdJ8m0JbC4Lw/RhUKwL/WBbEQt3AtsHiwtuYJYXeGUIR7o/4pe0aFeD\r
- UHVcpNzPd+TK0FXOVSAI5UfR8TSdPRdipV1TvEVtVDOla4o3VtqN1IXscEi7vOV2ab5oJ9Y5V0mSsjwf\r
- UvTKVkNhXjiB0twsJw3PlLJIuaZ4Nbr+S7mw1HDZRGdosB/xJqPMEK1hrUTKDIDbRpcZzG5kpnhPHZGp\r
- Ui3R4mX6NcVLykO8FQeukxP6M/2ukWN7rZFGM7Jk326j/ms5Fn3Buu/Xu3DsH5LJw/qqnkwP3Hhlohvc\r
- eIZ+OrA5LYTpw6BYF/rBtiIW1gLbBwsMpcvSwk2X/EeWfzgRq/BzkaSr67g/qGG+ECbk8uws5+Cn7LR4\r
- KQXWdm3SNcUbK+2S4kq7hI1qfM/DJe02XsiyyA51CRwOfmCKjJRyNVqa7N3wh5GZqrRgE2+FYUi/4ATI\r
- twoE/W+89qW8tA6lzdeAYElxlBn8TIrjlW4k8SaqzKDru/YyA5c7ZYaTPfVdm3jLg3IQL+VLKkDAx7y5\r
- FgJeLSfj/wMXb1b9fotU/w3J90d5u99rqkcTR6kmWL5vAZvTQpg+DIp1oR9sK+IhYVeS4AZlSyaH/74/\r
- eiDeHkl3T3zlBbOOu2JLrkqJT0G4HNWlhesVIMWqSw026ZriLRWNapAub4N2IbNJl9ikS2zSDZp2uU1Y\r
- y60zP09unrJFCYvDe3XPg0iEkiqgRP8xhg1skcWrKYP/lxmSoWTC1+FzI6VdLd5ElRlISZcZuJwJl8OB\r
- tXijlRl0fZe3keq7YeI1pBuSLygHAaf1goC7rpELR2XI4oytIt8h/RLLcRoTypeXG/p1n/Rq3VDJ1+aO\r
- InIVsLlN4XViEKwL/WBbEYPygJNQ2D5MXFyDDdu/Uwu8tTtnbjzSZVnhqxzJycmV7kudK0C8MscRnCk+\r
- E0qPsqTEIonXlnYjlRlsadcUr026kcQbLe3qy7b7lS6xSTeZaZfryHLI87NyVGo9652sUM8Dv2mXXAJ5\r
- shZcDonWW+f1ipc46TdD1X451SPrvhdBsnoGMlO6xVVmiDYpDmWcqDIDCUu7IGaZAbAbWcUY9V1K2Uy7\r
- Xsr2XyfHs/zw+mpJ675aHp64QfJ5+aEDkG88lx9izZddSPd/IY2er6qCWYLrve8Dm98UXicGwbrQD7YV\r
- MWgGbB8kMNyQ7Kfb8LlHnVnF9gfvMuak3Gz59uMcGbWaKdCp47J/azTpavgYCvZVEC3tUrxaKjbpmmnX\r
- FK/3vaKJN1baZaOa6kJWitMul7G0QDhzGCev4fSLZq8Dm2w1pnTJRZA2RVkFQrXWeQ3pmjD98vFMe0y8\r
- fO9kijeRZQZSnGWGU0YU9N+NVN/l/23CJRRyGUiX8O9j3lwjad1WyfG910jLWRvVLGVsgLMdv1GhfJF6\r
- P8veIFVvuTo0v6/NJXESce5emxf9Yl3oB9uKuFQAnwLbhwgEN+BdV18sj9z8P9m9ebXawMGly3pQjmRu\r
- z1Pye5qXT8ctZWYKLxqUINMZG9qKknZjlRliSTdS2jUv7ROahawUp90mWE9us+vf2wIZZamkqaVLbLLV\r
- eKWrYb3295CDtc5rka6mHGD6ZeMcUyffn31+tXjjKTMQm3jjKTOQ0lBmOInbi4KFcP3Wd02YdrV4y/Rf\r
- 6zBgraRDvGmdV8s/hqyXVZu2Oel3D47dIOmXZQf5QbX9sA2IZckEyjdi6vU6MQjWhX6wrYgLJ5ywfYDA\r
- 8NIg7DIy851heMsfA9eC5At8IV/myEdb2VK+Q15CyqXUTKn6hc+jNJh6I6VdW6Oali5JRtolZtplbwau\r
- TxDx2qRLbNIlNunGSrv8m3MtcHKbZ2bmQJSbVCOXHtigpRs07WrYrYyJzlrnNUQbCaf2u0EJSKdfXg04\r
- cZPiOGk3kngjlRl0fdcr3WhlBlJYvJHLDFq8tjIDUcOE46zvagrE60rXpSzQvR/SXl8jw5dscno+BJl4\r
- h+L9khPsHJK+HZurem+CU+/VoJDrTB8GxbrQD7YVcckEtpUPBDfc9Rf+W9rXf9m5SkTAuq6S7p5sWbB1\r
- t9RasFtqQCTxSpfwuUy9kcoMRU27+j284rWlXVO8ZpmB0mVDVaQuZDbpEpt0E512OSCC4r1v2rZQacGR\r
- bIF0iU22GptwNazzngFJBSk1mFQEZYdlyjFDMqWSm34vdVMvhyiHS5e3hYWrsYk3WpmBRKzvJrDMwP+H\r
- iRdypXQpX1O4JFRmAKzvxuq/SylHSrukUNoNsU5O6LdOTqR831graV3WSKc5kC8b3YLK9+AeOfR5nlR7\r
- 6I7QJeVtbomDMaCQ62xe9It1oR9sKwLuB7YVDwQ3GC8F/fBNV8rHLDH8/G2gEoPqKgbxLoJ0my/5WGrP\r
- zQsTXLxQiJSplm+stGuKN9lpl7DMwPcM0qhmky6xSZfYpBst7fKHqMkiZ9jv9ZPZayFLncZr6SYi7RKW\r
- Gti1qxJEy0a2INLVlIN4Kd/jhmbK8YBConiZgMPFm9gyQ7T6rlNmCBdvvJPixFtmOGUEtg9FC4pa3/WK\r
- l8KleEPy7QM6rZKmMze6yRfHtF/5st6L1Lvkw4ly8yX/UVezsPklDn4B/wRhvvM6MQjWhX7wroQL6yG2\r
- FQ/MteefIeMH9cRbHQpUYtDSXQjpdlrxqSu9xImXDXKR0q5XvMWddnnL3hcvWcRrky6xSTcRaZfUZwMa\r
- EvgTM7JVTwWKkbI1SUTadYC4IcjfIa2yZFAU8ZITAcsPvxu+QcmR66rLDvGUGaKJN1aZwVbfDaVdAolG\r
- F6+TgineUNoFfssMSanvavG60g2TL+u+XddI78VbHPmyv6/lWLehSg6/fCedmtRSw4oTmHrbgjDfeZ0Y\r
- BOtCP3hXApwBfgW2lfYNNxSHBFd/7F759cudIt9/5rvEoHov7MmWVdm7pOfqzyApJEBIkTIzJVcU+FqU\r
- KlOvN+2WZBcypl2WQkpLbZelBX72u6ZuU8Jl31zK15RuotKuAtLlZDiUSdi8DR65RsMUL/9m+aEca5t4\r
- HQqK4uXVLEp6UpxEXuLHVmYwxfsHUGWIU9+NVGZQ4rUIVxOpvktM6RbId60j3+5rZfxqyPdAvv/wxZID\r
- zpDz1i+VB2+4XA0ptnkmDraDMOfZvOgX60I/eFcCtAC2FQ4EG9RuvPhsWfDeWLzNQf/SJV9my7b8HdJ/\r
- 3WfSbskuqZOgEoMJ5cjUS+ky9cbqQhZJvN7XjCZeW9o1xRurC5lNusQm3aKkXUqYPz5NFzkXn7x64mac\r
- kmepJMrJyXV5QZOwtIvXJ7yAJS/OmAjxkkpYxlnO+DplIR92qTrrbTa+BRs4UZrLDPZuZAVlhlNV/90M\r
- R66ueHlrSjdamYFESrtcVli8TMEQMl4zresKOarzctnAvr7sauaz5MARrTxTHtitjTpzTmDq5RQIIeeZ\r
- PgyKdaEfzBVw2QBsK+sbbiBeK63+C485MxHxopSWDWuDSXfvx3kyIuNT6briY5V0vYJLFBQkhUrxFrVR\r
- zZSuKd5YadcsMzDtNsbjSjLt8m+WFhriLKPqh9lOMoSImHIpXUeuBYSnXbtwNVbZmrji5WtRiBRlaCCF\r
- IdZYeBMvxWtSTr1mhpIWP9t5nuRrky4nxYnWm4GCLe4ygyneWGUG1ndZYog2TJj/j1RmiFrfLSRdpF2C\r
- 5xzVe5WkdVkiaU0WykUD18jPX+X5H2TB1Pvj1/LxplWqKyqvMm7zTRwMACHn2bzoF+tCP5grAK4EthUN\r
- xKO3X+uk3Slv4S0CpF2WGL7Ilg83fSyvr/pUSagehGjKMpFQkLxV0nXFa5MuKY60G60LmU26xCbdoqTd\r
- RhAut8OtU7aqlKsSKERI8Toj0cLFWyBd/t8uXGIVrYkrXaKuHAxOMeu8EKZftHjLRBAv4ePKDM2Uk5AE\r
- KU519eKo4k1smSGe0Wr825SuWWZg7wVTulq8TLssM3jru8QmXpt0SdD6Ljmq50qk3aVgmaR1WCRpjRdJ\r
- rQ+yoIR8dazbHODFSb0HZBBSL2u9Nt/EAccnHAdKjXhZeLatqG90bbfGUw+quXV53SXbBvXilBi2y4bc\r
- ndJ77ec45d6phGjKLRlQlEyz+vTaJt7iaFRj2g3ahcwmXWKTLrFJV6fdOlz3RTvlhdm56pI7lC6FqoVL\r
- +H9TumbatcnWxCpbE0O8hHXeP48yyg2uLGPBYcQ67UYTL6kAsbPxjY/lSDA2thGbeEtDmSGeuXd5+3tQ\r
- XPXdE/uvV/15j+qxAkkX0u0G6ZJOiyWt9QJJa7NEFmRtE06u4z/17pWdG5bLgzdeKQ/ceIXVO3FwHyg1\r
- 4l0NbCsZCNZjpo7sj5c/5D/t7uFQ4FwZteFTab9st0qgptiSDaVb0o1qfM+SSLsNFu5QPDR9u1xA+SD1\r
- mcLVFEfaDYkXr8lUGDTxesVbHtikSyje8qAsOAGP49V32YdYlR4gUy3dw/USP7rM8DvWdylaEKm+G0u8\r
- kdIul4VJF7dHvU7pLimQrhLvR5LWkal3vlzRf6Wa09fvtJLqskG/7pPXWzVQ8zgkqNbbC5QK8f4VFPkK\r
- E7w68NP33CTfZGfgDOEL64b0otIuxLt4227pvOITJMw8SK74xEthsieBKd7iTLssMbRA2qVkiyvtVgeU\r
- LruJ8f6bpmxRKZen+N6r+9qkm8y0S/i6FF6ozktR+sAr3gqADWvRxKth+i2HWyZI1n6JI97Du8zAy/xQ\r
- rLHquzbhEj/13RMHrJfj1LSRywtLl8s6Q7wsN5BG82Xggizksh3+ejkw9cr3snr+NLn98vPU1JE29wQk\r
- G5QK8b4MbCsYCA4N7tO+KV76e/VLZd2QHijdrz7OkwHrPoXInK5jptiKC4pWy9eveG3S9ZN2vfMyROpC\r
- ZpMusUnXb9qldGvj/SjdZ2blqCv5ngvpemWrceQajpZuMtKuAq/LkWWsTapRbBSlD4oiXsLnMf2eNCJT\r
- zoQ8WXqIJt54ygxBR6txeTxlBqbdpNd3sUxJty8ny4FkzfKCprsrY0qXJYfmC+XP3ZbIvk8gVJ9XM5a9\r
- u9Wo1zrPPSq3X3l+olLvf4DVi36xLvQD39ilP7CtnG/4S3TbFefJ8pmT8NLf+yoz6O5jC7fvlkaLdiel\r
- 65gfKE7Kz5Qu0dI1xet9XjTx2tIu0dJloxoJ0oXMJl1iky4xpcv/11u4Q/VcuH/adnVaTWzC1RR32tUT\r
- mfN9ODE65921SdYGSwvh4nW6kvkVr4byrYjbv0NknKqS81HYxEvB2sRb0mUGLd7fj8IPj1vfZeJNdH33\r
- xAEZckwfDpSAcG3SJToFU7wdIV7SYJ50n4GzYr+pF7Chfnz/11W4s/knDmoDqxf9Yl3oB76xyxZgWznf\r
- 8FI+Lz92rxz6eJua3Ni28bww7X7zSb50W/6xmofBK7bihrLV8i2uRjW+TrGkXX4WvCevxHHD5C1yztuR\r
- Swua4k675tUjLkISp4xUnZei9IFXvBw8EUm8NuGGoZ7PPrAQJkTKHg+c+8EUb2ktMxCmXdV/l6IFiazv\r
- clKcsnje0b1Wuz0XIkiXULxdKV5XuqTFQjm9xxL5hQ742mfq/XGvZK+cr7qVceYym4MCorqV2bzoF+tC\r
- P/CNwangALCtnG+cMkMTVQj3U2ZQaffrHJm/ZRfS3k5V2zWlVhJwUEVxpt02gFL0K16bdIlNukSn3Lrz\r
- nQa0J2bmqAEK0UoLJt60q6XrCNkuXGIVrRdXthHFi/eg6NjvliUEm2i9mH14o4mXy62ydWGttzLgNJOU\r
- b8URSJGQHuvOvIYcpRutzGATb3Fe4keXGXR9V5cZAtd3Q9ItEG/ZAWvVlSiOfoN9dGNIl7wG+BgtXUIJ\r
- N5ovby3KVKnX5gcvutzQoNoTqtxgc1BAsoDVi36xLvQD3xjc7q5I3HCk2i2XnSvzJnOk2n5/ZYYvsuWn\r
- z3Klw0c7IRpHYKbYSgomXVO8yUq70WYhs0mX2KQbK+02WLBDdRe7a9p21WOBfVajpVyNI9cCzBJDstMu\r
- 0XXeKpBHWZ8NbKZ4CQXrla5f8XJ2M4qX13erAPFy2Slu+mWf30jiTWSZgcsjjVaLNikOryRM8XJSeSVa\r
- V7y2+m6Q+Rko3bK8/lrPFZLWyYd0iU28rPU2WSC3Dl7h9HDYE7uHg+7TO7JnR7nm/DOsHgrI9+Ak04dB\r
- sS70A96YNHBXJG7Yv67qHdfK51kr4V2fvRmQdldtzZVnZu5QSdOUWknCdbGlXVO8NulGEq+ZdileDdMu\r
- +yq/ODs3TLqRxGuTLrFJl/D6c40Wcg7jPLl20mY5B6LQw35tovVSkmlXw/fldIZlONcCJRIDr3ht0iVB\r
- xVsJ4iVcztovU6jqXuaRLqGME1VmIGFpF1C8BWUGJ92GgHD/ROkCVd/1DBMOWt8Nky6Ey0nPVXexzhBp\r
- F49gI0Hx8tYUL2m7SNLbLJJNm7aI7Mu3OiIM9m7A2fTS6ePljisvSFTvhv/ZvOgX60I/4I1Jb2NF4oKX\r
- 6mj00pPOrEI4JbBuOAM1Su3LHBm+Ok+em+UIzJRfSUPJesVr3h9LvM0MbOJttRj/x30vQ7ovUbwGNukS\r
- m3Rtabc6YGmh4cId8tiMbIjS6Rplk2skHLkWUNxpV8P3onw4w5hNtF4SJV6iSw2VXelqnPS7QU6B2FhS\r
- YPkhTLyWMgNJTJkhE2m3oPHMJl5K9w+jN8ipI90yA2DKpXTjre8q6UK+6a+50uVoNOKVrA2Kl3jFSxrM\r
- ly4frhc56K+RjaFuz6ZVyjkJGkzxvM2LfrEu9APe+PdgurEiccH6bv9OzdVUbr7qu3ty5MDHOdISEqoJ\r
- eZhSKy0ES7t50pRApqZ4w6SL/2vaQLysab84K1y6SrxMvJ7Ua5Mu8UqXsLTAtHvHVKe0wMlg/KZcTdLS\r
- LmRqI5p4OahBza8AWcZCi5f1Xf5tky5harXJ1oRJ1yZeB4obr4VbplAmX93YlvAyA5ItywrkL5Arxasb\r
- zzS/H7VB/gjRngb+gL9PhXjVZdwHuHIF5ShayLQy0NKNVd9ldzEK+4R+7LkAeZrSTYR4my6Q61lu+Npn\r
- uYHzvnyB47HaE3LHVRdaXRSQ1jYv+sW60A9447PBOmNFAlP19mvViJJJw/rgJQ9aN5gX+SpbNmXnyqtz\r
- nGkHTeGVFlhyiJ1280KY4m2K+whTbTh56seGvDo7R6rNyoFsCwhJ18QiXOJNu7XcBjQO+71m0mbVB5Wi\r
- tIk1Go5cCyiptEv4/rzSRSVIxI98ddKNJd5oXck0scRLKrgC/p2bfinghJYZDOmyMe3PkOppQMkVULgK\r
- CPdPLky6vK/KEIgVAq2ItErxEoq3kgsFrATr3nopSwZlyAnso8vuYJ2AKd2g4mVd1+zZQFovlAqdF8O5\r
- 21St1+YKE9mTL/LD19K7bSO5/uKzrD4KyFCvE4NgXegHvPE14DNjRQLz8C1XqYtZrvxggnOVCcsGM3F6\r
- M2TLnCynvmtKrbQRUbxIq4TCbQw4mQ8l+eKsfHkBvDQrT2ri/w2xvOmCXGlu0HphLpbnyAszsuVlilej\r
- xMvEa6RewKs+OISLVwtXlRaQctk39+EPspUcKa2gKVdT3GnXK1sTSpmP4bDXWOWGoPM02GRLWMfl/RQv\r
- iSZeDUsPvGU6ZbmB01qa4o1n0AT/z9ergs9+9JANkob0mtYPDMiQdAixwrAM+T3e8w8QrUq7IzLkj/j/\r
- qS6VB62VSv3XQL5OL4TyoBL+1uIlNuFqyuE9ju+zGinXla7qwQCBxi1ed/SaKd72+H+LhTJnFa9U4bN3\r
- A8Ld2D5dEtXANtXrxCBYF/oBb3wH+M5YkcA8eNOVim1LZ4sc+sq6sUycic5zZMyaPHV5dlNqpQndyNbI\r
- EK+WbhPQEHDQwytImG0h0/7Lc2XM6lwZvzZXRq3Kkd5Lc6UJBFttZrbUmZMjzec7tFyQI9VnbYd4t8tL\r
- M0m2QsvXK+AC8RbI10y7LC3w9tap21QvAErwsgmbrVKNhSPXAsLTrl24GqtsTVyJmkRLuxr25+Upd1Dx\r
- +pmnwUY84q0MyoMT8fiTVfrNkjOBFq+fSXH+EpKuk3h52aK0QRvk/0Znyj3vbZQXZ2zEfrRJnv9wo9wx\r
- CY8ZmQERr5V0SPL3w9fLn4evkz/g9tQR6+V3w9Yr6TriXYNU6wjYEa8D068t7VaAoDnY4lh2F6NwKV5K\r
- t0jiXe68lle8pOF86T7bGUxh84UX9pqa8dYQufnSc1RvKpuTArDM68QgWBf6AW/8PCjSFSfud4vcn29c\r
- 4atHgxIv6LsiX9iNzJRdaUKJ17NMS/dVCPdVCHfwylzJ2p4jBz92P9dX4GvwJcBn/WpnjszKzJYW87bL\r
- 8x9sk8Zzt0vjOdvkhQ+2SLUPt0q1GWSbEvDLlK8WsCvhVyFfRZh885R4a7ulhWdnOTOKsbRwCYRL6SY6\r
- 7SajxEBsovVC8bJ2GlS8QYcLa+IRrwOeC8rweUipbBijfNl/N5R2CZZ7xUvp/hX8Yyy7wGVK+sANcu2E\r
- LBmzaqt8lrdd1KWwvskV+Q7sBdjXvszPlnGrtsjN7yIF914pZfqvkj8MWwPprpGTB62Wim+ukor9VksF\r
- UL4//u+KuFJ/JuG1SsTlceuVLrueHfvGSiehmtIting5bJivZRNv4/lSZ+Ia1bOBn8vmDBNeNHf1jEly\r
- 9zWXJOJ6bFk2L/rFutAPeOOii/eGy+XJe26Sb3M2iHz/uXVjmXAn4oiVDh85yc0UW2mC0iW6q5suL7ww\r
- M0+VC7Zl47No0SLBq4NDf0ZKmP/n/XtzZP8nOTJx9Tap/sFmeXLKRnlh2iZ5cTrZLNUg4Zcg4ZdmGgKe\r
- 5QiYdWCFR75qdB3W6YEPsiE+JzleSuG62KQai2hp1yZbE6tsTbB+XvykXcJ14agx9kQoR2lGIJHiZeOb\r
- tytZOHgdDxxkQfGy10MljhgD7NLFtBsqNXiky2RL6WrxHoXT+7/jOe+s3OLsU/tc0fJv7luf4pb71h53\r
- +ffOLF+jl2L79FsBAa+QPwxdI5X7r5QKfZZLhb4rpNybK6X8m6ulEoGEFRAwpVuO4nXly5RL8R7zOiTZ\r
- kUnXEK5NukHF6x02rGm6QJ4Yu1rN2yBf+Ghg+3GvrJ89Re697lJ56JYij2BD1La70Q/WhX7AGz8Hii7e\r
- u2+Ub7ev9y3en7EDtVtcesWr066mkZt0Kd03luTKAR4AEKqfX2iiBIzEsm3bdnlpaobcNW69vDA1E2TJ\r
- C+/jNBISrgYpV/sQEkYKpoBfIZDvK4Z8qwNeXp1liJve26J6LbAEoFKuBqKyiTUWpTHtEgqa8JI90VJv\r
- kOHCyRCv6mYGeMsJ1pl6KV/eslRC+f7dkC5LCpQt4cAH1nBvnZgpn+3IxpkjJOTnyrzcD7+EgA/skK3b\r
- tspfB0FybyyRk/oslYq4Ld97mZQlkHDFPish31VKwGYSpnjVkGJI9yiKkg1gXukmWbxPvRVAvEi8a2e9\r
- J/dcS/EWOfH+tsTLxNu+FCfeMPEiXTYGbDDr9lGu/MTEgZRr+2zRUEnl2zzZuytbGk9fJ7eMXSnPTF4n\r
- L0zJkOcp4fez5MVpG5WAKd+XkYAd+SL9Qrw15uSoRrwnZ2RDtJuUdClZhSFem1RjUVrTrobrcxonRo8i\r
- XrMPbyzx2oSroXhtgyf8ipfJV4uXVAZMwEy/FK5Kv5Ctakgbm6l6RKT1Xy+vfLBRfmGyxT7ia5JwD5Tv\r
- 9uyt8rveCyHOuVKl50Ip33OxlHvjI6nQa4lUhIAr9FkhlfqulIqQL1Mw5VtpIJPvGjmKo8uUdJl2QaLF\r
- 652vISXelHi9mGmX4q0+BzKG9D7difWndOM4MDTsNvMTbrvMXCM3jVgiT7y7Sp5/b608N2U9BLxBCbga\r
- EvDLSL8vuwKuDenWhHzvnroFIsqCuLLkMsgoJF5ShLRrSpeUlrSr4br8Y0z0Oq9f8cYaPBFbvI5ovYTE\r
- a0jXhPKlkDn44Z+QLuu57I7GpNtx/iandOD3emQRkEO7ZNLyDElr/aGc0HWOlHt9npTrsUAq9FyEBPyR\r
- VOy1FPJdJuX7rpAKfZF+IdxyuE3v4k5UrqWbFPHiNVLidcAbp8RrwZQueWZmvur+Jt/YP1MgeHrIDuNf\r
- 5cqw+Wvk5mEL5eG3lslzE1fJs5PWyPMQ8ItIwC9CwC8j/daetVVe+HCrXDeBE3RnyEWQ7qXvciSagylf\r
- m1Rj4aTaAkpb2iUc6swBCqzjkljiJRSsV7rFJV4z8Zqw9wMfy0EPJ+BH5PjBGTJ6xRaR71haKJp0iar9\r
- 7t8pVUcj9TafKuW6zpKy3eZI+e5zpUKP+VJRCXipSr+V+62Ssr2WS3pHPLYDUzIb09wGtYSLF3jna0iJ\r
- NyVek1CZwZUu026LhXny/SdYd9bdPJ8nLihfXnH123yZvmy93DZkvtw7arE8O36ZPDthlTw3eZ28hPRb\r
- Y/pGeWRyplz61jo59631csm4DXLJePAuZxcrLF+bWGNhSpdo6SYj7cYj3fPHOZyjJsyBVCOkXq94bdIl\r
- scRL9HDhKmHC1eB1LGjx6mQbJl3cT07i7Uik3P4ZUnlohszL3Cayj8Jx9gnrvhIE7lcHdsnyDZlyVIvJ\r
- clz7aVK+8wdSscsMqfDaHKmABFzpjUVSqfdSKdP9I0lvP0/S2s+XtE5IuxzgYMo34eIFKfE64I1T4vVQ\r
- OO3myTtreRqIdfd8liLBg4QJ5bsdsiojUx4YPl/uGLpAnh23VF6auFJemLxWbnl7lZw3YoVcOGq1XPr2\r
- Ornk7Qy55B1XvuMzIU4tXt7axRqNeNOuVbReIM2iipePp3TPpXzxN+chiDRhTiLFS8FTvP67kuE1cV80\r
- 8SrpgrS+GXLGmA2yaft2R7o+G2j9on7QkZ4v7z1d0hq/KxU6vC8VO06Xip1nSEXIt1LP+XJcl7mS1nqW\r
- pLWdg7S7AAJE4vXKN9Hi5d8p8TrgjVPi9WCKt968fHlpdp6s2OKI1/Z5igTly0a373dK7vbN8vzo+XLr\r
- oLny6NiP5Iohi+Q/gxbJBcOXyiWjVsiloyHfsWshXyP5Qr6XqvTLqwIHl28k6ZamtMtBIRQvX4ONU5Hq\r
- vFq8rO/yb5t0SSLmafBSEVC8hI1pIfFiOTkZKZej29L6rJfr8F1983G26ipm3ScSgPzwsdR6B3KtOUrK\r
- tZkoFdq9J5U6TZPKXWfIcW0h5ObvQ7wzIN7ZSLxIvR0h306UL0SYSPFSuinxFgZvnBKvgbfMUBfirTkn\r
- V3Jysd5f2T9PIlDDqJF893+8XWq9vQAJZaqc3meWXDRovlwAAV8E+V480iNfJl8I+FLI92JFMPl6066W\r
- rrPcLlxiFa0XSNJLUdKuFi+nYmRfXm+d19uHN5p4o3UlI/EMnvCK1yvd4wY7Sfdl9lzg4Jo4ey74RQ5+\r
- LIM/hNRqDZMTm78tFdpMkIqQ77HNJkpawwkQ7xRJa/WBpLWZKWntmHrnQ4KUr5F6EyleTUq8DnjjlHgN\r
- vOLlfLl15ubK5zuw3omq70aC6ffbHfLznlxpNmmhnNRpivyr10y5eOB8uZDyHbYE8l2O9LtKLh2zRtV9\r
- L3nHKT1cPC5cvn4EbEq3tKddwmXnvGOfGN0r3uIcLlxIvMCULkehpfXLkN6LN+P75ZkT5JJE6RI5sFsm\r
- z4foagyWsk3GSDnI9+j6YyWt9lsQ73jIbrKktWDq/TBK6vXUeYNKl3jFq+ZrSIk3JV4PZplBiZejxObm\r
- yBfsRpZs8RLKd28+TkN3ytj5K+RPXafKn1//QC4aOFcuHLxALhz2kVw8wpTvWrkY6fdiJV/gU75Oqi1A\r
- S9dZbhcusYrWBHK0ETjtUrSGdDV8HV5HzFvn9Yq3uIcLU7ys77J7GIXLeu5JbESDcCsNyZA5GVudei6n\r
- PkyydIkc+FjGzYHUXu0vx9cbJkdVHyxp1YdJep3Rkl7/HUlrjOTb7D1JaznNk3rdWm9nPDdp4sXrp8Sb\r
- Eq+JKd0G85l2wZxiFC+hfL/ETojUsmTterngjffl5C7vywX9Id9BC+SioYvlohHL5NJRK+WS0avl4rFa\r
- vhmOfHX6jSBfr3RLa9r1Spfw9XjZG2+dN5HiZQ04PvHitcHJ/L9bzz13bKZsy9kush9Jl41oxSBdIgc/\r
- ccT7fE/QW9Je7AfxQr61Rkh6XSRfpt4mk1SXM5V627mplw1tTL1JEe9y5zVT4k2J18RbZqB4a8/NhXyz\r
- i1e8LqrRbf8u+TRvizwwbLZU7DhF/vPmbLkI8r2Q8h2+VC4auUIupnyRfi9+ax0EDPnGKD04ci1AS9cR\r
- sl24xCpaE0jRhk2s0YiUdrV4Oe2id27ewuIt7uHCjngrIeUezykc+2TIY1M3ykF+j9/FlkmikUOfyrgP\r
- kWAf6CBpT/WAePtK2ssDIN+hklZ7lKQ1MFPvdElrOwvineuIl6lXiddTbiiqeCNNlJMSb3wcKeL1lhmc\r
- xJsrtedAvMVR440Ayw6/4BS11aRFcnKnKfKPN2bIRQPnywWDF6nSw0UjlsvFo1YZ8kX6NZNvqNHNmRjd\r
- lG542rULV2OVrQmk6CWRaZfw/rPf2SSVkShN+ZbYPA2chxdQvOVZWhiQofro9ly0xann7i2e0oIX+eEz\r
- eef9OZJ2d2tJe/I1SX++l6RVe1PSXhkkaTWHSxpTb6N3IT2k3hYsN8zwlBuSJF7bfA0p8cZHSrxJJlT3\r
- 3SETF6+S019/X/7w2nS5YMBcuUClX8p3mVw0aiXSL+RrLT048r1QUSBeLV1HyHbhEqtoTSBEG16pxiJa\r
- 2iVsbDtv/GZ3YvSCOq/ZhzeaeBM6as2VLn8EyoK0NzPkNNwu1IMiiqmea8MR72yItyUO8i6S/mwPSX+x\r
- j5N6awyTtDqjndTbBKmX5YY2LDd4ejco8YKEi9eQbkq81pXyxZEgXu+kOA6Ubo7Unl0ypYYwKN892DEP\r
- 7JJtm7PkxoEzpUKn9+WcN+eoRrcLhi6WC4cvk4tHUr5m3dcVL7gI6fcCCNiRL2c1Y+nBKUM4IrZLl1hl\r
- awJpekl02tVcMH6LugxOJPGSpIvXlS4b0pzSwno1f+6nnFmMUzUWYz3XRki8d7aQtKqdJO3p7pL2AlLv\r
- S/0k7dUhTrlBNbIZXctU7waveBOceG0T5aTEGx9HlHhD0vWIlwdUSYrXQL7fJQc/yZYmExfJSZ3fl/97\r
- Y6ZqdLuQpQdd9w0rPTh13wsh3wsg3wsN+VK6F4XEa5evVbQmEKYNm1ijESvtOvD9tqjrm5ldykzxRh08\r
- AWzC1cQUrytclXQhXVVa6LdeWs3brObe4NSfJSlcTUi8dzSTtEc7StpT3ST9uTcKyg21RkhavbeccgPr\r
- vK10ndfoVpZw8QLbfA0p8cbHkSDewmmXlE7xqvT7zQ414GLS4tXy7x7T5ZRu0+W8AfMc+Xrrvki/F721\r
- Xi6AgC+AgEPy1YSJt7B8rbI1gTS9BO4+Rqyi9bIZj90sZ72zSUlUT4yeKPGSiPM06JQL+L4cEPHXkRmy\r
- UHcVg3hLg3SJ/AjxToVIb28qaY90kLQnu0jasz2dRrZXBkK8bp1X9+llAxu7lYU1sHnF65GvTbReCokX\r
- pMSbEq+msHjzpMG8UipeokoPSFgHdkn+9s3y8Ig5UqnzNDmjD0sPC0N1X5Ye2OXsojFr5QIlX4gX8r3I\r
- TcCOfCFeEiZfR8BW0ZpAmDZsco0GpWsOlrCzWfFfcB5wJkZ3yg2+xWsINhJMuhRvqCuZK1ydco9Wo9DW\r
- y8NTstTcyqH5FkqJdEmBeJtI2sPtJe3xLpL+zOuS/mJvt84L8dYZ44i3GcWrG9i84jXkmwjxcllKvCnx\r
- Ent91xEv+/CWSvEasNcDJ0V5c+Zy+ctr0+X3r8+QC9RoN6fL2YUjOcnOKsh3jVw4dp1ciOR7EQQcLl9X\r
- wB75KpHahKvh/R6SmXY1LDf8SU2MHi5eNqwlQryqzKDA8yhcoBvQKgzOkKFLtzjz57K0YPlOSpqQeG9r\r
- DPG2g3g7S9ozrPNSvP0lraZuYBvn9OcNiddtYDMb1yheJd0iileTEu+RIV515V+XJgsLaGrQbOEOabbI\r
- oTloYdDUBI9rAtTzFuRJ/bk5Uh/yLdFeDbFg+v0qX83DuiErU+4cOkcqMv32nSsXDVkk5w/7SC4YsVwu\r
- onzd9HvRW+sgXwhYpV/Id5whX1fAYUL1KV1ik2s0gqRdU7x/V3XejEJ9eKOJN1pXMqJHrVG0FC4bzyqP\r
- ypSj3Aa0GydkSk62O6vYHmfbW7+TEsYqXtXABvG+BPGq/ryueFWXMnfSnJB4PYk3keLl6LWUeEtGvD/j\r
- tuOSfKk1z5AjxKfFSPT/CYVYQMFziBZtY8D0qqk7Ly9Erbl5UhPwtvqcPHl5dq7iJfDsjBzFc+DJD7Pl\r
- MfDEB9vl0Wnb5O4pW+TeSZvk4zwkXtbwPJ+l1EABuLOc/Yzt22vGcvlXzxlyUveZ8l+OduM8D+5ot8sg\r
- 38vGrpHL3lovl0K+l0K+l6qeD+xy5nY7g3zP18kXcgyJNYZ4iyPtEtZ5z3x7k5t2w8Xrd54Gzp9bYWSW\r
- VCRIz+p2RJaa5EZPdHMiU26vtXJi/3XS5yOkXDagfVuK9wOXcPG2hXh1zwZTvO5ACibeYhPvcke8Zs+G\r
- lHjjI97E23pxnrwwO09qQ4yEYqwBKZJXQDXc9zKoNjtHXphZwFMfFvA4JPno9O1SFTwMHpzm8MD72+Xe\r
- qdvkHsDbO6dslTsAb2+ZvFVumLRFbgS8vWFiAddP3Ky4bsImuRbSueKdjfI/nJbv4iW2ObmJ57OUOj7l\r
- DwR24P27ZOvmjXLfiHmS3mG6VO4xW04fsFDOHPSRnD10mZw1fKX8Z8RqOXf0OjlnDIe2Zsj5+Jznv50p\r
- /30nS86DhBUQ8AXYDux6Zg628GKOilNM2BwirHThgVKngO2y1YRLl7DO+x9wEuTJ3g2meNVwYQjTmazG\r
- EagzW1imkitlWwGCZQ8GPrfM4PVSZuA6yHWtHP/mGjmu7xo5us8qSesCSbRZKjeOWiO527dh38Z25VlP\r
- KU25JmHifQjifYzifc3tUmaIl13KVKnBnTDHHESRDPHaRq+lxBsf8SZeXkH39inZ8sj0bHl4Wrbc/34B\r
- 907VOALVUKR3G9w1davcBZne9R6kSly53o6/73hvm4v7fywnt+Lv21z4960QMaGQb5m8RXHzpM1yEwR8\r
- DaRwHdLgYSNeA1X7hYSHz18lf+yBNNN6upR5fY6c0nehnPzmR3JS/6VSZeAKqTxolZw8eLX8fsgaOXXo\r
- Ojl12Ho5dXiGA061/zRyg5wGcf0Jp9ynkdHOdcN4sUZeNVejrqIL/gk4rFdz1tsFnIMfMsW4jc5gCFeu\r
- /3UFHErBIZx0S1heCPHuFrlwwhY5bcxGKQuhlqNIQVlQcXiWSrflh2RIuUHrpSykWgZSPQFSPbbPajm6\r
- 1yo5uudKSe+xwhEBhaDF0g10BE0Xye+6L5WxizLV987Sgm0bl1bkx88h3pkRxMt5G4y+vJHEa45eS4nX\r
- inWhH/DGJSNepIaXZmbLbYZ4NQ+BByHfApBiXZhk7ze47/1tch8ErKWsuWuKw93qtkDIFK+Wrh/xXouD\r
- /9rDVLyq9qsm29klX+7YKg0mL5UTu+Dg6vChnNRrnvyu3yKpBPlWGrgc8l0pJw1aDQGvAWulwpB1Um7o\r
- eqkEeImaKi48rSfslsXTfA0nrWF65DBeL+apPrtinQxOwt8nIZmy9wA5GfL8HcHfv8ftnyD6PyrZZ8lf\r
- wV/I6Cz52+iNDhDu6e9sxuM3yLEUKlNq79Vy1BuQao+VctTrkCpPa3nw6+5QNpRsXSlQJi0hmo5LpObk\r
- dfINeywczC/REWjxosQ7BeK9tVGYeNXQ4ZR4TX574n15VjZEyFJBNPE6sk2JtwhQwN9AIN/vlM0bN8qj\r
- Y3BQdfgAO/0MqdB7AZLvR3IyBHwy0u8pbvqtBAFXHrJWTiKQ70nDMhSVQBX3b0KR8rSeIjYFS7jMSwWI\r
- uCKoMASyBmVd+Hd5UG5whpRBSi3DW3VfBh6Lv/F/XhjyBPe2HO47Ho9LY2rthAO5M6Rgk2osQWjhtoZg\r
- wK2j1sjGTVtE9mN7lZLBEPEQTLwTnRpv2LDhJIn3dYjXO19DSrzxUWTxGtJV4o2Qdkkh6VrEq0oQEcR7\r
- exzivQbi3Xk4i5dQIJ/zlHmnkvCi1Rly5ygeXDNwYM2Wir0XIgEvkVMGLEMCXiEVIOAqSMAnQcBKvkjA\r
- lYauk/JMwMPWh+R7MqCMKVWbeCtDssRcXkXL1wMfR8kq3GWVXChaTfmhmUrQ6b1XSdobK3FA42C2iSCW\r
- HHh/G0ig1Udy3sCVMnPlJnVlCNmXX7DNvNvxMKFAvA0l7cE2pUi8+KHk66TEW/rEq6XrCNifeM20Gy7e\r
- Aukq8RrSVeJ1pesV700h8W48MsSrwXbnzs30K3vzZOHaDXLXqEWS3hkHaafZUqbXQqncf4lUhIArQ8BV\r
- KGAkYAq4oipBrJXKgyFhiLgyJEwBVxrKK+aGS1YnXHN5Aa5cDSoCThgeWobHaRlXCpOuc3tU79WS1hMH\r
- cS/IlwdzFxzUphQiyYHLOgM34Z4/aKVMWbpR9YOWA4dnWcFGIfFW7Vj84vVKN0y8rnRT4rWulC+KKt5H\r
- IoiXxCwz2MTrStchXLxh0v0tildjCvjrPPlobaY8N36JVOmJA6/jbDnq9QVS8U38v/+yUANcBSTgipBw\r
- ZZYhIOHKTMGA9eBKQ5xaMDlJC9P9vyldlXZNwbpQuqHleExIvO4ylhzK47XI0X0gXZYYmHZ7Af4dSbwm\r
- 7SGQ5jjQ230k/xu2WqYup3CxHShciPdIEK7GK950NV9DAsVrE62XiOLFbUq8JSze96KL10y7keq7XvEW\r
- SNe/eB3p/obEq9ECZgni23zZtW2zdJu1Wi4ajAOv61wIbZ4c1XOxlIWAyw5YIRVwSl4JEq7kCriCBvKt\r
- 6EIJV3SprAlJuEC2JnxMBY0rXZYjKF7VO4G3eO4xb64pkK4JD/RC8oUoOkIaLXFwt1gklbovlecmrJVV\r
- GZvVj42q4x5hwtVYxfukO1HOyyUsXt6npZsSr3WlfJFI8Xp7NBRvw5oj3psN8V7jivewblzzAwXMARiQ\r
- L0fA/fRptixckym1p6yUswfi4Oi+AAccDsbui+WYvsuUgCtCwOWRgp0kvAaidUoRlLCJljCFTEKCdXHu\r
- 04/n/530Sxnz8WUHU8YZclw/V7osMZi8AXhQs4GNtIUsmi+CcBfJ8V2WyHXDV8qbczfIl3nuPLnfHzkl\r
- hUhEFO+z7gxlNbR433auRFFs4nV7mqTEW7LivR3iNdOut0eDiSnd4hTv1b8F8XpQI7T2cQa0fDm4e7vM\r
- X5slzT9cIzeOWSan9sXB8jrE1gMHZXcclD1xIPVdIUf3XyXlBq6WcoPW4BYpmODv8oPXKlgjruTeaiqo\r
- ZUjJoCKoYMBl5QYByPe4/pAuD1rSw4UHMnsvsN9tG6wLUm1am0Xy+55L5c5Rq6QfZJu/daszp4LqpXB4\r
- 9cUtClET74sQL+fkrVNC4mVjaEq8pUy8RtqNJl6zvhutR4OWLondo6GYxcvExdN87mylOH2pkXAQMFv7\r
- mRR3ZW+RaauzpPuc9fLE5DVyzdiVctaw5XJyfxxQvUEvghRKmEZ1OaCnwRurnIYxLz0NeriP647XaA8B\r
- EHYdIxBuWQj/7/1WyGUjVslj766VHrMyZOHaTfL9TnxXPIj344eDvRSwv5XW7Suf47snlvuKQkzxvjK4\r
- 5BJvSrylT7xausno0WBKV4nXla5XvDdNKhDv1ckWL7t4ff8xhIY0htN76+NKC1hfHhjqAKGIKTXyeY58\r
- t2ObZG/bKss2bpbpkN+YZVnSf1GWdJqTKS1nbpDaH2TI/ZPXy0PvrZdHp6yXO95dJ9e/s05uGudwvXv7\r
- wOQMeXhKhjyI28dx23TGBmk0bb10mpEhfeZtkFFLsuT91ZtkWdYWycP7fb8D3wv2p9APA9nrrFNp/jH7\r
- 9ZNsbMed8uv+T+QX/G19TBHwI970miMlvR7EW5w1Xg6gIOZ8DSnxxkcyxOtNvMXTo8Ej3gkQ77jk1Xjl\r
- 4KcybsYc6ThqosjPX0Aeu9UBaXtsaUUIZYxtow4cLWMTLjfhMnbfYk2Z0tTsAZSm97HkOy8QLO/n+3Je\r
- Ys96lWo4n8ahz+SHr/Kl/aBxsmH1SnzGXfbHxolf8R5V9y0n8XLkWkq8gbEu9APeuGTEi9uXZ4aLN56h\r
- wl7xFqRd/+ItkG4xi/fXL2X45A8k7cpqUqPvGLw+To1xwBxWEgmAkrRGSRfCDMPzGGB7ncMWCvcLyEW+\r
- kk9zNsqFNV+TtBvryNZ1kA6Sr/U5cRJIvI0mIPHygpfG7GTFIl53EEVKvPFRFPHeFlG8jmxjiTexDWtb\r
- 3foumOiWGpIp3p/3yJiZ2NFvq4sDpK5c0KCn5G3CNvxlDxJhfukvPaTwD0sL+3bjx3aPTJs9Xyo92lLS\r
- Ln9Fyj3WSnKz1qlyk/V5cRJIvA0h3mZTJNBcDTbReokkXXYp42umxFs6xWtSSLoW8UYbKhyPeG8EVyVb\r
- vB9iR7+rgaQ/00bS7mkoxz/RSkZPm4lT0U+dgzEl38Mb1sVZx//pC5G9O6Re37GSdlMd/Ng2kLR7m0q5\r
- J9pKbmbJize96RRJb4mzr+ISrzlfQ0q88RF3jdcj3gLpJkK8BdIlsYcKu+JVZYbiFm99iLctDor2kvZo\r
- CxyQjeXJniNl3yd4T9Z+uTOmBHz4wdLCN7twmH0lG9euknNrdJW0a2pI2gNNJa1qa3zPzaTcU+1Lj3hb\r
- QLxtZhcWLyWZEq8V60I/4I1LRLy/QLycFvLWCOI1ywzRxKul6xVvtPpuNPE69V1HvDdMKAbxzoB470bi\r
- fbYdgHifxwHyTAdJu6+p/KPO6zJ38RKRH5B+v9uVku/hAlMublXKhXg7Dcep/F2NJO1mJF2WGCjdqjjD\r
- ub+FlHu6Q+kSb+tZ7iXekyxevlZKvKVPvKZ0/fZoKJBudPFG7tFQAuJl4r0bBwel+xyE+3wnSX+xs6RV\r
- Qzp6rK2kPdFOagx6F8cl3h8HUyr9lnJYy/3WSbmbkHIvqN0dKbempN3TxBUueAzSfbwdhNhayj3bSXKz\r
- cNzs221/vTgpknjbzoUUId7OyRYvXj8lXutK+SJe8bLUoMUbT4+GxDesOeJV5YZiEu9oJt57kIZYZkDa\r
- pXTTId2jXnpNjnn1dTmq2mv4ktrLGU36ydyPljm1XzbSpORbumBZAdJQDaPsJjbsXUlnyr0RKfeRVgXC\r
- VT+m+K6fhAgfbivlnu9WOsXbbgESLxJp0sSL/6fEWzI1XnXpH6t4S6pHw1Z1HTaKl/VdijfpvRpmYCen\r
- eCndF5h2uzjSfeV1OaZ6Dzm25htyfO3eOFh42ZZu8sqgCfJ1/hYcWJ+pAzyVfkse/gjKgU8ghM9l8eLF\r
- 8p/qrOUy5bq1XJYVKNzHIdwncFbzFOfG7SJpkGG5F1+X3I049kujeFXqTZJ4eT+lmxKvdaV8EVi8e3Lk\r
- B5ySPQyB8pprvAJFpLRLCknXIt5oPRr8DRVG2gU28XLkWjJmJ2PDmSPexm6JAdJFwqV0j63eU46r2UtO\r
- qN1Hjq3TV06o309OrNcPj+suf2o8QMbOXIgddYfIQRzwHHKKHzLbe6RIIrqs8OuX8vn2LHm8y1CIrp6k\r
- 3QIedcsKSrrtHOE+CeE+1VnSnukmac92x7KuUu6VXhDvBoi3BAdQRBJve8oXqTcZ4uX/U+ItfvH+BFFc\r
- A7H9960t8vgHOWqGsgcCitdMu4no0UDxstRwS3GL994mSLudId2ucvTL3ZF0C6R7Qt1+ckyDAXJUw0Fy\r
- fOMhUqX5MEmr01/SXu4t177+tqxZgx32wMfY7ruPvAEHpRUm3K93KuH+9HmOdBk5Sco83ELSrqslaQ80\r
- DxeuSrmQHoX7NJLwszxzeR3ygwCf6SHla/STvFIrXiReipeDHRIqXmDO15ASb3zEI16WGii3Pw3Pkmve\r
- 3SJVp1O+OUq0cfVocKXrEC7eMOlGEe+NQNd4byhO8d7XVKXdo1WJwSkvnFC7t5xQ7005tsFAObrxUDm2\r
- yXA5tukIOaHZSKnccpSUaz5C0nDQHlW7v1QbOkU+2Zolcgjp9zskMMt7pUgAFO6X+U4d95udMu79mfJ/\r
- LyDFXgvh3o2zFsrWW1ZQKbeLk3KfQ8p9saekvdQb4usLAfeW8rUHSd6mTKfXiu094ySh4qUcQ/KFQBMh\r
- Xt6mxFsy4mUD1v+N2ChnjdkoV4zfrGq9vAxQzPquRbwF0vUvXlO6kcTLxrWrkije0Uq8zeQoJV4n7R5f\r
- C9Kt21eOR9I9DtI9rulIOb75KDmh5RgwVsq0GiuVW78lJ7UZCxFDwK/2kwqNBkvLcTPk67zNTvezb5HI\r
- PkvVfxOCFi77VO/bLXPmLZQL6/WQtOtrQ2wN3LKCK1yVciHcJ9yywtMsKzDl4vHVeuFMBcLF95VWYxAE\r
- PFDK1R8uuUq8O+3vHScJFy9RAykgUD/i9UrXFK9Gz9eQEm98FEW8fx+5Uf771iY5E/K9fNxmVXLg5d6j\r
- iheijSTeIjWs8bYkxHs/xFutmxz98utyTA02pvWRE+r3l+MaDYF0kXJbjIZs35Kybd6Rsm3HSRlQHpzc\r
- bryc0vYdJeBjkIjTXn1TTmk6RHq8N0cO7cb6KgGnEnC8qEazr3aECffKxpDnzfUcHmafXJ1yjbLCk0ZZ\r
- 4Xm3rMCUi+8nrcZASas1VNLq4PuqPlTKNRojuZtxtlLaxUtJEs5/3A3StMnWxLd48fop8cZHkRKvK17y\r
- b8j3Esj3IQiWyTeaeJPSo4G3kC5Tr1e8yenVwFLDPIi3uSNeNqrV7CXH12HaHSjHNRmGpDtaTmz1tpRr\r
- M07Ktp8gZTtMUpwAyneYKL/rOEF+1368VGrztlRsPVaOaoCDGqnqn62GS49Js2RP7ianBMEuaKlGOF8o\r
- 4X6DMwaWFPbukDlzF8gVFC4bzW6sK2kPGYMgwoQbpaxQfYCk1eQcuMMkrS7OUuqPVvPhlm/6juRt3qjO\r
- UGzrEi9JE29IvhBpNGKKd4WToFPita6UL+IV780Q298M8Z4Lzhi9US58e5OSb1Uk30LStYg3fMRa+OTn\r
- fsWrejSAEhPvS93kmFd7yHG1eskJdd+U4xsOluORdk9sOTYk3RM7vScndp4qJ3Z5X8qA4/F3uc5T5CQs\r
- PwkSrgwBV6aAW42W9Ho4yHHQ/w4JuMU7H8jOTdi/9kO+lPCX2MEhF9s6/ZZRM6axWxiE++Mn2TLmvQ/l\r
- wro9IC8t3BY4YNyEW1XXcV3hsnuYKitAuGFlhf5OWaE2fhC1cBtCdo3H4e93pHzLSRAvLyu/w7pO8ZJU\r
- 8ZJY5YZY4mXPhpR4S4d4yTljC+TLtMuyQxDxxtujQdV3+bdHvP+DeP+XTPHOhHgfaO40rFXvKcfW6i3H\r
- 1+snxzcaKsc3GyllWiPttntXynSEdLtMkzJdp0vZbh9KOcDbE7p+AAlPk8oQcZXOFPAEObndO1Kl9VtS\r
- jgKuTwH3kfL1+stzgybJ0uUrHPH+8Jmbgu3r9ltBDe3di3TL4b2HPpXdm9ZL26ET5C8vQqYc/HBLfaOk\r
- 4NZwH/MkXC3c5yFclhVCdVyWFXiJHQi33igIbqwj3KYTJK35JElrNFHKt5kqeVtKsXg7RhBvLPn6ES+7\r
- qaXEa10pXyQy8VK8Wr7n4P/3TNmu+vl6xaulq8RrpN0i9Wjg35DujZMg3WIVb4uQeI+rDfHW7y/HNx4m\r
- JzYfLWVbv6NKC0y6lG6512ZIhe6zpMLrs6Q8wd9lu82AiD+Qyq9Nl5PwuJM7TpKT2r8rFZF+y7UaK2Vb\r
- jpKjGkDATGGv9Jb/dRktfafMlk+2ZeL7Ygr+1Dm15jp51vFIhI2Oqnb7w+c4iD/HvrhdPpg1Tx7uOESO\r
- Z6q9trak3Q5hqRFnhnBtPRVUHdcVLn7g0l6B1EJlheFIuSMlrcEYCJdX8x0vac14tYf3JK3lVAhnipRv\r
- Px3i3Qzx5lvXNV6KRbwcXOEVrsaPeNlLIiVe60r5oiji/atFvOeCs8E/Id9zx25EuqV8t8u9rnS94i1I\r
- u/7Fa0rXFK9qWCsB8arRauzRULuP6s1wfJNhckKLMU5jWsfJKu2Wg2Ap3fI95kj5N+ZJOVC+51z1/3KQ\r
- cIXXZsrJr30op3RDAu48RSp2nCiVKGDIu0LLMVKhxSj1ummvsitTD6lSv59U7TtOJs1dJN/lbXEl7NaD\r
- cQAcSRJWPyr8cYGQVLrF51u9dKk07P+2/OWlzhAUku0NSLj3NnNlawqXvRQoLjxOJ1zWcCMK16jjNuSl\r
- dQzhtoJwW/NqD9Px/+kQ7wy31HAYipewXFAk8eK1U+KNj4SJ1027hOI9C5wxOkv+g9s7INVHphcuM0QT\r
- b9w9GkpcvAMhyOFyImRZ1i0zMO2W7z7Tkewb86Vc7wVgkQv+xrIKPeZKFQj4d6/PRPr9UMp3nSYVIeAq\r
- EHCVtuOlUuu3pTxe8/jmI+X4ZsNx0EEUrEe+0F3+2Li/PD3gXXlr5gL5ZAuS8F6OikMS5sg4dk07jESs\r
- JMt6LVMtPwNli89xcNc2mT1vkTSCbM+uBXHe1RiyrYt028iebilclW7dXgp6xJkSLs4evMJVvRWMOm6T\r
- cZIO4aY3n4yEy4nGp0FqkFu7GZAaBAfJlW83U/I2HcbiJTb5+hIvlqXEa10pX8QrXl5a5y+GeLV0CaV7\r
- FtLufwCT7+ljNql67aPTkHwhW9Z1kyFeVd81xHtlshvXQuJ1+/Aa4i3rivdEyLNstw+c0gKTbu+FUrbv\r
- R1L2zaVgCcDffRdLRSyvgvurQM5Ves6SyhBwRTyvUpf3pXKnyVKlwwSpiARdjvVfvjYEfCIS8HENIY3q\r
- kAhT3HPdpFLd3nJTt1HS4e1pMmfJUvk2B2JgWtwPCVNkHClHMfMyNhSc5bMVB0qwhBONf5WPfQ/rxfLB\r
- oc+cS+l8mq3mwR0y6QN5rPNQOY2zvrGEcEM9SbsNtw95ZMvardlgpruFPfOas234I+UVLhvOaiHhRqrj\r
- toBwW7kJl8LtALF1nANZ4XtvM0cqtJkh+ZsP01KDpiPovDS4ePk4vnaTlHjjItni5d9/h3jPxO1tEOTD\r
- kK+WrneOBi1dEmiOBlCqxNt0hJRl3132ZmDvhW4fSoXXkXZ7zVeSLddvqZTrv0zK91+uKNdvmVSEhCvj\r
- vkpIwBTwyW/MlZN6zJIq3WdI5W7TIeCpUh4CZjc0CrgiBMwEXAYCPrbpcDm28RA5tgFEUpMShmyewWn1\r
- 86/Jnxq+Kbe+NlpajZkqb82aL5nr18h+TtRD+VJ2+wGTMWvFlPN3u50GK14WnkmZYqSgNfzs0TAfy+fy\r
- NXg9Ok4qvg/vRbEyxfL9+L54f27P3RvXy9zFH0mPt6bIo12GyZm1X5djHmnpyPbmBpJ2JxLuI+wGBtFW\r
- pWi1bHUpwZXtU5AtywkU7vNuP1zVS4HC7RdeUtDCbQDhNnrHEC7LChBuawi37YcQ7mxIBkLrPF/SukBo\r
- 3SC0VnPwHSDxlsYar5qnwad4NWY3s2jSTYm3ZMV7oyFes2GNpQXK9mxIl1C45F9jNipumOjIVyVfV7qO\r
- eAukq8RrSFeJF3KNJl6nYa1AvNcXs3g5MQ7nZzi+4UA5rtkIZ9CEK172YCjfc46UZdqFYMtTugNWSPmB\r
- q1xWSkX8vyKWV0ISrgQBV8FjT+k1T07B805GWq702gwpywY6CLgiBFwJAq7EwRit31bd1k7g6DgI+PjG\r
- Q+X4RoPl2IYDcGDiIH25JyREGbG+2VmOe/l1+WeTfvK/jsPlxf7jpSuS8agP58qcpcska90a+Xxrphza\r
- tdWRJssUWs6E3bUoy2jwMfrxBGmbE9Lsy90suzaul1Urlsuk2fOl/7vTpFH/d+TWtgPlnHpvSLmnIVHO\r
- CHZHI0e2d+FvivZJyrWdpCvZuqJ9HCLi6LInINon+bncUoJKt5DtC/jMbrpNZ7p91e0WVnNIeA2XwmXC\r
- bfKup47LsgKEy5KCSriucLtCZN0gm66g2Wz8AM6GePEjdiSIl7Bu65WuVbxAz9fQZH5KvPEQr3iZKL3i\r
- 1Q1r/1a34eKljP8xOkv+PhryhSAfnqZTrpZvuHjDpBtFvLphLdSjoaTEW4NzNFC8gwzxToR435eykCYb\r
- 0sr2WSjlIFaVdCHccoNWS9nBq6UCqIS/K4YJ2EnAp+A5v4OAq0DA7A1R4bUPpSIEXMEVcPkOE6Rs2/FK\r
- wCxBlKGA8f7HNRmuRs8dg/U5pv4AOQYSPqZOX0mvjoP3BQiK6VDJi+DAfqqjHPtsFzkVYj6zXm+5sCnk\r
- 3HqQ3NZxqLzS+y15FTQbMkFeQyLtMgaMfq8Qr42dIo0GjpPqvcfKiz1Hy01tB8mVLfrJufV6yf/V6C6V\r
- nsP7PIgUe2cThzuQYlmjvRuSZemAE4w/ydosoWy4Xlg/8rghWi1bnWxVYxlly3Tb2+kSptOtKicMLeil\r
- YPbFVcJ1Ey57KoTquJBeBwi3E77fLpCYFm43yKk75MS5bine9nOPnMSrYZLt7kO8vE2J17pSvkiWeFlm\r
- 4N8F4t0oZyDxUrx/h4CvnbhFjW4rSL3+xGtK1xRvqGHNFe91pUi87NGgxNt3kSozMO1SuuUg3PKD10C8\r
- a6QKqGwRcGUI+JQ3kYD7LJBKFHCP2aoRjg1wFDAHY5TpNEUqIAFXaPeuVOCADbz3iS3GyInNRqmyB0fR\r
- mRI+tl4/Oa7Om3Is1pd9j4+t3UuOermHI7SqOMgfRrK8H6f090CGd0OU94J7eD054+97mjvcbdIMSdXg\r
- Dgj1TnAv7rsfz3u4jZNaw8RqyFU1hBGsB0slTOrPshcC5ErJ6j63zyLVspFMJ9tqfQpk+ypkW91Nt7p+\r
- W3cUhIt0y14Kjcc7JYVCwmXCNYTbGfJSZQVXuK8tgWwg3dcAa6jN50K8846sxKtwG9uiiVfDx6fEGx+J\r
- EK8uMxDdo0HXd7V4/43/nw7xkn9Avn8bmSVXvevI9x6PeIvUo6HExMtSQ185ziPeMmHiZX13mSothKQ7\r
- ZK1UGrJOKpPBa4Ep4FVKwJWYgPsvhYQXy8m9F8hJEPBJSMCVIeByr82Ucl0/kHLsskYBd0QK5vBkpOBy\r
- 7Efc8i0pAwmX0RJuzCQ8VI5tOFjVhDmD2jGQcNpLTIsQGXmRUuMpO5MkG+2YKgnFx5RpiFGVMAKgnxeG\r
- +7p8fb4P35OoKRixLlwnSvZ5ioeiRaplI1kk2YbS7RhJawA5sX7LbmFNJ0KYk51Gs5a6hutJuFq4KuVC\r
- LBQtEyDpAdl0WSzpbefjNeZJxQ7zjzzxsrGN8lXCTYnXCt641ImXsjUb1s4ATMCmeJV8RznyvRLyfeB9\r
- p8ZL4cYr3lDDWikQ77EQr9O4Vli8qr7LMoNKumsh3nVKvJrCAl4lFSDqChTwgGVycr8lchJe5+Q+C6Xy\r
- Gzj4e8yRSt1nSUUOzmDvCY6Q44ANdmNrP0mNnCvXZryUbf22lHElfGKz0XJC05EAIm4EUdXoD3nhgFZQ\r
- ZpQa5YYDXQnZlTIlGJKyi5akSUjULrbHkNDruK/L+RGU/Pm+rNHqRjGuE9btZUoHon0Fon11YGHZqsYy\r
- t3ar0q1bTjCFazaaKeGy4YzC9dRxuzHhuvJ5HVC6PMWG0NLb4bEt5+Es4wgUL1E9HVz5psRbGLxxqROv\r
- ru9SvPyb4qWAKV42rmnx/gupl/L964gsuWzcZsh3q9w91RFv0IY1r3ivL2bxckpIR7x9YiZeLV6ddine\r
- ykPXy0nDMqQK4N+ViJKwI+BKTMdIwBUg4coDV8hJEHCVfkulAl6vIgRcpdd8qYLXr9xjNiQ80xmW7KZg\r
- LWGOoCvTboKScLnW46S8m4aPqj9C0msPlaNAei0c0LUG4aAeKOk1BoD+kl69n6RDyOlKyFrKrpg1WpJh\r
- ojZQy/VjCJ+jn+++nnptwPfhkN3qbBBjjRaCrck67WD8TSDamkPxf4i2tltGoGx1KaGRIdtmlK1bTmg1\r
- zekW1tbth9sBglLCNROuK1ydcilaQun2dAYNpLdbIOkUW8v5EO+CI1O8xJSvTbrs2cD7U+KNj6KKN1qP\r
- BopXN6ydaRHv6areu1H+NMKZ2ex+JN97IN8w6UYRb3jDml28HECRtInQ4xLvcikHgWrxVnSla2IKmAm4\r
- EgWNx6vnQMAn4fmVWK4YsFwqQsCV3/xIKvdZJFV6L5BKSMEVkIIrvj5bjYYrz/dWEp6u1qVMxylStuNk\r
- KQcRH9MUp+AcEtuQKXGUpNcfKen1IGJSd7gcVWcYoJSHAFfKWsw1B8hRSs6OoFVqpiwVFKeJe38IClVL\r
- 1QWvq+TK+RHwfml4bwXWIw3rk4Z1U+WDOkCJ1igjsG5L2TbRsmUpgbJ1020bM91CTJ2QWLVwu1C4kIwp\r
- XDPlaun2ABBZentAqR3p4iWUL+dk0I1pXvHyvpR44yNR4o3eo8FpWNPS1eIlHGDxN3DayEy58J1NanQb\r
- Uy+FW1TxXj1+o1w0doNkZ28T2Vs84j02kHghVUj2ZEO6kQRcYeg6JyEPhqzx3IoQcHm8jtMQBwGrGvBH\r
- Up7v0XuhVHxjvlTqOU8qqVKEIWGWI7pOl2PaIAk2fVfSm4GmFBcFxsRImTE9OjLWQk5jMlZCdqScXneY\r
- pEOMDhz15cKZvGyYj9FS1WLVclXwvdgYxvfGOjSEYLk+at34Q+GmWiXbCQXJtjk+T6h2y3QLETHdtoOM\r
- 2kcQLruF2YSrUy5lS95YqdJuWruFkC7lW7rEm9YM4m2ZBPESypef3StfLd7GKfHGRZHFC7Ga4mW6jdaw\r
- ZkqXsKFN93Q4bUSmnPf2JjWwQss3Vn23oEdDgXivc8V73bt471EZsnHbVrVj2D5PvISJ9+XuchzEe3wd\r
- V7xN/Yu3MuSqxVtl+IYQpoD5mIrD1qt0XBECLo/naQGzDlwxJOAVTinjTZYhlkiFPhwRt0gq9logFVwJ\r
- VwbHdUICVP1VmQopK4irJVv5OUSWBzJP1cdLehOetrNhivVSHOQgXUmZKZmJk3I2cYVpw5V4+OPd1+GI\r
- MSV8vgffi++J9+YPQjPCgQ0QbAusI/vbNsWtEq1bRqBsWUpo7ZGtLieYwqVsu0ImXuEq6VIorlSUdCHc\r
- nqucWwjISbsOFG/5UiTetGSJl1C+7OlgypfbiEJOJd74KKp4dZmBOOKN3bBmE+8/Id7/G5UlfxieqWY2\r
- U/17pzqSjSbegvpuYfFe8+5G+cvwdZK1vfjEyy5b8YjXlK6XyqASweMqUcCggithpxFOCxgpeOAqqdCf\r
- Agb9lkPCFPESKd/HKUeU6Y51bk858fSbomLdkwmRSZEyZgMUodQoZJ66T4SQXShBlZKdpKxQgtaSjoZ+\r
- HNMqoFiVXPmaBFLVgm3B9+Y6uOvDdeM6snzQwhAtywhtIalCsoV8OkM+RKVbygNQtgqIRNUvPcI1pUve\r
- gHh51QZKFxL7zYqXcHtp+abEW3rES8kGFa+Tdh3xMvX+lfJF8v0P5auTLwQbVLwsN7DGy/6xm7dvS4p4\r
- R4fE+5oS73EBxKt6NUC8LCdEE29IuiZKwE4K1nVgNsQxAXMwBgVMKrARb8BKKQsJsxxRtg9SHucZ6ISD\r
- sxO7T/EUHAdrBxzkkWSshEy0lClDE4qZUJZ+0DLXYnVRsud7EPc923AduC5YJ65be64f1rONmWrxObRs\r
- O7rJNiRbT7rVwg1Lua5sQ8LVMO268mXapXBN8baCeDv+RsRLKF7Vzcz4keJEOSnxxkfc4oXY/jIiXLyU\r
- rdmwFq1Hg1e8HNXGxPs3lz+MyFLXcuP8Dne9ty1MuqRwjwZHvNe74r0Jtxe+lSUnDlwtW1njTZZ4H2wh\r
- x0C8HDIcr3i9ZQYTq3hNlITdOjBeryJQ3dR0LVh1SVsj5fqvlPTuOHi64YB8DQckb7viAO0KWXXB5+hs\r
- yphCM4Rsk7ISs4GWpRKnDVOmBur1DLkqwfI98d5qHQDXh+vGdeQPR0i2WHcm21C69chWYZGtEq4rkDDZ\r
- alzp9kLapWh02vWIt1xpEG+jYhIv0fJl4uV2YvkhNVdDfBRFvH82xBtpjgYuY4+G0y3iZcOali7R0qWA\r
- /zoyS04dnqUep+Q7ZZtKuVq8hRvWwsV72+QtcsboDXJ0v1WyPSeZ4m3uiBeJ99iA4qUkdR3XJl2ixDvC\r
- I1sbFPDQDCRfdkVb7wiYImajHCR8dE8cLBx59TrhwUNwIL2GA5Mi1jLuRhkbQg5JmUB4WsoUo5ZymJyj\r
- EPZ4itUjV86LoN4HULBEDdl10T8arNUq2fJvrL8Cn6WrK1otW41Xtjqx2YSrpcsGNd5SODrtesRb4om3\r
- XjGLl1C+7EbGbchtmxJvfCRCvEXp0RBNvH8Bvx+eqcoQlC3rvlq+hRvWXPFivSjeW/D3acMz5CiIN/tw\r
- Fi+la4Jl0ag8FM+jgAFv2SB3dB8IhK31lG8P3GpUC75Fxt0pY1fIWsaEEuSB3QKSbElwoLeAIJpBpKQN\r
- /mbpQpUvXPT/Q2LVGILtQskDLdiufE/C9+d6YJ00XE/eUrZMtkq2Lt7abSHhQq4mXuGa4tVp15SuK151\r
- 5YUSFu9REG96PfbwKGbxEsqXs5kx+TZbmBJvPBSlxusVL9Ott0eDV7xauqZ4dX3XJl7yO8j3b6My5aZJ\r
- BclXiRey9YpX13cJxXZs/9XFmnj99mqgeDlIIpZ4w6TrhfdbcOTLnhGZcly/NRAJ5PKGC+VrYoq4kIxd\r
- IVN0bXEgt1sof31ziTz89krp8MFa6TZjrXQFrd5fLbeOXCqVXsP2aA5htIIAQoL1SFaNECM+JKt+CHiA\r
- 63XR6wd0GcFMtyHZ4nOZeIWr8QpXoxMvJVNKxcvEW2Li5WWDCBvX2J1s1IqUeINSFPGeZpQaKNui9GjQ\r
- DWtavlq65DQl3w24v0C+N7hpt6C+WyBeLrti/CY5fuBaOX5A8Yj3GIj3mOIWL2AiJlUUmVJlJMDtSdhm\r
- Jw5c7wiE6Y23YUA8sWTMv5ls2n4k14xcJTNWb5KfPs5WopHvDPaBb/KxibfJsAXr5V+9cNA3gTjaQ7q6\r
- ZKCTrVk2UGjZUrKuaL2SJeaPA/vYUrBauCHpcjkIJVyNK1olWw22gY1oabcUiTet5ihJK07xKtni++Hf\r
- fE13G6RVnyFPDl/u7BMp8fonXvFy2sWiipfS1aWG/3MTr25g09L9sxJvpoLy5e01E7cILycUSbys7577\r
- Vpak9V+jGteSJV7VnSxO8bI7GXsjRGtcU2WGkbgFSqj44fHC+yriceXxGuWGgiEZUmbQejnuTSRdyogS\r
- 6bM6gny9QEhaxG+AzkvlmG7LZODCLDUARQ7g4PrKnRid28CEy5h6Du5UfzecjNdrzvIDZKDqxF7xEhy8\r
- oXRrEa6WrDmCTMP/h4kX/y8kXMLH2sD62YiWdikcQzpHvHi1bJVw8Trt8Hqt8doULmmC93t5ujw5IiXe\r
- wBRJvMMLxGvWd3WPBt7ahgqb4mXqVeJ1hetNvBTvn1zxkpOGbZBTIZqr8f6cWIfivd4Vr25YuwXi/Qek\r
- lNZ/rZQppeJVU0FCvCdDsKeAk/HZvJyE5Kqkivsdqa5XUj1hwDpVQjgWcj2m7xo5qg8k2xtyfcOlF+Bp\r
- IMsDrMdRShRvXyzn4/i3iVfAvUCX5VIG4lqSCbEc2iHyJQ4qfO+2bWEieIzsdQQ8fP5ayPdDp/arSw5K\r
- wFq+EcRrCteUrYbrSEHqhFtIunhMoYTrBc+3we0RKe1SYuRIF29Itvi7PV6jDV6vJb63Fi6ULv/f2BXv\r
- sKXOmU9KvP4pqnijNawpARvSNcXrp2HNK17eso/vyZDvHyCkq97drGYy04mX4mVtlw1/p7JhbUDxiJf9\r
- eCles8ZbltdG6zBRynaZJhW6z5SKvedJuX4fSYWBK6T8kNVSaehaqTx0neoGVhFCrTB4vZQbuE5OVFJd\r
- 60gVQj2qt5YqhEDZEFMUKqFRnnwMxYrH8/+8jhYPHMg3nfAARHpV9zEBRxPwayvkeLCI0mXKtXz+qFC+\r
- e5CMf9glvWfhdRu9j7SE9Ksa21wBq/TLUoMrX5YZvOK1CdeEYg2JF3/bsEqX4Ple9LakdCKlXVLi4uVE\r
- QQkWr5YtU257PIeybUXR4vUU+Lulm3SZepvje2yEdXzlA3lqKMTLxIvv3PZ5TFLidUmkeFlmSGSPBsL6\r
- rk67Wrx/dOV78rBMuWy8I192KXPqu5tVfZddqo4ZWAzifaiFHP1Kdzmm5htybL2+cmyjwXJCs5Eq8ZZp\r
- N1FO6DRVynT5QE58bbYc12OBHNdzsRzTE6fwOJU/Wp3Wu4QJAwLQaCFw6KoSrAemWxOmX4pItTzjQMKt\r
- GurKeQYoYB5U7PjO51LAugxhyrfjMukxPwupFQfT5/bPHxPKFylZDuyU50biQK0/GQe026WMAmYCZkOb\r
- mXxV6o0gXq90CQUal3j5XAvcJnwtitWV7REtXlO2vGJwW8oW34mWLVNtCC1d95Zpl6TEGx/xivc6pE1d\r
- 443UoyFIw5oWL4klXg3LDlq+vDgm0+6tk7fIeW9vlBMHITkmW7wzsHPe10yOerGbHPXS63LUq70kvVY/\r
- OarOEDmKM31xfgNe7YBzCnCWLHUNL+y0qqM/dnjWJlU905ABBWtiStaGV7yEDWLGgaX6nlK+hoDT2uP+\r
- LhQc3pPpVwu4y3K5YNgaR5pfxT6QokL57tspu3O3yEltIIem2A560AQFzC5mLD0o+eLA11d50PKNKF73\r
- s1Oi0cRbSLgavIYNbm9us2hplxzO4i0kWzxOyRbfQyjZesH9Ztpthscx7abEa10pXyRCvEVpWDN7NDDt\r
- Ei1dr3iZdLV0fw9OHe4k3yqQ7/nvbJLb3tui6rv/Gp0J8a5XvRqSJt5f9siY6RDHzTg4ePHFp7qIutAi\r
- 55nlJN2cnJuTwDR2xcvZspRosONydBX7nLIeqWqZhgyKIl6WGSgc8wBj6sX/Q+JV4P3b8aDDgcm/+Tg+\r
- jwLuvFyGLdkosh8ywfds++xBUA1vB3dL9bfwuWtCFC05PHiqI2AOqlDpFweylm9YyQHbJpJ4ddklUeLl\r
- a/pJu+RwE68pW/5fNZJRppBqRNmaaOm6t42xHzfCe6XEa10pXyRCvGZ9V9V1AQUcdKiwvtXSNXs0EDPt\r
- cmAFxcvbyhBvuaEb5Hwk3dsh39NGZUr5oRly4uB1qtuWGkCxN0nivQUHBy8WyYsv8jpgnNSbF1isM9yZ\r
- dYtTFxabeAHruGHJxiEd6SZMvCZMPUjClHHlnsud+YsT+EMlB3bL3OVrJa02tkfTd7E9JuFghiw4hFjL\r
- VyVfrAMHbthSbyTxctvZpEvCZGvC53nga3FbWdJu6RJvv9ji5TXhKF72RFCyBfx+Kc5QsgVWyXpxZavE\r
- i9fl83TaTYnXulK+KKp4bZOf++/R4NR3tXA1pnjNHg2meCldLd5TQAXI9yTcnjEmS6qw9X/AWjm6zypV\r
- R92WjElyTPHyoo1e8fJSNLyarS41mOJVyQ5yYcJKlHiZdvl4i3QVYakX7x8GREIazZNrBuAgYpcxHy3U\r
- fuFl4j/evklObobtUWc0fozGObOQmfJV2wYHN/v2st4bK/Vq8RKbdEkh4RI83gu3m9+0S0qzeHlZIkqX\r
- cwaHZAtZsjGsuV/ZmrjS1eJtgu8pJd6SFS9HriVrqDBhmYHi/TPw1ne1eAmFewoeW2nYBklnnZJdqXiK\r
- zQMEO9/WrVtVdxfb54mXpIhXiQTrH1S6hI1q7AZFMdjE655mFhavK13ScJ7cN2alMyDC8pnjRb7C632a\r
- Led3hHBfGoz3YQnmHYgA20bLV9V8IQf2dgiVHKKk3ljiLSRcDR7vhdua2yiieJ1tF6I0iZelrObYfq3w\r
- 48URg62wDVtSstjXmgEKN1DCNfFI15t2U+K1rpQvEiVep0dDQcOaV7xm2jXFG22ocLSGNVO8lG7FoRtU\r
- n1YlM3alUg1MzkGylROhJ/rgKE3iVV3DAOURKfFSvCCieFn3azxf6k9Y4/TJtHzmeJEvneGkl3aCbJ+D\r
- OHilCU6ErpMvp4RkgxsnzVH1Xjf1hkoO2EbRxMvtF694uZ1V2sW2cEVbWLqlQLxPvQbx9nJqvK9CvLUg\r
- 3vrYnky8jbF/NYF8G2MbNoaAm+BHrCmkaEo3EeJtitdLibd0lBqcHg0FDWtavPH2aNDS9Yr3j4Z42bDG\r
- +RvU//GYcoMzJB2JL703DiLWTVnnZK8B9yApefFCLEkVr9uoxs8bRboFqRePs4p3ntR9d3WSxJsjF7eH\r
- LJ6GPHgpIMpX1cDHY/tMclIvp53kNoqVek3paooiXm6jqGm3lIj3eV4oFD9cFG+NkZAvzhxqI/XWwT5W\r
- H/JtOK1Aut60G7MBzYtHulxmCjcl3pIVr61Hg9+GtWg9Gpz6riFeV7pKvEq6zpy9ZQeuU4nv6DfXyFEs\r
- M+ghpCw3uAfJb0K8TPgURCHpEle6GqY7m3gbJVO8uXJxG8j2ie7YPgNc+UIevNwPG9zY24E9HThdZKih\r
- DevKWm/CxIvHeaUbJe2WCvE+1AYHOvcviPeZN3DG0FfSXuiP5Av5voLtVxPbry72sQbYfo2QeK3ixfYs\r
- qnibWdJuSrzWlfJFUcVr1nd1w5pf8ZoNa/o2XLz2hrU/4j6WGE7ov9aRbt81SrzqANTi5axV6kApDvF2\r
- 8ideXuWWw2UpXvZqSIR4VaMankc5cJJqP+LlY73SVeKdC/GuSoJ48XoUbyvItiq206s4XeYl29nzgyUH\r
- 1ntV6p2K9WBDGw5ydi8L6+GA7RRNvNyGUaVL+DgDbmNun5hpl/D/LsUh3qkUbyNJe6C1pD3SQdIe7Yxt\r
- hx+tJ5F6n8X2o3hfxRlELSTehIvXlC5vscwrXE1KvPERr3ivh3j/NMKRrLdhTfdo0NI1xRvPUGFTvKfh\r
- cacMy5RjOd2hli7nK2B9l2UGNjBp+aoDphSIlw1IscQbkghk4Fe6RDWq8bPiNQsJV4Pt4EWlXggkJF4k\r
- zGSLtwW2y8NIb+zrzMu+8zLuLDkw9fKaa6FaLw5oVW7AennFq9DbykMQ8XIbd8cyV6Ze6Za0eN9m4r2h\r
- vqTd3ULS7m+L5It97DGI9ymIl3XypIkX271Q2sVr2NJuSrzWlfJFUcT7R4g3WT0azD68f2LKdaVbZUiG\r
- kmx6nwLpHv3mWqe+S+lSZhQRZ+bqxAOmFIlX1S8TKF6mXd5SrvyshYRLuNwCH28T7/gkirf5QEl7sJ2k\r
- VeuJAxanzEy9dYdBGmOwncZjO7nlBt2vl13LbHVeU7YmQcXL8oyvtEuKUbw/QbyTIdBr6kraXRDvAxDv\r
- w8UoXi1dDQWrB0x4SYk3PhIhXm/Dmp8eDd6GNa94zYY1p1tZllQYtF4NbWVDWki6rnjVgaeES/m64qV4\r
- cJCUiHjVAIq3nKvyJku8al4GPJcyKCRcDaQRCZ16Q+Kdk1zxNuvvSOSF17GdkHpr4P+1IV5e/p1XIdbl\r
- BnYt6wQJhOq8PsXL7RhRvLzfhduX282t7ZJSJ973sA2uLYp4QYug4oVkvWmXfX8jSZekxBsfRanx/kE1\r
- roU3rDmlBnvaJUEmP6d0/4rHsORQZoDTiMa0GyZdF3XA6cSrxasanBYfueIl7kQ4dukS3hcBPq84xdsU\r
- wri/NcQLgVR7wyk31GK5YSQOYgiEXct0nZeT6Kg6L9bR28BmytaEUvUr3kBpl5QC8T6O7cZeIX4Tr5Ju\r
- QPFq6WrxqgETHtmapMQbH4kWLxNwNPFSul7xMu0Sr3j/RumOyJTj+xmNaF6Qdo/iBC9KuBbxdipN4oVM\r
- EiVelhkoEYogaJlBw+cx9SnxYr0aJkm8HEBB8dZHyr2zuaQ9203SXuoJcbwJcbDcwK5lus5L8eofKRz8\r
- QcRLCglXw/v4GGy7wGmXFDz+yBQvtrU37fI50aRLUuKNj6KI9/eqH2/wHg168nOddG2Jl9I9dZg7KMKs\r
- 53phfZcHU6jM4BEvBOOIN5lDhoso3jB5GHKNhC4zsL8yBWKVLoEwoqGEDZh6OSVgssVbFyn3libYcbG9\r
- noFEuK0oXtXANhayeBcHPbYVL/VuirdQA5u5vTxYpUt4Hx+D7ceuhhHS7hEjXo5cCypeLV0lXtAUrxGp\r
- UU2TEm98xCvea93E621YUwI2pGuKN1bDGhvU1DI85qQhHBRBwUSRros6sEJlBnKEixfpX016TnEqedqk\r
- S3hfFLR4KZLiEG89SONWiJcDAh7vguSL1PsyJMI+vRxMwSHErSCQsJ4N2FZBxEuiSZelCEOi/qRLCp5T\r
- 6sXL+m4g8WI7e9Mul9tE6yUl3viIV7zXeBJvpIY1v+Jlyv2/URsV5dmIBrkUakTzwkETlFBIuJojXbz4\r
- sdGnyxHFy+U+UdfTWlhMibexpFWFeJ/A9noG2+t5bK+XOY0m67zjPOLFwW/tUmZuLwvRxBtX2iW8z4XP\r
- h5zKd1p45IhXS1eLN9KACS8p8cZHUcTLxFuUhjUtXsLllO+J/aM3ooXBMgNFFFZmIIeLeLVMDGnEEm9Y\r
- oxpexypdAln4xZ3TokTE+0JfbDNsr+rYXnWRejnpS8v3HfFGGkQRtr0s2MRbpLRLcD+3E3/o+DcEVa7t\r
- PMndvDn54n0wmeL1Spe3WG6TrI2UeOMjXvFercSbFahhzdajgWmX9eA/Dc+U49gtLFIjWgTUgfVbEi8T\r
- PkWiRAAJWKVLeJ9PlFAgXvZqGLeyGMTbwSk1PP06xOsm3pojHPE2GA95TMY2w/bqgO3FxKu7k8UlXv6f\r
- y7HtjLQbSLwcEaiFyzMDiqnBTCnXbGYSxfuhI14OoChW8WL/ZP9fP2mXpMQbH0UVb9CGNV1qoHDZgPYv\r
- PP73wzY4V8r1Uc8NwTJDod4MmlImXg4ZVg1GXvFiXSkHUxo22ZpQvLpRLdHibZKkARS+xOsm3oYQLy8R\r
- 1HwaRACJtIMcOmP9mHp52XklXs82s2GK10y7bm+GmNJVsnVh46Nq5YfE2HBF6s2Qcs1nJU+8k+MQL2cn\r
- axpEvB7paijUWL0ZNCnxxkc84v3JFe8fPeLlrd/Jz5l+/4n7TxqcoYQbs57rhWUGPSnOb0W8LDHwVqUv\r
- YBUu4X0B0OJtmqQhw2HibWQXbw1srzqGeFtAIq2RutpBHHpyb8449zq2mZoaEtvB3G5evOL1k3bDZItl\r
- bZhu8d4cMssWfsJuWqR+ksXLUsN19YpXvCrt4vF+pUtS4o2P+MW7KSTegh4N/hrWTsfjWGooP9BtRLOJ\r
- NRbmpDilXbwsNSRCvEy7/LwJSbvG40zxTiiF4uU1xDpCghQk15cSZYJV28vYdiZavLHSLrYjUbLl/bwM\r
- EoVEAbGBSWH+XVrFi30skHg90tXEGjDhJSXe+Ci6eB3p2no0mGmX4v0/wETMMsMJ0QZFxEKVGdiy7xWu\r
- piTF2xcSgUj8iJfpLYh4mfApTEqkSOL1PO6wEC/WjyUHtb4uvEw9t6HabsY21ERKu3huCMpWJ1tTtvzb\r
- 5IgSLz6rLe3yMUGkS1LijY94a7zXuOJlXddMvLa0q8SL/5/x1ib584hMOYaNaDhttkrVD3h+aO7d34p4\r
- WWZQyc0QT5hsPTKNiuexh4t4uZ5h68/vF1Cs/N7V9nNR2xPbzezJ4G43VVpQydYVqiohWGRr4hUvG9cO\r
- Z/Ga0lXiBX4GTHhJiTc+EiHeWD0azhjjPObUoRucQRHxJl0Nxc0D6zclXkDBaIGE5OPFlWlUPI8tMfFi\r
- exVFvPx+1XfsogXMpEv58seKDZFKvHie7pHAVnvdSEbZ8P822ZqUZvHWwz7W0K94IdhCaRfwfptYY5ES\r
- b3wUTbzRezSwvPBvSJePqTJ4vToQAjeiWQibe7eQdElJi5c1Xmf+gXQ9LWRRxEuBUCYx0y7hfbHwPPZw\r
- F2+YgN3l3A+4bXm1XcqWM3WFZAu0QP1Il5Q68Q51xftOcPGa0lXixfblZwuadklKvPFRVPEWlBl4G552\r
- uYy35fTMYgmQrurNYM69a8UQb5ePZFv2tiSJFzurL/FOLbp4zS5kEcXrijQqlscb4m00MRmX/nEOykvq\r
- Qbw3m93JDPGyO5kS77tYjzjFa8L7WU6gcFSPBEjCFK4C30dg8RI8t/5MqdBiluzYkgTxqkv/aPG2jC7e\r
- 2kHEC8na0i6FbJOqH1LijY9EiVc3rOnEe/Zbm+UfI7PkhKLWc73ELDMQQ7yQ1IZNW5RMbJ8nXuRXiPcD\r
- HIRW8Q72IV6snx/xssTAW4okoWUG4/FavE3myovjkHgTfXn3MPFGSLy+xWusv1e2hA1uREmXcmHixfMp\r
- F0qWUlJATH6lS7ziReIti9fJ2QTxJnrfgnjHxRJvtTjFa0pXiRfbhtshnrRLUuKNj3jFey3EyyHDpngp\r
- 3DNw+5+3N8mfORINoixyPdeCkpWfxKtasxfLvDUblUxsnyceKCWeDvabAJnyuli82OUz3ZBC9JUVCsTr\r
- XIGC4nXnmFXihex04vUOBigkXqRdfiajcShMPmG4Io2K5fGGeG8dvtw5iD63f/Z4kG92yoEdW+RfL+HH\r
- 6Y6mEC8nycHfasgwxYszBD1yLUy8OLCDiFdJF7ec5rIlnkPhalp7BRyHeNXz3OdSOnU+kHmrMkUO7rR+\r
- 7rjAscUf9a4jJknalbUk7V6Kt50h3t4Qb38f4sV6+hEv4WcJ2ptBkxJvfBRFvJwkh/VdR76OhM9+C8uH\r
- ZMjRqrSQYOmyN0PE0Womrnh5et5qkfSZj+/nwA61U9s+U1AoJTn0qbzYa4yk3Y5TZyZeivcFV7y1IF49\r
- x2zTiXbxqvkHsK6xxEsolYSIN8LjtXhxcJ7d+yP5+ZNska8SV5rhtlq/Ft/bvc0l7YFWjni9czV4xdsy\r
- oHjDpEuhuML1EhIwHkMZ2SRrxSNe8vI0GTxrLT7fLuvnjge1b/2yR57uCLFeWkPS7sP2ongf6Qzxvh4u\r
- 3uqj/YuXPzhe4YYGTMSZdklKvPGRCPGyUe0cpFyKt8qg9ZIO6R7TZ40ca5NnUWB9lyKKWmYgrnj5uJYL\r
- 5b6xK53T5y/snyko8jUk/nmu/KsGEsjdzRzxPqsTL6+gS/GOxMHwNg4CiJeTeyvxYifvggNfiRfrFku8\r
- SWtU8zxHi5eCazlXlmVsEtmPz2j57IH5FBKHSPqNnyZp1+PU+WGcNmvxclrIF13x1qB48UPVCOJtFlC8\r
- urwQS7omgQXsFS/W7dXp8tDgxThuEneGIN/ukgPYZn9/pgO2VwOIt3WBeJ9wxfs8xPvSMFe84yBe7GNx\r
- iReoARMp8QYCb1yiNd5TXfGe+85mOXPMRinbb50axssSA7HKsyhwtFrMMgPBQajFC7Ec1XGhbNq6BZ8v\r
- AamXIpE9MnUODtrbWK/EQfEUDopnX4NE3sCO2A/iHeKItxHFi1NGdVWFCOKNVuP13ahGXIlGJcJztHg5\r
- OqzhbKk5fgXOEHYmpM4rX+0Q+W63XFoHkr0JInkE26sqfqgg3nQlXvxQvYIfKpV4KV6kNyXeDyStDQ5s\r
- ztXAngmRxEvhchtxPgW/0rXB51qFq7GIt96HUrbRB5KbvTUx+xbPNORreYe9Za5A2r0LZwhe8T5D8Q6w\r
- iBf7WGNss6aQqFe8lK5XvPEOmPCSEm98FEW8vx9B6W6Rf3AkGsSYDlFQuMeDxKfdSHPv2sCBqMXLWmrz\r
- efLU25DJQUjAx84REUoXiUS+2yVXsaGI4n0SycQU76sQr7qO2CjsmDgNDIkXSYTiVRdwhDQ441Y08VK6\r
- /D9lm5DEG+U5pnhbz5MyrebItm34oYJ8iyQT9SP1lYx6Hwfo9XUl7YGWjnh5BYoncYbwHLZXNWwvipfz\r
- 8dbDD5USL7aXKd4OkEQk8SZCuiaqBkzRevGIV/eSqDZFaoz+CELZrbrMWbeDH7it8AMl+3bLhS9if/qf\r
- W999oI2kPdRe0h7tAvH2gHj7QLwDcZYwHGcJYyStDsRbH/tYJPFq6RYSL4hnwISXlHjjI17xXjdhs5w2\r
- CgzPlGP6rFZS1EmX8JI9VoHGC8sMUUereXHF2w0Hp6pfzpFJyzaI/BhnPQ6fWfbkYbN/LW2HIWHciNPm\r
- qjhtfgLifRoHxfPdcRD2QgrBaWCtoa54cVC0mIydHKfZ7bCDqyvnYl3CxGuRLtE/MmZtN6J4XYFGJcrz\r
- lHiBmg8B8mk4S256c6HIXnzeb/Ljky/T20+fy+f5m+UPjyC13cK0C4k8ColQvE/hh+p5bC+K91X8UNXC\r
- 9qqPH6rG2LbNIZFWOEPwitf7OVjT5WQ2iZKuwhVTIQFHEG8DyO6V9+T9JetEfoY4bdsiFpQue37IXmne\r
- GzK95BWnhBUSL/axql2xzXCG8CzOEF4YBPHiDKHmWEO870taE1e87NEQTbw67dpEGpSUeOMjHvHy9vqJ\r
- W+TYfhkq5R7dp0C4JOFp18UpM8QhXp7aI8md2HaOrNu4qSCd+BUKDwyeMkO6b03DTk2JPNAC0oVEQg1r\r
- SCMvIY1w1Jq6ZDlOA5u8ix0cp80ULyf27oydXYkX6xQqNUQQL2GiS0pvBs/zTPFScpRd3elSYwySHEsO\r
- 3/E0Otu+bWxwe/38hfz4db5cVR2CvbaOpD0M+T7i1nfd4cLpvPrESzhtro4fqtrYXg0gkSaQiBIvzhDa\r
- Ylu3hyi4TvzxND9HMqVrEhKwR7wh+WI9a0yRCvXek42bsG/98rFT7/W7b/EHai/3rW9l5ITpknZ5daen\r
- zD3Yv3TD2sPYZo9hO6pLu0O8L+IM4RWcIdR8C+Idj30NP+6NLOK1SZdQvE1xf1HTLkmJNz4Ci/dLZ+Oe\r
- MSIDAlmlGtFM6ZLEp91Yk+IAjsknoWWGeLviAOUpfotZcmKbGTJ7Fb4vJF8lFM/nC4OyYSvzD5+p9Dbw\r
- XQj0DhwU9yKNULpMu2FlBrdhjV3JGiCN6FFrbXBAdcDB0Bk7PddF92jwToKuhasa1fBZzBJDcYqXsmuN\r
- 9a07VZ4atkAdUPIjfqx4YEUTCoW7F6LGD9TubVly2Sv4Qbq6NuQBgTyM5KbLDE90c+q7oatP4IeqDpIe\r
- R61RvC2wnVtTvJADG9Y4JaQpXiVd/D+h0iWumGwwPYbES1zxcuJxCu+VSVK53iSZtxzJ99dPRPbF6GLG\r
- bfU5tit+oNj4+PoIJP2ra+FMqj6k2zy8zBDq0YAfKtWH15ynAT/uahJ0bDOuC9eJ6xYt7fL/NonGQ0q8\r
- 8RGPeDk72Z8Gr4U8wssLGqs8i0KozKClasEm3pB8cbB24YGLHa8ZTmEbTpHa7yyS73dug1QhlIOsrUHE\r
- 3yB5MH2wjrsfyeVHCPfHz+WTzRvkoU6QAwdL3MekC+Eq6UIiauAEDoqXerv13aE4GHBQsGGtOSTCrmTe\r
- q0/4ES/lYjaqFUm8tucQ936beNthfVtiW9WcJGd1mi7zl61VP1TyI6SyH9vrO3d7fQvRfo//H/pUCYTD\r
- g0dN+lBOYsK9tq6kP2RItyq2GdPuU90l3azvsmGtHtKb6krGq0+wRwPSWJh4sX5cVzPpevvqFglXTJHQ\r
- AqPQwsSL9WyE77cxxPcS1r/a21J/9Dxsqq2QDLbVD9iPuH24nbi9uJ8dwPKfP1fkZKyVO5phO1yKpHsz\r
- 9q97sX/dA+nqRjWmXZYZnsQP1TP4oTIb1mINF9brTPTnoHi5/olIuyQl3viIV7x/GbKukHiT0qhGos69\r
- 6+JHvJ2w41GAPLBrviuVW06Wum/Nkw8+WiV5m7Pk+/wt8tOubfJ1zibZnpUhE2cukKrdR8uJjyF13Mqh\r
- rjgQOFjiCcCkS+k+x9ouJBIaKjzcLTOY9V0cEB1xIBTq0QC84lWNarilaJPWjUzj3q/FqxvYKDuKtw0O\r
- zlaQSm0c3DXelmt6TJMB0xbL2nXr5YttG+XHnVvl0I4t8vGWTFm6fIV0HjlF/lUdgrgRArmjiaQ/2lbS\r
- 2X1MS/cxbLMnX3PTLgdO6DKDUd9tBomEGtawzVRXMle8vM6cki5lQpFoaSYCV0zRMEWm0i8ER/E2xg8U\r
- EycbuGogtT8+QqrUGSt1h82UGQtXSP6mTPkuD/vW7m3y1faNsjVjnYx7f6481GGYHHN7U0m7AmcF7MHA\r
- lHsvfqjuh3R5gUvWdh/VaRc/7M9C0C+wzODWd1WPBt2wRvFiXaKJl9LlLYVZ1N4MmpR44yOR4iVJLTPE\r
- nXiRkniK3xk7HgXIhi4KsQGE8jIk+cpIOa72cPlrk5FyVvMRcmrt/nLUsxDqAxDGnTgYHoF4n8YBwIRL\r
- 4T6F1Ma6Lh/Dvruc/Fw1qrndyEIj1twyQ3vsoKrMAIGwYS0kXqyvKV3CRjV+zoSlXWJ7nsZ9TCHx4mCl\r
- /FpDKi3ex0EGKb40Bj80SFsvD5FKSPb/bjRMTq83SCo82wOywDa6BfK4HYkN2yv90QKcui6l21XSn2Ft\r
- FxIx0y7LDPpaa7q+2wbyCDWsYZ26YB0pXdUnlSKkRBIFX88Hpsg4pSQn3qHoeIrP6501wLrXw2dg3fUF\r
- 7AeP4oelaj854bl+8peaA+XsuoPkd8/3lGMexPa4CcK9Fj9QvJglRcuEq4SLswMmXV1ieAz7mEq72MeY\r
- dtXACaPM4K3vqjID1iuSeFmvTlTaJSnxxkeixWuVZ1HgaLWYk+IAP+Jl4mTqbY+dk6f/LXCgcIBDQ6St\r
- WhDAi0iszyK5PosE+zzBDv8c+05Csias6bK8wLoupfsqpKtqu0y7kEjj8ZLeHAdEKxwQ7fA+kcoMXvHa\r
- 5mUosnhtzzFxH6dTb6jcgIOVjVtMvTxDYN9aXgG4Hg74mpAKt9UT+OxVIV0msiewTZ7AtuFQYCZb1nIV\r
- +PsJlheQdJ/uIenPQbrsu6sGTUDibFRj2mU3MjVUGD+IoTIDviuWGTgBOvvyhqRLtDQTgX7NGJgio9iU\r
- 4LCNlHxZwsL3XQ+foQ6EyDIAywHV8BmfhjAfxb7yALbRg9g+D2F7cAjww0i0FCxFq+H/uTxMuthmHK3G\r
- RjX2Zqih0y62mSozYJvp+q5Ku1gvc131+ocGTBjiLCop8cZHIsWb8LRLIF4lpmhlBqLFG1G+kIyq8+JA\r
- Y+ptix2VYuT10JhOWZNlWq09TNJrDJJ0ypTlg2oUBQ4aDgcmTLj8P2u6HB7MpMsBE7VxQLDE0PgdSafM\r
- Q2kXElHdyCAOP2WG7lj/hEmX2J5n4j5Oizcs9XI74UBl1y7+SDXlaS3SHOuxtbGtWCaoNhDbpS+E2gtp\r
- FtuGk5s/BWGwuxhly3ouUy5+zFTSfRFJ9yVI91U8l313OWhCNarptIv3MssMXB8tXTXpjUZLs6iYrxkD\r
- U2aEglM9CADTJk/3edrP0//a+EzsdfAqPiPl+wK2E3/UWTKgTDnvwqP4oWL/XEr2EYhY3eL/VfkDRuli\r
- P2PS1SUG9t1l2uUwYWvaxXazlRkI0y6XJzLtkpR440OJ956b5NucDb7F+2OExjWrOIuIM/cuZOQ38YaJ\r
- l2jx6nIDDmIz9XJwA9Mpu341wIGi5IsdHDJNr46kwiHAFLACBwFvuYwNabyf0mXSrQfpQt7pTfE6qrbL\r
- tMvarpF2I5UZTPGy8agkxEtM8ZqNbDr1NsePSRP8qLAswHkVKN9XIFB2CWOKZfcwCvg5SNaEwmUPBlVe\r
- gHTZi0HPzcAuZLq2q2ck02mX69EO68HT4zDpEkozEXhfNwamzHTqpex06mX6ZAqti8/E1MtBDqzJchpH\r
- DnxgP1z2TngKUuWACJ4tMNmyuxhvOTrtCYiZ91O67MXAfrsvYR9jTwbdhcyWdqOWGUAiBkx4gXgfH7Ik\r
- gHj3yrojQLwvelYkMBTvE3fdIF9vXSuy34d4sXHZT/GikeshkYLhwclpVPMz9y4wpWuKl4LjLcVrS72s\r
- 9VK+TKccYUb5sj7L5MouYTUpCCQN9s0NAwcC67nsr8vJcBpQuki6TM6qxACZcxrIUBcyCESlXZYZsB6R\r
- 0q53XoYii9f2HBvu481yg5avSr04wJhEW+LHRJccmFIpTqZWpleWDihgypUSNnmJZw/YbqzpVuePGp7D\r
- KSAp3UYQlC4xqNou3kvVdl3pKrlRIK74FFqaRcV8TZ+YQgsTL2DqZPpkCmUXL6ZSJV98Vva7ZX2WEmXZ\r
- gD0UKFZO88j+uYR/E5VycT/nZGB5gb0YtHTVpDgMCXj9UNrFdvOTdhsnWLrk5eny4shl7lwoAcR7XULE\r
- m2Xzol+sC/2AN34IHDRWJDAP3nSlPIwNkL9qgcjBL60by4QTzcjXufL4xA2QSYF4S02ZQYnXla8Wb1jq\r
- hWB0rbcDDhrV0IakRfmy+xcTK4f61sfBwtFndSgJyIIwCau/mdawnIKmqBuPU+WFdCZdSpcyZ4OampsB\r
- O72Zdr21XS3eSI1qEcXL5bGwPc+G+3hvuYGj2EKpF59HlRxwsLPLF+XL5MuyA0edvYrt8ioFgR+klyEL\r
- JlsF/qaYmXI5EU4tbDOWF0zpNsdrsusaJ8Vh2lXCpyx0eqPwXPEpcF9CMF/TJ16phckX608J6pIDSwGU\r
- L+uxquyA7cRyAS/bw9IDxcpEyxSsoZTZiEZBU9RMy6wVq6TLui6li9cN9WQwpau3l7F+XGeKN1EDJry8\r
- ME3aT1ol8sNOXxMFyS/fyaJJY+T2/10gj9x6tdVJAUBatLvRD9aFfsAb3wi+NlYkMA/d/D+57/rLZMO8\r
- 90V+3GvdWCZq2rp9edJsZhYO1pWqC1myygxEibTI4gVm6jVLDkylLAlQvrrswKkcG0MqSLGq/NCAre6A\r
- DWfqb0jZFa5KyUzLHKGmpdsOO2RIupBYqMTgiteUrhYvoQSLtcygMZ4Tki8IlRxwALfDdtLdy5R88XlZ\r
- ImiE7cTGsdrYLhQw0ywEm+5yFG+5jI1oFC4fy7Qcki62GbuPqRID3kOJHuiRYkog+H+YALU4i4r3dX1i\r
- is0Ub3N877rkoLqX4cdcy5fSZE8EVXrA9mDpgGJVEsaPk4b/Z8JlIxpFzcfzeYWkyxID3sdPbZe3NmkW\r
- FTbSvTJd3pq/XonX5oswOGhEDsm7g3vJtRecKVVvv9bqpADM8joxCNaFfsAbXwJyjBUJzKO3XSM3X3qO\r
- zHh7KF5yv32DeZAD+TJm+WaIZZUaLpystKsmxYlVZiBe8Sq43EU9TosXqbeQfHHgsBFM1XwhFTa4UcCq\r
- /IBkR7l6UWUFV7gcJMHuaSwvqKSLHZ3S5fBglhj0EGFb2iWqUQ33eaVbbOIl7nNM8YbVe/GZQvJl8sXn\r
- Zc2X6Zd1X9XoxtPgtyUdgtUcxVssS6sPcSjhYrs15o8bt7FOupQuvwN8Fzbplpa0qzHFRrzyVSUHfC5V\r
- 78W+wbIAa7KszTL91sIPEIXKJEsJhwHZqoSLH/ea2G4sVaiaLrYxX8cqXbx3tLSbyAETJnVnyHENZ0ru\r
- Rn9X4VAj9X7dJwM7t5Rrzj/D6qOAvO11YhCsC/2AN/4bWGCsSFxcfd7pMuz19njJA2rj2DaaiezNlV3b\r
- t0s59q99I/FXmFCwvssUGCvtEqt4Ce9zUY+1yJdlB13z5XwK7O2g0i+lgJ2cEqZcmxso2WI5H0PhqpSL\r
- HZvpWUkXr6mSLkQWNi8D1skrXV3ftTWqFUm8tudEw/P8iPLFQaz692I7tcJ2YvqlgJtBppRqQ4IfJo0S\r
- LeGPmCtczj7GhjTWdHV5gdJti/dQAtMSoeRc2SkozERhvm4cmIIjYfIFpnxVzRefm5PZUMB1IVImWNZr\r
- mWZZRtDw/1xOQfNxTLlqEhw8n69jTbp6e3nWSa8rJZnILmSamh/Kmdjf1Vmwj4nz5WuOdvxY2tV9WW69\r
- /L9WFwWki9eJQbAu9APe+Hgw3FiRuLj5snOlU6MaIvs+xwaMfcqg6rxf5cqVY9ZDMEi9NnEmACXPIomX\r
- 8H7z8Tb5Qi6UL6Wp6r7YqShgCpUSply9sKtYWxwAWrgUNyfBsUoX2EoMRDWqYT0T2qhGbM+Lhflc3Frl\r
- iwOZ8mWDm06/FHBLbBMKlXL1omQLmHAh3HSk3PRWeC4HSYSSLl47TLqUhyuOEFqaRcX7unHglZwWrynf\r
- ZviMquaL/YjSpDyZWinS+kiwdSlhiFWVIihjwv9jORMuH6dTrpIutrNVusC7PlxHpt1ED5jQNAEvTpd6\r
- Y5arSx/5qu/u+0z25WXJcw/cJvdef5nVRQFpYPOiX6wL/YA3Ji2NFYkLbgRujH25WWrj2Daaibrm2P48\r
- eW3+RhyUSRCvGq3mnn77wSpcDe93CT3HlS/FSPmyHMCyQCj9YsftgB2WQmXpgFCwJuyOxq5iIeHieRS4\r
- bkhTPxiGdKOl3W6433ejGuF9sbA9zw/6ue7rhMkXnzEkX3zukIAJEzCk0GKapDcPR6Vb1nGZcClcptw2\r
- eC5fowNfC6+phZV06RLva8eJV3Zh8iX4nBRkKP1iO7D2a0pYgR8n1oIJ/2Y6Jo28wsX2M6Ubtr08cP3U\r
- gAk8NhnibYjXfPUD+WBZpsghf9ecYxvSpsUz5F72aLj5f1YXBeQOmxf9Yl3oB7wxedJYkbhgr4a7rr5I\r
- MuZPF/n5W+tG88LLpW/Ztk2OeQPiSHS5gWUGv3PvWmXrhY9zCT2X4tVEEDDrvyGwM5vwfsLHqlou5MQe\r
- E2bK5ftFlS5Q8zLgvUu0zBAJ9/W8ydcUcHsKmFCkEIHq/eAKVkPRKtnyfjyuLR+PbaheA69HebAOeThJ\r
- V+MVHgnJ15WjV8DsAkaZqjKEBy5T91G2eFwk4SqxA9v7c72SmXZJjQ/lX/jehQ1mX/u4Pp9qWDsoE4f1\r
- kesu/HciGtZ+An/zOjEI1oV+wBuTf7srUiTYyvj2m6/hZQ/YN5wHVW74JlfuHpcB+SD1IqVaJRoPalIc\r
- yCph4iV8rEvo+Xx9ipdAmKaAu0A0lGokKFstXD5HpdwI0i0kXsiW4o002XmRpEtszysKeM2QfIGSL8HB\r
- TXkytRIlYhz4LB8oyWrwf8q2Le5j4xlhP13COQ9CAsHyQtIlWpqJwPb6RcArPU1Y+nVlSXEqARPKFHDw\r
- g5Ixcf+vRRvCfR4FrqUbLekS1YUMj02WeF+YJs3eXYkUu9PX5O/y5Q7VXbVjwxpy4yX/sTooILvA0V4n\r
- BsG60A94Y3Is+ATYVs43LHY3efUZke8+VUVw28bzwnLDpFVbcGBCIn0sAo0TX5PiaKySjQQfbyFMwIQS\r
- hnCUhDWQj4kWrZathq9nClfhka4WL/FOdl4qxUvc1zbTbygBGyLWaMFqOPxXo2RN6UIUTGVKGnjM4SZd\r
- E1N+GiVfi4BNCUdCSZbo5/D5rnD9SJc/aMmSLnsz1Jsp2fo6hhY3eJH9X6hBWk/efYMatGVzUEAmA6sX\r
- /WJd6Ae+sQtXwrZyvuFACtZddqz9SOSHr60bzwuHD3Mk2+Uj3Ua2RKTeIGUGYhVsNPgcjef/pkBDEta4\r
- krXKVoPX8ApXY0qXsLbL97dJt0jitT0nkbjvYyZgU8QaypW125BsIVrCS/h0AK0gCj0iLenCdbG+TwKx\r
- yZAUErDGEHEYfBxuFe5ziJoRjVjew1wPNTwYj09Wo9oL0+XJwUt8N6o5ZYYDMnP8CLnx4rNVF1abgwLC\r
- ti2rF/1iXegHvrFLC2BbuUCwb924/q/jpQ/ZN6AF2Z8v765w+vQmJPWyzEBRJU28hM/zPlcvc2Xqh9Bz\r
- jNfyCtcmXd2oxivk2hrVIoqXy2Nhe16iMd5Pi9f8W6NlS9Gqi1W6txRDoWHAJhZpFpVkS1fjFaKXkIQN\r
- EceCwg3heT3v+6u0i+U2aSYCJF12I1ubtQni9XdlZdmTrxrWOjWuKTdcdLY8fuf1Vv8E5HZg9aJfrAv9\r
- wDd2uRLYVs433Bi3X3m+1H72kVB/O9tG9KJS71e5csUIpN6uRU+9vifF0YTEmUj4uoRy9QpW43mOTbg2\r
- 6RJKl7cUbKnoRlYUbOvgQvky0atU795SDIUmvNEYokw4tvdLIl5BBoKCNYVre4yL9325feMeMIGEHYbn\r
- fk76/vz78swwpN1DAdLuD1/Jx5kr1BDhB268wuqfgOwF5YHVi36xLvQD39iFdd5PgW0lfcNTgFsvO1eW\r
- zZyEl9+vNpp1Y3qQ7/Nl5potTurtbReqL9RoNbyG37RLvAL0i1kSsN1vxX0/87lheIWrcYVrijfSvAyH\r
- nXgj4a6P+blUGvOIQmEKMlnY3jdJ8HOa//cjzDB4vwG3mYJ/W9DP4/sS1YXMI00rECkF3WhGOA0/tFN9\r
- qhxfZ5rk5Gx1ars+0i5hb4ZxA3rINRecafVOHKj6LjF9GBTrQj/oN3cZAmwr6Rum3usv/Ld0xCkBJ7Pg\r
- KYJtQ3pRPRz25ckjEzNwgK2MP/VCvEpUSS0zuFjFCWyP9WJ7HgmTrYkhXd2oRjkddvXdOODlekg71nVd\r
- MYRYWEy47xcmt2RiyJBoQYaVGaLBxwZ5vAvfQ/VkoEA9Qm2oMUTKS9Nbme7iWfb0JOn63kpRV+m2eMAG\r
- G+t//jxXXnnsXrnjfxckqsxQA5Qa8T4ObCsZCDay3X/dZbJ99SLI91t/qRe/fPJdnuTnb5dyqtFodVzy\r
- LdYyg02cvoFMbVilSwzxJq1RjdieVwywZ4YJhz+zfq16bGC9KCJ1dQScAntRF44MCOUSBpdFQz8O6xAU\r
- XrEhKLbXIUyiicTcBtwulG2d9yWtPiRpCtZGmFRjwIt5PjdZru40R+SbfJG9ef7Srtt3d+Y7w1SgS0Df\r
- XfIj4FQJpUa8FcE3wLayvuEv0nU4JejRpiHe4nukWR+do4EazXYgT0Zx8hyk3sAlB1VmcE/BbZK14ZVp\r
- EKxC9QM+WyRiSZdwwEmkeRkOR/GGZAvRdnPhciZc1YgGKAnKwHZQ26QQGDPRRcFMgL7BugfFK8hkYUqX\r
- /687zRFvHdxy2zaybSsX7/cQiYagBl7z1amyZuMmZ5Sa3xLDNx8jkH0mdZ+vKrdcdm6i0u58EPKe14lB\r
- sC70g7kCLkUuN5AHbrxS7r32Esleu1iVHH79xGetl5Ok78uTZydvkLQOK1WCtUrWBruRvQFRFUd9l1il\r
- 6gesow2rdIlHunysTbgar9hC8L5o2J6TZFhCoGgpXf6/PWTbBqf0PO2lDNSVI5B2mwMlPx7IHgFYZRcE\r
- XaeMgZoEPCiQWVC8ckwWpnR5Ww8/bJQu5atpwO3r2d4am2S98PuqyxLDZOkzfZXIT7t8lxictHtI5rw7\r
- Uq6/6KxEpV0SKjMQrxODYF3oB3MFXO4EtpUNhK71dmlWR03jxlEn1o3rhSUHnIb8BAFfMmwdDsZgvRyU\r
- EI9k8bLMwHkZIqVd4pWbgstjYXtektApV5US8FmUbCFXSoCE6o5YpkDqpZTUwWwc/FaRBgWC9INVrLHA\r
- OgfFJslkoKVLbNI15Wtuc41XspF4arI8NxgB7MBOZwYyvyWGfZ8pb7xa9R659YrzEpV2edGHP4CQ82xe\r
- 9It1oR/MFTDYBGwrHQjO38AeDqvnTcNbHUDq3W7fyF4o3+/zZNeObPkDR6D5GVgRT5mB2ITqB6tQ/QKZ\r
- 2rBKl+i0695SXIdjmUGVEwzZtl3o1G51nZa3IeFaxNsM//ce/FaRBgFy9INVqn6A4IJik2Qy0NKtDzlG\r
- kq7GK1+bYL0w7T47Wa7pOlfkmzxR8+36LTGotPujTBraR64573SrX+JkJAjznenDoFgX+sG7Ei5NgW2l\r
- A8FfqJsu+Y/Uf76q8+v17Sfql8y2oQvhyndT9nY5sSdrmjHkq8oMkFKQtEtsUvWDVah+gUxtWKVLtHix\r
- HWxXEDaxCU/B+6Jhe04CUD0SXNly/XTPBJYOIspWo6UL+HiVeiEzdVC7ArDKNAh4PT8UEqofILeg2ASZ\r
- DJh2WcahUGtPtcvWpB4IIl4l3ffk7FYz5Vsey/vZdcznsY+Axom2PtueIVVvvVruvvbiRKVdcjMI853N\r
- i36xLvSDdyVc/gx+ALYVDwxHs03ELxd/wXzXd4BqbNufL0s3b5PKPMWOMZGOklqpLzMQyNRGNOlq8XaF\r
- yEp7mUHLlumW/w/VbSlbHOy6bmuVrYkrXVO8FIY6sBMhXQJB+sEq1lhAcEGxSTIZ8EePNfNYSTcEHlcP\r
- xBIvhcvbZybLmZDunl2Q6EH/jWmqxPDVTtUu1KVJLTULWQKluxwU8p3XiUGwLvSDbUVcBgPbygeCG+2e\r
- ay+RB2+8XHZmrVT1Xt8lB+D0dMiXnNzt8pd+ayGdlZLOYcWmgPF3oLl3NTah+sUqVL9AqL6kSwzp8n1t\r
- o9Q0XgGG4H2xsD0vIDrZ8m8O7Giz0OkXStFSuKZIFaZkbbiPo3RNKMyEiBdy9INVqrGA3IJiE2Qy4NWM\r
- +bl8S5fwsUjGOvl6hUso3TrTJe3JyXJVt7lygMduEOkSt8SwYPJY1TMqARezNHkeFHKd14lBsC70g21F\r
- XC4AtpUPDC/9fsPFZ0vjak+IfP+FM1G639MOF5Ydvv04R24cm6F6O6T1MPr5sswQZFIcjVemQbAKNQj8\r
- DAZW6RJDvHE1qhHeFwvb83ygZcuUyx8FVUpAMtWyVUk1EqZkbbiPM6Wru5alxBsfPGPge7G7mFWwkaB4\r
- XShfr3B5+xLE/Nx7Um3ER05f3f2UboDjnCWGn76RPbmZ8sTt18kdV12UyLS7FRwNCrnO5kW/WBf6wbYi\r
- Bm8D24eIi6v/e7qMfKMT3vZHZ0RbkC+FdaLv8vCF5krvBRvlOJYeOiH94vZoJmFK6kgVr59GNeKVYgje\r
- Fw3bc6LgrduylMD+tjrdhkoJsTAla8N9nCne5ngfCt0q0qBAkH6wijUWkFtQbKJMJKZ0A6VdYohXy5fC\r
- 5Q9gTfz99GQ5tfkM+eCj9c4cDBBv4KT77SdKvG1qv6jm9mZgs3kkTl4GNsdZvegX60I/2FbE4CJg+xCB\r
- 4S8XJ7fg1YhXqnkcfggmXkL5fpWLX9I8eDtbnpuaCdlCwJ0hKJtYY2ETql+sMg0C1tm3ePEZ2VujpNNu\r
- SLb4W5USFoQPY+Xf6v9+0YKNhPu4MPFyWSJSL+ToB6tUY4F1C4pXkomG0uUtJRpYusQrXlAbPPueHFt7\r
- mrSesFx+5gUrf9yl+uIHli5nH4MTRvfpqtqEEthnl0RMu8T0YVCsC/1gWxEPo4HtwwSGv2B3/O9CefCG\r
- K2THxpV4+wBdzDzwskEsP6zZtE0uHonE2xICaQ8pcBIam2Rt2ITqB6tI4wFijSpeN+ky8VJ4JSFeLVv+\r
- zffXXcC0HLVsTcLkGglTsDaMx9rEy2G87NhvlaofIEg/WMUaCwguKF5RJhJKl0TrqxsTQ7h8jWcnStrz\r
- k+S+/gvl4+1bnbkXVMoNGKaAaseRn2TJtPFy/YVnqYCWwBIDiZh2ienDoFgX+sG2Ih7OBL8C2wcKDOXL\r
- y3ZUe/B2+Y6/dAEb20Iw/fIXFvLlpeLHL90op/SCzJpTJMsgSItovdik6gerROMBcvWTdvme0aRLvMIM\r
- wfuiYXlOqJSAW1235QQxphRtwiWmMKNiStaG8ViveDWUXFzy5fN8UkiqfoDsgmITZqKgdP301Y0FpVtt\r
- sqQ9OUHO7TBLlq3a4JQV9u8QYcINknI1dACSbvaaRXLfdZfKnVdfJE8kVrprgc1rIbxODIJ1oR9sK2Kh\r
- K7B9qLigfFnDafjco/Izx2L/9E3cyVcJmPP5HsyXH/F30w82yNFdIF4mYA5FjSRgr0yDYJVoPECufsTL\r
- y8jHJV4uj4X7WFvdlqUENaVgAExhRsUmWxP3cTbhEt21LJnitUo1FhBdUGyyTBTswaD66hZBuqznVp8q\r
- aU+8K1UaTpPhH67GGScnJt8l8kXAsoKJku5B2Y2z38duu0Zuufy/ia7rknuAzWkhvE4MgnWhH2wrYqEM\r
- yAa2DxYXPJWgfJtWe0J+3ovTFF6ZOF75Egp4L9IvBLw7e5vc+/ZanBZDJm0gEiXa0iheYhOuC6XbA/L1\r
- StZLmGxNeF808JhQKQH/Z91WlRLchjLinZYwFmFyjYZNtibu42zS1cTdyAZB+sEq1lhAdkGxCTMR8Icp\r
- UF9dDxRuLTz3qUlqgpsGY5fIwY8hy59xvPKqwPEKl4Sku0pJl2fBSZDue8DmszC8TgyCdaEfbCsSgYeA\r
- 7cPFha7hsJDe7KUnHfnGW3YwUPWifaz/5suitZvlnEEQV0sIpgPkYsrXJlS/WAUaLxbhathzI1ajGikk\r
- XA3vs9CFuPfruq3ulUC0bE1MuUYjTK7R8IrWi/s4m3A1cTWyQY5+sErVD1ifoHiFmQjU2QA+bzzSpXB5\r
- +9xkMEnu7L1AsjmrGOu43/mfvNwKhfs5zlDlR/k4y0m6SZIuORfYXBaG14lBsC70g21FojAR2D5gXGj5\r
- cnRKnacelG924MuVQ+qLiadIH4LplxOrH8Dp0Fe5MmRBllTmpd5bUDwsP+DvomAVaBGwSVc3rFGgiSgz\r
- aNnylq/XjrJ1eyUoPKL1Yso1GmFyjYZNtibu47yyNYmrkQ1y9INVqrGA8IJik2ZRUdLF+gTuqwso3Zem\r
- SNqTE+X0tjNl3pIMNQgidFHKokgXoUqNSpOfJHvFPHn01qvlpkvPSZZ0Oe2BzWGFMH0YFOtCP9hWJAr/\r
- BPuB7YPGBeVLOJPZ0/fcJLkrF2C1fhJBAi5q+iWq+9mBHbJ/d7bUe3+9pHeEeFtBQEy9lJ5NrLHwirOo\r
- 2MTLMkOseRmIVboE95my5WNDdVtDpF7BRsKUazTC5BoJm2hNjMfahOuF0vMtXz7WB4Wk6gdILyg2cRYF\r
- SpevG7SvLoXLOXOfmCjl8Hff91epckJc3cNsULr7P8exfUAWTRojd19zcbJqumQRsPnLiunDoFgX+sG2\r
- IjF4Ctg+bJHgF3DzZeeqL2TWmIHOZYN+/lbNUlSk9EuYgDk70sF82bZlm9w0Zq1T+23npl/KzyvXSHil\r
- mQgiiZdz1MYjXt0jgfLl1Xn9lBKiYYo1GqYwo2KTrYnxWJtoTQI1skGOfrBKNRaQXVBs4iwK3A685fy3\r
- fqVL4bLh7ZlJklbtPak2bDHOPLfh+Nvt/yoR0WBp4QscexAuB0gM7txSrrvoLLkLx3mSpEs4/sDmLite\r
- JwbButAPthXxwTvA9oGLBL8IzuvARrfODavL19vWYRV/dIYYJyL9ku/zhdPTzV69WU4fwPovJNUpQPr1\r
- SjNRhEkX6+WnUY2EZOsKl3/b6rZFuTS5KddomMKMik22Ju7jvJK1gvXjhC9W0XqBIP1gFWssILygeMVZ\r
- FNSlgSBev311dR33hcnqOmjXvj5PNm3YiJNNJNwAF6GMCIVLDn2FY/igbPtoltR88gF1bD908/9CZcYk\r
- UA/YnBUR04dBsS70g21FfFAObAa2D14k+IXwSsX8gjif73tDesnPqi50SNWHiixgpl/Wf5F+eQrVc26W\r
- lOEpPcsPXX0I2CvMROEVr99GNZ1u+X+mW05ME+oC5hFovHgFG4kwuUbDJlsT93FW0VrgYymfmI1sEKQf\r
- rGKNBd4/KF55FgVK129fXUr3lSmqrPCXFjNk6nwEHMhWDkG6Ra3jkk8gXA7/lR9kX95GGdipudx25fmq\r
- nvuYW1q0HfsJwFcvBi+mD4NiXegH24r45GJg+/AJQaffq887Xao/fq+smv4uwu83Ir9+V/TGN0IBf52L\r
- nW2H7N2RLc9PWg9x4dS+NURGEVOGxSleEpJvjEY11WCG+1UpQadbt3abDGyStRESayxssjVxH2eTrA0+\r
- VjWy2WSrgRz9YJVqLCC+oNjkGS9+++pSuDWnqoaz42q9L10nrpBfvsAxwO5hXyaojvsVBO6WFaYN76uO\r
- 5avPP0NdADfBAyO8bAeVgM1VUfE6MQjWhX6wrUgAOM2abSMkBN3wxst+cHaztnWqyY7VC7Ha+GIPfqlK\r
- B0UWMFDDjw/kS9bGrXL1yDWOfNtH6P1gE2ai0GlXNaoZojVly78pW44m0w1lRF9+PBkCtknWRkissbDJ\r
- 1sR9nE2yVvAcQglapUt4nw8KSdUPkF9QbAKNByZdJv1oSZfC5f2s4774njw9eBFO+rY6wo1zmG8YLClw\r
- FKnbLrNuxkSp/cxDcg3OWu+6OqEzjEXjQmBzVEy8TgyCdaEfbCsSkISOarPBL47zcvKCdxxSOKRrazmw\r
- YzNW/5D6ZU1I+YE7zv58JeH3lm2S0/pCgKz/dvaUH7yyTCRavCwfMO2asuX/Q7I1MIWbDOkSm2RthMk1\r
- EqZgbRiPtUrWhvs8XhbdWm6AHP1iFWssIMCg2CQaFNWoiM8XS7qQLQdBXNh5tqxanSnyA4f57gzt+4WO\r
- B79Q2JTugT04Fg/KJxlLpXOjGqqkwIZyfex6j+ck8ASwuckXpg+DYl3oB9uKxMG7wLZBEgq/xPtvuFwN\r
- unjqnpvkw5H93VrSQedimokQMK9yfDBffoGIu8zKlOM5By7rv7y1yTKRqEY1yFcnXMpWdQFj3VZL1SNa\r
- L15pFhWbYG2YwoyKV7RejMdaJesFz9FEbGSDHP1glWosIMCg2CQaFEqX7x9JuhTuq04d95QmH8i42WuF\r
- jcryA+u4CSorcLi//CAHd2+VEd3byT3XXar65DMkFZNwSXNgc5JvTB8GxbrQD7YViZOFwLZhEsrjdzoC\r
- 5ikMT2XqPPOwbJj1Hk5xcJrzy7eJKT9QwO7w489zt0vVd9c7Xc/aIolSkByM4ZWmH/g8XcflZehDQLh6\r
- OeeXoGxDdVsXr2AjYZNnUbBJ1oYpzKhowUbCfVwhwUYCz9Hw+ZRSodQLQfmhkFT9gPcLileiQaF0eUvB\r
- esVL4XKY75MT5ejqU6XZO8vkJ6ZSlhX8XuE3GhSumsLxgMj3n8mct4fI0/ferNpi7kMoKkbhku7A5qJA\r
- eJ0YBOtCP9hWJE5OBBnAtoESDr9gztnJ0xrSBac4n2Qsw0c6pE599GmQdefxiep+xsnX9+fLqg1b5KJh\r
- bv2XgzCiSbWQWN1lfJwetkzB8vppZrLlaDItkdb4m0nXJtdo2ORZFGyStREm12i4goyI+7hCgo0EnhMS\r
- L/5fqJENcvSDVap+gACD4hVpELR0vd3GdB33WQ7znSz391sou7ZucYT7bYK6h+GWE1pxaH/W/GlS//nH\r
- cPZ5ptxx1YXqeCxm6XK6WpuHAuN1YhCsC/1gW5EiUAVsBLYNlRT4ZfPUhqc491x7qYx+o5Mc4q8yBYxT\r
- oYSUH9j9jPXfvbky+qONckofSLQ1yw8QaS9Dqj0gVIqVV8JQYmWNGI9jQxkbxEJJVosNolDigjR4y2U8\r
- mNlCzXoll1G+GptovZjSTARarLEIiTUWFGQ03MdZJWsDz/HCbRhKvfjbD2Ey9QsEGBSvSINA6RKbdKtN\r
- kbSnJso57WfJ4uWcrnEXAshO9wzQs08HhdJVo84OyZ5Nq6RHi3qqhqu6h7nHoPe4TDIJky4xfRgU60I/\r
- 2FakiFQG64FtgyUNfvn3XX+ZOuV59r5bZcG44dhZvsBHxCkRLzOUCAEb0082+WCDHNUOQv3/9s4Eyorq\r
- TuNEJ4lZJrM4M5lJJiczmRMTjTooirsC4oIoaEQREhn2TQRkEYKIosYFgqDgBgruKLKIQIPs0DQ0O7Lv\r
- spjIKsjSDbL85/vuq2qL6n+/d6u73nvV3XUOv/Pg8l73ffXu/b17b9X9qjvk1BdC5TW0HLH29YrQJzH+\r
- 2/t/fnjijJcGURou7HAUkjsCTiVg7+8LA02yGmfINRl4L0lxnqdKVgOv8cLXUk5FO9kgSBtUsaYCn01Q\r
- /DINAt+X91pdCtfENY6Rf+o+KRHXyHudfYNRblniGl04gGF4lRTKN7u3ysjBz5nlhBqXni/33nxdNoRL\r
- QpUu8fowKGqhDVpFQuAsMBNoBy5tsCEQ3uWCI2DeXHPt7BwzNTJTJDamMi4/GAGb9d/tsn39ernrdYxq\r
- H0KHIK48bfBL132tK153quwKmB39EUyjKVeOmjUBa+IsK5pk/RRJNRUUYzI8z1Ulq4HX+TnjJBuOWyqK\r
- CdUGiDAomkxtoXTda3UpXD42GSvfaTdeHno3T47yNuphxDUSjnDNNt+jaOf7JHf029K64R1yQ9XfyJ01\r
- r8iWcEkoa7p+/E4Mglpog1aREAnttkFBYMMw67/VE5e1DOzTVfavX4q3e0zkyO6yyxcUXX5WsF3mLF4j\r
- FwzE6LcTOkcPyICjXr9o/ZQkXsrVK14XV8AUBcVCKfpHwH5plhVNshpeYSYFUkyK57mqZP3gNRr8WZQV\r
- s2j9ktVQxZoK/Pyg+GVqC6XrzdVtMU6qNBsrNw2aKRu9cY1KOw0EhUuOf4W+clQ2502T3g80MyPcOtdc\r
- WjSw0fpcBugONMeUGa8Pg6IW2qBVJGQeBdqBTDtsJNwXntgffp189MoA+cZ8k0PAX+0Maf03sfuNKWhD\r
- p62Qc7nc8CA6CjMEkgm4JPFSGpp4vbj/zw5JQboC9ouzrGiS1fAKMymOFEvEeV4xwZYEXlMSZtQLQdqg\r
- ijUVEGJQNKmmwiyb4PdRuG0Tl4f9+rFPZSrv5ss1XMY1Om1RbaO2cFnh0JfoG8flwKYVMuSJHnLbNZeY\r
- jUvcwp9F4Z4CvweaW0LB68OgqIU2aBVJA7eBUOMkg8BGU79mdXP9b9v76sn8ce9Blvvw9o+YKVUoyw/c\r
- fnx8hxzeuVk6jFqCToPO39kZmWoCLkm8PNFmRmoWeAVMYfF3hTny1SSrUSTWVOC9JcV5XjHBlgRekwzK\r
- rjuk5RetF1WqqcDPDYom1VTwc+2J39eB67ij5UeQ78CPF5rLwkyYTShxjRjhOlkozET5eNgL0hCivb5q\r
- YptvFoVLeHfgXwPNKaHh9WFQ1EIbtIqkiXNBHtAOcNphAyIM66hR7Xx5tENz2Zo/E4egIDG1YiMMQ8Dm\r
- IvUdsmHteqn12oKEfLsBStUr4GTi9Qs2Fe4yBDsrBUZpmuUHPPplGgRNshpnyDUZqFtSnOcVE2xJ4DUl\r
- wZ/njhaToYo1FTjOQfFLNRVc62f9uM235ThpPWLet3GNB8MYLEC4vBOEc/5j4ScfSPvG9eW6qudJvRrV\r
- sy1c8gbguSLNJaHid2IQ1EIbtIqkmW5AO9AZgQ2KUydOoepee6m8/FQv+XrzShyK48KpVijyddd/j2yT\r
- nPmr5Vf9c6VKR45eIAtXvn7pEpbzErMelKlPrjbwNRzhsaNTPubnlkHAmmQ1zpBrMhwhlojzvGKCLQm8\r
- Jhnmnmw4HslQxZoKHN+gaHLVYLwjLyV8IAfSHSfX9Z8uK1esSQSSHw4xrpFZJxh0bF88R57o3EZqXfY7\r
- ufWqqkV9xN9vMsheUAdo7kgLXh8GRS20QatIBvglmA60A58R2Lg4leKUiiKeMHxw0aUzJn4yDAFz+zH3\r
- xe/bKgNylss5lBlPwHH993Hgla4Xdu5U67wqeB2hfClhdnj3RFxpTsBpkvVzhliTAQkmxfNcVbIaeF0y\r
- +HNNfoNzXPwUE6oNOKZB0QSrQel2xufWaqL8os+n8snMZYm4RrPNN9Gm1LZmC9dxzRb7Y3J42xoZ+syj\r
- csf1l5u7v3B5IQKj3GGAG7E0Z6QNrw+DohbaoFUkg/CbbRvQPoSMwMbGNHyu/zKoefHEURhdHEgkLYUV\r
- P8nLzyDg/ds2ScuRiyECCKEzhMDRrSZgruuVRbwuroD5d05dKUpbAfsFWxJeYSbFEWGJeJ6rStYPXpMK\r
- /lyzk81zTLyoYk0F5BgUTbJeKNxu+NkQ7vfxmT07bpGc2oVRKddxw4pr3PdtXGPOmy/L/fVqm7jGu2tf\r
- ne64RhvmgYuA5oi043diENRCG7SKZIGHwXGgfShpx/2m5z2gOOV6qks7+WJZLg5PIn7SyDcMAXP999h2\r
- WblyrVzzUh5Gv+xwEANl6wqYj+yMgcWLjpsMV8Bc96QwUwnYL9iS8AozKY4IS8R5XjHBlgReYwOXGyg/\r
- //EgqlhTgZ8VFL9oXcyyAmg7ySwtNHojT3Zt3pAQrolrVNpRELikwGUvZphgIPHZtI/loWb3mowTpvxF\r
- YIS7C9wNNCdkDL8Tg6AW2qBVJEtwx9vbQPuAMgIbIqdcvCcUTzC80e9xzPQYP3ncjBRCufyMHaEAo4+v\r
- t8m4uSvlP5/h5WfsgBAEpct1XnbIsMXr4q4dcwpO4VGymoA1yWqcIddk4HclxXmeKlkNvMYGilc7yaZK\r
- NRX4XILily1xhfsgPuPWE6XagNmyZNlqfCnvEDmKtqG1naBQuiau8Zj8bcV8k2Vi4hqvYFxjjWxLl4Ms\r
- Xmb6d0BzQUbx+jAoaqENWkWyTFWwEGgfWEZgo/TGT059d6jIYV7jGPL24+M75CT+/dj4pfJdyqQjOiNv\r
- 1/MIRJEu8bqYE3GAAqD4XAFz1F3RxKudZFPFmgocq6B4hUso3Ydw3FtNlH/tM03enrbcfAkb6YaxzffL\r
- TRgt81zFMZNZ8u6gp4viGnkrrQiMchkh++9A6/tZwevDoKiFNmgViQj3gD1A+/DSDhsouf26aiaBqUuz\r
- +2TVjE8wZTtsUvYTJztCWH7g3Y8h4C+3bJSGb+VLla7TpUoHSJfbQ3l1gypZP5BCaSkaAUMI3DVH8ZsR\r
- MOSmidbPGXItCYgvJc5zVclq4DU2uOLlCN99z6pUU4HjExS/cLnmjhHudyDeXqMXJeIaT0C4+0NaxzVx\r
- jUfxZ6/MGPm6NL3rlkRcY60royDcpYC3C9P6elbxOzEIaqENWkUixHfBE+Ak0D7MtMMGy+3HnKJx+3G/\r
- nh1l16p8HLpCNPA9CfmWRcCULx7N3Y8LtsvC5Wul6oC5UqXleKnywKSEFFOCDl1aXLG4P4t/54k4ytAs\r
- O0BymnDJGXJNBn5WUjzPVSWrgdelwpUu8Z5kK5JpECDOoLjC5WM7fJbtc+TO1+bJNsY18vIwjHTLPsKF\r
- vPHoxjUym4QZJdytmaW4Rj9fgfuB1r8jgd+JQVALbdAqEkE4NRkLtA82I7DxcqrGBs2gkPdfeEaOs8Fz\r
- +zGmdpziqR3DFgqY248LE+u/b05dJuf2Qodv/olU6ZyDjuwVrR88r7RokuHP5KPZEQdplbTu6xVmUvAz\r
- kuI8TxWsBl5jg1e8hDIs6T2nBK8Ngivdjpi5tJooFz43S3IXrUp8vlzj19pAUCjdI4m4xn3rlpi4Rp4g\r
- rl39QjNYiMAo91nwfaD16cjg9WFQ1EIbtIpEmKtBxiMnvbAxu/GTLRvcJnNGvek0fkzxuP5bltEvoYCd\r
- LaGFf90s3T/Il7Mp3pYQcFdt+QFSKAuqZByMgAEFTJH5BXyGXJOB1ybFeZ4qWQ28xga/eN2TbNp7TYpH\r
- qDZQul3wOgj33N7T5LXJS01qmLkeN6y4xq/wsyDc47u3ykcv/+XbTJJorONOALxWX+vDkcPrw6CohTZo\r
- FSkHNAUHgPahpx3TsMFt115qGnvPtk1kQ+6nie2XvAaYnSMMAfOkCwT8+fp1Uu+VuVKlLYNSJnwrxLKK\r
- V5WMgit5juDMOjDkRwGfIddkQHpJcZ6nSlYDr7HBL16ivb+UeKSaDAqX67itGFQ+WTq8n2+yO8zlYaHG\r
- NR4xlznmjXtP2jS8wwwCOAuLwPW4zFaoAbQ+G1n8TgyCWmiDVpFyAne4DABaA8gIFLB7+6E6V1eVFx7r\r
- /m385OEQ4icpX/fys4IdMmvBSrngGcijBUa/HdC5KQVNqLYUE0wKXAFTMBQwZcmTcUWCLQnUOSnO81TJ\r
- auA1Nmji5Uk27b0lxSNXDR4PPrbHzKTNJLlpSK5sYFzjNzvEXLsdhnDxmIhrLJDN86dL7w7NpGa1C9Du\r
- Lilqi/72mUEOgXZA66eRx+vDoKiFNmgVKWf8F5gCtAaREdjoG2CqxwvTOdUb89pAObGHZ5id+MkwBGy2\r
- HydGTkMmLZGfcHebWf+FCCkHTaypKCYYS8zrnd/LLcmUZokChuyS4nluMcGWBF5ngyZe1tf/fpLiEawG\r
- pct13BYT5VdPzZSc3JWJa3G5lhvGNl9K18Q1HpODm1fKK0/1ikpco8sr4IdA65vlAq8Pg6IW2qBVpJxS\r
- E2wCWuPICOwE9WtUN1O/NvfdIQvGj0wsPcjh8OInuf345E45tHOTtHtnAUa+XP+dKFW6BRRwMcGUBmcE\r
- TAHxqgHKs9j6L2SXFM9ziwm2JPC6VKjSdTAjVO39aDiC9cOfwXVcHPsf4d+DJi5JXJvNqxXCiGukcE1c\r
- Y6Gcwpc34xop2ojENRJmraQ9sjETeH0YFLXQBq0i5ZwHQVazf/nIpYdal10gj3VqJVvzZ+BQH8WgZX8o\r
- 67+cujKpiiPgtavWyo0vzjUncswlS65U/aL1U0wwpcUR0cPOo3sijiNgI2D8PSl8jleqqcBrbNCE68I6\r
- qu9Fw3lfLhQu13Hb4Fg/mCMt31ogez/fmFjHxZdiKMJlXCOzQvClvXjSKJMhQuHWu+HyKAiX2SrM19b6\r
- XrnE78QgqIU2aBWpAPwIDAVaw8kI7CBu/CSnhq8+/Yh8/flqHPKQ4yd5BwJMbSfmfia/7ItRZ4sJia2o\r
- lIYmXJdigiktPjG5FAnYQZUugUwzLV7CpRr1/XjxvB93HZdxja0nyTUD58jKFWsTyz/8EtQ+oyCwPVC6\r
- hdzmWyA7l+bKU13ami9vXiLmtil/O8sg3ObLTBWtv5VrvD4Milpog1aRCsT5YC7QGlJGYGdhAtQNVc8z\r
- /544fIicNvGTBeHFTzpT3FN7t0i/jxfLD7jsQAFzayoFkjbpEo+cvLi/i8IqWgcGkRGvzajXeS98D1xL\r
- bzlRfvH4DBk7+zNJBB7hS88k2CmfSxAoXBPXeFyObF8rw/s9brJCKN2IxDUyQ+WfgdbHyj1eHwZFLbRB\r
- q0gF5A7wBdAaVdr5A0HnYfwko/g6NmkgyyaPSew2MtuP2XlDEDBv7Y0pL6e+TYfnJXa+tZ6Y2BZMkYQu\r
- XkdMyeASBDEChuwo2zMEzL97xZoKvMYGTbZnkOokm1NnJ67xe10/lcfGLJZTnGVwHXd/SMsKblwjZkGf\r
- vvOaNKl3k8kIYVZIBITLzBRmp2h9qsLgd2IQ1EIbtIpUYHqAY0BrZGmHHYmXn3HqyEvQ/ty1PaaUc/Ex\r
- FOJPOPGT5rIjhmdjNPbZijVy5YDZGKlh9Nves/4bGhBTENx1YK+A3RNxxQRbEnidDapsfZjlA+V9cRmC\r
- deU6bvscafxGnny5JeS4RjyaL103rrFpQ3NNOLNB2E6yLN0vQQOg9aEKh9+JQVALbdAqUsHhvd/eB1qD\r
- ywjsVNx+XOuy801y1Ii/PCEFO9fj4+D247+Gk35m7n6MqfDX22TUzOXyH30gu+YQcOfJCbFowgmMI9Kg\r
- +E/E9Z6FR02yfvBcGzTJapR0ko1XimCUe0n/2ZK/ZHXROnqZ13EJpVuwB591ocn86PenjuZLmDTO/jZf\r
- ZqI8CZiRovWdConXh0FRC23QKlJJqAaWAK0BZgR2Mnf7MeMnp7031Nl+jKnnvhC3H2NqfBJT5EdHL5Kz\r
- H2J2AATMdeAyCdgj0tLiFTBFyFsiGTTpEj7HAr9gk+EeAz7yS6nFJ/LTR6fJO9MZ18htvpBuWNt8zdr+\r
- cSnE398Z+Ge5s+aVUrPab6MS1zgK/AxofaVC4/VhUNRCG7SKVDIagd1Aa4xphx2OcIrJqWbXFo2c+MlD\r
- iTVgdtowBOxsP/5i03ppMGxeYv2XW5DNCTBHPoHwCLTM4OexDq6AS1x6wP/Z4JdrMvg7u+JLCF9GZ3eZ\r
- LD0+XAgxYlTKZYWw1nHduMbDu2T2qDel+d11zJdtROIamX1yFdD6RqXA78QgqIU2aBWphDAJ/2lwGmiN\r
- M+2wA7rbj0n/Xp1l75pF+IiOoc868ZNax7aF8sWj2X58bIfMX7RaLn4Oo0uOfjm1LibWVGgCLSVca/Vi\r
- BDwdEqVsvSNgiNIGTbB+zPPwOx7AKLf9JJOFwUwMI9xDIa7jcgPN6cMmy6Nnm/vNlyszPtwvXK0tZAhm\r
- nTQDWn+oVPidGAS10AatIpWYn4NxQGuoGYGdkduOa1Q735zZfv/FZ+UYOzFPwGGqGtr6L6fQBz+XEVOX\r
- yb/0hux4Ao7LEFajXzw/LPzS9eMK2IyCHWGmQhOtFz6nM35228nyu36zZXb+qsQXEtdxw9rm64lrZIZH\r
- nWsuMV+oEdnmy4yTc4DWByodXh8GRS20QatIjJl6rQFao80I7JxMnOKUtEWD22Tu6LfMyNdMWcOKn2RU\r
- IUZ4jJ/sNnKhnEXxtrZZ/4W0wkKT7Rng9/GRW5IpTBsBa7Il/D/eXLTNZPlJ7xny0uRlOAbOl1BY23yd\r
- uMZv9nwuo199PhHXeMlvo7LNdzJgtonW5istXh8GRS20QatITBEtwEGgNeK0w476h7qJ+EneM6tXu6ay\r
- cd5UfGyQL6ewTmdXJRAAsxngmx2yZd06ue3luRCTZ/uxKmCIMCyKiTYFRcsQjkj9lCTcnnhNO3yhdJkq\r
- D45cJAd3bEosK4Qd13hsv4lrbHtfPfOlyatWIiDc9YBZJlobr/R4fRgUtdAGrSIxZ8Dtx4OA1qAzAjsu\r
- p6i8swC3Hw95oqfs34DRGtd/D+8qu3w5+uXGAGe6PXX+SvntMxhZcvmhYw6kFRHpeilJwH7h8vFB1Lv9\r
- FLnx5TxZt3qd+ZIJP67xqGxZMF36dGxpviS5tOB+dv7PM4McAR2A1q5jHLw+DIpaaINWkRiV/wFTgdbA\r
- MwI7MaesjJ/kJUjjhg6Uk2bnU6GZ4oYiYMZPcmcWRoKDJy2RH1O63H7cxV3/hfTCQhNqaaCA3SUIr3Qx\r
- uuWywq+eniOT81YlNpbwyyWsdVwT13hcDmxZKS8/+Sepi5lJxOIa/x5obTnGg9eHQVELbdAqEpOUm8FW\r
- oDX2jMBOzSkstx+3a1xf8hk/eQyjLt4BI6z4SWf998D2TdKW8ZMc+XIJgslclJ0m0qD4BVpW3BHww3hs\r
- O0V++KcZ0n/CUjltsixCXMc1cY0FchpfdhOGDzZXo3BZ4e5orOMym4QZJVrbjVHwOzEIaqENWkVirOgE\r
- CoDW+NOO28FvdeMnMcXdvmg2PtKw4ycT67/rV62RG16cU7SNtkicfpna4pdmGHBNuh3q1mmKNHsrX/Z9\r
- vikh3IPhxzUunTymKK6RGRwREC6zSG4HWluNSYLfiUFQC23QKhJjzT+A14HWETICOzyntpQvBTD0mUfl\r
- 4BZMq7n+G3b8JCQ8Ye5n8t9Pcv0Xo99OXH6A8DSxpsIvzdLi3j6d1yLjS+HaQXNNRoW5AwS/NLT3FARz\r
- /CBdE9dYaLI1mLHBW/1HJK6R2SM9gdY+Yyzw+jAoaqENWkViAnMByANax8gI7PyMn+TyQ+O6tSTnzZed\r
- LaoYAe/fHo6AOWU/sVNOY8r+HOMnOcJkAHvXUiw/eOVZWihdxjWiDj/rO0M+nLUicdKMGRVhbfM1cY3H\r
- 5OiOdSZTo37N6lITX3L33np9FEa57wFmj2htMsYSrw+DohbaoFUkptTUA9mLn4QICEe+3CHVsck9snzK\r
- 2EQKVtjxk9/slL1bN0qTEfOLwsFNhCKFqInWi1+gQaFwzTbfifI9/M4nxi2WExyVm7jGkNZxvXGNb79q\r
- sjT4pRaRuMYF4FKgtcGYgPidGAS10AatIjFlgtuP+4Csxk82rlvDTIdvuuJieebhDvK35Xn4uCGSgr0J\r
- +ZZRwOYyKhM/uV2WLF0t174wN7H2SwF3ghS7O5IMU7wcYfPGkhxlPzRF7of0d24KOa6RAj/BL6pDsmrG\r
- BOnSvJG5iiQicY3MFGG2iNbuYkqJ34lBUAtt0CoSEwr/BkYCrQNlBEqi4S3XmetK69W4Qt4a8KQUfLER\r
- H7sTPxnG6Jfbj7n+e2i75C1aLfcPz5MfPjJNqrSFgBnC3gGi5J0wOBp208g0qfrh8/gavvZBCL0Vfl6H\r
- HPn5UzOk0/v5spHX43JJgfJ36qLW0RZK1+wMLJTdK/PluZ4dnS+uSMQ1MkPkz+BsoLW1mDLg9WFQ1EIb\r
- tIrEhMrlIBrxk5gqN73rFpnO+MnDu/Dxh7T9GJjrfynCgu1yaNsm+XDWZ+ZGkBc9O0vOokTNSBXy5GiV\r
- u+I4OuYSBS9To1j5b8L/43OYnNZlipwDiV/1/BzpPmqhzMxfJacoe/4ek6sQ0rKCWQsvNHGNzMbgseJS\r
- TUTiGseA/wRa24oJAa8Pg6IW2qBVJCYtNAZ7gda50g4FwlsQ1XXiJ7u1aCRrZk38Nn4yrPVfjoDNGnBC\r
- wrJni+zYsF6mL1glr0xZJt0/WiTN35wvjV7PkztfnWfukHHDoDly77A8aYgyXjPce+xiGTZ1ucxfslr2\r
- b8UInZnClC3h37XfHRQK18Q1HoHEd8uc0W+bTIzr//c8ubNWJLb5MiukUsc1Zgq/E4OgFtqgVSQmbXwP\r
- MH7yFNA6W9qhUBrhkVNoTqUH9O4ie1YzfrLATLXDGP26GAlTlMwCpoS5Fkt58jIvlh3A//E5HC1T1izj\r
- 0gGlzRNlHNWynFdTcLeZ8jsCQ+Hi0Y1rXD93ivRq939mOYY7zxrzCyq70t0PmgOt/cSkAb8Tg6AW2qBV\r
- JCbt/AKMB1rHywiUixs/ycvQPnypvxzniNWNnwxRwF7MyStXtoRSJe6/MUIOZUSrQemauMZC2b9+mQzu\r
- +7DJVGAGRkS2+TIT5AdAazMxacLrw6CohTZoFYnJGNeCtUDrhBmBsmH8JM/ct7qnruRiys0rH8wUPIzt\r
- x1GAwi2Ka9wmo18ZYNZvIxTXmAOYBaK1kZg04/VhUNRCG7SKxGScNiCr8ZN8ZPJZzWoXyCMPNJVNeYyf\r
- hHyZvOXIS5ValKFwGdfIDItj+2XB+PelbaP6ch3jGmtEYh13C6gNtDYRkyH8TgyCWmiDVpGYrMD4yReB\r
- 1kEzAkXEKfeNl19opuCD+/aQrzatQDMJKX4yU1C4eDSZFXJUti2aZbIsuOOM2Rbue/W//wzCjA9mfWjt\r
- ICbDeH0YFLXQBq0iMVnl12Aa0DpsRqCUTPzkJb8xIh43dJCcMFcAhBQ/mU4oXRPXWCgHNq+U157uLbdf\r
- f7nUuiwycY1DATM+tM8+Jgt4fRgUtdAGrSIxkeAmsA1onTcjUFL1alQ3U/N2mKIvnPABfLYPzeaIMBox\r
- MgJ26pHIVSiUU6jbpBEvmfdg4hprR2Kbby6I4xojiNeHQVELbdAqEhMpuoKjQOvMaccVFqfoNzJ+slMr\r
- WTc7BzP4RFqX2YixO0sn4Ti65UjcnAwslNP7tkvu2HekY5MG5lrliMQ17gT1gfbZxkQArw+DohbaoFUk\r
- JnL8IxgOtI6dESgwTtVrV7/IxCH27tBM5ox5Rwp3rEMzwgiYJ7A4xd+3TZdkSJhMXAaRH+VlYUdNrsLB\r
- Dctk/PAhRri1Lv+d3BqduMZe4DtA+0xjIoLXh0FRC23QKhITWS4C2Y2fBIxE5AYMZgC3vKeuDHvuMVn2\r
- 6Tgp3LZGzJ0wOBLmbjheM8vtuByVcmecItJkJCTLTRR/xah2T2KXnUkM2yVfb1wuuR+/ZzaA/BGC5QiX\r
- JwTvuy0S67jvgp8C7TOMiRheHwZFLbRBq0hM5GkAshY/SdwRMNeAuQmjztVVzXXA/Xt1lnFvDJbVsyfJ\r
- QcjRXM5lQsQxOqWQTztblLlzjJeqcc2Y8N+E/ycYPfNKipN45NUUkPDu1QtlyZQx8v6QftK3c2u5v15t\r
- I3/uOLvrxqvM7XciIFxmclwGtM8sJqLQg6VFLbRBq0hMuYBJVY+CE0CTQEZpiFEw7wPHmz3WvPR8synj\r
- j3fcKN1b/kEG9ukmI55/UsaPeElmjX7bjI4/m/6JrMudIl8snyc7ls6V1bMmycoZEyDXsTL9wxEy9vUX\r
- ZFi/x+S5Hh2lc9N7MZKtYaIZeaXFLVdebIJsInKVAtkD4rjGcormRVvUQhu0isSUK34GPgCaELICR5/3\r
- 3HytGYkylIdbcnlvMo5OeZKOmxfurHml3F37GvNcCvSuWleZsno3VDcZEhQslw/499uvv8xsa+ZuM+33\r
- ZZGTgNkb3wfaZxNTDtC8aItaaINWkZhyCae4y4EmiEhAyXJkTIFSzLxWmEIlDfBvlhE+R3t9xGDWBjM3\r
- tM8iphyhedEWtdAGrSIx5Zo/Ak59NVnElJ1VgBkb2rGPKYdoXrRFLbRBq0hMuYcJV/2BJo6Y0sEsjdZA\r
- O94x5RjNi7aohTZoFYmpMPwSZDV+soLwPPgx0I5xTDlH86ItaqENWkViKhw1QFbjJ8spUwGzM7RjGlNB\r
- 0Lxoi1pog1aRmApLW3AIaJKJ+ZbPwc1AO4YxFQzNi7aohTZoFYmp0PwEDAGacCo7R8BDQDtuMRUUzYu2\r
- qIU2aBWJqRScB2YATUCVkTcAMzG0YxVTgdG8aItaaINWkZhKRR3AqbUmo8oA4xovBNqxiakEaF60RS20\r
- QatITKWkO+CdETQ5VUQY13gX0I5FTCVC86ItaqENWkViKi28M8ILIGu3n88A+wBvu3MW0I5BTCVD86It\r
- aqENWkViKj2MNGQGwVdAk1d5ZDPoAM4B2nuOqaRoXrRFLbRBq0hMjAN3wDUF+UCTWdQ5DXjr9LpAe38x\r
- MaoXbVELbdAqEhOjwBNQz4INQJNclGBYfBfwc6C9l5iYIjQv2qIW2qBVJCYmBRcD3gtuCojCCbnd4CPQ\r
- DnCbtFbnmBgVzYu2qIU2aBWJiQkAMwy4JbkHeA+sBoVAE2QYMKyGSx+87pairQa+C7S6xcSkRPOiLWqh\r
- DVpFYmLKCDciXAXuAw8DXikxEnwKFgMuV1DQewFHzLyLMm9lxMhF/h+XCrg2y3uXMWWtI/g94D3nuO6s\r
- /c6YmFKhedEOqfL/rGctzTPyeVwAAAAASUVORK5CYII=\r
</value>\r
</data>\r
</root>
\ No newline at end of file
using NLog;\r
using System;\r
using System.IO;\r
+using System.Linq;\r
using System.Net;\r
using System.Windows.Forms;\r
-using Model;\r
-using System.Threading;\r
\r
namespace Maestro.Targets {\r
\r
return result;\r
}\r
\r
+ protected override string DetermineWorkingDirectory(Connection connection) {\r
+ string result = null;\r
+ if (!String.IsNullOrEmpty(parameters.TargetConfig.SubFolderFormat)) {\r
+ string name = GetDynamicName(parameters.TargetConfig.SubFolderFormat);\r
+ //TODO ellenőrizni, hogy mi van placeholder esetén\r
+ if (parameters.TargetConfig.SubFolderFormat.Contains("%TEXT%")) {\r
+ string pattern = name.Split('-')[0] + "-";\r
+ targetFTP.SetWorkingDirectory(connection.Address.LocalPath);\r
+ FtpListItem item = targetFTP.GetListing()?.Where(i => i.Type.Equals(FtpFileSystemObjectType.Directory) && i.Name.StartsWith(pattern)).FirstOrDefault();\r
+ if (item != null)\r
+ name = item.Name;\r
+ targetFTP.SetWorkingDirectory("/");\r
+ }\r
+ result = Path.Combine(connection.Address.LocalPath, name);\r
+ } else\r
+ result = connection.Address.LocalPath;\r
+ return result;\r
+ }\r
+\r
protected void TerminateClient(FtpClient ftpClient) {\r
if (ftpClient != null) {\r
ftpClient.Disconnect();\r
using Commons;\r
using Maestro.Metadata;\r
using System.Globalization;\r
+using System.Text.RegularExpressions;\r
\r
namespace Maestro.Targets {\r
\r
private const string KILLDATE_FILE = "{0}.{1}.killdate";\r
private const string METADATA_FILE = "{0}.json";\r
private const string DEFAULT_EXTENSION = ".MXF";\r
+ private const string NORMALIZE_TEXT_PATTERN = "[^0-9A-Za-z-._]";\r
+ private const string NORMALIZE_TEXT_REPLACEMENT = "_";\r
+\r
protected FileInfo inputFile;\r
protected string workingDir;\r
protected TargetProcessorParameter parameters;\r
string title = parameters.ArchiveMetadata?.itemTitle;\r
if (!title.Equals(parameters.ArchiveMetadata?.mediaTitle))\r
title += " - " + parameters.ArchiveMetadata?.mediaTitle;\r
- byte[] content = MorpheusXML.ToXML(title, name, parameters.TargetConfig.DeviceIDMorpheus, parameters.MovieSegments);\r
+ string type = null;\r
+ switch (parameters.MetadataKind) {\r
+ case MetadataType.TrafficMaterial:\r
+ type = "PROGRAMME";\r
+ break;\r
+ case MetadataType.TrafficPromo:\r
+ type = "COMMERCIAL";\r
+ break;\r
+ case MetadataType.TrafficAD:\r
+ type = "JUNCTION";\r
+ break;\r
+ }\r
+ byte[] content = MorpheusXML.ToXML(title, name, parameters.TargetConfig.DeviceIDMorpheus, type, parameters.MovieSegments);\r
EnsureDirectoryExistence(parameters.TargetConfig.PathMorpheusMetadata);\r
UploadContent(name + ".xml", content);\r
}\r
}\r
}\r
\r
- protected String DetermineWorkingDirectory(Connection connection) {\r
+ protected virtual string DetermineWorkingDirectory(Connection connection) {\r
string result = null;\r
- if (parameters.TargetConfig.CreateSubFolder) {\r
- string subDir = ID;\r
- if (ID.Contains("_"))\r
- subDir = ID.Split('_')[0];\r
- result = Path.Combine(connection.Address.LocalPath, ID);\r
+ if (!String.IsNullOrEmpty(parameters.TargetConfig.SubFolderFormat)) {\r
+ string name = GetDynamicName(parameters.TargetConfig.SubFolderFormat);\r
+ if (parameters.TargetConfig.SubFolderFormat.Contains("%TEXT%")) {\r
+ string pattern = name.Split('-')[0] + "-*";\r
+ string[] dirs = Directory.GetDirectories(connection.Address.LocalPath, pattern);\r
+ if (dirs.Length > 0)\r
+ name = dirs[0];\r
+ }\r
+ result = Path.Combine(connection.Address.LocalPath, name);\r
} else\r
result = connection.Address.LocalPath;\r
return result;\r
return "/".Equals(workingDir) ? fileName : Path.Combine(path, fileName);\r
}\r
\r
- protected virtual string CreateOutputFileName() {\r
- string nameWithoutExtension = parameters.TargetConfig.OutputFormat\r
+ public static String RemoveDiacritics(String s) {\r
+ String normalizedString = s.Normalize(NormalizationForm.FormD);\r
+ StringBuilder stringBuilder = new StringBuilder();\r
+\r
+ for (int i = 0; i < normalizedString.Length; i++) {\r
+ Char c = normalizedString[i];\r
+ if (CharUnicodeInfo.GetUnicodeCategory(c) != UnicodeCategory.NonSpacingMark)\r
+ stringBuilder.Append(c);\r
+ }\r
+\r
+ return stringBuilder.ToString();\r
+ }\r
+\r
+ protected string GetDynamicName(string text) {\r
+ string idRoot = ID.Contains(NORMALIZE_TEXT_REPLACEMENT) ? ID.Split(NORMALIZE_TEXT_REPLACEMENT[0])[0] : ID;\r
+ string result = text\r
.Replace("%ID%", ID)\r
- .Replace("%TEXT%", parameters.MetadataText)\r
+ .Replace("%IDROOT%", idRoot)\r
+ .Replace("%TEXT%", "-" + RemoveDiacritics(parameters.MetadataText))\r
.Replace("%SOURCENAME%", Path.GetFileNameWithoutExtension(InputName))\r
.Replace("%TIMESTAMP%", DateTime.Now.ToString("yyyyMMddhhmmss", CultureInfo.InvariantCulture));\r
+ // replace hungarian and special characters\r
+ result = Regex.Replace(result, NORMALIZE_TEXT_PATTERN, NORMALIZE_TEXT_REPLACEMENT);\r
+ if (result.Length > 100)\r
+ result = result.Substring(0, 100);\r
+ return result;\r
+ }\r
+\r
+ protected virtual string CreateOutputFileName() {\r
+ string nameWithoutExtension = GetDynamicName(parameters.TargetConfig.OutputFormat);\r
string extension = InputName.Contains(".") ? InputName.Substring(InputName.LastIndexOf(".")) : DEFAULT_EXTENSION;\r
extension = extension.ToUpper();\r
string result = String.Format(FILENAME, nameWithoutExtension, extension);\r
label += String.Format($" {story.Name}");\r
\r
TreeNode storyNode = treeOctopus.Nodes.Add(ID, label);\r
- storyNode.Tag = ID;\r
+ storyNode.Tag = story;\r
+\r
if (configuration.DisableStoryCheck)\r
HideCheckBox(treeOctopus, storyNode);\r
else {\r
treeOctopus.SelectedNode = selectedNode;\r
}\r
\r
- if (selectedNode.Checked)\r
- IDChangedEvent?.Invoke(selectedNode.Tag as string, selectedNode.Name, selectedNode.Text);\r
- else\r
+ if (selectedNode.Checked) {\r
+ Story story = selectedNode.Tag as Story;\r
+ string text = String.Format($"{story.Name}_{story.Format}");\r
+ IDChangedEvent?.Invoke(story.ParentStoryID, selectedNode.Name, text);\r
+ } else\r
IDChangedEvent?.Invoke(null, null, null);\r
}\r
\r
return client;\r
}\r
\r
-\r
/// <summary>\r
/// Hides the checkbox for the specified node on a TreeView control.\r
/// </summary>\r
using System.Drawing;\r
\r
namespace TrafficClient {\r
- public delegate void OnSelectedIDChanged(string ID, int variantID);\r
+ public delegate void OnSelectedIDChanged(string ID, int variantID, string text);\r
\r
public partial class TrafficIDSelector : UserControl {\r
public TrafficAPI trafficAPI { get; private set; }\r
}\r
\r
private void OnSelectionChanged(DataGridViewRow actualRow) {\r
- TrafficItem res = actualRow.DataBoundItem as TrafficItem;\r
- if (String.IsNullOrEmpty(res.MediaID)) {\r
- TrafficVersion v = trafficAPI.CreateMaterialVersion(res.EpisodeID);\r
+ TrafficItem trafficItem = actualRow.DataBoundItem as TrafficItem;\r
+ if (String.IsNullOrEmpty(trafficItem.MediaID)) {\r
+ TrafficVersion v = trafficAPI.CreateMaterialVersion(trafficItem.EpisodeID);\r
if (v != null) {\r
- res.MediaID = v.MediaID;\r
- res.VariantID = v.VariantID;\r
+ trafficItem.MediaID = v.MediaID;\r
+ trafficItem.VariantID = v.VariantID;\r
}\r
- if (res.VariantID == 0 || String.IsNullOrEmpty(res.MediaID))\r
+ if (trafficItem.VariantID == 0 || String.IsNullOrEmpty(trafficItem.MediaID))\r
return;\r
}\r
DataGridViewCheckBoxCell actualCell = actualRow.Cells[0] as DataGridViewCheckBoxCell;\r
selectedCell.Value = !(bool)selectedCell.Value;\r
bool selected = (bool)selectedCell.Value;\r
Debug.WriteLine("Selection {0}", selected);\r
- if (selected) {\r
- IDChangedEvent?.Invoke(res.MediaID, res.VariantID);\r
- } else\r
- IDChangedEvent?.Invoke(null, 0);\r
+ if (selected)\r
+ IDChangedEvent?.Invoke(trafficItem.MediaID, trafficItem.VariantID, trafficItem.Title);\r
+ else\r
+ IDChangedEvent?.Invoke(null, 0, null);\r
}\r
\r
public void ClearSelection() {\r
}\r
\r
private void OnTypeFilterChanged(object sender, EventArgs e) {\r
+ dtScheduled.Enabled = rbMaterial.Checked;\r
RefreshResults();\r
}\r
\r
SErvername MEDIACUBE\r
-*traceflags api\r
-*tracefile /opt/mediacube/tsm.trace
\ No newline at end of file
+traceflags api\r
+tracefile /opt/mediacube/log/tsm.trace
\ No newline at end of file
<Filters>\r
<MarkerFilter marker="MEDIACUBE" onMatch="ACCEPT" onMismatch="DENY" />\r
</Filters>\r
- <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %logger{1}.%M - %markerSimpleName - %msg (%F:%L) %n" />\r
+ <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %logger{1}.%M - %markerSimpleName - %msg (%F:%L)%n" />\r
</Console>\r
<HTMLMailAppender name="MarkeredMail" subject="MediaCube rendszerüzenet" to="vasary@elgekko.net" from="mediacubeserver@gmail.com" smtpHost="smtp.gmail.com"\r
smtpPort="465" smtpProtocol="smtps" smtpUsername="mediacubeserver@gmail.com" smtpPassword="salabakter" ignoreExceptions="false" bufferSize="1">\r
<Filters>\r
<MarkerFilter marker="MEDIACUBE" onMatch="DENY" onMismatch="NEUTRAL" />\r
</Filters>\r
- <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %logger{1}.%M - %markerSimpleName - %msg%n %throwable" />\r
+ <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %logger{1}.%M - %markerSimpleName - %msg (%F:%L)%n %throwable" />\r
<Policies>\r
<TimeBasedTriggeringPolicy />\r
</Policies>\r
<Filters>\r
<MarkerFilter marker="MEDIACUBE" onMatch="DENY" onMismatch="NEUTRAL" />\r
</Filters>\r
- <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %logger{1}.%M %msg%n %throwable" />\r
+ <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %logger{1}.%M %msg (%F:%L)%n %throwable" />\r
<Policies>\r
<TimeBasedTriggeringPolicy />\r
</Policies>\r
</RollingFile>\r
<RollingFile name="RollingFileExceptions" fileName="${fileName.err}" filePattern="${filePattern.err}">\r
- <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %logger{1}.%M - %markerSimpleName - %msg%n %throwable" />\r
+ <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %logger{1}.%M - %markerSimpleName - %msg (%F:%L)%n %throwable" />\r
<Filters>\r
<ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY" />\r
</Filters>\r
<launcherArgs>\r
<programArgs>-consoleLog -console 5555\r
</programArgs>\r
- <vmArgs>-Dfile.encoding=UTF-8
--agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8888
--Djavax.ws.rs.ext.RuntimeDelegate=org.jboss.resteasy.spi.ResteasyProviderFactory
-
-#System
--Djetty.home=/opt/mediacube/configuration/jetty
--Dlog4j.configurationFile=/opt/mediacube/configuration/log4j2.xml
--Djobengine.jobsteps.root=/opt/mediacube/configuration/executors
--Djobengine.jobtemplates.root=/opt/mediacube/configuration/jobtemplates
--Djobengine.jobscheduling.config=/opt/mediacube/configuration/scheduledjobs.json
-
--Dorg.eclipse.equinox.http.jetty.http.port=80
--Dorg.eclipse.epp.logging.aeri.skipReports=true
--Declipse.ignoreApp=true
--Dosgi.noShutdown=true
--Djobengine.loglevel=INFO
--Djetty.etc.config.urls=etc/user-jetty.xml,etc/user-jetty-ssl.xml,etc/user-jetty-ssl-context.xml,etc/user-jetty-http.xml,etc/user-jetty-https.xml\r
- </vmArgs>\r
- <vmArgsLin>#Database\r
--Djobengine.db.url=jdbc:db2://localhost:50000/mc:retrieveMessagesFromServerOnGetMessage=true;\r
--Djobengine.db.user=db2admin\r
--Djobengine.db.password=password\r
--Djobengine.nosql.db.url=jdbc:db2://localhost:50000/mc:retrieveMessagesFromServerOnGetMessage=true;\r
--Djobengine.nosql.db.user=db2admin\r
--Djobengine.nosql.db.password=password\r
--Djobengine.nosql.db.schema=test\r
-\r
-#Octopus\r
--Djobengine.octopus.api.address=http://10.10.1.11/api/v1\r
--Djobengine.octopus.api.user=mam\r
--Djobengine.octopus.api.password=napocska\r
+ <vmArgs>-Xms512m\r
+-Xmx1024m\r
+-Dfile.encoding=UTF-8\r
+-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8888\r
+-Djavax.ws.rs.ext.RuntimeDelegate=org.jboss.resteasy.spi.ResteasyProviderFactory\r
\r
-#Selenio\r
--Djobengine.selenio.address=http://10.10.1.71:44000/TranscodeMgrWS?wsdl\r
--Djobengine.selenio.projectfilepath=\\10.10.1.71\Data\Blueprints\MP4_H264_AAC_v4.zenium\r
+#System\r
+-Djetty.home=/opt/mediacube/configuration/jetty\r
+-Dlog4j.configurationFile=/opt/mediacube/configuration/log4j2.xml\r
+-Djobengine.jobsteps.root=/opt/mediacube/configuration/executors\r
+-Djobengine.jobtemplates.root=/opt/mediacube/configuration/jobtemplates\r
+-Djobengine.jobscheduling.config=/opt/mediacube/configuration/scheduledjobs.json\r
\r
-#Nexio\r
+-Dorg.eclipse.equinox.http.jetty.http.port=80\r
+-Dorg.eclipse.epp.logging.aeri.skipReports=true \r
+-Declipse.ignoreApp=true \r
+-Dosgi.noShutdown=true\r
+-Djobengine.loglevel=INFO\r
+-Djetty.etc.config.urls=etc/user-jetty.xml,etc/user-jetty-ssl.xml,etc/user-jetty-ssl-context.xml,etc/user-jetty-http.xml,etc/user-jetty-https.xml\r
+ </vmArgs>\r
+ <vmArgsLin>#Database
+-Djobengine.db.url=jdbc:db2://localhost:50000/mc:retrieveMessagesFromServerOnGetMessage=true;
+-Djobengine.db.user=db2admin
+-Djobengine.db.password=password
+-Djobengine.nosql.db.url=jdbc:db2://localhost:50000/mc:retrieveMessagesFromServerOnGetMessage=true;
+-Djobengine.nosql.db.user=db2admin
+-Djobengine.nosql.db.password=password
+-Djobengine.nosql.db.schema=test
+
+#Octopus
+-Djobengine.octopus.api.address=http://10.10.1.11/api/v1
+-Djobengine.octopus.api.user=mam
+-Djobengine.octopus.api.password=napocska
+
+#Selenio
+-Djobengine.selenio.address=http://10.10.1.71:44000/TranscodeMgrWS?wsdl
+-Djobengine.selenio.projectfilepath=\\10.10.1.71\Data\Blueprints\MP4_H264_AAC_v4.zenium
+
+#Nexio
-Dnexio.host=10.10.1.55\r
</vmArgsLin>\r
<vmArgsMac>-XstartOnFirstThread -Dorg.eclipse.swt.internal.carbon.smallFonts\r
<argument>/command</argument>\r
<argument>"open ${remote.address} -hostkey=""${remote.hostkey}"""</argument>\r
<!-- <argument>"call ${remote.location}/stop-mediacube.sh 2>/dev/null"</argument> -->\r
- <argument>"call pcs resource disable mediacube_script"</argument>\r
- <argument>"call sleep 5"</argument>\r
+<!-- <argument>"call pcs resource disable mediacube_script"</argument> -->\r
+<!-- <argument>"call sleep 5"</argument> -->\r
<argument>"call rm -rf ${remote.location}"</argument>\r
<argument>"call mkdir ${remote.location}"</argument>\r
<argument>"lcd ${local.location}"</argument>\r
\r
if (killDateDays > 0) {\r
KillDateFile killDateFile = new KillDateFile(sourceMediaFile.getParent().toString(), sourceMediaFile.getFileName().toString());\r
- killDateFile.create(killDateDays);\r
+ killDateFile.create(killDateDays, getMarker());\r
}\r
} catch (Exception e) {\r
logger.catching(e);\r
\r
if (killDateDays > 0) {\r
KillDateFile killDateFile = new KillDateFile(targetPath, targetFileName);\r
- killDateFile.create(killDateDays);\r
+ killDateFile.create(killDateDays, getMarker());\r
}\r
\r
} catch (Exception e) {\r
if (transcodeTask == null)\r
throw new NullPointerException("Unable to query transcode task, server response is empty for transcode input: " + sourceFile);\r
\r
- Integer estimate = transcodeTask.getEstimateSecondsRemaining();\r
- if (estimate != null)\r
- logger.info("Estimate {}", estimate);\r
+ // Integer estimate = transcodeTask.getEstimateSecondsRemaining();\r
+ // if (estimate != null)\r
+ // logger.info("Estimate {}", estimate);\r
Double progress = transcodeTask.getProgress();\r
if (progress != null)\r
jobRuntime.incrementProgress((int) Math.round(progress * 100));\r
QueryBuilder.start("scheduledStart").lessThan(calStop.getTime()).get()).get();\r
}\r
\r
- logger.info(query);\r
+ //logger.info(query);\r
DBCursor find = collection.find(query).sort(new BasicDBObject("scheduledStart", new BasicDBList(1, "$date")));\r
if (find.hasNext())\r
result = find.toArray();\r
qf.format("(SELECT ii.ID %1$s) ORDER BY i.TITLE", innerQuery);\r
}\r
\r
- logger.info(resultQuery.toString());\r
+ logger.trace(resultQuery.toString());\r
return resultQuery.toString();\r
}\r
\r
else\r
typeQuery = String.format("SELECT ii.ITEMTYPEID, CAST(COUNT(DISTINCT(ii.ID)) AS BIGINT) %s GROUP BY ii.ITEMTYPEID", innerQuery);\r
\r
- logger.info(typeQuery.toString());\r
+ logger.trace(typeQuery.toString());\r
PreparedStatement st = null;\r
ResultSet rs = null;\r
try {\r
results.add(sr);\r
}\r
} catch (Exception e) {\r
- e.printStackTrace();\r
+ logger.catching(e);\r
} finally {\r
try {\r
if (rs != null)\r
step = createStepObject();
if (step == null)
throw new Exception("Step object is null");
- logger.info("Executing job {}-{}, step {}, thread name {}", jobRuntime.getId(), jobRuntime.getName(), step.getClass().getSimpleName(),
- getName());
+ logger.info("Executing job {}-{}, step {} ({})", jobRuntime.getId(), jobRuntime.getName(), step.getClass().getSimpleName(), getName());
//TODO ez biztosan kell?
//jobRuntime.IncrementPriority();
jobEngine.sendMessage(new JobStepCompletedMessage(jobRuntime.getId(), outputs));
}
} catch (Exception e) {
- logger.error("Error executing job {}-{}, thread name {}", jobRuntime.getId(), jobRuntime.getName(), getName());
+ logger.error("Error executing job {}-{} ({})", jobRuntime.getId(), jobRuntime.getName(), getName());
Throwable t = e.getCause() == null ? e : e.getCause();
logger.catching(t);
jobEngine.suspendJob(t, jobRuntime);
public void submit(IJobRuntime jobRuntime) {
queue.put(jobRuntime);
jobRuntime.setDescription(stepClass.getSimpleName());
- logger.info("Executor got ! {}", jobRuntime);
+ //logger.info("Executor got ! {}", jobRuntime);
}
}
import java.util.Calendar;\r
import java.util.Set;\r
\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+import org.apache.logging.log4j.Marker;\r
+\r
public class KillDateFile {\r
+ private static final Logger logger = LogManager.getLogger();\r
private static final String KILLDATE_NAME = "%s.%s.killdate";\r
private static final String YYYY_M_MDD = "yyyyMMdd";\r
private static final String STATUSFOLDER = ".STATUS";\r
this.fileName = fileName;\r
}\r
\r
- public void create(int days) throws IOException {\r
+ public void create(int days, Marker marker) throws IOException {\r
Path statusPath = Paths.get(filePath, STATUSFOLDER);\r
File statusFolder = statusPath.toFile();\r
if (!statusFolder.exists() || !statusFolder.isDirectory()) {\r
SimpleDateFormat dateFormat = new SimpleDateFormat(YYYY_M_MDD);\r
String killDateFileName = String.format(KILLDATE_NAME, fileName, dateFormat.format(killDate.getTime()));\r
Path killDatePath = Paths.get(filePath, STATUSFOLDER, killDateFileName);\r
- Files.createFile(killDatePath);\r
+ if (Files.exists(killDatePath))\r
+ logger.warn(marker, "Az '{}' állomány már létezik.", killDatePath);\r
+ else\r
+ Files.createFile(killDatePath);\r
}\r
}\r
private IItemManager itemManager = ComponentBinder.getItemManagerService();\r
\r
public JobengineService() {\r
- logger.info("Created");\r
+ //logger.info("Created");\r
}\r
\r
@POST\r
Bundle-Version: 1.2.0
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Export-Package: user.tsm.client
+Import-Package: org.apache.logging.log4j
import java.io.FileNotFoundException;\r
import java.io.IOException;\r
\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+\r
import user.tsm.client.api.internal.DataBlk;\r
import user.tsm.client.api.internal.DsmEndTxnExIn;\r
import user.tsm.client.api.internal.DsmEndTxnExOut;\r
import user.tsm.client.api.internal.TSMAPIConstants;\r
\r
public class TSMBufferedClient extends TSMClient {\r
-\r
+ private static final Logger logger = LogManager.getLogger();\r
private static final String APPNAME = "JOBENGINE";\r
short rc = 0;\r
private DataBlk dataBlk;\r
super(APPNAME);\r
}\r
\r
- public int recievePartial(byte[] buffer, TSMObject object, PartialObjData partialObjData) throws NullPointerException, FileNotFoundException, IOException,\r
- TSMException {\r
+ public void finishReceive() throws TSMException {\r
+ // dsmEndGetObj\r
+ rc = TSMAPI.dsmEndGetObj(dsmHandle);\r
+ if (rc != TSMAPIConstants.DSM_RC_OK) {\r
+ TSMAPI.dsmEndGetData(dsmHandle);\r
+ throw new TSMException(dsmHandle, rc);\r
+ }\r
+ // dsmEndGetData\r
+ rc = TSMAPI.dsmEndGetData(dsmHandle);\r
+ if (rc != TSMAPIConstants.DSM_RC_OK) {\r
+ throw new TSMException(dsmHandle, rc);\r
+ }\r
+ dataBlk = null;\r
+ }\r
+\r
+ public void finishSend() throws TSMException, JNIException {\r
+ if (dataBlk != null) {\r
+ rc = TSMAPI.dsmEndSendObj(dsmHandle);\r
+ if (rc != TSMAPIConstants.DSM_RC_OK)\r
+ throw new TSMException(dsmHandle, rc);\r
+ rc = vote(TSMAPIConstants.DSM_VOTE_COMMIT);\r
+ }\r
+ }\r
+\r
+ public int recievePartial(byte[] buffer, TSMObject object, PartialObjData partialObjData)\r
+ throws NullPointerException, FileNotFoundException, IOException, TSMException {\r
int result = 0;\r
\r
if (dataBlk == null) {\r
return result;\r
}\r
\r
- public void finishReceive() throws TSMException {\r
- // dsmEndGetObj\r
- rc = TSMAPI.dsmEndGetObj(dsmHandle);\r
- if (rc != TSMAPIConstants.DSM_RC_OK) {\r
- TSMAPI.dsmEndGetData(dsmHandle);\r
- throw new TSMException(dsmHandle, rc);\r
- }\r
- // dsmEndGetData\r
- rc = TSMAPI.dsmEndGetData(dsmHandle);\r
- if (rc != TSMAPIConstants.DSM_RC_OK) {\r
- throw new TSMException(dsmHandle, rc);\r
- }\r
- dataBlk = null;\r
- }\r
-\r
- public void finishSend() throws TSMException, JNIException {\r
- if (dataBlk != null) {\r
- rc = TSMAPI.dsmEndSendObj(dsmHandle);\r
- if (rc != TSMAPIConstants.DSM_RC_OK)\r
- throw new TSMException(dsmHandle, rc);\r
- DsmEndTxnExIn endTxnExIn = new DsmEndTxnExIn();\r
- endTxnExIn.setDsmHandle(dsmHandle);\r
- endTxnExIn.setVote(TSMAPIConstants.DSM_VOTE_COMMIT);\r
- DsmEndTxnExOut endTxnExOut = new DsmEndTxnExOut();\r
- rc = TSMAPI.dsmEndTxnEx(endTxnExIn, endTxnExOut);\r
- if (rc != TSMAPIConstants.DSM_RC_OK) {\r
- throw new TSMException(dsmHandle, rc, endTxnExOut.getReason());\r
- }\r
- }\r
- }\r
-\r
- public void send(byte[] buffer, TSMBackupFileObject object, int byteCount) throws NullPointerException, FileNotFoundException, IOException, TSMException {\r
+ public void send(byte[] buffer, TSMBackupFileObject object, int byteCount) throws Exception {\r
short rc;\r
try {\r
if (dataBlk == null) {\r
- dataBlk = new DataBlk();\r
- dataBlk.setBufferPtr(buffer);\r
rc = TSMAPI.dsmBeginTxn(dsmHandle);\r
if (rc != TSMAPIConstants.DSM_RC_OK)\r
throw new TSMException(dsmHandle, rc);\r
throw new TSMException(dsmHandle, rc);\r
}\r
\r
+ dataBlk = new DataBlk();\r
+ dataBlk.setBufferPtr(buffer);\r
dataBlk.setBufferLen(byteCount);\r
rc = TSMAPI.dsmSendData(dsmHandle, dataBlk);\r
if (rc != TSMAPIConstants.DSM_RC_OK)\r
throw new TSMException(dsmHandle, rc);\r
object.bytesWorked(byteCount);\r
+ } catch (Exception e) {\r
+ vote(TSMAPIConstants.DSM_VOTE_ABORT);\r
+ throw e;\r
+ }\r
+ }\r
\r
- // if ((length = byteCount) > 0) {\r
- // dataBlk.setBufferLen(length);\r
- // rc = TSMAPI.dsmSendData(dsmHandle, dataBlk);\r
- // if (rc != TSMAPIConstants.DSM_RC_OK)\r
- // throw new TSMException(dsmHandle, rc);\r
- // object.bytesWorked(length);\r
- // if (length < prevLength) {\r
- // finishSend();\r
- // }\r
- // }\r
- } catch (JNIException e1) {\r
- DsmEndTxnExIn endTxnExIn = new DsmEndTxnExIn();\r
- endTxnExIn.setDsmHandle(dsmHandle);\r
- endTxnExIn.setVote(TSMAPIConstants.DSM_VOTE_ABORT);\r
- DsmEndTxnExOut endTxnExOut = new DsmEndTxnExOut();\r
- try {\r
- TSMAPI.dsmEndTxnEx(endTxnExIn, endTxnExOut);\r
- } catch (Exception e) {\r
- }\r
- ;\r
- throw new TSMException("Internal error: " + e1.getMessage());\r
- } catch (TSMException e2) {\r
- DsmEndTxnExIn endTxnExIn = new DsmEndTxnExIn();\r
- endTxnExIn.setDsmHandle(dsmHandle);\r
- endTxnExIn.setVote(TSMAPIConstants.DSM_VOTE_ABORT);\r
- DsmEndTxnExOut endTxnExOut = new DsmEndTxnExOut();\r
- try {\r
- TSMAPI.dsmEndTxnEx(endTxnExIn, endTxnExOut);\r
- } catch (Exception e) {\r
- }\r
- ;\r
- throw e2;\r
- } finally {\r
+ private short vote(byte vote) throws TSMException {\r
+ short result = TSMAPIConstants.DSM_RC_OK;\r
+ DsmEndTxnExIn endTxnExIn = new DsmEndTxnExIn();\r
+ endTxnExIn.setDsmHandle(dsmHandle);\r
+ endTxnExIn.setVote(vote);\r
+ DsmEndTxnExOut endTxnExOut = new DsmEndTxnExOut();\r
+ try {\r
+ result = TSMAPI.dsmEndTxnEx(endTxnExIn, endTxnExOut);\r
+ } catch (Exception e) {\r
+ logger.catching(e);\r
}\r
+ if (result != TSMAPIConstants.DSM_RC_OK)\r
+ throw new TSMException(dsmHandle, rc, endTxnExOut.getReason());\r
+ return result;\r
}\r
}\r