From 71c79f7db99244a1e49e019f58c61fab1136d3d9 Mon Sep 17 00:00:00 2001 From: Larry King Date: Tue, 29 Jul 2014 12:31:20 +0800 Subject: [PATCH] Add default attribute and ignore files --- .gitattributes | 22 + .gitignore | 215 +++ Batch.Designer.cs | 324 ++-- Batch.cs | 82 +- Batch.resx | 238 +-- Cloud.Designer.cs | 706 ++++---- Cloud.cs | 1862 +++++++++---------- Cloud.resx | 1156 ++++++------ Crawl.cs | 392 ++-- GData/GData.csproj | 752 ++++---- GData/GData.csproj.vspscc | 20 +- HAP/HAP.csproj | 328 ++-- HAP/HAP.csproj.vspscc | 20 +- Helper.cs | 86 +- ImageRipper.csproj.vspscc | 20 +- ImageRipper.sln | 96 +- ImageRipper.vssscc | 20 +- ImgRip.csproj | 576 +++--- ImgRip.csproj.vspscc | 20 +- Main.Designer.cs | 1152 ++++++------ Main.cs | 2152 +++++++++++----------- Main.resx | 2892 +++++++++++++++--------------- Program.cs | 38 +- Properties/Resources.Designer.cs | 358 ++-- Properties/Resources.resx | 306 ++-- Properties/Settings.Designer.cs | 172 +- Properties/Settings.settings | 40 +- Properties/app.manifest | 92 +- SetCookie.Designer.cs | 212 +-- SetCookie.cs | 44 +- SetCookie.resx | 238 +-- Settings.cs | 56 +- SiteList.xml | 462 ++--- Sitelist.xsd | 48 +- Sites.Designer.cs | 240 +-- Sites.cs | 180 +- Sites.resx | 250 +-- SplitButton.cs | 858 ++++----- app.config | 110 +- 39 files changed, 8536 insertions(+), 8299 deletions(-) create mode 100644 .gitattributes create mode 100644 .gitignore diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..412eeda --- /dev/null +++ b/.gitattributes @@ -0,0 +1,22 @@ +# Auto detect text files and perform LF normalization +* text=auto + +# Custom for Visual Studio +*.cs diff=csharp +*.sln merge=union +*.csproj merge=union +*.vbproj merge=union +*.fsproj merge=union +*.dbproj merge=union + +# Standard to msysgit +*.doc diff=astextplain +*.DOC diff=astextplain +*.docx diff=astextplain +*.DOCX diff=astextplain +*.dot diff=astextplain +*.DOT diff=astextplain +*.pdf diff=astextplain +*.PDF diff=astextplain +*.rtf diff=astextplain +*.RTF diff=astextplain diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b9d6bd9 --- /dev/null +++ b/.gitignore @@ -0,0 +1,215 @@ +################# +## Eclipse +################# + +*.pydevproject +.project +.metadata +bin/ +tmp/ +*.tmp +*.bak +*.swp +*~.nib +local.properties +.classpath +.settings/ +.loadpath + +# External tool builders +.externalToolBuilders/ + +# Locally stored "Eclipse launch configurations" +*.launch + +# CDT-specific +.cproject + +# PDT-specific +.buildpath + + +################# +## Visual Studio +################# + +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. + +# User-specific files +*.suo +*.user +*.sln.docstates + +# Build results + +[Dd]ebug/ +[Rr]elease/ +x64/ +build/ +[Bb]in/ +[Oo]bj/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +*_i.c +*_p.c +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.log +*.scc + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opensdf +*.sdf +*.cachefile + +# Visual Studio profiler +*.psess +*.vsp +*.vspx + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# NCrunch +*.ncrunch* +.*crunch*.local.xml + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.Publish.xml +*.pubxml + +# NuGet Packages Directory +## TODO: If you have NuGet Package Restore enabled, uncomment the next line +#packages/ + +# Windows Azure Build Output +csx +*.build.csdef + +# Windows Store app package directory +AppPackages/ + +# Others +sql/ +*.Cache +ClientBin/ +[Ss]tyle[Cc]op.* +~$* +*~ +*.dbmdl +*.[Pp]ublish.xml +*.pfx +*.publishsettings + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file to a newer +# Visual Studio version. Backup files are not needed, because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm + +# SQL Server files +App_Data/*.mdf +App_Data/*.ldf + +############# +## Windows detritus +############# + +# Windows image file caches +Thumbs.db +ehthumbs.db + +# Folder config file +Desktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Mac crap +.DS_Store + + +############# +## Python +############# + +*.py[co] + +# Packages +*.egg +*.egg-info +dist/ +build/ +eggs/ +parts/ +var/ +sdist/ +develop-eggs/ +.installed.cfg + +# Installer logs +pip-log.txt + +# Unit test / coverage reports +.coverage +.tox + +#Translations +*.mo + +#Mr Developer +.mr.developer.cfg diff --git a/Batch.Designer.cs b/Batch.Designer.cs index 61752f2..e67b3e8 100644 --- a/Batch.Designer.cs +++ b/Batch.Designer.cs @@ -1,163 +1,163 @@ -namespace ImgRip -{ - partial class Batch - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.lblFrom = new System.Windows.Forms.Label(); - this.lblCaption = new System.Windows.Forms.Label(); - this.lblTo = new System.Windows.Forms.Label(); - this.btnSet = new System.Windows.Forms.Button(); - this.udTo = new System.Windows.Forms.NumericUpDown(); - this.udFrom = new System.Windows.Forms.NumericUpDown(); - ((System.ComponentModel.ISupportInitialize)(this.udTo)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.udFrom)).BeginInit(); - this.SuspendLayout(); - // - // lblFrom - // - this.lblFrom.AutoSize = true; - this.lblFrom.Font = new System.Drawing.Font("Microsoft YaHei", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.lblFrom.ForeColor = System.Drawing.Color.Teal; - this.lblFrom.Location = new System.Drawing.Point(9, 55); - this.lblFrom.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); - this.lblFrom.Name = "lblFrom"; - this.lblFrom.Size = new System.Drawing.Size(48, 19); - this.lblFrom.TabIndex = 1; - this.lblFrom.Text = "From:"; - // - // lblCaption - // - this.lblCaption.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.lblCaption.AutoSize = true; - this.lblCaption.Font = new System.Drawing.Font("Georgia", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.lblCaption.ForeColor = System.Drawing.SystemColors.Highlight; - this.lblCaption.Location = new System.Drawing.Point(85, 11); - this.lblCaption.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); - this.lblCaption.Name = "lblCaption"; - this.lblCaption.Size = new System.Drawing.Size(156, 23); - this.lblCaption.TabIndex = 2; - this.lblCaption.Text = "Range of pages"; - // - // lblTo - // - this.lblTo.AutoSize = true; - this.lblTo.Font = new System.Drawing.Font("Microsoft YaHei", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.lblTo.ForeColor = System.Drawing.Color.Teal; - this.lblTo.Location = new System.Drawing.Point(177, 55); - this.lblTo.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); - this.lblTo.Name = "lblTo"; - this.lblTo.Size = new System.Drawing.Size(30, 19); - this.lblTo.TabIndex = 4; - this.lblTo.Text = "To:"; - // - // btnSet - // - this.btnSet.AutoSize = true; - this.btnSet.Font = new System.Drawing.Font("Microsoft YaHei", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.btnSet.ForeColor = System.Drawing.Color.Teal; - this.btnSet.Location = new System.Drawing.Point(113, 94); - this.btnSet.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); - this.btnSet.Name = "btnSet"; - this.btnSet.Size = new System.Drawing.Size(100, 36); - this.btnSet.TabIndex = 5; - this.btnSet.Text = "Submit"; - this.btnSet.UseVisualStyleBackColor = true; - this.btnSet.Click += new System.EventHandler(this.btnSet_Click); - // - // udTo - // - this.udTo.Increment = new decimal(new int[] { - 5, - 0, - 0, - 0}); - this.udTo.Location = new System.Drawing.Point(217, 50); - this.udTo.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); - this.udTo.Maximum = new decimal(new int[] { - 0, - 0, - 0, - 0}); - this.udTo.Name = "udTo"; - this.udTo.Size = new System.Drawing.Size(100, 29); - this.udTo.TabIndex = 8; - // - // udFrom - // - this.udFrom.Location = new System.Drawing.Point(67, 50); - this.udFrom.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); - this.udFrom.Maximum = new decimal(new int[] { - 0, - 0, - 0, - 0}); - this.udFrom.Name = "udFrom"; - this.udFrom.Size = new System.Drawing.Size(100, 29); - this.udFrom.TabIndex = 7; - // - // Batch - // - this.AcceptButton = this.btnSet; - this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.AutoValidate = System.Windows.Forms.AutoValidate.EnablePreventFocusChange; - this.ClientSize = new System.Drawing.Size(326, 142); - this.Controls.Add(this.udTo); - this.Controls.Add(this.udFrom); - this.Controls.Add(this.btnSet); - this.Controls.Add(this.lblTo); - this.Controls.Add(this.lblCaption); - this.Controls.Add(this.lblFrom); - this.Font = new System.Drawing.Font("Microsoft YaHei", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; - this.Margin = new System.Windows.Forms.Padding(5, 4, 5, 4); - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "Batch"; - this.ShowInTaskbar = false; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; - this.Text = "Batch Download"; - this.TopMost = true; - ((System.ComponentModel.ISupportInitialize)(this.udTo)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.udFrom)).EndInit(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.Label lblFrom; - private System.Windows.Forms.Label lblCaption; - private System.Windows.Forms.Label lblTo; - private System.Windows.Forms.Button btnSet; - private System.Windows.Forms.NumericUpDown udFrom; - private System.Windows.Forms.NumericUpDown udTo; - } +namespace ImgRip +{ + partial class Batch + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.lblFrom = new System.Windows.Forms.Label(); + this.lblCaption = new System.Windows.Forms.Label(); + this.lblTo = new System.Windows.Forms.Label(); + this.btnSet = new System.Windows.Forms.Button(); + this.udTo = new System.Windows.Forms.NumericUpDown(); + this.udFrom = new System.Windows.Forms.NumericUpDown(); + ((System.ComponentModel.ISupportInitialize)(this.udTo)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.udFrom)).BeginInit(); + this.SuspendLayout(); + // + // lblFrom + // + this.lblFrom.AutoSize = true; + this.lblFrom.Font = new System.Drawing.Font("Microsoft YaHei", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblFrom.ForeColor = System.Drawing.Color.Teal; + this.lblFrom.Location = new System.Drawing.Point(9, 55); + this.lblFrom.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); + this.lblFrom.Name = "lblFrom"; + this.lblFrom.Size = new System.Drawing.Size(48, 19); + this.lblFrom.TabIndex = 1; + this.lblFrom.Text = "From:"; + // + // lblCaption + // + this.lblCaption.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.lblCaption.AutoSize = true; + this.lblCaption.Font = new System.Drawing.Font("Georgia", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.lblCaption.ForeColor = System.Drawing.SystemColors.Highlight; + this.lblCaption.Location = new System.Drawing.Point(85, 11); + this.lblCaption.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblCaption.Name = "lblCaption"; + this.lblCaption.Size = new System.Drawing.Size(156, 23); + this.lblCaption.TabIndex = 2; + this.lblCaption.Text = "Range of pages"; + // + // lblTo + // + this.lblTo.AutoSize = true; + this.lblTo.Font = new System.Drawing.Font("Microsoft YaHei", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblTo.ForeColor = System.Drawing.Color.Teal; + this.lblTo.Location = new System.Drawing.Point(177, 55); + this.lblTo.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); + this.lblTo.Name = "lblTo"; + this.lblTo.Size = new System.Drawing.Size(30, 19); + this.lblTo.TabIndex = 4; + this.lblTo.Text = "To:"; + // + // btnSet + // + this.btnSet.AutoSize = true; + this.btnSet.Font = new System.Drawing.Font("Microsoft YaHei", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnSet.ForeColor = System.Drawing.Color.Teal; + this.btnSet.Location = new System.Drawing.Point(113, 94); + this.btnSet.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + this.btnSet.Name = "btnSet"; + this.btnSet.Size = new System.Drawing.Size(100, 36); + this.btnSet.TabIndex = 5; + this.btnSet.Text = "Submit"; + this.btnSet.UseVisualStyleBackColor = true; + this.btnSet.Click += new System.EventHandler(this.btnSet_Click); + // + // udTo + // + this.udTo.Increment = new decimal(new int[] { + 5, + 0, + 0, + 0}); + this.udTo.Location = new System.Drawing.Point(217, 50); + this.udTo.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + this.udTo.Maximum = new decimal(new int[] { + 0, + 0, + 0, + 0}); + this.udTo.Name = "udTo"; + this.udTo.Size = new System.Drawing.Size(100, 29); + this.udTo.TabIndex = 8; + // + // udFrom + // + this.udFrom.Location = new System.Drawing.Point(67, 50); + this.udFrom.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + this.udFrom.Maximum = new decimal(new int[] { + 0, + 0, + 0, + 0}); + this.udFrom.Name = "udFrom"; + this.udFrom.Size = new System.Drawing.Size(100, 29); + this.udFrom.TabIndex = 7; + // + // Batch + // + this.AcceptButton = this.btnSet; + this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.AutoValidate = System.Windows.Forms.AutoValidate.EnablePreventFocusChange; + this.ClientSize = new System.Drawing.Size(326, 142); + this.Controls.Add(this.udTo); + this.Controls.Add(this.udFrom); + this.Controls.Add(this.btnSet); + this.Controls.Add(this.lblTo); + this.Controls.Add(this.lblCaption); + this.Controls.Add(this.lblFrom); + this.Font = new System.Drawing.Font("Microsoft YaHei", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.Margin = new System.Windows.Forms.Padding(5, 4, 5, 4); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "Batch"; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Batch Download"; + this.TopMost = true; + ((System.ComponentModel.ISupportInitialize)(this.udTo)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.udFrom)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label lblFrom; + private System.Windows.Forms.Label lblCaption; + private System.Windows.Forms.Label lblTo; + private System.Windows.Forms.Button btnSet; + private System.Windows.Forms.NumericUpDown udFrom; + private System.Windows.Forms.NumericUpDown udTo; + } } \ No newline at end of file diff --git a/Batch.cs b/Batch.cs index cb06cba..cc3b376 100644 --- a/Batch.cs +++ b/Batch.cs @@ -1,41 +1,41 @@ -namespace ImgRip -{ - using System; - using System.Windows.Forms; - - partial class Batch : Form - { - long _seed; - - public Batch(long seed) - { - InitializeComponent(); - _seed = seed; - udFrom.Maximum = udTo.Maximum = long.MaxValue; - udFrom.Value = udTo.Value = seed; - } - - private void btnSet_Click(object sender, EventArgs e) - { - var ripper = this.Owner as Main; - if (udFrom.Value > 0 && udFrom.Value < udTo.Value) - { - ripper.From = decimal.ToInt32(udFrom.Value); ripper.To = decimal.ToInt32(udTo.Value); - var n = _seed.ToString(); - var m = ripper.Address.LastIndexOf(n); - ripper.Address = ripper.Address.Substring(0, m) + ripper.From.ToString() + ripper.Address.Substring(m + n.Length); - ripper.Batch = true; - ripper.Range = ripper.To - ripper.From + 1; - Close(); - } - else - { - var tt = new ToolTip(); - tt.IsBalloon = true; - tt.ToolTipIcon = ToolTipIcon.Warning; - tt.ToolTipTitle = "Invalid Range"; - tt.Show("Out of range values", lblCaption, 2000); - } - } - } -} +namespace ImgRip +{ + using System; + using System.Windows.Forms; + + partial class Batch : Form + { + long _seed; + + public Batch(long seed) + { + InitializeComponent(); + _seed = seed; + udFrom.Maximum = udTo.Maximum = long.MaxValue; + udFrom.Value = udTo.Value = seed; + } + + private void btnSet_Click(object sender, EventArgs e) + { + var ripper = this.Owner as Main; + if (udFrom.Value > 0 && udFrom.Value < udTo.Value) + { + ripper.From = decimal.ToInt32(udFrom.Value); ripper.To = decimal.ToInt32(udTo.Value); + var n = _seed.ToString(); + var m = ripper.Address.LastIndexOf(n); + ripper.Address = ripper.Address.Substring(0, m) + ripper.From.ToString() + ripper.Address.Substring(m + n.Length); + ripper.Batch = true; + ripper.Range = ripper.To - ripper.From + 1; + Close(); + } + else + { + var tt = new ToolTip(); + tt.IsBalloon = true; + tt.ToolTipIcon = ToolTipIcon.Warning; + tt.ToolTipTitle = "Invalid Range"; + tt.Show("Out of range values", lblCaption, 2000); + } + } + } +} diff --git a/Batch.resx b/Batch.resx index ff31a6d..19dc0dd 100644 --- a/Batch.resx +++ b/Batch.resx @@ -1,120 +1,120 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + \ No newline at end of file diff --git a/Cloud.Designer.cs b/Cloud.Designer.cs index 6c82980..081da23 100644 --- a/Cloud.Designer.cs +++ b/Cloud.Designer.cs @@ -1,354 +1,354 @@ -namespace ImgRip -{ - partial class WebCloud - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.components = new System.ComponentModel.Container(); - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(WebCloud)); - this.lvCloud = new System.Windows.Forms.ListView(); - this.lvImageList = new System.Windows.Forms.ImageList(this.components); - this.lblCloudID = new System.Windows.Forms.Label(); - this.lblPass = new System.Windows.Forms.Label(); - this.cldStatus = new System.Windows.Forms.StatusStrip(); - this.CloudStatus = new System.Windows.Forms.ToolStripStatusLabel(); - this.txtFolderName = new System.Windows.Forms.TextBox(); - this.gpLogin = new System.Windows.Forms.GroupBox(); - this.tbName = new System.Windows.Forms.TextBox(); - this.btnSign = new System.Windows.Forms.Button(); - this.tbPass = new System.Windows.Forms.TextBox(); - this.btnAdd = new System.Windows.Forms.Button(); - this.btnCreate = new System.Windows.Forms.Button(); - this.btnDelete = new System.Windows.Forms.Button(); - this.btnUp = new System.Windows.Forms.Button(); - this.CmdPanel = new System.Windows.Forms.Panel(); - this.cbPublic = new System.Windows.Forms.CheckBox(); - this.ttCloud = new System.Windows.Forms.ToolTip(this.components); - this.ofd = new System.Windows.Forms.OpenFileDialog(); - this.cldStatus.SuspendLayout(); - this.gpLogin.SuspendLayout(); - this.CmdPanel.SuspendLayout(); - this.SuspendLayout(); - // - // lvCloud - // - this.lvCloud.AllowDrop = true; - this.lvCloud.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.lvCloud.ForeColor = System.Drawing.Color.Blue; - this.lvCloud.LabelEdit = true; - this.lvCloud.Location = new System.Drawing.Point(0, 118); - this.lvCloud.Name = "lvCloud"; - this.lvCloud.ShowItemToolTips = true; - this.lvCloud.Size = new System.Drawing.Size(627, 320); - this.lvCloud.SmallImageList = this.lvImageList; - this.lvCloud.TabIndex = 1; - this.lvCloud.UseCompatibleStateImageBehavior = false; - this.lvCloud.View = System.Windows.Forms.View.List; - this.lvCloud.AfterLabelEdit += new System.Windows.Forms.LabelEditEventHandler(this.lvCloud_AfterLabelEdit); - this.lvCloud.ItemSelectionChanged += new System.Windows.Forms.ListViewItemSelectionChangedEventHandler(this.lvCloud_ItemSelectionChanged); - this.lvCloud.DragDrop += new System.Windows.Forms.DragEventHandler(this.lvCloud_DragDrop); - this.lvCloud.DragEnter += new System.Windows.Forms.DragEventHandler(this.lvCloud_DragEnter); - this.lvCloud.KeyDown += new System.Windows.Forms.KeyEventHandler(this.lvCloud_KeyDown); - this.lvCloud.Leave += new System.EventHandler(this.lvCloud_Leave); - this.lvCloud.MouseClick += new System.Windows.Forms.MouseEventHandler(this.lvCloud_MouseClick); - this.lvCloud.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.lvCloud_MouseDoubleClick); - // - // lvImageList - // - this.lvImageList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("lvImageList.ImageStream"))); - this.lvImageList.TransparentColor = System.Drawing.Color.Transparent; - this.lvImageList.Images.SetKeyName(0, "Folder"); - this.lvImageList.Images.SetKeyName(1, "Image"); - this.lvImageList.Images.SetKeyName(2, "Document"); - // - // lblCloudID - // - this.lblCloudID.AutoSize = true; - this.lblCloudID.Font = new System.Drawing.Font("Microsoft YaHei", 10F, System.Drawing.FontStyle.Bold); - this.lblCloudID.ForeColor = System.Drawing.Color.DodgerBlue; - this.lblCloudID.Location = new System.Drawing.Point(4, 29); - this.lblCloudID.Name = "lblCloudID"; - this.lblCloudID.Size = new System.Drawing.Size(55, 19); - this.lblCloudID.TabIndex = 3; - this.lblCloudID.Text = "Name:"; - // - // lblPass - // - this.lblPass.AutoSize = true; - this.lblPass.Font = new System.Drawing.Font("Microsoft YaHei", 10F, System.Drawing.FontStyle.Bold); - this.lblPass.ForeColor = System.Drawing.Color.DodgerBlue; - this.lblPass.Location = new System.Drawing.Point(4, 73); - this.lblPass.Name = "lblPass"; - this.lblPass.Size = new System.Drawing.Size(80, 19); - this.lblPass.TabIndex = 4; - this.lblPass.Text = "Password:"; - // - // cldStatus - // - this.cldStatus.Font = new System.Drawing.Font("Segoe UI", 9F); - this.cldStatus.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.CloudStatus}); - this.cldStatus.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.Flow; - this.cldStatus.Location = new System.Drawing.Point(0, 438); - this.cldStatus.Name = "cldStatus"; - this.cldStatus.Size = new System.Drawing.Size(627, 24); - this.cldStatus.TabIndex = 8; - this.cldStatus.Text = "statusStrip1"; - // - // CloudStatus - // - this.CloudStatus.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; - this.CloudStatus.Font = new System.Drawing.Font("Microsoft YaHei", 9.75F, System.Drawing.FontStyle.Bold); - this.CloudStatus.ForeColor = System.Drawing.SystemColors.Highlight; - this.CloudStatus.Name = "CloudStatus"; - this.CloudStatus.Size = new System.Drawing.Size(44, 19); - this.CloudStatus.Text = "Done"; - // - // txtFolderName - // - this.txtFolderName.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.txtFolderName.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.txtFolderName.Enabled = false; - this.txtFolderName.Location = new System.Drawing.Point(434, 81); - this.txtFolderName.Name = "txtFolderName"; - this.txtFolderName.Size = new System.Drawing.Size(171, 25); - this.txtFolderName.TabIndex = 12; - this.ttCloud.SetToolTip(this.txtFolderName, "Type to search or add new album"); - this.txtFolderName.MouseClick += new System.Windows.Forms.MouseEventHandler(this.txtFolderName_MouseClick); - this.txtFolderName.TextChanged += new System.EventHandler(this.txtFolderName_TextChanged); - this.txtFolderName.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.txtFolderName_KeyPress); - this.txtFolderName.Leave += new System.EventHandler(this.txtFolderName_Leave); - // - // gpLogin - // - this.gpLogin.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.gpLogin.Controls.Add(this.tbName); - this.gpLogin.Controls.Add(this.btnSign); - this.gpLogin.Controls.Add(this.lblCloudID); - this.gpLogin.Controls.Add(this.lblPass); - this.gpLogin.Controls.Add(this.tbPass); - this.gpLogin.Font = new System.Drawing.Font("Microsoft YaHei", 10F, System.Drawing.FontStyle.Bold); - this.gpLogin.ForeColor = System.Drawing.Color.BlueViolet; - this.gpLogin.Location = new System.Drawing.Point(12, 5); - this.gpLogin.Name = "gpLogin"; - this.gpLogin.Size = new System.Drawing.Size(347, 106); - this.gpLogin.TabIndex = 13; - this.gpLogin.TabStop = false; - this.gpLogin.Text = "Login"; - // - // tbName - // - this.tbName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.tbName.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::ImgRip.Properties.Settings.Default, "CloudID", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - this.tbName.Location = new System.Drawing.Point(82, 26); - this.tbName.Name = "tbName"; - this.tbName.Size = new System.Drawing.Size(194, 25); - this.tbName.TabIndex = 0; - this.tbName.Text = global::ImgRip.Properties.Settings.Default.CloudID; - // - // btnSign - // - this.btnSign.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.btnSign.AutoSize = true; - this.btnSign.Font = new System.Drawing.Font("Microsoft YaHei", 10F); - this.btnSign.Image = ((System.Drawing.Image)(resources.GetObject("btnSign.Image"))); - this.btnSign.Location = new System.Drawing.Point(283, 32); - this.btnSign.Name = "btnSign"; - this.btnSign.Size = new System.Drawing.Size(56, 54); - this.btnSign.TabIndex = 2; - this.btnSign.UseVisualStyleBackColor = true; - this.btnSign.Click += new System.EventHandler(this.ConnectCloud_Click); - // - // tbPass - // - this.tbPass.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.tbPass.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::ImgRip.Properties.Settings.Default, "Password", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - this.tbPass.Location = new System.Drawing.Point(82, 70); - this.tbPass.Name = "tbPass"; - this.tbPass.Size = new System.Drawing.Size(194, 25); - this.tbPass.TabIndex = 1; - this.tbPass.Text = global::ImgRip.Properties.Settings.Default.Password; - this.tbPass.UseSystemPasswordChar = true; - // - // btnAdd - // - this.btnAdd.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.btnAdd.Enabled = false; - this.btnAdd.Image = ((System.Drawing.Image)(resources.GetObject("btnAdd.Image"))); - this.btnAdd.Location = new System.Drawing.Point(121, 6); - this.btnAdd.Name = "btnAdd"; - this.btnAdd.Size = new System.Drawing.Size(50, 50); - this.btnAdd.TabIndex = 11; - this.ttCloud.SetToolTip(this.btnAdd, "Add Photos"); - this.btnAdd.UseVisualStyleBackColor = true; - this.btnAdd.Click += new System.EventHandler(this.btnAddFiles_Click); - // - // btnCreate - // - this.btnCreate.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.btnCreate.Enabled = false; - this.btnCreate.Image = ((System.Drawing.Image)(resources.GetObject("btnCreate.Image"))); - this.btnCreate.Location = new System.Drawing.Point(180, 6); - this.btnCreate.Name = "btnCreate"; - this.btnCreate.Size = new System.Drawing.Size(50, 50); - this.btnCreate.TabIndex = 10; - this.ttCloud.SetToolTip(this.btnCreate, "Create Album"); - this.btnCreate.UseVisualStyleBackColor = true; - this.btnCreate.Click += new System.EventHandler(this.btnCreateFolder_Click); - // - // btnDelete - // - this.btnDelete.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.btnDelete.Enabled = false; - this.btnDelete.Image = ((System.Drawing.Image)(resources.GetObject("btnDelete.Image"))); - this.btnDelete.Location = new System.Drawing.Point(62, 6); - this.btnDelete.Name = "btnDelete"; - this.btnDelete.Size = new System.Drawing.Size(50, 50); - this.btnDelete.TabIndex = 9; - this.ttCloud.SetToolTip(this.btnDelete, "Delete Items"); - this.btnDelete.UseVisualStyleBackColor = true; - this.btnDelete.Click += new System.EventHandler(this.btnDelete_Click); - // - // btnUp - // - this.btnUp.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.btnUp.Enabled = false; - this.btnUp.Font = new System.Drawing.Font("Microsoft YaHei", 10F); - this.btnUp.Image = ((System.Drawing.Image)(resources.GetObject("btnUp.Image"))); - this.btnUp.Location = new System.Drawing.Point(3, 6); - this.btnUp.Name = "btnUp"; - this.btnUp.Size = new System.Drawing.Size(50, 50); - this.btnUp.TabIndex = 7; - this.ttCloud.SetToolTip(this.btnUp, "Up to folder"); - this.btnUp.UseVisualStyleBackColor = true; - this.btnUp.Click += new System.EventHandler(this.btnUp_Click); - // - // CmdPanel - // - this.CmdPanel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.CmdPanel.AutoSize = true; - this.CmdPanel.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.CmdPanel.Controls.Add(this.btnUp); - this.CmdPanel.Controls.Add(this.btnDelete); - this.CmdPanel.Controls.Add(this.btnCreate); - this.CmdPanel.Controls.Add(this.btnAdd); - this.CmdPanel.Location = new System.Drawing.Point(372, 5); - this.CmdPanel.Name = "CmdPanel"; - this.CmdPanel.Size = new System.Drawing.Size(233, 59); - this.CmdPanel.TabIndex = 14; - // - // cbPublic - // - this.cbPublic.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.cbPublic.AutoCheck = false; - this.cbPublic.AutoSize = true; - this.cbPublic.Enabled = false; - this.cbPublic.Font = new System.Drawing.Font("Microsoft YaHei", 10F, System.Drawing.FontStyle.Bold); - this.cbPublic.Image = ((System.Drawing.Image)(resources.GetObject("cbPublic.Image"))); - this.cbPublic.Location = new System.Drawing.Point(373, 77); - this.cbPublic.Name = "cbPublic"; - this.cbPublic.Size = new System.Drawing.Size(47, 32); - this.cbPublic.TabIndex = 13; - this.cbPublic.ThreeState = true; - this.cbPublic.UseVisualStyleBackColor = true; - this.cbPublic.CheckedChanged += new System.EventHandler(this.cbPublic_CheckedChanged); - this.cbPublic.Leave += new System.EventHandler(this.cbPublic_Leave); - // - // ttCloud - // - this.ttCloud.AutomaticDelay = 300; - // - // ofd - // - this.ofd.DefaultExt = "jpg"; - this.ofd.Filter = "JPG files|*.jpg|PNG files|*.png|BMP files|*.bmp|All files|*.*"; - this.ofd.InitialDirectory = global::ImgRip.Properties.Settings.Default.Dir; - this.ofd.Multiselect = true; - // - // WebCloud - // - this.AcceptButton = this.btnSign; - this.AllowDrop = true; - this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 19F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.AutoScroll = true; - this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.ClientSize = new System.Drawing.Size(627, 462); - this.Controls.Add(this.cbPublic); - this.Controls.Add(this.txtFolderName); - this.Controls.Add(this.CmdPanel); - this.Controls.Add(this.gpLogin); - this.Controls.Add(this.cldStatus); - this.Controls.Add(this.lvCloud); - this.Font = new System.Drawing.Font("Microsoft YaHei", 10F); - this.Margin = new System.Windows.Forms.Padding(5, 4, 5, 4); - this.MaximizeBox = false; - this.MinimumSize = new System.Drawing.Size(593, 470); - this.Name = "WebCloud"; - this.ShowIcon = false; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; - this.Text = "Cloud"; - this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.WebCloud_FormClosed); - this.Load += new System.EventHandler(this.WebCloud_Load); - this.cldStatus.ResumeLayout(false); - this.cldStatus.PerformLayout(); - this.gpLogin.ResumeLayout(false); - this.gpLogin.PerformLayout(); - this.CmdPanel.ResumeLayout(false); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.ListView lvCloud; - private System.Windows.Forms.Button btnSign; - private System.Windows.Forms.Label lblCloudID; - private System.Windows.Forms.Label lblPass; - private System.Windows.Forms.TextBox tbName; - private System.Windows.Forms.TextBox tbPass; - private System.Windows.Forms.Button btnUp; - private System.Windows.Forms.StatusStrip cldStatus; - private System.Windows.Forms.ToolStripStatusLabel CloudStatus; - private System.Windows.Forms.Button btnDelete; - private System.Windows.Forms.Button btnCreate; - private System.Windows.Forms.Button btnAdd; - private System.Windows.Forms.TextBox txtFolderName; - private System.Windows.Forms.GroupBox gpLogin; - private System.Windows.Forms.ImageList lvImageList; - private System.Windows.Forms.Panel CmdPanel; - private System.Windows.Forms.CheckBox cbPublic; - private System.Windows.Forms.ToolTip ttCloud; - private System.Windows.Forms.OpenFileDialog ofd; - } +namespace ImgRip +{ + partial class WebCloud + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(WebCloud)); + this.lvCloud = new System.Windows.Forms.ListView(); + this.lvImageList = new System.Windows.Forms.ImageList(this.components); + this.lblCloudID = new System.Windows.Forms.Label(); + this.lblPass = new System.Windows.Forms.Label(); + this.cldStatus = new System.Windows.Forms.StatusStrip(); + this.CloudStatus = new System.Windows.Forms.ToolStripStatusLabel(); + this.txtFolderName = new System.Windows.Forms.TextBox(); + this.gpLogin = new System.Windows.Forms.GroupBox(); + this.tbName = new System.Windows.Forms.TextBox(); + this.btnSign = new System.Windows.Forms.Button(); + this.tbPass = new System.Windows.Forms.TextBox(); + this.btnAdd = new System.Windows.Forms.Button(); + this.btnCreate = new System.Windows.Forms.Button(); + this.btnDelete = new System.Windows.Forms.Button(); + this.btnUp = new System.Windows.Forms.Button(); + this.CmdPanel = new System.Windows.Forms.Panel(); + this.cbPublic = new System.Windows.Forms.CheckBox(); + this.ttCloud = new System.Windows.Forms.ToolTip(this.components); + this.ofd = new System.Windows.Forms.OpenFileDialog(); + this.cldStatus.SuspendLayout(); + this.gpLogin.SuspendLayout(); + this.CmdPanel.SuspendLayout(); + this.SuspendLayout(); + // + // lvCloud + // + this.lvCloud.AllowDrop = true; + this.lvCloud.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.lvCloud.ForeColor = System.Drawing.Color.Blue; + this.lvCloud.LabelEdit = true; + this.lvCloud.Location = new System.Drawing.Point(0, 118); + this.lvCloud.Name = "lvCloud"; + this.lvCloud.ShowItemToolTips = true; + this.lvCloud.Size = new System.Drawing.Size(627, 320); + this.lvCloud.SmallImageList = this.lvImageList; + this.lvCloud.TabIndex = 1; + this.lvCloud.UseCompatibleStateImageBehavior = false; + this.lvCloud.View = System.Windows.Forms.View.List; + this.lvCloud.AfterLabelEdit += new System.Windows.Forms.LabelEditEventHandler(this.lvCloud_AfterLabelEdit); + this.lvCloud.ItemSelectionChanged += new System.Windows.Forms.ListViewItemSelectionChangedEventHandler(this.lvCloud_ItemSelectionChanged); + this.lvCloud.DragDrop += new System.Windows.Forms.DragEventHandler(this.lvCloud_DragDrop); + this.lvCloud.DragEnter += new System.Windows.Forms.DragEventHandler(this.lvCloud_DragEnter); + this.lvCloud.KeyDown += new System.Windows.Forms.KeyEventHandler(this.lvCloud_KeyDown); + this.lvCloud.Leave += new System.EventHandler(this.lvCloud_Leave); + this.lvCloud.MouseClick += new System.Windows.Forms.MouseEventHandler(this.lvCloud_MouseClick); + this.lvCloud.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.lvCloud_MouseDoubleClick); + // + // lvImageList + // + this.lvImageList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("lvImageList.ImageStream"))); + this.lvImageList.TransparentColor = System.Drawing.Color.Transparent; + this.lvImageList.Images.SetKeyName(0, "Folder"); + this.lvImageList.Images.SetKeyName(1, "Image"); + this.lvImageList.Images.SetKeyName(2, "Document"); + // + // lblCloudID + // + this.lblCloudID.AutoSize = true; + this.lblCloudID.Font = new System.Drawing.Font("Microsoft YaHei", 10F, System.Drawing.FontStyle.Bold); + this.lblCloudID.ForeColor = System.Drawing.Color.DodgerBlue; + this.lblCloudID.Location = new System.Drawing.Point(4, 29); + this.lblCloudID.Name = "lblCloudID"; + this.lblCloudID.Size = new System.Drawing.Size(55, 19); + this.lblCloudID.TabIndex = 3; + this.lblCloudID.Text = "Name:"; + // + // lblPass + // + this.lblPass.AutoSize = true; + this.lblPass.Font = new System.Drawing.Font("Microsoft YaHei", 10F, System.Drawing.FontStyle.Bold); + this.lblPass.ForeColor = System.Drawing.Color.DodgerBlue; + this.lblPass.Location = new System.Drawing.Point(4, 73); + this.lblPass.Name = "lblPass"; + this.lblPass.Size = new System.Drawing.Size(80, 19); + this.lblPass.TabIndex = 4; + this.lblPass.Text = "Password:"; + // + // cldStatus + // + this.cldStatus.Font = new System.Drawing.Font("Segoe UI", 9F); + this.cldStatus.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.CloudStatus}); + this.cldStatus.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.Flow; + this.cldStatus.Location = new System.Drawing.Point(0, 438); + this.cldStatus.Name = "cldStatus"; + this.cldStatus.Size = new System.Drawing.Size(627, 24); + this.cldStatus.TabIndex = 8; + this.cldStatus.Text = "statusStrip1"; + // + // CloudStatus + // + this.CloudStatus.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; + this.CloudStatus.Font = new System.Drawing.Font("Microsoft YaHei", 9.75F, System.Drawing.FontStyle.Bold); + this.CloudStatus.ForeColor = System.Drawing.SystemColors.Highlight; + this.CloudStatus.Name = "CloudStatus"; + this.CloudStatus.Size = new System.Drawing.Size(44, 19); + this.CloudStatus.Text = "Done"; + // + // txtFolderName + // + this.txtFolderName.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.txtFolderName.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.txtFolderName.Enabled = false; + this.txtFolderName.Location = new System.Drawing.Point(434, 81); + this.txtFolderName.Name = "txtFolderName"; + this.txtFolderName.Size = new System.Drawing.Size(171, 25); + this.txtFolderName.TabIndex = 12; + this.ttCloud.SetToolTip(this.txtFolderName, "Type to search or add new album"); + this.txtFolderName.MouseClick += new System.Windows.Forms.MouseEventHandler(this.txtFolderName_MouseClick); + this.txtFolderName.TextChanged += new System.EventHandler(this.txtFolderName_TextChanged); + this.txtFolderName.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.txtFolderName_KeyPress); + this.txtFolderName.Leave += new System.EventHandler(this.txtFolderName_Leave); + // + // gpLogin + // + this.gpLogin.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.gpLogin.Controls.Add(this.tbName); + this.gpLogin.Controls.Add(this.btnSign); + this.gpLogin.Controls.Add(this.lblCloudID); + this.gpLogin.Controls.Add(this.lblPass); + this.gpLogin.Controls.Add(this.tbPass); + this.gpLogin.Font = new System.Drawing.Font("Microsoft YaHei", 10F, System.Drawing.FontStyle.Bold); + this.gpLogin.ForeColor = System.Drawing.Color.BlueViolet; + this.gpLogin.Location = new System.Drawing.Point(12, 5); + this.gpLogin.Name = "gpLogin"; + this.gpLogin.Size = new System.Drawing.Size(347, 106); + this.gpLogin.TabIndex = 13; + this.gpLogin.TabStop = false; + this.gpLogin.Text = "Login"; + // + // tbName + // + this.tbName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.tbName.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::ImgRip.Properties.Settings.Default, "CloudID", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.tbName.Location = new System.Drawing.Point(82, 26); + this.tbName.Name = "tbName"; + this.tbName.Size = new System.Drawing.Size(194, 25); + this.tbName.TabIndex = 0; + this.tbName.Text = global::ImgRip.Properties.Settings.Default.CloudID; + // + // btnSign + // + this.btnSign.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnSign.AutoSize = true; + this.btnSign.Font = new System.Drawing.Font("Microsoft YaHei", 10F); + this.btnSign.Image = ((System.Drawing.Image)(resources.GetObject("btnSign.Image"))); + this.btnSign.Location = new System.Drawing.Point(283, 32); + this.btnSign.Name = "btnSign"; + this.btnSign.Size = new System.Drawing.Size(56, 54); + this.btnSign.TabIndex = 2; + this.btnSign.UseVisualStyleBackColor = true; + this.btnSign.Click += new System.EventHandler(this.ConnectCloud_Click); + // + // tbPass + // + this.tbPass.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.tbPass.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::ImgRip.Properties.Settings.Default, "Password", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.tbPass.Location = new System.Drawing.Point(82, 70); + this.tbPass.Name = "tbPass"; + this.tbPass.Size = new System.Drawing.Size(194, 25); + this.tbPass.TabIndex = 1; + this.tbPass.Text = global::ImgRip.Properties.Settings.Default.Password; + this.tbPass.UseSystemPasswordChar = true; + // + // btnAdd + // + this.btnAdd.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnAdd.Enabled = false; + this.btnAdd.Image = ((System.Drawing.Image)(resources.GetObject("btnAdd.Image"))); + this.btnAdd.Location = new System.Drawing.Point(121, 6); + this.btnAdd.Name = "btnAdd"; + this.btnAdd.Size = new System.Drawing.Size(50, 50); + this.btnAdd.TabIndex = 11; + this.ttCloud.SetToolTip(this.btnAdd, "Add Photos"); + this.btnAdd.UseVisualStyleBackColor = true; + this.btnAdd.Click += new System.EventHandler(this.btnAddFiles_Click); + // + // btnCreate + // + this.btnCreate.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnCreate.Enabled = false; + this.btnCreate.Image = ((System.Drawing.Image)(resources.GetObject("btnCreate.Image"))); + this.btnCreate.Location = new System.Drawing.Point(180, 6); + this.btnCreate.Name = "btnCreate"; + this.btnCreate.Size = new System.Drawing.Size(50, 50); + this.btnCreate.TabIndex = 10; + this.ttCloud.SetToolTip(this.btnCreate, "Create Album"); + this.btnCreate.UseVisualStyleBackColor = true; + this.btnCreate.Click += new System.EventHandler(this.btnCreateFolder_Click); + // + // btnDelete + // + this.btnDelete.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnDelete.Enabled = false; + this.btnDelete.Image = ((System.Drawing.Image)(resources.GetObject("btnDelete.Image"))); + this.btnDelete.Location = new System.Drawing.Point(62, 6); + this.btnDelete.Name = "btnDelete"; + this.btnDelete.Size = new System.Drawing.Size(50, 50); + this.btnDelete.TabIndex = 9; + this.ttCloud.SetToolTip(this.btnDelete, "Delete Items"); + this.btnDelete.UseVisualStyleBackColor = true; + this.btnDelete.Click += new System.EventHandler(this.btnDelete_Click); + // + // btnUp + // + this.btnUp.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnUp.Enabled = false; + this.btnUp.Font = new System.Drawing.Font("Microsoft YaHei", 10F); + this.btnUp.Image = ((System.Drawing.Image)(resources.GetObject("btnUp.Image"))); + this.btnUp.Location = new System.Drawing.Point(3, 6); + this.btnUp.Name = "btnUp"; + this.btnUp.Size = new System.Drawing.Size(50, 50); + this.btnUp.TabIndex = 7; + this.ttCloud.SetToolTip(this.btnUp, "Up to folder"); + this.btnUp.UseVisualStyleBackColor = true; + this.btnUp.Click += new System.EventHandler(this.btnUp_Click); + // + // CmdPanel + // + this.CmdPanel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.CmdPanel.AutoSize = true; + this.CmdPanel.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.CmdPanel.Controls.Add(this.btnUp); + this.CmdPanel.Controls.Add(this.btnDelete); + this.CmdPanel.Controls.Add(this.btnCreate); + this.CmdPanel.Controls.Add(this.btnAdd); + this.CmdPanel.Location = new System.Drawing.Point(372, 5); + this.CmdPanel.Name = "CmdPanel"; + this.CmdPanel.Size = new System.Drawing.Size(233, 59); + this.CmdPanel.TabIndex = 14; + // + // cbPublic + // + this.cbPublic.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.cbPublic.AutoCheck = false; + this.cbPublic.AutoSize = true; + this.cbPublic.Enabled = false; + this.cbPublic.Font = new System.Drawing.Font("Microsoft YaHei", 10F, System.Drawing.FontStyle.Bold); + this.cbPublic.Image = ((System.Drawing.Image)(resources.GetObject("cbPublic.Image"))); + this.cbPublic.Location = new System.Drawing.Point(373, 77); + this.cbPublic.Name = "cbPublic"; + this.cbPublic.Size = new System.Drawing.Size(47, 32); + this.cbPublic.TabIndex = 13; + this.cbPublic.ThreeState = true; + this.cbPublic.UseVisualStyleBackColor = true; + this.cbPublic.CheckedChanged += new System.EventHandler(this.cbPublic_CheckedChanged); + this.cbPublic.Leave += new System.EventHandler(this.cbPublic_Leave); + // + // ttCloud + // + this.ttCloud.AutomaticDelay = 300; + // + // ofd + // + this.ofd.DefaultExt = "jpg"; + this.ofd.Filter = "JPG files|*.jpg|PNG files|*.png|BMP files|*.bmp|All files|*.*"; + this.ofd.InitialDirectory = global::ImgRip.Properties.Settings.Default.Dir; + this.ofd.Multiselect = true; + // + // WebCloud + // + this.AcceptButton = this.btnSign; + this.AllowDrop = true; + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 19F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.AutoScroll = true; + this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.ClientSize = new System.Drawing.Size(627, 462); + this.Controls.Add(this.cbPublic); + this.Controls.Add(this.txtFolderName); + this.Controls.Add(this.CmdPanel); + this.Controls.Add(this.gpLogin); + this.Controls.Add(this.cldStatus); + this.Controls.Add(this.lvCloud); + this.Font = new System.Drawing.Font("Microsoft YaHei", 10F); + this.Margin = new System.Windows.Forms.Padding(5, 4, 5, 4); + this.MaximizeBox = false; + this.MinimumSize = new System.Drawing.Size(593, 470); + this.Name = "WebCloud"; + this.ShowIcon = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Cloud"; + this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.WebCloud_FormClosed); + this.Load += new System.EventHandler(this.WebCloud_Load); + this.cldStatus.ResumeLayout(false); + this.cldStatus.PerformLayout(); + this.gpLogin.ResumeLayout(false); + this.gpLogin.PerformLayout(); + this.CmdPanel.ResumeLayout(false); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.ListView lvCloud; + private System.Windows.Forms.Button btnSign; + private System.Windows.Forms.Label lblCloudID; + private System.Windows.Forms.Label lblPass; + private System.Windows.Forms.TextBox tbName; + private System.Windows.Forms.TextBox tbPass; + private System.Windows.Forms.Button btnUp; + private System.Windows.Forms.StatusStrip cldStatus; + private System.Windows.Forms.ToolStripStatusLabel CloudStatus; + private System.Windows.Forms.Button btnDelete; + private System.Windows.Forms.Button btnCreate; + private System.Windows.Forms.Button btnAdd; + private System.Windows.Forms.TextBox txtFolderName; + private System.Windows.Forms.GroupBox gpLogin; + private System.Windows.Forms.ImageList lvImageList; + private System.Windows.Forms.Panel CmdPanel; + private System.Windows.Forms.CheckBox cbPublic; + private System.Windows.Forms.ToolTip ttCloud; + private System.Windows.Forms.OpenFileDialog ofd; + } } \ No newline at end of file diff --git a/Cloud.cs b/Cloud.cs index 0639161..145716e 100644 --- a/Cloud.cs +++ b/Cloud.cs @@ -1,931 +1,931 @@ -namespace ImgRip -{ - using System; - using System.Collections.Generic; - using System.Collections.ObjectModel; - using System.IO; - using System.Linq; - using System.Threading; - using System.Windows.Forms; - - using Google.Documents; - using Google.GData.Client; - using Google.GData.Photos; - using Google.Picasa; - - partial class WebCloud : Form - { - public WebCloud() - { - InitializeComponent(); - } - - bool working = false; - string LoginName - { - get - { - var name = tbName.Text.Trim(); - if (name.LastIndexOf('@') < 0) name += "@gmail.com"; - return name; - } - } - bool Aborted = false; - string Prompt { set { if (!IsHandleCreated) return; Invoke(new Action(() => CloudStatus.Text = value)); } } - string Title { set { if (!IsHandleCreated)return; Invoke(new Action(() => this.Text = value)); } } - //Local ListViewItems memory cache - Collection cldCache; - Stack Folder; - DocumentsRequest DR; - PicasaRequest PR; - public string AlbumID { get; set; } - - internal static CloudType Service { get; set; } - - // Supported Cloud storage service - internal enum CloudType - { - GDrive, Flickr, Facebook, Picasa - } - - private void ConnectCloud_Click(object sender, EventArgs e) - { - CloudStatus.Text = "Waiting..."; lvCloud.Items.Clear(); - tbName.ReadOnly = tbPass.ReadOnly = true; btnCreate.Enabled = false; - switch (Service) - { - #region GDrive - case CloudType.GDrive: - DR = new DocumentsRequest(new RequestSettings("Ripper", LoginName, tbPass.Text) { AutoPaging = true, UseSSL = true }); - new Thread(new ThreadStart(() => - { - try - { - DR.Service.QueryClientLoginToken(); - var items = DR.GetFolders().Entries; - Invoke(new Action(() => lvCloud.BeginUpdate())); - foreach (var item in items) - lvCloud.cbAdd(item.AtomEntry, 0); - Invoke(new Action(() => lvCloud.EndUpdate())); - } - catch (Exception li) - { - if (this.IsHandleCreated) - { - Prompt = li.Message; - Invoke(new Action(() => tbName.ReadOnly = false)); - Invoke(new Action(() => tbPass.ReadOnly = false)); - btnSign.cbEnable(true); return; - } - } - if (cldCache != null) { cldCache.Clear(); cldCache = null; } - Prompt = lvCloud.Items.Count + " item(s)"; - UICallBack.EnableControls(true, btnSign, txtFolderName, btnCreate); - UICallBack.EnableControls(false, btnDelete, btnUp, btnAdd); - if (this.IsHandleCreated) - { - Invoke(new Action(() => tbName.ReadOnly = false)); - Invoke(new Action(() => tbPass.ReadOnly = false)); - } - })).Start(); - break; - #endregion - - #region Flickr - case CloudType.Flickr: - break; - #endregion - - #region Facebook - case CloudType.Facebook: - break; - #endregion - - #region Picasa - case CloudType.Picasa: - PR = new PicasaRequest(new RequestSettings("Ripper", LoginName, tbPass.Text) { AutoPaging = true, UseSSL = true }); - new Thread(new ThreadStart(() => - { - try - { - PR.Service.QueryClientLoginToken(); - var items = PR.GetAlbums().Entries; - Invoke(new Action(() => lvCloud.BeginUpdate())); - foreach (var item in items) lvCloud.cbAdd(item.AtomEntry, 0); - Invoke(new Action(() => lvCloud.EndUpdate())); - } - catch (Exception li) - { - if (this.IsHandleCreated) - { - Prompt = li.Message; - Invoke(new Action(() => tbName.ReadOnly = false)); - Invoke(new Action(() => tbPass.ReadOnly = false)); - btnSign.cbEnable(true); - return; - } - } - if (cldCache != null) { cldCache.Clear(); cldCache = null; } - Prompt = lvCloud.Items.Count + " Album(s)"; - UICallBack.EnableControls(true, btnSign, txtFolderName, btnCreate); - UICallBack.EnableControls(false, cbPublic, btnDelete, btnUp, btnAdd); - if (this.IsHandleCreated) - { - Invoke(new Action(() => tbName.ReadOnly = false)); - Invoke(new Action(() => tbPass.ReadOnly = false)); - } - })).Start(); - break; - #endregion - } - btnSign.Enabled = false; - Properties.Settings.Default.Save(); - } - - private void lvCloud_MouseDoubleClick(object sender, MouseEventArgs e) - { - if (lvCloud.FocusedItem != null) - { - ListViewItem lvi = lvCloud.FocusedItem; - switch (Service) - { - #region GDrive - case CloudType.GDrive: - Document doc = new Document() { AtomEntry = lvi.Tag as AtomEntry }; - if (doc.Type == Document.DocumentType.Folder) - { - Folder = Folder ?? new Stack(); - CloudStatus.Text = "Listing \"" + doc.Title + "\""; - Folder.Push(doc); - btnDelete.Enabled = btnAdd.Enabled = btnCreate.Enabled = false; - lvCloud.Items.Clear(); - new Thread(new ThreadStart(() => - { - var items = DR.GetFolderContent(doc).Entries; - Invoke(new Action(() => lvCloud.BeginUpdate())); - foreach (var item in items) - lvCloud.cbAdd(item.AtomEntry, item.Type == Document.DocumentType.Folder ? 0 : 2); - Invoke(new Action(() => lvCloud.EndUpdate())); - if (cldCache != null) { cldCache.Clear(); cldCache = null; } - UICallBack.EnableControls(true, btnUp, btnCreate, btnAdd, txtFolderName); - Title = doc.Title; - Prompt = string.Join(" > ", Folder.Select(_ => _.Title).Reverse().ToArray()) + ": " + items.Count() + " item(s)"; - })).Start(); - } - break; - #endregion - - #region Flickr - case CloudType.Flickr: - break; - #endregion - - #region Facebook - case CloudType.Facebook: - break; - #endregion - - #region Picasa - case CloudType.Picasa: - if (AlbumID != null) return; - Album a = new Album() { AtomEntry = lvi.Tag as AtomEntry }; - if (a != null) - { - CloudStatus.Text = "Listing \"" + a.Title + "\""; - btnDelete.Enabled = cbPublic.Enabled = txtFolderName.Enabled = false; - lvCloud.Items.Clear(); - AlbumID = a.Id; - new Thread(new ThreadStart(() => - { - var items = PR.GetPhotosInAlbum(AlbumID).Entries; - Invoke(new Action(() => lvCloud.BeginUpdate())); - foreach (var item in items) - lvCloud.cbAdd(item.AtomEntry, 1); - Invoke(new Action(() => lvCloud.EndUpdate())); - if (cldCache != null) { cldCache.Clear(); cldCache = null; } - UICallBack.EnableControls(true, btnUp, btnAdd, txtFolderName); - btnCreate.cbEnable(false); - Title = a.Title; - Prompt = a.Title + ": " + items.Count() + " Photo(s)"; - })).Start(); - } - break; - #endregion - } - } - } - - private void btnUp_Click(object sender, EventArgs e) - { - if (working) return; - working = true; - switch (Service) - { - #region GDrive - case CloudType.GDrive: - if (Folder == null || Folder.Count == 0) { working = false; return; } - Document doc = Folder.Pop(); - lvCloud.Items.Clear(); - btnUp.Enabled = btnDelete.Enabled = btnCreate.Enabled = txtFolderName.Enabled = btnAdd.Enabled = false; - if (Folder.Count == 0) - { - CloudStatus.Text = "Waiting..."; - new Thread(new ThreadStart(() => - { - var items = DR.GetFolders().Entries; - Invoke(new Action(() => lvCloud.BeginUpdate())); - foreach (var item in items) - if (item.ParentFolders.Count == 0) - lvCloud.cbAdd(item.AtomEntry, 0); - Invoke(new Action(() => lvCloud.EndUpdate())); - if (cldCache != null) { cldCache.Clear(); cldCache = null; } - UICallBack.EnableControls(true, btnCreate, txtFolderName); - btnUp.cbEnable(false); - Prompt = items.Count() + " item(s)"; - Title = "GDrive"; - working = false; - })).Start(); - } - else - { - doc = Folder.Peek(); - CloudStatus.Text = "Listing \"" + doc.Title + "\""; - new Thread(new ThreadStart(() => - { - var items = DR.GetFolderContent(doc).Entries; - Invoke(new Action(() => lvCloud.BeginUpdate())); - foreach (var item in items) - lvCloud.cbAdd(item.AtomEntry, item.Type == Document.DocumentType.Folder ? 0 : 2); - Invoke(new Action(() => lvCloud.EndUpdate())); - if (cldCache != null) { cldCache.Clear(); cldCache = null; } - UICallBack.EnableControls(true, btnAdd, btnUp, btnCreate, txtFolderName); - Title = doc.Title; - Prompt = string.Join(" > ", Folder.Select(_ => _.Title).Reverse().ToArray()) + ": " + items.Count() + " item(s)"; - })).Start(); - } - break; - #endregion - - #region Flickr - case CloudType.Flickr: - break; - #endregion - - #region Facebook - case CloudType.Facebook: - break; - #endregion - - #region Picasa - case CloudType.Picasa: - if (AlbumID == null) { working = false; return; } - lvCloud.Items.Clear(); - CloudStatus.Text = "Waiting..."; - btnUp.Enabled = btnDelete.Enabled = btnCreate.Enabled = txtFolderName.Enabled = btnAdd.Enabled = false; - new Thread(new ThreadStart(() => - { - var items = PR.GetAlbums().Entries; - Invoke(new Action(() => lvCloud.BeginUpdate())); - foreach (var item in items) - lvCloud.cbAdd(item.AtomEntry, 0); - Invoke(new Action(() => lvCloud.EndUpdate())); - if (cldCache != null) { cldCache.Clear(); cldCache = null; } - AlbumID = null; - UICallBack.EnableControls(true, txtFolderName, btnCreate); - Prompt = items.Count() + " Albums(s)"; - Title = "Picasa"; - working = false; - })).Start(); - break; - #endregion - } - } - - private void btnCreateFolder_Click(object sender, EventArgs e) - { - string foldername = txtFolderName.Text.Trim(); - if (string.IsNullOrEmpty(foldername) - || foldername.EndsWith(".") - || foldername.IndexOfAny(Path.GetInvalidPathChars()) >= 0) - { CloudStatus.Text = "Invalid album name!"; return; } - if (lvCloud.FindItemWithText(foldername) != null) { CloudStatus.Text = "\"" + foldername + "\" already existed."; return; } - CloudStatus.Text = "Creating \"" + foldername + "\""; - txtFolderName.Enabled = btnCreate.Enabled = btnUp.Enabled = false; - switch (Service) - { - #region GDrive - case CloudType.GDrive: - Document @base = null; - string title, tip; - if (Folder != null && Folder.Count > 0) @base = Folder.Peek(); - new Thread(new ThreadStart(() => - { - var @new = DR.CreateDocument(new Document() { Title = foldername, Type = Document.DocumentType.Folder }); - if (@base != null) - @new = DR.MoveDocumentTo(@base, @new); - title = @new.Title; tip = @new.AtomEntry.AlternateUri.Content; - lvCloud.cbAdd(@new.AtomEntry, 0); - if (cldCache != null) cldCache.Add(new ListViewItem(title, 0) { Tag = @new.AtomEntry, ToolTipText = tip }); - UICallBack.EnableControls(true, txtFolderName, btnCreate); - btnUp.cbEnable(@base != null); - Prompt = (@base == null ? "GDrive" : string.Join(" > ", Folder.Select(f => f.Title).Reverse().ToArray())) + ": " + lvCloud.Items.Count + " item(s)"; - })).Start(); - break; - #endregion - - #region Flickr - case CloudType.Flickr: - break; - #endregion - - #region Facebook - case CloudType.Facebook: - break; - #endregion - - #region Picasa - case CloudType.Picasa: - var a = new Album(); - a.Title = foldername; - cbPublic.ThreeState = false; - a.Access = cbPublic.Checked ? "public" : "private"; - new Thread(new ThreadStart(() => - { - var @new = PR.Insert(new Uri(PicasaQuery.CreatePicasaUri(LoginName)), a); - lvCloud.cbAdd(@new.AtomEntry, 0); - if (cldCache != null) cldCache.Add(new ListViewItem(foldername, 0) { Tag = @new.AtomEntry, ToolTipText = @new.AtomEntry.AlternateUri.Content }); - UICallBack.EnableControls(true, txtFolderName, btnCreate); - Prompt = lvCloud.Items.Count + " item(s)"; - })).Start(); - break; - #endregion - } - } - - private void btnDelete_Click(object sender, EventArgs e) - { - int total = lvCloud.SelectedItems.Count; - if (total == 0) { CloudStatus.Text = "No item(s) selected."; return; } - switch (Service) - { - #region GDrive & Picasa - case CloudType.GDrive: - case CloudType.Picasa: - var items = lvCloud.SelectedItems.OfType().ToArray(); - if (MessageBox.Show("Are you sure want to delete items below:\n" + string.Join(", ", items.Select(i => "\"" + i.Text + "\"").ToArray()), "Delete Cloud Storage Items", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes) - { - btnDelete.Enabled = btnUp.Enabled = false; - new Thread(DeleteCloudItem).Start(items); - } - break; - #endregion - - #region Flickr - case CloudType.Flickr: - break; - #endregion - - #region Facebook - case CloudType.Facebook: - break; - #endregion - } - } - - void DeleteCloudItem(object arg) - { - var items = arg as ListViewItem[]; - Action RemoveItem = lvi => lvCloud.Items.Remove(lvi); - switch (Service) - { - #region GDrive & Picasa - case CloudType.GDrive: - case CloudType.Picasa: - foreach (var lvi in items) - { - if (Aborted) - { - Prompt = "Operation Cancelled!"; - btnUp.cbEnable(Service == CloudType.GDrive ? (Folder != null && Folder.Count > 0) : AlbumID != null); - Aborted = false; - return; - } - Prompt = "Deleting \"" + lvi.Text + "\""; - try - { - (lvi.Tag as AtomEntry).Delete(); - } - catch (Exception exp) - { - MessageBox.Show(exp.Message, "Delete \"" + lvi.Text + "\" ERROR!", MessageBoxButtons.OK, MessageBoxIcon.Error); - break; - } - if (cldCache != null) cldCache.Remove(cldCache.Single(_ => _.ToolTipText == lvi.ToolTipText)); - Invoke(RemoveItem, lvi); - } - btnUp.cbEnable(Service == CloudType.GDrive ? (Folder != null && Folder.Count > 0) : AlbumID != null); - Prompt = lvCloud.Items.Count + (Service == CloudType.GDrive ? " items" : (AlbumID == null ? " Albums(s)" : " Photos(s)")); - break; - #endregion - - #region Flickr - case CloudType.Flickr: - break; - #endregion - - #region Facebook - case CloudType.Facebook: - break; - #endregion - } - } - - void AddCloudFile(object arg) - { - var files = arg as string[]; - switch (Service) - { - #region GDrive - case CloudType.GDrive: - Document @base = null; - if (Folder != null && Folder.Count > 0) - @base = Folder.Peek(); - var DocType = new Dictionary - { - { ".jpg", "image/jpeg" }, { ".png", "image/png" }, { ".gif", "image/gif" }, { ".tiff", "image/tiff" },{ ".bmp", "image/bmp" }, - { ".mov", "video/quicktime" }, { ".psd", "application/photoshop" },{ ".avi", "video/x-msvideo"}, { ".mpg", "video/mpeg"}, - { ".wmv", "video/x-ms-wmv" }, {".asf","video/x-ms-asf"},{".tif","video/x-ms-asf"}, - {"Default",".txt;.rtf;.ppt;.pptx;.pps;.htm;.html;.xls;.xlsx;.ods;.csv;.tsb;.doc;.docx;.pages;.ai;.dxf;.eps;.ps;.xps;.ttf"} - }; - files = files.Where(f => (File.GetAttributes(f) & FileAttributes.Directory) == 0).ToArray(); - foreach (var file in files) - { - if (Aborted) { Prompt = "Operation Cancelled!"; Aborted = false; break; } - if (!File.Exists(file)) continue; - string filename = Path.GetFileName(file), ext = Path.GetExtension(file).ToLower(); - if (DocType.ContainsKey(ext) || DocType["Default"].Split(';').Contains(ext)) - { - Prompt = "Adding \"" + filename + "\""; - try - { - var de = DocType.ContainsKey(ext) ? DR.Service.UploadFile(file, filename, DocType[ext], true) : DR.Service.UploadDocument(file, filename); - var @new = new Document { AtomEntry = de }; - if (@base != null) - { - Prompt = "Moving \"" + @new.Title + "\" to " + @base.Title; - @new = DR.MoveDocumentTo(@base, @new); - } - string ttt = @new.AtomEntry.AlternateUri.Content; - lvCloud.cbAdd(@new.AtomEntry, 2); - if (cldCache != null) cldCache.Add(new ListViewItem(@new.Title, 2) { Tag = @new.AtomEntry, ToolTipText = ttt }); - } - catch (Exception exp) - { - MessageBox.Show(exp.Message, "Upload \"" + filename + "\" ERROR!", MessageBoxButtons.OK, MessageBoxIcon.Error); - break; - } - } - } - Prompt = lvCloud.Items.Count + " items"; - btnUp.cbEnable(@base != null); - break; - #endregion - - #region Flickr - case CloudType.Flickr: - break; - #endregion - - #region Facebook - case CloudType.Facebook: - break; - #endregion - - #region Picasa - case CloudType.Picasa: - if (AlbumID == null) - { - var dirs = files.Where(f => (File.GetAttributes(f) & FileAttributes.Directory) != 0).ToArray(); - foreach (var dir in dirs) - { - var a = new Album(); - a.Title = Path.GetFileName(dir); - Prompt = "Creating Album: \"" + a.Title + "\""; - var @new = PR.Insert(new Uri(PicasaQuery.CreatePicasaUri(LoginName)), a); - lvCloud.cbAdd(@new.AtomEntry, 0); - if (cldCache != null) cldCache.Add(new ListViewItem(@new.Title, 0) { Tag = @new.AtomEntry, ToolTipText = @new.AtomEntry.AlternateUri.Content }); - var aid = @new.Id; - var photos = Directory.GetFiles(dir); - AddtoAlbum(photos, aid); - } - Prompt = lvCloud.Items.Count + " Album(s)"; - } - else - { - AddtoAlbum(files, AlbumID); - Prompt = lvCloud.Items.Count + " Photos(s)"; - } - btnUp.cbEnable(AlbumID != null); - break; - #endregion - } - System.Media.SystemSounds.Exclamation.Play(); - btnSign.cbEnable(true); - } - - void AddtoAlbum(string[] files, string aId) - { - //raw formats (.cr2, .nef, .orf, etc.) - "image/x-image-raw" - var PicasaType = new Dictionary - { - { ".jpg", "image/jpeg"}, { ".gif", "image/gif" }, { ".bmp", "image/bmp" }, { ".mov", "video/quicktime" }, { ".psd", "application/photoshop" }, - { ".avi", "video/x-msvideo"}, { ".mpg", "video/mpeg"}, { ".wmv", "video/x-ms-wmv" },{".asf","video/x-ms-asf"}, - {".tif","video/x-ms-asf"},{".png","image/png"},{".cr2","image/x-image-raw"},{".nef","image/x-image-raw"},{".orf","image/x-image-raw"} - }; - files = files.Where(f => (File.GetAttributes(f) & FileAttributes.Directory) == 0).ToArray(); - foreach (var file in files) - { - if (Aborted) { Prompt = "Operation Cancelled!"; Aborted = false; break; } - if (!File.Exists(file)) continue; - string filename = Path.GetFileName(file), ext = Path.GetExtension(file).ToLower(); - if (!PicasaType.ContainsKey(ext) || string.IsNullOrEmpty(ext)) continue; - Prompt = "Adding \"" + filename + "\""; - using (FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read)) - { - try - { - var ae = PR.Service.Insert(new Uri(PicasaQuery.CreatePicasaUri(LoginName, aId)), fs, PicasaType[ext], filename); - if (AlbumID != null) - { - lvCloud.cbAdd(ae, 1); - if (cldCache != null) cldCache.Add(new ListViewItem(filename, 1) { Tag = ae, ToolTipText = ae.AlternateUri.Content }); - } - fs.Close(); - } - catch (Exception exp) - { - fs.Close(); - MessageBox.Show(exp.Message, "Upload \"" + filename + "\" ERROR!", MessageBoxButtons.OK, MessageBoxIcon.Error); - break; - } - finally - { - fs.Dispose(); - } - } - } - } - - private void btnAddFiles_Click(object sender, EventArgs e) - { - if (DialogResult.OK == ofd.ShowDialog(this)) - { - Aborted = btnUp.Enabled = btnSign.Enabled = false; - new Thread(AddCloudFile).Start(ofd.FileNames); - } - } - - private void lvCloud_AfterLabelEdit(object sender, LabelEditEventArgs e) - { - ListViewItem lvi = lvCloud.Items[e.Item]; - if (string.IsNullOrEmpty(e.Label) || e.Label == lvi.Text) { e.CancelEdit = true;return; } - CloudStatus.Text = "Renaming..."; - switch (Service) - { - #region Flickr - case CloudType.Flickr: - break; - #endregion - - #region Facebook - case CloudType.Facebook: - break; - #endregion - - #region Picasa & GDrive - case CloudType.GDrive: - case CloudType.Picasa: - var ae = (lvi.Tag as AtomEntry); - ae.Title.Text = e.Label; - new Thread(new ThreadStart(() => - { - - var @new = ae.Update(); - if (cldCache != null) - { - ListViewItem item = cldCache.Single(i => i.ToolTipText == lvi.ToolTipText); - item.Text = e.Label; item.ToolTipText = @new.AlternateUri.Content; item.Tag = @new; - } - Invoke(new Action(() => lvi.ToolTipText = @new.AlternateUri.Content)); - lvi.Tag = @new; - Prompt = "Done"; - })).Start(); - break; - #endregion - } - } - - private void lvCloud_KeyDown(object sender, KeyEventArgs e) - { - if (lvCloud.Focused) - { - if (e.KeyCode == Keys.Back) - btnUp_Click(sender, e); - if (e.KeyCode == Keys.Escape) - { - Aborted = true; - CloudStatus.Text = "Pending Cancelled..."; - } - if (e.Control && e.KeyCode == Keys.V) - { - var files = Clipboard.GetFileDropList(); - if (files.Count > 0) - { - Aborted = btnUp.Enabled = btnSign.Enabled = false; - var sa = new string[files.Count]; - files.CopyTo(sa, 0); - new Thread(AddCloudFile).Start(sa); - } - } - ListViewItem lvi = lvCloud.FocusedItem; - if (lvi != null) - if (e.KeyCode == Keys.F2) - lvi.BeginEdit(); - else if (e.KeyCode == Keys.C && e.Control) - Clipboard.SetText(lvi.ToolTipText); - } - } - - private void lvCloud_DragDrop(object sender, DragEventArgs e) - { - var lv = sender as ListView; - var files = e.Data.GetData(DataFormats.FileDrop) as string[]; - if (files == null || files.Length == 0) return; - switch (Service) - { - #region GDrive - case CloudType.GDrive: - if (DR == null) return; - break; - #endregion - - #region Flickr - case CloudType.Flickr: - break; - #endregion - - #region Facebook - case CloudType.Facebook: - break; - #endregion - - #region Picasa - case CloudType.Picasa: - break; - #endregion - } - Aborted = btnUp.Enabled = btnSign.Enabled = false; - new Thread(AddCloudFile).Start(files); - } - - private void lvCloud_DragEnter(object sender, DragEventArgs e) - { - if (e.Data.GetDataPresent(DataFormats.FileDrop)) - { - e.Effect = DragDropEffects.Copy; - } - } - - private void WebCloud_Load(object sender, EventArgs e) - { - switch (Service) - { - case CloudType.GDrive: - gpLogin.Text = "GDrive"; - cbPublic.Visible = false; - txtFolderName.Location = new System.Drawing.Point(CmdPanel.Location.X + btnUp.Location.X, txtFolderName.Location.Y); - txtFolderName.Width = CmdPanel.Width - 5; - break; - case CloudType.Flickr: - gpLogin.Text = "Flickr"; - break; - case CloudType.Facebook: - gpLogin.Text = "Facebook"; - break; - case CloudType.Picasa: - gpLogin.Text = "Picasa"; - break; - } - } - - private void lvCloud_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e) - { - if (lvCloud.SelectedItems.Count > 0) - { - btnDelete.Enabled = true; - switch (Service) - { - #region GDrive - case CloudType.GDrive: - var lvi = lvCloud.SelectedItems[0]; - var doc = (lvi.Tag as AtomEntry); - Prompt = "Updated: " + doc.Updated.ToShortDateString(); - break; - #endregion - - #region Flickr - case CloudType.Flickr: - break; - #endregion - - #region Facebook - case CloudType.Facebook: - break; - #endregion - - #region Picasa - case CloudType.Picasa: - if (AlbumID == null) - { - cbPublic.Enabled = cbPublic.ThreeState = cbPublic.AutoCheck = true; - uint total = 0, check = 0; - foreach (ListViewItem item in lvCloud.SelectedItems) - { - var a = new Album() { AtomEntry = item.Tag as AtomEntry }; - total += a.NumPhotos; - if (a.Access == "public") check++; - } - cbPublic.CheckState = check == 0 ? CheckState.Unchecked : check == lvCloud.SelectedItems.Count ? CheckState.Checked : CheckState.Indeterminate; - cbPublic.ThreeState = cbPublic.CheckState == CheckState.Indeterminate; - cbPublic.AutoCheck = !cbPublic.ThreeState; - Prompt = string.Format("Total: {0} Photos", total); - } - else - { - long total = 0; - foreach (ListViewItem item in lvCloud.SelectedItems) - total += new Photo() { AtomEntry = item.Tag as AtomEntry }.Size; - Prompt = string.Format("Total: {0} KB", total / 1024); - } - break; - #endregion - } - } - else - { - btnDelete.Enabled = cbPublic.Enabled = false; - switch (Service) - { - #region GDrive - case CloudType.GDrive: - Prompt = lvCloud.Items.Count + " item(s)"; - break; - #endregion - - #region Flickr - case CloudType.Flickr: - break; - #endregion - - #region Facebook - case CloudType.Facebook: - break; - #endregion - - #region Picasa - case CloudType.Picasa: - cbPublic.CheckState = CheckState.Unchecked; - Prompt = lvCloud.Items.Count + (AlbumID == null ? " Albums(s)" : " Photos(s)"); - break; - #endregion - } - } - } - - private void lvCloud_MouseClick(object sender, MouseEventArgs e) - { - if (lvCloud.SelectedItems.Count > 0) - btnDelete.Enabled = true; - else - btnDelete.Enabled = false; - } - - private void txtFolderName_TextChanged(object sender, EventArgs e) - { - if (cldCache == null) return; - string text = txtFolderName.Text.Trim(); - lvCloud.SelectedItems.Clear(); - if (string.IsNullOrEmpty(text)) - if (txtFolderName.Text.Length > 0) return; - else - { - if (lvCloud.Items.Count != cldCache.Count) - { - lvCloud.SuspendLayout(); - lvCloud.Items.Clear(); - lvCloud.Items.AddRange(cldCache.ToArray()); - } - } - else - { - lvCloud.SuspendLayout(); - lvCloud.Items.Clear(); - lvCloud.Items.AddRange(cldCache.Where(_ => _.Text.ContainsEx(text)).ToArray()); - } - lvCloud.ResumeLayout(); - CloudStatus.Text = lvCloud.Items.Count + " items"; - } - - private void txtFolderName_KeyPress(object sender, KeyPressEventArgs e) - { - if (cldCache == null) - { - cldCache = new Collection(); - foreach (ListViewItem item in lvCloud.Items) - cldCache.Add(item); - } - } - - private void WebCloud_FormClosed(object sender, FormClosedEventArgs e) - { - if (cldCache != null) { cldCache.Clear(); cldCache = null; } - } - - private void txtFolderName_MouseClick(object sender, MouseEventArgs e) - { - if (string.IsNullOrEmpty(txtFolderName.Tag as string)) { txtFolderName.SelectAll(); txtFolderName.Tag = txtFolderName.SelectedText; } - - } - - private void txtFolderName_Leave(object sender, EventArgs e) - { - txtFolderName.Tag = null; - } - - private void lvCloud_Leave(object sender, EventArgs e) - { - cbPublic.Enabled = cbPublic.Focused; - } - - private void cbPublic_CheckedChanged(object sender, EventArgs e) - { - if (cbPublic.Focused && cbPublic.ThreeState == false) - { - if (working) return; - var lvis = lvCloud.SelectedItems; if (lvis.Count == 0) return; - var cb = sender as CheckBox; var state = cb.Checked; - var text = new string[lvis.Count]; - var albums = new Album[lvis.Count]; - for (int i = 0; i < text.Length; i++) - { - text[i] = lvis[i].Text; - albums[i] = new Album() { AtomEntry = lvis[i].Tag as AtomEntry }; - } - var prompt = string.Format("Are you sure to set \"{0}\" {1}?", string.Join(", ", text), state ? "public" : "private"); - working = true; - switch (state) - { - case true: - if (DialogResult.Yes == MessageBox.Show(prompt, "Share Album(s) in Picasa", MessageBoxButtons.YesNo, MessageBoxIcon.Information)) - { - foreach (var item in albums) - item.Access = "public"; - CloudStatus.Text = "Setting Album(s) public"; - } - else { cbPublic.Checked = false; working = false; return; } - break; - case false: - if (DialogResult.Yes == MessageBox.Show(prompt, "Protect Album(s) in Picasa", MessageBoxButtons.YesNo, MessageBoxIcon.Information)) - { - foreach (var item in albums) - item.Access = "private"; - CloudStatus.Text = "Setting Album(s) private"; - } - else { cbPublic.Checked = true; working = false; return; } - break; - } - cbPublic.Enabled = false; - new Thread(new ThreadStart(() => - { - for (var i = 0; i < albums.Length; i++) - { - var @new = albums[i].PicasaEntry.Update(); - Invoke(new Action(() => { lvis[i].ToolTipText = @new.AlternateUri.Content; lvis[i].Tag = @new; })); - - if (cldCache != null) - { - var cache = cldCache.Single(_ => _.ToolTipText == albums[i].AtomEntry.AlternateUri.Content); - cache.Tag = @new; cache.ToolTipText = @new.AlternateUri.Content; - } - } - Prompt = "Done"; cbPublic.cbEnable(true); working = false; - })).Start(); - } - } - - private void cbPublic_Leave(object sender, EventArgs e) - { - cbPublic.Enabled = false; - } - } -} +namespace ImgRip +{ + using System; + using System.Collections.Generic; + using System.Collections.ObjectModel; + using System.IO; + using System.Linq; + using System.Threading; + using System.Windows.Forms; + + using Google.Documents; + using Google.GData.Client; + using Google.GData.Photos; + using Google.Picasa; + + partial class WebCloud : Form + { + public WebCloud() + { + InitializeComponent(); + } + + bool working = false; + string LoginName + { + get + { + var name = tbName.Text.Trim(); + if (name.LastIndexOf('@') < 0) name += "@gmail.com"; + return name; + } + } + bool Aborted = false; + string Prompt { set { if (!IsHandleCreated) return; Invoke(new Action(() => CloudStatus.Text = value)); } } + string Title { set { if (!IsHandleCreated)return; Invoke(new Action(() => this.Text = value)); } } + //Local ListViewItems memory cache + Collection cldCache; + Stack Folder; + DocumentsRequest DR; + PicasaRequest PR; + public string AlbumID { get; set; } + + internal static CloudType Service { get; set; } + + // Supported Cloud storage service + internal enum CloudType + { + GDrive, Flickr, Facebook, Picasa + } + + private void ConnectCloud_Click(object sender, EventArgs e) + { + CloudStatus.Text = "Waiting..."; lvCloud.Items.Clear(); + tbName.ReadOnly = tbPass.ReadOnly = true; btnCreate.Enabled = false; + switch (Service) + { + #region GDrive + case CloudType.GDrive: + DR = new DocumentsRequest(new RequestSettings("Ripper", LoginName, tbPass.Text) { AutoPaging = true, UseSSL = true }); + new Thread(new ThreadStart(() => + { + try + { + DR.Service.QueryClientLoginToken(); + var items = DR.GetFolders().Entries; + Invoke(new Action(() => lvCloud.BeginUpdate())); + foreach (var item in items) + lvCloud.cbAdd(item.AtomEntry, 0); + Invoke(new Action(() => lvCloud.EndUpdate())); + } + catch (Exception li) + { + if (this.IsHandleCreated) + { + Prompt = li.Message; + Invoke(new Action(() => tbName.ReadOnly = false)); + Invoke(new Action(() => tbPass.ReadOnly = false)); + btnSign.cbEnable(true); return; + } + } + if (cldCache != null) { cldCache.Clear(); cldCache = null; } + Prompt = lvCloud.Items.Count + " item(s)"; + UICallBack.EnableControls(true, btnSign, txtFolderName, btnCreate); + UICallBack.EnableControls(false, btnDelete, btnUp, btnAdd); + if (this.IsHandleCreated) + { + Invoke(new Action(() => tbName.ReadOnly = false)); + Invoke(new Action(() => tbPass.ReadOnly = false)); + } + })).Start(); + break; + #endregion + + #region Flickr + case CloudType.Flickr: + break; + #endregion + + #region Facebook + case CloudType.Facebook: + break; + #endregion + + #region Picasa + case CloudType.Picasa: + PR = new PicasaRequest(new RequestSettings("Ripper", LoginName, tbPass.Text) { AutoPaging = true, UseSSL = true }); + new Thread(new ThreadStart(() => + { + try + { + PR.Service.QueryClientLoginToken(); + var items = PR.GetAlbums().Entries; + Invoke(new Action(() => lvCloud.BeginUpdate())); + foreach (var item in items) lvCloud.cbAdd(item.AtomEntry, 0); + Invoke(new Action(() => lvCloud.EndUpdate())); + } + catch (Exception li) + { + if (this.IsHandleCreated) + { + Prompt = li.Message; + Invoke(new Action(() => tbName.ReadOnly = false)); + Invoke(new Action(() => tbPass.ReadOnly = false)); + btnSign.cbEnable(true); + return; + } + } + if (cldCache != null) { cldCache.Clear(); cldCache = null; } + Prompt = lvCloud.Items.Count + " Album(s)"; + UICallBack.EnableControls(true, btnSign, txtFolderName, btnCreate); + UICallBack.EnableControls(false, cbPublic, btnDelete, btnUp, btnAdd); + if (this.IsHandleCreated) + { + Invoke(new Action(() => tbName.ReadOnly = false)); + Invoke(new Action(() => tbPass.ReadOnly = false)); + } + })).Start(); + break; + #endregion + } + btnSign.Enabled = false; + Properties.Settings.Default.Save(); + } + + private void lvCloud_MouseDoubleClick(object sender, MouseEventArgs e) + { + if (lvCloud.FocusedItem != null) + { + ListViewItem lvi = lvCloud.FocusedItem; + switch (Service) + { + #region GDrive + case CloudType.GDrive: + Document doc = new Document() { AtomEntry = lvi.Tag as AtomEntry }; + if (doc.Type == Document.DocumentType.Folder) + { + Folder = Folder ?? new Stack(); + CloudStatus.Text = "Listing \"" + doc.Title + "\""; + Folder.Push(doc); + btnDelete.Enabled = btnAdd.Enabled = btnCreate.Enabled = false; + lvCloud.Items.Clear(); + new Thread(new ThreadStart(() => + { + var items = DR.GetFolderContent(doc).Entries; + Invoke(new Action(() => lvCloud.BeginUpdate())); + foreach (var item in items) + lvCloud.cbAdd(item.AtomEntry, item.Type == Document.DocumentType.Folder ? 0 : 2); + Invoke(new Action(() => lvCloud.EndUpdate())); + if (cldCache != null) { cldCache.Clear(); cldCache = null; } + UICallBack.EnableControls(true, btnUp, btnCreate, btnAdd, txtFolderName); + Title = doc.Title; + Prompt = string.Join(" > ", Folder.Select(_ => _.Title).Reverse().ToArray()) + ": " + items.Count() + " item(s)"; + })).Start(); + } + break; + #endregion + + #region Flickr + case CloudType.Flickr: + break; + #endregion + + #region Facebook + case CloudType.Facebook: + break; + #endregion + + #region Picasa + case CloudType.Picasa: + if (AlbumID != null) return; + Album a = new Album() { AtomEntry = lvi.Tag as AtomEntry }; + if (a != null) + { + CloudStatus.Text = "Listing \"" + a.Title + "\""; + btnDelete.Enabled = cbPublic.Enabled = txtFolderName.Enabled = false; + lvCloud.Items.Clear(); + AlbumID = a.Id; + new Thread(new ThreadStart(() => + { + var items = PR.GetPhotosInAlbum(AlbumID).Entries; + Invoke(new Action(() => lvCloud.BeginUpdate())); + foreach (var item in items) + lvCloud.cbAdd(item.AtomEntry, 1); + Invoke(new Action(() => lvCloud.EndUpdate())); + if (cldCache != null) { cldCache.Clear(); cldCache = null; } + UICallBack.EnableControls(true, btnUp, btnAdd, txtFolderName); + btnCreate.cbEnable(false); + Title = a.Title; + Prompt = a.Title + ": " + items.Count() + " Photo(s)"; + })).Start(); + } + break; + #endregion + } + } + } + + private void btnUp_Click(object sender, EventArgs e) + { + if (working) return; + working = true; + switch (Service) + { + #region GDrive + case CloudType.GDrive: + if (Folder == null || Folder.Count == 0) { working = false; return; } + Document doc = Folder.Pop(); + lvCloud.Items.Clear(); + btnUp.Enabled = btnDelete.Enabled = btnCreate.Enabled = txtFolderName.Enabled = btnAdd.Enabled = false; + if (Folder.Count == 0) + { + CloudStatus.Text = "Waiting..."; + new Thread(new ThreadStart(() => + { + var items = DR.GetFolders().Entries; + Invoke(new Action(() => lvCloud.BeginUpdate())); + foreach (var item in items) + if (item.ParentFolders.Count == 0) + lvCloud.cbAdd(item.AtomEntry, 0); + Invoke(new Action(() => lvCloud.EndUpdate())); + if (cldCache != null) { cldCache.Clear(); cldCache = null; } + UICallBack.EnableControls(true, btnCreate, txtFolderName); + btnUp.cbEnable(false); + Prompt = items.Count() + " item(s)"; + Title = "GDrive"; + working = false; + })).Start(); + } + else + { + doc = Folder.Peek(); + CloudStatus.Text = "Listing \"" + doc.Title + "\""; + new Thread(new ThreadStart(() => + { + var items = DR.GetFolderContent(doc).Entries; + Invoke(new Action(() => lvCloud.BeginUpdate())); + foreach (var item in items) + lvCloud.cbAdd(item.AtomEntry, item.Type == Document.DocumentType.Folder ? 0 : 2); + Invoke(new Action(() => lvCloud.EndUpdate())); + if (cldCache != null) { cldCache.Clear(); cldCache = null; } + UICallBack.EnableControls(true, btnAdd, btnUp, btnCreate, txtFolderName); + Title = doc.Title; + Prompt = string.Join(" > ", Folder.Select(_ => _.Title).Reverse().ToArray()) + ": " + items.Count() + " item(s)"; + })).Start(); + } + break; + #endregion + + #region Flickr + case CloudType.Flickr: + break; + #endregion + + #region Facebook + case CloudType.Facebook: + break; + #endregion + + #region Picasa + case CloudType.Picasa: + if (AlbumID == null) { working = false; return; } + lvCloud.Items.Clear(); + CloudStatus.Text = "Waiting..."; + btnUp.Enabled = btnDelete.Enabled = btnCreate.Enabled = txtFolderName.Enabled = btnAdd.Enabled = false; + new Thread(new ThreadStart(() => + { + var items = PR.GetAlbums().Entries; + Invoke(new Action(() => lvCloud.BeginUpdate())); + foreach (var item in items) + lvCloud.cbAdd(item.AtomEntry, 0); + Invoke(new Action(() => lvCloud.EndUpdate())); + if (cldCache != null) { cldCache.Clear(); cldCache = null; } + AlbumID = null; + UICallBack.EnableControls(true, txtFolderName, btnCreate); + Prompt = items.Count() + " Albums(s)"; + Title = "Picasa"; + working = false; + })).Start(); + break; + #endregion + } + } + + private void btnCreateFolder_Click(object sender, EventArgs e) + { + string foldername = txtFolderName.Text.Trim(); + if (string.IsNullOrEmpty(foldername) + || foldername.EndsWith(".") + || foldername.IndexOfAny(Path.GetInvalidPathChars()) >= 0) + { CloudStatus.Text = "Invalid album name!"; return; } + if (lvCloud.FindItemWithText(foldername) != null) { CloudStatus.Text = "\"" + foldername + "\" already existed."; return; } + CloudStatus.Text = "Creating \"" + foldername + "\""; + txtFolderName.Enabled = btnCreate.Enabled = btnUp.Enabled = false; + switch (Service) + { + #region GDrive + case CloudType.GDrive: + Document @base = null; + string title, tip; + if (Folder != null && Folder.Count > 0) @base = Folder.Peek(); + new Thread(new ThreadStart(() => + { + var @new = DR.CreateDocument(new Document() { Title = foldername, Type = Document.DocumentType.Folder }); + if (@base != null) + @new = DR.MoveDocumentTo(@base, @new); + title = @new.Title; tip = @new.AtomEntry.AlternateUri.Content; + lvCloud.cbAdd(@new.AtomEntry, 0); + if (cldCache != null) cldCache.Add(new ListViewItem(title, 0) { Tag = @new.AtomEntry, ToolTipText = tip }); + UICallBack.EnableControls(true, txtFolderName, btnCreate); + btnUp.cbEnable(@base != null); + Prompt = (@base == null ? "GDrive" : string.Join(" > ", Folder.Select(f => f.Title).Reverse().ToArray())) + ": " + lvCloud.Items.Count + " item(s)"; + })).Start(); + break; + #endregion + + #region Flickr + case CloudType.Flickr: + break; + #endregion + + #region Facebook + case CloudType.Facebook: + break; + #endregion + + #region Picasa + case CloudType.Picasa: + var a = new Album(); + a.Title = foldername; + cbPublic.ThreeState = false; + a.Access = cbPublic.Checked ? "public" : "private"; + new Thread(new ThreadStart(() => + { + var @new = PR.Insert(new Uri(PicasaQuery.CreatePicasaUri(LoginName)), a); + lvCloud.cbAdd(@new.AtomEntry, 0); + if (cldCache != null) cldCache.Add(new ListViewItem(foldername, 0) { Tag = @new.AtomEntry, ToolTipText = @new.AtomEntry.AlternateUri.Content }); + UICallBack.EnableControls(true, txtFolderName, btnCreate); + Prompt = lvCloud.Items.Count + " item(s)"; + })).Start(); + break; + #endregion + } + } + + private void btnDelete_Click(object sender, EventArgs e) + { + int total = lvCloud.SelectedItems.Count; + if (total == 0) { CloudStatus.Text = "No item(s) selected."; return; } + switch (Service) + { + #region GDrive & Picasa + case CloudType.GDrive: + case CloudType.Picasa: + var items = lvCloud.SelectedItems.OfType().ToArray(); + if (MessageBox.Show("Are you sure want to delete items below:\n" + string.Join(", ", items.Select(i => "\"" + i.Text + "\"").ToArray()), "Delete Cloud Storage Items", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes) + { + btnDelete.Enabled = btnUp.Enabled = false; + new Thread(DeleteCloudItem).Start(items); + } + break; + #endregion + + #region Flickr + case CloudType.Flickr: + break; + #endregion + + #region Facebook + case CloudType.Facebook: + break; + #endregion + } + } + + void DeleteCloudItem(object arg) + { + var items = arg as ListViewItem[]; + Action RemoveItem = lvi => lvCloud.Items.Remove(lvi); + switch (Service) + { + #region GDrive & Picasa + case CloudType.GDrive: + case CloudType.Picasa: + foreach (var lvi in items) + { + if (Aborted) + { + Prompt = "Operation Cancelled!"; + btnUp.cbEnable(Service == CloudType.GDrive ? (Folder != null && Folder.Count > 0) : AlbumID != null); + Aborted = false; + return; + } + Prompt = "Deleting \"" + lvi.Text + "\""; + try + { + (lvi.Tag as AtomEntry).Delete(); + } + catch (Exception exp) + { + MessageBox.Show(exp.Message, "Delete \"" + lvi.Text + "\" ERROR!", MessageBoxButtons.OK, MessageBoxIcon.Error); + break; + } + if (cldCache != null) cldCache.Remove(cldCache.Single(_ => _.ToolTipText == lvi.ToolTipText)); + Invoke(RemoveItem, lvi); + } + btnUp.cbEnable(Service == CloudType.GDrive ? (Folder != null && Folder.Count > 0) : AlbumID != null); + Prompt = lvCloud.Items.Count + (Service == CloudType.GDrive ? " items" : (AlbumID == null ? " Albums(s)" : " Photos(s)")); + break; + #endregion + + #region Flickr + case CloudType.Flickr: + break; + #endregion + + #region Facebook + case CloudType.Facebook: + break; + #endregion + } + } + + void AddCloudFile(object arg) + { + var files = arg as string[]; + switch (Service) + { + #region GDrive + case CloudType.GDrive: + Document @base = null; + if (Folder != null && Folder.Count > 0) + @base = Folder.Peek(); + var DocType = new Dictionary + { + { ".jpg", "image/jpeg" }, { ".png", "image/png" }, { ".gif", "image/gif" }, { ".tiff", "image/tiff" },{ ".bmp", "image/bmp" }, + { ".mov", "video/quicktime" }, { ".psd", "application/photoshop" },{ ".avi", "video/x-msvideo"}, { ".mpg", "video/mpeg"}, + { ".wmv", "video/x-ms-wmv" }, {".asf","video/x-ms-asf"},{".tif","video/x-ms-asf"}, + {"Default",".txt;.rtf;.ppt;.pptx;.pps;.htm;.html;.xls;.xlsx;.ods;.csv;.tsb;.doc;.docx;.pages;.ai;.dxf;.eps;.ps;.xps;.ttf"} + }; + files = files.Where(f => (File.GetAttributes(f) & FileAttributes.Directory) == 0).ToArray(); + foreach (var file in files) + { + if (Aborted) { Prompt = "Operation Cancelled!"; Aborted = false; break; } + if (!File.Exists(file)) continue; + string filename = Path.GetFileName(file), ext = Path.GetExtension(file).ToLower(); + if (DocType.ContainsKey(ext) || DocType["Default"].Split(';').Contains(ext)) + { + Prompt = "Adding \"" + filename + "\""; + try + { + var de = DocType.ContainsKey(ext) ? DR.Service.UploadFile(file, filename, DocType[ext], true) : DR.Service.UploadDocument(file, filename); + var @new = new Document { AtomEntry = de }; + if (@base != null) + { + Prompt = "Moving \"" + @new.Title + "\" to " + @base.Title; + @new = DR.MoveDocumentTo(@base, @new); + } + string ttt = @new.AtomEntry.AlternateUri.Content; + lvCloud.cbAdd(@new.AtomEntry, 2); + if (cldCache != null) cldCache.Add(new ListViewItem(@new.Title, 2) { Tag = @new.AtomEntry, ToolTipText = ttt }); + } + catch (Exception exp) + { + MessageBox.Show(exp.Message, "Upload \"" + filename + "\" ERROR!", MessageBoxButtons.OK, MessageBoxIcon.Error); + break; + } + } + } + Prompt = lvCloud.Items.Count + " items"; + btnUp.cbEnable(@base != null); + break; + #endregion + + #region Flickr + case CloudType.Flickr: + break; + #endregion + + #region Facebook + case CloudType.Facebook: + break; + #endregion + + #region Picasa + case CloudType.Picasa: + if (AlbumID == null) + { + var dirs = files.Where(f => (File.GetAttributes(f) & FileAttributes.Directory) != 0).ToArray(); + foreach (var dir in dirs) + { + var a = new Album(); + a.Title = Path.GetFileName(dir); + Prompt = "Creating Album: \"" + a.Title + "\""; + var @new = PR.Insert(new Uri(PicasaQuery.CreatePicasaUri(LoginName)), a); + lvCloud.cbAdd(@new.AtomEntry, 0); + if (cldCache != null) cldCache.Add(new ListViewItem(@new.Title, 0) { Tag = @new.AtomEntry, ToolTipText = @new.AtomEntry.AlternateUri.Content }); + var aid = @new.Id; + var photos = Directory.GetFiles(dir); + AddtoAlbum(photos, aid); + } + Prompt = lvCloud.Items.Count + " Album(s)"; + } + else + { + AddtoAlbum(files, AlbumID); + Prompt = lvCloud.Items.Count + " Photos(s)"; + } + btnUp.cbEnable(AlbumID != null); + break; + #endregion + } + System.Media.SystemSounds.Exclamation.Play(); + btnSign.cbEnable(true); + } + + void AddtoAlbum(string[] files, string aId) + { + //raw formats (.cr2, .nef, .orf, etc.) - "image/x-image-raw" + var PicasaType = new Dictionary + { + { ".jpg", "image/jpeg"}, { ".gif", "image/gif" }, { ".bmp", "image/bmp" }, { ".mov", "video/quicktime" }, { ".psd", "application/photoshop" }, + { ".avi", "video/x-msvideo"}, { ".mpg", "video/mpeg"}, { ".wmv", "video/x-ms-wmv" },{".asf","video/x-ms-asf"}, + {".tif","video/x-ms-asf"},{".png","image/png"},{".cr2","image/x-image-raw"},{".nef","image/x-image-raw"},{".orf","image/x-image-raw"} + }; + files = files.Where(f => (File.GetAttributes(f) & FileAttributes.Directory) == 0).ToArray(); + foreach (var file in files) + { + if (Aborted) { Prompt = "Operation Cancelled!"; Aborted = false; break; } + if (!File.Exists(file)) continue; + string filename = Path.GetFileName(file), ext = Path.GetExtension(file).ToLower(); + if (!PicasaType.ContainsKey(ext) || string.IsNullOrEmpty(ext)) continue; + Prompt = "Adding \"" + filename + "\""; + using (FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read)) + { + try + { + var ae = PR.Service.Insert(new Uri(PicasaQuery.CreatePicasaUri(LoginName, aId)), fs, PicasaType[ext], filename); + if (AlbumID != null) + { + lvCloud.cbAdd(ae, 1); + if (cldCache != null) cldCache.Add(new ListViewItem(filename, 1) { Tag = ae, ToolTipText = ae.AlternateUri.Content }); + } + fs.Close(); + } + catch (Exception exp) + { + fs.Close(); + MessageBox.Show(exp.Message, "Upload \"" + filename + "\" ERROR!", MessageBoxButtons.OK, MessageBoxIcon.Error); + break; + } + finally + { + fs.Dispose(); + } + } + } + } + + private void btnAddFiles_Click(object sender, EventArgs e) + { + if (DialogResult.OK == ofd.ShowDialog(this)) + { + Aborted = btnUp.Enabled = btnSign.Enabled = false; + new Thread(AddCloudFile).Start(ofd.FileNames); + } + } + + private void lvCloud_AfterLabelEdit(object sender, LabelEditEventArgs e) + { + ListViewItem lvi = lvCloud.Items[e.Item]; + if (string.IsNullOrEmpty(e.Label) || e.Label == lvi.Text) { e.CancelEdit = true;return; } + CloudStatus.Text = "Renaming..."; + switch (Service) + { + #region Flickr + case CloudType.Flickr: + break; + #endregion + + #region Facebook + case CloudType.Facebook: + break; + #endregion + + #region Picasa & GDrive + case CloudType.GDrive: + case CloudType.Picasa: + var ae = (lvi.Tag as AtomEntry); + ae.Title.Text = e.Label; + new Thread(new ThreadStart(() => + { + + var @new = ae.Update(); + if (cldCache != null) + { + ListViewItem item = cldCache.Single(i => i.ToolTipText == lvi.ToolTipText); + item.Text = e.Label; item.ToolTipText = @new.AlternateUri.Content; item.Tag = @new; + } + Invoke(new Action(() => lvi.ToolTipText = @new.AlternateUri.Content)); + lvi.Tag = @new; + Prompt = "Done"; + })).Start(); + break; + #endregion + } + } + + private void lvCloud_KeyDown(object sender, KeyEventArgs e) + { + if (lvCloud.Focused) + { + if (e.KeyCode == Keys.Back) + btnUp_Click(sender, e); + if (e.KeyCode == Keys.Escape) + { + Aborted = true; + CloudStatus.Text = "Pending Cancelled..."; + } + if (e.Control && e.KeyCode == Keys.V) + { + var files = Clipboard.GetFileDropList(); + if (files.Count > 0) + { + Aborted = btnUp.Enabled = btnSign.Enabled = false; + var sa = new string[files.Count]; + files.CopyTo(sa, 0); + new Thread(AddCloudFile).Start(sa); + } + } + ListViewItem lvi = lvCloud.FocusedItem; + if (lvi != null) + if (e.KeyCode == Keys.F2) + lvi.BeginEdit(); + else if (e.KeyCode == Keys.C && e.Control) + Clipboard.SetText(lvi.ToolTipText); + } + } + + private void lvCloud_DragDrop(object sender, DragEventArgs e) + { + var lv = sender as ListView; + var files = e.Data.GetData(DataFormats.FileDrop) as string[]; + if (files == null || files.Length == 0) return; + switch (Service) + { + #region GDrive + case CloudType.GDrive: + if (DR == null) return; + break; + #endregion + + #region Flickr + case CloudType.Flickr: + break; + #endregion + + #region Facebook + case CloudType.Facebook: + break; + #endregion + + #region Picasa + case CloudType.Picasa: + break; + #endregion + } + Aborted = btnUp.Enabled = btnSign.Enabled = false; + new Thread(AddCloudFile).Start(files); + } + + private void lvCloud_DragEnter(object sender, DragEventArgs e) + { + if (e.Data.GetDataPresent(DataFormats.FileDrop)) + { + e.Effect = DragDropEffects.Copy; + } + } + + private void WebCloud_Load(object sender, EventArgs e) + { + switch (Service) + { + case CloudType.GDrive: + gpLogin.Text = "GDrive"; + cbPublic.Visible = false; + txtFolderName.Location = new System.Drawing.Point(CmdPanel.Location.X + btnUp.Location.X, txtFolderName.Location.Y); + txtFolderName.Width = CmdPanel.Width - 5; + break; + case CloudType.Flickr: + gpLogin.Text = "Flickr"; + break; + case CloudType.Facebook: + gpLogin.Text = "Facebook"; + break; + case CloudType.Picasa: + gpLogin.Text = "Picasa"; + break; + } + } + + private void lvCloud_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e) + { + if (lvCloud.SelectedItems.Count > 0) + { + btnDelete.Enabled = true; + switch (Service) + { + #region GDrive + case CloudType.GDrive: + var lvi = lvCloud.SelectedItems[0]; + var doc = (lvi.Tag as AtomEntry); + Prompt = "Updated: " + doc.Updated.ToShortDateString(); + break; + #endregion + + #region Flickr + case CloudType.Flickr: + break; + #endregion + + #region Facebook + case CloudType.Facebook: + break; + #endregion + + #region Picasa + case CloudType.Picasa: + if (AlbumID == null) + { + cbPublic.Enabled = cbPublic.ThreeState = cbPublic.AutoCheck = true; + uint total = 0, check = 0; + foreach (ListViewItem item in lvCloud.SelectedItems) + { + var a = new Album() { AtomEntry = item.Tag as AtomEntry }; + total += a.NumPhotos; + if (a.Access == "public") check++; + } + cbPublic.CheckState = check == 0 ? CheckState.Unchecked : check == lvCloud.SelectedItems.Count ? CheckState.Checked : CheckState.Indeterminate; + cbPublic.ThreeState = cbPublic.CheckState == CheckState.Indeterminate; + cbPublic.AutoCheck = !cbPublic.ThreeState; + Prompt = string.Format("Total: {0} Photos", total); + } + else + { + long total = 0; + foreach (ListViewItem item in lvCloud.SelectedItems) + total += new Photo() { AtomEntry = item.Tag as AtomEntry }.Size; + Prompt = string.Format("Total: {0} KB", total / 1024); + } + break; + #endregion + } + } + else + { + btnDelete.Enabled = cbPublic.Enabled = false; + switch (Service) + { + #region GDrive + case CloudType.GDrive: + Prompt = lvCloud.Items.Count + " item(s)"; + break; + #endregion + + #region Flickr + case CloudType.Flickr: + break; + #endregion + + #region Facebook + case CloudType.Facebook: + break; + #endregion + + #region Picasa + case CloudType.Picasa: + cbPublic.CheckState = CheckState.Unchecked; + Prompt = lvCloud.Items.Count + (AlbumID == null ? " Albums(s)" : " Photos(s)"); + break; + #endregion + } + } + } + + private void lvCloud_MouseClick(object sender, MouseEventArgs e) + { + if (lvCloud.SelectedItems.Count > 0) + btnDelete.Enabled = true; + else + btnDelete.Enabled = false; + } + + private void txtFolderName_TextChanged(object sender, EventArgs e) + { + if (cldCache == null) return; + string text = txtFolderName.Text.Trim(); + lvCloud.SelectedItems.Clear(); + if (string.IsNullOrEmpty(text)) + if (txtFolderName.Text.Length > 0) return; + else + { + if (lvCloud.Items.Count != cldCache.Count) + { + lvCloud.SuspendLayout(); + lvCloud.Items.Clear(); + lvCloud.Items.AddRange(cldCache.ToArray()); + } + } + else + { + lvCloud.SuspendLayout(); + lvCloud.Items.Clear(); + lvCloud.Items.AddRange(cldCache.Where(_ => _.Text.ContainsEx(text)).ToArray()); + } + lvCloud.ResumeLayout(); + CloudStatus.Text = lvCloud.Items.Count + " items"; + } + + private void txtFolderName_KeyPress(object sender, KeyPressEventArgs e) + { + if (cldCache == null) + { + cldCache = new Collection(); + foreach (ListViewItem item in lvCloud.Items) + cldCache.Add(item); + } + } + + private void WebCloud_FormClosed(object sender, FormClosedEventArgs e) + { + if (cldCache != null) { cldCache.Clear(); cldCache = null; } + } + + private void txtFolderName_MouseClick(object sender, MouseEventArgs e) + { + if (string.IsNullOrEmpty(txtFolderName.Tag as string)) { txtFolderName.SelectAll(); txtFolderName.Tag = txtFolderName.SelectedText; } + + } + + private void txtFolderName_Leave(object sender, EventArgs e) + { + txtFolderName.Tag = null; + } + + private void lvCloud_Leave(object sender, EventArgs e) + { + cbPublic.Enabled = cbPublic.Focused; + } + + private void cbPublic_CheckedChanged(object sender, EventArgs e) + { + if (cbPublic.Focused && cbPublic.ThreeState == false) + { + if (working) return; + var lvis = lvCloud.SelectedItems; if (lvis.Count == 0) return; + var cb = sender as CheckBox; var state = cb.Checked; + var text = new string[lvis.Count]; + var albums = new Album[lvis.Count]; + for (int i = 0; i < text.Length; i++) + { + text[i] = lvis[i].Text; + albums[i] = new Album() { AtomEntry = lvis[i].Tag as AtomEntry }; + } + var prompt = string.Format("Are you sure to set \"{0}\" {1}?", string.Join(", ", text), state ? "public" : "private"); + working = true; + switch (state) + { + case true: + if (DialogResult.Yes == MessageBox.Show(prompt, "Share Album(s) in Picasa", MessageBoxButtons.YesNo, MessageBoxIcon.Information)) + { + foreach (var item in albums) + item.Access = "public"; + CloudStatus.Text = "Setting Album(s) public"; + } + else { cbPublic.Checked = false; working = false; return; } + break; + case false: + if (DialogResult.Yes == MessageBox.Show(prompt, "Protect Album(s) in Picasa", MessageBoxButtons.YesNo, MessageBoxIcon.Information)) + { + foreach (var item in albums) + item.Access = "private"; + CloudStatus.Text = "Setting Album(s) private"; + } + else { cbPublic.Checked = true; working = false; return; } + break; + } + cbPublic.Enabled = false; + new Thread(new ThreadStart(() => + { + for (var i = 0; i < albums.Length; i++) + { + var @new = albums[i].PicasaEntry.Update(); + Invoke(new Action(() => { lvis[i].ToolTipText = @new.AlternateUri.Content; lvis[i].Tag = @new; })); + + if (cldCache != null) + { + var cache = cldCache.Single(_ => _.ToolTipText == albums[i].AtomEntry.AlternateUri.Content); + cache.Tag = @new; cache.ToolTipText = @new.AlternateUri.Content; + } + } + Prompt = "Done"; cbPublic.cbEnable(true); working = false; + })).Start(); + } + } + + private void cbPublic_Leave(object sender, EventArgs e) + { + cbPublic.Enabled = false; + } + } +} diff --git a/Cloud.resx b/Cloud.resx index 0ccf1ee..45ca147 100644 --- a/Cloud.resx +++ b/Cloud.resx @@ -1,579 +1,579 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 118, 17 - - - - AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w - LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 - ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABM - HgAAAk1TRnQBSQFMAgEBAwEAAcABAgHAAQIBGAEAARgBAAT/ARkBAAj/AUIBTQE2BwABNgMAASgDAAFg - AwABGAMAAQEBAAEYBgABGxIASP8SAAP9BvYL9QH0AvUB9Bv1A/wG/wP5A/8D2ANNAz4DQwNCA0EDQgNB - BkMGQgM8Az8DRgN7Cf8D/kgAA/8B/AL9AfQC9jr0AfUB9gH7AvwSAAL0AfMBmAGSAY4BnwGZAZUBngGY - AZYBnAGXAZMBmgGVAZIBmgGVAZIBmgGVAZIBmgGUAZABmQGUAY8BoAGaAZcBoQGbAZkBmgGVAZEBmgGV - AZIBnQGXAZMBnwGZAZUBnwGYAZQC7AHrA/4D+wP/A6ABSQFGAUIB1gHTAc8B4gHfAdsB3gHbAdcB3QHb - AdoB3QHbAdoB3gHcAdsB3QHbAdoB3QHbAdoB3QHbAdoB3QHbAdoB3QHbAtoB1wHTAecB5AHgAdMB0AHM - Aa0BqgGmAxYG+wP/SAAD/wG8AdUB4wEwAWQBgQEvAVUBagEvAVYBawEvAVYBawEvAVYBawEvAVYBawEv - AVYBawEvAVYBawEvAVYBawEvAVYBawEvAVYBawEvAVYBawEvAVYBawEvAVYBawEvAVYBawEvAVYBawEv - AVYBawEvAVYBawEvAVYBawEvAVYBawEvAVcBbQG0AcIByRIAAfMB8gHxAVABQwE+AVUBTAFGAVYBTQFH - AVYBTQFHAVUBTQFHAVUBTQFHAVUBTAFGAWEBWQFUAZUBkAGMAaUBogGeAa0BqgGlAbEBqwGmAW8BZwFj - AVUBTAFGAVcBTgFHAW4BYQFbAe0B7AHrBv8D+wMGAesB6QHoAf0B+wH6Av8B/gH9AfsB+gL/Af4C/wH+ - Av8B/gL/Af4B/wH+Af0B/wH+Af0C/wH+Av8B/gL/Af4C/wH+Av8B/gHyAfAB7wOhA54D/gP/SAAD/wG5 - AdIB4gFyAbEB1gFyAcsB9AFlAb8B9AFlAb8B9AFlAb8B9AFlAb8B9AFlAb8B9AFlAcAB9AFlAcAB9AFl - AcAB9AFlAcAB9AFlAcAB9AFlAb8B9AFlAb8B9AFlAb8B9AFlAb8B9AFlAb8B9AFlAb8B9AFlAb8B9AFo - AcIB9AFMAZMBvgGuAbwBxAYAA/0B4AHfAeAD4gPsAeAB3QHcAVkBSwFEAV8BVgFQAWABVgFSAWABVgFR - AWABVwFRAV8BVgFQAXYBbwFqAagBpAGiAZoBlwGVAZ0BmwGYAbcBtQGyAdMB0QHPAcYBwQG9AX0BdQFw - AWEBVwFRAXQBZwFgAe0B7AHrA/8D+wP/AyoD8wb4A/ED9APzA/AD9An+Cf8D/AP+A9MDXgb/SAAD/wG6 - AdMB4wGxAc0B3gGTAewB/wF7AdwB/wF7AdsB/wF6AdkB/wF5AdgB/wF3AdYB/wF2AdQB/wF2AdMB/wF0 - AdIB/wF0AdEB/wFyAdAB/wFxAc4B/wFxAc0B/wFwAcwB/wFwAcwB/wFwAcwB/wFwAcwB/wFwAcwB/wFy - Ac8B/wFSAZsBxgGvAb0BxQYAA/gB6AHpAewBlQGiAbIBqQG0AcIBswGyAbMBYAFRAUoBaAFeAVgBaAFf - AVkBaAFfAVoBaAFfAVkBZQFbAVYBrAGmAaMBpQGjAaEBjQGKAYgBagFoAWUBdwF1AXMBzAHLAckBsgGv - AawBngGaAZUBagFgAVkBfAFuAWcB7QLrCf8BLgEsASsD8wP6A/gD8wPqA/YD8gb0A/UD+wP1A/sD/QP8 - A/8B2AHVAdEDYQH8Af4B/wP+SAAD/wG6AdMB4wGwAc0B3gGUAe4B/wGDAecB/wGDAeUB/wGBAeIB/wF/ - Ad8B/wF9AdwB/wF7AdoB/wF5AdcB/wF3AdUB/wF2AdMB/wF1AdEB/wFzAdAB/wFxAc4B/wFwAc0B/wFv - AcsB/wFvAcsB/wFvAcsB/wFvAcsB/wFxAc4B/wFSAZoBxQGvAb0BxQYAA/MB5AHlAekBIAFBAW8BBgE/ - AYwBKgFIAXIBaQFZAVABcQFoAWIBcQFoAWIBcQFoAWIBcAFnAWIBeAFvAWoBwAG9AboBpwGkAaIBUgFQ - AU4BRwE1ATMBUwE8ATgBUQFQAU4BqgGnAaMBnQGaAZcBfQF0AW8BgwF1AW0B7gHsAesJ/wEvAS0BLAP3 - A/gD9gbvA/ID8wPwA/ED9APqA+sD6AP7A/wD/wHaAdcB0wNhAfwB/gH/A/5IAAP/AboB0wHjAbABzQHe - AZcB8QH/AYUB6QH/AYUB5wH/AYQB5AH/AYEB4QH/AX8B3wH/AX0B3QH/AXsB2gH/AXkB2AH/AXcB1QH/ - AXYB1AH/AXQB0gH/AXMB0AH/AXIBzwH/AXABzQH/AW8BywH/AW8BywH/AW8BywH/AXEBzgH/AVIBmgHF - Aa8BvQHFBgAD7gHRAdUB3AEnAT0BYQEWAU4BnAEqAV0BpAFyAWIBWQF8AXIBbAF8AXIBbQF7AXIBbQF7 - AXEBbAGEAXwBdwG1AbIBrwG4AbUBsQFlAWMBYQFHATkBNwFPATwBOgFMAUsBSQGWAZMBkQGYAZYBkwGJ - AYABewGLAX4BdgHuAe0B7Ab/A/4BLwEtASwG+wPwA+YD6wP0A+0D8wPpA+MD5gPtA/AD/gP/A/gB3AHZ - AdUDYQH8Af4B/wP+SAAD/wG6AdMB4wGwAc0B3gGZAfQB/wGHAewB/wGHAekB/wGGAeYB/wGDAeQB/wGB - AeEB/wF/Ad8B/wF9AdwB/wF7AdoB/wF5AdgB/wF4AdYB/wF2AdQB/wF0AdIB/wFzAdEB/wFyAc8B/wFx - Ac0B/wFwAcwB/wFvAcsB/wFxAc4B/wFSAZoBxQGvAb0BxQMAA/8D7AGvAbMBuwEoATYBUAEoAUcBeAE3 - AV0BmQF8AW0BZAGHAX0BdwGFAXwBdwGFAXwBdwGFAXwBdwGGAX0BeQGvAasBpwG9AboBtgHfAd4B3QF/ - AX0BewFlAWIBYAGUAZIBjwGKAYgBhQGcAZkBlQGMAYIBfQGSAYUBfgHuAe0B7AH/Av4D/wP+ATABLgEt - A/cD/APrA+MD5wPpA+gD/gb/A/kD/gP/A/wD+gP9Ad0B2gHWA2AB/AH+Af8D/kgAA/8BugHTAeMBsAHN - Ad4BmwH2Af8BigHuAf8BigHsAf8BhwHpAf8BhQHnAf8BgwHkAf8BggHhAf8BfwHfAf8BfQHdAf8BewHa - Af8BeQHYAf8BdwHWAf8BdgHUAf8BdQHRAf8BcwHPAf8BcgHOAf8BcAHNAf8BbwHMAf8BcQHOAf8BUgGa - AcUBrwG9AcUDAAP+AewB6wHqAXsBiwG0ARsBNAF1ASUBQQF/AUcBVAF6AYYBdgFuAZEBhwGCAY8BhgGB - AY8BhgGBAY8BhQGBAY4BhAF/AbUBrgGpAdoB2AHUA9UB7AHqAecByAHGAcMBigGIAYYBgwGBAX4BngGX - AZQBlwGMAYYBnAGNAYcB7gHtAewD/wT+Af8B/QEsAS0BKwHzAfQB8gH7AfwB+gHmAecB5QHcAd0B2wPc - A+UD3wPiAeUB5gHkAeAB4QHfAeoB6wHpAeIB4wHhA+QD2wP+A/kB3QHbAdoDYgP/Af0C/0gAA/8BugHT - AeMBsAHNAd4BnAH3Af8BjAHxAf8BjAHvAf8BigHsAf8BhwHqAf8BhQHoAf8BhAHlAf8BggHiAf8BgAHg - Af8BfQHdAf8BfAHbAf8BegHZAf8BeAHWAf8BdgHUAf8BdAHSAf8BcwHQAf8BcgHOAf8BcAHMAf8BcQHO - Af8BUgGaAcUBrwG9AcUDAAP8AegB5wHoAUMBeAHeAQQBSgHVAQcBVgHnATwBaQG2AZABgAF1AZoBkAGL - AZcBjwGJAZYBjQGIAZgBkAGIAZcBjwGHAZwBlAGOAdEBzQHKAegB5QHjAbUBsgGsAY0BiQGGAXwBeQF2 - AZMBjQGKAZkBkAGMAVgBUgFlAZEBhQGDAe8C7QP/A/4B/QH+AfwBLQEuASwB9gH3AfUB/AH9AfsB4QHi - AeAB1QHWAdQD4QPeA9UE0wHUAdIB3QHeAdwB0QHSAdAB2gHbAdkB2AHZAdcB1AHVAdMB7QHuAewB+gH7 - AfkB3gHcAdsDYgP/Af0C/0gAA/8BugHTAeMBsAHNAd4BnQH5Af8BjgHzAf8BjgHxAf8BjAHuAf8BiQHs - Af8BhwHqAf8BhgHnAf8BhAHkAf8BggHiAf8BgAHfAf8BfgHdAf8BfAHbAf8BeQHYAf8BeAHWAf8BdgHU - Af8BdQHSAf8BdAHQAf8BcgHOAf8BcQHOAf8BUgGaAcUBrwG9AcUDAAP6AeAB5QHqASEBegH1AQkBdAH5 - AQwBhAH9AUQBhwG+AaABjgGDAaoBoAGaAakBoAGbAagBnQGVAa8BowGYAa0BowGWAaYBmgGRAa0BogGc - Ab4BtAGuAbsBsQGrAa0BpQGgAakBoAGcAasBoQGbAakBoAGbAXcBcQF+AaABlAGSAe8B7gHtA/8D/gH9 - Af4B/AEuAS8BLQH8Af0C+wH8AfoB2AHZAdcBzQHOAcwD2gPOA9MD0QHXAdgB1gHbAdwB2gHSAdMB0QHZ - AdoB2AHlAeMB4gH+AfwB+wH8AfoB+QH+AfwB+wHeAdwB2wNiA/8B/QL/SAAD/wG6AdMB4wGwAc0B3gGg - AfsB/wGPAfYB/wGPAfQB/wGOAfEB/wGMAe8B/wGKAewB/wGIAeoB/wGGAegB/wGEAeUB/wGBAeIB/wF/ - AeAB/wF+Ad4B/wF8AdsB/wF6AdkB/wF4AdcB/wF3AdQB/wF1AdIB/wFzAdAB/wFxAc4B/wFSAZoBxQGv - Ab0BxQMAA/gB1QHhAe4BEQF4AfkBGwGIAf0BHAGYAf8BOwGeAd0BoAGmAawBzQHIAcMBsAGqAaMBrwLH - Aa0B2AHbAawB2AHaAasB0QHZAawB2AHaAasB0wHbAawB0wHcAasBvwHHAaoBsQG2AasBuwHRAcsCygHN - AcoByAHOAcoByAH3AvYG/wH8Af0B+wEvATABLgH1AfYB9AH6AfsB+QHSAdMC0QHSAdADzwPQA70DxAHR - AdIB0AHHAcgBxgHZAdoB2AHfAeAB3gHOAcwBywH8AfoB+QH3AfUB9AHzAfEB8AHeAdwB2wNiA/8B/QL/ - SAAD/wG6AdMB4wGwAc0B3gGiAf4B/wGRAfgB/wGRAfYB/wGQAfQB/wGOAfEB/wGMAe8B/wGLAe0B/wGI - AeoB/wGGAegB/wGEAeUB/wGCAeMB/wGAAeAB/wF+Ad4B/wF8AdsB/wF6AdkB/wF5AdcB/wF2AdQB/wF0 - AdIB/wFxAc8B/wFSAZoBxQGvAb0BxQMAAfYC9QHEAdcB8AEYAXYB9AEqAY0B/QEyAZ8B/wEzAbUB/wEm - AY4BvgEoAV0BgAElAYwBwAEpAcsB6wEvAeUB+gEsAeEB+gESAZkB4AEVAZ0B2wEXAaQB9AEkAbAB5AEa - AVUBcwEbAXUBxQEWAXsB9gEYAWkB5wGlAcMB8QHtAewB6wMACf4DLQH6AfgB9wH8AfoB+QHPAc0BzAHE - AcIBwQHPAc0BzAG/Ab0BvAHOAcwBywG6AbgBtwHCAcABvwHDAcEBwAHKAcgBxwHGAcQBwwG9Ab4BvAHI - AckBxwH5AfcB9gH3AfUB9AHaAdgB1wFhAV8BXgP+A/9IAAP/AboB0wHjAbABzQHeAaMC/wGTAfoB/wGT - AfgB/wGSAfYB/wGQAfQB/wGOAfIB/wGNAe8B/wGKAe0B/wGIAeoB/wGGAegB/wGEAeUB/wGCAeMB/wGA - AeAB/wF+Ad0B/wF8AdsB/wF6AdkB/wF4AdYB/wF2AdQB/wFxAc8B/wFSAZkBxQGvAb0BxQMAA/IBsAHE - AeYBKAFsAdcBLwGBAe4BMAGRAfsBOwGsAf8BNwHDAfcBIAGKAaoBBgEyAV8BEQF2AbEBLAHXAfUBMwHv - Af8BDAFgAZoBCQFWAZgBFwGfAfYBGwFqAZgBGQFjAaABHQGVAf8BGQGHAf4BEAFyAfwB0AHkAfwC8gHx - AwAD/wb+Ay4B9wH1AfQB9gH0AfMBwQG/Ab4BzQHLAcoBugG4AbcBvgG8AbsBwgHAAb8BswGxAbABzgHM - AcsByQHHAcYBtAGyAbEBuQG3AbYBwQHCAcABsQGvAa4B7QHpAegB8gHtAeoB0gHPAcsBYAFeAV0D/wP+ - SAAD/wG6AdMB4wGwAc4B3gGlAv8BlAH7Af8BlQH5Af8BkwH4Af8BkgH2Af8BkAH0Af8BjgHxAf8BjQHv - Af8BigHtAf8BiQHrAf8BhgHoAf8BhAHmAf8BggHjAf8BgQHgAf8BfwHeAf8BfQHbAf8BegHZAf8BeQHX - Af8BcQHPAf8BUgGZAcUBrwG9AcUDAAPsAZUBswHnASoBcwHkATYBgAHrATYBigH1ATEBmgH8AS4BswH+ - AS4BywH/AR0BgwGoAQcBKAFLAREBdwHFASEBuQH8AQoBVgGZAQkBWwGnARIBdAG4ARkBSAFiATUBrwHs - ASUBlwH/ARABXgHpASkBUAG8AekB6gHuA/kDAAP/Bv4DLgH5AfcB9gHyAfAB7wHAAb4BvQHBAb8BvgGj - AaEBoAG5AbcBtgG6AbgBtwG1AbMBsgG1AbMBsgGqAagBpwG8AboBuQG1AbMBsgGoAaYBpQHBAb0BvAHw - AesB6AHhAdsB1gHDAbwBswFjAWABXAH9Av8D/UgAA/8BugHTAeMBsAHOAd4BpQL/AZUB/QH/AZUB+wH/ - AZQB+gH/AZIB+AH/AZAB9gH/AY8B9AH/AY0B8gH/AYsB8AH/AYoB7QH/AYgB6gH/AYYB6AH/AYQB5QH/ - AYEB4gH/AX8B4AH/AX0B3gH/AXwB2wH/AXkB2AH/AXEBzwH/AVIBmgHGAa8BvQHFAwAC5gHnAX0BnAHX - ATEBawHPAUABbgHHATwBdwHYASsBiQHxASkBmwH1ASgBpgH7ASgBrwH+ARwBawGhAREBRQF0AR8BhQHL - ARgBYgGlARABTQGRARIBJQE8ASgBfgHEAScBiwHoARwBXgGxARcBQAF+AVgBbQGPAesC6QP+AwAD/wP+ - A/0DLwH1AfMB8gHzAfEB8AHCAcABvwGpAacBpgGiAaABnwGzAbEBsAGgAZ4BnQGqAagBpwGyAbABrwHK - AcgBxwGxAa8BrgG2AbQBswGxAa8BrgGzAa8BrgHdAdcB0gHKAcIBuwGnAZ4BlAFmAWMBXwH9Av8D/kgA - A/8BugHTAeMBsQHPAd8BqwL/AZwB/gH/AZ0B/gH/AZwB/AH/AZsB/AH/AZkB+gH/AZcB9wH/AZYB9gH/ - AZQB9AH/AZMB8gH/AZEB7gH/AZAB7gH/AY4B6wH/AYwB6AH/AYoB5QH/AYkB5AH/AYYB4QH/AYUB4AH/ - AYEB2wH/AVABlgHAAa4BvAHEAwAB3wHgAeMBYAGHAckBJAFLAZMBOQFaAZ4BOAFlAbkBNQFiAacBKwFq - AbYBKAFwAcQBJgF0Ac8BJQF0Ac4BHAFCAW4BFwEwAUYBGQEyAU8BFgEhASwBGgEuAUwBHwFdAbABGQFG - AYEBFgEqAUoBFwEbASIBhAGKAZMC6AHnBgAG/gP9AzAB+AH2AfUB8AHuAe0BxgHEAcMBrgGsAasBpQGj - AaIBvwG9AbwBpgGkAaMBrQGrAaoBpgGkAaMD6gHwAe4B7QHZAdUB0AHRAcwByQHjAd8B2gHRAcsBxAHT - Ac0BwgGVAY4BhQFlAWEBYAH9Av8D/UgAA/8BuAHSAeIBrgHMAd0B8AH5AfwB7wH4AfwB7wH4AfwB7wH4 - AfwB7wH4AfwB7wH5AfwB7wH5AfwB7wH5AfwB7wH5AfwB8AH5AfwB6wH4AfwB4gHxAfYB4gHxAfcB4gHx - AfcB4gHwAfcB4gHwAfcB4gHwAfcB4gHwAfYB1AHmAe0BLAFWAWsBsgHAAcYDAAHWAdgB2gFLAVsBdgEW - ASgBRQEiAS0BQgEkAToBZAEpATQBSwEiATQBUAEkAToBXQEiATQBUgEaASwBSQEXASIBMwEfASoBPgEb - AR4BJAIYARcBGQEaAR0BGQEfASoBFAEXARgBFAEdASYBHQE8AWYBpgG8AdsC7wHuBgAG/gP9AzAB8wHx - AfAB7gHsAesBkgGQAY8BrwGtAawBogGgAZ8BkwGRAZABqwGpAagBpQGjAaIBpwGlAaQBogGeAZ0B6wHo - AeQB4gHeAdkB6AHlAeEB5QHiAd4B4AHeAd0B5AHlAeMBEwEUARIB7wLxAfwC/gL/Af5IAAP/AdAB4QHs - AXEBpgHHAYoBzQHkAY8B0wHoAY0B0gHoAYsBzwHoAYkBzQHoAYYByQHoAYQBxgHoAYEBwwHoAYEBwgHp - AXoBuQHeAWwBmwG5AX0BqQHFAYABqwHHAYABqwHHAYABrAHHAYABrAHHAYABrAHHAX8BqwHGAX4BqgHG - AasBzQHeAfoC/AP+Ac8B0AHUAUwBUQFkAR8BJAEwARoBHAEjAR4BIAEmAR0BIgEsARgBHwEmARUBGwEg - ARcBHAEhARYBGwEeARUBGgEcARYBGwEdARcBGQEbARcBGAEZAxcBIAEoATUBOAFZAZABMwFzAcgBPgGF - Ad8BxQHWAewD+QYAA/8D/gP9AzEB+AH1AfEB7gHrAecBgAF9AXkBvwG8AbgBxgHDAb8B1gHTAc8BxQHC - Ab4BywHIAcQB0QHNAcwBqAGjAaAB1QHRAcwB+gH3AfMB6gHhAd4B6wPjAd4B3wELAQoBDAP/AfoF/AP3 - SAAD/wH8Af0B/gHIAdsB5wFiAbABzAGRAfQB+AGdAfwB/gGYAfgB/gGSAfEB/gGLAegB/gGFAeAB/gF7 - AdcB/gFqAcQB8wFFAX0BnQHCAc0B0wH2AfkB+gH4AfsB/AH4AfsB/AH4AfsB/AH4AfsB/AH4AfsB/AH4 - AfoB/AH4AfsB/AH9Af4E/wP6Ad0B3gHiAZ4BogGxAXwBgQGVAWABZQF9AVIBWQF5AUUBUwF/ATUBSwF4 - AR0BKwFAARMBHAEjARkBIwEuARQBGwEfARQBGQEbARUCGQEWARgBGQEcAR8BJQEiASgBNAE3AUsBcwE/ - AV4BmQFgAYABuQHWAdoB4gP+BgAD/wP+A/0DMQHxAe4B6gHpAeYB4gHqAecB4wHoAeUB4QHoAeUB4QHk - AeEB3QHpAeYB4gHqAecC4wHgAdwB3wHZAdQByAHCAbsB9wH0AfAB4AHeAd0B6AHmAeUBFwIZAfcB/AH7 - Bv8B/QL7Af8B/gH/SAAJ/wHhAegB7gF9AbIBzQHeAe8B9AHjAfIB9wHjAfEB9wHiAfAB9wHiAfAB9wHb - AesB8gF1AZIBoQHbAeEB4iH/A/4D9gHxAvAC7wTuAuYB6gHUAdUB3gG+AcQB2gGQAZ0BtgFZAWYBegE3 - AUUBWAEXAR0BIwEKAQ0BDgETARgBIQEXARsBJQEnATABRwEaAR0BIwEgAScBMgErATcBUAFvAXoBlQLi - AeMJAAn/AyoB9QHyAe4B7AHpAeUB3wHcAdgB5AHhAd0B5gHhAd4B5QHgAd0B5AHfAdwB3wHaAdcB5QLd - Ac8BxwHAAawBpAGdAfgB9QHxA9kDFwP+A/0M/0gADP8BzAHcAecBgAGrAcYBgAGrAccBgAGrAccBgAGs - AccBgAGsAccBgQGrAccBygHaAeUk/wwAA/4D+wH4AvcC9AHzAvIB8QPuAuMB5APVAr8BwAKeAaADegFe - AWABZAFbAWIBdAE8AUABSAEqATABOAF7AX8BhgPqCQAG/wP8AykB5QHjAeIB9gH0AfMB8AHuAe0B8wHx - AfAB7wHrAeoB7wHrAeoB7QHpAegB5QHhAeAB2wHWAdMB0QHFAbkBogGXAYkB3AHaAdkDEgP/BvsM/0gA - DP8B/QL+AfgB+wH8AfgB+wH8AfgB+wH8AfgB+wH8AfgB+wH8AfgB+wH8Af0C/iT/GwAD/gP9A/sD+AP2 - A/ED6gLlAeYB1wLZAb8BwQHCA84D8wkAA/wD+wP/A/YDFQM9A1IDTAFSAlABUQNPAk0BSgJIAUEBPwE+ - ATwBNgEvATQBLgEnAxMG/wP2D/9IAEj/NgAD/wP7A/4JAAP+Cf8B/gH9Af8B+gH5AfsB8wHyAvQB8wH1 - A/YG9AT1AfYB9AHtAfAB9AHwAfQB+Qb+Ff9IAAFCAU0BPgcAAT4DAAEoAwABYAMAARgDAAEBAQABAQUA - ASABARYAA/8EAAH8CwAB/AsAAfwLAAHACwABwAsAAcALAAHACwABgAsAAYALAAGACwABgAsAAYALAAGA - AQABAQkAAYABAAEBCQABgAEAAQEJAAGAAQABAQkAAYABAAEDCQABgAEAAQMLAAEDCwABAwsAAQcJAAHw - AQABBwkAAf8BgAEHCQAC/wHHBgAL - - - - 17, 17 - - - 231, 17 - - - - - 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 - 4121R+fzOwAAAABJRU5ErkJggg== - - - - - R0lGODlhMgAyAIcAAAAAAP////Lx8vHw8fDv8O3s7erp6ufm59fW17y7vO3t7unp6u7v7+zt7evs7Orr - 6+fo6OXm5uDh4dbX17u8vLi5uRpsIFqKXluLXx1vH+/w7+zt7CF0HyZ5Hit/HTGGHICyc4a4eTiNGz6U - GkWbGEuiF3ywXpXId1KpFvL67F22FFiwFWK7E5jNaN7yzO3442bAE6PabqTacKXbcabcdKfcdKvde63f - fbfijrrjk7vjlMfop83rsc/stNPtutXuvtfvwNzxyJjWVpnXWKTabqveeLThg8vprNPtudzxxtzxx9vw - xun22+n23K7gcrnkie735I7UOKngUr/og9DwlMHsa932oeT4tNf2gun6uev9p/Pz8unp6Ojo5+fn5rq6 - ubi4t+7t7erp6f7+/v39/fz8/Pv7+/r6+vn5+fj4+Pf39/b29vX19fT09PPz8/Ly8vHx8fDw8O/v7+7u - 7u3t7ezs7Ovr6+rq6unp6ejo6Ofn5+bm5uXl5eTk5OPj4+Li4uHh4eDg4N/f397e3t3d3dzc3Nvb29ra - 2tnZ2djY2NfX19bW1tXV1dPT09HR0dDQ0M/Pz83NzczMzMvLy8rKysnJycjIyMfHx8bGxsXFxcTExMPD - w8LCwsHBwcDAwL+/v76+vr29vby8vLu7u7q6urm5ubi4uLe3t7a2trW1tbS0tLOzs7KysrGxsbCwsK+v - r66urq2traysrKurq6qqqqmpqaioqKenp6ampqSkpKOjo6GhoZ+fn56enp2dnZubm5qampmZmZiYmJeX - l5WVlZOTk5KSkpGRkZCQkI6OjoyMjIuLi4mJiYeHh4aGhoSEhIKCgoGBgYCAgH5+fnx8fHl5eXd3d3Z2 - dnNzc3FxcW9vb25ubmtra2lpaWdnZ2ZmZmRkZGFhYV9fX15eXlxcXFpaWlhYWFdXV1ZWVlRUVFJSUlFR - UVBQUE5OTkxMTEtLS0lJSUhISP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - ACH/C05FVFNDQVBFMi4wAwEBAAAh+QQBAADyACwAAAAAMgAyAAAI/wADCBxIsKDBgwgTKlzIsKHDgZJs - SZxIsaLFUw8Z3spYpo2eXAEsqcqoEFcAOnTq1LFzRwyePHn0yNwTAZCiS70EZnJFEiHIMBtWPrhz52UX - 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 - jJTX0mHZpQAAAABJRU5ErkJggg== - - - - - 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 - PeBU/PCashAsBH//2Q== - - - - - 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 - np46WJsMQs0bFexxtiaGN2Bf/9k= - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m - dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAASESURBVFhHxdVpTFRXFAdwra12D03VNnVJWyNlKxSM - EAQhRWWRKK0IFNkR2a2Uth9arX5oa0NZBddEQUEW2Rtlhw7LVJgZJKN2yg6FYWoZ1FkgwBDNv+cOMGnj - i11MXk/yy82cufee8+6beW8JgP8VZ5JPnEk+cSb5xJnkE2eST5xJPnEm+cSZ5BPfsXyfvz9CQkIQGhrK - qi+fT//3WNqabL5TmGx6VpxuIpekGWORKNVkVJRmLO1IWn+l4oerDVerG1FV24g2oRAisQSSzhusgVfm - t/nnwQp6LhQcFadtRE/hh1C0HIG2twiY6iYy8gs0PQWY7CvEuCARZdeaMTM7B51uDvUNDYiJPYiPDyWy - BlbPb/v3seynFPPjknQTfcGx5i+h7ckHJm/h4V0h5uQlmO3LwpT0CKYkCZiWfYfp7lTMDWUDY5dRVF4P - lWYSWq0WZeWVjzTwTGemlbrzhBkkGSboSDWVXk81K2YFBUnm7pVHTazF6Wby/vIA6BR1eDghgG6kADPd - aZi68TmmRLGYEsdhUhw/T7QoTv+dTrIfBaV1UE7cw/1795Gbl4fIqDjEH0wwNGAky3ECNGI8UDZD050D - ZftxyJsS0FvsjZ/P2+N2jjOgaoeu/yQm28Mw2RFBBSKpYBSJpquOoTEG2o4oaNojDbTtEZgRBSGvuAaK - O+MYH5/AmdNnEXEgCtEx8YYGVt88txm/13phuouO7+Zh/dXphnPxQFGJuXEBbmdvR1/+Nigb9pC9GC5x - x3CpB2QXtkCW7UA/OHO0J5tSwVCohcEGGmEgpq/74FJRNUZGFRhT3MH3ySkICz9ApxBtaODVU3EbvhWm - WNyVnrHBSNkOqFv2QNPmPT+2stEbXVnWEGe8SywhPWUD6WkbdJ+3Q+9Fe8grXPHbNU9a8xFUrb5QtfhC - TaOmzQczwl24WFiFgaERakKOo8eOISg4jJqINDTwPNlAHEJ3vBZX/pVpq+SEJfryHKGs9YCmeTfxgrLG - A8MFjhjI2wJFmQuUVW64/+NuqJs/IF5QC7ygEtBnZmHNRK07FCW2yKEGevqGMDj0KxI++RQBgcEICQ03 - NPAUeY6sJG8RG+KSnWhcJMqwmpVdsIW83BkagRttTprcoGIaXf9C3eSKibrt+rm91GTXSf2JzVw6tLaU - NSDr7sfA4DD2R0TCzz8Q+wKCDA0sxlLCnkwvkzeIBXH6zHvtYUGS5VAXHftQoT2U1Y5Q1W81GCt3wMBl - O9w6twmdmdao+dpC+k3Im0nrVq3YReu3EoeUrJy23PxiXCmpwF4fPz1fP/9HGvhzLCMvEDZhI7Fds3KF - Z9EXplWdWTb0z9ik15lpA2puMDvxnUKX94yCaN77ZDMxJmsIO9XXiSVxJu7h4eGIjo5GbGzMYxtYDHYq - zxIjso5YESeybQEraE/Yaa0nbEM2l61ht5bF0+Qlsoq8TewIW8tu9b96FLONXiTsqlghhm3KNmGnxb5n - DT8u2C1m89laNj7xy+jJg+sdzSfOJJ84k3ziTPKJM8knziSfOJN84kzyB0v+AEH5SnYmyAQbAAAAAElF - TkSuQmCC - - - - 323, 17 - - - 49 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 118, 17 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABM + HgAAAk1TRnQBSQFMAgEBAwEAAcABAgHAAQIBGAEAARgBAAT/ARkBAAj/AUIBTQE2BwABNgMAASgDAAFg + AwABGAMAAQEBAAEYBgABGxIASP8SAAP9BvYL9QH0AvUB9Bv1A/wG/wP5A/8D2ANNAz4DQwNCA0EDQgNB + BkMGQgM8Az8DRgN7Cf8D/kgAA/8B/AL9AfQC9jr0AfUB9gH7AvwSAAL0AfMBmAGSAY4BnwGZAZUBngGY + AZYBnAGXAZMBmgGVAZIBmgGVAZIBmgGVAZIBmgGUAZABmQGUAY8BoAGaAZcBoQGbAZkBmgGVAZEBmgGV + AZIBnQGXAZMBnwGZAZUBnwGYAZQC7AHrA/4D+wP/A6ABSQFGAUIB1gHTAc8B4gHfAdsB3gHbAdcB3QHb + AdoB3QHbAdoB3gHcAdsB3QHbAdoB3QHbAdoB3QHbAdoB3QHbAdoB3QHbAtoB1wHTAecB5AHgAdMB0AHM + Aa0BqgGmAxYG+wP/SAAD/wG8AdUB4wEwAWQBgQEvAVUBagEvAVYBawEvAVYBawEvAVYBawEvAVYBawEv + AVYBawEvAVYBawEvAVYBawEvAVYBawEvAVYBawEvAVYBawEvAVYBawEvAVYBawEvAVYBawEvAVYBawEv + AVYBawEvAVYBawEvAVYBawEvAVYBawEvAVcBbQG0AcIByRIAAfMB8gHxAVABQwE+AVUBTAFGAVYBTQFH + AVYBTQFHAVUBTQFHAVUBTQFHAVUBTAFGAWEBWQFUAZUBkAGMAaUBogGeAa0BqgGlAbEBqwGmAW8BZwFj + AVUBTAFGAVcBTgFHAW4BYQFbAe0B7AHrBv8D+wMGAesB6QHoAf0B+wH6Av8B/gH9AfsB+gL/Af4C/wH+ + Av8B/gL/Af4B/wH+Af0B/wH+Af0C/wH+Av8B/gL/Af4C/wH+Av8B/gHyAfAB7wOhA54D/gP/SAAD/wG5 + AdIB4gFyAbEB1gFyAcsB9AFlAb8B9AFlAb8B9AFlAb8B9AFlAb8B9AFlAb8B9AFlAcAB9AFlAcAB9AFl + AcAB9AFlAcAB9AFlAcAB9AFlAb8B9AFlAb8B9AFlAb8B9AFlAb8B9AFlAb8B9AFlAb8B9AFlAb8B9AFo + AcIB9AFMAZMBvgGuAbwBxAYAA/0B4AHfAeAD4gPsAeAB3QHcAVkBSwFEAV8BVgFQAWABVgFSAWABVgFR + AWABVwFRAV8BVgFQAXYBbwFqAagBpAGiAZoBlwGVAZ0BmwGYAbcBtQGyAdMB0QHPAcYBwQG9AX0BdQFw + AWEBVwFRAXQBZwFgAe0B7AHrA/8D+wP/AyoD8wb4A/ED9APzA/AD9An+Cf8D/AP+A9MDXgb/SAAD/wG6 + AdMB4wGxAc0B3gGTAewB/wF7AdwB/wF7AdsB/wF6AdkB/wF5AdgB/wF3AdYB/wF2AdQB/wF2AdMB/wF0 + AdIB/wF0AdEB/wFyAdAB/wFxAc4B/wFxAc0B/wFwAcwB/wFwAcwB/wFwAcwB/wFwAcwB/wFwAcwB/wFy + Ac8B/wFSAZsBxgGvAb0BxQYAA/gB6AHpAewBlQGiAbIBqQG0AcIBswGyAbMBYAFRAUoBaAFeAVgBaAFf + AVkBaAFfAVoBaAFfAVkBZQFbAVYBrAGmAaMBpQGjAaEBjQGKAYgBagFoAWUBdwF1AXMBzAHLAckBsgGv + AawBngGaAZUBagFgAVkBfAFuAWcB7QLrCf8BLgEsASsD8wP6A/gD8wPqA/YD8gb0A/UD+wP1A/sD/QP8 + A/8B2AHVAdEDYQH8Af4B/wP+SAAD/wG6AdMB4wGwAc0B3gGUAe4B/wGDAecB/wGDAeUB/wGBAeIB/wF/ + Ad8B/wF9AdwB/wF7AdoB/wF5AdcB/wF3AdUB/wF2AdMB/wF1AdEB/wFzAdAB/wFxAc4B/wFwAc0B/wFv + AcsB/wFvAcsB/wFvAcsB/wFvAcsB/wFxAc4B/wFSAZoBxQGvAb0BxQYAA/MB5AHlAekBIAFBAW8BBgE/ + AYwBKgFIAXIBaQFZAVABcQFoAWIBcQFoAWIBcQFoAWIBcAFnAWIBeAFvAWoBwAG9AboBpwGkAaIBUgFQ + AU4BRwE1ATMBUwE8ATgBUQFQAU4BqgGnAaMBnQGaAZcBfQF0AW8BgwF1AW0B7gHsAesJ/wEvAS0BLAP3 + A/gD9gbvA/ID8wPwA/ED9APqA+sD6AP7A/wD/wHaAdcB0wNhAfwB/gH/A/5IAAP/AboB0wHjAbABzQHe + AZcB8QH/AYUB6QH/AYUB5wH/AYQB5AH/AYEB4QH/AX8B3wH/AX0B3QH/AXsB2gH/AXkB2AH/AXcB1QH/ + AXYB1AH/AXQB0gH/AXMB0AH/AXIBzwH/AXABzQH/AW8BywH/AW8BywH/AW8BywH/AXEBzgH/AVIBmgHF + Aa8BvQHFBgAD7gHRAdUB3AEnAT0BYQEWAU4BnAEqAV0BpAFyAWIBWQF8AXIBbAF8AXIBbQF7AXIBbQF7 + AXEBbAGEAXwBdwG1AbIBrwG4AbUBsQFlAWMBYQFHATkBNwFPATwBOgFMAUsBSQGWAZMBkQGYAZYBkwGJ + AYABewGLAX4BdgHuAe0B7Ab/A/4BLwEtASwG+wPwA+YD6wP0A+0D8wPpA+MD5gPtA/AD/gP/A/gB3AHZ + AdUDYQH8Af4B/wP+SAAD/wG6AdMB4wGwAc0B3gGZAfQB/wGHAewB/wGHAekB/wGGAeYB/wGDAeQB/wGB + AeEB/wF/Ad8B/wF9AdwB/wF7AdoB/wF5AdgB/wF4AdYB/wF2AdQB/wF0AdIB/wFzAdEB/wFyAc8B/wFx + Ac0B/wFwAcwB/wFvAcsB/wFxAc4B/wFSAZoBxQGvAb0BxQMAA/8D7AGvAbMBuwEoATYBUAEoAUcBeAE3 + AV0BmQF8AW0BZAGHAX0BdwGFAXwBdwGFAXwBdwGFAXwBdwGGAX0BeQGvAasBpwG9AboBtgHfAd4B3QF/ + AX0BewFlAWIBYAGUAZIBjwGKAYgBhQGcAZkBlQGMAYIBfQGSAYUBfgHuAe0B7AH/Av4D/wP+ATABLgEt + A/cD/APrA+MD5wPpA+gD/gb/A/kD/gP/A/wD+gP9Ad0B2gHWA2AB/AH+Af8D/kgAA/8BugHTAeMBsAHN + Ad4BmwH2Af8BigHuAf8BigHsAf8BhwHpAf8BhQHnAf8BgwHkAf8BggHhAf8BfwHfAf8BfQHdAf8BewHa + Af8BeQHYAf8BdwHWAf8BdgHUAf8BdQHRAf8BcwHPAf8BcgHOAf8BcAHNAf8BbwHMAf8BcQHOAf8BUgGa + AcUBrwG9AcUDAAP+AewB6wHqAXsBiwG0ARsBNAF1ASUBQQF/AUcBVAF6AYYBdgFuAZEBhwGCAY8BhgGB + AY8BhgGBAY8BhQGBAY4BhAF/AbUBrgGpAdoB2AHUA9UB7AHqAecByAHGAcMBigGIAYYBgwGBAX4BngGX + AZQBlwGMAYYBnAGNAYcB7gHtAewD/wT+Af8B/QEsAS0BKwHzAfQB8gH7AfwB+gHmAecB5QHcAd0B2wPc + A+UD3wPiAeUB5gHkAeAB4QHfAeoB6wHpAeIB4wHhA+QD2wP+A/kB3QHbAdoDYgP/Af0C/0gAA/8BugHT + AeMBsAHNAd4BnAH3Af8BjAHxAf8BjAHvAf8BigHsAf8BhwHqAf8BhQHoAf8BhAHlAf8BggHiAf8BgAHg + Af8BfQHdAf8BfAHbAf8BegHZAf8BeAHWAf8BdgHUAf8BdAHSAf8BcwHQAf8BcgHOAf8BcAHMAf8BcQHO + Af8BUgGaAcUBrwG9AcUDAAP8AegB5wHoAUMBeAHeAQQBSgHVAQcBVgHnATwBaQG2AZABgAF1AZoBkAGL + AZcBjwGJAZYBjQGIAZgBkAGIAZcBjwGHAZwBlAGOAdEBzQHKAegB5QHjAbUBsgGsAY0BiQGGAXwBeQF2 + AZMBjQGKAZkBkAGMAVgBUgFlAZEBhQGDAe8C7QP/A/4B/QH+AfwBLQEuASwB9gH3AfUB/AH9AfsB4QHi + AeAB1QHWAdQD4QPeA9UE0wHUAdIB3QHeAdwB0QHSAdAB2gHbAdkB2AHZAdcB1AHVAdMB7QHuAewB+gH7 + AfkB3gHcAdsDYgP/Af0C/0gAA/8BugHTAeMBsAHNAd4BnQH5Af8BjgHzAf8BjgHxAf8BjAHuAf8BiQHs + Af8BhwHqAf8BhgHnAf8BhAHkAf8BggHiAf8BgAHfAf8BfgHdAf8BfAHbAf8BeQHYAf8BeAHWAf8BdgHU + Af8BdQHSAf8BdAHQAf8BcgHOAf8BcQHOAf8BUgGaAcUBrwG9AcUDAAP6AeAB5QHqASEBegH1AQkBdAH5 + AQwBhAH9AUQBhwG+AaABjgGDAaoBoAGaAakBoAGbAagBnQGVAa8BowGYAa0BowGWAaYBmgGRAa0BogGc + Ab4BtAGuAbsBsQGrAa0BpQGgAakBoAGcAasBoQGbAakBoAGbAXcBcQF+AaABlAGSAe8B7gHtA/8D/gH9 + Af4B/AEuAS8BLQH8Af0C+wH8AfoB2AHZAdcBzQHOAcwD2gPOA9MD0QHXAdgB1gHbAdwB2gHSAdMB0QHZ + AdoB2AHlAeMB4gH+AfwB+wH8AfoB+QH+AfwB+wHeAdwB2wNiA/8B/QL/SAAD/wG6AdMB4wGwAc0B3gGg + AfsB/wGPAfYB/wGPAfQB/wGOAfEB/wGMAe8B/wGKAewB/wGIAeoB/wGGAegB/wGEAeUB/wGBAeIB/wF/ + AeAB/wF+Ad4B/wF8AdsB/wF6AdkB/wF4AdcB/wF3AdQB/wF1AdIB/wFzAdAB/wFxAc4B/wFSAZoBxQGv + Ab0BxQMAA/gB1QHhAe4BEQF4AfkBGwGIAf0BHAGYAf8BOwGeAd0BoAGmAawBzQHIAcMBsAGqAaMBrwLH + Aa0B2AHbAawB2AHaAasB0QHZAawB2AHaAasB0wHbAawB0wHcAasBvwHHAaoBsQG2AasBuwHRAcsCygHN + AcoByAHOAcoByAH3AvYG/wH8Af0B+wEvATABLgH1AfYB9AH6AfsB+QHSAdMC0QHSAdADzwPQA70DxAHR + AdIB0AHHAcgBxgHZAdoB2AHfAeAB3gHOAcwBywH8AfoB+QH3AfUB9AHzAfEB8AHeAdwB2wNiA/8B/QL/ + SAAD/wG6AdMB4wGwAc0B3gGiAf4B/wGRAfgB/wGRAfYB/wGQAfQB/wGOAfEB/wGMAe8B/wGLAe0B/wGI + AeoB/wGGAegB/wGEAeUB/wGCAeMB/wGAAeAB/wF+Ad4B/wF8AdsB/wF6AdkB/wF5AdcB/wF2AdQB/wF0 + AdIB/wFxAc8B/wFSAZoBxQGvAb0BxQMAAfYC9QHEAdcB8AEYAXYB9AEqAY0B/QEyAZ8B/wEzAbUB/wEm + AY4BvgEoAV0BgAElAYwBwAEpAcsB6wEvAeUB+gEsAeEB+gESAZkB4AEVAZ0B2wEXAaQB9AEkAbAB5AEa + AVUBcwEbAXUBxQEWAXsB9gEYAWkB5wGlAcMB8QHtAewB6wMACf4DLQH6AfgB9wH8AfoB+QHPAc0BzAHE + AcIBwQHPAc0BzAG/Ab0BvAHOAcwBywG6AbgBtwHCAcABvwHDAcEBwAHKAcgBxwHGAcQBwwG9Ab4BvAHI + AckBxwH5AfcB9gH3AfUB9AHaAdgB1wFhAV8BXgP+A/9IAAP/AboB0wHjAbABzQHeAaMC/wGTAfoB/wGT + AfgB/wGSAfYB/wGQAfQB/wGOAfIB/wGNAe8B/wGKAe0B/wGIAeoB/wGGAegB/wGEAeUB/wGCAeMB/wGA + AeAB/wF+Ad0B/wF8AdsB/wF6AdkB/wF4AdYB/wF2AdQB/wFxAc8B/wFSAZkBxQGvAb0BxQMAA/IBsAHE + AeYBKAFsAdcBLwGBAe4BMAGRAfsBOwGsAf8BNwHDAfcBIAGKAaoBBgEyAV8BEQF2AbEBLAHXAfUBMwHv + Af8BDAFgAZoBCQFWAZgBFwGfAfYBGwFqAZgBGQFjAaABHQGVAf8BGQGHAf4BEAFyAfwB0AHkAfwC8gHx + AwAD/wb+Ay4B9wH1AfQB9gH0AfMBwQG/Ab4BzQHLAcoBugG4AbcBvgG8AbsBwgHAAb8BswGxAbABzgHM + AcsByQHHAcYBtAGyAbEBuQG3AbYBwQHCAcABsQGvAa4B7QHpAegB8gHtAeoB0gHPAcsBYAFeAV0D/wP+ + SAAD/wG6AdMB4wGwAc4B3gGlAv8BlAH7Af8BlQH5Af8BkwH4Af8BkgH2Af8BkAH0Af8BjgHxAf8BjQHv + Af8BigHtAf8BiQHrAf8BhgHoAf8BhAHmAf8BggHjAf8BgQHgAf8BfwHeAf8BfQHbAf8BegHZAf8BeQHX + Af8BcQHPAf8BUgGZAcUBrwG9AcUDAAPsAZUBswHnASoBcwHkATYBgAHrATYBigH1ATEBmgH8AS4BswH+ + AS4BywH/AR0BgwGoAQcBKAFLAREBdwHFASEBuQH8AQoBVgGZAQkBWwGnARIBdAG4ARkBSAFiATUBrwHs + ASUBlwH/ARABXgHpASkBUAG8AekB6gHuA/kDAAP/Bv4DLgH5AfcB9gHyAfAB7wHAAb4BvQHBAb8BvgGj + AaEBoAG5AbcBtgG6AbgBtwG1AbMBsgG1AbMBsgGqAagBpwG8AboBuQG1AbMBsgGoAaYBpQHBAb0BvAHw + AesB6AHhAdsB1gHDAbwBswFjAWABXAH9Av8D/UgAA/8BugHTAeMBsAHOAd4BpQL/AZUB/QH/AZUB+wH/ + AZQB+gH/AZIB+AH/AZAB9gH/AY8B9AH/AY0B8gH/AYsB8AH/AYoB7QH/AYgB6gH/AYYB6AH/AYQB5QH/ + AYEB4gH/AX8B4AH/AX0B3gH/AXwB2wH/AXkB2AH/AXEBzwH/AVIBmgHGAa8BvQHFAwAC5gHnAX0BnAHX + ATEBawHPAUABbgHHATwBdwHYASsBiQHxASkBmwH1ASgBpgH7ASgBrwH+ARwBawGhAREBRQF0AR8BhQHL + ARgBYgGlARABTQGRARIBJQE8ASgBfgHEAScBiwHoARwBXgGxARcBQAF+AVgBbQGPAesC6QP+AwAD/wP+ + A/0DLwH1AfMB8gHzAfEB8AHCAcABvwGpAacBpgGiAaABnwGzAbEBsAGgAZ4BnQGqAagBpwGyAbABrwHK + AcgBxwGxAa8BrgG2AbQBswGxAa8BrgGzAa8BrgHdAdcB0gHKAcIBuwGnAZ4BlAFmAWMBXwH9Av8D/kgA + A/8BugHTAeMBsQHPAd8BqwL/AZwB/gH/AZ0B/gH/AZwB/AH/AZsB/AH/AZkB+gH/AZcB9wH/AZYB9gH/ + AZQB9AH/AZMB8gH/AZEB7gH/AZAB7gH/AY4B6wH/AYwB6AH/AYoB5QH/AYkB5AH/AYYB4QH/AYUB4AH/ + AYEB2wH/AVABlgHAAa4BvAHEAwAB3wHgAeMBYAGHAckBJAFLAZMBOQFaAZ4BOAFlAbkBNQFiAacBKwFq + AbYBKAFwAcQBJgF0Ac8BJQF0Ac4BHAFCAW4BFwEwAUYBGQEyAU8BFgEhASwBGgEuAUwBHwFdAbABGQFG + AYEBFgEqAUoBFwEbASIBhAGKAZMC6AHnBgAG/gP9AzAB+AH2AfUB8AHuAe0BxgHEAcMBrgGsAasBpQGj + AaIBvwG9AbwBpgGkAaMBrQGrAaoBpgGkAaMD6gHwAe4B7QHZAdUB0AHRAcwByQHjAd8B2gHRAcsBxAHT + Ac0BwgGVAY4BhQFlAWEBYAH9Av8D/UgAA/8BuAHSAeIBrgHMAd0B8AH5AfwB7wH4AfwB7wH4AfwB7wH4 + AfwB7wH4AfwB7wH5AfwB7wH5AfwB7wH5AfwB7wH5AfwB8AH5AfwB6wH4AfwB4gHxAfYB4gHxAfcB4gHx + AfcB4gHwAfcB4gHwAfcB4gHwAfcB4gHwAfYB1AHmAe0BLAFWAWsBsgHAAcYDAAHWAdgB2gFLAVsBdgEW + ASgBRQEiAS0BQgEkAToBZAEpATQBSwEiATQBUAEkAToBXQEiATQBUgEaASwBSQEXASIBMwEfASoBPgEb + AR4BJAIYARcBGQEaAR0BGQEfASoBFAEXARgBFAEdASYBHQE8AWYBpgG8AdsC7wHuBgAG/gP9AzAB8wHx + AfAB7gHsAesBkgGQAY8BrwGtAawBogGgAZ8BkwGRAZABqwGpAagBpQGjAaIBpwGlAaQBogGeAZ0B6wHo + AeQB4gHeAdkB6AHlAeEB5QHiAd4B4AHeAd0B5AHlAeMBEwEUARIB7wLxAfwC/gL/Af5IAAP/AdAB4QHs + AXEBpgHHAYoBzQHkAY8B0wHoAY0B0gHoAYsBzwHoAYkBzQHoAYYByQHoAYQBxgHoAYEBwwHoAYEBwgHp + AXoBuQHeAWwBmwG5AX0BqQHFAYABqwHHAYABqwHHAYABrAHHAYABrAHHAYABrAHHAX8BqwHGAX4BqgHG + AasBzQHeAfoC/AP+Ac8B0AHUAUwBUQFkAR8BJAEwARoBHAEjAR4BIAEmAR0BIgEsARgBHwEmARUBGwEg + ARcBHAEhARYBGwEeARUBGgEcARYBGwEdARcBGQEbARcBGAEZAxcBIAEoATUBOAFZAZABMwFzAcgBPgGF + Ad8BxQHWAewD+QYAA/8D/gP9AzEB+AH1AfEB7gHrAecBgAF9AXkBvwG8AbgBxgHDAb8B1gHTAc8BxQHC + Ab4BywHIAcQB0QHNAcwBqAGjAaAB1QHRAcwB+gH3AfMB6gHhAd4B6wPjAd4B3wELAQoBDAP/AfoF/AP3 + SAAD/wH8Af0B/gHIAdsB5wFiAbABzAGRAfQB+AGdAfwB/gGYAfgB/gGSAfEB/gGLAegB/gGFAeAB/gF7 + AdcB/gFqAcQB8wFFAX0BnQHCAc0B0wH2AfkB+gH4AfsB/AH4AfsB/AH4AfsB/AH4AfsB/AH4AfsB/AH4 + AfoB/AH4AfsB/AH9Af4E/wP6Ad0B3gHiAZ4BogGxAXwBgQGVAWABZQF9AVIBWQF5AUUBUwF/ATUBSwF4 + AR0BKwFAARMBHAEjARkBIwEuARQBGwEfARQBGQEbARUCGQEWARgBGQEcAR8BJQEiASgBNAE3AUsBcwE/ + AV4BmQFgAYABuQHWAdoB4gP+BgAD/wP+A/0DMQHxAe4B6gHpAeYB4gHqAecB4wHoAeUB4QHoAeUB4QHk + AeEB3QHpAeYB4gHqAecC4wHgAdwB3wHZAdQByAHCAbsB9wH0AfAB4AHeAd0B6AHmAeUBFwIZAfcB/AH7 + Bv8B/QL7Af8B/gH/SAAJ/wHhAegB7gF9AbIBzQHeAe8B9AHjAfIB9wHjAfEB9wHiAfAB9wHiAfAB9wHb + AesB8gF1AZIBoQHbAeEB4iH/A/4D9gHxAvAC7wTuAuYB6gHUAdUB3gG+AcQB2gGQAZ0BtgFZAWYBegE3 + AUUBWAEXAR0BIwEKAQ0BDgETARgBIQEXARsBJQEnATABRwEaAR0BIwEgAScBMgErATcBUAFvAXoBlQLi + AeMJAAn/AyoB9QHyAe4B7AHpAeUB3wHcAdgB5AHhAd0B5gHhAd4B5QHgAd0B5AHfAdwB3wHaAdcB5QLd + Ac8BxwHAAawBpAGdAfgB9QHxA9kDFwP+A/0M/0gADP8BzAHcAecBgAGrAcYBgAGrAccBgAGrAccBgAGs + AccBgAGsAccBgQGrAccBygHaAeUk/wwAA/4D+wH4AvcC9AHzAvIB8QPuAuMB5APVAr8BwAKeAaADegFe + AWABZAFbAWIBdAE8AUABSAEqATABOAF7AX8BhgPqCQAG/wP8AykB5QHjAeIB9gH0AfMB8AHuAe0B8wHx + AfAB7wHrAeoB7wHrAeoB7QHpAegB5QHhAeAB2wHWAdMB0QHFAbkBogGXAYkB3AHaAdkDEgP/BvsM/0gA + DP8B/QL+AfgB+wH8AfgB+wH8AfgB+wH8AfgB+wH8AfgB+wH8AfgB+wH8Af0C/iT/GwAD/gP9A/sD+AP2 + A/ED6gLlAeYB1wLZAb8BwQHCA84D8wkAA/wD+wP/A/YDFQM9A1IDTAFSAlABUQNPAk0BSgJIAUEBPwE+ + ATwBNgEvATQBLgEnAxMG/wP2D/9IAEj/NgAD/wP7A/4JAAP+Cf8B/gH9Af8B+gH5AfsB8wHyAvQB8wH1 + A/YG9AT1AfYB9AHtAfAB9AHwAfQB+Qb+Ff9IAAFCAU0BPgcAAT4DAAEoAwABYAMAARgDAAEBAQABAQUA + ASABARYAA/8EAAH8CwAB/AsAAfwLAAHACwABwAsAAcALAAHACwABgAsAAYALAAGACwABgAsAAYALAAGA + AQABAQkAAYABAAEBCQABgAEAAQEJAAGAAQABAQkAAYABAAEDCQABgAEAAQMLAAEDCwABAwsAAQcJAAHw + AQABBwkAAf8BgAEHCQAC/wHHBgAL + + + + 17, 17 + + + 231, 17 + + + + + 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 + 4121R+fzOwAAAABJRU5ErkJggg== + + + + + R0lGODlhMgAyAIcAAAAAAP////Lx8vHw8fDv8O3s7erp6ufm59fW17y7vO3t7unp6u7v7+zt7evs7Orr + 6+fo6OXm5uDh4dbX17u8vLi5uRpsIFqKXluLXx1vH+/w7+zt7CF0HyZ5Hit/HTGGHICyc4a4eTiNGz6U + GkWbGEuiF3ywXpXId1KpFvL67F22FFiwFWK7E5jNaN7yzO3442bAE6PabqTacKXbcabcdKfcdKvde63f + fbfijrrjk7vjlMfop83rsc/stNPtutXuvtfvwNzxyJjWVpnXWKTabqveeLThg8vprNPtudzxxtzxx9vw + xun22+n23K7gcrnkie735I7UOKngUr/og9DwlMHsa932oeT4tNf2gun6uev9p/Pz8unp6Ojo5+fn5rq6 + ubi4t+7t7erp6f7+/v39/fz8/Pv7+/r6+vn5+fj4+Pf39/b29vX19fT09PPz8/Ly8vHx8fDw8O/v7+7u + 7u3t7ezs7Ovr6+rq6unp6ejo6Ofn5+bm5uXl5eTk5OPj4+Li4uHh4eDg4N/f397e3t3d3dzc3Nvb29ra + 2tnZ2djY2NfX19bW1tXV1dPT09HR0dDQ0M/Pz83NzczMzMvLy8rKysnJycjIyMfHx8bGxsXFxcTExMPD + w8LCwsHBwcDAwL+/v76+vr29vby8vLu7u7q6urm5ubi4uLe3t7a2trW1tbS0tLOzs7KysrGxsbCwsK+v + r66urq2traysrKurq6qqqqmpqaioqKenp6ampqSkpKOjo6GhoZ+fn56enp2dnZubm5qampmZmZiYmJeX + l5WVlZOTk5KSkpGRkZCQkI6OjoyMjIuLi4mJiYeHh4aGhoSEhIKCgoGBgYCAgH5+fnx8fHl5eXd3d3Z2 + dnNzc3FxcW9vb25ubmtra2lpaWdnZ2ZmZmRkZGFhYV9fX15eXlxcXFpaWlhYWFdXV1ZWVlRUVFJSUlFR + UVBQUE5OTkxMTEtLS0lJSUhISP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + ACH/C05FVFNDQVBFMi4wAwEBAAAh+QQBAADyACwAAAAAMgAyAAAI/wADCBxIsKDBgwgTKlzIsKHDgZJs + SZxIsaLFUw8Z3spYpo2eXAEsqcqoEFcAOnTq1LFzRwyePHn0yNwTAZCiS70EZnJFEiHIMBtWPrhz52UX + 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 + jJTX0mHZpQAAAABJRU5ErkJggg== + + + + + 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 + PeBU/PCashAsBH//2Q== + + + + + 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 + np46WJsMQs0bFexxtiaGN2Bf/9k= + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m + dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAASESURBVFhHxdVpTFRXFAdwra12D03VNnVJWyNlKxSM + EAQhRWWRKK0IFNkR2a2Uth9arX5oa0NZBddEQUEW2Rtlhw7LVJgZJKN2yg6FYWoZ1FkgwBDNv+cOMGnj + i11MXk/yy82cufee8+6beW8JgP8VZ5JPnEk+cSb5xJnkE2eST5xJPnEm+cSZ5BPfsXyfvz9CQkIQGhrK + qi+fT//3WNqabL5TmGx6VpxuIpekGWORKNVkVJRmLO1IWn+l4oerDVerG1FV24g2oRAisQSSzhusgVfm + t/nnwQp6LhQcFadtRE/hh1C0HIG2twiY6iYy8gs0PQWY7CvEuCARZdeaMTM7B51uDvUNDYiJPYiPDyWy + BlbPb/v3seynFPPjknQTfcGx5i+h7ckHJm/h4V0h5uQlmO3LwpT0CKYkCZiWfYfp7lTMDWUDY5dRVF4P + lWYSWq0WZeWVjzTwTGemlbrzhBkkGSboSDWVXk81K2YFBUnm7pVHTazF6Wby/vIA6BR1eDghgG6kADPd + aZi68TmmRLGYEsdhUhw/T7QoTv+dTrIfBaV1UE7cw/1795Gbl4fIqDjEH0wwNGAky3ECNGI8UDZD050D + ZftxyJsS0FvsjZ/P2+N2jjOgaoeu/yQm28Mw2RFBBSKpYBSJpquOoTEG2o4oaNojDbTtEZgRBSGvuAaK + O+MYH5/AmdNnEXEgCtEx8YYGVt88txm/13phuouO7+Zh/dXphnPxQFGJuXEBbmdvR1/+Nigb9pC9GC5x + x3CpB2QXtkCW7UA/OHO0J5tSwVCohcEGGmEgpq/74FJRNUZGFRhT3MH3ySkICz9ApxBtaODVU3EbvhWm + WNyVnrHBSNkOqFv2QNPmPT+2stEbXVnWEGe8SywhPWUD6WkbdJ+3Q+9Fe8grXPHbNU9a8xFUrb5QtfhC + TaOmzQczwl24WFiFgaERakKOo8eOISg4jJqINDTwPNlAHEJ3vBZX/pVpq+SEJfryHKGs9YCmeTfxgrLG + A8MFjhjI2wJFmQuUVW64/+NuqJs/IF5QC7ygEtBnZmHNRK07FCW2yKEGevqGMDj0KxI++RQBgcEICQ03 + NPAUeY6sJG8RG+KSnWhcJMqwmpVdsIW83BkagRttTprcoGIaXf9C3eSKibrt+rm91GTXSf2JzVw6tLaU + NSDr7sfA4DD2R0TCzz8Q+wKCDA0sxlLCnkwvkzeIBXH6zHvtYUGS5VAXHftQoT2U1Y5Q1W81GCt3wMBl + O9w6twmdmdao+dpC+k3Im0nrVq3YReu3EoeUrJy23PxiXCmpwF4fPz1fP/9HGvhzLCMvEDZhI7Fds3KF + Z9EXplWdWTb0z9ik15lpA2puMDvxnUKX94yCaN77ZDMxJmsIO9XXiSVxJu7h4eGIjo5GbGzMYxtYDHYq + zxIjso5YESeybQEraE/Yaa0nbEM2l61ht5bF0+Qlsoq8TewIW8tu9b96FLONXiTsqlghhm3KNmGnxb5n + DT8u2C1m89laNj7xy+jJg+sdzSfOJJ84k3ziTPKJM8knziSfOJN84kzyB0v+AEH5SnYmyAQbAAAAAElF + TkSuQmCC + + + + 323, 17 + + + 49 + \ No newline at end of file diff --git a/Crawl.cs b/Crawl.cs index 679fcb6..e54ee21 100644 --- a/Crawl.cs +++ b/Crawl.cs @@ -1,196 +1,196 @@ -namespace ImgRip -{ - using System; - using System.Collections.Generic; - using System.IO; - using System.Linq; - using System.Net; - using System.Threading; - using Google.GData.Client; - using HAP = HtmlAgilityPack; - - static class Helper - { - public static bool CompareWithLength(this string src, string s) - { - if (src.Length != s.Length) - { - return src.Length > s.Length; - } - else - return string.Compare(src, s, true) > 0; - } - - public static bool ContainsEx(this string src, string check, StringComparison sc=StringComparison.OrdinalIgnoreCase) - { - if (string.IsNullOrEmpty(src) || string.IsNullOrEmpty(check)) return false; - return src.IndexOf(check, sc) >= 0; - } - } - - static class Fetch - { - static WebClient wc; - - #region Properties Definitions - public static Dictionary Images { get; private set; } - public static bool Canceled { get; set; } - public static bool Dropped { get; set; } - public static Site Site { get; set; } - public static FileInfo Current { get; set; } - public static string Location { get; set; } - public static bool Skip { get; set; } - public static string Title { get; set; } - public static string Address { get; set; } - public static string Next { get; set; } - public static string Screen { get; private set; } - #endregion - - public static Stream GetStream(string url, string cookie = null) - { - Stream r = null; - using (wc = new WebClient()) - { - if (cookie != null) - wc.Headers[HttpRequestHeader.Cookie] = string.Format("JSESSIONID={0}", cookie); - var are = new AutoResetEvent(false); - wc.OpenReadCompleted += (s, e) => { if (!e.Cancelled) r = e.Result; are.Set(); }; - wc.OpenReadAsync(new Uri(url)); - are.WaitOne(); are.Close(); - } - return r; - } - - public static void GetFile(string url, string file) - { - using (wc = new WebClient()) - { - wc.Headers[HttpRequestHeader.Referer] = url; - var are = new AutoResetEvent(false); - wc.DownloadFileCompleted += (s, e) => - { if ((e.Cancelled || e.Error != null) && File.Exists(file)) File.Delete(file); are.Set(); }; - wc.DownloadFileAsync(new Uri(url), file); - are.WaitOne(); are.Close(); - } - } - public static void Cancel() - { - if (wc != null) wc.CancelAsync(); - } - - public static string Parse(string url, Func fnNextPage = null, - Func fnName = null, Func fnAddress = null, Func fnScreen = null) - { - var hw = new HAP.HtmlWeb(); - var doc = hw.Load(url); - if (Canceled) return "User Cancelled."; - Title = doc.DocumentNode.SelectSingleNode("//title").InnerText; - Title = Title.Trim().Split('-', '_', '(', '[', '|', ':', '、')[0]; - var uri = new Uri(url); var host = uri.Host; var port = uri.Port; - var folder = url.Substring(0, url.LastIndexOf('/') + 1); - fnName = fnName ?? (n => n.Substring(n.LastIndexOf('/') + 1)); - fnAddress = fnAddress ?? (a => a.StartsWith("http://") ? a : - (string.Format("http://{0}{1}{2}", host, port == 80 ? "" : ":" + port.ToString(), a.StartsWith("/") ? "" : "/") + a)); - #region Get screen resolution info - if (!string.IsNullOrEmpty(Site.Screen)) - { - var screenlist = doc.DocumentNode.SelectSingleNode(Site.Screen); - Screen = fnScreen(screenlist); - } - #endregion - var links = doc.DocumentNode.SelectNodes(Site.Image); - if (links == null || links.Count == 0) return "No gallery found in this page."; - Images = new Dictionary(); - #region Get Photo collection - foreach (var lnk in links) - { - var item = lnk; - switch (Site.Type) - { - case "PalAthCx": - var href = lnk.ParentNode.Attributes["href"].Value; - if (!href.EndsWith(".html", StringComparison.OrdinalIgnoreCase)) continue; - break; - case "Leg99": - item = lnk.ParentNode; - break; - } - - var atag = item.Name.ToLower() == "a"; - var src = atag ? item.Attributes["href"].Value.Trim() : item.Attributes["file"] != null ? item.Attributes["file"].Value.Trim() : item.Attributes["src"].Value.Trim(); - var address = fnAddress(HttpUtility.HtmlDecode(src)); - var name = item.InnerText == string.Empty ? fnName(address) : item.InnerText; - if (name != null && address != null) - { - Images[name] = address; - System.Diagnostics.Trace.WriteLine(string.Format("Name:\"{0}\"\n\tUrl:\t\"{1}\"", name, address)); - } - } - System.Diagnostics.Trace.WriteLine(string.Format("Total [{0}] photos in page: \"{1}\".", Images.Count, Title)); - if (Images.Count==0) return "No gallery found in this page."; - #endregion - if (string.IsNullOrEmpty(Site.Next)) return null; - #region Get Next page url - fnNextPage = fnNextPage ?? (hnc => - { - if (hnc == null) return null; - var page = hnc.LastOrDefault(); - if (page == null || page.Name != "a" || page.Attributes["href"] == null) return null; - var href = page.Attributes["href"].Value; if (href == "#" || href.StartsWith("javascript")) return null; - var next = href.StartsWith("http://") ? - href : href.StartsWith("./") ? - href.Replace("./", folder) : href.StartsWith("../") ? href.Replace("../", UpFolder(folder)) : href.StartsWith("/") ? - string.Format("http://{0}{1}", host, port == 80 ? "" : ":" + port.ToString()) + href : (href.StartsWith("?") ? - url.Split('?')[0] + href : href.IndexOf('/') > 0 ? string.Format("http://{0}/", host) : folder) + href; - if (Site.Type == "BitAuto"||Site.Type=="LianTu") return next; - var pq = new Uri(next).PathAndQuery.TrimEnd('/'); - var cur = uri.PathAndQuery.TrimEnd('/'); - return pq.CompareWithLength(cur) ? next : null; - }); - #endregion - var pages = doc.DocumentNode.SelectNodes(Site.Next); - Next = pages == null ? null : fnNextPage(pages); - System.Diagnostics.Trace.WriteLine(string.Format("Next page is: {0}", Next ?? "Empty")); - return null; - } - - static string UpFolder(string url) - { - var parts = url.Split("/".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); - if (parts.Length == 0) return string.Empty; - return url.Replace(parts[parts.Length - 1] + "/", ""); - } - - public static void Reset() - { - if (Images != null) Images.Clear(); - Canceled = Dropped = Skip = false; - Current = null; - Title = Address = string.Empty; - } - } - - class Site - { - public Site(string name, string domain, string xpImage, string xpNext=null) - { - Name = name; - Domain = domain; - Image = xpImage; - Next = xpNext; - } - - public string Domain { get; set; } - - public string Image { get; private set; } - public string Next { get; set; } - public string Name { get; private set; } - public string Screen { get; set; } - public string Type { get; set; } - - public override string ToString() - { - return Domain; - } - } -} +namespace ImgRip +{ + using System; + using System.Collections.Generic; + using System.IO; + using System.Linq; + using System.Net; + using System.Threading; + using Google.GData.Client; + using HAP = HtmlAgilityPack; + + static class Helper + { + public static bool CompareWithLength(this string src, string s) + { + if (src.Length != s.Length) + { + return src.Length > s.Length; + } + else + return string.Compare(src, s, true) > 0; + } + + public static bool ContainsEx(this string src, string check, StringComparison sc=StringComparison.OrdinalIgnoreCase) + { + if (string.IsNullOrEmpty(src) || string.IsNullOrEmpty(check)) return false; + return src.IndexOf(check, sc) >= 0; + } + } + + static class Fetch + { + static WebClient wc; + + #region Properties Definitions + public static Dictionary Images { get; private set; } + public static bool Canceled { get; set; } + public static bool Dropped { get; set; } + public static Site Site { get; set; } + public static FileInfo Current { get; set; } + public static string Location { get; set; } + public static bool Skip { get; set; } + public static string Title { get; set; } + public static string Address { get; set; } + public static string Next { get; set; } + public static string Screen { get; private set; } + #endregion + + public static Stream GetStream(string url, string cookie = null) + { + Stream r = null; + using (wc = new WebClient()) + { + if (cookie != null) + wc.Headers[HttpRequestHeader.Cookie] = string.Format("JSESSIONID={0}", cookie); + var are = new AutoResetEvent(false); + wc.OpenReadCompleted += (s, e) => { if (!e.Cancelled) r = e.Result; are.Set(); }; + wc.OpenReadAsync(new Uri(url)); + are.WaitOne(); are.Close(); + } + return r; + } + + public static void GetFile(string url, string file) + { + using (wc = new WebClient()) + { + wc.Headers[HttpRequestHeader.Referer] = url; + var are = new AutoResetEvent(false); + wc.DownloadFileCompleted += (s, e) => + { if ((e.Cancelled || e.Error != null) && File.Exists(file)) File.Delete(file); are.Set(); }; + wc.DownloadFileAsync(new Uri(url), file); + are.WaitOne(); are.Close(); + } + } + public static void Cancel() + { + if (wc != null) wc.CancelAsync(); + } + + public static string Parse(string url, Func fnNextPage = null, + Func fnName = null, Func fnAddress = null, Func fnScreen = null) + { + var hw = new HAP.HtmlWeb(); + var doc = hw.Load(url); + if (Canceled) return "User Cancelled."; + Title = doc.DocumentNode.SelectSingleNode("//title").InnerText; + Title = Title.Trim().Split('-', '_', '(', '[', '|', ':', '、')[0]; + var uri = new Uri(url); var host = uri.Host; var port = uri.Port; + var folder = url.Substring(0, url.LastIndexOf('/') + 1); + fnName = fnName ?? (n => n.Substring(n.LastIndexOf('/') + 1)); + fnAddress = fnAddress ?? (a => a.StartsWith("http://") ? a : + (string.Format("http://{0}{1}{2}", host, port == 80 ? "" : ":" + port.ToString(), a.StartsWith("/") ? "" : "/") + a)); + #region Get screen resolution info + if (!string.IsNullOrEmpty(Site.Screen)) + { + var screenlist = doc.DocumentNode.SelectSingleNode(Site.Screen); + Screen = fnScreen(screenlist); + } + #endregion + var links = doc.DocumentNode.SelectNodes(Site.Image); + if (links == null || links.Count == 0) return "No gallery found in this page."; + Images = new Dictionary(); + #region Get Photo collection + foreach (var lnk in links) + { + var item = lnk; + switch (Site.Type) + { + case "PalAthCx": + var href = lnk.ParentNode.Attributes["href"].Value; + if (!href.EndsWith(".html", StringComparison.OrdinalIgnoreCase)) continue; + break; + case "Leg99": + item = lnk.ParentNode; + break; + } + + var atag = item.Name.ToLower() == "a"; + var src = atag ? item.Attributes["href"].Value.Trim() : item.Attributes["file"] != null ? item.Attributes["file"].Value.Trim() : item.Attributes["src"].Value.Trim(); + var address = fnAddress(HttpUtility.HtmlDecode(src)); + var name = item.InnerText == string.Empty ? fnName(address) : item.InnerText; + if (name != null && address != null) + { + Images[name] = address; + System.Diagnostics.Trace.WriteLine(string.Format("Name:\"{0}\"\n\tUrl:\t\"{1}\"", name, address)); + } + } + System.Diagnostics.Trace.WriteLine(string.Format("Total [{0}] photos in page: \"{1}\".", Images.Count, Title)); + if (Images.Count==0) return "No gallery found in this page."; + #endregion + if (string.IsNullOrEmpty(Site.Next)) return null; + #region Get Next page url + fnNextPage = fnNextPage ?? (hnc => + { + if (hnc == null) return null; + var page = hnc.LastOrDefault(); + if (page == null || page.Name != "a" || page.Attributes["href"] == null) return null; + var href = page.Attributes["href"].Value; if (href == "#" || href.StartsWith("javascript")) return null; + var next = href.StartsWith("http://") ? + href : href.StartsWith("./") ? + href.Replace("./", folder) : href.StartsWith("../") ? href.Replace("../", UpFolder(folder)) : href.StartsWith("/") ? + string.Format("http://{0}{1}", host, port == 80 ? "" : ":" + port.ToString()) + href : (href.StartsWith("?") ? + url.Split('?')[0] + href : href.IndexOf('/') > 0 ? string.Format("http://{0}/", host) : folder) + href; + if (Site.Type == "BitAuto"||Site.Type=="LianTu") return next; + var pq = new Uri(next).PathAndQuery.TrimEnd('/'); + var cur = uri.PathAndQuery.TrimEnd('/'); + return pq.CompareWithLength(cur) ? next : null; + }); + #endregion + var pages = doc.DocumentNode.SelectNodes(Site.Next); + Next = pages == null ? null : fnNextPage(pages); + System.Diagnostics.Trace.WriteLine(string.Format("Next page is: {0}", Next ?? "Empty")); + return null; + } + + static string UpFolder(string url) + { + var parts = url.Split("/".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); + if (parts.Length == 0) return string.Empty; + return url.Replace(parts[parts.Length - 1] + "/", ""); + } + + public static void Reset() + { + if (Images != null) Images.Clear(); + Canceled = Dropped = Skip = false; + Current = null; + Title = Address = string.Empty; + } + } + + class Site + { + public Site(string name, string domain, string xpImage, string xpNext=null) + { + Name = name; + Domain = domain; + Image = xpImage; + Next = xpNext; + } + + public string Domain { get; set; } + + public string Image { get; private set; } + public string Next { get; set; } + public string Name { get; private set; } + public string Screen { get; set; } + public string Type { get; set; } + + public override string ToString() + { + return Domain; + } + } +} diff --git a/GData/GData.csproj b/GData/GData.csproj index a7bcb06..6d5f89c 100644 --- a/GData/GData.csproj +++ b/GData/GData.csproj @@ -1,377 +1,377 @@ - - - - Debug - AnyCPU - 10.0.30319 - 2.0 - {510070A4-28D1-4362-BAB5-54984A9F75BF} - Library - Properties - GData - GData - v4.0 - 512 - Client - SAK - SAK - SAK - SAK - - - true - full - false - bin\Debug\ - - - none - 4 - AnyCPU - Off - - - none - true - bin\Release\ - - - none - 4 - Off - AnyCPU - - - x86 - bin\x86\Debug\ - - - x86 - bin\x86\Release\ - - - true - - - GData.snk - - - false - - - - - - - - - - - - - Core\abstractentry.cs - - - Core\abstractfeed.cs - - - Core\appcontrol.cs - - - Core\asyncDataHandler.cs - - - Core\asyncservice.cs - - - Core\atombase.cs - - - Core\atombaselink.cs - - - Core\atomcategory.cs - - - Core\atomcontent.cs - - - Core\atomfeed.cs - - - Core\atomfeedentry.cs - - - Core\atomFeedgenerator.cs - - - Core\atomfeedparser.cs - - - Core\atomicon.cs - - - Core\atomId.cs - - - Core\atomlink.cs - - - Core\atomlogo.cs - - - Core\atomnametable.cs - - - Core\atomperson.cs - - - Core\atomsource.cs - - - Core\atomtextconstruct.cs - - - Core\atomuri.cs - - - Core\authentication.cs - - - Core\authexceptions.cs - - - Core\authsubutil.cs - - - Core\basefeedparser.cs - - - Core\basenametable.cs - - - Core\batcherror.cs - - - Core\batcherrors.cs - - - Core\collections.cs - - - Core\documentquery.cs - - - Core\exceptions.cs - - - Core\extcollections.cs - - - Core\extensionbase.cs - - - Core\feedconstants.cs - - - Core\feedmodel.cs - - - Core\feedquery.cs - - - Core\gauthrequest.cs - - - Core\gauthsubrequest.cs - - - Core\gdatabatch.cs - - - Core\goauth2request.cs - - - Core\goauthrequest.cs - - - Core\HttpUtility.cs - - - Core\logrequest.cs - - - Core\mediaservice.cs - - - Core\mediasource.cs - - - Core\oauthbase.cs - - - Core\oauthparameters.cs - - - Core\oauthuri.cs - - - Core\oauthutil.cs - - - Core\request.cs - - - Core\resumableupload.cs - - - Core\rssfeedparser.cs - - - Core\service.cs - - - Core\serviceinterface.cs - - - Core\simplecontainer.cs - - - Core\simpleelement.cs - - - Core\tracing.cs - - - Core\utilities.cs - - - Core\versioninterface.cs - - - Core\xmlextension.cs - - - Docs\archiveentry.cs - - - Docs\archivefeed.cs - - - Docs\changeentry.cs - - - Docs\changesfeed.cs - - - Docs\docrequest.cs - - - Docs\documententry.cs - - - Docs\documentfeed.cs - - - Docs\documentquery.cs - - - Docs\documentservice.cs - - - Docs\metadataentry.cs - - - Docs\metadatafeed.cs - - - Docs\revisionentry.cs - - - Docs\revisionfeed.cs - - - Extensions\enumconstruct.cs - - - Extensions\exif.cs - - - Extensions\feedlink.cs - - - Extensions\gdatanametable.cs - - - Extensions\georsswhere.cs - - - Extensions\mediarss.cs - - - Extensions\misc.cs - - - Acl\aclentry.cs - - - Acl\aclfeed.cs - - - Acl\aclnamespace.cs - - - Acl\aclrole.cs - - - Acl\aclscope.cs - - - Acl\baseaclentry.cs - - - Photo\albumentry.cs - - - Photo\commententry.cs - - - Photo\gextphotos.cs - - - Photo\kindsquery.cs - - - Photo\photoentry.cs - - - Photo\photosrequest.cs - - - Photo\picasaentry.cs - - - Photo\picasafeed.cs - - - Photo\picasaquery.cs - - - Photo\picasaservice.cs - - - Photo\tagentry.cs - - - - - - - + + + + Debug + AnyCPU + 10.0.30319 + 2.0 + {510070A4-28D1-4362-BAB5-54984A9F75BF} + Library + Properties + GData + GData + v4.0 + 512 + Client + SAK + SAK + SAK + SAK + + + true + full + false + bin\Debug\ + + + none + 4 + AnyCPU + Off + + + none + true + bin\Release\ + + + none + 4 + Off + AnyCPU + + + x86 + bin\x86\Debug\ + + + x86 + bin\x86\Release\ + + + true + + + GData.snk + + + false + + + + + + + + + + + + + Core\abstractentry.cs + + + Core\abstractfeed.cs + + + Core\appcontrol.cs + + + Core\asyncDataHandler.cs + + + Core\asyncservice.cs + + + Core\atombase.cs + + + Core\atombaselink.cs + + + Core\atomcategory.cs + + + Core\atomcontent.cs + + + Core\atomfeed.cs + + + Core\atomfeedentry.cs + + + Core\atomFeedgenerator.cs + + + Core\atomfeedparser.cs + + + Core\atomicon.cs + + + Core\atomId.cs + + + Core\atomlink.cs + + + Core\atomlogo.cs + + + Core\atomnametable.cs + + + Core\atomperson.cs + + + Core\atomsource.cs + + + Core\atomtextconstruct.cs + + + Core\atomuri.cs + + + Core\authentication.cs + + + Core\authexceptions.cs + + + Core\authsubutil.cs + + + Core\basefeedparser.cs + + + Core\basenametable.cs + + + Core\batcherror.cs + + + Core\batcherrors.cs + + + Core\collections.cs + + + Core\documentquery.cs + + + Core\exceptions.cs + + + Core\extcollections.cs + + + Core\extensionbase.cs + + + Core\feedconstants.cs + + + Core\feedmodel.cs + + + Core\feedquery.cs + + + Core\gauthrequest.cs + + + Core\gauthsubrequest.cs + + + Core\gdatabatch.cs + + + Core\goauth2request.cs + + + Core\goauthrequest.cs + + + Core\HttpUtility.cs + + + Core\logrequest.cs + + + Core\mediaservice.cs + + + Core\mediasource.cs + + + Core\oauthbase.cs + + + Core\oauthparameters.cs + + + Core\oauthuri.cs + + + Core\oauthutil.cs + + + Core\request.cs + + + Core\resumableupload.cs + + + Core\rssfeedparser.cs + + + Core\service.cs + + + Core\serviceinterface.cs + + + Core\simplecontainer.cs + + + Core\simpleelement.cs + + + Core\tracing.cs + + + Core\utilities.cs + + + Core\versioninterface.cs + + + Core\xmlextension.cs + + + Docs\archiveentry.cs + + + Docs\archivefeed.cs + + + Docs\changeentry.cs + + + Docs\changesfeed.cs + + + Docs\docrequest.cs + + + Docs\documententry.cs + + + Docs\documentfeed.cs + + + Docs\documentquery.cs + + + Docs\documentservice.cs + + + Docs\metadataentry.cs + + + Docs\metadatafeed.cs + + + Docs\revisionentry.cs + + + Docs\revisionfeed.cs + + + Extensions\enumconstruct.cs + + + Extensions\exif.cs + + + Extensions\feedlink.cs + + + Extensions\gdatanametable.cs + + + Extensions\georsswhere.cs + + + Extensions\mediarss.cs + + + Extensions\misc.cs + + + Acl\aclentry.cs + + + Acl\aclfeed.cs + + + Acl\aclnamespace.cs + + + Acl\aclrole.cs + + + Acl\aclscope.cs + + + Acl\baseaclentry.cs + + + Photo\albumentry.cs + + + Photo\commententry.cs + + + Photo\gextphotos.cs + + + Photo\kindsquery.cs + + + Photo\photoentry.cs + + + Photo\photosrequest.cs + + + Photo\picasaentry.cs + + + Photo\picasafeed.cs + + + Photo\picasaquery.cs + + + Photo\picasaservice.cs + + + Photo\tagentry.cs + + + + + + + \ No newline at end of file diff --git a/GData/GData.csproj.vspscc b/GData/GData.csproj.vspscc index feffdec..b6d3289 100644 --- a/GData/GData.csproj.vspscc +++ b/GData/GData.csproj.vspscc @@ -1,10 +1,10 @@ -"" -{ -"FILE_VERSION" = "9237" -"ENLISTMENT_CHOICE" = "NEVER" -"PROJECT_FILE_RELATIVE_PATH" = "" -"NUMBER_OF_EXCLUDED_FILES" = "0" -"ORIGINAL_PROJECT_FILE_PATH" = "" -"NUMBER_OF_NESTED_PROJECTS" = "0" -"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER" -} +"" +{ +"FILE_VERSION" = "9237" +"ENLISTMENT_CHOICE" = "NEVER" +"PROJECT_FILE_RELATIVE_PATH" = "" +"NUMBER_OF_EXCLUDED_FILES" = "0" +"ORIGINAL_PROJECT_FILE_PATH" = "" +"NUMBER_OF_NESTED_PROJECTS" = "0" +"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER" +} diff --git a/HAP/HAP.csproj b/HAP/HAP.csproj index 7db164f..ae68daa 100644 --- a/HAP/HAP.csproj +++ b/HAP/HAP.csproj @@ -1,165 +1,165 @@ - - - - Debug - x86 - 10.0.30319 - 2.0 - {F39EA302-4440-4BFC-9071-5321E36C2C4C} - Library - Properties - HAP - HAP - v4.0 - Client - 512 - SAK - SAK - SAK - SAK - - - AnyCPU - true - full - false - bin\Debug\ - - - prompt - 4 - - - AnyCPU - pdbonly - true - bin\Release\ - - - prompt - 4 - - - - - - true - - - AnyCPU - bin\Debug\ - pdbonly - false - Off - - - AnyCPU - bin\Release\ - true - Off - - - HAP.snk - - - - - - - - - - - crc32.cs - - - EncodingFoundException.cs - - - HtmlAttribute.cs - - - HtmlAttributeCollection.cs - - - HtmlCommentNode.cs - - - HtmlDocument.cs - - - HtmlDocument.PathMethods.cs - - - HtmlDocument.Xpath.cs - - - HtmlElementFlag.cs - - - HtmlEntity.cs - - - HtmlNameTable.cs - - - HtmlNode.cs - - - HtmlNode.Dynamic.cs - - - HtmlNode.Xpath.cs - - - HtmlNodeCollection.cs - - - HtmlNodeNavigator.cs - - - HtmlNodeType.cs - - - HtmlParseError.cs - - - HtmlParseErrorCode.cs - - - HtmlTextNode.cs - - - HtmlWeb.cs - - - HtmlWeb.Xpath.cs - - - HtmlWebException.cs - - - IOLibrary.cs - - - NameValuePair.cs - - - NameValuePairList.cs - - - Trace.cs - - - Utilities.cs - - - - + + + + Debug + x86 + 10.0.30319 + 2.0 + {F39EA302-4440-4BFC-9071-5321E36C2C4C} + Library + Properties + HAP + HAP + v4.0 + Client + 512 + SAK + SAK + SAK + SAK + + + AnyCPU + true + full + false + bin\Debug\ + + + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + + + prompt + 4 + + + + + + true + + + AnyCPU + bin\Debug\ + pdbonly + false + Off + + + AnyCPU + bin\Release\ + true + Off + + + HAP.snk + + + + + + + + + + + crc32.cs + + + EncodingFoundException.cs + + + HtmlAttribute.cs + + + HtmlAttributeCollection.cs + + + HtmlCommentNode.cs + + + HtmlDocument.cs + + + HtmlDocument.PathMethods.cs + + + HtmlDocument.Xpath.cs + + + HtmlElementFlag.cs + + + HtmlEntity.cs + + + HtmlNameTable.cs + + + HtmlNode.cs + + + HtmlNode.Dynamic.cs + + + HtmlNode.Xpath.cs + + + HtmlNodeCollection.cs + + + HtmlNodeNavigator.cs + + + HtmlNodeType.cs + + + HtmlParseError.cs + + + HtmlParseErrorCode.cs + + + HtmlTextNode.cs + + + HtmlWeb.cs + + + HtmlWeb.Xpath.cs + + + HtmlWebException.cs + + + IOLibrary.cs + + + NameValuePair.cs + + + NameValuePairList.cs + + + Trace.cs + + + Utilities.cs + + + + \ No newline at end of file diff --git a/HAP/HAP.csproj.vspscc b/HAP/HAP.csproj.vspscc index feffdec..b6d3289 100644 --- a/HAP/HAP.csproj.vspscc +++ b/HAP/HAP.csproj.vspscc @@ -1,10 +1,10 @@ -"" -{ -"FILE_VERSION" = "9237" -"ENLISTMENT_CHOICE" = "NEVER" -"PROJECT_FILE_RELATIVE_PATH" = "" -"NUMBER_OF_EXCLUDED_FILES" = "0" -"ORIGINAL_PROJECT_FILE_PATH" = "" -"NUMBER_OF_NESTED_PROJECTS" = "0" -"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER" -} +"" +{ +"FILE_VERSION" = "9237" +"ENLISTMENT_CHOICE" = "NEVER" +"PROJECT_FILE_RELATIVE_PATH" = "" +"NUMBER_OF_EXCLUDED_FILES" = "0" +"ORIGINAL_PROJECT_FILE_PATH" = "" +"NUMBER_OF_NESTED_PROJECTS" = "0" +"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER" +} diff --git a/Helper.cs b/Helper.cs index b81a70c..19786a7 100644 --- a/Helper.cs +++ b/Helper.cs @@ -1,43 +1,43 @@ -namespace ImgRip -{ - using System; - using System.Windows.Forms; - using Google.GData.Client; - /// - /// UI Callback Helper - /// - static class UICallBack - { - public static void cbEnable(this Control ctl, bool enable) - { - if (ctl.IsHandleCreated) - ctl.Invoke(new Action(() => ctl.Enabled = enable)); - } - - public static void EnableControls(bool enable, params Control[] ctls) - { - foreach (var ctl in ctls) - { - if (ctl.IsHandleCreated) - ctl.Invoke(new Action(() => ctl.Enabled = enable)); - } - } - - public static void cbAdd(this ListView lv, object data, int imgindex) - { - if (lv.IsHandleCreated) - switch (WebCloud.Service) - { - case WebCloud.CloudType.Flickr: - break; - case WebCloud.CloudType.Facebook: - break; - case WebCloud.CloudType.GDrive: - case WebCloud.CloudType.Picasa: - var ae = data as AtomEntry; - lv.Invoke(new Action(() => lv.Items.Add(new ListViewItem(ae.Title.Text, imgindex) { Tag = ae, ToolTipText = ae.AlternateUri.Content }))); - break; - } - } - } -} +namespace ImgRip +{ + using System; + using System.Windows.Forms; + using Google.GData.Client; + /// + /// UI Callback Helper + /// + static class UICallBack + { + public static void cbEnable(this Control ctl, bool enable) + { + if (ctl.IsHandleCreated) + ctl.Invoke(new Action(() => ctl.Enabled = enable)); + } + + public static void EnableControls(bool enable, params Control[] ctls) + { + foreach (var ctl in ctls) + { + if (ctl.IsHandleCreated) + ctl.Invoke(new Action(() => ctl.Enabled = enable)); + } + } + + public static void cbAdd(this ListView lv, object data, int imgindex) + { + if (lv.IsHandleCreated) + switch (WebCloud.Service) + { + case WebCloud.CloudType.Flickr: + break; + case WebCloud.CloudType.Facebook: + break; + case WebCloud.CloudType.GDrive: + case WebCloud.CloudType.Picasa: + var ae = data as AtomEntry; + lv.Invoke(new Action(() => lv.Items.Add(new ListViewItem(ae.Title.Text, imgindex) { Tag = ae, ToolTipText = ae.AlternateUri.Content }))); + break; + } + } + } +} diff --git a/ImageRipper.csproj.vspscc b/ImageRipper.csproj.vspscc index feffdec..b6d3289 100644 --- a/ImageRipper.csproj.vspscc +++ b/ImageRipper.csproj.vspscc @@ -1,10 +1,10 @@ -"" -{ -"FILE_VERSION" = "9237" -"ENLISTMENT_CHOICE" = "NEVER" -"PROJECT_FILE_RELATIVE_PATH" = "" -"NUMBER_OF_EXCLUDED_FILES" = "0" -"ORIGINAL_PROJECT_FILE_PATH" = "" -"NUMBER_OF_NESTED_PROJECTS" = "0" -"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER" -} +"" +{ +"FILE_VERSION" = "9237" +"ENLISTMENT_CHOICE" = "NEVER" +"PROJECT_FILE_RELATIVE_PATH" = "" +"NUMBER_OF_EXCLUDED_FILES" = "0" +"ORIGINAL_PROJECT_FILE_PATH" = "" +"NUMBER_OF_NESTED_PROJECTS" = "0" +"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER" +} diff --git a/ImageRipper.sln b/ImageRipper.sln index 9cc1ea9..d2684a7 100644 --- a/ImageRipper.sln +++ b/ImageRipper.sln @@ -1,48 +1,48 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2013 -VisualStudioVersion = 12.0.21005.1 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ImgRip", "ImgRip.csproj", "{2172F5C5-FAE4-47E4-8662-D3F6443DE0F5}" -EndProject -Global - GlobalSection(TeamFoundationVersionControl) = preSolution - SccNumberOfProjects = 2 - SccEnterpriseProvider = {4CA58AB2-18FA-4F8D-95D4-32DDF27D184C} - SccTeamFoundationServer = https://tfs.codeplex.com/tfs/tfs02 - SccLocalPath0 = . - SccProjectUniqueName1 = ImgRip.csproj - SccLocalPath1 = . - EndGlobalSection - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Debug|ARM = Debug|ARM - Debug|Mixed Platforms = Debug|Mixed Platforms - Debug|x64 = Debug|x64 - Debug|x86 = Debug|x86 - Release|Any CPU = Release|Any CPU - Release|ARM = Release|ARM - Release|Mixed Platforms = Release|Mixed Platforms - Release|x64 = Release|x64 - Release|x86 = Release|x86 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {2172F5C5-FAE4-47E4-8662-D3F6443DE0F5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2172F5C5-FAE4-47E4-8662-D3F6443DE0F5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2172F5C5-FAE4-47E4-8662-D3F6443DE0F5}.Debug|ARM.ActiveCfg = Debug|Any CPU - {2172F5C5-FAE4-47E4-8662-D3F6443DE0F5}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {2172F5C5-FAE4-47E4-8662-D3F6443DE0F5}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {2172F5C5-FAE4-47E4-8662-D3F6443DE0F5}.Debug|x64.ActiveCfg = Debug|Any CPU - {2172F5C5-FAE4-47E4-8662-D3F6443DE0F5}.Debug|x86.ActiveCfg = Debug|x86 - {2172F5C5-FAE4-47E4-8662-D3F6443DE0F5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2172F5C5-FAE4-47E4-8662-D3F6443DE0F5}.Release|Any CPU.Build.0 = Release|Any CPU - {2172F5C5-FAE4-47E4-8662-D3F6443DE0F5}.Release|ARM.ActiveCfg = Release|Any CPU - {2172F5C5-FAE4-47E4-8662-D3F6443DE0F5}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {2172F5C5-FAE4-47E4-8662-D3F6443DE0F5}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {2172F5C5-FAE4-47E4-8662-D3F6443DE0F5}.Release|x64.ActiveCfg = Release|Any CPU - {2172F5C5-FAE4-47E4-8662-D3F6443DE0F5}.Release|x86.ActiveCfg = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2013 +VisualStudioVersion = 12.0.21005.1 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ImgRip", "ImgRip.csproj", "{2172F5C5-FAE4-47E4-8662-D3F6443DE0F5}" +EndProject +Global + GlobalSection(TeamFoundationVersionControl) = preSolution + SccNumberOfProjects = 2 + SccEnterpriseProvider = {4CA58AB2-18FA-4F8D-95D4-32DDF27D184C} + SccTeamFoundationServer = https://tfs.codeplex.com/tfs/tfs02 + SccLocalPath0 = . + SccProjectUniqueName1 = ImgRip.csproj + SccLocalPath1 = . + EndGlobalSection + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|ARM = Debug|ARM + Debug|Mixed Platforms = Debug|Mixed Platforms + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|ARM = Release|ARM + Release|Mixed Platforms = Release|Mixed Platforms + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {2172F5C5-FAE4-47E4-8662-D3F6443DE0F5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2172F5C5-FAE4-47E4-8662-D3F6443DE0F5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2172F5C5-FAE4-47E4-8662-D3F6443DE0F5}.Debug|ARM.ActiveCfg = Debug|Any CPU + {2172F5C5-FAE4-47E4-8662-D3F6443DE0F5}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {2172F5C5-FAE4-47E4-8662-D3F6443DE0F5}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {2172F5C5-FAE4-47E4-8662-D3F6443DE0F5}.Debug|x64.ActiveCfg = Debug|Any CPU + {2172F5C5-FAE4-47E4-8662-D3F6443DE0F5}.Debug|x86.ActiveCfg = Debug|x86 + {2172F5C5-FAE4-47E4-8662-D3F6443DE0F5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2172F5C5-FAE4-47E4-8662-D3F6443DE0F5}.Release|Any CPU.Build.0 = Release|Any CPU + {2172F5C5-FAE4-47E4-8662-D3F6443DE0F5}.Release|ARM.ActiveCfg = Release|Any CPU + {2172F5C5-FAE4-47E4-8662-D3F6443DE0F5}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {2172F5C5-FAE4-47E4-8662-D3F6443DE0F5}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {2172F5C5-FAE4-47E4-8662-D3F6443DE0F5}.Release|x64.ActiveCfg = Release|Any CPU + {2172F5C5-FAE4-47E4-8662-D3F6443DE0F5}.Release|x86.ActiveCfg = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/ImageRipper.vssscc b/ImageRipper.vssscc index 794f014..6cb031b 100644 --- a/ImageRipper.vssscc +++ b/ImageRipper.vssscc @@ -1,10 +1,10 @@ -"" -{ -"FILE_VERSION" = "9237" -"ENLISTMENT_CHOICE" = "NEVER" -"PROJECT_FILE_RELATIVE_PATH" = "" -"NUMBER_OF_EXCLUDED_FILES" = "0" -"ORIGINAL_PROJECT_FILE_PATH" = "" -"NUMBER_OF_NESTED_PROJECTS" = "0" -"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROJECT" -} +"" +{ +"FILE_VERSION" = "9237" +"ENLISTMENT_CHOICE" = "NEVER" +"PROJECT_FILE_RELATIVE_PATH" = "" +"NUMBER_OF_EXCLUDED_FILES" = "0" +"ORIGINAL_PROJECT_FILE_PATH" = "" +"NUMBER_OF_NESTED_PROJECTS" = "0" +"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROJECT" +} diff --git a/ImgRip.csproj b/ImgRip.csproj index c5269f0..266fecc 100644 --- a/ImgRip.csproj +++ b/ImgRip.csproj @@ -1,289 +1,289 @@ - - - - Debug - AnyCPU - 10.0.30319 - 2.0 - {2172F5C5-FAE4-47E4-8662-D3F6443DE0F5} - WinExe - Properties - ImgRip - ImageRipper - v4.0 - Client - 512 - true - download.ico - - - - ImgRip.Program - true - false - Client - SAK - SAK - SAK - SAK - publish\ - true - Web - true - Foreground - 7 - Days - false - false - false - https://imgrip.codeplex.com/releases/clickonce/ - https://imgrip.codeplex.com/discussions - https://imgrip.codeplex.com/workitem/list/basic - Image Ripper - Image Ripper - publish.htm - false - 301 - 1.2.7.%2a - true - true - true - false - - - true - full - false - bin\Debug\ - TRACE - prompt - 4 - AllRules.ruleset - AnyCPU - Off - true - - - none - true - bin\Release\ - - - none - 4 - BasicCorrectnessRules.ruleset - - - false - false - false - Off - false - AnyCPU - - - - x86 - bin\x86\Debug\ - - - x86 - bin\x86\Release\ - - - 495CCD02320F5B9615433DB4AB3EF631755F9BA1 - - - ImgRip.pfx - - - true - - - - - - LocalIntranet - - - Properties\app.manifest - - - - - - - false - - - - packages\Google.GData.AccessControl.2.2.0.0\lib\Google.GData.AccessControl.dll - - - packages\Google.GData.Client.2.2.0.0\lib\Google.GData.Client.dll - - - packages\Google.GData.Documents.2.2.0.0\lib\Google.GData.Documents.dll - - - packages\Google.GData.Extensions.2.2.0.0\lib\Google.GData.Extensions.dll - - - packages\Google.GData.Photos.2.2.0.0\lib\Google.GData.Photos.dll - - - packages\HtmlAgilityPack.1.4.6\lib\Net40-client\HtmlAgilityPack.dll - - - False - packages\Newtonsoft.Json.6.0.3\lib\net40\Newtonsoft.Json.dll - - - - - - - - - - Form - - - Main.cs - - - - Form - - - Sites.cs - - - Form - - - Batch.cs - - - - Form - - - - - Main.cs - - - Sites.cs - - - Batch.cs - Designer - - - ResXFileCodeGenerator - Resources.Designer.cs - Designer - - - True - Resources.resx - True - - - SetCookie.cs - - - - - - SettingsSingleFileGenerator - Settings.Designer.cs - - - True - Settings.settings - True - - - SetCookie.cs - - - - Form - - - Cloud.cs - - - Component - - - Designer - - - - - Cloud.cs - Designer - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 2.0 %28x86%29 - false - - - False - .NET Framework 3.0 %28x86%29 - false - - - False - .NET Framework 3.5 - false - - - False - .NET Framework 3.5 SP1 - false - - - - - - - - - Designer - - - - - - - - - - - - - - - - - - + + + + Debug + AnyCPU + 10.0.30319 + 2.0 + {2172F5C5-FAE4-47E4-8662-D3F6443DE0F5} + WinExe + Properties + ImgRip + ImageRipper + v4.0 + Client + 512 + true + download.ico + + + + ImgRip.Program + true + false + Client + SAK + SAK + SAK + SAK + publish\ + true + Web + true + Foreground + 7 + Days + false + false + false + https://imgrip.codeplex.com/releases/clickonce/ + https://imgrip.codeplex.com/discussions + https://imgrip.codeplex.com/workitem/list/basic + Image Ripper + Image Ripper + publish.htm + false + 301 + 1.2.7.%2a + true + true + true + false + + + true + full + false + bin\Debug\ + TRACE + prompt + 4 + AllRules.ruleset + AnyCPU + Off + true + + + none + true + bin\Release\ + + + none + 4 + BasicCorrectnessRules.ruleset + + + false + false + false + Off + false + AnyCPU + + + + x86 + bin\x86\Debug\ + + + x86 + bin\x86\Release\ + + + 495CCD02320F5B9615433DB4AB3EF631755F9BA1 + + + ImgRip.pfx + + + true + + + + + + LocalIntranet + + + Properties\app.manifest + + + + + + + false + + + + packages\Google.GData.AccessControl.2.2.0.0\lib\Google.GData.AccessControl.dll + + + packages\Google.GData.Client.2.2.0.0\lib\Google.GData.Client.dll + + + packages\Google.GData.Documents.2.2.0.0\lib\Google.GData.Documents.dll + + + packages\Google.GData.Extensions.2.2.0.0\lib\Google.GData.Extensions.dll + + + packages\Google.GData.Photos.2.2.0.0\lib\Google.GData.Photos.dll + + + packages\HtmlAgilityPack.1.4.6\lib\Net40-client\HtmlAgilityPack.dll + + + False + packages\Newtonsoft.Json.6.0.3\lib\net40\Newtonsoft.Json.dll + + + + + + + + + + Form + + + Main.cs + + + + Form + + + Sites.cs + + + Form + + + Batch.cs + + + + Form + + + + + Main.cs + + + Sites.cs + + + Batch.cs + Designer + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + SetCookie.cs + + + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + SetCookie.cs + + + + Form + + + Cloud.cs + + + Component + + + Designer + + + + + Cloud.cs + Designer + + + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 2.0 %28x86%29 + false + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + False + .NET Framework 3.5 SP1 + false + + + + + + + + + Designer + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ImgRip.csproj.vspscc b/ImgRip.csproj.vspscc index feffdec..b6d3289 100644 --- a/ImgRip.csproj.vspscc +++ b/ImgRip.csproj.vspscc @@ -1,10 +1,10 @@ -"" -{ -"FILE_VERSION" = "9237" -"ENLISTMENT_CHOICE" = "NEVER" -"PROJECT_FILE_RELATIVE_PATH" = "" -"NUMBER_OF_EXCLUDED_FILES" = "0" -"ORIGINAL_PROJECT_FILE_PATH" = "" -"NUMBER_OF_NESTED_PROJECTS" = "0" -"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER" -} +"" +{ +"FILE_VERSION" = "9237" +"ENLISTMENT_CHOICE" = "NEVER" +"PROJECT_FILE_RELATIVE_PATH" = "" +"NUMBER_OF_EXCLUDED_FILES" = "0" +"ORIGINAL_PROJECT_FILE_PATH" = "" +"NUMBER_OF_NESTED_PROJECTS" = "0" +"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER" +} diff --git a/Main.Designer.cs b/Main.Designer.cs index 98bbc13..5f0ee18 100644 --- a/Main.Designer.cs +++ b/Main.Designer.cs @@ -1,576 +1,576 @@ -namespace ImgRip -{ - partial class Main - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.components = new System.ComponentModel.Container(); - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Main)); - this.mainSplit = new System.Windows.Forms.SplitContainer(); - this.llSites = new System.Windows.Forms.LinkLabel(); - this.btnGo = new ImgRip.SplitButton(); - this.cmsBatch = new System.Windows.Forms.ContextMenuStrip(this.components); - this.btnBatch = new System.Windows.Forms.ToolStripMenuItem(); - this.tbParse = new System.Windows.Forms.TextBox(); - this.llCookie = new System.Windows.Forms.LinkLabel(); - this.llFolder = new System.Windows.Forms.LinkLabel(); - this.lvRip = new System.Windows.Forms.ListView(); - this.chName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this.chNumber = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this.chSize = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this.chState = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this.cmsLV = new System.Windows.Forms.ContextMenuStrip(this.components); - this.cmmiNextPage = new System.Windows.Forms.ToolStripMenuItem(); - this.cmmiDropGroup = new System.Windows.Forms.ToolStripMenuItem(); - this.cmmiCopyName = new System.Windows.Forms.ToolStripMenuItem(); - this.cmmiSave = new System.Windows.Forms.ToolStripMenuItem(); - this.cmmiRemove = new System.Windows.Forms.ToolStripMenuItem(); - this.cmmiClear = new System.Windows.Forms.ToolStripMenuItem(); - this.cmmiBatch = new System.Windows.Forms.ToolStripMenuItem(); - this.cmmiPreview = new System.Windows.Forms.ToolStripMenuItem(); - this.RipStatus = new System.Windows.Forms.StatusStrip(); - this.tsLabel = new System.Windows.Forms.ToolStripStatusLabel(); - this.lbBatch = new System.Windows.Forms.ToolStripStatusLabel(); - this.tsPB = new System.Windows.Forms.ToolStripProgressBar(); - this.tsCloud = new System.Windows.Forms.ToolStripSplitButton(); - this.tsiGData = new System.Windows.Forms.ToolStripMenuItem(); - this.tsiPicasa = new System.Windows.Forms.ToolStripMenuItem(); - this.tsHome = new System.Windows.Forms.ToolStripStatusLabel(); - this.lblUrl = new System.Windows.Forms.Label(); - this.tbDir = new System.Windows.Forms.TextBox(); - this.pbPreview = new System.Windows.Forms.PictureBox(); - this.bwFetch = new System.ComponentModel.BackgroundWorker(); - this.ttRipper = new System.Windows.Forms.ToolTip(this.components); - this.tmMinus = new System.Windows.Forms.Timer(this.components); - this.tmPlus = new System.Windows.Forms.Timer(this.components); - this.fbDir = new System.Windows.Forms.FolderBrowserDialog(); - ((System.ComponentModel.ISupportInitialize)(this.mainSplit)).BeginInit(); - this.mainSplit.Panel1.SuspendLayout(); - this.mainSplit.Panel2.SuspendLayout(); - this.mainSplit.SuspendLayout(); - this.cmsBatch.SuspendLayout(); - this.cmsLV.SuspendLayout(); - this.RipStatus.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pbPreview)).BeginInit(); - this.SuspendLayout(); - // - // mainSplit - // - this.mainSplit.Dock = System.Windows.Forms.DockStyle.Fill; - this.mainSplit.Location = new System.Drawing.Point(0, 0); - this.mainSplit.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.mainSplit.Name = "mainSplit"; - // - // mainSplit.Panel1 - // - this.mainSplit.Panel1.Controls.Add(this.llSites); - this.mainSplit.Panel1.Controls.Add(this.btnGo); - this.mainSplit.Panel1.Controls.Add(this.tbParse); - this.mainSplit.Panel1.Controls.Add(this.llCookie); - this.mainSplit.Panel1.Controls.Add(this.llFolder); - this.mainSplit.Panel1.Controls.Add(this.lvRip); - this.mainSplit.Panel1.Controls.Add(this.RipStatus); - this.mainSplit.Panel1.Controls.Add(this.lblUrl); - this.mainSplit.Panel1.Controls.Add(this.tbDir); - this.mainSplit.Panel1.Padding = new System.Windows.Forms.Padding(1); - this.mainSplit.Panel1MinSize = 0; - // - // mainSplit.Panel2 - // - this.mainSplit.Panel2.Controls.Add(this.pbPreview); - this.mainSplit.Panel2Collapsed = true; - this.mainSplit.Panel2MinSize = 0; - this.mainSplit.Size = new System.Drawing.Size(787, 488); - this.mainSplit.SplitterDistance = 407; - this.mainSplit.SplitterWidth = 5; - this.mainSplit.TabIndex = 23; - // - // llSites - // - this.llSites.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.llSites.AutoSize = true; - this.llSites.Font = new System.Drawing.Font("Microsoft YaHei", 10F, System.Drawing.FontStyle.Bold); - this.llSites.LinkColor = System.Drawing.SystemColors.Highlight; - this.llSites.Location = new System.Drawing.Point(646, 14); - this.llSites.Name = "llSites"; - this.llSites.Size = new System.Drawing.Size(42, 19); - this.llSites.TabIndex = 33; - this.llSites.TabStop = true; - this.llSites.Text = "Sites"; - this.ttRipper.SetToolTip(this.llSites, "Support sites list"); - this.llSites.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.llSites_LinkClicked); - // - // btnGo - // - this.btnGo.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.btnGo.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.btnGo.ContextMenuStrip = this.cmsBatch; - this.btnGo.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.btnGo.Font = new System.Drawing.Font("Microsoft YaHei", 12F, System.Drawing.FontStyle.Bold); - this.btnGo.Image = global::ImgRip.Properties.Resources.Download; - this.btnGo.Location = new System.Drawing.Point(708, 5); - this.btnGo.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.btnGo.Name = "btnGo"; - this.btnGo.Size = new System.Drawing.Size(71, 73); - this.btnGo.TabIndex = 3; - this.btnGo.TabStop = false; - this.btnGo.Tag = ""; - this.ttRipper.SetToolTip(this.btnGo, "Start/Stop, Page Up/Down"); - this.btnGo.UseVisualStyleBackColor = true; - this.btnGo.Click += new System.EventHandler(this.Go_Click); - // - // cmsBatch - // - this.cmsBatch.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.btnBatch}); - this.cmsBatch.Name = "cmsButton"; - this.cmsBatch.ShowItemToolTips = false; - this.cmsBatch.Size = new System.Drawing.Size(110, 26); - // - // btnBatch - // - this.btnBatch.Font = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Bold); - this.btnBatch.Image = global::ImgRip.Properties.Resources.Batch; - this.btnBatch.Name = "btnBatch"; - this.btnBatch.Size = new System.Drawing.Size(109, 22); - this.btnBatch.Text = "Batch"; - this.btnBatch.TextImageRelation = System.Windows.Forms.TextImageRelation.Overlay; - this.btnBatch.Click += new System.EventHandler(this.btnBatch_Click); - // - // tbParse - // - this.tbParse.AllowDrop = true; - this.tbParse.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.tbParse.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend; - this.tbParse.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.AllUrl; - this.tbParse.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::ImgRip.Properties.Settings.Default, "Url", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - this.tbParse.Font = new System.Drawing.Font("Microsoft YaHei", 9F); - this.tbParse.Location = new System.Drawing.Point(43, 13); - this.tbParse.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.tbParse.Name = "tbParse"; - this.tbParse.Size = new System.Drawing.Size(595, 23); - this.tbParse.TabIndex = 20; - this.tbParse.TabStop = false; - this.tbParse.Text = global::ImgRip.Properties.Settings.Default.Url; - this.tbParse.WordWrap = false; - this.tbParse.MouseClick += new System.Windows.Forms.MouseEventHandler(this.tb_MouseClick); - this.tbParse.DragDrop += new System.Windows.Forms.DragEventHandler(this.tbParse_DragDrop); - this.tbParse.DragEnter += new System.Windows.Forms.DragEventHandler(this.tbParse_DragEnter); - this.tbParse.Leave += new System.EventHandler(this.tb_Leave); - // - // llCookie - // - this.llCookie.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.llCookie.AutoSize = true; - this.llCookie.Font = new System.Drawing.Font("Microsoft YaHei", 10F, System.Drawing.FontStyle.Bold); - this.llCookie.LinkColor = System.Drawing.SystemColors.Highlight; - this.llCookie.Location = new System.Drawing.Point(646, 56); - this.llCookie.Name = "llCookie"; - this.llCookie.Size = new System.Drawing.Size(56, 19); - this.llCookie.TabIndex = 32; - this.llCookie.TabStop = true; - this.llCookie.Text = "Cookie"; - this.ttRipper.SetToolTip(this.llCookie, "Set Cookie value"); - this.llCookie.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.llCookie_LinkClicked); - // - // llFolder - // - this.llFolder.AutoSize = true; - this.llFolder.Font = new System.Drawing.Font("Microsoft YaHei", 10F, System.Drawing.FontStyle.Bold); - this.llFolder.LinkColor = System.Drawing.SystemColors.Highlight; - this.llFolder.Location = new System.Drawing.Point(4, 55); - this.llFolder.Name = "llFolder"; - this.llFolder.Size = new System.Drawing.Size(30, 19); - this.llFolder.TabIndex = 31; - this.llFolder.TabStop = true; - this.llFolder.Text = "Dir"; - this.llFolder.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; - this.llFolder.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.llFolder_LinkClicked); - // - // lvRip - // - this.lvRip.AllowColumnReorder = true; - this.lvRip.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.lvRip.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { - this.chName, - this.chNumber, - this.chSize, - this.chState}); - this.lvRip.ContextMenuStrip = this.cmsLV; - this.lvRip.ForeColor = System.Drawing.SystemColors.HotTrack; - this.lvRip.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; - this.lvRip.Location = new System.Drawing.Point(1, 85); - this.lvRip.Name = "lvRip"; - this.lvRip.ShowItemToolTips = true; - this.lvRip.Size = new System.Drawing.Size(785, 380); - this.lvRip.TabIndex = 30; - this.lvRip.UseCompatibleStateImageBehavior = false; - this.lvRip.View = System.Windows.Forms.View.Details; - this.lvRip.SelectedIndexChanged += new System.EventHandler(this.lvSelectedIndexChanged); - this.lvRip.KeyDown += new System.Windows.Forms.KeyEventHandler(this.lvKeyDown); - // - // chName - // - this.chName.DisplayIndex = 1; - this.chName.Text = "Name"; - this.chName.Width = 150; - // - // chNumber - // - this.chNumber.DisplayIndex = 0; - this.chNumber.Text = "No."; - this.chNumber.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; - this.chNumber.Width = 40; - // - // chSize - // - this.chSize.Text = "Size"; - this.chSize.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; - // - // chState - // - this.chState.Text = "State"; - this.chState.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; - this.chState.Width = 147; - // - // cmsLV - // - this.cmsLV.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.cmmiNextPage, - this.cmmiDropGroup, - this.cmmiCopyName, - this.cmmiSave, - this.cmmiRemove, - this.cmmiClear, - this.cmmiBatch, - this.cmmiPreview}); - this.cmsLV.Name = "contextMenuStrip1"; - this.cmsLV.ShowCheckMargin = true; - this.cmsLV.ShowImageMargin = false; - this.cmsLV.ShowItemToolTips = false; - this.cmsLV.Size = new System.Drawing.Size(118, 180); - this.cmsLV.Opening += new System.ComponentModel.CancelEventHandler(this.cmsLV_Opening); - // - // cmmiNextPage - // - this.cmmiNextPage.Name = "cmmiNextPage"; - this.cmmiNextPage.Size = new System.Drawing.Size(117, 22); - this.cmmiNextPage.Text = "Next"; - this.cmmiNextPage.Visible = false; - this.cmmiNextPage.Click += new System.EventHandler(this.cmmiNextPage_Click); - // - // cmmiDropGroup - // - this.cmmiDropGroup.Name = "cmmiDropGroup"; - this.cmmiDropGroup.Size = new System.Drawing.Size(117, 22); - this.cmmiDropGroup.Text = "Drop"; - this.cmmiDropGroup.Visible = false; - this.cmmiDropGroup.Click += new System.EventHandler(this.cmmiDrop_Click); - // - // cmmiCopyName - // - this.cmmiCopyName.Name = "cmmiCopyName"; - this.cmmiCopyName.Size = new System.Drawing.Size(117, 22); - this.cmmiCopyName.Text = "Copy"; - this.cmmiCopyName.Visible = false; - this.cmmiCopyName.Click += new System.EventHandler(this.cmmiCopyName_Click); - // - // cmmiSave - // - this.cmmiSave.Name = "cmmiSave"; - this.cmmiSave.Size = new System.Drawing.Size(117, 22); - this.cmmiSave.Text = "Save"; - this.cmmiSave.Visible = false; - this.cmmiSave.Click += new System.EventHandler(this.cmmiDownloadFile); - // - // cmmiRemove - // - this.cmmiRemove.Name = "cmmiRemove"; - this.cmmiRemove.Size = new System.Drawing.Size(117, 22); - this.cmmiRemove.Text = "Remove"; - this.cmmiRemove.Visible = false; - this.cmmiRemove.Click += new System.EventHandler(this.cmmiDeleteFile); - // - // cmmiClear - // - this.cmmiClear.Name = "cmmiClear"; - this.cmmiClear.Size = new System.Drawing.Size(117, 22); - this.cmmiClear.Text = "Clear"; - this.cmmiClear.Visible = false; - this.cmmiClear.Click += new System.EventHandler(this.btnClear_Click); - // - // cmmiBatch - // - this.cmmiBatch.CheckOnClick = true; - this.cmmiBatch.Name = "cmmiBatch"; - this.cmmiBatch.Size = new System.Drawing.Size(117, 22); - this.cmmiBatch.Text = "Batch"; - this.cmmiBatch.Visible = false; - this.cmmiBatch.CheckedChanged += new System.EventHandler(this.cmmiBatch_CheckedChanged); - // - // cmmiPreview - // - this.cmmiPreview.Checked = true; - this.cmmiPreview.CheckOnClick = true; - this.cmmiPreview.CheckState = System.Windows.Forms.CheckState.Checked; - this.cmmiPreview.Name = "cmmiPreview"; - this.cmmiPreview.Size = new System.Drawing.Size(117, 22); - this.cmmiPreview.Text = "Preview"; - // - // RipStatus - // - this.RipStatus.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.RipStatus.AutoSize = false; - this.RipStatus.Dock = System.Windows.Forms.DockStyle.None; - this.RipStatus.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold); - this.RipStatus.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.tsLabel, - this.lbBatch, - this.tsPB, - this.tsCloud, - this.tsHome}); - this.RipStatus.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.HorizontalStackWithOverflow; - this.RipStatus.Location = new System.Drawing.Point(1, 465); - this.RipStatus.Name = "RipStatus"; - this.RipStatus.Padding = new System.Windows.Forms.Padding(1, 0, 16, 0); - this.RipStatus.ShowItemToolTips = true; - this.RipStatus.Size = new System.Drawing.Size(785, 22); - this.RipStatus.TabIndex = 22; - // - // tsLabel - // - this.tsLabel.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; - this.tsLabel.Font = new System.Drawing.Font("Microsoft YaHei", 9F, System.Drawing.FontStyle.Bold); - this.tsLabel.ForeColor = System.Drawing.SystemColors.Highlight; - this.tsLabel.Name = "tsLabel"; - this.tsLabel.Size = new System.Drawing.Size(41, 17); - this.tsLabel.Text = "Done"; - // - // lbBatch - // - this.lbBatch.Font = new System.Drawing.Font("Segoe UI", 11.25F, System.Drawing.FontStyle.Bold); - this.lbBatch.ForeColor = System.Drawing.SystemColors.MenuHighlight; - this.lbBatch.Name = "lbBatch"; - this.lbBatch.Size = new System.Drawing.Size(0, 17); - // - // tsPB - // - this.tsPB.Name = "tsPB"; - this.tsPB.Size = new System.Drawing.Size(100, 16); - this.tsPB.Visible = false; - // - // tsCloud - // - this.tsCloud.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right; - this.tsCloud.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; - this.tsCloud.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.tsiGData, - this.tsiPicasa}); - this.tsCloud.Image = ((System.Drawing.Image)(resources.GetObject("tsCloud.Image"))); - this.tsCloud.Name = "tsCloud"; - this.tsCloud.RightToLeft = System.Windows.Forms.RightToLeft.No; - this.tsCloud.Size = new System.Drawing.Size(32, 20); - this.tsCloud.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; - this.tsCloud.ToolTipText = "Cloud web storage service."; - this.tsCloud.Click += new System.EventHandler(this.CloudToolStrip_Click); - // - // tsiGData - // - this.tsiGData.Image = ((System.Drawing.Image)(resources.GetObject("tsiGData.Image"))); - this.tsiGData.Name = "tsiGData"; - this.tsiGData.Size = new System.Drawing.Size(114, 22); - this.tsiGData.Text = "GDrive"; - this.tsiGData.Click += new System.EventHandler(this.CloudItem_Click); - // - // tsiPicasa - // - this.tsiPicasa.Image = ((System.Drawing.Image)(resources.GetObject("tsiPicasa.Image"))); - this.tsiPicasa.Name = "tsiPicasa"; - this.tsiPicasa.Size = new System.Drawing.Size(114, 22); - this.tsiPicasa.Text = "Picasa"; - this.tsiPicasa.Click += new System.EventHandler(this.CloudItem_Click); - // - // tsHome - // - this.tsHome.AutoToolTip = true; - this.tsHome.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; - this.tsHome.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold); - this.tsHome.Image = ((System.Drawing.Image)(resources.GetObject("tsHome.Image"))); - this.tsHome.IsLink = true; - this.tsHome.LinkBehavior = System.Windows.Forms.LinkBehavior.HoverUnderline; - this.tsHome.Margin = new System.Windows.Forms.Padding(0, 3, 5, 2); - this.tsHome.Name = "tsHome"; - this.tsHome.Size = new System.Drawing.Size(16, 17); - this.tsHome.TextImageRelation = System.Windows.Forms.TextImageRelation.Overlay; - this.tsHome.ToolTipText = "Home at CodePlex"; - this.tsHome.Click += new System.EventHandler(this.tsHome_Click); - // - // lblUrl - // - this.lblUrl.AutoSize = true; - this.lblUrl.Font = new System.Drawing.Font("Microsoft YaHei", 10F, System.Drawing.FontStyle.Bold); - this.lblUrl.Location = new System.Drawing.Point(4, 14); - this.lblUrl.Name = "lblUrl"; - this.lblUrl.Size = new System.Drawing.Size(34, 19); - this.lblUrl.TabIndex = 19; - this.lblUrl.Text = "Url:"; - // - // tbDir - // - this.tbDir.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.tbDir.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend; - this.tbDir.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.FileSystemDirectories; - this.tbDir.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::ImgRip.Properties.Settings.Default, "Dir", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - this.tbDir.Font = new System.Drawing.Font("Microsoft YaHei", 9F); - this.tbDir.Location = new System.Drawing.Point(43, 55); - this.tbDir.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.tbDir.Name = "tbDir"; - this.tbDir.Size = new System.Drawing.Size(595, 23); - this.tbDir.TabIndex = 4; - this.tbDir.TabStop = false; - this.tbDir.Text = global::ImgRip.Properties.Settings.Default.Dir; - this.tbDir.MouseClick += new System.Windows.Forms.MouseEventHandler(this.tb_MouseClick); - this.tbDir.Leave += new System.EventHandler(this.tb_Leave); - // - // pbPreview - // - this.pbPreview.BackColor = System.Drawing.SystemColors.ActiveCaptionText; - this.pbPreview.Dock = System.Windows.Forms.DockStyle.Fill; - this.pbPreview.InitialImage = null; - this.pbPreview.Location = new System.Drawing.Point(0, 0); - this.pbPreview.Margin = new System.Windows.Forms.Padding(0); - this.pbPreview.Name = "pbPreview"; - this.pbPreview.Size = new System.Drawing.Size(96, 100); - this.pbPreview.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; - this.pbPreview.TabIndex = 22; - this.pbPreview.TabStop = false; - this.pbPreview.DoubleClick += new System.EventHandler(this.pbDoubleClick); - // - // bwFetch - // - this.bwFetch.WorkerReportsProgress = true; - this.bwFetch.WorkerSupportsCancellation = true; - this.bwFetch.DoWork += new System.ComponentModel.DoWorkEventHandler(this.Fetch_DoWork); - this.bwFetch.ProgressChanged += new System.ComponentModel.ProgressChangedEventHandler(this.DownloadFiles_ProgressChanged); - this.bwFetch.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(this.DownloadFiles_RunWorkerCompleted); - // - // ttRipper - // - this.ttRipper.AutomaticDelay = 300; - // - // tmMinus - // - this.tmMinus.Tick += new System.EventHandler(this.btnMinus_Click); - // - // tmPlus - // - this.tmPlus.Tick += new System.EventHandler(this.btnPlus_Click); - // - // fbDir - // - this.fbDir.Description = "Select folder to store files"; - this.fbDir.SelectedPath = global::ImgRip.Properties.Settings.Default.Dir; - // - // Main - // - this.AcceptButton = this.btnGo; - this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 17F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(787, 488); - this.Controls.Add(this.mainSplit); - this.Font = new System.Drawing.Font("Microsoft YaHei", 9F); - this.ForeColor = System.Drawing.SystemColors.WindowText; - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.KeyPreview = true; - this.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.MinimumSize = new System.Drawing.Size(450, 300); - this.Name = "Main"; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; - this.Text = "Image Ripper - F11: FullScreen, [Shift+] Space: Preview ON|OFF"; - this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.Ripper_KeyDown); - this.mainSplit.Panel1.ResumeLayout(false); - this.mainSplit.Panel1.PerformLayout(); - this.mainSplit.Panel2.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.mainSplit)).EndInit(); - this.mainSplit.ResumeLayout(false); - this.cmsBatch.ResumeLayout(false); - this.cmsLV.ResumeLayout(false); - this.RipStatus.ResumeLayout(false); - this.RipStatus.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pbPreview)).EndInit(); - this.ResumeLayout(false); - - } - - #endregion - - private SplitButton btnGo; - private System.Windows.Forms.TextBox tbDir; - private System.Windows.Forms.FolderBrowserDialog fbDir; - private System.Windows.Forms.Label lblUrl; - private System.Windows.Forms.TextBox tbParse; - private System.Windows.Forms.PictureBox pbPreview; - private System.Windows.Forms.SplitContainer mainSplit; - private System.Windows.Forms.StatusStrip RipStatus; - private System.Windows.Forms.ToolStripStatusLabel tsLabel; - private System.Windows.Forms.ToolTip ttRipper; - private System.Windows.Forms.Timer tmMinus; - private System.Windows.Forms.Timer tmPlus; - private System.Windows.Forms.ContextMenuStrip cmsLV; - private System.Windows.Forms.ToolStripMenuItem cmmiNextPage; - private System.Windows.Forms.ToolStripMenuItem cmmiDropGroup; - private System.Windows.Forms.ToolStripStatusLabel lbBatch; - private System.Windows.Forms.ContextMenuStrip cmsBatch; - private System.Windows.Forms.ToolStripMenuItem btnBatch; - private System.Windows.Forms.ToolStripMenuItem cmmiClear; - private System.Windows.Forms.ListView lvRip; - private System.Windows.Forms.ColumnHeader chName; - private System.Windows.Forms.ColumnHeader chSize; - private System.Windows.Forms.ColumnHeader chState; - private System.Windows.Forms.ToolStripMenuItem cmmiCopyName; - private System.Windows.Forms.LinkLabel llFolder; - private System.Windows.Forms.LinkLabel llCookie; - private System.Windows.Forms.ToolStripMenuItem cmmiSave; - private System.Windows.Forms.ToolStripMenuItem cmmiRemove; - private System.Windows.Forms.ToolStripSplitButton tsCloud; - private System.Windows.Forms.ToolStripProgressBar tsPB; - private System.Windows.Forms.ToolStripMenuItem tsiGData; - private System.Windows.Forms.ToolStripMenuItem tsiPicasa; - private System.Windows.Forms.ColumnHeader chNumber; - private System.Windows.Forms.ToolStripStatusLabel tsHome; - private System.ComponentModel.BackgroundWorker bwFetch; - private System.Windows.Forms.LinkLabel llSites; - private System.Windows.Forms.ToolStripMenuItem cmmiBatch; - private System.Windows.Forms.ToolStripMenuItem cmmiPreview; - } -} - +namespace ImgRip +{ + partial class Main + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Main)); + this.mainSplit = new System.Windows.Forms.SplitContainer(); + this.llSites = new System.Windows.Forms.LinkLabel(); + this.btnGo = new ImgRip.SplitButton(); + this.cmsBatch = new System.Windows.Forms.ContextMenuStrip(this.components); + this.btnBatch = new System.Windows.Forms.ToolStripMenuItem(); + this.tbParse = new System.Windows.Forms.TextBox(); + this.llCookie = new System.Windows.Forms.LinkLabel(); + this.llFolder = new System.Windows.Forms.LinkLabel(); + this.lvRip = new System.Windows.Forms.ListView(); + this.chName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.chNumber = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.chSize = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.chState = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.cmsLV = new System.Windows.Forms.ContextMenuStrip(this.components); + this.cmmiNextPage = new System.Windows.Forms.ToolStripMenuItem(); + this.cmmiDropGroup = new System.Windows.Forms.ToolStripMenuItem(); + this.cmmiCopyName = new System.Windows.Forms.ToolStripMenuItem(); + this.cmmiSave = new System.Windows.Forms.ToolStripMenuItem(); + this.cmmiRemove = new System.Windows.Forms.ToolStripMenuItem(); + this.cmmiClear = new System.Windows.Forms.ToolStripMenuItem(); + this.cmmiBatch = new System.Windows.Forms.ToolStripMenuItem(); + this.cmmiPreview = new System.Windows.Forms.ToolStripMenuItem(); + this.RipStatus = new System.Windows.Forms.StatusStrip(); + this.tsLabel = new System.Windows.Forms.ToolStripStatusLabel(); + this.lbBatch = new System.Windows.Forms.ToolStripStatusLabel(); + this.tsPB = new System.Windows.Forms.ToolStripProgressBar(); + this.tsCloud = new System.Windows.Forms.ToolStripSplitButton(); + this.tsiGData = new System.Windows.Forms.ToolStripMenuItem(); + this.tsiPicasa = new System.Windows.Forms.ToolStripMenuItem(); + this.tsHome = new System.Windows.Forms.ToolStripStatusLabel(); + this.lblUrl = new System.Windows.Forms.Label(); + this.tbDir = new System.Windows.Forms.TextBox(); + this.pbPreview = new System.Windows.Forms.PictureBox(); + this.bwFetch = new System.ComponentModel.BackgroundWorker(); + this.ttRipper = new System.Windows.Forms.ToolTip(this.components); + this.tmMinus = new System.Windows.Forms.Timer(this.components); + this.tmPlus = new System.Windows.Forms.Timer(this.components); + this.fbDir = new System.Windows.Forms.FolderBrowserDialog(); + ((System.ComponentModel.ISupportInitialize)(this.mainSplit)).BeginInit(); + this.mainSplit.Panel1.SuspendLayout(); + this.mainSplit.Panel2.SuspendLayout(); + this.mainSplit.SuspendLayout(); + this.cmsBatch.SuspendLayout(); + this.cmsLV.SuspendLayout(); + this.RipStatus.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbPreview)).BeginInit(); + this.SuspendLayout(); + // + // mainSplit + // + this.mainSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.mainSplit.Location = new System.Drawing.Point(0, 0); + this.mainSplit.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.mainSplit.Name = "mainSplit"; + // + // mainSplit.Panel1 + // + this.mainSplit.Panel1.Controls.Add(this.llSites); + this.mainSplit.Panel1.Controls.Add(this.btnGo); + this.mainSplit.Panel1.Controls.Add(this.tbParse); + this.mainSplit.Panel1.Controls.Add(this.llCookie); + this.mainSplit.Panel1.Controls.Add(this.llFolder); + this.mainSplit.Panel1.Controls.Add(this.lvRip); + this.mainSplit.Panel1.Controls.Add(this.RipStatus); + this.mainSplit.Panel1.Controls.Add(this.lblUrl); + this.mainSplit.Panel1.Controls.Add(this.tbDir); + this.mainSplit.Panel1.Padding = new System.Windows.Forms.Padding(1); + this.mainSplit.Panel1MinSize = 0; + // + // mainSplit.Panel2 + // + this.mainSplit.Panel2.Controls.Add(this.pbPreview); + this.mainSplit.Panel2Collapsed = true; + this.mainSplit.Panel2MinSize = 0; + this.mainSplit.Size = new System.Drawing.Size(787, 488); + this.mainSplit.SplitterDistance = 407; + this.mainSplit.SplitterWidth = 5; + this.mainSplit.TabIndex = 23; + // + // llSites + // + this.llSites.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.llSites.AutoSize = true; + this.llSites.Font = new System.Drawing.Font("Microsoft YaHei", 10F, System.Drawing.FontStyle.Bold); + this.llSites.LinkColor = System.Drawing.SystemColors.Highlight; + this.llSites.Location = new System.Drawing.Point(646, 14); + this.llSites.Name = "llSites"; + this.llSites.Size = new System.Drawing.Size(42, 19); + this.llSites.TabIndex = 33; + this.llSites.TabStop = true; + this.llSites.Text = "Sites"; + this.ttRipper.SetToolTip(this.llSites, "Support sites list"); + this.llSites.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.llSites_LinkClicked); + // + // btnGo + // + this.btnGo.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnGo.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.btnGo.ContextMenuStrip = this.cmsBatch; + this.btnGo.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.btnGo.Font = new System.Drawing.Font("Microsoft YaHei", 12F, System.Drawing.FontStyle.Bold); + this.btnGo.Image = global::ImgRip.Properties.Resources.Download; + this.btnGo.Location = new System.Drawing.Point(708, 5); + this.btnGo.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.btnGo.Name = "btnGo"; + this.btnGo.Size = new System.Drawing.Size(71, 73); + this.btnGo.TabIndex = 3; + this.btnGo.TabStop = false; + this.btnGo.Tag = ""; + this.ttRipper.SetToolTip(this.btnGo, "Start/Stop, Page Up/Down"); + this.btnGo.UseVisualStyleBackColor = true; + this.btnGo.Click += new System.EventHandler(this.Go_Click); + // + // cmsBatch + // + this.cmsBatch.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.btnBatch}); + this.cmsBatch.Name = "cmsButton"; + this.cmsBatch.ShowItemToolTips = false; + this.cmsBatch.Size = new System.Drawing.Size(110, 26); + // + // btnBatch + // + this.btnBatch.Font = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Bold); + this.btnBatch.Image = global::ImgRip.Properties.Resources.Batch; + this.btnBatch.Name = "btnBatch"; + this.btnBatch.Size = new System.Drawing.Size(109, 22); + this.btnBatch.Text = "Batch"; + this.btnBatch.TextImageRelation = System.Windows.Forms.TextImageRelation.Overlay; + this.btnBatch.Click += new System.EventHandler(this.btnBatch_Click); + // + // tbParse + // + this.tbParse.AllowDrop = true; + this.tbParse.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.tbParse.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend; + this.tbParse.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.AllUrl; + this.tbParse.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::ImgRip.Properties.Settings.Default, "Url", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.tbParse.Font = new System.Drawing.Font("Microsoft YaHei", 9F); + this.tbParse.Location = new System.Drawing.Point(43, 13); + this.tbParse.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.tbParse.Name = "tbParse"; + this.tbParse.Size = new System.Drawing.Size(595, 23); + this.tbParse.TabIndex = 20; + this.tbParse.TabStop = false; + this.tbParse.Text = global::ImgRip.Properties.Settings.Default.Url; + this.tbParse.WordWrap = false; + this.tbParse.MouseClick += new System.Windows.Forms.MouseEventHandler(this.tb_MouseClick); + this.tbParse.DragDrop += new System.Windows.Forms.DragEventHandler(this.tbParse_DragDrop); + this.tbParse.DragEnter += new System.Windows.Forms.DragEventHandler(this.tbParse_DragEnter); + this.tbParse.Leave += new System.EventHandler(this.tb_Leave); + // + // llCookie + // + this.llCookie.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.llCookie.AutoSize = true; + this.llCookie.Font = new System.Drawing.Font("Microsoft YaHei", 10F, System.Drawing.FontStyle.Bold); + this.llCookie.LinkColor = System.Drawing.SystemColors.Highlight; + this.llCookie.Location = new System.Drawing.Point(646, 56); + this.llCookie.Name = "llCookie"; + this.llCookie.Size = new System.Drawing.Size(56, 19); + this.llCookie.TabIndex = 32; + this.llCookie.TabStop = true; + this.llCookie.Text = "Cookie"; + this.ttRipper.SetToolTip(this.llCookie, "Set Cookie value"); + this.llCookie.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.llCookie_LinkClicked); + // + // llFolder + // + this.llFolder.AutoSize = true; + this.llFolder.Font = new System.Drawing.Font("Microsoft YaHei", 10F, System.Drawing.FontStyle.Bold); + this.llFolder.LinkColor = System.Drawing.SystemColors.Highlight; + this.llFolder.Location = new System.Drawing.Point(4, 55); + this.llFolder.Name = "llFolder"; + this.llFolder.Size = new System.Drawing.Size(30, 19); + this.llFolder.TabIndex = 31; + this.llFolder.TabStop = true; + this.llFolder.Text = "Dir"; + this.llFolder.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + this.llFolder.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.llFolder_LinkClicked); + // + // lvRip + // + this.lvRip.AllowColumnReorder = true; + this.lvRip.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.lvRip.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.chName, + this.chNumber, + this.chSize, + this.chState}); + this.lvRip.ContextMenuStrip = this.cmsLV; + this.lvRip.ForeColor = System.Drawing.SystemColors.HotTrack; + this.lvRip.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; + this.lvRip.Location = new System.Drawing.Point(1, 85); + this.lvRip.Name = "lvRip"; + this.lvRip.ShowItemToolTips = true; + this.lvRip.Size = new System.Drawing.Size(785, 380); + this.lvRip.TabIndex = 30; + this.lvRip.UseCompatibleStateImageBehavior = false; + this.lvRip.View = System.Windows.Forms.View.Details; + this.lvRip.SelectedIndexChanged += new System.EventHandler(this.lvSelectedIndexChanged); + this.lvRip.KeyDown += new System.Windows.Forms.KeyEventHandler(this.lvKeyDown); + // + // chName + // + this.chName.DisplayIndex = 1; + this.chName.Text = "Name"; + this.chName.Width = 150; + // + // chNumber + // + this.chNumber.DisplayIndex = 0; + this.chNumber.Text = "No."; + this.chNumber.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + this.chNumber.Width = 40; + // + // chSize + // + this.chSize.Text = "Size"; + this.chSize.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + // + // chState + // + this.chState.Text = "State"; + this.chState.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + this.chState.Width = 147; + // + // cmsLV + // + this.cmsLV.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.cmmiNextPage, + this.cmmiDropGroup, + this.cmmiCopyName, + this.cmmiSave, + this.cmmiRemove, + this.cmmiClear, + this.cmmiBatch, + this.cmmiPreview}); + this.cmsLV.Name = "contextMenuStrip1"; + this.cmsLV.ShowCheckMargin = true; + this.cmsLV.ShowImageMargin = false; + this.cmsLV.ShowItemToolTips = false; + this.cmsLV.Size = new System.Drawing.Size(118, 180); + this.cmsLV.Opening += new System.ComponentModel.CancelEventHandler(this.cmsLV_Opening); + // + // cmmiNextPage + // + this.cmmiNextPage.Name = "cmmiNextPage"; + this.cmmiNextPage.Size = new System.Drawing.Size(117, 22); + this.cmmiNextPage.Text = "Next"; + this.cmmiNextPage.Visible = false; + this.cmmiNextPage.Click += new System.EventHandler(this.cmmiNextPage_Click); + // + // cmmiDropGroup + // + this.cmmiDropGroup.Name = "cmmiDropGroup"; + this.cmmiDropGroup.Size = new System.Drawing.Size(117, 22); + this.cmmiDropGroup.Text = "Drop"; + this.cmmiDropGroup.Visible = false; + this.cmmiDropGroup.Click += new System.EventHandler(this.cmmiDrop_Click); + // + // cmmiCopyName + // + this.cmmiCopyName.Name = "cmmiCopyName"; + this.cmmiCopyName.Size = new System.Drawing.Size(117, 22); + this.cmmiCopyName.Text = "Copy"; + this.cmmiCopyName.Visible = false; + this.cmmiCopyName.Click += new System.EventHandler(this.cmmiCopyName_Click); + // + // cmmiSave + // + this.cmmiSave.Name = "cmmiSave"; + this.cmmiSave.Size = new System.Drawing.Size(117, 22); + this.cmmiSave.Text = "Save"; + this.cmmiSave.Visible = false; + this.cmmiSave.Click += new System.EventHandler(this.cmmiDownloadFile); + // + // cmmiRemove + // + this.cmmiRemove.Name = "cmmiRemove"; + this.cmmiRemove.Size = new System.Drawing.Size(117, 22); + this.cmmiRemove.Text = "Remove"; + this.cmmiRemove.Visible = false; + this.cmmiRemove.Click += new System.EventHandler(this.cmmiDeleteFile); + // + // cmmiClear + // + this.cmmiClear.Name = "cmmiClear"; + this.cmmiClear.Size = new System.Drawing.Size(117, 22); + this.cmmiClear.Text = "Clear"; + this.cmmiClear.Visible = false; + this.cmmiClear.Click += new System.EventHandler(this.btnClear_Click); + // + // cmmiBatch + // + this.cmmiBatch.CheckOnClick = true; + this.cmmiBatch.Name = "cmmiBatch"; + this.cmmiBatch.Size = new System.Drawing.Size(117, 22); + this.cmmiBatch.Text = "Batch"; + this.cmmiBatch.Visible = false; + this.cmmiBatch.CheckedChanged += new System.EventHandler(this.cmmiBatch_CheckedChanged); + // + // cmmiPreview + // + this.cmmiPreview.Checked = true; + this.cmmiPreview.CheckOnClick = true; + this.cmmiPreview.CheckState = System.Windows.Forms.CheckState.Checked; + this.cmmiPreview.Name = "cmmiPreview"; + this.cmmiPreview.Size = new System.Drawing.Size(117, 22); + this.cmmiPreview.Text = "Preview"; + // + // RipStatus + // + this.RipStatus.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.RipStatus.AutoSize = false; + this.RipStatus.Dock = System.Windows.Forms.DockStyle.None; + this.RipStatus.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold); + this.RipStatus.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.tsLabel, + this.lbBatch, + this.tsPB, + this.tsCloud, + this.tsHome}); + this.RipStatus.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.HorizontalStackWithOverflow; + this.RipStatus.Location = new System.Drawing.Point(1, 465); + this.RipStatus.Name = "RipStatus"; + this.RipStatus.Padding = new System.Windows.Forms.Padding(1, 0, 16, 0); + this.RipStatus.ShowItemToolTips = true; + this.RipStatus.Size = new System.Drawing.Size(785, 22); + this.RipStatus.TabIndex = 22; + // + // tsLabel + // + this.tsLabel.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; + this.tsLabel.Font = new System.Drawing.Font("Microsoft YaHei", 9F, System.Drawing.FontStyle.Bold); + this.tsLabel.ForeColor = System.Drawing.SystemColors.Highlight; + this.tsLabel.Name = "tsLabel"; + this.tsLabel.Size = new System.Drawing.Size(41, 17); + this.tsLabel.Text = "Done"; + // + // lbBatch + // + this.lbBatch.Font = new System.Drawing.Font("Segoe UI", 11.25F, System.Drawing.FontStyle.Bold); + this.lbBatch.ForeColor = System.Drawing.SystemColors.MenuHighlight; + this.lbBatch.Name = "lbBatch"; + this.lbBatch.Size = new System.Drawing.Size(0, 17); + // + // tsPB + // + this.tsPB.Name = "tsPB"; + this.tsPB.Size = new System.Drawing.Size(100, 16); + this.tsPB.Visible = false; + // + // tsCloud + // + this.tsCloud.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right; + this.tsCloud.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.tsCloud.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.tsiGData, + this.tsiPicasa}); + this.tsCloud.Image = ((System.Drawing.Image)(resources.GetObject("tsCloud.Image"))); + this.tsCloud.Name = "tsCloud"; + this.tsCloud.RightToLeft = System.Windows.Forms.RightToLeft.No; + this.tsCloud.Size = new System.Drawing.Size(32, 20); + this.tsCloud.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; + this.tsCloud.ToolTipText = "Cloud web storage service."; + this.tsCloud.Click += new System.EventHandler(this.CloudToolStrip_Click); + // + // tsiGData + // + this.tsiGData.Image = ((System.Drawing.Image)(resources.GetObject("tsiGData.Image"))); + this.tsiGData.Name = "tsiGData"; + this.tsiGData.Size = new System.Drawing.Size(114, 22); + this.tsiGData.Text = "GDrive"; + this.tsiGData.Click += new System.EventHandler(this.CloudItem_Click); + // + // tsiPicasa + // + this.tsiPicasa.Image = ((System.Drawing.Image)(resources.GetObject("tsiPicasa.Image"))); + this.tsiPicasa.Name = "tsiPicasa"; + this.tsiPicasa.Size = new System.Drawing.Size(114, 22); + this.tsiPicasa.Text = "Picasa"; + this.tsiPicasa.Click += new System.EventHandler(this.CloudItem_Click); + // + // tsHome + // + this.tsHome.AutoToolTip = true; + this.tsHome.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.tsHome.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold); + this.tsHome.Image = ((System.Drawing.Image)(resources.GetObject("tsHome.Image"))); + this.tsHome.IsLink = true; + this.tsHome.LinkBehavior = System.Windows.Forms.LinkBehavior.HoverUnderline; + this.tsHome.Margin = new System.Windows.Forms.Padding(0, 3, 5, 2); + this.tsHome.Name = "tsHome"; + this.tsHome.Size = new System.Drawing.Size(16, 17); + this.tsHome.TextImageRelation = System.Windows.Forms.TextImageRelation.Overlay; + this.tsHome.ToolTipText = "Home at CodePlex"; + this.tsHome.Click += new System.EventHandler(this.tsHome_Click); + // + // lblUrl + // + this.lblUrl.AutoSize = true; + this.lblUrl.Font = new System.Drawing.Font("Microsoft YaHei", 10F, System.Drawing.FontStyle.Bold); + this.lblUrl.Location = new System.Drawing.Point(4, 14); + this.lblUrl.Name = "lblUrl"; + this.lblUrl.Size = new System.Drawing.Size(34, 19); + this.lblUrl.TabIndex = 19; + this.lblUrl.Text = "Url:"; + // + // tbDir + // + this.tbDir.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.tbDir.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend; + this.tbDir.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.FileSystemDirectories; + this.tbDir.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::ImgRip.Properties.Settings.Default, "Dir", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.tbDir.Font = new System.Drawing.Font("Microsoft YaHei", 9F); + this.tbDir.Location = new System.Drawing.Point(43, 55); + this.tbDir.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.tbDir.Name = "tbDir"; + this.tbDir.Size = new System.Drawing.Size(595, 23); + this.tbDir.TabIndex = 4; + this.tbDir.TabStop = false; + this.tbDir.Text = global::ImgRip.Properties.Settings.Default.Dir; + this.tbDir.MouseClick += new System.Windows.Forms.MouseEventHandler(this.tb_MouseClick); + this.tbDir.Leave += new System.EventHandler(this.tb_Leave); + // + // pbPreview + // + this.pbPreview.BackColor = System.Drawing.SystemColors.ActiveCaptionText; + this.pbPreview.Dock = System.Windows.Forms.DockStyle.Fill; + this.pbPreview.InitialImage = null; + this.pbPreview.Location = new System.Drawing.Point(0, 0); + this.pbPreview.Margin = new System.Windows.Forms.Padding(0); + this.pbPreview.Name = "pbPreview"; + this.pbPreview.Size = new System.Drawing.Size(96, 100); + this.pbPreview.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.pbPreview.TabIndex = 22; + this.pbPreview.TabStop = false; + this.pbPreview.DoubleClick += new System.EventHandler(this.pbDoubleClick); + // + // bwFetch + // + this.bwFetch.WorkerReportsProgress = true; + this.bwFetch.WorkerSupportsCancellation = true; + this.bwFetch.DoWork += new System.ComponentModel.DoWorkEventHandler(this.Fetch_DoWork); + this.bwFetch.ProgressChanged += new System.ComponentModel.ProgressChangedEventHandler(this.DownloadFiles_ProgressChanged); + this.bwFetch.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(this.DownloadFiles_RunWorkerCompleted); + // + // ttRipper + // + this.ttRipper.AutomaticDelay = 300; + // + // tmMinus + // + this.tmMinus.Tick += new System.EventHandler(this.btnMinus_Click); + // + // tmPlus + // + this.tmPlus.Tick += new System.EventHandler(this.btnPlus_Click); + // + // fbDir + // + this.fbDir.Description = "Select folder to store files"; + this.fbDir.SelectedPath = global::ImgRip.Properties.Settings.Default.Dir; + // + // Main + // + this.AcceptButton = this.btnGo; + this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 17F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(787, 488); + this.Controls.Add(this.mainSplit); + this.Font = new System.Drawing.Font("Microsoft YaHei", 9F); + this.ForeColor = System.Drawing.SystemColors.WindowText; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.KeyPreview = true; + this.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.MinimumSize = new System.Drawing.Size(450, 300); + this.Name = "Main"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Image Ripper - F11: FullScreen, [Shift+] Space: Preview ON|OFF"; + this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.Ripper_KeyDown); + this.mainSplit.Panel1.ResumeLayout(false); + this.mainSplit.Panel1.PerformLayout(); + this.mainSplit.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.mainSplit)).EndInit(); + this.mainSplit.ResumeLayout(false); + this.cmsBatch.ResumeLayout(false); + this.cmsLV.ResumeLayout(false); + this.RipStatus.ResumeLayout(false); + this.RipStatus.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbPreview)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private SplitButton btnGo; + private System.Windows.Forms.TextBox tbDir; + private System.Windows.Forms.FolderBrowserDialog fbDir; + private System.Windows.Forms.Label lblUrl; + private System.Windows.Forms.TextBox tbParse; + private System.Windows.Forms.PictureBox pbPreview; + private System.Windows.Forms.SplitContainer mainSplit; + private System.Windows.Forms.StatusStrip RipStatus; + private System.Windows.Forms.ToolStripStatusLabel tsLabel; + private System.Windows.Forms.ToolTip ttRipper; + private System.Windows.Forms.Timer tmMinus; + private System.Windows.Forms.Timer tmPlus; + private System.Windows.Forms.ContextMenuStrip cmsLV; + private System.Windows.Forms.ToolStripMenuItem cmmiNextPage; + private System.Windows.Forms.ToolStripMenuItem cmmiDropGroup; + private System.Windows.Forms.ToolStripStatusLabel lbBatch; + private System.Windows.Forms.ContextMenuStrip cmsBatch; + private System.Windows.Forms.ToolStripMenuItem btnBatch; + private System.Windows.Forms.ToolStripMenuItem cmmiClear; + private System.Windows.Forms.ListView lvRip; + private System.Windows.Forms.ColumnHeader chName; + private System.Windows.Forms.ColumnHeader chSize; + private System.Windows.Forms.ColumnHeader chState; + private System.Windows.Forms.ToolStripMenuItem cmmiCopyName; + private System.Windows.Forms.LinkLabel llFolder; + private System.Windows.Forms.LinkLabel llCookie; + private System.Windows.Forms.ToolStripMenuItem cmmiSave; + private System.Windows.Forms.ToolStripMenuItem cmmiRemove; + private System.Windows.Forms.ToolStripSplitButton tsCloud; + private System.Windows.Forms.ToolStripProgressBar tsPB; + private System.Windows.Forms.ToolStripMenuItem tsiGData; + private System.Windows.Forms.ToolStripMenuItem tsiPicasa; + private System.Windows.Forms.ColumnHeader chNumber; + private System.Windows.Forms.ToolStripStatusLabel tsHome; + private System.ComponentModel.BackgroundWorker bwFetch; + private System.Windows.Forms.LinkLabel llSites; + private System.Windows.Forms.ToolStripMenuItem cmmiBatch; + private System.Windows.Forms.ToolStripMenuItem cmmiPreview; + } +} + diff --git a/Main.cs b/Main.cs index 305f4b0..7777113 100644 --- a/Main.cs +++ b/Main.cs @@ -1,1077 +1,1077 @@ -//#define CheckSites -namespace ImgRip -{ - using ImgRip.Properties; - using System; - using System.Collections.Generic; - using System.ComponentModel; - using System.Diagnostics; - using System.Drawing; - using System.IO; - using System.Linq; - using System.Net; - using System.Threading; - using System.Windows.Forms; - using System.Xml.Linq; - - partial class Main : Form - { - bool FullScreen { get; set; } - internal Site[] sites; - internal long Range { get; set; } - internal bool Batch { get { return To - From > 0; } set { cmmiBatch.Checked = cmmiBatch.Enabled = cmmiNextPage.Enabled = value; } } - - public Main() - { - InitializeComponent(); - btnGo.Tag = RipperAction.Download; - tsHome.Alignment = ToolStripItemAlignment.Right; - btnGo.UpArrowMouseUp += (s, e) => tmPlus.Enabled = false; - btnGo.DownArrowMouseUp += (s, e) => tmMinus.Enabled = false; - btnGo.UpArrowMouseDown += (s, e) => - { - if (tmMinus.Enabled) tmMinus.Enabled = false; - if ((Fetch.Site = CheckUrl(Address)) == null || (RipperAction)btnGo.Tag == RipperAction.Cancel) return; - tmPlus.Enabled = true; - }; - btnGo.DownArrowMouseDown += (s, e) => - { - if (tmPlus.Enabled) tmPlus.Enabled = false; - if ((Fetch.Site = CheckUrl(Address)) == null || (RipperAction)btnGo.Tag == RipperAction.Cancel) return; - tmMinus.Enabled = true; - }; - sites = ReadXML(); - //CheckSites(); WriteXML(); - } - - Site[] ReadXML() - { - var xe = XElement.Parse(Resources.SiteList); - var sites = from s in xe.Descendants("Site") - select new Site(s.Attribute("Name").Value, s.Attribute("Domain").Value, s.Attribute("Image").Value) - { - Type = s.Attribute("Type") == null ? "Default" : s.Attribute("Type").Value, - Next = s.Attribute("Next") == null ? "" : s.Attribute("Next").Value, - Screen = s.Attribute("Screen") == null ? "" : s.Attribute("Screen").Value - }; - return sites.OrderBy(_ => _.Name).ToArray(); - } - - Site[] CheckSites() - { - var website = sites.ToList(); - foreach (var site in sites) - { - HttpWebRequest request = WebRequest.Create(string.Format("http://{0}", site.Domain)) as HttpWebRequest; - request.Method = "HEAD"; - HttpWebResponse response = null; - try - { - response = request.GetResponse() as HttpWebResponse; - response.Close(); - } - catch (Exception ex) - { - System.Diagnostics.Trace.WriteLine(ex.Message); - website.Remove(site); - } - } - return website.ToArray(); - } - - void WriteXML() - { - var doc = new XDocument(); - doc.Add(new XElement("ImageRipper", new XElement("List"))); - foreach (var item in sites) - { - var el = new XElement("Site", - new XAttribute("Name", item.Name), - new XAttribute("Domain", item.ToString()), - new XAttribute("Image", item.Image), - string.IsNullOrEmpty(item.Next) ? null : new XAttribute("Next", item.Next), - string.IsNullOrEmpty(item.Screen) ? null : new XAttribute("Screen", item.Screen)); - if (item.Type != "Default") - el.Add(new XAttribute("Type", item.Type)); - doc.Descendants("List").First().Add(el); - } - doc.Save(@".\..\..\Sites.xml"); - } - - /// - /// UI Callback properties - /// - bool ShowProgressBar { set { Invoke(new Action(() => tsPB.Visible = value)); } } - string Prompt { set { Invoke(new Action(() => tsLabel.Text = value)); } } - int ProgressPercentage { set { Invoke(new Action(() => tsPB.Value = value)); } } - string[] LviUpdate - { - set - { - Invoke(new Action(() => - { - //No. 1, Name 0, Size 2, State 3 - string name = value[0], number = value[1], size = value[2], state = value[3]; - var lvi = lvRip.FindItemWithText(name); - #region Update existed item - if (lvi != null) - { - if (!string.IsNullOrEmpty(number)) lvi.SubItems[1].Text = number; - if (!string.IsNullOrEmpty(size)) lvi.SubItems[2].Text = size; - if (!string.IsNullOrEmpty(state)) lvi.SubItems[3].Text = state; - if (lvi.Font.Style != FontStyle.Regular) - lvi.Font = new Font(lvi.Font, FontStyle.Regular); - } - #endregion - - #region Add new item to group - else - { - lvi = new ListViewItem(value); - lvi.ToolTipText = Fetch.Address; - if (lvRip.Groups[Fetch.Title] == null) lvRip.Groups.Add(Fetch.Title, string.Format("{0} [{1}P]", Fetch.Title, Fetch.Images.Count)); - lvi.Group = lvRip.Groups[Fetch.Title]; - lvRip.Items.Add(lvi).EnsureVisible(); - lvi.ForeColor = lvi.Index % 2 == 0 ? Color.ForestGreen : Color.RoyalBlue; - } - #endregion - })); - } - } - - internal long From { get; set; } - internal long To { get; set; } - - internal string Dir - { - get { return tbDir.Text; } - set { tbDir.Text = value; } - } - - public string Address - { - get { return tbParse.Text; } - set { tbParse.Text = value; } - } - - private void Go_Click(object sender, EventArgs e) - { - switch (((RipperAction)btnGo.Tag)) - { - case RipperAction.Download: - if (!CanDownload) return; - tbParse.ReadOnly = true; - tbDir.ReadOnly = true; - Settings.Default.Save(); - Go(); - break; - case RipperAction.Cancel: - Batch = false; - Fetch.Canceled = true; Fetch.Cancel(); - bwFetch.CancelAsync(); - ((Button)sender).Enabled = false; - break; - } - } - - private void ResetStatus() - { - Prompt = string.Empty; - ShowProgressBar = true; - ProgressPercentage = 0; - } - - private void Fetch_DoWork(object sender, DoWorkEventArgs e) - { - if ((e.Result = Parse(Address.Trim())) != null) { Fetch.Next = null; return; } - if (Fetch.Canceled) { e.Cancel = true; Fetch.Next = null; return; } -#if ! TRACE - FetchFile(e); -#endif - } - - private void FetchFile(DoWorkEventArgs e) - { - ResetStatus(); - if (Fetch.Images.Count == 0) e.Result = "Not a photo gallery!"; - for (int idx = 0; idx < Fetch.Images.Count; idx++) - { - var kvp = Fetch.Images.ElementAt(idx); - Fetch.Address = kvp.Value; - var fi = new FileInfo(Path.Combine(Dir, kvp.Key)); - Fetch.Current = fi; - //number #1, name #0, size #2, state #3 - var Order = (idx + 1).ToString(); - if (fi.Exists) - { - LviUpdate = new[] { fi.Name, Order, fi.Length / 1024 + " KB", "Existed" }; - continue; - } - LviUpdate = new[] { fi.Name, Order, null, "Downloading" }; - var percentage = idx * 100 / Fetch.Images.Count; - bwFetch.ReportProgress(percentage); - if (Batch) Invoke(new Action(() => lbBatch.Text = string.Format(" #{0}/{1} Pages", (Range - (To - From)), Range))); - - #region Download files - switch (Fetch.Site.Type) - { - default: - try - { - Fetch.GetFile(Fetch.Address, fi.ToString()); - } - catch (Exception exp) - { - LviUpdate = new[] { fi.Name, Order, null, exp.Message }; - if (fi.Exists) fi.Delete(); - } - break; - case "Heels": - bool succeed = false; - if (string.IsNullOrEmpty(Settings.Default.Cookie)) - { - Invoke(new Action(() => - { - new SetCookie().ShowDialog(this); - })); - } - while (!succeed) - { - using (var s = Fetch.GetStream(Fetch.Address, Settings.Default.Cookie)) - using (var bmp = Image.FromStream(s)) - { - try - { - bmp.Save(fi.ToString()); - s.Close(); - } - catch (Exception) - { - s.Close(); s.Dispose(); bmp.Dispose(); - if (Check(Order, e)) return; - LviUpdate = new[] { fi.Name, Order, null, "Invalid Cookie / Wait 5 secs" }; - Thread.Sleep(5000); - } - succeed = true; - } - } - break; - case "Heel": - using (var s = Fetch.GetStream(Fetch.Address)) - using (var bmp = Image.FromStream(s)) - { - try - { - bmp.Save(fi.ToString()); - s.Close(); - } - catch (Exception exp) - { - s.Close(); s.Dispose(); bmp.Dispose(); - if (Check(Order, e)) return; - LviUpdate = new[] { fi.Name, Order, null, exp.Message }; - } - } - break; - } - #endregion - - if (Check(Order, e)) return; - fi.Refresh(); - if (!fi.Exists) { LviUpdate = new[] { fi.Name, Order, null, "Download Failed!" }; continue; } - if (mainSplit.Panel2Collapsed) Invoke(new Action(() => mainSplit.Panel2Collapsed = !cmmiPreview.Checked)); - LviUpdate = new[] { fi.Name, Order, fi.Length / 1024 + " KB", "Finished" }; - pbPreview.ImageLocation = Fetch.Location = fi.ToString(); - bwFetch.ReportProgress((idx + 1) * 100 / Fetch.Images.Count); - } - } - - bool Check(string order, DoWorkEventArgs e) - { - if (Fetch.Dropped) { Fetch.Dropped = false; LviUpdate = new[] { Fetch.Current.Name, order, null, "Dropped" }; return true; } - if (Fetch.Canceled) { e.Cancel = true; Fetch.Next = null; LviUpdate = new[] { Fetch.Current.Name, order, null, "Cancelled" }; return true; } - if (Fetch.Skip) - { - Fetch.Skip = false; - LviUpdate = new[] { Fetch.Current.Name, order, null, "Skipped" }; - return true; - } - return false; - } - - private Site CheckUrl(string address) - { - string host; - try - { - var Url = new Uri(address); - host = Url.Host; - } - catch (System.UriFormatException format) - { - tsLabel.Text = format.Message; - return null; - } - try - { - return sites.SingleOrDefault(_ => host.Replace("www.", "").Equals(_.ToString(), StringComparison.OrdinalIgnoreCase)); - } - catch (Exception e) - { MessageBox.Show(e.Message, "Duplicate site definition"); return null; } - } - - /// - /// Parse URL address and generate dataset collection to store download information - /// - /// The address value from txtParse TextBox control - private string Parse(string url) - { - Prompt = string.Format("Analyzing: {0} ", Fetch.Site.Name); - var uri = new Uri(url); - try - { - var folder = url.Substring(0, url.LastIndexOf('/') + 1); - switch (Fetch.Site.Type) - { - #region Parse Heels.cn site - case "Heels": - return Fetch.Parse(url, fnName: n => n.Substring(n.LastIndexOf('=') + 1) + ".jpg", fnAddress: a => "http://www.heels.cn/web/" + a.Replace("_small", "")); - #endregion - - #region Parse Duide.com site - case "Duide": - return Fetch.Parse(url, fnName: - n => url.Substring(url.LastIndexOf('/') + 1).Split('.')[0].ToUpper() + "-" + n.Substring(n.LastIndexOf('/') + 1).Split('_')[0] + ".jpg", - fnAddress: - a => - { - var href = a.Replace("thumbnails", "images"); - return url.Replace(url.Substring(url.LastIndexOf('/') + 1), href); - }); - #endregion - - #region Parse Pal.Ath.Cx site - case "PalAthCx": - return Fetch.Parse(url, fnAddress: - a => - { - var id = a.Split('/')[1]; - id = (int.Parse(id.Substring(0, id.LastIndexOf('-'))) - 1).ToString() + "-2"; - return string.Format("http://{0}:{1}/", uri.Host, uri.Port) + id + a.Substring(a.LastIndexOf('/')); - }); - #endregion - - #region Parse DeskCity.com site - case "DeskCity": - return Fetch.Parse(url, hnc => - { - var page = hnc.SingleOrDefault(); - page = page != null && page.HasChildNodes ? page.LastChild : null; - return page.Attributes["href"] != null ? page.Attributes["href"].Value : null; - }, - fnAddress: a => - { - var key = a.Split("/-".ToCharArray())[4]; - return "http://www.deskcity.com" + a.Replace(a.Substring(a.LastIndexOf(key)), key + ".jpg"); - }); - #endregion - - #region Parse Pics100.net site - case "Pics100": - return Fetch.Parse(url, hnc => { var page = hnc.SingleOrDefault(n => n.InnerText == "下一页"); return page != null ? "http://www.pics100.net" + page.Attributes["href"].Value : null; }); - #endregion - - #region Parse WallCoo.[Net|Com] site - case "WallCoo": - return Fetch.Parse(url, - fnAddress: a => - { - var img = a.Split('/')[1]; - var key = img.Substring(0, img.LastIndexOf('s')) + ".jpg"; - return folder + string.Format("wallpapers/{0}/{1}", Fetch.Screen, key); - }, - fnScreen: hn => - { - var wxh = hn.InnerText.Split("|".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); - return wxh[wxh.Length - 2].Replace('*', 'x').Trim(); - }); - #endregion - - #region Parse [Desk|Girl]City.cn sites - case "GirlCity": - return Fetch.Parse(url, - hnc => - { - var index = hnc.IndexOf(hnc.Last(o => o.Attributes["selected"] != null)); - return (index + 1 == hnc.Count) ? null : folder + hnc[index + 1].Attributes["value"].Value; - }, - fnAddress: a => - { - var key = a.Substring(a.LastIndexOf('/') + 1).Remove(0, 3); - return a.Substring(0, a.LastIndexOf('/') + 1) + key; - }); - #endregion - - #region Parse mm.voc.com.cn site - case "Voc": - return Fetch.Parse(url, fnName: n => n.Substring(n.LastIndexOf('/') + 1).Split('-')[0] + ".jpg"); - #endregion - - #region Parse MeiTuShow.com, 909MM.com site - case "MeiTuShow": - case "MM909": - return Fetch.Parse(url, hnc => - { - var page = hnc.SingleOrDefault(n => n.NextSibling.Name == "br"); - return page == null ? null : folder + page.Attributes["href"].Value; - }); - #endregion - - #region Parse China-Girl.info & Tuku.cn site - case "Tuku": - case "ChinaGirl": - return Fetch.Parse(url, fnAddress: a => { var name = a.Substring(a.LastIndexOf('/') + 2); return a.Substring(0, a.LastIndexOf('/') + 1) + name; }); - #endregion - - #region Parse ZhuoKu.com site - case "ZhuoKu": - return Fetch.Parse(url, hnc => - { - var index = hnc.IndexOf(hnc.Last(o => o.Attributes["selected"] != null)); - return (index + 1 == hnc.Count) ? null : folder + hnc[index + 1].Attributes["value"].Value; - }, fnAddress: a => a.Replace("//img", "//bizhi").Replace("/thumbs/tn_", "/")); - #endregion - - #region Parse BeautyLeg.cc site - case "BeautyLeg": - return Fetch.Parse(url, fnAddress: a => "http://www.beautyleg.cc" + a.Replace("/thumbs/", "/albums/").Split('?')[0]); - #endregion - - #region Parse 25MeiNv.com site - case "Meinv25": - return Fetch.Parse(url, - hnc => - { - var page = hnc[hnc.Count - 2]; - return page.Attributes["href"].Value.StartsWith("javascript:") ? null : "http://www.25meinv.com" + page.Attributes["href"].Value; - }, - n => - { - var mark = url.LastIndexOf('_'); - var num = mark > 0 ? int.Parse(url.Substring(mark + 1)) : 0; - return string.Format("{0}{1:000}.jpg", Fetch.Title, num); - }); - #endregion - - #region Parse 52Desktop.cn site - case "Desktop": - return Fetch.Parse(url, hnc => - { - var page = hnc.Last(); var href = page.Attributes["href"].Value.Replace("\r", "").Replace("\n", "").Replace("\t", ""); - var first = page.PreviousSibling.PreviousSibling.Attributes["href"].Value; - return !href.Equals(first, StringComparison.OrdinalIgnoreCase) ? folder + href : null; - }); - #endregion - - #region Parse Ivsky.com site - case "Ivsky": - return Fetch.Parse(url, fnAddress: a => a.Replace("/m/", "/img/")); - #endregion - - #region Parse Winddesktop.com qfdesk.cn site - case "QFZM": - return Fetch.Parse(url, fnAddress: a => folder + a.Replace("/160/", "/original/").Remove(0, 1)); - #endregion - - #region Parse KKdesk.com site - case "KKDesk": - return Fetch.Parse(url, fnAddress: a => a.Split('=')[1]); - #endregion - - #region Parse Ydesk.com site - case "YDesk": - return Fetch.Parse(url, - fnNextPage: hnc => { var page = hnc.SingleOrDefault(n => n.InnerText == "下一页"); return page != null ? page.Attributes["href"].Value : null; }, - fnAddress: a => a.Replace("/thumb/", "/" + Fetch.Screen + "/"), - fnScreen: hn => - { - var list = hn.InnerText.Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); - return list[list.Length - 1].Trim(); - }); - #endregion - - #region Parse Leafweb.cn, Pic86.cn site - case "LeafWeb": - return Fetch.Parse(url, fnAddress: a => a.Replace("_show.jpg", ".jpg")); - #endregion - - #region Parse Kpbz.net, KuDesk.com site - case "Kpbz": - return Fetch.Parse(url, fnAddress: a => "http://www.kpbz.net" + a.Replace("-lp.jpg", ".jpg")); - #endregion - - #region Parse KuDesk.com site - case "KuDesk": - return Fetch.Parse(url, fnAddress: a => a.Replace("-lp.jpg", ".jpg")); - #endregion - - #region Parse 51bizhi.com site - case "Bizhi": - return Fetch.Parse(url, fnAddress: a => "http://www.51bizhi.com" + a.Replace("/S/", "/B/"), - fnNextPage: hnc => { var page = hnc[hnc.Count - 2]; return page.InnerText == "��һҳ" ? "http://www.51bizhi.com" + page.Attributes["href"].Value : null; }); - #endregion - - #region Parse Seedesk.cn site - case "SeeDesk": - return Fetch.Parse(url, fnAddress: a => "http://www.seedesk.cn" + a.Replace("_s.jpg", ".jpg")); - #endregion - - #region H2004.com site - case "H2004": - return Fetch.Parse(url, - hnc => - { - var page = hnc[hnc.Count - 2]; - return page.Name == "font" ? null : page.Attributes["tppabs"].Value; - }, fnAddress: _ => "http://www.h2004.com" + _.Remove(0, 5)); - #endregion - - #region Faloo.com site - case "Faloo": - return Fetch.Parse(url, fnAddress: _ => _.Replace("120x120", "0x0")); - #endregion - - #region 6611.us site - case "6611": - return Fetch.Parse(url, fnAddress: _ => _.Replace("/thumb/", "/")); - #endregion - - #region piclove.com site - case "PicLove": - return Fetch.Parse(url, fnAddress: a => "http://www.piclove.com" + a.Replace("-lp.jpg", ".jpg")); - #endregion - - #region KissQi.com site - case "KissQi": - return Fetch.Parse(url, hnc => - { - var page = hnc.Last(); var href = page.Attributes["href"].Value.Split("()".ToCharArray())[1]; - var segs = href.Split(','); var next = segs[segs.Length - 1].Trim('\'').Replace("[page]", segs[segs.Length - 2]); - return next.CompareWithLength(url) ? next : null; - }, - fnAddress: _ => "http://www.kissqi.com" + _.TrimStart('.')); - #endregion - - #region 1meng.com site - case "Meng": - return Fetch.Parse(url, fnName: _ => _.Substring(_.LastIndexOf('=') + 1) + ".jpg"); - #endregion - - #region 24Meinv.com site - case "Meinv": - return Fetch.Parse(url, fnAddress: _ => - { - var mark = _.LastIndexOf('/'); var path = _.Substring(0, mark + 1); - var name = _.Substring(mark + 1); name = name.Remove(0, 1); path = path.Replace("//pic.", "//img."); - return path + name; - }); - #endregion - - #region Leg99.cn site - case "Leg99": - return Fetch.Parse(url, fnNextPage: hnc => - { - var cur = hnc.Last(_ => _.Attributes["selected"] != null); - var curidx = hnc.IndexOf(cur); - return curidx == hnc.Count - 1 ? null : folder + hnc[curidx + 1].Attributes["value"].Value; - }); - #endregion - - #region 8264.com site - case "8264": - return Fetch.Parse(url, fnAddress: _ => _.Replace(".thumb.jpg", "")); - #endregion - - #region Luscious site - case "Luscious": - return Fetch.Parse(url, fnAddress: _ => _.Replace("thumb_100_", "").Replace("static3.", "static.").Replace("static2.", "static.")); - #endregion - - #region LegPic.net site - case "LegPic": - return Fetch.Parse(url, fnAddress: _ => "http://www.legpic.net/" + _.TrimStart("../".ToCharArray()).Replace("/thumbnail/TN-", "/"), - fnNextPage: _ => - { - var next = _.LastOrDefault(); - if (next == null) return null; - return "http://www.legpic.net/" + next.Attributes["href"].Value.TrimStart("../".ToCharArray()); - }); - #endregion - - #region BeautyLeg.com site - case "BLeg": - return Fetch.Parse(url, fnAddress: _ => _.StartsWith("http://photo.beautyleg.com/album")?_ :null - ); - #endregion - - #region Parse other sites - default: - return Fetch.Parse(url); - #endregion - } - } - catch (Exception) - { - return (Fetch.Title == null ? "Download" : "Analyze") + " Failed!"; - } - } - - private void DownloadFiles_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) - { - Fetch.Reset(); - btnGo.Tag = RipperAction.Download; - tsPB.Visible = false; - lbBatch.Text = null; - System.Media.SystemSounds.Exclamation.Play(); - if (e.Cancelled || e.Error != null) - { - tsLabel.Text = e.Error != null ? e.Error.Message : "Task cancelled."; - Stop(); - } - else - { - tsLabel.Text = e.Result != null ? e.Result as string : "Task finished."; - if (Fetch.Next != null) - { - Address = Fetch.Next; - Go(); - } - else if (Batch) - { - From++; - AdjustURL(1); - Batch = From != To; - Go(); - } - else - { - Stop(); - } - } - } - - private void Stop() - { - btnGo.Image = Resources.Download; - btnGo.Enabled = true; - cmmiBatch.Enabled = false; - tbParse.ReadOnly = false; - tbDir.ReadOnly = false; - } - - private void Go() - { - btnGo.Image = Resources.Cancel; - btnGo.Tag = RipperAction.Cancel; - bwFetch.RunWorkerAsync(); - } - - private void DownloadFiles_ProgressChanged(object sender, ProgressChangedEventArgs e) - { - tsPB.Value = e.ProgressPercentage; - tsLabel.Text = e.ProgressPercentage + "%"; - } - - private void pbDoubleClick(object sender, EventArgs e) - { - if (Fetch.Location != null && File.Exists(Fetch.Location)) - Process.Start(Fetch.Location); - } - - private void btnPlus_Click(object sender, EventArgs e) - { - AdjustURL(1); - } - - private void btnMinus_Click(object sender, EventArgs e) - { - AdjustURL(-1); - } - - /// - /// Adjust URL querystring value by increment/decrement number variable - /// - /// The PlusMinus enum value indicate the action type. - private void AdjustURL(int step) - { - string number, url = Address; - try - { - switch (Fetch.Site.Type) - { - default: - var mark = url.LastIndexOf('='); - if (mark > 0) - number = url.Substring(mark + 1); - else - { - mark = url.LastIndexOf('.'); - var start = url.LastIndexOf('/') + 1; - number = mark > 0 ? url.Substring(start, mark - start) : url.Substring(start); - } - ChangeUrl: - var value = int.Parse(number); - value += step; if (value < 0) return; - var m = url.LastIndexOf(number); - Address = url.Substring(0, m) + value.ToString(new string('0', number.Length)) + url.Substring(m + number.Length); - break; - case "Duide": - number = url.Substring(url.LastIndexOf('/') + 2).Replace(".htm", ""); - goto ChangeUrl; - case "PalAthCx": - var seg = url.Split("/".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); - number = seg[seg.Length - 1]; - goto ChangeUrl; - } - } - catch (Exception) - { - return; - } - } - - /// - /// Clear the listbox items, and reset dataset to initial state. - /// - /// - /// - private void btnClear_Click(object sender, EventArgs e) - { - if (lvRip.Items.Count > 0) - { - lvRip.Items.Clear(); - lvRip.Groups.Clear(); - } - } - - private void btnBatch_Click(object sender, EventArgs e) - { - Fetch.Site = CheckUrl(Address); - try - { - switch (Fetch.Site.Type) - { - default: - string text = Address.Split('=')[1]; - OpenBatchDialog: - int pageid; - if (int.TryParse(text, out pageid)) - new Batch(pageid).ShowDialog(this); - break; - case "Duide": - text = Address.Substring(Address.LastIndexOfAny("abc".ToCharArray()) + 1).Split('.')[0]; - goto OpenBatchDialog; - case "PalAthCx": - var seg = Address.Split("/".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); - text = seg[seg.Length - 1]; - goto OpenBatchDialog; - } - } - catch (Exception) - { return; } - } - - private void cmmiNextPage_Click(object sender, EventArgs e) - { - if (Batch) - Fetch.Skip = true; - } - - private void cmmiDelete_Click(object sender, EventArgs e) - { - if (File.Exists(Fetch.Location)) - { - File.Delete(Fetch.Location); - var lvi = lvRip.FindItemWithText(Path.GetFileName(Fetch.Location)); - Fetch.Location = null; - if (lvi != null) - { - lvi.SubItems[3].Text = "Deleted"; - lvi.Font = new Font(lvi.Font, FontStyle.Strikeout); - } - } - } - - private void cmmiDrop_Click(object sender, EventArgs e) - { - if (Fetch.Images != null && Fetch.Images.Count > 0) - { - foreach (string name in Fetch.Images.Keys) - { - if (Fetch.Current != null && Fetch.Current.Name == name) { Fetch.Dropped = true; Fetch.Cancel(); continue; } - string path = Path.Combine(Dir, name); - if (File.Exists(path)) - { - var lvi = lvRip.FindItemWithText(name); - if (lvi != null) - { - if (lvi.SubItems[3].Text == "Downloading") continue; - lvi.SubItems[3].Text = "Deleted"; - lvi.Font = new Font(lvi.Font, FontStyle.Strikeout); - File.Delete(path); - } - } - } - Fetch.Skip = true; - } - } - - private void lvSelectedIndexChanged(object sender, EventArgs e) - { - if (lvRip.FocusedItem != null) - { - string file = Path.Combine(Dir, lvRip.FocusedItem.Text); - if (File.Exists(file)) - { - if (mainSplit.Panel2Collapsed) mainSplit.Panel2Collapsed = false; - Fetch.Location = pbPreview.ImageLocation = file; - } - else - Fetch.Location = null; - } - } - - private void cmmiDeleteFile(object sender, EventArgs e) - { - if (lvRip.SelectedItems.Count > 0) - { - foreach (ListViewItem lvi in lvRip.SelectedItems) - { - string path = Path.Combine(Dir, lvi.Text); - if (File.Exists(path)) - { - if (lvi.SubItems[3].Text == "Downloading") continue; - File.Delete(path); - lvi.SubItems[3].Text = "Deleted"; - lvi.Font = new Font(lvi.Font, FontStyle.Strikeout); - } - } - } - } - - private void cmmiDownloadFile(object sender, EventArgs e) - { - var args = new List>(); - foreach (ListViewItem lvi in lvRip.SelectedItems) - { - if (!File.Exists(Path.Combine(Dir, lvi.Text))) - { - args.Add(Tuple.Create(lvi.ToolTipText/*Url*/, lvi.Text/*Name*/)); - lvi.SubItems[3].Text = "Downloading"; - lvi.Font = new Font(lvi.Font, FontStyle.Regular); - } - } - if (args.Count > 0) - new Thread(DownloadFile).Start(args); - } - - void DownloadFile(object args) - { - var dfi = args as List>; - foreach (var item in dfi) - { - try - { - string path = Path.Combine(Dir, item.Item2); - if (Fetch.Site.Type == "Heels") - { - using (Stream s = Fetch.GetStream(item.Item1, Settings.Default.Cookie)) - { - using (Image bmp = Image.FromStream(s)) - { - s.Close(); bmp.Save(path); - bmp.Dispose(); - } - } - } - else - Fetch.GetFile(item.Item1, path); - LviUpdate = new[] { item.Item2, null, new FileInfo(path).Length / 1024 + " KB", "Finished" }; - } - catch (Exception) - { - LviUpdate = new[] { item.Item2, null, null, "Failed" }; - } - } - } - - private void lvKeyDown(object sender, KeyEventArgs e) - { - switch (e.KeyCode) - { - case Keys.Delete: - if (e.Shift) - cmmiDrop_Click(sender, e); - else - cmmiDeleteFile(sender, e); - break; - case Keys.C: - if (e.Control && lvRip.FocusedItem != null) - Clipboard.SetText(lvRip.FocusedItem.ToolTipText); - break; - } - } - - private void Ripper_KeyDown(object sender, KeyEventArgs e) - { - switch (e.KeyCode) - { - case Keys.Space: - if (tbParse.Focused || tbDir.Focused) break; - if (e.Shift) { mainSplit.Panel2Collapsed = !mainSplit.Panel2Collapsed; cmmiPreview.Checked = !mainSplit.Panel2Collapsed; break; } - mainSplit.Panel1Collapsed = !mainSplit.Panel1Collapsed; - cmmiPreview.Checked = !mainSplit.Panel1Collapsed; - break; - case Keys.Escape: - if (FormBorderStyle == FormBorderStyle.None) - { - FullScreen = false; - FormBorderStyle = FormBorderStyle.Sizable; - Bounds = (Rectangle)this.Tag; - mainSplit.Panel1Collapsed = false; - if ((Fetch.Location == null) && pbPreview.Image == null) - mainSplit.Panel2Collapsed = true; - } - break; - case Keys.F11: - if (FullScreen) - { - FullScreen = false; - FormBorderStyle = FormBorderStyle.Sizable; - Bounds = (Rectangle)this.Tag; - if ((Fetch.Location == null) && pbPreview.Image == null) - mainSplit.Panel2Collapsed = true; - } - else - { - this.Tag = Bounds; - mainSplit.Panel1Collapsed = true; - mainSplit.Panel2Collapsed = false; - FormBorderStyle = FormBorderStyle.None; - Bounds = Screen.PrimaryScreen.Bounds; - FullScreen = true; - } - break; - } - } - - bool CanDownload - { - get - { - if ((Fetch.Site = CheckUrl(Address)) == null) { tsLabel.Text = "Not support!"; return false; } -#if !TRACE - if (!Directory.Exists(Dir)) - { - if (DialogResult.Yes == MessageBox.Show("Do you want to create new folder to store files?", "Directory doesn't exist!", MessageBoxButtons.YesNo, MessageBoxIcon.Question)) - { - try { Directory.CreateDirectory(Dir); return true; } - catch (Exception exp) { MessageBox.Show(exp.Message, "Create Directory failed!", MessageBoxButtons.OK, MessageBoxIcon.Error); return false; } - } - else - return false; - } -#endif - return true; - } - } - - private void cmmiCopyName_Click(object sender, EventArgs e) - { - if (lvRip.FocusedItem != null) - Clipboard.SetText(lvRip.FocusedItem.Text); - } - - private void llFolder_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - if ((fbDir.ShowDialog()) == DialogResult.OK) - Dir = fbDir.SelectedPath; - } - - private void llCookie_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - new SetCookie().ShowDialog(this); - } - - private void tbParse_DragEnter(object sender, DragEventArgs e) - { - if (e.Data.GetDataPresent(DataFormats.Text)) - { - e.Effect = DragDropEffects.Copy; - } - } - - private void tbParse_DragDrop(object sender, DragEventArgs e) - { - TextBox tb = sender as TextBox; - tb.Text = (string)e.Data.GetData(DataFormats.Text); - } - - private void cmsLV_Opening(object sender, CancelEventArgs e) - { - cmmiNextPage.Visible = cmmiBatch.Visible = Batch; - cmmiSave.Visible = cmmiRemove.Visible = cmmiCopyName.Visible = lvRip.SelectedItems.Count > 0; - cmmiDropGroup.Visible = cmmiClear.Visible = lvRip.Items.Count > 0; - } - - private void CloudToolStrip_Click(object sender, EventArgs e) - { - tsCloud.ShowDropDown(); - } - - private void CloudItem_Click(object sender, EventArgs e) - { - ToolStripMenuItem tsmi = sender as ToolStripMenuItem; - switch (tsmi.Text) - { - case "GDrive": WebCloud.Service = WebCloud.CloudType.GDrive; break; - case "Flickr": WebCloud.Service = WebCloud.CloudType.Flickr; break; - case "Facebook": WebCloud.Service = WebCloud.CloudType.Facebook; break; - case "Picasa": WebCloud.Service = WebCloud.CloudType.Picasa; break; - } - new WebCloud() { Text = tsmi.Text }.Show(); - } - - private void tsHome_Click(object sender, EventArgs e) - { - Process.Start("http://imgrip.codeplex.com"); - } - - private void llSites_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - new Sites().Show(this); - } - - private void tb_MouseClick(object sender, MouseEventArgs e) - { - var ctl = sender as TextBox; - if (string.IsNullOrEmpty(ctl.Tag as string)) { if (ctl.SelectionLength == 0) ctl.SelectAll(); ctl.Tag = ctl.SelectedText; } - } - - private void tb_Leave(object sender, EventArgs e) - { - var ctl = sender as TextBox; - ctl.Tag = null; - } - - private void cmmiBatch_CheckedChanged(object sender, EventArgs e) - { - Batch = cmmiBatch.Checked; - } - } - - /// - /// Represent the download button action type. - /// - enum RipperAction { Download, Cancel }; +//#define CheckSites +namespace ImgRip +{ + using ImgRip.Properties; + using System; + using System.Collections.Generic; + using System.ComponentModel; + using System.Diagnostics; + using System.Drawing; + using System.IO; + using System.Linq; + using System.Net; + using System.Threading; + using System.Windows.Forms; + using System.Xml.Linq; + + partial class Main : Form + { + bool FullScreen { get; set; } + internal Site[] sites; + internal long Range { get; set; } + internal bool Batch { get { return To - From > 0; } set { cmmiBatch.Checked = cmmiBatch.Enabled = cmmiNextPage.Enabled = value; } } + + public Main() + { + InitializeComponent(); + btnGo.Tag = RipperAction.Download; + tsHome.Alignment = ToolStripItemAlignment.Right; + btnGo.UpArrowMouseUp += (s, e) => tmPlus.Enabled = false; + btnGo.DownArrowMouseUp += (s, e) => tmMinus.Enabled = false; + btnGo.UpArrowMouseDown += (s, e) => + { + if (tmMinus.Enabled) tmMinus.Enabled = false; + if ((Fetch.Site = CheckUrl(Address)) == null || (RipperAction)btnGo.Tag == RipperAction.Cancel) return; + tmPlus.Enabled = true; + }; + btnGo.DownArrowMouseDown += (s, e) => + { + if (tmPlus.Enabled) tmPlus.Enabled = false; + if ((Fetch.Site = CheckUrl(Address)) == null || (RipperAction)btnGo.Tag == RipperAction.Cancel) return; + tmMinus.Enabled = true; + }; + sites = ReadXML(); + //CheckSites(); WriteXML(); + } + + Site[] ReadXML() + { + var xe = XElement.Parse(Resources.SiteList); + var sites = from s in xe.Descendants("Site") + select new Site(s.Attribute("Name").Value, s.Attribute("Domain").Value, s.Attribute("Image").Value) + { + Type = s.Attribute("Type") == null ? "Default" : s.Attribute("Type").Value, + Next = s.Attribute("Next") == null ? "" : s.Attribute("Next").Value, + Screen = s.Attribute("Screen") == null ? "" : s.Attribute("Screen").Value + }; + return sites.OrderBy(_ => _.Name).ToArray(); + } + + Site[] CheckSites() + { + var website = sites.ToList(); + foreach (var site in sites) + { + HttpWebRequest request = WebRequest.Create(string.Format("http://{0}", site.Domain)) as HttpWebRequest; + request.Method = "HEAD"; + HttpWebResponse response = null; + try + { + response = request.GetResponse() as HttpWebResponse; + response.Close(); + } + catch (Exception ex) + { + System.Diagnostics.Trace.WriteLine(ex.Message); + website.Remove(site); + } + } + return website.ToArray(); + } + + void WriteXML() + { + var doc = new XDocument(); + doc.Add(new XElement("ImageRipper", new XElement("List"))); + foreach (var item in sites) + { + var el = new XElement("Site", + new XAttribute("Name", item.Name), + new XAttribute("Domain", item.ToString()), + new XAttribute("Image", item.Image), + string.IsNullOrEmpty(item.Next) ? null : new XAttribute("Next", item.Next), + string.IsNullOrEmpty(item.Screen) ? null : new XAttribute("Screen", item.Screen)); + if (item.Type != "Default") + el.Add(new XAttribute("Type", item.Type)); + doc.Descendants("List").First().Add(el); + } + doc.Save(@".\..\..\Sites.xml"); + } + + /// + /// UI Callback properties + /// + bool ShowProgressBar { set { Invoke(new Action(() => tsPB.Visible = value)); } } + string Prompt { set { Invoke(new Action(() => tsLabel.Text = value)); } } + int ProgressPercentage { set { Invoke(new Action(() => tsPB.Value = value)); } } + string[] LviUpdate + { + set + { + Invoke(new Action(() => + { + //No. 1, Name 0, Size 2, State 3 + string name = value[0], number = value[1], size = value[2], state = value[3]; + var lvi = lvRip.FindItemWithText(name); + #region Update existed item + if (lvi != null) + { + if (!string.IsNullOrEmpty(number)) lvi.SubItems[1].Text = number; + if (!string.IsNullOrEmpty(size)) lvi.SubItems[2].Text = size; + if (!string.IsNullOrEmpty(state)) lvi.SubItems[3].Text = state; + if (lvi.Font.Style != FontStyle.Regular) + lvi.Font = new Font(lvi.Font, FontStyle.Regular); + } + #endregion + + #region Add new item to group + else + { + lvi = new ListViewItem(value); + lvi.ToolTipText = Fetch.Address; + if (lvRip.Groups[Fetch.Title] == null) lvRip.Groups.Add(Fetch.Title, string.Format("{0} [{1}P]", Fetch.Title, Fetch.Images.Count)); + lvi.Group = lvRip.Groups[Fetch.Title]; + lvRip.Items.Add(lvi).EnsureVisible(); + lvi.ForeColor = lvi.Index % 2 == 0 ? Color.ForestGreen : Color.RoyalBlue; + } + #endregion + })); + } + } + + internal long From { get; set; } + internal long To { get; set; } + + internal string Dir + { + get { return tbDir.Text; } + set { tbDir.Text = value; } + } + + public string Address + { + get { return tbParse.Text; } + set { tbParse.Text = value; } + } + + private void Go_Click(object sender, EventArgs e) + { + switch (((RipperAction)btnGo.Tag)) + { + case RipperAction.Download: + if (!CanDownload) return; + tbParse.ReadOnly = true; + tbDir.ReadOnly = true; + Settings.Default.Save(); + Go(); + break; + case RipperAction.Cancel: + Batch = false; + Fetch.Canceled = true; Fetch.Cancel(); + bwFetch.CancelAsync(); + ((Button)sender).Enabled = false; + break; + } + } + + private void ResetStatus() + { + Prompt = string.Empty; + ShowProgressBar = true; + ProgressPercentage = 0; + } + + private void Fetch_DoWork(object sender, DoWorkEventArgs e) + { + if ((e.Result = Parse(Address.Trim())) != null) { Fetch.Next = null; return; } + if (Fetch.Canceled) { e.Cancel = true; Fetch.Next = null; return; } +#if ! TRACE + FetchFile(e); +#endif + } + + private void FetchFile(DoWorkEventArgs e) + { + ResetStatus(); + if (Fetch.Images.Count == 0) e.Result = "Not a photo gallery!"; + for (int idx = 0; idx < Fetch.Images.Count; idx++) + { + var kvp = Fetch.Images.ElementAt(idx); + Fetch.Address = kvp.Value; + var fi = new FileInfo(Path.Combine(Dir, kvp.Key)); + Fetch.Current = fi; + //number #1, name #0, size #2, state #3 + var Order = (idx + 1).ToString(); + if (fi.Exists) + { + LviUpdate = new[] { fi.Name, Order, fi.Length / 1024 + " KB", "Existed" }; + continue; + } + LviUpdate = new[] { fi.Name, Order, null, "Downloading" }; + var percentage = idx * 100 / Fetch.Images.Count; + bwFetch.ReportProgress(percentage); + if (Batch) Invoke(new Action(() => lbBatch.Text = string.Format(" #{0}/{1} Pages", (Range - (To - From)), Range))); + + #region Download files + switch (Fetch.Site.Type) + { + default: + try + { + Fetch.GetFile(Fetch.Address, fi.ToString()); + } + catch (Exception exp) + { + LviUpdate = new[] { fi.Name, Order, null, exp.Message }; + if (fi.Exists) fi.Delete(); + } + break; + case "Heels": + bool succeed = false; + if (string.IsNullOrEmpty(Settings.Default.Cookie)) + { + Invoke(new Action(() => + { + new SetCookie().ShowDialog(this); + })); + } + while (!succeed) + { + using (var s = Fetch.GetStream(Fetch.Address, Settings.Default.Cookie)) + using (var bmp = Image.FromStream(s)) + { + try + { + bmp.Save(fi.ToString()); + s.Close(); + } + catch (Exception) + { + s.Close(); s.Dispose(); bmp.Dispose(); + if (Check(Order, e)) return; + LviUpdate = new[] { fi.Name, Order, null, "Invalid Cookie / Wait 5 secs" }; + Thread.Sleep(5000); + } + succeed = true; + } + } + break; + case "Heel": + using (var s = Fetch.GetStream(Fetch.Address)) + using (var bmp = Image.FromStream(s)) + { + try + { + bmp.Save(fi.ToString()); + s.Close(); + } + catch (Exception exp) + { + s.Close(); s.Dispose(); bmp.Dispose(); + if (Check(Order, e)) return; + LviUpdate = new[] { fi.Name, Order, null, exp.Message }; + } + } + break; + } + #endregion + + if (Check(Order, e)) return; + fi.Refresh(); + if (!fi.Exists) { LviUpdate = new[] { fi.Name, Order, null, "Download Failed!" }; continue; } + if (mainSplit.Panel2Collapsed) Invoke(new Action(() => mainSplit.Panel2Collapsed = !cmmiPreview.Checked)); + LviUpdate = new[] { fi.Name, Order, fi.Length / 1024 + " KB", "Finished" }; + pbPreview.ImageLocation = Fetch.Location = fi.ToString(); + bwFetch.ReportProgress((idx + 1) * 100 / Fetch.Images.Count); + } + } + + bool Check(string order, DoWorkEventArgs e) + { + if (Fetch.Dropped) { Fetch.Dropped = false; LviUpdate = new[] { Fetch.Current.Name, order, null, "Dropped" }; return true; } + if (Fetch.Canceled) { e.Cancel = true; Fetch.Next = null; LviUpdate = new[] { Fetch.Current.Name, order, null, "Cancelled" }; return true; } + if (Fetch.Skip) + { + Fetch.Skip = false; + LviUpdate = new[] { Fetch.Current.Name, order, null, "Skipped" }; + return true; + } + return false; + } + + private Site CheckUrl(string address) + { + string host; + try + { + var Url = new Uri(address); + host = Url.Host; + } + catch (System.UriFormatException format) + { + tsLabel.Text = format.Message; + return null; + } + try + { + return sites.SingleOrDefault(_ => host.Replace("www.", "").Equals(_.ToString(), StringComparison.OrdinalIgnoreCase)); + } + catch (Exception e) + { MessageBox.Show(e.Message, "Duplicate site definition"); return null; } + } + + /// + /// Parse URL address and generate dataset collection to store download information + /// + /// The address value from txtParse TextBox control + private string Parse(string url) + { + Prompt = string.Format("Analyzing: {0} ", Fetch.Site.Name); + var uri = new Uri(url); + try + { + var folder = url.Substring(0, url.LastIndexOf('/') + 1); + switch (Fetch.Site.Type) + { + #region Parse Heels.cn site + case "Heels": + return Fetch.Parse(url, fnName: n => n.Substring(n.LastIndexOf('=') + 1) + ".jpg", fnAddress: a => "http://www.heels.cn/web/" + a.Replace("_small", "")); + #endregion + + #region Parse Duide.com site + case "Duide": + return Fetch.Parse(url, fnName: + n => url.Substring(url.LastIndexOf('/') + 1).Split('.')[0].ToUpper() + "-" + n.Substring(n.LastIndexOf('/') + 1).Split('_')[0] + ".jpg", + fnAddress: + a => + { + var href = a.Replace("thumbnails", "images"); + return url.Replace(url.Substring(url.LastIndexOf('/') + 1), href); + }); + #endregion + + #region Parse Pal.Ath.Cx site + case "PalAthCx": + return Fetch.Parse(url, fnAddress: + a => + { + var id = a.Split('/')[1]; + id = (int.Parse(id.Substring(0, id.LastIndexOf('-'))) - 1).ToString() + "-2"; + return string.Format("http://{0}:{1}/", uri.Host, uri.Port) + id + a.Substring(a.LastIndexOf('/')); + }); + #endregion + + #region Parse DeskCity.com site + case "DeskCity": + return Fetch.Parse(url, hnc => + { + var page = hnc.SingleOrDefault(); + page = page != null && page.HasChildNodes ? page.LastChild : null; + return page.Attributes["href"] != null ? page.Attributes["href"].Value : null; + }, + fnAddress: a => + { + var key = a.Split("/-".ToCharArray())[4]; + return "http://www.deskcity.com" + a.Replace(a.Substring(a.LastIndexOf(key)), key + ".jpg"); + }); + #endregion + + #region Parse Pics100.net site + case "Pics100": + return Fetch.Parse(url, hnc => { var page = hnc.SingleOrDefault(n => n.InnerText == "下一页"); return page != null ? "http://www.pics100.net" + page.Attributes["href"].Value : null; }); + #endregion + + #region Parse WallCoo.[Net|Com] site + case "WallCoo": + return Fetch.Parse(url, + fnAddress: a => + { + var img = a.Split('/')[1]; + var key = img.Substring(0, img.LastIndexOf('s')) + ".jpg"; + return folder + string.Format("wallpapers/{0}/{1}", Fetch.Screen, key); + }, + fnScreen: hn => + { + var wxh = hn.InnerText.Split("|".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); + return wxh[wxh.Length - 2].Replace('*', 'x').Trim(); + }); + #endregion + + #region Parse [Desk|Girl]City.cn sites + case "GirlCity": + return Fetch.Parse(url, + hnc => + { + var index = hnc.IndexOf(hnc.Last(o => o.Attributes["selected"] != null)); + return (index + 1 == hnc.Count) ? null : folder + hnc[index + 1].Attributes["value"].Value; + }, + fnAddress: a => + { + var key = a.Substring(a.LastIndexOf('/') + 1).Remove(0, 3); + return a.Substring(0, a.LastIndexOf('/') + 1) + key; + }); + #endregion + + #region Parse mm.voc.com.cn site + case "Voc": + return Fetch.Parse(url, fnName: n => n.Substring(n.LastIndexOf('/') + 1).Split('-')[0] + ".jpg"); + #endregion + + #region Parse MeiTuShow.com, 909MM.com site + case "MeiTuShow": + case "MM909": + return Fetch.Parse(url, hnc => + { + var page = hnc.SingleOrDefault(n => n.NextSibling.Name == "br"); + return page == null ? null : folder + page.Attributes["href"].Value; + }); + #endregion + + #region Parse China-Girl.info & Tuku.cn site + case "Tuku": + case "ChinaGirl": + return Fetch.Parse(url, fnAddress: a => { var name = a.Substring(a.LastIndexOf('/') + 2); return a.Substring(0, a.LastIndexOf('/') + 1) + name; }); + #endregion + + #region Parse ZhuoKu.com site + case "ZhuoKu": + return Fetch.Parse(url, hnc => + { + var index = hnc.IndexOf(hnc.Last(o => o.Attributes["selected"] != null)); + return (index + 1 == hnc.Count) ? null : folder + hnc[index + 1].Attributes["value"].Value; + }, fnAddress: a => a.Replace("//img", "//bizhi").Replace("/thumbs/tn_", "/")); + #endregion + + #region Parse BeautyLeg.cc site + case "BeautyLeg": + return Fetch.Parse(url, fnAddress: a => "http://www.beautyleg.cc" + a.Replace("/thumbs/", "/albums/").Split('?')[0]); + #endregion + + #region Parse 25MeiNv.com site + case "Meinv25": + return Fetch.Parse(url, + hnc => + { + var page = hnc[hnc.Count - 2]; + return page.Attributes["href"].Value.StartsWith("javascript:") ? null : "http://www.25meinv.com" + page.Attributes["href"].Value; + }, + n => + { + var mark = url.LastIndexOf('_'); + var num = mark > 0 ? int.Parse(url.Substring(mark + 1)) : 0; + return string.Format("{0}{1:000}.jpg", Fetch.Title, num); + }); + #endregion + + #region Parse 52Desktop.cn site + case "Desktop": + return Fetch.Parse(url, hnc => + { + var page = hnc.Last(); var href = page.Attributes["href"].Value.Replace("\r", "").Replace("\n", "").Replace("\t", ""); + var first = page.PreviousSibling.PreviousSibling.Attributes["href"].Value; + return !href.Equals(first, StringComparison.OrdinalIgnoreCase) ? folder + href : null; + }); + #endregion + + #region Parse Ivsky.com site + case "Ivsky": + return Fetch.Parse(url, fnAddress: a => a.Replace("/m/", "/img/")); + #endregion + + #region Parse Winddesktop.com qfdesk.cn site + case "QFZM": + return Fetch.Parse(url, fnAddress: a => folder + a.Replace("/160/", "/original/").Remove(0, 1)); + #endregion + + #region Parse KKdesk.com site + case "KKDesk": + return Fetch.Parse(url, fnAddress: a => a.Split('=')[1]); + #endregion + + #region Parse Ydesk.com site + case "YDesk": + return Fetch.Parse(url, + fnNextPage: hnc => { var page = hnc.SingleOrDefault(n => n.InnerText == "下一页"); return page != null ? page.Attributes["href"].Value : null; }, + fnAddress: a => a.Replace("/thumb/", "/" + Fetch.Screen + "/"), + fnScreen: hn => + { + var list = hn.InnerText.Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); + return list[list.Length - 1].Trim(); + }); + #endregion + + #region Parse Leafweb.cn, Pic86.cn site + case "LeafWeb": + return Fetch.Parse(url, fnAddress: a => a.Replace("_show.jpg", ".jpg")); + #endregion + + #region Parse Kpbz.net, KuDesk.com site + case "Kpbz": + return Fetch.Parse(url, fnAddress: a => "http://www.kpbz.net" + a.Replace("-lp.jpg", ".jpg")); + #endregion + + #region Parse KuDesk.com site + case "KuDesk": + return Fetch.Parse(url, fnAddress: a => a.Replace("-lp.jpg", ".jpg")); + #endregion + + #region Parse 51bizhi.com site + case "Bizhi": + return Fetch.Parse(url, fnAddress: a => "http://www.51bizhi.com" + a.Replace("/S/", "/B/"), + fnNextPage: hnc => { var page = hnc[hnc.Count - 2]; return page.InnerText == "��һҳ" ? "http://www.51bizhi.com" + page.Attributes["href"].Value : null; }); + #endregion + + #region Parse Seedesk.cn site + case "SeeDesk": + return Fetch.Parse(url, fnAddress: a => "http://www.seedesk.cn" + a.Replace("_s.jpg", ".jpg")); + #endregion + + #region H2004.com site + case "H2004": + return Fetch.Parse(url, + hnc => + { + var page = hnc[hnc.Count - 2]; + return page.Name == "font" ? null : page.Attributes["tppabs"].Value; + }, fnAddress: _ => "http://www.h2004.com" + _.Remove(0, 5)); + #endregion + + #region Faloo.com site + case "Faloo": + return Fetch.Parse(url, fnAddress: _ => _.Replace("120x120", "0x0")); + #endregion + + #region 6611.us site + case "6611": + return Fetch.Parse(url, fnAddress: _ => _.Replace("/thumb/", "/")); + #endregion + + #region piclove.com site + case "PicLove": + return Fetch.Parse(url, fnAddress: a => "http://www.piclove.com" + a.Replace("-lp.jpg", ".jpg")); + #endregion + + #region KissQi.com site + case "KissQi": + return Fetch.Parse(url, hnc => + { + var page = hnc.Last(); var href = page.Attributes["href"].Value.Split("()".ToCharArray())[1]; + var segs = href.Split(','); var next = segs[segs.Length - 1].Trim('\'').Replace("[page]", segs[segs.Length - 2]); + return next.CompareWithLength(url) ? next : null; + }, + fnAddress: _ => "http://www.kissqi.com" + _.TrimStart('.')); + #endregion + + #region 1meng.com site + case "Meng": + return Fetch.Parse(url, fnName: _ => _.Substring(_.LastIndexOf('=') + 1) + ".jpg"); + #endregion + + #region 24Meinv.com site + case "Meinv": + return Fetch.Parse(url, fnAddress: _ => + { + var mark = _.LastIndexOf('/'); var path = _.Substring(0, mark + 1); + var name = _.Substring(mark + 1); name = name.Remove(0, 1); path = path.Replace("//pic.", "//img."); + return path + name; + }); + #endregion + + #region Leg99.cn site + case "Leg99": + return Fetch.Parse(url, fnNextPage: hnc => + { + var cur = hnc.Last(_ => _.Attributes["selected"] != null); + var curidx = hnc.IndexOf(cur); + return curidx == hnc.Count - 1 ? null : folder + hnc[curidx + 1].Attributes["value"].Value; + }); + #endregion + + #region 8264.com site + case "8264": + return Fetch.Parse(url, fnAddress: _ => _.Replace(".thumb.jpg", "")); + #endregion + + #region Luscious site + case "Luscious": + return Fetch.Parse(url, fnAddress: _ => _.Replace("thumb_100_", "").Replace("static3.", "static.").Replace("static2.", "static.")); + #endregion + + #region LegPic.net site + case "LegPic": + return Fetch.Parse(url, fnAddress: _ => "http://www.legpic.net/" + _.TrimStart("../".ToCharArray()).Replace("/thumbnail/TN-", "/"), + fnNextPage: _ => + { + var next = _.LastOrDefault(); + if (next == null) return null; + return "http://www.legpic.net/" + next.Attributes["href"].Value.TrimStart("../".ToCharArray()); + }); + #endregion + + #region BeautyLeg.com site + case "BLeg": + return Fetch.Parse(url, fnAddress: _ => _.StartsWith("http://photo.beautyleg.com/album")?_ :null + ); + #endregion + + #region Parse other sites + default: + return Fetch.Parse(url); + #endregion + } + } + catch (Exception) + { + return (Fetch.Title == null ? "Download" : "Analyze") + " Failed!"; + } + } + + private void DownloadFiles_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) + { + Fetch.Reset(); + btnGo.Tag = RipperAction.Download; + tsPB.Visible = false; + lbBatch.Text = null; + System.Media.SystemSounds.Exclamation.Play(); + if (e.Cancelled || e.Error != null) + { + tsLabel.Text = e.Error != null ? e.Error.Message : "Task cancelled."; + Stop(); + } + else + { + tsLabel.Text = e.Result != null ? e.Result as string : "Task finished."; + if (Fetch.Next != null) + { + Address = Fetch.Next; + Go(); + } + else if (Batch) + { + From++; + AdjustURL(1); + Batch = From != To; + Go(); + } + else + { + Stop(); + } + } + } + + private void Stop() + { + btnGo.Image = Resources.Download; + btnGo.Enabled = true; + cmmiBatch.Enabled = false; + tbParse.ReadOnly = false; + tbDir.ReadOnly = false; + } + + private void Go() + { + btnGo.Image = Resources.Cancel; + btnGo.Tag = RipperAction.Cancel; + bwFetch.RunWorkerAsync(); + } + + private void DownloadFiles_ProgressChanged(object sender, ProgressChangedEventArgs e) + { + tsPB.Value = e.ProgressPercentage; + tsLabel.Text = e.ProgressPercentage + "%"; + } + + private void pbDoubleClick(object sender, EventArgs e) + { + if (Fetch.Location != null && File.Exists(Fetch.Location)) + Process.Start(Fetch.Location); + } + + private void btnPlus_Click(object sender, EventArgs e) + { + AdjustURL(1); + } + + private void btnMinus_Click(object sender, EventArgs e) + { + AdjustURL(-1); + } + + /// + /// Adjust URL querystring value by increment/decrement number variable + /// + /// The PlusMinus enum value indicate the action type. + private void AdjustURL(int step) + { + string number, url = Address; + try + { + switch (Fetch.Site.Type) + { + default: + var mark = url.LastIndexOf('='); + if (mark > 0) + number = url.Substring(mark + 1); + else + { + mark = url.LastIndexOf('.'); + var start = url.LastIndexOf('/') + 1; + number = mark > 0 ? url.Substring(start, mark - start) : url.Substring(start); + } + ChangeUrl: + var value = int.Parse(number); + value += step; if (value < 0) return; + var m = url.LastIndexOf(number); + Address = url.Substring(0, m) + value.ToString(new string('0', number.Length)) + url.Substring(m + number.Length); + break; + case "Duide": + number = url.Substring(url.LastIndexOf('/') + 2).Replace(".htm", ""); + goto ChangeUrl; + case "PalAthCx": + var seg = url.Split("/".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); + number = seg[seg.Length - 1]; + goto ChangeUrl; + } + } + catch (Exception) + { + return; + } + } + + /// + /// Clear the listbox items, and reset dataset to initial state. + /// + /// + /// + private void btnClear_Click(object sender, EventArgs e) + { + if (lvRip.Items.Count > 0) + { + lvRip.Items.Clear(); + lvRip.Groups.Clear(); + } + } + + private void btnBatch_Click(object sender, EventArgs e) + { + Fetch.Site = CheckUrl(Address); + try + { + switch (Fetch.Site.Type) + { + default: + string text = Address.Split('=')[1]; + OpenBatchDialog: + int pageid; + if (int.TryParse(text, out pageid)) + new Batch(pageid).ShowDialog(this); + break; + case "Duide": + text = Address.Substring(Address.LastIndexOfAny("abc".ToCharArray()) + 1).Split('.')[0]; + goto OpenBatchDialog; + case "PalAthCx": + var seg = Address.Split("/".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); + text = seg[seg.Length - 1]; + goto OpenBatchDialog; + } + } + catch (Exception) + { return; } + } + + private void cmmiNextPage_Click(object sender, EventArgs e) + { + if (Batch) + Fetch.Skip = true; + } + + private void cmmiDelete_Click(object sender, EventArgs e) + { + if (File.Exists(Fetch.Location)) + { + File.Delete(Fetch.Location); + var lvi = lvRip.FindItemWithText(Path.GetFileName(Fetch.Location)); + Fetch.Location = null; + if (lvi != null) + { + lvi.SubItems[3].Text = "Deleted"; + lvi.Font = new Font(lvi.Font, FontStyle.Strikeout); + } + } + } + + private void cmmiDrop_Click(object sender, EventArgs e) + { + if (Fetch.Images != null && Fetch.Images.Count > 0) + { + foreach (string name in Fetch.Images.Keys) + { + if (Fetch.Current != null && Fetch.Current.Name == name) { Fetch.Dropped = true; Fetch.Cancel(); continue; } + string path = Path.Combine(Dir, name); + if (File.Exists(path)) + { + var lvi = lvRip.FindItemWithText(name); + if (lvi != null) + { + if (lvi.SubItems[3].Text == "Downloading") continue; + lvi.SubItems[3].Text = "Deleted"; + lvi.Font = new Font(lvi.Font, FontStyle.Strikeout); + File.Delete(path); + } + } + } + Fetch.Skip = true; + } + } + + private void lvSelectedIndexChanged(object sender, EventArgs e) + { + if (lvRip.FocusedItem != null) + { + string file = Path.Combine(Dir, lvRip.FocusedItem.Text); + if (File.Exists(file)) + { + if (mainSplit.Panel2Collapsed) mainSplit.Panel2Collapsed = false; + Fetch.Location = pbPreview.ImageLocation = file; + } + else + Fetch.Location = null; + } + } + + private void cmmiDeleteFile(object sender, EventArgs e) + { + if (lvRip.SelectedItems.Count > 0) + { + foreach (ListViewItem lvi in lvRip.SelectedItems) + { + string path = Path.Combine(Dir, lvi.Text); + if (File.Exists(path)) + { + if (lvi.SubItems[3].Text == "Downloading") continue; + File.Delete(path); + lvi.SubItems[3].Text = "Deleted"; + lvi.Font = new Font(lvi.Font, FontStyle.Strikeout); + } + } + } + } + + private void cmmiDownloadFile(object sender, EventArgs e) + { + var args = new List>(); + foreach (ListViewItem lvi in lvRip.SelectedItems) + { + if (!File.Exists(Path.Combine(Dir, lvi.Text))) + { + args.Add(Tuple.Create(lvi.ToolTipText/*Url*/, lvi.Text/*Name*/)); + lvi.SubItems[3].Text = "Downloading"; + lvi.Font = new Font(lvi.Font, FontStyle.Regular); + } + } + if (args.Count > 0) + new Thread(DownloadFile).Start(args); + } + + void DownloadFile(object args) + { + var dfi = args as List>; + foreach (var item in dfi) + { + try + { + string path = Path.Combine(Dir, item.Item2); + if (Fetch.Site.Type == "Heels") + { + using (Stream s = Fetch.GetStream(item.Item1, Settings.Default.Cookie)) + { + using (Image bmp = Image.FromStream(s)) + { + s.Close(); bmp.Save(path); + bmp.Dispose(); + } + } + } + else + Fetch.GetFile(item.Item1, path); + LviUpdate = new[] { item.Item2, null, new FileInfo(path).Length / 1024 + " KB", "Finished" }; + } + catch (Exception) + { + LviUpdate = new[] { item.Item2, null, null, "Failed" }; + } + } + } + + private void lvKeyDown(object sender, KeyEventArgs e) + { + switch (e.KeyCode) + { + case Keys.Delete: + if (e.Shift) + cmmiDrop_Click(sender, e); + else + cmmiDeleteFile(sender, e); + break; + case Keys.C: + if (e.Control && lvRip.FocusedItem != null) + Clipboard.SetText(lvRip.FocusedItem.ToolTipText); + break; + } + } + + private void Ripper_KeyDown(object sender, KeyEventArgs e) + { + switch (e.KeyCode) + { + case Keys.Space: + if (tbParse.Focused || tbDir.Focused) break; + if (e.Shift) { mainSplit.Panel2Collapsed = !mainSplit.Panel2Collapsed; cmmiPreview.Checked = !mainSplit.Panel2Collapsed; break; } + mainSplit.Panel1Collapsed = !mainSplit.Panel1Collapsed; + cmmiPreview.Checked = !mainSplit.Panel1Collapsed; + break; + case Keys.Escape: + if (FormBorderStyle == FormBorderStyle.None) + { + FullScreen = false; + FormBorderStyle = FormBorderStyle.Sizable; + Bounds = (Rectangle)this.Tag; + mainSplit.Panel1Collapsed = false; + if ((Fetch.Location == null) && pbPreview.Image == null) + mainSplit.Panel2Collapsed = true; + } + break; + case Keys.F11: + if (FullScreen) + { + FullScreen = false; + FormBorderStyle = FormBorderStyle.Sizable; + Bounds = (Rectangle)this.Tag; + if ((Fetch.Location == null) && pbPreview.Image == null) + mainSplit.Panel2Collapsed = true; + } + else + { + this.Tag = Bounds; + mainSplit.Panel1Collapsed = true; + mainSplit.Panel2Collapsed = false; + FormBorderStyle = FormBorderStyle.None; + Bounds = Screen.PrimaryScreen.Bounds; + FullScreen = true; + } + break; + } + } + + bool CanDownload + { + get + { + if ((Fetch.Site = CheckUrl(Address)) == null) { tsLabel.Text = "Not support!"; return false; } +#if !TRACE + if (!Directory.Exists(Dir)) + { + if (DialogResult.Yes == MessageBox.Show("Do you want to create new folder to store files?", "Directory doesn't exist!", MessageBoxButtons.YesNo, MessageBoxIcon.Question)) + { + try { Directory.CreateDirectory(Dir); return true; } + catch (Exception exp) { MessageBox.Show(exp.Message, "Create Directory failed!", MessageBoxButtons.OK, MessageBoxIcon.Error); return false; } + } + else + return false; + } +#endif + return true; + } + } + + private void cmmiCopyName_Click(object sender, EventArgs e) + { + if (lvRip.FocusedItem != null) + Clipboard.SetText(lvRip.FocusedItem.Text); + } + + private void llFolder_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + if ((fbDir.ShowDialog()) == DialogResult.OK) + Dir = fbDir.SelectedPath; + } + + private void llCookie_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + new SetCookie().ShowDialog(this); + } + + private void tbParse_DragEnter(object sender, DragEventArgs e) + { + if (e.Data.GetDataPresent(DataFormats.Text)) + { + e.Effect = DragDropEffects.Copy; + } + } + + private void tbParse_DragDrop(object sender, DragEventArgs e) + { + TextBox tb = sender as TextBox; + tb.Text = (string)e.Data.GetData(DataFormats.Text); + } + + private void cmsLV_Opening(object sender, CancelEventArgs e) + { + cmmiNextPage.Visible = cmmiBatch.Visible = Batch; + cmmiSave.Visible = cmmiRemove.Visible = cmmiCopyName.Visible = lvRip.SelectedItems.Count > 0; + cmmiDropGroup.Visible = cmmiClear.Visible = lvRip.Items.Count > 0; + } + + private void CloudToolStrip_Click(object sender, EventArgs e) + { + tsCloud.ShowDropDown(); + } + + private void CloudItem_Click(object sender, EventArgs e) + { + ToolStripMenuItem tsmi = sender as ToolStripMenuItem; + switch (tsmi.Text) + { + case "GDrive": WebCloud.Service = WebCloud.CloudType.GDrive; break; + case "Flickr": WebCloud.Service = WebCloud.CloudType.Flickr; break; + case "Facebook": WebCloud.Service = WebCloud.CloudType.Facebook; break; + case "Picasa": WebCloud.Service = WebCloud.CloudType.Picasa; break; + } + new WebCloud() { Text = tsmi.Text }.Show(); + } + + private void tsHome_Click(object sender, EventArgs e) + { + Process.Start("http://imgrip.codeplex.com"); + } + + private void llSites_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + new Sites().Show(this); + } + + private void tb_MouseClick(object sender, MouseEventArgs e) + { + var ctl = sender as TextBox; + if (string.IsNullOrEmpty(ctl.Tag as string)) { if (ctl.SelectionLength == 0) ctl.SelectAll(); ctl.Tag = ctl.SelectedText; } + } + + private void tb_Leave(object sender, EventArgs e) + { + var ctl = sender as TextBox; + ctl.Tag = null; + } + + private void cmmiBatch_CheckedChanged(object sender, EventArgs e) + { + Batch = cmmiBatch.Checked; + } + } + + /// + /// Represent the download button action type. + /// + enum RipperAction { Download, Cancel }; } \ No newline at end of file diff --git a/Main.resx b/Main.resx index fc24558..311ef7f 100644 --- a/Main.resx +++ b/Main.resx @@ -1,1447 +1,1447 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 486, 17 - - - 17, 17 - - - 223, 17 - - - 120, 17 - - - - - /9j/4AAQSkZJRgABAQEAAAAAAAD/4QCqRXhpZgAATU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAZKG - AAcAAAB0AAAALAAAAABDAFIARQBBAFQATwBSADoAIABnAGQALQBqAHAAZQBnACAAdgAxAC4AMAAgACgA - dQBzAGkAbgBnACAASQBKAEcAIABKAFAARQBHACAAdgA2ADIAKQAsACAAcQB1AGEAbABpAHQAeQAgAD0A - IAA3ADUACgAAAAAA/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0aHx4dGhwcICQuJyAiLCMc - HCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIyMjIyMjIyMjIyMjIyMjIyMjIy - MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAIAAgAwEiAAIRAQMRAf/EAB8AAAEFAQEB - AQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQci - cRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVm - Z2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV - 1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//E - ALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDTh - JfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKT - lJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5 - +v/aAAwDAQACEQMRAD8A94uLu3tITLcTJFGOrO2BWdL4m0uMZ82Vwe8cEjD8wKp3tv5HiOGaRFlWddsR - YZMbKDlRk8ZHORz8pqLU9dsLZ3t7m5aSYdYYIt5H1PQfjipnOMFeTsOMXJ2SNV9bsjozamkha2UE52kE - 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 - SUVORK5CYII= - - - - - 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 - rkJggg== - - - - - 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 - BlEAAAAASUVORK5CYII= - - - - 389, 17 - - - 582, 17 - - - 682, 17 - - - 310, 17 - - - 58 - - - - AAABAAEAgIAAAAEAIAAoCAEAFgAAACgAAACAAAAAAAEAAAEAIAAAAAAAAAABABILAAASCwAAAAAAAAAA - AAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8AAAAAAQAAAAEAAAACAAAAAgAAAAMAAAADAAAABAAA - AAQAAAAFAAAABgAAAAYAAAAHAAAABwAAAAgAAAAIAAAABwAAAAcAAAAGAAAABgAAAAUAAAAFAAAABAAA - AAQAAAADAAAAAwAAAAIAAAACAAAAAf///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wAAAAABAAAAAgAAAAMAAAAFAAAABwAA - AAgAAAAJAAAACQAAAAoAAAALAAAADAAAAAwAAAANAAAADQAAAA4AAAAOAAAADgAAAA8AAAAPAAAADwAA - AA8AAAAPAAAADwAAAA8AAAAOAAAADgAAAA4AAAANAAAADQAAAAwAAAAMAAAACwAAAAoAAAAJAAAACQAA - AAgAAAAGAAAABAAAAAMAAAACAAAAAf///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wAAAAABAAAAAgAA - AAQAAAAGAAAABwAAAAgAAAAJAAAACgAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAABIAAAASAAAAEwAA - ABQAAAAUAAAAFQAAABUAAAAWAAAAFgAAABYAAAAWAAAAFgAAABYAAAAWAAAAFgAAABYAAAAVAAAAFQAA - ABQAAAAUAAAAEwAAABIAAAASAAAAEQAAABAAAAAPAAAADgAAAA0AAAAMAAAACgAAAAkAAAAIAAAABwAA - AAUAAAADAAAAAf///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AAAAAAEAAAACAAAABAAAAAYAAAAHAAAACQAAAAoAAAALAAAADQAAAA4AAAAPAAAAEQAA - ABIAAAATAAAAFAAAABUAAAAWAAAAGAAAABkAAAAZAAAAGgAAABsAAAAcAAAAHQAAAB0AAAAdAAAAHgAA - AB4AAAAeAAAAHgAAAB4AAAAdAAAAHQAAAB0AAAAcAAAAGwAAABoAAAAZAAAAGQAAABgAAAAWAAAAFQAA - ABQAAAATAAAAEgAAABEAAAAPAAAADgAAAA0AAAALAAAACgAAAAkAAAAHAAAABgAAAAMAAAAB////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAEAAAADAAAABAAAAAYAAAAHAAAACQAA - AAoAAAAMAAAADQAAAA8AAAAQAAAAEgAAABMAAAAXAAAAGAAAABkAAAAbAAAAHgAAACAAAAAhAAAAIgAA - ACQAAAAlAAAAJgAAACcAAAAoAAAAKQAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAApAAAAKAAA - ACcAAAAmAAAAJQAAACQAAAAiAAAAIQAAACAAAAAcAAAAGwAAABkAAAAYAAAAFQAAABMAAAASAAAAEAAA - AA8AAAANAAAADAAAAAoAAAAJAAAABwAAAAYAAAAEAAAAAv///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wAAAAABAAAAAwAAAAQAAAAGAAAACgAAAAsAAAAPAAAAEAAAABQAAAAVAAAAGAAAABoAAAAdAAAAHwAA - ACAAAAAkAAAAJgAAACcAAAApAAAAKwAAAC0AAAAuAAAAMAAAADEAAAAzAAAANQAAADYAAAA3AAAAOAAA - ADkQTTRwCzYlWAAAADoAAAA5AAAAOAAAADcAAAA2AAAANQAAADMAAAAxAAAAMAAAAC4AAAAtAAAAKwAA - ACkAAAAnAAAAJgAAACQAAAAgAAAAHwAAAB0AAAAaAAAAGAAAABUAAAAUAAAAEAAAAA0AAAALAAAACAAA - AAYAAAAEAAAAAv///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AAAAAAIAAAACAAAABAAAAAcAAAAJAAAADQAAAA4AAAASAAAAFgAA - ABYAAAAYAAAAGwAAAB0AAAAhAAAAIgAAACQAAAAnAAAAKAAAACoAAAAuAAAALwAAADEAAAAxAAAANQAA - ADcAAAA4AAAAOgAAADsAAAA9AAAAPwAAAEAAAABCElM4hht8VP8aeVLwCCgbWQAAAEQAAABCAAAAQAAA - AD8AAAA9AAAAOwAAADoAAAA4AAAANwAAADUAAAAxAAAAMQAAAC8AAAAuAAAAKgAAACgAAAAnAAAAJAAA - ACIAAAAhAAAAHQAAABsAAAAYAAAAFgAAABYAAAASAAAADgAAAA0AAAAJAAAABwAAAAQAAAAC////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAIAAAAEAAAABAAAAAYAAAAIAAAACAAA - AAoAAAAMAAAADQAAABAAAAASAAAAFgAAABcAAAAaAAAAHAAAAB8AAAAhAAAAJAAAACYAAAAnAAAAKQAA - ACsAAAAuAAAAMAAAADAAAAA0AAAANQAAADcAAAA4AAAAOwAAADwAAAA+AAAAPwAAAEAAAABDAAAARA08 - KGsbe1P6JYRc/ht8VP8ZdE7aAw4KTAAAAEUAAABEAAAAQwAAAEAAAAA/AAAAPgAAADwAAAA7AAAAOAAA - ADcAAAA1AAAANAAAADAAAAAwAAAALgAAACsAAAApAAAAJwAAACYAAAAkAAAAIQAAAB8AAAAcAAAAGgAA - ABcAAAAWAAAAEgAAABAAAAANAAAADAAAAAoAAAAIAAAACAAAAAYAAAAEAAAAAgAAAAL///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wAAAAACAAAABAAA - AAYAAAAGAAAACAAAAAoAAAAMAAAADAAAAA4AAAAOAAAAEAAAABIAAAASAAAAFQAAABYAAAAaAAAAHAAA - AB0AAAAhAAAAIgAAACUAAAAnAAAAKQAAACsAAAAtAAAAMAAAADEAAAA0AAAANQAAADgAAAA5AAAAOgAA - ADsAAAA/AAAAQAAAAEAAAABBAAAAQgAAAEMHIxhWGnhR7B5+V/6M0LP/ZrWT/xt8VP8Xa0m9AAAARQAA - AEQAAABDAAAAQgAAAEEAAABAAAAAQAAAAD8AAAA7AAAAOgAAADkAAAA4AAAANQAAADQAAAAxAAAAMAAA - AC0AAAArAAAAKQAAACcAAAAlAAAAIgAAACEAAAAdAAAAHAAAABoAAAAWAAAAFQAAABIAAAASAAAAEAAA - AA4AAAAOAAAADAAAAAwAAAAKAAAACAAAAAYAAAAGAAAAAgAAAAL///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AAAAAAIAAAAEAAAABgAAAAgAAAAIAAAACgAAAAwAAAAOAAAAEAAAABAAAAASAAAAFAAA - ABQAAAAWAAAAFwAAABcAAAAZAAAAGQAAABwAAAAfAAAAIQAAACMAAAAnAAAAKAAAACsAAAAsAAAALwAA - ADAAAAAyAAAANAAAADQAAAA4AAAAOQAAADoAAAA8AAAAPQAAAD4AAABBAAAAQgAAAEIAAABCAgwISBlz - TtYbfFT/eMSj/6Thx/+j4Mb/SaF7/xt8VP8UXD6ZAAAARQAAAEMAAABCAAAAQgAAAEIAAABBAAAAPgAA - AD0AAAA8AAAAOgAAADkAAAA4AAAANAAAADQAAAAyAAAAMAAAAC8AAAAsAAAAKwAAACgAAAAnAAAAIwAA - ACEAAAAfAAAAHAAAABkAAAAZAAAAFwAAABcAAAAWAAAAFAAAABQAAAASAAAAEAAAABAAAAAOAAAADAAA - AAoAAAAIAAAACAAAAAYAAAAEAAAAAv///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8AAAAAAgAAAAQAAAAGAAAACAAAAAgAAAAKAAAADAAA - AA4AAAAQAAAAEAAAABIAAAAUAAAAFgAAABYAAAAXAAAAGQAAABkAAAAbAAAAHQAAAB8AAAAfAAAAIQAA - ACMAAAAjAAAAJgAAACcAAAApAAAALAAAAC0AAAAxAAAAMgAAADQAAAA1AAAAOAAAADkAAAA7AAAAPAAA - AD0AAAA/AAAAQAAAAEEAAABCAAAAQwAAAEMXaki7G3xU/1+xjv+j4cb/i9m3/5zewf+b3MD/Mo9o/ht7 - U/0PRi93AAAARgAAAEMAAABDAAAAQgAAAEEAAABAAAAAPwAAAD0AAAA8AAAAOwAAADkAAAA4AAAANQAA - ADQAAAAyAAAAMQAAAC0AAAAsAAAAKQAAACcAAAAmAAAAIwAAACMAAAAhAAAAHwAAAB8AAAAdAAAAGwAA - ABkAAAAZAAAAFwAAABYAAAAWAAAAFAAAABIAAAAQAAAAEAAAAA4AAAAMAAAACgAAAAgAAAAIAAAABgAA - AAQAAAAC////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AAAAAAgAA - AAQAAAAGAAAACAAAAAoAAAAMAAAADAAAAA4AAAAQAAAAEgAAABQAAAAUAAAAFgAAABcAAAAZAAAAGwAA - ABsAAAAdAAAAHwAAACEAAAAhAAAAIwAAACUAAAAmAAAAJgAAACgAAAAqAAAAKgAAACwAAAAuAAAALwAA - ADIAAAAyAAAANAAAADcAAAA4AAAAOwAAADsAAAA+AAAAPgAAAEAAAABBAAAAQQAAAEMAAABDFF0/mBt8 - VP9Gn3r/oeDF/5Lbu/9NxZH/X8uc/5/gxP+O1bb/JINb/hp6UvMJLR5dAAAARAAAAEMAAABDAAAAQQAA - AEEAAABAAAAAPgAAAD4AAAA7AAAAOwAAADgAAAA3AAAANAAAADIAAAAyAAAALwAAAC4AAAAsAAAAKgAA - ACoAAAAoAAAAJgAAACYAAAAlAAAAIwAAACEAAAAhAAAAHwAAAB0AAAAbAAAAGwAAABkAAAAXAAAAFgAA - ABQAAAAUAAAAEgAAABAAAAAOAAAADAAAAAwAAAAKAAAACAAAAAYAAAAEAAAAAv///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8AAAAAAgAAAAQAAAAGAAAACAAAAAgAAAAMAAAADAAAAA4AAAAQAAAAEgAA - ABQAAAAWAAAAFgAAABcAAAAZAAAAGwAAAB0AAAAdAAAAHwAAACEAAAAjAAAAJQAAACYAAAAmAAAAKAAA - ACoAAAAsAAAALAAAAC4AAAAwAAAAMAAAADEAAAAzAAAANQAAADUAAAA3AAAAOAAAADgAAAA7AAAAOwAA - AD4AAABAAAAAQAAAAEEAAABCAAAAQxBJMXobe1P9Mo9o/pvcwP+a3sD/UseU/0bDjf9Fw4z/a8+k/53f - w/97yaf/G3xU/xl1T98DEQxNAAAARQAAAEMAAABCAAAAQQAAAEAAAABAAAAAPgAAADsAAAA7AAAAOAAA - ADgAAAA3AAAANQAAADUAAAAzAAAAMQAAADAAAAAwAAAALgAAACwAAAAsAAAAKgAAACgAAAAmAAAAJgAA - ACUAAAAjAAAAIQAAAB8AAAAdAAAAHQAAABsAAAAZAAAAFwAAABYAAAAWAAAAFAAAABIAAAAQAAAADgAA - AAwAAAAMAAAACAAAAAgAAAAGAAAABAAAAAL///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAIAAAAEAAAABgAA - AAgAAAAKAAAADAAAAA4AAAAQAAAAEAAAABIAAAAUAAAAFgAAABcAAAAZAAAAGwAAABsAAAAdAAAAHwAA - ACEAAAAjAAAAJQAAACYAAAAmAAAAKAAAACoAAAAsAAAALgAAADAAAAAwAAAAMQAAADMAAAA1AAAANwAA - ADcAAAA4AAAAOgAAADwAAAA8AAAAPgAAAD8AAAA/AAAAQQAAAEMAAABDAAAARRMNB1ErPSaFHHpS+SSD - XP6R1bf/n9/E/1zKm/9Fw43/Q8OL/0HCi/9Awor/etSu/5vfwf9jt5T/G3xU/xhsScQAAABGAAAARgAA - AEUAAABFAAAAQwAAAEMAAABBAAAAPwAAAD8AAAA+AAAAPAAAADwAAAA6AAAAOAAAADcAAAA3AAAANQAA - ADMAAAAxAAAAMAAAADAAAAAuAAAALAAAACoAAAAoAAAAJgAAACYAAAAlAAAAIwAAACEAAAAfAAAAHQAA - ABsAAAAbAAAAGQAAABcAAAAWAAAAFAAAABIAAAAQAAAAEAAAAA4AAAAMAAAACgAAAAgAAAAGAAAABAAA - AAL///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wAAAAACAAAABAAAAAYAAAAIAAAACgAAAAwAAAAOAAAAEAAAABIAAAASAAAAFAAA - ABYAAAAXAAAAGQAAABsAAAAdAAAAHwAAACEAAAAhAAAAIwAAACUAAAAmAAAAKAAAACoAAAAsAAAALAAA - AC4AAAAwAAAAMQAAADMAAAA1AAAANwAAADgAAAA4AAAAOgAAADwAAAA+AAAAPwAAAD8AAABBAAAAQyQZ - Dl5GMRyPVT0htl9DJ9NnSyrvZlAx/yd1T/8bfFT/gcur/6Hgxf9rz6T/RcOM/0LCi/8/wor/PcGJ/zzB - iP8+wYn/hdi1/5newP9Io33/G3xU/zxgPPBYPiPHTTceqDcnFnwMCARPAAAARgAAAEYAAABFAAAAQwAA - AEEAAAA/AAAAPwAAAD4AAAA8AAAAOgAAADgAAAA4AAAANwAAADUAAAAzAAAAMQAAADAAAAAuAAAALAAA - ACwAAAAqAAAAKAAAACYAAAAlAAAAIwAAACEAAAAhAAAAHwAAAB0AAAAbAAAAGQAAABcAAAAWAAAAFAAA - ABIAAAASAAAAEAAAAA4AAAAMAAAACgAAAAgAAAAGAAAABAAAAAL///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AAAAAAgAAAAQAAAAGAAAACAAA - AAgAAAAKAAAADAAAAA4AAAAQAAAAEgAAABQAAAAWAAAAFwAAABkAAAAZAAAAGwAAAB0AAAAfAAAAIQAA - ACMAAAAlAAAAJgAAACgAAAAqAAAALAAAACwAAAAuAAAAMAAAADEAAAAzAAAANQAAADcAAAA4AAAAOgAA - ADwAAAA8AAAAPgAAAD8YEQlQRTAbiFc9I7lkRyfpakws/25PL/9xVDT/dFY2/3RYOf80ckz/G3xU/2y8 - mv+i4MX/e9St/0XDjf9Cw4v/P8KK/z3BiP86wIf/OMCG/zfAhv9Bw4v/jtu7/5PbvP80kWr/G3tU/11m - Rf90WDv/bFAx/2VHKPtbQSTUTTYepTMkFHQCAQFHAAAARQAAAEMAAABBAAAAPwAAAD4AAAA8AAAAPAAA - ADoAAAA4AAAANwAAADUAAAAzAAAAMQAAADAAAAAuAAAALAAAACwAAAAqAAAAKAAAACYAAAAlAAAAIwAA - ACEAAAAfAAAAHQAAABsAAAAZAAAAGQAAABcAAAAWAAAAFAAAABIAAAAQAAAADgAAAAwAAAAKAAAACAAA - AAgAAAAGAAAABAAAAAL///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wAAAAACAAAABAAAAAYAAAAIAAAACgAAAAwAAAAOAAAADgAAABAAAAASAAAAFAAA - ABYAAAAXAAAAGQAAABsAAAAdAAAAHQAAACEAAAAhAAAAIwAAACUAAAAmAAAAKAAAACoAAAAsAAAALgAA - ADAAAAAwAAAAMwAAADMAAAA1AAAAN0FBQUaoqKh2kJCQahwaGEdBLhp8XEEkxGdJKftqSyr/bU8t/3FR - Mf9yUzL/dVU1/3dXNv95WTj/RWxH/xt8VP9TqYX/o+DG/4vZt/9IxI7/RMOM/0HCiv89wYn/OsCH/zfA - hv81v4X/M7+E/zK/g/9KxpH/lN2+/4nUtf8khFz/IHtU/3VtT/+Ga0//g2lN/3peQf9wVDb/aEoq/2FE - JutOOB+nJxsPYgAAAEEAAABBAAAAPwAAAD4AAAA8AAAAOgAAADgAAAA3AAAANQAAADMAAAAzAAAAMAAA - ADAAAAAuAAAALAAAACoAAAAoAAAAJgAAACUAAAAjAAAAIQAAACEAAAAdAAAAHQAAABsAAAAZAAAAFwAA - ABYAAAAUAAAAEgAAABAAAAAOAAAADgAAAAwAAAAKAAAACAAAAAYAAAAEAAAAAv///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAIAAAAEAAAABgAA - AAgAAAAIAAAACgAAAAwAAAAOAAAAEAAAABIAAAAUAAAAFgAAABcAAAAZAAAAGwAAABsAAAAdAAAAHwAA - ACEAAAAjAAAAJQAAACYAAAAoAAAAKgAAACwAAAAsAAAALgAAADAAAAAxAAAAMwAAADWHh4de7+/v0fr5 - +fX5+Pf74tzW/IFnSv+CZ0r/iG5S/4RnSv97Wzv/dlYz/3dXM/96WDX/e1o3/1dnQv8bfFT/PZhx/6Hf - xP+X3b//UMaS/0bEjf9Dw4z/P8KK/zzBiP85wIb/Nb+F/zK+g/8wvoL/Lr2B/zC+gv9by5z/lt2//3nK - qP8cfVX/K3lT/4NtUP+Nc1f/l4Bn/5qEbP+bh3D/lYBp/4JpTf9pTS7/XUEl10cyHI0LBwREFxcXQQAA - ADwAAAA6AAAAOAAAADcAAAA1AAAAMwAAADEAAAAwAAAALgAAACwAAAAsAAAAKgAAACgAAAAmAAAAJQAA - ACMAAAAhAAAAHwAAAB0AAAAbAAAAGwAAABkAAAAXAAAAFgAAABQAAAASAAAAEAAAAA4AAAAMAAAACgAA - AAgAAAAIAAAABgAAAAQAAAAC////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AAAAAAIAAAAEAAAABgAAAAgAAAAKAAAADAAAAA4AAAAQAAAAEgAA - ABIAAAAUAAAAFgAAABcAAAAZAAAAGwAAAB0AAAAfAAAAIQAAACEAAAAjAAAAJQAAACYAAAAoAAAAKgAA - ACwAAAAsAAAALgAAADAAAAAxAAAAM3FmW3DX0crr8u/s//f18//w7en/yr+z/8O1pv+/sJ//wbGh/8Gx - oP++rZv/qpR8/5FyUv9pZD7/HXtT/y2JY/+b27//oODE/1vJmv9JxI//RsON/0LDi/8/wor/PMGI/zjA - hv81v4T/Mb6D/y69gf8rvYD/Lr2B/zK+g/9w0aj/mN7A/2W6lv8bfFT/To5t/9HGuv/Uyb7/1Mq//9bM - wv/VzML/187G/9bOxf/HvLD/sKCP/8O4rfjo5eLq8/Pz4OTk5LuZmZloAAAANQAAADMAAAAxAAAAMAAA - AC4AAAAsAAAALAAAACoAAAAoAAAAJgAAACUAAAAjAAAAIQAAACEAAAAfAAAAHQAAABsAAAAZAAAAFwAA - ABYAAAAUAAAAEgAAABIAAAAQAAAADgAAAAwAAAAKAAAACAAAAAYAAAAEAAAAAv///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AAAAAAgAA - AAIAAAAEAAAABgAAAAgAAAAKAAAADAAAAA4AAAAQAAAAEAAAABIAAAAUAAAAFgAAABcAAAAZAAAAGwAA - ABsAAAAdAAAAHwAAACEAAAAjAAAAJQAAACYAAAAmAAAAKAAAACoAAAAsAAAALjspF1xgRCbBj3df/8K0 - pv/RyL3/wbOk/5B2Wf9+XTv/eVgz/3lWMf99WTP/h2ZC/5V2V/+uln7/rqiT/ymAWf8ggFj/kNO2/6bi - x/9qzqL/TcWR/0rEj/9GxI3/Q8OM/z/Civ88wYj/OcCG/zW/hf8yvoP/ML6C/y++gv8wvoL/M7+E/zi/ - hv+C17P/mt7B/02mgf8bfFT/XYJg/5Z6XP+Td1j/j3NV/45zVv+XfmT/o453/7CejP/i3Nb/9/b0//v7 - +v/8/Pz/9vX09+7t7dFxcXFMAAAAMAAAADAAAAAuAAAALAAAACoAAAAoAAAAJgAAACYAAAAlAAAAIwAA - ACEAAAAfAAAAHQAAABsAAAAbAAAAGQAAABcAAAAWAAAAFAAAABIAAAAQAAAAEAAAAA4AAAAMAAAACgAA - AAgAAAAGAAAABAAAAAIAAAAC////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAIAAAAEAAAABgAAAAgAAAAKAAAADAAA - AAwAAAAOAAAAEAAAABIAAAAUAAAAFgAAABYAAAAXAAAAGQAAABsAAAAdAAAAHQAAAB8AAAAhAAAAIwAA - ACUAAAAmAAAAJiUaDztdQiWwbE4t/q+di//KvbH/oIpy/3hYNf93VDD/eVYx/3tXMf99WTL/f1oz/4Bb - NP+CXTT/g101/4FgN/8yeFD/G3xU/4DHqP+q48n/fNOs/1HGk/9OxZH/S8WP/0fEjv9Ew4z/QcKK/z3B - if86wIf/N8CG/zW/hf8zv4T/M7+E/zO/hP81v4X/OMCG/0TDjf+R27v/mNzA/zmVbv8bfFT/bHZT/5N0 - VP+SdFT/kXNV/5BzVf+Pc1b/jXNW/6mVgP/Z0cj/8u/s//n49//z8e//zMO5+VpGMX8AAAAsAAAALAAA - ACoAAAAoAAAAJgAAACYAAAAlAAAAIwAAACEAAAAfAAAAHQAAAB0AAAAbAAAAGQAAABcAAAAWAAAAFgAA - ABQAAAASAAAAEAAAAA4AAAAMAAAADAAAAAoAAAAIAAAABgAAAAQAAAAC////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AAAAAAIAAAACAAAABAAAAAYAAAAIAAAACgAAAAwAAAAMAAAADgAAABAAAAASAAAAFAAA - ABQAAAAWAAAAFwAAABkAAAAbAAAAGwAAAB0AAAAfAAAAIQgFAyRVPCKAaEop8XJTMv+5qZj/x7qs/4Zo - SP93VTD/elYx/3xYMv9/WjP/gFs0/4NdNf+FXjX/hmA2/4hgNv+JYjf/QnNK/xt8VP9otpT/uejT/5rd - wP9Wx5X/UseT/0/Gkv9MxZD/ScSO/0XDjf9Cw4v/P8KK/z3Bif86wIf/OMCG/zfAhv83wIX/N8CG/znA - hv87wYj/PcGJ/1PIlf+b38L/kde5/yiGX/8gfFT/gHdU/5Z2Vf+UdVX/k3ZW/5J1Vv+SdVb/kHRW/490 - V/+jjnf/sKCN/8e8sP/e19D/nYt3/11CJck2JhVKAAAAJgAAACUAAAAjAAAAIQAAACEAAAAfAAAAHQAA - ABsAAAAbAAAAGQAAABcAAAAWAAAAFAAAABQAAAASAAAAEAAAAA4AAAAMAAAADAAAAAoAAAAIAAAABgAA - AAQAAAACAAAAAv///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wAAAAACAAAAAgAA - AAQAAAAGAAAACAAAAAgAAAAKAAAADAAAAA4AAAAQAAAAEAAAABIAAAAUAAAAFgAAABYAAAAXAAAAGQAA - ABlBLhpBZUgo1GtMK/9vTyz/sp+M/8i7rf+EZUP/elcx/31ZMv9/WjP/glw0/4ReNf+GYDb/iGE3/4pi - N/+MYzj/jmU5/1hwRf8bfFT/T6OA/7bm0P+96dX/edOr/1fIlv9Ux5T/UcaS/03Fkf9KxY//R8SO/0XD - jP9Cwov/QMKK/z7Bif88wYj/O8GI/zvBh/87wYj/PMGI/z7Bif9Awor/QsOL/2bNof+g4MT/hc6v/x19 - Vf8se1T/kHhU/6GCY/+egGL/mHla/5V2V/+Ud1j/knZY/5F2WP+QdVj/j3VZ/6uZhf/g2tP/s6WV/2RJ - KftWPCGUBQQCIQAAAB8AAAAdAAAAGwAAABkAAAAZAAAAFwAAABYAAAAWAAAAFAAAABIAAAAQAAAAEAAA - AA4AAAAMAAAACgAAAAgAAAAIAAAABgAAAAQAAAACAAAAAv///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAIAAAAEAAAABAAAAAYAAAAIAAAACgAA - AAoAAAAMAAAADgAAABAAAAAQAAAAEgAAABQAAAAUVTwhWmlKKfJtTSz/cVAt/5l/Zf/TyLz/jnBR/31Z - Mv+AWzP/gl00/4VeNf+HYDb/iWI3/4xjOP+OZTn/j2Y6/5FnOv9vbkL/G3xT/zmRbP+v4sv/xOvZ/5vd - v/+E1rH/WciW/1XHlf9Sx5P/T8aS/03FkP9KxI//R8SO/0XDjf9Dw4z/QcKL/0DCiv8/wor/P8KK/z/C - iv9Awor/QcKL/0PDjP9Fw43/SMSO/3vUrf+i4Mb/cb+d/xt8VP8+e1T/oYNi/6SGZv+jhWX/mnta/5d5 - WP+Vd1j/lXhZ/5N3WP+Rdln/kHVZ/6WQe//f2NH/s6OU/3FWOP9eQiW9JBoOJwAAABcAAAAXAAAAFgAA - ABQAAAAUAAAAEgAAABAAAAAQAAAADgAAAAwAAAAKAAAACgAAAAgAAAAGAAAABAAAAAQAAAAC////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8AAAAAAgAAAAIAAAAEAAAABgAAAAYAAAAIAAAACgAAAAwAAAAMAAAADmBE - JnxqSyr9b08s/3NRLv97Wjb/0sa6/6iQd/9/WjP/gl00/4VfNf+IYDb/imI3/4xkOP+PZjn/kWc6/5Np - O/+Vajz/gm1A/yF7U/8ohV7/pdzD/8jt3P+l4cX/l9y8/4/auP9ayZf/V8iW/1XHlP9SxpP/T8aS/03F - kP9KxY//SMSO/0bEjf9Fw4z/RMOM/0PDjP9Dw4z/Q8OM/0TDjP9Fw43/R8SN/0jEjv9LxY//TsWR/4/a - uf+l4sf/WKuI/xt8VP9Yflj/qIlo/6aIZ/+khWX/mntZ/5l6Wf+XeVn/lnha/5R3Wf+Sd1r/kHZa/6yZ - hf/j3df/pJF9/4BnTf9mSi3bQi4aMwAAABIAAAAQAAAAEAAAAA4AAAAMAAAADAAAAAoAAAAIAAAABgAA - AAYAAAAEAAAAAgAAAAL///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8AAAAAAgAAAAIAAAAEAAAABjMjFAxnSCmibU0r/3FQLf90Uy//eFUw/6KJbv/Sxbj/hWA5/4Ve - Nf+IYDb/i2M4/41kOf+QZjr/kmg7/5RpPP+Xaz3/mG09/5FuP/8selH/HX5V/5XSt//I7Nv/seTM/5zd - wP+Y3b3/ldy8/2LLm/9ayJf/V8iW/1THlP9SxpP/UMaS/03Fkf9LxZD/SsSP/0jEjv9IxI7/R8SO/0fE - jf9HxI7/SMSO/0nEjv9KxI//TMWQ/07Fkf9QxpL/WMmX/53ewf+l4Mb/P5hz/xt8VP94hWH/q4tp/6mK - aP+jg2H/nHxZ/5t7Wv+Zelr/mHpa/5Z5Wv+UeFv/knda/8KzpP/e18//kXlh/4hxV/9uUjbwVDwhTAAA - AAoAAAAIAAAACAAAAAYAAAAGAAAABAAAAAIAAAAC////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wBlSCgWaksqxG5O - LP9yUS7/dlMv/3lWMf99WTL/y7ur/7Sdg/+HYDb/imI3/41kOf+QZjr/kmg7/5VqPP+YbD3/mm4+/5xv - P/+bcUD/PXlP/xt8VP+Aw6X/xuvZ/7zo1P+h38L/nd7A/5rdvv+W3Lz/bc+j/1zJmP9ayJf/V8iW/1XH - lf9Tx5P/UcaS/0/Gkv9OxZH/TMWQ/0vFkP9LxZD/S8WP/0vFkP9MxZD/TcWQ/07Fkf9PxpL/UcaT/1PH - lP9Vx5X/Z8yf/6bhx/+f28D/LYli/x98VP+RiWb/rY1r/6uMaf+igFz/n31a/518Wf+be1r/mXtb/5h6 - W/+VeFr/lntf/97Wzv+1pJL/jXRa/4pzWv90WT77XkIlbQAAAAIAAAAC////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8AZkgpLmpLKuBuTiz/c1Eu/3dUMP96VzH/f1oz/5d4Vv/c0cX/lXFL/4xk - OP+PZjr/kmg7/5VqPP+YbD3/m24+/51wP/+gckD/oXNB/1V5TP8bfFT/ZbCQ/8Pq2P/G69r/peDF/6Lf - w/+f38H/m92+/5jcvf960qr/X8qa/13JmP9ayZf/WMiW/1bHlf9Ux5T/U8eT/1HGk/9QxpL/T8aS/0/G - kv9PxpL/T8aS/1DGkv9QxpL/UcaT/1PHlP9Vx5T/VsiV/1jIlv9byZf/d9Gp/6zjyv+T07f/H35X/yt9 - Vv+jjWn/r45r/6uKZv+if1r/oH5b/559Wv+cfVv/mntb/5h7W/+WeVv/vaya/9vSyf+Rd1z/jXRb/4tz - W/97Ykj/Y0YomVxBJQX///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AGdJKVBrTCvzb08s/3RS - Lv94VTD/fFgy/4BbM/+DXTX/v6qU/8i0oP+OZTn/kWc6/5VqPP+YbD3/m24+/51wP/+gckH/o3RC/6V2 - Q/9weEr/G3xU/0udef+/6NT/zu7e/6ziyP+n4cX/pODD/6Dfwv+c3cD/mt2+/4XWsf9iypv/YMqa/13J - mf9byZj/WsiX/1jIlv9WyJX/VceV/1THlP9Tx5T/U8eU/1PHk/9Tx5T/VMeU/1THlP9Vx5X/V8iV/1jI - lv9ayJf/XMmY/17Jmf9gypr/iti0/6/ky/9/xaf/G3xU/z5+Vv+ujmn/sZBs/6iEX/+jgFv/ooBb/6B+ - W/+dflv/m3xb/5l7W/+eg2b/5N3W/66ZhP+Qd1v/jnVb/4x0W/+BaU//ZUkswVxBJRP///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wBnSSlNa0wr/XBPLf90Uy//eVYw/31ZMv+BXDT/hV41/5BrRP/d0cT/qYhm/5Rp - O/+Xaz3/mm0+/51wP/+gckD/o3RC/6Z2Q/+oeET/iHlI/x58VP80jWf/t+PO/9Lv4f+05c3/q+LH/6jh - xv+l4MX/ot/C/57ewP+c3b//kdq5/2XLnP9jy5v/Ycqa/1/Kmf9dyZn/W8mY/1rJl/9ZyJb/WMiW/1fI - lv9XyJb/V8iV/1fIlv9XyJb/WMiW/1nIl/9ayZf/XMmY/13Jmf9fypr/Ycqb/2PLnP9ly53/nN2//7Hl - zf9lsZD/G3xU/1mAV/+0kmz/q4Ze/6eDXP+lgVv/o4Fb/6F/W/+eflv/nH1b/5p8W//Juqn/1Mi8/5N4 - W/+Rd1v/jnVb/4x0W/+FblX/aU0x0VxBJAv///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AZkgpLGtMK/JwTy3/dFMv/3lW - Mf99WTL/glw0/4ZfNv+KYjf/qIhm/93Rw/+WbD7/mG09/5xvP/+fcUD/onNB/6V2Q/+oeET/q3pF/5t8 - R/8nfFP/JIFa/6rbxP/T8OL/vejS/6/jyv+s4sj/quLH/6fhxf+k38P/oN/B/57ewP+a3b7/as2f/2bM - nf9ky5z/Ysub/2HKmv9fypr/XsmZ/13JmP9cyZj/W8mY/1vJmP9byZf/W8mY/1vJmP9cyZj/XcmZ/17K - mf9fypr/Ycqa/2PLm/9ky5z/Zsyd/2jMnv9vzqL/qeHH/7Lkzf9JnHj/G3xU/3eCWf+shVz/q4Vc/6mD - XP+mglz/pIFc/6GAW/+ff1v/nX1b/6eNcf/n4Nn/po92/5N4W/+Rdlv/jnVb/4tzWv+FbVX/Z0wvr1tA - JAH///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AGVIKBRrTCvfcE8t/3RTL/95VjH/flkz/4JdNP+GYDb/i2M4/49mOf+6n4H/08Ct/5pu - Pv+ecED/oXNB/6R1Qv+nd0T/qnlF/618Rv+pfEb/NnxR/xt8VP+Yz7X/0u7g/8fq2f+05M3/seTL/67i - yf+r4sj/qeHG/6XgxP+i38L/oN7B/5zdv/960qr/acyf/2fMnv9my53/ZMuc/2PLm/9iypv/Ycqa/2DK - mv9fypr/X8qa/1/Kmf9fypr/X8qa/2DKmv9hypr/Ysqb/2PLnP9ky5z/Zsyd/2jMnv9qzJ//bM2g/27N - of970an/suXN/63fyP8xjGX/HnxU/4+FWv+uh1z/rIVd/6mEXP+og1z/pYJc/6KBXP+gf1v/nn1b/9XI - uv/IuKb/lnpb/5N4W/+Rdlv/jnVb/4tzWv+Da1P/ZUoug////wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wBlRygGaksqwm9PLP90Uy//eVYx/35Z - M/+DXTX/h2A2/4tjOP+PZjr/lGk7/8qzm//IsJb/oHJA/6N0Qv+mdkP/qnlF/617Rv+vfUb/r31G/018 - T/8bfFT/f76g/9Du3//Q7t7/uObP/7blzv+y5Mv/sOPK/63iyP+r4cf/p+HF/6Tfw/+i38L/n97A/5DZ - tv9tzaD/a82f/2nMn/9ozJ7/Z8yd/2bLnf9ly5z/ZMuc/2PLnP9jy5z/Y8ub/2PLnP9jy5z/ZMuc/2XL - nP9my53/Z8yd/2jMnv9qzJ//a82g/23NoP9vzqH/cc6i/3PPo/+K1rL/uebQ/6LYv/8igFn/Kn1V/6OH - XP+wiF3/rYZd/6uFXf+ohFz/poJc/6SBXP+gf1v/xrOf/9fLvf+Ze1v/lnpb/5N4W/+Qdlv/jXRb/4pz - Wv+AaE/+ZEktV////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AGlKKpxuTiz/dFIu/3lWMP9+WTP/g101/4hgNv+MYzj/kWc6/5VqPP+ZbT7/2sm2/8Ch - gP+kdUL/qHhE/6x6Rf+vfUf/sH1G/7F+Rv9nfUz/G3xU/1+piP/L7Nz/1vDj/73n0f+65s//t+XO/7Tk - zf+x48v/r+PJ/6ziyP+p4cb/puDE/6Tgw/+h3sH/nt7A/3bQpv9vzqH/bc2g/2zNoP9qzZ//acyf/2nM - nv9ozJ7/Z8ye/2fMnv9nzJ3/Z8ye/2fMnv9ozJ7/acye/2rMn/9rzZ//bM2g/23Nof9vzqH/cM6i/3LP - o/90z6T/dtCl/3jQpv+b3Lz/u+fR/4/Lr/8bfFT/PX9W/6+IXP+xiV3/r4dd/6yGXf+phF3/poNc/6OB - W/+7o4n/5NzS/5t8W/+Ye1v/lXlb/5J3Wv+PdVr/jXRZ/4pzWf98ZUv3YUUpM////wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wBoSilxbk4s/3NSLv94VTD/fVky/4Jd - NP+IYDb/jGM4/5FnOv+Vajz/mm0+/6BzRP/l2cv/uJJp/6p5Rf+tfEb/r31G/7B+Rv+yf0b/gn5K/xt8 - VP9ClnL/xOjV/9nx5f/B6NT/vefR/7vm0f+55c//tuXN/7PkzP+x48r/ruLJ/6vhx/+o4cX/puDE/6Pf - wv+g3sH/itey/3LPo/9xzqL/b86i/27Oof9tzaH/bM2g/2zNoP9rzaD/a82f/2vNn/9rzaD/bM2g/2zN - oP9tzaD/bc2h/27Oof9wzqL/cc6i/3LPo/90z6T/dtCl/3jQpv960Kf/fNGo/37Sqf+q4cb/vujT/3K3 - mP8bfFT/WIJX/7SLXf+yiV7/r4dd/62GXf+qhF3/poNc/7GUc//p4dn/polp/5t8W/+Yelv/lXlb/5J2 - Wv+PdVr/jHRZ/4lyWf96YknnXEEkGP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8AZ0kpSG1NK/xyUS7/d1Uw/31ZMv+CXTT/h2A2/4xjOP+RZzr/lWo8/5xxQv+vimL/x6qM/+3j - 2f+1iVv/r31H/7B9Rv+xfkb/sn9G/5h/SP8ifFP/Lohi/7jhzf/a8eX/xurX/77n0v+959H/vObR/7rm - 0P+45c7/teTM/7Ljy/+w48r/reLI/6rhxv+o4MX/peDD/6Pfwv+c3b7/d9Cl/3TPpP9zz6P/cs+j/3HO - o/9wzqL/cM6i/2/Oov9vzqL/b86h/2/Oov9vzqL/cM6i/3HOov9xzqP/cs+j/3PPpP91z6T/dtCl/3jQ - pv950Kb/e9Gn/33RqP9/0qn/gdKq/4XUrP+25M3/v+fT/1Oif/8bfFT/d4ZZ/7WLXv+yiV7/sIhe/62H - Xf+qhV3/qYZg/+nh2P+1m3//nX5b/5t8W/+Yelv/lXhb/5F2Wv+OdFr/i3NZ/4hxWP90W0HNWkAkB/// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AGVHKChrTCvwcVAt/3ZUL/98WDL/gVw0/4Zg - Nv+MYzj/kWc6/5VqPP+gd0r/zbac/+HRwf/v5t3/+PTw/+HOuv+/l2v/sn9G/7OARv+ogEb/Ln1S/x9+ - V/+n18D/1/Dk/8vs2//A6NP/vufS/73n0f+85tH/u+bQ/7rlz/+35c3/tOTM/7Lky/+v48n/reLI/6rh - xv+n4MX/pd/D/6Pfwv+G1K//eNCm/3fQpf920KX/dc+k/3TPpP90z6T/c8+k/3PPo/9zz6P/c8+k/3PP - pP90z6T/dc+k/3XPpf920KX/d9Cl/3jQpv960af/e9Gn/33RqP9+0qn/gNKq/4LTq/+E06z/htSt/5DX - s/+/59P/u+TP/ziPaf8dfFT/k4hb/7aMXv+zil3/sIhe/62GXf+qhV3/4dXH/8Ksk/+hf1v/nX5b/5p7 - W/+XeVv/k3da/5B1Wf+Mc1j/iXFY/4VtVv9kSy6k////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wBjRicBaUoqyW9PLP91Uy//elcx/4BbM/+GXzb/i2M4/5BmOv+Vajz/mm8//8WqjP/l2Mr/8uzk//r3 - 9P/8+/n/9e/p/+3h1P/VuJj/zrCM/0eJYf8bfFT/j8it/9Pv4f/R7t//wOjU/8Do0/++59L/vefR/7zm - 0f+75tD/uuXP/7jlzv+25c3/tOTM/7Hjyv+v4sj/rOLH/6rhxv+o4MX/puDD/5nbuv980aj/e9Gn/3rR - p/950Kb/eNCm/3jQpv930Kb/d9Cl/3fQpf930KX/eNCm/3jQpv940Kb/edCm/3rRp/970af/fNGo/33R - qf9/0qn/gNKq/4LTq/+E06z/htOt/4fUrv+J1K7/jNWw/5zauv/D6dX/rtzG/yWCWv8ofVX/p4tb/7eM - Xv+zil7/sIhe/62GXf/XxbL/0L2p/6OBW/+gf1v/nX1b/5l7Wv+WeVr/k3dZ/5B1Wf+Lclf/iHBX/3pi - SP9cQSRU////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AGlLKmZwUTD/c1Iu/3lWMP9/WjP/hV41/4pi - N/+Yckn/tZd3/8WrkP/QuaH/5dnK//Lr5P/48+//+/n3//z6+f/07eX/6t3N/86rg/9hil//G3xU/3G2 - l//O7d3/3/Pp/9rx5f/Z8eT/2PHk/9fw4//X8OP/1vDi/9Xw4v/U7+H/1O/h/9Pv4P++59L/s+TL/7Hj - yv+v4sj/rOHH/6vhxv+o4MX/pt/D/4vWsf9/0qn/ftKp/33RqP980aj/fNGo/3vRqP970af/e9Gn/3vR - p/970aj/fNGo/3zRqP990aj/ftKp/3/Sqf+C06z/suPL/7Pky/+05Mz/teTN/7bkzf+35M3/uOXO/7nl - zv+55c7/ueXO/8Lo1P/D6db/mc+1/xt8VP86f1X/tIxc/7eNX/+0i17/sIhe/863n//czLz/poJc/6OB - W/+fflv/nH1b/5h6Wv+VeFr/kXZY/450WP+KcVf/hnBX/2tRNuZZPyQM////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wBkRygTc1U27XNTMP93VDD/fVky/4NdNf+beVX/uqGG/867pv/FrZL/uZl2/7SOZv/Gp4X/4M25/+3i - 1v/38uz/+fby/+zf0f/fyK7/eYRS/xt8VP9Dl3P/st/J/7Tgyv+04Mr/teHL/7Xhy/+14cv/teHL/7Xh - y/+34cv/t+HL/7nizP/A59T/0O7f/8Dn0/+15Mz/s+PL/7Hjyv+v4sj/reHH/6vhxv+p4MT/pN/C/4bU - rf+C06v/gdKq/4DSqv+A0qr/f9Kq/3/Sqf9/0qn/f9Kq/4DSqv+A0qr/gNKq/4HSqv+C06v/g9Or/4fU - rv+/6NT/vefS/7bizP+04cv/teHL/7bhzP+24cz/tuHM/7bhzP+24cz/tuHM/7bhzP+24cz/arCR/xt8 - VP9Uglb/uY1d/7eMXv+zil7/z7ac/93Ovf+pg1z/pYFc/6F/W/+efVr/m3tZ/5d5Wf+Tdlj/j3VY/4ty - V/+IcFf/gGlQ/2BGKY3///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AGlMK5p8X0D/dVMv/31aNP+dgGH/v6qT/8y6 - pv+8oob/poBY/55wQP+jdEL/qHhE/617Rv/LqYX/3ceu/+7j1//z6+L/3MOm/7mcbP8efFP/G3xU/xt8 - VP8bfFT/G3xU/xt8VP8bfFT/G3xU/xt8VP8bfFT/G3xU/xt8VP8bfFT/G3xU/4LDpP/Q7t//wOfT/7Xk - zP+048v/s+PK/7Ljyf+v4sj/ruLH/6zhxv+p4MX/n92+/4bUrf+F06z/hNOs/4TTrP+E06z/g9Or/4PT - q/+D06v/hNOs/4TTrP+E06z/hdOs/4bUrf+H1K3/i9Ww/8Ho1f+d1Ln/IH9X/xt8VP8bfFT/G3xU/xt8 - VP8bfFT/G3xU/xt8VP8bfFT/G3xU/xt8VP8bfFT/G3xU/xt8VP+QiFn/uY1d/7eMXv/RuJ7/3s68/6yF - Xf+og1v/pYFb/6F+Wv+dfFr/mXpZ/5V4WP+RdVf/jnNX/4lxVv+Gblb/c1tA+1pAJC3///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wBlRygvc1Y3/n1fPv+FZUP/vKiU/8i2o/+xlnr/mnNJ/5drPf+dcD//onNB/6d3RP+se0b/sH1G/7F/ - Rv+4iFL/28Gk/+TRu/+4hEX/t4RF/2+BS/9cgE3/XIBN/12BTf9dgU3/XoJN/16CTf9egk3/X4JN/1+D - Tf9ghVD/ZIxc/2KMXf8bfFT/abCQ/9Du3//A59P/teTM/7Tjy/+z48r/suPJ/7Hiyf+w4sj/ruHH/6zh - xv+q4cX/mdm5/4nUrv+I1K7/iNSu/4jUrv+H1K3/h9St/4fUrf+I1K7/iNSu/4jUrv+J1K7/itWv/4vV - r/+O1rH/w+nW/4vFq/8bfFT/UYha/2OMXf9jjF3/Yote/2GJWv9ehFP/XYNS/12DU/9dg1T/XINU/1yD - Vf9cg1X/YYNW/7CMWv+6jVz/uY1d/9S6nv/fzrv/rodc/6uFXP+ng1v/o4Bb/59+Wf+cfFn/l3lY/5R3 - WP+QdFb/jHJX/4hvVf+EbVX/ZUswwP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AGhMLKuBZEb/lntg/8S0o/+3oYr/j2hA/49m - Ov+Vajz/m24+/6FzQf+mdkP/rHpF/699Rv+xfkb/s4BG/7WBRf/UtpH/38eq/7mFRf+7hkT/vIdE/76I - RP+/iUP/wIpD/8OMRf/GkUv/x5RO/8iVTv/Ilk//yZZS/9Clav/Rp23/y6Zu/xt8VP9psJD/0O7f/8Dn - 0/+15Mz/tOPL/7Pjyv+y48n/seLJ/7DiyP+v4cf/reHG/6zhxv+r4MT/ldi2/4zVsP+M1bD/jNWw/4vV - r/+L1a//i9Wv/4zVsP+M1bD/jNWw/43VsP+N1bD/jdWw/5DWsv/D6db/i8Wr/xt8VP+jmmX/0KVr/8+l - a//PpGz/zqRt/8eYWf/CkVH/wZBR/8CPU/+/j1T/v49W/76PV/+9j1j/vI5a/7uOW/+6jVz/1ryg/+DO - uv+yiFz/rodc/6mEW/+mglr/oX5Z/559Wf+aelf/lndX/5F1Vv+Nc1b/iW9U/4VuVP9zW0H/WkAkOv// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wBlRygodFc3/Z2Gbv/NwLP/p450/4ZhN/+NZDn/k2k7/5ltPv+fcUD/pXZD/6p5Rf+vfUb/sX5G/7OA - Rv+0gUX/toNF/9a4lP/fxqf/u4ZE/72IRP/AjUr/xZNR/8mZWv/NoGP/z6Rp/9Glaf/RpWr/0aZs/9Gn - bf/RqG7/0ahw/9Gpcf/Lp3H/G3xU/2mwkP/Q7t//wOfT/7XkzP+048v/s+PK/7Ljyf+x4sn/sOLI/6/h - x/+t4cb/rOHG/6vgxf+p38T/lti2/43VsP+N1bD/jdWw/43VsP+N1bD/jdWw/43VsP+N1bD/jdWw/43V - sP+N1bD/kNay/8Pp1v+Lxar/G3xU/6OcZv/RpWv/0aZr/8+la//PpGz/zaJo/8ORT//DkFD/wZBR/8GQ - Uv+/kFT/v49V/76PV/+9jlf/vI5a/7qNW//WvKD/4c66/7WKXf+wh1v/rIVb/6mCWv+kgFr/oH1Y/5x7 - WP+YeFf/k3ZW/49zVf+LcVX/h25T/4FpUf9eRCe3////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AGhMLaOTe2D/zcG0/7GbhP+IYzv/i2M4/5Fn - Ov+XbD3/nXA//6N0Qv+peUT/r31H/7F+Rv+zgEb/tIFF/7aCRf+4hEX/2LuW/97EpP+9iET/x5da/8yh - aP/Oomn/z6Np/9Ckaf/RpWv/0aZs/9Gobv/RqG//0qlx/9Kqcv/SqnP/0qpz/8ypc/8bfFT/abCQ/9Du - 3//A59P/teTM/7Tjy/+z48r/suPJ/7Hiyf+w4sj/r+HH/63hxv+s4cb/q+DF/6rgxP+o38P/l9m3/43V - sP+N1bD/jdWw/43VsP+N1bD/jdWw/43VsP+N1bD/jdWw/43VsP+Q1rL/w+nW/4vFqv8bfFT/o5xn/9Gn - bf/Rp2z/0aZs/9Cla//QpWz/yZla/8ORTv/DkFD/wZBR/8GQUv+/kFT/v49V/76PV/+8jlf/vI1a/9e9 - oP/hzbj/t4xd/7SKXP+vh1v/q4Ra/6eBWf+jf1n/nnxX/5p5V/+Vd1b/kXRW/4xxVP+Jb1P/hGxS/2tR - N/9ZPyMy////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wBkRygieF4++8m8rv+3pJD/k3RT/4piOf+OZTn/lWo8/5tuPv+hc0H/p3dE/618Rv+wfkb/sn9G/7SB - Rf+2gkX/uIRF/7qFRP/YuZL/4Mio/8WVVv/NoWn/zqNp/8+lav/RpWr/0ads/9Gnbf/SqG//0qlw/9Kq - c//Sq3P/0qt0/9Ksdv/TrHf/0LB+/xt8VP9psJD/0O7f/8Dn0/+15Mz/tOPL/7Pjyv+y48n/seLJ/7Di - yP+v4cf/reHG/6zhxv+r4MX/quDE/6nfw/+o38P/mdm4/43VsP+N1bD/jdWw/43VsP+N1bD/jdWw/43V - sP+N1bD/jdWw/5DWsv/D6db/i8Wq/xt8VP+inGj/0ahu/9Gobv/Rp23/0aZs/9GmbP/Oomf/xZFN/8OR - Tv/DkFD/wZBR/8GQUv+/kFT/v49V/76PV/+8jlf/2L6h/+DMtv+5jFz/totd/7KJXP+thlv/qYNa/6SA - Wf+gflj/m3tX/5d4V/+TdVX/jnJU/4pvU/+FbFL/emJI/1xBJK3///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////UtXMxM/Nw7f/yLqs/5N0VP+Tck7/i2M4/5Jo - O/+YbT3/n3FA/6V2Q/+sekX/sH1G/7F/Rv+0gEb/toJF/7eDRf+5hUX/u4ZE/9Sxhf/o1Lz/zaJq/8+k - av/QpWv/0aZr/9Knbf/SqG//0qlw/9Kqcv/SqnT/0qt1/9Ksd//TrXj/0615/9Ouef/VvJT/G3xU/2mw - kP/Q7t//wOfT/7XkzP+048v/s+PK/7Ljyf+x4sn/sOLI/6/hx/+t4cb/rOHG/6vgxf+q4MT/qd/D/6jf - w/+m3sL/m9q6/43VsP+N1bD/jdWw/43VsP+N1bD/jdWw/43VsP+N1bD/kNay/8Pp1v+Lxar/G3xU/6Od - af/OpGr/z6Rq/9Gnbv/Rp23/0qdt/9GmbP/HllH/xZJN/8OQTv/DkFD/wZBR/8GQUv+/j1P/vo9V/72O - Vv/awaP/3siw/7mMW/+4jFv/tIlc/6+GWv+shFr/p4FZ/6N/WP+de1b/mXlW/5R2VP+Qc1T/i29S/4dt - Uv+BalD/Y0ks/Vg+Ixv///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /yz+/v2x6+jj/Pbz8f/FtqX/lHVV/49pQf+PZjn/lWo8/5xvP/+jdEL/qXlE/699Rv+xfkb/s4BG/7WC - Rf+3g0X/uYVF/7uGRP+9iET/065//+/hz//PpGv/0aZs/9KmbP/SqG7/0qhv/9Kqcv/SqnP/0qx1/9Ks - dv/TrXj/0655/9Oue//Tr3z/1bKC/9rHpf8bfFT/abCQ/9Du3//A59P/teTM/7Tjy/+z48r/suPJ/7Hi - yf+w4sj/r+HH/63hxv+s4cb/q+DF/6rgxP+p38P/qN/D/6bewv+m3sH/ndu7/43VsP+N1bD/jdWw/43V - sP+N1bD/jdWw/43VsP+Q1rL/w+nW/4vFqv8bfFT/o5xo/8aVUf/FlE7/yZlV/86jZ//Rp27/0qdt/8yc - XP/Gkkv/xZJN/8OQTv/DkFD/wZBR/8GQUv+/j1P/vo9V/+HMtP/YvZ3/uoxZ/7iMW/+3i1v/sohb/66F - Wf+pgln/pH9X/6B8V/+belX/lndV/5FzU/+NcFL/iG5R/4NrUP9xWD3/WkAkdv///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////avb08t/6+fj/+vn3/9zTyf+Tck//i2M4/5Jo - O/+ZbT7/oHJA/6Z2Q/+te0b/sH5G/7J/Rv+0gUX/t4NF/7mERf+7hkT/vYdE/7+JRP/Ws4b/8ufY/9Kn - bv/Sp23/0qhv/9Kpcf/SqnP/0qt1/9Ksdv/SrXj/0656/9Ove//UsH3/1LB+/9Sxfv/cv5b/2cWi/xt8 - VP9psJD/0O7f/8Dn0/+15Mz/tOPL/7Pjyv+y48n/seLJ/7DiyP+v4cf/reHG/6zhxv+r4MX/quDE/6nf - w/+o38P/pt7C/6bewf+k3sD/ntu8/47Vsf+N1bD/jdWw/43VsP+N1bD/jdWw/5DWsv/D6db/i8Wq/xt8 - VP+qrIP/3L+V/86kaf/FlFD/xpRO/8mZV//PpGj/zJtb/8eSTP/Gkkv/xZJN/8OQTv/DkFD/wZBR/8CP - Uv++j1T/6dnG/9Gxi/+7jFj/uoxZ/7iLW/+1iVr/sYda/6yEWP+ngVj/on5W/517Vf+Yd1T/k3RT/49x - Uv+JblH/hWtQ/35lTf9cQSbT////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///927+zp8f38/P/6+fj/5+DZ/5FtR/+OZTn/lWo8/51wP/+jdEL/qnlF/699Rv+xf0b/tIFG/7aC - Rf+4hEX/uoZE/7yHRP++iUT/wYxH/9WxgP/z6Nn/1q56/9KocP/SqXL/0qt0/9Osdv/TrXj/0615/9Su - e//Ur3z/1LB+/9Sxf//UsYD/1bSE/+HKqf/UupH/G3xU/2mwkP/Q7t//wOfT/7XkzP+048v/s+PK/7Lj - yf+x4sn/sOLI/6/hx/+t4cb/rOHG/6vgxf+q4MT/qd/D/6jfw/+m3sL/pt7B/6TewP+j3b//nNu7/43V - sP+N1bD/jdWw/43VsP+N1bD/kNay/8Pp1v+Lxar/G3xU/7zMt//w49H/6tnA/9Cocf/HmFb/xZNO/8aT - Tv/Gk07/x5JM/8eSS//Gkkv/xZFM/8OQTv/DkE//wY9R/8GRVP/v5Nb/y6V4/7uMVv+6jFj/uYtZ/7eL - Wv+ziFr/roRY/6mCV/+kflb/nntV/5p3VP+VdVP/j3FR/4pvUf+Fa0//gWhO/2NIK/9YPiMw////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////APHv7GLm4dz++/r5//Tx7v/c0sf/jGU7/5Fn - Ov+YbT3/oHJA/6d3Q/+tfEb/sX5G/7OARv+1gkX/t4NF/7qFRP+8h0T/vohE/8CKQ//Km13/1Kx3//Po - 2f/Ztof/0qpy/9Osdf/TrXf/0654/9Sve//UsHz/1LB+/9Sxf//UsYH/1LOC/9Szg//av5b/4cqp/8+0 - hv8bfFT/abCQ/9Du3//A59P/teTM/7Tjy/+z48r/suPJ/7Hiyf+w4sj/r+HH/63hxv+s4cb/q+DF/6rg - xP+p38P/qN/D/6bewv+m3sH/pN7A/6Pdv/+i3b//lti3/43VsP+N1bD/jdWw/43VsP+Q1rL/w+nW/4vF - qv8bfFT/vM25//Tr4P/w49H/272T/9Gpc//Ln2L/xZNP/8aTTv/Gk03/x5NN/8eSSv/Fkkv/xZBM/8OQ - Tv/CkE//x5xl//Dl1//Emmb/vIxV/7uMVv+5i1j/uItZ/7WJWv+whln/q4NX/6Z/Vv+gfFX/nHlU/5Z1 - Uv+RclL/jG5Q/4drT/+BaE3/ak8z/1k/JIz///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8AeV9EWdvTy//w7On/4dnR/7Sdg/+NZDn/lGk8/5xvP/+jdEL/qnlF/699Rv+yf0b/tIFF/7eD - Rf+5hEX/u4ZE/72IRP+/iUP/xpRS/9Gnbv/SqG//8+fY/929kv/TrHX/0614/9Ouev/Ur3z/1LB9/9Sx - gP/UsoD/1LOC/9W0hP/VtIX/1bWH/+HKqf/cwpv/z7SH/xt8VP9psJD/0O7f/8Dn0/+15Mz/tOPL/7Pj - yv+y48n/seLJ/7DiyP+v4cf/reHG/6zhxv+r4MX/quDE/6nfw/+o38P/pt7C/6bewf+k3sD/o92//6Ld - v/+h3L7/ktez/43VsP+N1bD/jdWw/5DWsv/D6db/isWq/xt8VP+0v6L/7d/L/+rYwP/fw57/27yR/9Su - e//OpWv/xpRQ/8aTTv/Gk03/x5JL/8eSSv/Fkkv/xJBM/8OQTv/QqHb/8OTV/8CPU/+8jVT/u4xV/7qL - V/+4ilj/t4pZ/7KHWP+thFj/qIBW/6J9Vf+deVP/mHZS/5JyUf+Nb1D/iGxO/4NpTf9wVTn/XEEk2f// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wBnSSmTxbeq/9TIvf+1oIn/iGE3/5Bm - Ov+XbD3/n3FA/6Z2Q/+tfEb/sX5G/7OARv+2gkX/uIRF/7qGRP+8h0T/v4lE/8GLQ//Pomf/06lv/9Oq - cf/w4s//4MWe/9OteP/Trnr/1LB9/9Swfv/VsoD/1bKC/9Wzg//VtIX/1bWG/9a2iP/bvpb/4s2t/9e5 - jv/Qt4v/G3xU/2mwkP/Q7t//wOfT/7XkzP+048v/s+PK/7Ljyf+x4sn/sOLI/6/hx/+t4cb/rOHG/6vg - xf+q4MT/qd/D/6jfw/+m3sL/pt7B/6TewP+j3b//ot2//6Hcvv+e27z/j9ax/43VsP+N1bD/kNay/8Pp - 1v+Kxar/G3xU/6SjdP/YuY3/17aH/9Wzgv/bvpT/3sKb/9m4if/Pp23/xpRQ/8aTTf/Gk0z/xpJK/8eS - Sv/FkEv/xJBM/9a0if/q2sT/v45Q/76NUv+8jFP/uotV/7iKVv+3ilj/tIhY/6+FV/+pgVX/pH1U/556 - Uv+ZdlH/lHNQ/49wT/+IbE3/g2hM/3VcP/9eQiX/Vj0iG////wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AGtNLNXKvrH/rpqC/4ZhOv+LYzj/kmg7/5puPv+ic0H/qnlF/699Rv+yf0b/tIFF/7eD - Rf+5hUX/vIdE/76IRP/AikP/woxD/9GmbP/TqnH/06t0/+3cxv/jzKn/1K97/9Wwff/VsX//1bKB/9Wz - gv/VtYX/1bWG/9a1iP/Wton/1reK/+DJp//exqL/1rmO/9C4jf8bfFT/abCQ/9Du3//A59P/teTM/7Tj - y/+z48r/suPJ/7Hiyf+w4sj/r+HH/63hxv+s4cb/q+DF/6rgxP+p38P/qN/D/6bewv+m3sH/pN7A/6Pd - v/+i3b//ody+/6Dcvf+Y2bf/jdWw/43VsP+Q1rL/w+nW/4rFqv8bfFT/paR2/9W0hf/Zu5D/1LB//9Ku - ev/WtIP/3cCW/9y+lP/SrHj/xpVR/8aTTP/Gk0z/xpJJ/8aRSv/EkEv/3cCb/+TOsf/Ajk//vo1Q/72N - Uv+7i1P/uYpV/7iJVv+2iVj/sYVX/6uCVf+mflP/oXtS/5p3UP+VdE//j29P/4lsTf+EaUv/e2FG/19D - Jv9YPiNd////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wBjRicXcFIy/9TJvv+iiW3/hV81/41k - Of+Vajz/nXA//6V2Q/+te0b/sH5G/7OARv+2gkX/uIRF/7qGRP+9iET/v4lD/8KLQ//EjUP/0KRp/9Or - dP/UrXf/6dW6/+jVuv/VsH3/1bGA/9Wygv/VtIT/1bWG/9W2h//Wtoj/1riK/9a4jP/YvJL/4s6x/9i+ - lv/WupH/0bmQ/xt8VP9psJD/0O7f/8Dn0/+15Mz/tOPL/7Pjyv+y48n/seLJ/7DiyP+v4cf/reHG/6zh - xv+r4MX/quDE/6nfw/+o38P/pt7C/6bewf+k3sD/o92//6Ldv/+h3L7/oNy9/57bvP+O1bH/jdWw/5DW - sv/D6db/isWq/xt8VP+lpXf/1LOD/9m6j//Wt4j/0699/9Kuev/Trnr/2biK/93Al//Ws4P/xpdS/8aT - TP/Gk0v/xpFJ/8aRSv/kza7/3sKe/8COTv+/jU//vY1R/7yMUv+5ilP/uIpV/7eIVv+zh1f/roRX/6iB - Vv+mglv/nHhR/5ZzT/+QcE7/i21M/4VpS/9/ZEn/YkYo/1k/JJ////8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AGVHKFl4Wjv/08i9/5+CZf+IYDb/kGY6/5hsPf+gckH/qHhE/699Rv+xf0b/tIFF/7eD - Rf+5hUX/vIdE/76JRP/AikP/w4xD/8WOQ//Nn2D/1K13/9Suev/jy6n/7+DM/9WygP/Vs4L/1bSF/9W1 - h//Wtoj/1reK/9a4jP/WuYz/17qO/93Eof/hy63/17yT/9i8k//SupH/G3xU/2mwkP/Q7t//wOfT/7Xk - zP+048v/s+PK/7Ljyf+x4sn/sOLI/6/hx/+t4cb/rOHG/6vgxf+q4MT/qd/D/6jfw/+m3sL/pt7B/6Te - wP+j3b//ot2//6Hcvv+g3L3/n9y8/5TYtf+N1bD/kNay/8Pp1v+Kxar/G3xU/6Wmev/UtIX/1reJ/9m6 - j//TsYD/0699/9Kuev/SrXj/1bF+/9u7kP/Yt4j/yp1e/86kZ//fwpr/6NCx//bu5P/bwJj/wo5M/7+N - Tv++jE//vIxR/7uKUv+4iVT/t4hV/7iMXf+5k2r/r4he/6yKZP+deFD/l3RO/5FxTf+LbEv/hmhK/39l - SP9nSy3/W0Ak4f///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AZ0kpjIBiRP/Rxbj/noFj/4pi - N/+SaDv/mm4+/6N0Qv+qeUX/sH1G/7OARv+1gkX/uIRF/7qGRP+9iET/v4pD/8KMQ//EjUP/xY9F/8iW - Uf/Urnr/1K98/97BmP/z6dv/1rWF/9W1hf/Wtof/1raJ/9e4i//XuIz/17mO/9e6kP/Xu5H/4c2v/97G - o//YvZX/2L2W/9K7lP8bfFT/abCQ/9Du3//A59P/teTM/7Tjy/+z48r/suPJ/7Hiyf+w4sj/r+HH/63h - xv+s4cb/q+DF/6rgxP+p38P/qN/D/6bewv+m3sH/pN7A/6Pdv/+i3b//ody+/6Dcvf+f3Lz/m9q6/43V - sP+Q1rL/w+nW/4rFqv8bfFT/pad7/9S1h//UtIX/2byR/9a1hv/TsH7/0q98/9Kuev/SrXj/0qt2/9ez - g//fwpz/7d7J//Tq3f/48ur//fv4//Lm1//XtYj/wI1M/76MTv+9jE//u4tR/7mJUv+5i1f/v5ds/7uW - a/+1kWn/q4Vd/594T/+ZdE7/knBM/4xsS/+FaUn/gWVI/2xRM/9cQSX/VDshFP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wBoSim0hmpM/8y/sf+jhmj/jGM4/5RpPP+dcD//pXZD/618Rv+xfkb/tIBG/7aD - Rf+5hUX/vIdE/76JRP/CjUb/w41D/8WORP/FkEf/x5RQ/9KrdP/VsX7/2LeJ//Pq3P/cwJj/1raI/9e3 - if/XuIv/17mN/9e6j//XupD/17uS/9rAm//j0LT/2cCa/9i/mP/Yv5n/0ryX/xt8VP9psJD/0O7f/8Dn - 0/+15Mz/tOPL/7Pjyv+y48n/seLJ/7DiyP+v4cf/reHG/6zhxv+r4MX/quDE/6nfw/+o38P/pt7C/6be - wf+k3sD/o92//6Ldv/+h3L7/oNy9/5/cvP+e27v/kdaz/5DWsv/D6db/isWq/xt8VP+mqH3/1LaJ/9S1 - iP/XuY7/2LqP/9SxgP/TsH7/0q98/9Kuev/SrHf/0qt0/+XOr//0697/+/jz//79+//+/fz/9/Dn/+va - w//HlFj/v4xM/72LTv+7ik//uYpR/7+UZP/AmWz/vZVr/7eRaf+nf1P/n3lP/5l1Tf+TcUz/jWxL/4dp - Sf+AZEf/d1xB/19DJ/9VPCI8////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AGpLKtuNclX/v62b/7Ka - f/+OZTn/l2s9/59xQP+nd0T/r31G/7J/Rv+1gUX/t4NF/7qGRP+9iET/v4pD/8KNRP/FjkP/xY9G/8WR - Sf/Fkkz/z6Zt/9aygf/WtIP/8eXV/+LLqv/Xt4r/17iM/9e5jv/XupD/17yS/9e9lP/YvZX/3smn/+HM - r//Yv5n/2MCa/9jBm//Svpn/G3xU/2mwkP/Q7t//wOfT/7XkzP+048v/s+PK/7Ljyf+x4sn/sOLI/6/h - x/+t4cb/rOHG/6vgxf+q4MT/qd/D/6jfw/+m3sL/pt7B/6TewP+j3b//ot2//6Hcvv+g3L3/n9y8/57b - u/+Y2bf/kNay/8Pp1v+JxKn/G3xU/6epf//Vt4z/1LaK/9W2if/ZvJP/1bWG/9SxgP/TsH7/0q98/9Kt - ef/SrHf/59Gy//Pm1v/69vH//v39//79+//38Of/69rD/8iaXP+/jUz/votM/7yKT/+9jlf/w5ps/8GY - bP++l2v/to9k/6d9UP+geU//mXVN/5RwS/+NbUn/h2lI/4RoSv95X0P/Y0gs/1Y9ImP///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wBhRScGb08v/JF3Wv+tln3/w7Cb/5BmOv+YbT3/oXNB/6p5Rf+wfUb/s4BG/7aC - Rf+5hEX/u4ZE/76IRP/CjUb/xI9H/8WORP/FkEf/xZJK/8WTTf/Qp27/1rOD/9a1hv/r3MX/59a8/9e5 - jf/XuY7/17uR/9e8kv/YvZT/2L6W/9i/mP/j0LP/3cel/9nBm//ZwZ3/2cKe/9PAnP8bfFT/abCQ/9Du - 3//A59P/teTM/7Tjy/+z48r/suPJ/7Hiyf+w4sj/r+HH/63hxv+s4cb/q+DF/6rgxP+p38P/qN/D/6be - wv+m3sH/pN7A/6Pdv/+i3b//ody+/6Dcvf+f3Lz/ntu7/5zbu/+Q1rL/w+nW/4nEqf8bfFT/p6qA/9W5 - jf/Ut4v/1LaJ/9e6kP/XuY//1LKC/9OxgP/SsH7/0q57/9KteP/ewZr/6tnB//Tq3f/9+/j/+vbw//Po - 2f/ky6f/wo5O/8CNSv++i0v/vYtO/8OZZv/Dmmn/wZhq/7+Xa/+0il3/qH5Q/6F5Tv+bdUz/lHFK/45t - Sf+HaEf/hmpM/3pgRP9mSy//Vz0ji////wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AGJGJyp1WDj/k3db/5t9 - Xv/Sw7P/lWxA/5tuPv+jdEL/rHtG/7F+Rv+0gEb/t4NF/7mFRf+8h0T/v4lE/8KMRP/EjUP/xY9G/8WR - Sf/Fk0z/xpRP/8ufYv/WtYb/1raI/+bSt//t4Mz/17qP/9i7kf/YvJP/2L2V/9m+lv/Zv5j/3MWi/+PS - t//aw5//2cKe/9nDoP/aw6H/1MGf/xt8VP9psJD/0O7f/8Dn0/+15Mz/tOPL/7Pjyv+y48n/seLJ/7Di - yP+v4cf/reHG/6zhxv+r4MX/quDE/6nfw/+o38P/pt7C/6bewf+k3sD/o92//6Ldv/+h3L7/oNy9/5/c - vP+e27v/ndu7/5PXtP/D6db/icSp/xt8VP+nq4L/1rqQ/9W5jf/Ut4v/1biM/9i7k//JoGb/0Kx3/9Ox - f//Sr33/0q56/9Cpcf/UsYD/5tCy//n17v/r173/5Mqo/9Wqdf/Gk1D/wI1I/7+MSv/ClFv/xpxp/8Oa - af/BmGn/v5Zq/7OHWf+pflD/o3lN/5x1S/+VcUr/j2xI/4hoRv+Kb1H/fGBD/2hML/9YPiOy////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8AZEYoSnxgQv+Vel3/hGA7/8+/rf+tjWv/nXA//6Z2Q/+ufEb/sX9G/7SB - Rf+3g0X/uoZE/72IRP/AikP/w4xD/8WORP/FkEf/xZJK/8WTTv/GlVH/xpdV/9Sxgf/XuIv/4cmo//Pp - 3P/YvJL/2LyU/9i+lf/Zv5f/2cCa/9nBm//gzK7/4M6x/9nDn//axKH/2sSi/9rFo//Uw6H/G3xU/2mw - kP/Q7t//wOfT/7XkzP+048v/s+PK/7Ljyf+x4sn/sOLI/6/hx/+t4cb/rOHG/6vgxf+q4MT/qd/D/6jf - w/+m3sL/pt7B/6TewP+j3b//ot2//6Hcvv+g3L3/n9y8/57bu/+d27v/lti2/8Pp1v+JxKn/G3xU/6er - g//Wu5L/1rqQ/9W5jf/QsH//z6x6/8qjav/HnWH/0q97/86ocv/Hm1v/xpdV/8aWU//XtYX/7d7J/8WR - Sv/FkUf/zZ9f/9ClbP/Hllj/wIxK/8ebZf/Gm2j/xJlo/8GYaf+/lmn/tIdX/6p+T/+kek3/nHVM/5Vx - Sf+PbUj/iGhG/4drTv97X0L/aE0w/1k/I9L///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wBkRyhWgWVH/5N3 - Wf+CXDT/tp2C/8q0nf+ecED/p3dE/699Rv+yf0b/tYJF/7iERf+7hkT/volE/8GLQ//EjUP/xY9F/8WR - Sf/Fk0z/xpRP/8aWU//GmFb/yZ9j/9a2if/cwZr/9Ozf/9zEoP/YvZb/2b+Y/9nAmf/ZwZz/2sOf/+PS - uP/dyar/2sSi/9rFo//axaT/28am/9TEpP8bfFT/abCQ/9Du3//A59P/teTM/7Tjy/+z48r/suPJ/7Hi - yf+w4sj/r+HH/63hxv+s4cb/q+DF/6rgxP+p38P/qN/D/6bewv+m3sH/pN7A/6Pdv/+i3b//ody+/6Dc - vf+f3Lz/ntu7/53bu/+Y2bj/w+nW/4nEqf8bfFT/p6yE/9a8k//WupH/0bKD/8mja//Nqnj/0rOE/9Ct - ev/OqHL/z6p0/8uiaP/KoGT/yJtb/+LJpv/jy6n/xZJL/8WQSP/Fj0b/zZ9h/9SufP/QqHX/yJ1n/8ab - Zv/EmWf/wpho/7+Xaf+2ilr/q35O/6R5TP+ddkr/lnFI/49sRv+HZ0T/gWJC/3dbPP9pTjH/WT8k4P// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AGVHKGKEaUv/jnFQ/4NdNf+adk//2Mi2/6yEWf+peET/sH1G/7OA - Rv+2gkX/uYVF/7yHRP+/iUP/woxD/8WOQ//FkEb/xZJK/8WTTf/GlVH/xpdU/8aYV//Gmlv/yqFn/9e6 - j//y6dv/49Cy/9nAmf/ZwJr/2sGd/9rCnv/dyaj/5NS6/9vGpP/bxqT/28em/9vHp//bx6j/1MWl/xt8 - VP9psJD/0O7f/8Dn0/+15Mz/tOPL/7Pjyv+y48n/seLJ/7DiyP+v4cf/reHG/6zhxv+r4MX/quDE/6nf - w/+o38P/pt7C/6bewf+k3sD/o92//6Ldv/+h3L7/oNy9/5/cvP+e27v/ndu7/5vauv/D6db/icSp/xt8 - VP+nrYb/1r2V/9W7kv/IpW7/zq58/9S3jP/YvJT/1beK/9Szhf/TsoH/0rF+/9Kve//SrXr/7+LQ/9q5 - jP/Fk0z/x5RP/82fYP/PomT/0KVs/9Wyg//QqXj/xptm/8SZZv/Cl2f/wJZn/7qPYP+rfk7/pXpL/511 - Sf+WcEf/j2tF/4hnQ/+AY0L/el9C/2dMLv9ZPyTt////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AZUcoboZr - Tv+HZ0b/g101/45lOf/FrpT/0Lmg/6t6Rv+wfkb/s4BG/7eDRf+6hUT/vYhE/8CKQ//DjEP/xY5E/8WQ - SP/Fkkz/xpRP/8aWU//GmFb/xplZ/8ebXP/HnV//zKZw/+vdx//r3cj/2sGb/9rCnf/awp//2sSg/+DO - sP/i0bb/28am/9vHp//byKj/28ip/9vJq//Uxqj/G3xU/2mwkP/Q7t//wOfT/7XkzP+048v/s+PK/7Lj - yf+x4sn/sOLI/6/hx/+t4cb/rOHG/6vgxf+q4MT/qd/D/6jfw/+m3sL/pt7B/6TewP+j3b//ot2//6Hc - vv+g3L3/n9y8/57bu/+d27v/ndu7/8Pp1v+JxKn/G3xU/6euh//Wvpf/1r2V/9S4jv/WupH/1biO/9e7 - k//WuY//1LSG/9SzhP/TsYH/0rB+/9m7kP/06t3/1rSD/82iZv/Ppmv/0KRp/8+iZv/OoGT/zqNs/9Sv - gv/Op3j/xJpm/8KXZf/Almf/vJJj/61+Tf+leUv/nnVJ/5ZwR/+Pa0T/iGZD/4RmRv97X0H/ZEco/1k/ - JPr///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wBlSCh5iW1R/4BdOv+EXjX/jmU5/6B4S//ZxrL/xKF8/7F+ - Rv+0gUX/t4NF/7qGRP++iET/wYtD/8SNQ//Fj0X/xZFJ/8WTTf/GlVH/xpdU/8aYV//Gmlv/x5xe/8ee - Yf/HoGX/2b+Y//Dl1f/Yv5n/2sOe/9rEof/axaL/49O5/+DOsf/bx6j/28ip/9vJq//byqv/3Mqt/9XI - q/8bfFT/abCQ/9Du3//A59P/teTM/7Tjy/+z48r/suPJ/7Hiyf+w4sj/r+HH/63hxv+s4cb/q+DF/6rg - xP+p38P/qN/D/6bewv+m3sH/pN7A/6Pdv/+i3b//ody+/6Dcvf+f3Lz/ntu7/53bu/+e27z/xOnX/4nE - qf8bfFT/p66J/9e/mf/WvZf/1ryV/9a7kv/VuZD/1rqQ/9e8k//UtYj/1LSE/9Oygf/SsX//5dCx/+7f - y//Rq3X/0Kly/9Cnbv/QpWr/z6Nn/86hZP/Mn2P/zKFs/9Ovgv/MpXj/wpdl/8CVZf+9k2X/rn9O/6V5 - Sf+edUj/lm9F/5BsRf+IZUH/iGpL/3RXN/9jRif/WT8k/1A5IAf///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AGVI - KISLcFX/flw3/4VeNf+PZjn/mW0+/7qXcv/fy7b/uYxZ/7WBRf+4hEX/u4ZE/76JRP/Ci0P/xY5D/8WQ - Rv/Fkkr/xZRO/8aWUv/Gl1X/xplZ/8ebXP/HnWD/yKBl/8ehZ//OrHr/7uPT/9Cyhf/WvZX/28Wj/9zI - qP/k1b7/3cut/9zJqv/cyav/3Mqs/9zLrv/cy67/1cmt/xt8VP9psJD/0O7f/8Dn0/+15Mz/tOPL/7Pj - yv+y48n/seLJ/7DiyP+v4cf/reHG/6zhxv+r4MX/quDE/6nfw/+o38P/pt7C/6bewf+k3sD/o92//6Ld - v/+h3L7/oNy9/5/cvP+e27v/ndu7/57bvP/F6tj/icSp/xt8VP+nr4r/18Cb/9e/mf/WvZf/1ryU/9W6 - kf/VuY7/2L2U/9W3i//UtYb/1LOE/9OxgP/w5NP/4sqp/9Grdf/RqnL/0Khv/9CmbP/Po2f/z6Jk/82f - Y//KnWT/yp9r/9Ctgv/Jo3b/v5Vl/72UZP+wglH/pnlK/55zR/+Xb0T/j2lB/4dlQP+Iakz/bk8t/2NG - J/9ZPyT/UDggFP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8AZUcofotxVf99WjX/hV81/49mOv+abT7/pHZD/9S6 - nf/XvaD/tYJG/7mERf+8h0T/v4lE/8KMQ//FjkT/xZBI/8WSTP/GlE//xpZT/8aYV//Gmlr/x5xe/8ee - Yf/Hn2X/x6Fo/8ija//p2sT/2sSg/8use//bxqX/4M2w/+TVvv/cyar/3Mqs/9zLrv/dzK//3c2w/93N - sf/WyrD/G3xU/2mwkP/Q7t//w+nV/7jkzv+35M3/tuTM/7Xjy/+048v/s+PK/7Liyf+x4sj/sOHI/6/h - x/+u4Mb/reDF/6zgxf+q38T/qt/D/6jewv+n3sL/pt7B/6XdwP+k3cD/o9y//6Lcvv+h3L3/oty+/8fq - 2P+JxKn/G3xU/6ewjP/XwJz/17+a/9a+mP/WvZX/1ruT/9W6kP/XvJT/1rqP/9S1iP/UtIT/2r+W//Pr - 3v/Xtoj/0qx4/9Gqc//QqXD/0Kds/9Ckaf/PomT/zaBj/8qeY//Im2P/yJ1q/86rgf/HoXb/vZNk/7KF - VP+meEj/nnRG/5ZuQ/+OaUH/iGZD/4dpSf9sTSv/Y0Yn/1k/JP9QOCAN////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wBlRyhzim9U/3xaNP+FXzX/j2Y6/5puPv+kdUL/tohX/+DMtf/LpXr/uYVF/7yHRP/AikP/w4xD/8WP - RP/FkUn/xZNN/8aVUf/Gl1X/xplY/8ebXP/HnV//x59j/8egZv/Iomn/yKRs/97Kqv/l1bz/yah1/9G2 - jP/h0Lf/4tK5/9zLrP/czK//3cyw/93Nsf/dzbL/3c6z/9bMsP8bfFT/abCQ/8zs3P/T7+H/0+/h/9Pv - 4f/S7+D/0u7g/9Hu4P/R7t//0O7f/9Du3//P7t//z+3e/8/t3v/O7d7/zu3d/83t3f/N7d3/zOzc/8zs - 3P/L7Nz/y+zb/8vs2//K7Nv/yuvb/8nr2v/J69r/x+rY/4nEqf8bfFT/qLGN/9fBnv/XwJz/17+a/9a+ - l//WvJT/1buS/9a7kv/XvJP/1LaJ/9S0hv/l0rb/7d/L/9KvfP/SrXj/0at1/9Cpcf/Qp27/0KRq/8+i - Zf/NoGP/y55j/8icY//FmGH/xZtq/8upf//Dm3D/tYlZ/6Z4R/+ec0T/lWxB/49qQ/+LaUb/g2JC/25P - Lf9iRif/WT8j/k83HwH///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AGRGKGeIbVD/e1cz/4VfNf+PZjr/mm4+/6V2 - Q/+vfUb/x6N6/+LNtP/ClFz/vYhE/8CKQ//DjUP/xY9F/8WRSv/Fk07/xpZS/8aYVv/Gmln/x5xd/8ee - Yf/Hn2T/x6Fo/8ija//IpG7/1LmQ/+3j0v/LrHz/yat7/9jCn//byar/3Myv/9zMr//WwqH/1MCe/9jH - qP/czbL/1cuw/xt8VP9LnHr/jsit/47Irf+OyK3/jsit/47Irf+OyK3/jsit/47Irf+OyK3/jsit/47I - rf+OyK3/jsit/47Irf+OyK3/jsit/47Irf+OyK3/jsit/47Irf+OyK3/jsit/47Irf+OyK3/jsit/47I - rf+OyK3/YauL/xt8VP+osY7/18Kg/9fBnv/XwJv/176Z/9a9lv/VvJP/1bqQ/9e9lP/VuIz/1LWH/+/k - 1P/iy6v/0q99/9Ktev/Rq3X/0aly/9Cnbv/QpWv/z6Nn/82hY//LnmP/yJxj/8WZYv/ClmH/xJxu/8im - gP+7kWX/pnlH/51xQ/+WbkP/lXNN/45tS/+BY0L/d1s8/2JFJ/9YPiPz////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8AY0YnW4ZrT/96VzL/hV41/49mOv+abj7/pXZD/699Rv+zgEf/1LaS/+LLsP/Fllv/wYtD/8SN - Q//Fj0b/xZJK/8WUT//GllP/xphX/8aaW//HnF7/x55i/8egZv/Iomn/yKVu/8ilcP/Kqnj/7ePS/9S7 - lP/MsYP/1sGf/8qxhP/byaz/1cGf/9C6lf/OuZP/yrSM/8q1jv/ItY//L4Nb/xt8VP8bfFT/G3xU/xt8 - VP8bfFT/G3xU/xt8VP8bfFT/G3xU/xt8VP8bfFT/G3xU/xt8VP8bfFT/G3xU/xt8VP8bfFT/G3xU/xt8 - VP8bfFT/G3xU/xt8VP8bfFT/G3xU/xt8VP8bfFT/G3xU/xt8VP8bfFT/IX5X/7u6mP/YxKL/18Kg/9fB - nP/Xv5r/1r6Y/9a8lf/Vu5L/17yT/9a7kP/bwpz/8+ve/9e4jf/SsH//0q57/9Gsd//RqnP/0Kdv/9Cl - a//Po2f/zqFk/8ufY//JnGP/xpli/8OXYf+/lGH/xaF3/8Ohev+pfk7/nXFC/5x2Tf+ZdlL/kHBP/4Nl - Rf96XkD/YkUn/1c9I+X///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wBiRSdPgmdL/3lWMP+EXjX/j2Y5/5pu - Pv+ldkP/r31G/7OARv+3g0f/1reR/+PMr//ImVn/xY5D/8WQR//Fkkv/xpRP/8aXVP/GmVj/x5tc/8ed - YP/Hn2P/x6Fn/8ija//IpG7/yKZy/8iodf/l17//3syv/8+3jf/Uv5v/zLKH/9vKrP/ez7T/3s+2/97Q - t//Xxqj/y7eQ/8y4kf+6soz/laZ//5angP+Xp4L/oLSV/5eogv+XqIL/l6mD/56zk/+iuJr/oLSW/5yv - jf+iuZz/ormc/6G3mP+fs5P/orea/6G3mv+it5r/obeZ/6G2mP+gtZf/oLSW/6C0lf+fs5X/nrKU/56y - k/+esZH/nbCQ/52wj/+3uZn/2cam/9XBnv/Qt47/0LeO/9fAm//Xv5j/1r2W/9W8k//Wu5L/17uR/+XT - uf/s38v/07KC/9Owf//Srnz/0ax3/9GrdP/QqHD/0KZr/8+jZ//OoWT/y59j/8mcY//GmWL/w5dh/8CU - Yf+9lGP/xKF7/7eSav+lfVL/oHtV/5l2Uv+Ob03/g2RE/3ldP/9hRSf/Vj0i2P///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AGFEJjp5XT7/d1Uw/4NdNf+OZTn/mm0+/6R1Qv+vfUb/s4BG/7aDRf+7hkb/2bmR/+TN - rv/Mm1n/xZBI/8WSTP/GlVD/xpdV/8aZWf/Hm13/x55h/8efZf/Iomn/yKNs/8ilcP/Ip3P/yal2/9vH - pv/p3cn/0ryV/9K8l//dzbH/3s+1/97Qt//e0bj/39K6/9/Su//Uw6L/zrmT/9C+mv/PvJf/0LyX/9C9 - mP/g07r/0b6a/9LAm//czrL/4te//+LVvv/WxKP/3tC1/+PWv//j1r//4ta+/+LVvv/h1b3/4dS8/93P - s//ez7T/39K6/97SuP/e0bf/3dC2/9zPtP/czrP/2syx/9rLr//Zyq3/2cmr/9nIqv/Zx6f/0LiR/8mu - gP/Ns4f/18Gd/9fAmv/WvZf/1byU/9W7kf/XvZT/8OXV/+LMrf/Ts4T/07GA/9KvfP/RrXj/0at0/9Cp - cf/Qpmz/z6Ro/8+iZP/Mn2P/yZxj/8aZYv/Dl2H/wJRh/7ySYf+8lWj/v515/6yIYf+fe1X/lnVQ/41t - S/+CY0T/dlo8/19DJv9VPCLC////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AX0MmE25QL/92VC//gl00/45l - Of+ZbT7/pHVC/699Rv+zgEb/toNF/7qGRP+/iUb/27qQ/+bOrf/MnV7/xZNN/8aVUf/Gl1X/xppa/8ec - Xv/HnmL/x6Bm/8iiav/IpG7/yKZx/8iodf/Jqnj/zrOH/+3k1f/byav/z7iQ/9vLrv/e0Lf/3tG5/9/S - uv/g07v/4NS8/+DTu//Xxqf/0L2Y/9C9mP/Rvpn/0r+a/9zNsP/UwZ7/3tG2/+PYwv/j1r7/18ak/9vM - rv/j2MH/5NjB/+PYwf/j18D/4te//+LWv//g0rn/0sCb/9K/m//TwJ7/1sOi/9fHpv/TwZ//0b6b/9PB - n//ay6//2syx/9rLr//Zya3/2cir/9nHqP/TvZn/yq+C/9O9mP/XwZ7/18Cb/9e/mP/VvJX/1buS/+DL - rP/y6d3/17qP/9OzhP/TsYD/0q99/9Gtef/Rq3X/0alx/9CmbP/PpGj/z6Jk/8yfY//KnGP/xpli/8OX - Yf/AlGH/vJJh/7iNX/+4lW7/tZVz/557Vf+VdFD/i2tJ/4BjQ/9yVzn/XUIl/1M6IZv///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8AaUoq63VTL/+AWzT/jGQ4/5hsPf+jdEL/r31H/7J/Rv+2g0X/uoZE/76I - RP/DjEX/3byQ/+bPr//MoGL/xpZS/8aYVv/Gmlr/x5xf/8efY//HoWf/yKNr/8ilb//Ip3L/yal2/8mr - ev/JrH3/5trE/+baxf/MtYz/1cOi/9/Ruf/f0rr/4NO8/+HUvf/h1b7/4ta//+LXwP/h1Lz/08Gc/9LA - m//TwJz/1cOh/93Psv/k2cT/5dnD/9nIqf/h1Lv/5NnD/+Taw//k2cL/5NnC/+TYwv/k2MH/49fB/+LW - vv/Vwp//08Gc/9PAm//Sv5r/0b6Z/9C9mP/PvJb/0b2Z/9vLr//bzbL/2syx/9nKr//Zyaz/2Meo/8+4 - kf/Ms4j/18Oi/9fCn//XwJ3/17+Z/9W9lv/Vu5P/7eDN/+nYwv/UtYn/07SF/9Oygv/SsH3/0a15/9Gr - dv/RqXL/0KZt/8+kaf/PomT/zJ9j/8qcY//GmWL/w5dh/7+UYf+8kWH/t41f/7CIXf+0lXL/pYRf/5Nx - Tf+JaUj/f2ND/25SNf9bQCT/UTkgc////wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wBnSSnEc1Eu/39a - M/+LYzj/l2s9/6JzQf+tfEb/sn9G/7aCRf+6hUT/vohE/8KLQ//Gj0b/3b6T/+bRs//TrXj/xphW/8aa - W//HnV//x59k/8ehaP/Io2z/yKVw/8indP/JqXf/yat7/8mtfv/byav/7+fa/8q0iv/OuZP/39K7/+DU - vP/h1L3/4dW+/+LWwP/j18H/49jB/+TYw//g07r/49a//+PXv//dz7L/49a//+bbxf/g07j/3tC0/+bb - xf/m28X/5trE/+baxP/l2sT/5drD/+TZwv/k2cL/49jB/9vLrf/Uwp7/1cOg/9jIp//SwJz/0sCc/9jI - qf/e0Lb/3tC1/9zOs//bzbH/2suw/9bGp//Mt5D/yrKI/9O+mf/YxKP/18Og/9fBnf/Xv5v/1r2X/9rF - ov/z6+D/3MSg/9S2if/TtIb/07KC/9Owfv/RrXn/0at2/9Gpcv/Qpm3/z6Rp/8+iZP/Mn2P/ypxj/8aZ - Yv/Dl2H/v5Rh/7yRYf+3jF//roZa/62LZv+rjGv/knBN/4hpR/98X0D/ZUgq/1k/JP9PNx9M////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AGRHKJxxUC3/fVky/4lhN/+Vajz/oXNB/6x7Rv+yf0b/toJF/7qF - RP++iET/wotD/8WORP/FkUr/1rKB/+fTuP/bvpb/yJ5g/8edYP/Hn2X/yKJp/8ikbf/IpnH/yKh1/8mq - ef/JrHz/ya6A/9K8l//w6d3/1MGg/8q1jf/czrT/4NS+/+LWv//i1sD/49fB/+PYwv/k2cP/5drE/+Xa - xf/m28X/5tvG/+bcxv/n3Mb/59zH/+TYwP/n3Mb/59zH/+fcxv/n3Mf/5tzG/+bbxf/m28X/5drE/+Xa - w//l2cL/49e//9jHpP/g0rf/4ta+/+DUu//h1Lv/4NO6/9/SuP/e0Lf/3dC1/9zOs//bzLH/zbmU/8q0 - jP/QvJj/2Man/9jFpf/Xw6H/18Ge/9fAm//Wvpn/59nC/+zgzf/Xu5L/1LaK/9O0hv/TsoP/07B//9Gt - ef/Rq3b/0aly/9Cnbf/PpGn/z6Jk/8yfY//KnGP/xpli/8OXYf+/lGH/vJFh/7aLX/+thVr/pYFY/6yP - cP+WdVT/hmdH/3JTMv9iRSf/Vz0j/0w2HiT///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AYkUncW5O - LP96VzH/h2A2/5NpO/+fcUD/q3pF/7F/Rv+2gkX/uoVE/76IRP/Ci0P/xY5E/8WRSf/Fk07/zqRr/+TO - r//jza3/zahy/8egZf/Iomr/yKVv/8incv/JqXb/yat6/8mtfv/Jr4H/0ryX/+fcyP/g1L3/y7aP/9LA - nv/g07z/3c+1/9bFpf/Rv5r/2syt/+Xaxf/l28X/5tvG/+bcx//n3Mf/593H/+fdyP/n3cj/6N3I/+jd - yP/n3sj/597I/+fdyP/n3cj/593H/+fcxv/n3MX/5tvF/+bbxP/l2sP/5NnB/+TZwf/j18D/4dS6/+DT - uf/h1Lv/4NO6/9/RuP/d0Lb/3c+1/9rLr//NuJL/1cWm/9nJq//Yx6j/2MWm/9jEo//Xwp//18Cc/9jC - nv/x6dz/38us/9a7k//VuIz/07WH/9Ozg//TsH//0a16/9Grdv/RqXL/0Kdt/8+kaf/PomT/zJ9j/8mc - Y//GmWL/wpZh/7+UYv+7kGD/tYte/6yEWf+ifVT/pohn/5t+X/+BYkH/a0wr/19DJv9VPCL1SjQdA/// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wBeQyUya0wr/3hVMP+FXjX/kWc6/51wP/+peUT/sX5G/7WC - Rf+5hUX/vYhE/8GLQ//FjkT/xZFJ/8WTTv/GllP/yJ1f/93Dnf/n1br/1beL/8mjbP/IpW//yKdz/8mp - d//Jq3v/ya1//8qvg//UwJ3/2squ/+vj1P/MuZP/zbmT/867lf/QvJf/0b6Z/9LAm//YyKf/5tzH/+fc - x//n3cj/593I/+jeyf/o3sn/6N/K/+neyv/p38r/6N/K/+neyf/p3sr/6d7J/+jeyf/o3sj/593I/+fc - x//n3Mb/5tvF/+bbxP/l2sP/5NnC/+TYwf/k18D/49e+/+LVvP/h1Lv/4NO5/97Rt//dz7X/3M6z/9rL - r//ay6//2cmt/9jIqf/Yxqb/2MSk/9fDoP/XwZ3/49O6/+/m1//VvJP/1ruS/9W4jf/TtYf/07OD/9Ox - f//RrXr/0at2/9Gpcv/Qp23/z6Rp/8+iZP/Mn2P/yZxj/8WZYf/ClmH/vpNi/7uPYP+zil7/qoNZ/6F8 - VP+dfVv/n4Vo/4BhQP9qTSz/XUIl/1I6ILr///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AFtA - JAJoSinudVMv/4JcNP+OZTn/m24+/6d3Q/+wfkb/tIFF/7mERf+9iET/wYtD/8WOQ//FkUj/xZNO/8aW - U//GmVj/x5td/9W2h//m1bz/3sel/8qpdf/Ip3T/yap4/8msfP/JroD/yrGF/9bDo//OupX/6+PU/9jI - qv/OupT/z7yW/9G+mf/Sv5v/08Gd/9zNr//n3cj/6N3J/+jeyv/p38r/6N/K/+nfy//p38v/6eDL/+ng - zP/q4Mv/6uDM/+ngy//p38v/6d/L/+nfyv/p38n/6N7J/+jeyP/n3cf/59zG/+bcxf/l2sT/5drC/+TY - wf/j18D/49a+/+HUvP/h1Lr/39K4/97Rtv/dz7T/282y/9rLsP/Zyq3/2Miq/9jHp//YxaT/18Oh/9fB - n//v5tf/5NO6/9W7k//WupL/1bmO/9O1iP/Ts4T/07F//9Guev/Rq3b/0aly/9Cnbf/PpGn/z6Jk/8uf - Y//JnGP/xZhh/8GWYf++k2L/uo9g/7KJXf+oglj/n3pT/5VzT/+eg2f/iW5Q/2ZIKf9aQCT/TzcfeP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AGRHKK9yUS//f1oz/4tjOP+YbD3/pHVC/699 - Rv+0gEb/uIRF/7yHRP/AikP/xY5D/8WQSP/Fk03/xpZT/8aZWP/Hm13/x55i/82qd//j0LP/5dS7/9W8 - lP/Jq3r/yax9/8mugf/MtYv/1sSj/8u2j//g1L3/5NnF/8+7lf/QvZj/0r+a/9PBnf/Uwp//5dnD/+je - yf/o3sr/6d/L/+nfzP/q4Mz/6uDN/+rhzP/q4M3/6+HN/+rhzf/q4c3/6uHN/+rhzP/q4Mz/6uDM/+rf - y//p38r/6d7J/+jeyP/o3cf/59zG/+fbxf/m28T/5dnC/+TYwP/j17//4ta9/+HUu//g0rn/39G3/93Q - tf/czrP/2syx/9nKrv/YyKv/2Meo/9jFpf/Xw6L/4M+z//Hq3v/Ywp3/1byT/9W6kP/Vuo7/07WI/9Oz - g//TsX//0a56/9Grdv/RqXH/0KZt/8+kaP/PoWP/y59j/8icY//FmGH/wZVh/72SYf+5jmD/sIhc/6aA - V/+ceFL/knBN/5Z6Xv+IblP/YkUn/1Y9Iv9MNR43////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8AYUQmbW5OLP97VzH/iGE3/5VqPP+hc0H/r31H/7OARv+3g0X/vIdE/8CKQ//EjUP/xZBI/8WT - Tf/GllL/xplY/8ebXf/HnmL/x6Fn/8mkbv/Xvpf/5te//+LRt//RuZD/yq+C/863kP/VwqH/yrWO/9XD - pP/t5df/1MGf/9G+mf/TwJz/1MKe/9bGo//i1Lr/5tvE/+nfy//p38z/6uHN/+vhzf/r4s//6+LO/+vi - zv/r4s7/6+LP/+vizv/r4s7/6+LO/+vhzf/q4c3/6uHM/+rgzP/p4Mv/6d/K/+jeyf/o3cf/593G/+bb - xf/m2sT/5dnC/+TYwP/j177/4dW8/+DUuv/f0rj/3tC2/93PtP/bzbH/2cuv/9jJrP/Yx6n/2MWm/9jD - ov/s4tH/59vG/9a+mP/VvJT/1bmQ/9W6jv/TtYj/07OD/9Oxf//RrXr/0at2/9Gpcf/Qpmz/z6Rn/86h - Y//LnmP/yJpi/8SYYv/AlWH/vJJh/7iOYP+uhlr/pH5V/5p3Uf+Pbkz/kXZa/4VsUf9eQyX/Uzoh8Ucy - HAP///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wBcQSQpbE4t/3tZNv+EXjX/kWc6/55x - QP+rekX/sn9G/7aDRf+7hkT/v4lD/8ONQ//FkEf/xZNM/8aWUv/GmFf/x5tc/8eeYv/HoWf/yKNs/8im - cf/MrX3/3Mmp/+fbxv/ezbL/07+b/9PBn//Lto//zbiS/+ngz//g1Lz/0r+b/9PBnf/Vw6D/2Mim/97P - sf/g0bX/4tW7/+bbxf/r4c7/6+LP/+ziz//s49D/7OPQ/+zj0P/s49D/7OPQ/+zj0P/s48//7OLP/+zi - zv/r4s3/6+HN/+vgzP/q4Mv/6d/K/+neyf/o3cj/593G/+bbxP/l2sP/5dnB/+TXwP/i1r3/4dW8/+DT - uf/f0bf/3c+0/9zNsv/azLD/2Mmt/9jIqv/Yxqf/4NC2//Lr3//bx6f/1r6Y/9W8lP/VuZD/1bmO/9O1 - iP/Ts4P/07F//9Gtev/Rq3X/0ahw/9CmbP/Po2f/zaFj/8ueY//HmmL/w5di/7+UYf+7kWH/tYxe/6uE - Wf+hfFT/lnRP/4xtSv+Lb1P/gmlQ/1tAJP9POB+x////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wBlRyjPdVQx/4BbM/+OZTn/m24+/6h4RP+xfkb/tYJF/7qFRP++iUT/w4xD/8WP - Rv/Fkkz/xpVR/8aYV//Hm1z/x55h/8egZ//Io2z/yKZx/8modv/Jq3v/z7aO/+HSuf/q4M//39O7/825 - k//NuZP/3M+z//Hr4f/o3sz/6+PT/+nfzf/g1Lr/4dS5/+rhzv/r4c//6+LP/+TZv//m2sD/7OTQ/+3k - 0f/t5NH/7eTR/+3k0f/t5NH/7eTR/+3k0f/t5ND/7OPQ/+zjz//r487/6+LN/+rhzP/q4Mv/6t/K/+ne - yP/o3cf/59zG/+bbxP/l2sL/5NjA/+PXvv/i1bz/4NO6/9/SuP/d0LX/3M6z/9vMsP/Zyq3/2Miq/9jG - qP/t5Nb/6NzJ/9bAnP/Wvpj/1byU/9W5kP/VuY7/07SH/9Ozg//TsH//0a15/9Grdf/QqHD/z6Zr/8+j - Zv/NoGP/ypxj/8aZYv/ClmL/vpNi/7uQYf+yiV3/qIJZ/555U/+Uck7/iWpJ/4lvU/98ZUv/Vj0i/0s1 - Hlj///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AGBEJnBuTiz/e1cx/4lh - N/+Xaz3/pHVC/699Rv+0gUX/uYRF/72IRP/Ci0P/xY9F/8WSS//GlVD/xphW/8abXP/HnmH/x6Bm/8ij - bP/IpnH/yah2/8mre//Jrn//yrCE/9vKrf/n3sz/5dvH/9vNsf/m28j/+PXw//j17//38+3/9/Tu//Xx - 6P/u59j/6uDM/+vi0P/s49H/5Ni9/9/QsP/i1LX/6NzE/+3k0f/u5tP/7uXT/+nexv/p3sX/6t/H/+vh - y//t5NH/7eTR/+3j0P/s48//7OLN/+vhzf/q4Mz/6d/K/+jeyP/o3cf/59zF/+baw//k2cL/49e//+LW - vf/h1Lv/39O4/97Qtf/dzrT/28yx/9nKrv/YyKv/4dO7//Lr3//byKn/1sCc/9a+mP/Vu5P/1bmQ/9W5 - jP/TtYj/07OC/9Kvfv/RrXn/0ap0/9Cob//PpWr/z6Jl/82gY//JnGP/xZli/8GWYf+9kmL/uY5g/7CH - XP+mgFf/mndR/5l8Xf+umoX/uqud/5uJd/9WPibyRjEcCf///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8AWkAkFmhKKvx2VC//hF41/5JoO/+gckD/rXtG/7OARv+3g0X/vIdE/8GL - Q//FjkP/xZFK/8aUT//Gl1X/xppb/8edYP/HoGb/yKNr/8imcP/JqHb/yat7/8mugP/KsIT/08Cc/9G/ - nf/ay67/7+jc//bz7P/6+fX//fz6//z7+P/8+/n//Pr4//n38f/u5tb/6+LO/+3k0v/k2Lz/4dKy/+HT - tP/i1LX/6uDJ/+/m1P/v5tT/7uXR/+bZvv/k1rj/5de5/+7l0v/t5dL/7eTR/+3k0P/s48//7OLO/+vh - zP/q4Mv/6d/J/+jeyP/n3cb/59vE/+XZwv/k2MD/4te9/+LVvP/g07n/3tG2/93PtP/bzLH/2squ/9jJ - rP/u59n/59vI/9bCn//WwJz/1r6Y/9W7k//VuZD/1LeM/9S1h//TsoL/0q99/9GseP/RqnP/0Kdu/8+k - af/PomT/y59j/8icY//EmGL/wJVh/72RYv+2jF//rIRa/6J8VP+kh2f/zcCy/+DZ0v/n497/3tnU/8fA - uNb///8G////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AZEgptXFQ - Lf9/WjP/jGQ4/5puPv+oeET/sX5G/7aCRf+7hkT/v4pD/8SNQ//FkEj/xZRO/8aXVP/Gmlr/x51f/8eg - Zf/Io2v/yKZw/8modf/Jq3v/ya6A/8qwhf/UwZ//z7yY/824kv/k2cP/9fDo//z6+P/+/v3//v7+//39 - /P/8+/n/+vn1//by6v/s49L/7uXT/+LUtf/i07T/49S1/+PWt//o3MP/8OfW/+7l0f/v6NX/7+fV/+fb - v//l2Lv/7ePO/+3k0P/u5dL/7uXR/+3k0P/s48//6+LO/+vhzP/q4Mv/6d7J/+jdx//n3MX/5trD/+TY - wf/j177/4tW8/+DTuf/f0bf/3c+0/9vNsf/ayq//4tbB//Hq3//byKr/1sKf/9bAnP/Wvpj/1buT/9W5 - j//Utov/1LWH/9Oxgf/Rrnz/0ax3/9Gpcv/Qp23/z6Ro/86hY//LnmP/x5pi/8OXYv+/lGL/u5Bh/7OK - Xv+ogVj/nXpT/7+sl//i29P/8e7r//f29f/w7uz/8/Hw1////1f///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wBcQSRQaksq/3lWMP+HYDb/lWo8/6N0Qv+vfUb/tIFF/7mF - Rf++iET/w4xD/8WQRv/Fk0z/xpZT/8aZWP/HnF7/x59k/8iiav/IpXD/yKh1/8mrev/JroD/yrCF/9XC - of/Pu5f/zbmS/+HVvv/w6t//+PXw//38+//+/v3//f38//z7+f/59vH/9fDm/+3l1P/u5tT/49W2/+PV - tv/k1rf/5de5/+bZvP/q38X/7uXQ//Dp1//x6df/7ePM/+fbvv/q4Mf/7eTO/+/m0//u5tP/7uXR/+3k - 0P/s48//6+LN/+rhy//q4Mr/6d7I/+fcxv/m28T/5dnC/+PXv//i1r3/4NS6/9/RuP/dz7X/282x/9vL - sf/u6Nz/5tvH/9fEpP/Wwp//1sCb/9a9l//Vu5P/1LiO/9S2iv/UtIb/07GA/9Gue//Rq3b/0ahx/9Cm - bP/Po2b/zaBj/8qdZP/GmWL/wpZi/72SYv+6j2H/r4Zb/6V/V/+ad1L/x7em/+fh2//29fP//fz8//f2 - 9f3+/v7V////hP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AFU8 - IgJoSi7ac1Iw/4BbNP+PZjn/nXA//6x6Rf+yf0b/t4NF/7yHRP/Bi0P/xY9E/8WSS//GlVH/xphX/8eb - Xf/Hn2P/yKJp/8ilbv/IqHT/yat6/8muf//LsYX/1cOi/825lP/NuZP/2cqs/+ri0f/z7uX/+fbx//z8 - +v/7+fb/+vj0//j28P/z7uL/8evc/+/n1v/n28H/5Na4/+XYuf/m2bv/8OjV//Do1v/w6NX/8enY//Hp - 2P/x6df/7eLL/+vfxf/v59T/8OjV/+/m0//u5tP/7uXR/+3k0P/s487/6+DL/+rgy//p38n/6N3H/+bb - xf/l2sL/5Ni//+LWvf/g1Lr/39K4/93Ptf/bzbL/5drF//Dp3v/ayav/18Sk/9bCn//Wv5v/1r2X/9W6 - kv/UuI7/07WJ/9S0hf/TsX//0a16/9Grdf/QqG//z6Vq/8+iZf/Nn2P/yJxj/8SZY//AlWH/vZFi/7WM - X/+qhFn/oHtU/5RzTv+7qpj/4NnS//Lw7f/29fT/+Pf28v///8n///9z////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AFxBJVxuUDD/elYx/4hhN/+XbD3/pnZD/7B+ - Rv+1gkX/uoZE/7+KQ//EjUP/xZFJ/8WUT//Gl1X/xptb/8eeYf/HoWf/yKRt/8inc//Jqnn/ya1+/8yy - iP/Vw6L/zLiS/825k//QvJf/3c6z/+ngz//w6t3/9/Tu//j07v/w6dv/7OTR/+rhzf/18OX/9vHn//Dp - 2P/p3sT/5tm8/+fbvv/y6tn/8erZ//Lr2v/y69n/8urZ//Lq2P/v59P/8erX//Hp1//w6Nb/7+fU/+/m - 0v/t5M//7eXR/+3jz//s483/6+HL/+nfyv/o3sf/59zF/+Xaw//k2MD/49a9/+HUu//f0rj/3s+1/9zP - tP/w6d3/5NnG/9jGp//XxKP/1sKf/9a/m//VvZb/1bqR/9S4jf/TtYj/1LSE/9Kvfv/RrHj/0apz/9Cn - bv/PpGj/zqFk/8ueY//Hm2P/wpZi/7+TYv+7kGL/sYhd/6aBWP+bd1L/kHBN/5mAZv/IvbH/4NvW/+Lf - 2/r9/f3I////nP///yz///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8AVTwiA2hLLuN1VDH/gVw0/5BmOv+fcUD/rXxG/7OARv+4hEX/vYhE/8KMQ//Fj0b/xZNN/8aW - U//Gmlr/x51g/8egZv/Io2z/yKdy/8mqeP/JrX7/zLOI/9XDov/LtpD/zbmT/9C8l//Sv5v/1sSi/+DS - t//n3Mj/9O/l/+TYvv/f0K//4dKy/+LVtv/p3cP/7+bS//Ls3f/y69r/7ubR//Lr2v/z7Nv/8uvb//Ls - 2v/z7Nr/8uvZ/+rgw//w6NT/8urY//Hq1//w6db/7+fU/+/n0//u5dL/7eTQ/+zjzv/r4cz/6uDK/+je - yP/n3cb/5trD/+TYwf/j1r3/4dS6/9/SuP/ez7T/6N/N/+/p3P/Zyq7/2Man/9fEov/WwZ7/1r+Z/9W8 - lf/VuZH/1LeM/9O0h//UsoL/0a58/9Gsd//RqXH/0KZs/8+jZ//NoGP/yZ1k/8WZYv/BlmL/vZNi/7eN - YP+shVv/oXxV/5Z0UP+Ka0r/gWVJ/5uJdv+rn5L/ysS+vP///3b///83////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AW0ElZmtMLP95VjH/iGE3/5ds - Pf+mdkP/sX5G/7aCRf+7hkT/wIpD/8WORP/Fkkr/xpVR/8aYV//HnF7/x59k/8iiav/IpnD/yal3/8ms - fP/Msob/1cKh/8u2kP/NuJL/z7yW/9K/m//Uwp//18Wi/9nJpv/q4Mz/7OTS/9/QsP/h07P/49W2/+XX - uf/m2bv/6NzA/+3jzP/x6tf/9vDk//j06v/28eT/9e3f//Ps2//z7Nv/8ejT//Lq1//y69n/8urY//Hp - 1//x6Nb/7+jU/+/m0v/u5dH/7eTP/+vizf/q4Mv/6d/I/+jcxv/m28P/5NjB/+PXvv/h1Lr/39K4/+LV - vv/x7OL/4dW+/9jIq//Xxab/18Oi/9bBnf/Wvpn/1buU/9S5jv/Utor/07OF/9Sygf/Rrnr/0at2/9Co - b//QpWv/z6Jk/8yfY//Hm2P/w5hj/8CVY/+7kGL/sope/6aBWP+beFP/kHBN/4ZpSv+QemL/d2FL/084 - IepBLRkK////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wBSOiEFZkot3XFQLf+AWzT/j2Y6/55xQP+tfEb/s4BG/7mERf++iET/w4xD/8WQ - R//FlE7/xpdV/8abW//HnmL/x6Fo/8ilb//IqHX/yat7/8uxhf/Vwp//y7eQ/8y4kv/PvJb/0r+b/9TC - n//XxqP/2cmn/9/Qsf/x6dv/5trB/+LUtP/k1rf/5di7/+jbv//o3L//6t7B/+vfwv/t4sj/8enW//jz - 6P/59u3/+PTr//fy5//28OH/8uvX//Hp1f/y69r/8uvY//Hq1//w6NX/7+fU/+7m0v/t5ND/7OPO/+vg - y//p38n/6N3G/+bbxP/k2cD/49e+/+HUuv/f0rn/7ufa/+ri0v/Zyq3/2Mep/9fFpf/XwqD/1sCc/9a9 - l//Vu5L/1LiO/9O1iP/Ts4P/07CA/9GseP/RqXL/0Kdu/8+jZ//OoGT/yp1k/8WaY//ClmP/vZNi/7iO - Yf+shVv/oX1W/5V0T/+Qc1T/loFp/4FrVP9WPST/RjEbbP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wBYPiNCaEop/3dV - MP+GYDb/lms8/6V2Q/+wfkb/toJF/7uGRP/AikP/xY5E/8iXU//Gl1P/xplY/8edX//HoGb/yKRs/8in - c//Jqnn/y7GD/9XBnv/Lto7/zLeR/8+7lv/Sv5r/1MKe/9fGo//ayaf/3Myr/+jeyP/w6dn/5NW2/+XX - uf/m2bv/6Nu+/+ndwP/r38L/7ODE/+3ixv/t48f/7uPJ//Tt2v/38uX/+PPp//n17P/59ev/9/Hl//fw - 4v/07d3/8urY//Hp1v/t5M3/7uXQ/+7l0P/s487/6+HM/+rfyf/n3cb/5trD/+TZwf/t5tb/8uzh//Hs - 4f/x6+D/3c+1/9jJrf/Yx6n/18Sk/9bCn//Wv5v/1byW/9W6kf/Ut4z/07SG/9Oxgf/Sr33/0at2/9Cp - cf/QpWv/z6Jm/8yfY//Im2T/xJhk/8CUY/+7kWL/sYld/6aBWP+efVr/noJl/52Hb/+EbFT/WkAm/0o0 - Hcw+KxgC////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wBiRyurbk4s/31ZMv+MZDj/nG8//6x6Rf+zgEb/uIRF/76I - RP/DjEP/1Kx3/9Swff/Gl1X/x5tc/8efY//Iomr/yKZw/8mpd//KroH/1cCd/8y1jv/LtpD/zrqV/9G+ - mf/Uwp7/18Wi/9nJp//czKv/39Cx//Dp2v/r4cv/5di5/+favP/p3L//6t7C/+zgxP/t4sb/7uPI/+/k - yf/v5cr/8OXL//Tt2f/279//9u/e//bx4v/38uX/+PPo//j06v/48+j/9fDj//Lr2//x6dj/7+bU/+3j - zv/r4cz/6t/J/+jdxv/m2sP/8Ord//j18P/7+fb//Pv6//Tw6P/azLD/2Mms/9fGp//XxKL/1sGe/9a+ - mf/Vu5T/1LmO/9S2iv/Ts4T/07F//9Kue//Rq3T/0Kdu/9CkaP/OoGT/yp1k/8WZY//ClmP/vZJj/7aN - Yf+ykGn/sJN0/62Uef+dhGr/fmRI/1xBJf9POB/9Qi4aNf///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AFM7 - IRlrTzH1fmA+/4NdNf+SaDv/onNB/7B9Rv+1gkX/vo5Q/8aVVP/TqnL/38Ob/8iZV//GmVn/x51g/8eh - Z//IpG7/yKh0/8qtfv/Uv5v/zLWM/8q1jv/NuZP/0b2Y/9PBnf/WxaL/2cim/9zMq//ez6//6+DL//Xw - 5P/q4Mn/6Nu+/+ndwP/r4MP/7eLG/+7jyP/v5cr/8ObL//HnzP/x583/8unR//bw4P/28N//9u/f//Xu - 3f/17tz/9O7c//Xu3//17+H/9e/j//Tu4f/z7d7/9O7h//Hq2//v5tX/6+LO/+jdyP/18Oj/+/r3//7+ - /f/9/fz/9/Tv/9/TvP/YyKr/18Wm/9fCoP/WwJz/1r2X/9W6kv/UuI3/07SH/9Oygv/Sr3z/0qx4/9Cp - cf/Qpmv/z6Jl/8ufZP/Hm2X/xZtq/8Scb//Dn3j/waOC/7mcf/+nimv/kHNT/3teQP9iRSf/Uzsh/0Yx - HJX///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AFg/JGmNd17/oIdt/5BrQ/+YbD3/p3hF/7mM - WP/XuZf/yZ1m/8iYV//cvJD/1K99/8aXVf/Hm1z/x59j/8iiav/IpnH/yqx7/9S+mf/MtIr/yrSM/8y4 - kv/QvJf/08Cc/9bEof/ZyKX/3Muq/97QsP/t5NH/9/Lp//bx5//s4sn/6t7C/+zhxf/u48f/7+XK//Dm - y//x583/8ujO//Lpz//z6c//8+vU//fx4P/38OD/9vDe//Xu3v/17tz/8+za//Dn0f/r4MX/6Ny+/+zi - zP/t5ND/7+fX/+/o2P/w6dr/8OjZ//j28P/9/Pr//v7+//38+//59vL/5t3L/97Ptf/byq3/2cem/9jC - nv/Xv5r/172W/9e6kf/WuY3/1raI/9Szg//Vs4H/1K97/9awfP/WsoD/1bOG/9S1jf/RsY3/za6L/8Ki - gP+xj2v/nntX/49vTf92VjT/a1Ay/1xDKv9KNB3hPSoYD////wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AGdOM6WhjXf/sJuE/6KBXf+7nHr/soVU/9Cxjf/LpXb/v4lE/8SORP/SqnL/17SD/8me - Yf/HnV//x6Bm/8ikbv/JqXf/1LyW/8yyh//Ks4n/y7aQ/867lf/Sv5r/1cOf/9jHpP/by6n/3s6u/+fc - wv/v6NX/9fDj/+vgyP/r38L/7eHF/+7kyP/w5sv/8efN//Lpz//z6tD/9OvR//Tr0f/069H/8+vT//Xt - 1//17tv/9u/d//Ps2P/v5cv/7OHF/+rfwv/o3L//5tm7/+XZu//l2Lr/6N3G/+fcxf/m28T/8uzh//z7 - +P/8+/n/+vj1//Xx6f/k2sf/49fC/+TXwf/k1b3/5NO6/+PRtv/iz7L/4c2u/+HKqf/gyKX/38Wf/97E - nP/ev5X/27mK/9Sxgv/PqXn/x6Bx/8GYav+3jWL/rIVc/598Vv+Tc1D/hWdH/29SMv9sVDv/Tzgi9UAt - GTD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8ATzgfBnRcQs6qloL/tqGL/8Gp - kP/KsJT/0reY/9a6mf/Op3f/x5ZX/97Alf/gxqD/3L6V/8ecXv/HnmL/yKJp/8incv/Uu5P/zLKH/9bD - ov/NupT/zbmT/9C9mP/UwZ3/18aj/9rKqP/dzq3/4NKy/+PVt//v59T/8uvb/+vgxP/t4sb/7+XK//Hn - zP/y6c//9OrR//Tr0v/17NP/9ezT//Xs0//17NP/9OvR//Pp0P/y6M7/8ObL/+7kyf/t4sb/69/C/+nc - v//m2bv/5Na4/+PUtv/i1bj/5tvD/+XZwv/v6dv/9fHq//Hs4f/v6Nz/4tfB/9jHqf/XxaT/1sKf/9fB - nP/Xv5n/17yU/9W5jv/UtYj/1LKC/9Ouev/Sq3X/0adw/9CjZv/MoGX/yJxl/8OYZP/AlWT/upFj/6+I - Xv+jf1f/l3ZS/4psTP9+Ykb/clpA/1U+J/5DLxpU////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8AUjohFXpjSOmum4f/uaSN/8Orkf/Mspb/1LiZ/9e6mP/Jn2n/3sGa/+DE - nv/hx6L/1bOC/8ecXf/Hn2X/yKNs/9K3jP/Os4f/3cyw/+PXwf/d0Lf/18eo/9LAnP/WxKD/2cim/9zM - q//f0LD/49S1/+bavv/z7d7/8enV/+3ix//w5cr/8ujO//Pq0P/17NP/9u3U//bu1f/27tb/9u7V//bt - 1P/17NP/9OvR//Lpz//x58z/7+TJ/+3ixv/r38L/6Ny//+bZu//p3sX/6d7I/+TYv//h07b/6d/L//Hr - 3//h1b3/3c+0/9rLr//Yyaz/18Wn/9fDov/WwJ3/1r2X/9W7kv/UuIv/07SG/9OxgP/Srnv/0at1/9Co - cP/RpWv/zaFm/8mdZf/FmWX/wJZk/7ySZP+ximD/pYBZ/5l4VP+Nbk3/gGVI/3FYPf9bRCz/RTAbgP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AVTwiLoFn - T/iynor/u6WO/8Opjv/PtJj/1LeX/9a4lf/cv5v/38Kb/+DFnv/hxqL/y6No/8edX//HoWf/0LCC/9Cz - iP/SupP/49W+/+PXwv/k2cT/49jC/+TYwf/n3Mf/6uDM/+zj0P/u5tT/7+bU//Dp1v/28eX/8OfQ//Dm - y//y6c//9OvS//bt1P/379b/9+/X//jw2P/48Nf/9+/W//bt1f/17NP/8+rQ//Hnzf/v5cr/7eLG/+vf - wv/o3L7/5tm8/+vizP/i1bf/3c6t/+HVuf/y7OD/5drE/97Qtf/czbH/2cqu/9jHqf/XxKT/1sGe/9a+ - mf/Vu5P/1bmN/9S1iP/TsoL/0q99/9Krdv/QqHD/0aZs/86jZ//Knmb/xptl/8GWZP+9k2T/tItg/6iC - W/+celb/j3BP/4RnSv90WkD/WUAn/0gzHaw5KBYB////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8AVj0iUIhwV/6vm4X/uKGI/8aulP/QtZj/1rqa/9m8 - mv/cwJv/4MKb/+DFn//dwJf/yaBi/8eeYf/OrHn/0bWI/8mqeP/YxKL/49a//+PXwv/k2cX/5tzI/+je - yv/q4M3/7OPQ/+3l0//w6Nb/8erY//bx5f/38ub/8efO//Lpz//17NP/9u7W//jw2P/58dn/+fLa//nx - 2f/48Nj/9+/W//Xt1P/z6tH/8efN/+/kyf/t4cX/6t7B/+favf/m2r3/6+DL/+DRsf/g0bP/7+fZ/+rg - zv/f0bf/3c6z/9rLr//YyKv/18Wl/9bCoP/Wv5v/1byV/9W5kP/Utor/07OE/9Kvfv/SrXj/0alx/9Cm - bP/Qo2j/y59n/8abZf/DmGX/vpRl/7WNYv+qhFz/nXpW/5JyUf+EaEr/dlxB/1lAJf9IMxzQOikXC/// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8AVz0je5B6Yv+0oIz/vaeQ/8ivlf/Rtpr/1rqb/9m9m//dwJv/4MOb/+DFn//ewpv/yqJn/8ul - bf/TtYj/yKZy/8mqev/XxKP/4tW//+LXwv/k2cX/5tzH/+jeyv/q4c7/7OTR/+7l0//w6Nf/8urZ//j0 - 6v/48+f/8+vT//Xs0//379f/+fHZ//rz2//689z/+vPb//ry3f/48t7/9+/Y//Pq0f/x583/7uTI/+zg - xP/p3cD/5tm7/+XYu//p38j/39Cx/+zj0f/o3sv/39K3/93Qtf/bzLD/2cms/9jGpv/Xw6H/1sCc/9a9 - lv/VupD/1beL/9S0hf/TsX//0q56/9Kqc//Qp23/0KRn/82iaf/HnGf/w5hm/76UZf+2jmP/q4Vc/558 - V/+Sc1H/hWlL/3heRP9aQif/STMd6jspFx////8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AWEAkp5eCa/+sl4D/vqiQ/8iv - lf/Rt5r/1rqb/9m9mv/dwJr/4MKa/+DEnv/fw53/zKVs/9OzhP/Kpm7/yKdy/8mrev/RupT/4NK6/+LX - wf/k2sT/59zH/+nfy//r4c7/7OTR/+/m1P/x6df/8+3c//r27f/49Oj/9u7W//fv1//68tv/+/Td//z1 - 3v/79N3/+/Xi//r15v/38Nz/8+nQ//Dmy//t4sb/6t7C/+favf/k1rj/4dKz/+XYvv/p38v/6uHO/9XE - ov/Uw6L/282x/9nJrP/Yx6j/18Oi/9bBnP/Wvpf/1bqS/9W4jP/UtIb/07GA/9Kuev/SqnT/0adt/9Ck - aP/MoGf/yZ5q/8OYZ/++lWb/uI9k/6uFXf+ffFj/knNR/4ZpS/95X0b/W0Mp/0kzHfk7KRc8////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wBFMBsJWkEpupyJdP+ynon/vaiQ/8evlf/QtZn/1rqa/9m8mv/cv5n/38GZ/9i2 - hv/HmVj/0rB//82ocv/Io2v/yKdz/8mre//Msof/08Cd/9rLrv/k2cT/5tzH/+jeyv/q4c7/7eTR/+/m - 1P/x6dj/9e/h//r37v/59Ob/9/Db//ry2//89t///ffg//z13//689z/+PDa//Xs1f/x583/7uPI/+vh - xP/q3sL/5de5/+LTtP/ez6//5trD/+zj0//ZyKf/08Cc/9PCoP/Zya7/2Meo/9jEo//XwZ7/1r6X/9W7 - kv/VuIz/1LWG/9OxgP/Srnr/0qt0/9Gnbv/QpGj/zKBn/8meaP/Em2r/v5Vn/7ePZP+rhl7/nnxX/5Nz - Uv+Gakz/eWBF/1xELP9HMhz5OigWWf///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wBDLxoDXEculZuI - dP+vmoX/sZl+/8WulP/EpIH/zq6K/9i7mf/bvpj/38CY/9u7jf/Ur3r/4Mim/9i7kf/RsoT/1LmQ/8qs - fP/Kr4L/zLaP/9fGqP/i1r//5tvG/+jeyf/q4M3/7OPQ/+/m0//x6df/9vHl//r27f/58+X/+vTi//z2 - 4f/++OL/+/Xe//jw2P/17NP/8ujO/+7kyf/r4MT/6Ny//+jcwP/o3MT/3s+v/+baw//s49L/28yt/9K/ - mv/OupX/1cSl/9jHqP/YxKP/18Gd/9a9mP/Vu5H/1biM/9S0hv/UsYD/0656/9GrdP/RqG7/0KRp/8yg - aP/HnWf/xZxs/7+Waf+1jmP/qYZe/558WP+Rc1L/hGlL/3dfRf9cRSz/RjEb6DgnFjr///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8AV0EqZox4Yvueh2//uaSN/8Orkv/BoH3/toZS/8GV - X//VtIn/3sCW/97AmP/XtYb/3sWf/97Gov/fyaj/2MCZ/8qrev/JroD/yrKI/824k//bzLH/5drE/+fd - x//p38v/6+LO/+7l0v/w6NX/9vHl//n16//48eP/+PHe//bu1f/17dT/8+rQ//DmzP/t4sf/6t7C/+fa - vf/k1rj/4dKy/97Orf/l2cH/6+LR/9rLrP/RvZj/zrmT/8y4kv/Yxqf/18Si/9fAnf/WvZb/1bqR/9S3 - i//UtIb/07GA/9Ouev/SqnT/0adt/8+kaf/LoGn/xpxp/8Oaaf/BmG3/tI1k/6iEXf+ce1j/j3FR/4No - S/92XkX/YEoz/0MvGs41JRUd////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8ATDYePXpkTe6smob/t6KN/8Cpkf/FqYz/tIZS/7WCRv/Cklb/z6Zv/9q3if/SrXb/3sSe/9/G - ov/fyKf/28Of/86xg//JrH3/yrCF/8q0jf/SwJ3/4NO7/+XaxP/n3cf/6d/L/+zizv/t5dL/9O7h//fy - 5//x6db/7eHF/+3hxf/r4MP/6d3A/+favP/k17j/4tO0/9/Pr//czKr/5Ni+/+nhzv/Yyan/08Ge/9TC - ov/QvJj/zreP/9fCoP/XwJr/1r2V/9W5kP/Ut4r/1LOF/9Owfv/TrXn/0qpz/9GnbP/Po2r/yqBp/8ac - af/BmGn/v5hu/7OOZ/+lgl3/mXlW/41vUf+BZkv/c1xE/11IM/9CLhuqMiMTCv///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8ARjEcIGpROtaikHv/s6CK/7ym - jv/ApYf/sIFP/7OARv+5hUX/yJld/9CjZv/Qp23/0apz/9W1hf/exqP/3sim/9a9lf/KrHz/ya6A/8qy - h//Pu5f/4NS8/+PXwP/l2cP/5tzG/+jeyf/p4Mr/7ebT/+7m1P/l2Lz/49W2/+LUtf/h07P/39Cw/93O - rf/by6n/2Mel/+HUuv/o3sv/1sWl/825kv/MuJH/zriQ/9C4kf/SuZH/1LuT/9W6kf/RsoP/1baI/9Sz - gv/Tr3z/06x2/9Kpcf/Spmz/zaJq/8meaf/Em2n/wJZp/7qTaP+xjmn/oYBc/5V3Vf+JblD/fGRK/29Z - Qv9VQSz+OyoXfS4gEgH///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8AQC0ZDFhBKrKTf2v/rpuH/7eii/+8o4f/rIFU/7B+Rv+4hkv/zqZ0/9St - ef/PoWT/yZta/9Sxf//bv5f/3cWh/9vCnf/Mrn3/yap5/8mugP/Qu5X/2cqt/9nKrv/g07r/49a//9/S - t//XxqP/49e//+jeyf/dza7/2cim/9jIpv/ayqr/18al/9PBnv/e0LX/5drG/9PAn//KtI3/yrKH/8mv - gf/JrHz/yah2/8ilcP/Iomr/x59k/8ieYf/RrHf/0655/9KrdP/SqG7/z6Rs/8uhbP/GnWv/wplq/76W - av+0jWX/q4lm/5+AX/+GZkT/gGVH/3dgRv9YQSn/QzAb9DUlFVH///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8ANycVAUk0 - HIR+alX+qJeE/7Gch/+5oon/rYtl/6p6Rv+/lGT/yKBv/9KugP/buo//3LyR/9y+lf/cwJj/3cKc/9zC - nf/OrXr/0LOG/9a+mP/Yw6H/28mr/93Nsv/dz7X/3tC3/9G+m//Pu5X/3c+0/+LVv//f0bj/6N/O/+3m - 2f/u59v/7+ne/+bcyf/RvJf/yrCD/8mtfv/Jqnn/yKh0/8ilb//Iomn/x59k/8ecXv/GmVj/yZta/9Co - bv/SqXD/0KZt/8yjbf/Jn2z/xJts/8CYa/+4kmj/rYhi/6WGY/+Ze1z/eFk3/2dLLP9hSDD/SzYf/zwq - F98vIBIu////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AD0rGDxmUz7XlYNw/6mWgv+znYb/tp2B/7ye - ff/TuZz/1rqb/9S1j//Xt43/2baI/9Std//RqnP/1LF+/9Crd//Rr37/28Oe/9vDoP/Yv5r/3Mem/9zI - qf/Uvpn/ya+B/8qwhP/KsYX/3c2x//Dp3f/07+b/9vLr//n28f/28uv/6+DO/82xg//IqHT/yKVw/8ij - a//HoGb/x55h/8ebXP/GmFf/yJlX/8WTTf/Fj0f/y5tc/82jbv/JoG3/xp1t/8GZbP+6lGn/r4tl/6WD - YP+cf17/j3JV/2tOL/9bQCT/Tjcf/0EtGfw0JBSPJhoPDf///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////ADEiEwRBLhp0alZB9ZaEcf+plYD/spuF/8KrlP/RvKb/z7KU/9Cxjv/Ts4z/1bWL/9i3 - iv/ZtYX/2biJ/9u8kP/avZL/2buQ/9a4i//PrXr/yqZw/8ijbP/IpG7/yKZw/8imcv/YwZ3/7uPT//n2 - 8f/8+vf/+vby//Tu5P/t4tD/1rqQ/8efZP/HnWD/x5tc/8aYV//GllP/xZNO/8udXf/PoWP/zZ9k/8yk - b//JoW//xZ1u/8Kabv+7lWz/sY1m/6aEYf+bfFz/k3hc/39lSP9jSCz/UTkg/0QwG/83JxXHKh0QMP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wAyIxMbQzEdpmpX - Qv2WhHH/p5N//7yql//JtqH/w6qO/8iqi//Or4z/y6d8/8ymd//OpXH/0ahx/82dXf/HlE7/z6Zs/8uf - Yf/Im1z/x5tb/8aaW//Hm13/x5xf/9i7kP/w5dT/9vDm//jz6//59O3/9e3i/+raxP/TsH7/xpZT/8aU - UP/Fkkz/xZBI/8WORP/CjEP/wpBP/7uGRf+/kVr/xJ1w/8Gab/+4lGz/r4xn/6WFYv+bfV3/kXVY/4tz - Wv9wWD//WUMr/0YyHv84JxblKx4RZh8VCwH///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8AMSITJkMwHJ9pVkP7lIJx/7Cgj//Vyr//6OLa/+/p - 4//m2s7/1b6k/8ysiP/OrYf/0a+G/86ndv/Glln/y5xf/9CjaP/Lm1n/x5RO/9Cla//ZuIn/3b+W/+PL - q//n1Lj/7d3I/+/hzv/v4s//59K1/82gY//FkEf/wotD/7+JQ/+8h0T/uYVF/7aCRf+zgEb/s4RP/7qV - bf+zkGr/qolm/6GCYf+Xe13/jXRY/4dwV/+IdWH/d2RS/1xLOf8/Lx7gKx0QaB4UCwf///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////ACweER8+LRuXnZGG+ubi3v/5+Pb//fz8//r5+P/w6+f/xrGb/72ggf/DpIP/wZ11/72S - Yv/FoHT/x59x/8qkdf/Us4r/07CF/8qfav/Ajk7/vYhE/8meZ//TsIP/1LKH/8ylc//GmmT/zah7/8yo - fP/DmWn/uoxY/7OCTf+qeUX/o3VD/6J5Tv+nhWH/ooRj/5p9X/+SeV3/j3hf/415Y/+Id2X/d2dW/1dH - N/84KhnYJhoPYBsSCgT///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wDT0c832tjVxujm - 5PXx8O7/8e/t/+jk4P/Fuq7/uqqZ/7uolP/Crpr/xK+Z/8avmP/Eq47/uZh0/6+FWP+qekX/rHtG/699 - R/+vfUb/r31G/699Rv+ufEb/rHpF/6l4RP+ld0T/qYBU/6+MZf+yknH/rpFx/66UeP+vmH7/qZR9/6KN - dv+ciHT/l4Z0/45+bv97a1r/Xk49/0IyJO0sHxGUIBYMN////wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////SuDe3XiXkImjTj8wy29fT/uKe2z/n5GD/6aX - h/+mlYP/ppN+/6KMdP+giG//mX1g/5R1VP+VdVP/lnVR/5V0T/+UcUz/kW5H/45pQ/+JZD3/gV01/35Z - M/96VjH/elo3/4VpTP+Se2P/lIBq/5B+av+KeGb/fGtZ/2paSf9RQjL/Oi0c6SwgEqcgFgxOFg4IBf// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8AHBMKDCUZDkkxJBaLSj0u0VxOPv1sXEv/d2ZW/4FxYP+HdWT/iHdk/4p3 - ZP+LeGT/jHhj/4t3Yv+Kd2H/inVg/4d0Xv92YUv/XkYs/1xELP9wXUn/Xko2/088KP9FMyD/PSwb/zEi - FOwpHRCuIhcNbBkRCSv///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8AFA0HBhoSCikgFgxRJRoOeDEmGaE/MSXFSj0u1FJFOOFVRznsUkQ2+FFDNf9QQjP9TkEz805A - MudCNinZLB4RySgbD7QjGA2NHxULZhkRCT4TDQcX////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8ADQgEA////wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8A//////////////////////////////////////////////////////// - /////////////////////////////////////8AAAAP///////////////AAAAAAB/////////////4A - AAAAAAB////////////wAAAAAAAAD///////////wAAAAAAAAAP//////////4AAAAAAAAAB//////// - //wAAAAAAAAAAD////////+AAAAAAAAAAAAA///////4AAAAAAAAAAAAAA//////wAAAAAAAAAAAAAAB - /////gAAAAAAAAAAAAAAAD////gAAAAAAAAAAAAAAAAP///gAAAAAAAAAAAAAAAAA///wAAAAAAAAAAA - AAAAAAH//4AAAAAAAAAAAAAAAAAA//8AAAAAAAAAAAAAAAAAAH//AAAAAAAAAAAAAAAAAAB//wAAAAAA - AAAAAAAAAAAAf/+AAAAAAAAAAAAAAAAAAP//gAAAAAAAAAAAAAAAAAD//+AAAAAAAAAAAAAAAAAD///w - AAAAAAAAAAAAAAAAB////AAAAAAAAAAAAAAAAB////+AAAAAAAAAAAAAAAD/////8AAAAAAAAAAAAAAH - //////8AAAAAAAAAAAAAf///////4AAAAAAAAAAAD////////8AAAAAAAAAAAA////////+AAAAAAAAA - AAAH////////AAAAAAAAAAAAA////////gAAAAAAAAAAAAH///////wAAAAAAAAAAAAB///////4AAAA - AAAAAAAAAP//////+AAAAAAAAAAAAAB///////AAAAAAAAAAAAAAP//////gAAAAAAAAAAAAAB////// - wAAAAAAAAAAAAAAf/////4AAAAAAAAAAAAAAD/////+AAAAAAAAAAAAAAAf/////AAAAAAAAAAAAAAAH - /////wAAAAAAAAAAAAAAA/////4AAAAAAAAAAAAAAAP////+AAAAAAAAAAAAAAAB/////AAAAAAAAAAA - AAAAAf////wAAAAAAAAAAAAAAAD////4AAAAAAAAAAAAAAAA////8AAAAAAAAAAAAAAAAH///+AAAAAA - AAAAAAAAAAB////gAAAAAAAAAAAAAAAAf///4AAAAAAAAAAAAAAAAD///+AAAAAAAAAAAAAAAAA////g - AAAAAAAAAAAAAAAAP///4AAAAAAAAAAAAAAAAB///+AAAAAAAAAAAAAAAAAf///AAAAAAAAAAAAAAAAA - H///wAAAAAAAAAAAAAAAAB///8AAAAAAAAAAAAAAAAAP///AAAAAAAAAAAAAAAAAD///wAAAAAAAAAAA - AAAAAA///4AAAAAAAAAAAAAAAAAP//+AAAAAAAAAAAAAAAAAD///gAAAAAAAAAAAAAAAAA///4AAAAAA - AAAAAAAAAAAP//+AAAAAAAAAAAAAAAAAD///gAAAAAAAAAAAAAAAAA///4AAAAAAAAAAAAAAAAAH//+A - AAAAAAAAAAAAAAAAB///gAAAAAAAAAAAAAAAAAf//4AAAAAAAAAAAAAAAAAH//+AAAAAAAAAAAAAAAAA - D///gAAAAAAAAAAAAAAAAA///4AAAAAAAAAAAAAAAAAP//+AAAAAAAAAAAAAAAAAD///gAAAAAAAAAAA - AAAAAA///8AAAAAAAAAAAAAAAAAP///AAAAAAAAAAAAAAAAAD///wAAAAAAAAAAAAAAAAA///8AAAAAA - AAAAAAAAAAAP///AAAAAAAAAAAAAAAAAH///wAAAAAAAAAAAAAAAAB///+AAAAAAAAAAAAAAAAAf///g - AAAAAAAAAAAAAAAAH///4AAAAAAAAAAAAAAAAD////AAAAAAAAAAAAAAAAA////wAAAAAAAAAAAAAAAA - P///8AAAAAAAAAAAAAAAAD////gAAAAAAAAAAAAAAAA////4AAAAAAAAAAAAAAAAP///+AAAAAAAAAAA - AAAAAD////wAAAAAAAAAAAAAAAA////8AAAAAAAAAAAAAAAAf////gAAAAAAAAAAAAAAAf////4AAAAA - AAAAAAAAAAP/////AAAAAAAAAAAAAAAD/////4AAAAAAAAAAAAAAB/////+AAAAAAAAAAAAAAA////// - wAAAAAAAAAAAAAAP/////+AAAAAAAAAAAAAAH//////gAAAAAAAAAAAAAD//////8AAAAAAAAAAAAAB/ - //////gAAAAAAAAAAAAAf//////8AAAAAAAAAAAAAP///////gAAAAAAAAAAAAH///////8AAAAAAAAA - AAAD////////AAAAAAAAAAAAB////////4AAAAAAAAAAAA/////////gAAAAAAAAAAAf////////8AAA - AAAAAAAAP/////////gAAAAAAAAAAH/////////8AAAAAAAAAAH//////////gAAAAAAAAAD//////// - //+AAAAAAAAAB///////////wAAAAAAAAB////////////AAAAAAAAA////////////8AAAAAAAA//// - /////////wAAAAAAA//////////////AAAAAAB//////////////8AAAAAB///////////////8AAAAH - ////////////////8AAAf//////////////////9//////////////////////////////////////// - //////////////////////////////////8= - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 486, 17 + + + 17, 17 + + + 223, 17 + + + 120, 17 + + + + + /9j/4AAQSkZJRgABAQEAAAAAAAD/4QCqRXhpZgAATU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAZKG + AAcAAAB0AAAALAAAAABDAFIARQBBAFQATwBSADoAIABnAGQALQBqAHAAZQBnACAAdgAxAC4AMAAgACgA + dQBzAGkAbgBnACAASQBKAEcAIABKAFAARQBHACAAdgA2ADIAKQAsACAAcQB1AGEAbABpAHQAeQAgAD0A + IAA3ADUACgAAAAAA/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0aHx4dGhwcICQuJyAiLCMc + HCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIyMjIyMjIyMjIyMjIyMjIyMjIy + MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAIAAgAwEiAAIRAQMRAf/EAB8AAAEFAQEB + AQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQci + cRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVm + Z2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV + 1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//E + ALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDTh + JfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKT + lJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5 + +v/aAAwDAQACEQMRAD8A94uLu3tITLcTJFGOrO2BWdL4m0uMZ82Vwe8cEjD8wKp3tv5HiOGaRFlWddsR + YZMbKDlRk8ZHORz8pqLU9dsLZ3t7m5aSYdYYIt5H1PQfjipnOMFeTsOMXJ2SNV9bsjozamkha2UE52kE + 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 + SUVORK5CYII= + + + + + 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 + rkJggg== + + + + + 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 + BlEAAAAASUVORK5CYII= + + + + 389, 17 + + + 582, 17 + + + 682, 17 + + + 310, 17 + + + 58 + + + + AAABAAEAgIAAAAEAIAAoCAEAFgAAACgAAACAAAAAAAEAAAEAIAAAAAAAAAABABILAAASCwAAAAAAAAAA + AAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8AAAAAAQAAAAEAAAACAAAAAgAAAAMAAAADAAAABAAA + AAQAAAAFAAAABgAAAAYAAAAHAAAABwAAAAgAAAAIAAAABwAAAAcAAAAGAAAABgAAAAUAAAAFAAAABAAA + AAQAAAADAAAAAwAAAAIAAAACAAAAAf///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wAAAAABAAAAAgAAAAMAAAAFAAAABwAA + AAgAAAAJAAAACQAAAAoAAAALAAAADAAAAAwAAAANAAAADQAAAA4AAAAOAAAADgAAAA8AAAAPAAAADwAA + AA8AAAAPAAAADwAAAA8AAAAOAAAADgAAAA4AAAANAAAADQAAAAwAAAAMAAAACwAAAAoAAAAJAAAACQAA + AAgAAAAGAAAABAAAAAMAAAACAAAAAf///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wAAAAABAAAAAgAA + AAQAAAAGAAAABwAAAAgAAAAJAAAACgAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAABIAAAASAAAAEwAA + ABQAAAAUAAAAFQAAABUAAAAWAAAAFgAAABYAAAAWAAAAFgAAABYAAAAWAAAAFgAAABYAAAAVAAAAFQAA + ABQAAAAUAAAAEwAAABIAAAASAAAAEQAAABAAAAAPAAAADgAAAA0AAAAMAAAACgAAAAkAAAAIAAAABwAA + AAUAAAADAAAAAf///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AAAAAAEAAAACAAAABAAAAAYAAAAHAAAACQAAAAoAAAALAAAADQAAAA4AAAAPAAAAEQAA + ABIAAAATAAAAFAAAABUAAAAWAAAAGAAAABkAAAAZAAAAGgAAABsAAAAcAAAAHQAAAB0AAAAdAAAAHgAA + AB4AAAAeAAAAHgAAAB4AAAAdAAAAHQAAAB0AAAAcAAAAGwAAABoAAAAZAAAAGQAAABgAAAAWAAAAFQAA + ABQAAAATAAAAEgAAABEAAAAPAAAADgAAAA0AAAALAAAACgAAAAkAAAAHAAAABgAAAAMAAAAB////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAEAAAADAAAABAAAAAYAAAAHAAAACQAA + AAoAAAAMAAAADQAAAA8AAAAQAAAAEgAAABMAAAAXAAAAGAAAABkAAAAbAAAAHgAAACAAAAAhAAAAIgAA + ACQAAAAlAAAAJgAAACcAAAAoAAAAKQAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAApAAAAKAAA + ACcAAAAmAAAAJQAAACQAAAAiAAAAIQAAACAAAAAcAAAAGwAAABkAAAAYAAAAFQAAABMAAAASAAAAEAAA + AA8AAAANAAAADAAAAAoAAAAJAAAABwAAAAYAAAAEAAAAAv///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wAAAAABAAAAAwAAAAQAAAAGAAAACgAAAAsAAAAPAAAAEAAAABQAAAAVAAAAGAAAABoAAAAdAAAAHwAA + ACAAAAAkAAAAJgAAACcAAAApAAAAKwAAAC0AAAAuAAAAMAAAADEAAAAzAAAANQAAADYAAAA3AAAAOAAA + ADkQTTRwCzYlWAAAADoAAAA5AAAAOAAAADcAAAA2AAAANQAAADMAAAAxAAAAMAAAAC4AAAAtAAAAKwAA + ACkAAAAnAAAAJgAAACQAAAAgAAAAHwAAAB0AAAAaAAAAGAAAABUAAAAUAAAAEAAAAA0AAAALAAAACAAA + AAYAAAAEAAAAAv///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AAAAAAIAAAACAAAABAAAAAcAAAAJAAAADQAAAA4AAAASAAAAFgAA + ABYAAAAYAAAAGwAAAB0AAAAhAAAAIgAAACQAAAAnAAAAKAAAACoAAAAuAAAALwAAADEAAAAxAAAANQAA + ADcAAAA4AAAAOgAAADsAAAA9AAAAPwAAAEAAAABCElM4hht8VP8aeVLwCCgbWQAAAEQAAABCAAAAQAAA + AD8AAAA9AAAAOwAAADoAAAA4AAAANwAAADUAAAAxAAAAMQAAAC8AAAAuAAAAKgAAACgAAAAnAAAAJAAA + ACIAAAAhAAAAHQAAABsAAAAYAAAAFgAAABYAAAASAAAADgAAAA0AAAAJAAAABwAAAAQAAAAC////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAIAAAAEAAAABAAAAAYAAAAIAAAACAAA + AAoAAAAMAAAADQAAABAAAAASAAAAFgAAABcAAAAaAAAAHAAAAB8AAAAhAAAAJAAAACYAAAAnAAAAKQAA + ACsAAAAuAAAAMAAAADAAAAA0AAAANQAAADcAAAA4AAAAOwAAADwAAAA+AAAAPwAAAEAAAABDAAAARA08 + KGsbe1P6JYRc/ht8VP8ZdE7aAw4KTAAAAEUAAABEAAAAQwAAAEAAAAA/AAAAPgAAADwAAAA7AAAAOAAA + ADcAAAA1AAAANAAAADAAAAAwAAAALgAAACsAAAApAAAAJwAAACYAAAAkAAAAIQAAAB8AAAAcAAAAGgAA + ABcAAAAWAAAAEgAAABAAAAANAAAADAAAAAoAAAAIAAAACAAAAAYAAAAEAAAAAgAAAAL///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wAAAAACAAAABAAA + AAYAAAAGAAAACAAAAAoAAAAMAAAADAAAAA4AAAAOAAAAEAAAABIAAAASAAAAFQAAABYAAAAaAAAAHAAA + AB0AAAAhAAAAIgAAACUAAAAnAAAAKQAAACsAAAAtAAAAMAAAADEAAAA0AAAANQAAADgAAAA5AAAAOgAA + ADsAAAA/AAAAQAAAAEAAAABBAAAAQgAAAEMHIxhWGnhR7B5+V/6M0LP/ZrWT/xt8VP8Xa0m9AAAARQAA + AEQAAABDAAAAQgAAAEEAAABAAAAAQAAAAD8AAAA7AAAAOgAAADkAAAA4AAAANQAAADQAAAAxAAAAMAAA + AC0AAAArAAAAKQAAACcAAAAlAAAAIgAAACEAAAAdAAAAHAAAABoAAAAWAAAAFQAAABIAAAASAAAAEAAA + AA4AAAAOAAAADAAAAAwAAAAKAAAACAAAAAYAAAAGAAAAAgAAAAL///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AAAAAAIAAAAEAAAABgAAAAgAAAAIAAAACgAAAAwAAAAOAAAAEAAAABAAAAASAAAAFAAA + ABQAAAAWAAAAFwAAABcAAAAZAAAAGQAAABwAAAAfAAAAIQAAACMAAAAnAAAAKAAAACsAAAAsAAAALwAA + ADAAAAAyAAAANAAAADQAAAA4AAAAOQAAADoAAAA8AAAAPQAAAD4AAABBAAAAQgAAAEIAAABCAgwISBlz + TtYbfFT/eMSj/6Thx/+j4Mb/SaF7/xt8VP8UXD6ZAAAARQAAAEMAAABCAAAAQgAAAEIAAABBAAAAPgAA + AD0AAAA8AAAAOgAAADkAAAA4AAAANAAAADQAAAAyAAAAMAAAAC8AAAAsAAAAKwAAACgAAAAnAAAAIwAA + ACEAAAAfAAAAHAAAABkAAAAZAAAAFwAAABcAAAAWAAAAFAAAABQAAAASAAAAEAAAABAAAAAOAAAADAAA + AAoAAAAIAAAACAAAAAYAAAAEAAAAAv///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8AAAAAAgAAAAQAAAAGAAAACAAAAAgAAAAKAAAADAAA + AA4AAAAQAAAAEAAAABIAAAAUAAAAFgAAABYAAAAXAAAAGQAAABkAAAAbAAAAHQAAAB8AAAAfAAAAIQAA + ACMAAAAjAAAAJgAAACcAAAApAAAALAAAAC0AAAAxAAAAMgAAADQAAAA1AAAAOAAAADkAAAA7AAAAPAAA + AD0AAAA/AAAAQAAAAEEAAABCAAAAQwAAAEMXaki7G3xU/1+xjv+j4cb/i9m3/5zewf+b3MD/Mo9o/ht7 + U/0PRi93AAAARgAAAEMAAABDAAAAQgAAAEEAAABAAAAAPwAAAD0AAAA8AAAAOwAAADkAAAA4AAAANQAA + ADQAAAAyAAAAMQAAAC0AAAAsAAAAKQAAACcAAAAmAAAAIwAAACMAAAAhAAAAHwAAAB8AAAAdAAAAGwAA + ABkAAAAZAAAAFwAAABYAAAAWAAAAFAAAABIAAAAQAAAAEAAAAA4AAAAMAAAACgAAAAgAAAAIAAAABgAA + AAQAAAAC////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AAAAAAgAA + AAQAAAAGAAAACAAAAAoAAAAMAAAADAAAAA4AAAAQAAAAEgAAABQAAAAUAAAAFgAAABcAAAAZAAAAGwAA + ABsAAAAdAAAAHwAAACEAAAAhAAAAIwAAACUAAAAmAAAAJgAAACgAAAAqAAAAKgAAACwAAAAuAAAALwAA + ADIAAAAyAAAANAAAADcAAAA4AAAAOwAAADsAAAA+AAAAPgAAAEAAAABBAAAAQQAAAEMAAABDFF0/mBt8 + VP9Gn3r/oeDF/5Lbu/9NxZH/X8uc/5/gxP+O1bb/JINb/hp6UvMJLR5dAAAARAAAAEMAAABDAAAAQQAA + AEEAAABAAAAAPgAAAD4AAAA7AAAAOwAAADgAAAA3AAAANAAAADIAAAAyAAAALwAAAC4AAAAsAAAAKgAA + ACoAAAAoAAAAJgAAACYAAAAlAAAAIwAAACEAAAAhAAAAHwAAAB0AAAAbAAAAGwAAABkAAAAXAAAAFgAA + ABQAAAAUAAAAEgAAABAAAAAOAAAADAAAAAwAAAAKAAAACAAAAAYAAAAEAAAAAv///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8AAAAAAgAAAAQAAAAGAAAACAAAAAgAAAAMAAAADAAAAA4AAAAQAAAAEgAA + ABQAAAAWAAAAFgAAABcAAAAZAAAAGwAAAB0AAAAdAAAAHwAAACEAAAAjAAAAJQAAACYAAAAmAAAAKAAA + ACoAAAAsAAAALAAAAC4AAAAwAAAAMAAAADEAAAAzAAAANQAAADUAAAA3AAAAOAAAADgAAAA7AAAAOwAA + AD4AAABAAAAAQAAAAEEAAABCAAAAQxBJMXobe1P9Mo9o/pvcwP+a3sD/UseU/0bDjf9Fw4z/a8+k/53f + w/97yaf/G3xU/xl1T98DEQxNAAAARQAAAEMAAABCAAAAQQAAAEAAAABAAAAAPgAAADsAAAA7AAAAOAAA + ADgAAAA3AAAANQAAADUAAAAzAAAAMQAAADAAAAAwAAAALgAAACwAAAAsAAAAKgAAACgAAAAmAAAAJgAA + ACUAAAAjAAAAIQAAAB8AAAAdAAAAHQAAABsAAAAZAAAAFwAAABYAAAAWAAAAFAAAABIAAAAQAAAADgAA + AAwAAAAMAAAACAAAAAgAAAAGAAAABAAAAAL///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAIAAAAEAAAABgAA + AAgAAAAKAAAADAAAAA4AAAAQAAAAEAAAABIAAAAUAAAAFgAAABcAAAAZAAAAGwAAABsAAAAdAAAAHwAA + ACEAAAAjAAAAJQAAACYAAAAmAAAAKAAAACoAAAAsAAAALgAAADAAAAAwAAAAMQAAADMAAAA1AAAANwAA + ADcAAAA4AAAAOgAAADwAAAA8AAAAPgAAAD8AAAA/AAAAQQAAAEMAAABDAAAARRMNB1ErPSaFHHpS+SSD + XP6R1bf/n9/E/1zKm/9Fw43/Q8OL/0HCi/9Awor/etSu/5vfwf9jt5T/G3xU/xhsScQAAABGAAAARgAA + AEUAAABFAAAAQwAAAEMAAABBAAAAPwAAAD8AAAA+AAAAPAAAADwAAAA6AAAAOAAAADcAAAA3AAAANQAA + ADMAAAAxAAAAMAAAADAAAAAuAAAALAAAACoAAAAoAAAAJgAAACYAAAAlAAAAIwAAACEAAAAfAAAAHQAA + ABsAAAAbAAAAGQAAABcAAAAWAAAAFAAAABIAAAAQAAAAEAAAAA4AAAAMAAAACgAAAAgAAAAGAAAABAAA + AAL///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wAAAAACAAAABAAAAAYAAAAIAAAACgAAAAwAAAAOAAAAEAAAABIAAAASAAAAFAAA + ABYAAAAXAAAAGQAAABsAAAAdAAAAHwAAACEAAAAhAAAAIwAAACUAAAAmAAAAKAAAACoAAAAsAAAALAAA + AC4AAAAwAAAAMQAAADMAAAA1AAAANwAAADgAAAA4AAAAOgAAADwAAAA+AAAAPwAAAD8AAABBAAAAQyQZ + Dl5GMRyPVT0htl9DJ9NnSyrvZlAx/yd1T/8bfFT/gcur/6Hgxf9rz6T/RcOM/0LCi/8/wor/PcGJ/zzB + iP8+wYn/hdi1/5newP9Io33/G3xU/zxgPPBYPiPHTTceqDcnFnwMCARPAAAARgAAAEYAAABFAAAAQwAA + AEEAAAA/AAAAPwAAAD4AAAA8AAAAOgAAADgAAAA4AAAANwAAADUAAAAzAAAAMQAAADAAAAAuAAAALAAA + ACwAAAAqAAAAKAAAACYAAAAlAAAAIwAAACEAAAAhAAAAHwAAAB0AAAAbAAAAGQAAABcAAAAWAAAAFAAA + ABIAAAASAAAAEAAAAA4AAAAMAAAACgAAAAgAAAAGAAAABAAAAAL///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AAAAAAgAAAAQAAAAGAAAACAAA + AAgAAAAKAAAADAAAAA4AAAAQAAAAEgAAABQAAAAWAAAAFwAAABkAAAAZAAAAGwAAAB0AAAAfAAAAIQAA + ACMAAAAlAAAAJgAAACgAAAAqAAAALAAAACwAAAAuAAAAMAAAADEAAAAzAAAANQAAADcAAAA4AAAAOgAA + ADwAAAA8AAAAPgAAAD8YEQlQRTAbiFc9I7lkRyfpakws/25PL/9xVDT/dFY2/3RYOf80ckz/G3xU/2y8 + mv+i4MX/e9St/0XDjf9Cw4v/P8KK/z3BiP86wIf/OMCG/zfAhv9Bw4v/jtu7/5PbvP80kWr/G3tU/11m + Rf90WDv/bFAx/2VHKPtbQSTUTTYepTMkFHQCAQFHAAAARQAAAEMAAABBAAAAPwAAAD4AAAA8AAAAPAAA + ADoAAAA4AAAANwAAADUAAAAzAAAAMQAAADAAAAAuAAAALAAAACwAAAAqAAAAKAAAACYAAAAlAAAAIwAA + ACEAAAAfAAAAHQAAABsAAAAZAAAAGQAAABcAAAAWAAAAFAAAABIAAAAQAAAADgAAAAwAAAAKAAAACAAA + AAgAAAAGAAAABAAAAAL///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wAAAAACAAAABAAAAAYAAAAIAAAACgAAAAwAAAAOAAAADgAAABAAAAASAAAAFAAA + ABYAAAAXAAAAGQAAABsAAAAdAAAAHQAAACEAAAAhAAAAIwAAACUAAAAmAAAAKAAAACoAAAAsAAAALgAA + ADAAAAAwAAAAMwAAADMAAAA1AAAAN0FBQUaoqKh2kJCQahwaGEdBLhp8XEEkxGdJKftqSyr/bU8t/3FR + Mf9yUzL/dVU1/3dXNv95WTj/RWxH/xt8VP9TqYX/o+DG/4vZt/9IxI7/RMOM/0HCiv89wYn/OsCH/zfA + hv81v4X/M7+E/zK/g/9KxpH/lN2+/4nUtf8khFz/IHtU/3VtT/+Ga0//g2lN/3peQf9wVDb/aEoq/2FE + JutOOB+nJxsPYgAAAEEAAABBAAAAPwAAAD4AAAA8AAAAOgAAADgAAAA3AAAANQAAADMAAAAzAAAAMAAA + ADAAAAAuAAAALAAAACoAAAAoAAAAJgAAACUAAAAjAAAAIQAAACEAAAAdAAAAHQAAABsAAAAZAAAAFwAA + ABYAAAAUAAAAEgAAABAAAAAOAAAADgAAAAwAAAAKAAAACAAAAAYAAAAEAAAAAv///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAIAAAAEAAAABgAA + AAgAAAAIAAAACgAAAAwAAAAOAAAAEAAAABIAAAAUAAAAFgAAABcAAAAZAAAAGwAAABsAAAAdAAAAHwAA + ACEAAAAjAAAAJQAAACYAAAAoAAAAKgAAACwAAAAsAAAALgAAADAAAAAxAAAAMwAAADWHh4de7+/v0fr5 + +fX5+Pf74tzW/IFnSv+CZ0r/iG5S/4RnSv97Wzv/dlYz/3dXM/96WDX/e1o3/1dnQv8bfFT/PZhx/6Hf + xP+X3b//UMaS/0bEjf9Dw4z/P8KK/zzBiP85wIb/Nb+F/zK+g/8wvoL/Lr2B/zC+gv9by5z/lt2//3nK + qP8cfVX/K3lT/4NtUP+Nc1f/l4Bn/5qEbP+bh3D/lYBp/4JpTf9pTS7/XUEl10cyHI0LBwREFxcXQQAA + ADwAAAA6AAAAOAAAADcAAAA1AAAAMwAAADEAAAAwAAAALgAAACwAAAAsAAAAKgAAACgAAAAmAAAAJQAA + ACMAAAAhAAAAHwAAAB0AAAAbAAAAGwAAABkAAAAXAAAAFgAAABQAAAASAAAAEAAAAA4AAAAMAAAACgAA + AAgAAAAIAAAABgAAAAQAAAAC////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AAAAAAIAAAAEAAAABgAAAAgAAAAKAAAADAAAAA4AAAAQAAAAEgAA + ABIAAAAUAAAAFgAAABcAAAAZAAAAGwAAAB0AAAAfAAAAIQAAACEAAAAjAAAAJQAAACYAAAAoAAAAKgAA + ACwAAAAsAAAALgAAADAAAAAxAAAAM3FmW3DX0crr8u/s//f18//w7en/yr+z/8O1pv+/sJ//wbGh/8Gx + oP++rZv/qpR8/5FyUv9pZD7/HXtT/y2JY/+b27//oODE/1vJmv9JxI//RsON/0LDi/8/wor/PMGI/zjA + hv81v4T/Mb6D/y69gf8rvYD/Lr2B/zK+g/9w0aj/mN7A/2W6lv8bfFT/To5t/9HGuv/Uyb7/1Mq//9bM + wv/VzML/187G/9bOxf/HvLD/sKCP/8O4rfjo5eLq8/Pz4OTk5LuZmZloAAAANQAAADMAAAAxAAAAMAAA + AC4AAAAsAAAALAAAACoAAAAoAAAAJgAAACUAAAAjAAAAIQAAACEAAAAfAAAAHQAAABsAAAAZAAAAFwAA + ABYAAAAUAAAAEgAAABIAAAAQAAAADgAAAAwAAAAKAAAACAAAAAYAAAAEAAAAAv///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AAAAAAgAA + AAIAAAAEAAAABgAAAAgAAAAKAAAADAAAAA4AAAAQAAAAEAAAABIAAAAUAAAAFgAAABcAAAAZAAAAGwAA + ABsAAAAdAAAAHwAAACEAAAAjAAAAJQAAACYAAAAmAAAAKAAAACoAAAAsAAAALjspF1xgRCbBj3df/8K0 + pv/RyL3/wbOk/5B2Wf9+XTv/eVgz/3lWMf99WTP/h2ZC/5V2V/+uln7/rqiT/ymAWf8ggFj/kNO2/6bi + x/9qzqL/TcWR/0rEj/9GxI3/Q8OM/z/Civ88wYj/OcCG/zW/hf8yvoP/ML6C/y++gv8wvoL/M7+E/zi/ + hv+C17P/mt7B/02mgf8bfFT/XYJg/5Z6XP+Td1j/j3NV/45zVv+XfmT/o453/7CejP/i3Nb/9/b0//v7 + +v/8/Pz/9vX09+7t7dFxcXFMAAAAMAAAADAAAAAuAAAALAAAACoAAAAoAAAAJgAAACYAAAAlAAAAIwAA + ACEAAAAfAAAAHQAAABsAAAAbAAAAGQAAABcAAAAWAAAAFAAAABIAAAAQAAAAEAAAAA4AAAAMAAAACgAA + AAgAAAAGAAAABAAAAAIAAAAC////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAIAAAAEAAAABgAAAAgAAAAKAAAADAAA + AAwAAAAOAAAAEAAAABIAAAAUAAAAFgAAABYAAAAXAAAAGQAAABsAAAAdAAAAHQAAAB8AAAAhAAAAIwAA + ACUAAAAmAAAAJiUaDztdQiWwbE4t/q+di//KvbH/oIpy/3hYNf93VDD/eVYx/3tXMf99WTL/f1oz/4Bb + NP+CXTT/g101/4FgN/8yeFD/G3xU/4DHqP+q48n/fNOs/1HGk/9OxZH/S8WP/0fEjv9Ew4z/QcKK/z3B + if86wIf/N8CG/zW/hf8zv4T/M7+E/zO/hP81v4X/OMCG/0TDjf+R27v/mNzA/zmVbv8bfFT/bHZT/5N0 + VP+SdFT/kXNV/5BzVf+Pc1b/jXNW/6mVgP/Z0cj/8u/s//n49//z8e//zMO5+VpGMX8AAAAsAAAALAAA + ACoAAAAoAAAAJgAAACYAAAAlAAAAIwAAACEAAAAfAAAAHQAAAB0AAAAbAAAAGQAAABcAAAAWAAAAFgAA + ABQAAAASAAAAEAAAAA4AAAAMAAAADAAAAAoAAAAIAAAABgAAAAQAAAAC////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AAAAAAIAAAACAAAABAAAAAYAAAAIAAAACgAAAAwAAAAMAAAADgAAABAAAAASAAAAFAAA + ABQAAAAWAAAAFwAAABkAAAAbAAAAGwAAAB0AAAAfAAAAIQgFAyRVPCKAaEop8XJTMv+5qZj/x7qs/4Zo + SP93VTD/elYx/3xYMv9/WjP/gFs0/4NdNf+FXjX/hmA2/4hgNv+JYjf/QnNK/xt8VP9otpT/uejT/5rd + wP9Wx5X/UseT/0/Gkv9MxZD/ScSO/0XDjf9Cw4v/P8KK/z3Bif86wIf/OMCG/zfAhv83wIX/N8CG/znA + hv87wYj/PcGJ/1PIlf+b38L/kde5/yiGX/8gfFT/gHdU/5Z2Vf+UdVX/k3ZW/5J1Vv+SdVb/kHRW/490 + V/+jjnf/sKCN/8e8sP/e19D/nYt3/11CJck2JhVKAAAAJgAAACUAAAAjAAAAIQAAACEAAAAfAAAAHQAA + ABsAAAAbAAAAGQAAABcAAAAWAAAAFAAAABQAAAASAAAAEAAAAA4AAAAMAAAADAAAAAoAAAAIAAAABgAA + AAQAAAACAAAAAv///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wAAAAACAAAAAgAA + AAQAAAAGAAAACAAAAAgAAAAKAAAADAAAAA4AAAAQAAAAEAAAABIAAAAUAAAAFgAAABYAAAAXAAAAGQAA + ABlBLhpBZUgo1GtMK/9vTyz/sp+M/8i7rf+EZUP/elcx/31ZMv9/WjP/glw0/4ReNf+GYDb/iGE3/4pi + N/+MYzj/jmU5/1hwRf8bfFT/T6OA/7bm0P+96dX/edOr/1fIlv9Ux5T/UcaS/03Fkf9KxY//R8SO/0XD + jP9Cwov/QMKK/z7Bif88wYj/O8GI/zvBh/87wYj/PMGI/z7Bif9Awor/QsOL/2bNof+g4MT/hc6v/x19 + Vf8se1T/kHhU/6GCY/+egGL/mHla/5V2V/+Ud1j/knZY/5F2WP+QdVj/j3VZ/6uZhf/g2tP/s6WV/2RJ + KftWPCGUBQQCIQAAAB8AAAAdAAAAGwAAABkAAAAZAAAAFwAAABYAAAAWAAAAFAAAABIAAAAQAAAAEAAA + AA4AAAAMAAAACgAAAAgAAAAIAAAABgAAAAQAAAACAAAAAv///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAIAAAAEAAAABAAAAAYAAAAIAAAACgAA + AAoAAAAMAAAADgAAABAAAAAQAAAAEgAAABQAAAAUVTwhWmlKKfJtTSz/cVAt/5l/Zf/TyLz/jnBR/31Z + Mv+AWzP/gl00/4VeNf+HYDb/iWI3/4xjOP+OZTn/j2Y6/5FnOv9vbkL/G3xT/zmRbP+v4sv/xOvZ/5vd + v/+E1rH/WciW/1XHlf9Sx5P/T8aS/03FkP9KxI//R8SO/0XDjf9Dw4z/QcKL/0DCiv8/wor/P8KK/z/C + iv9Awor/QcKL/0PDjP9Fw43/SMSO/3vUrf+i4Mb/cb+d/xt8VP8+e1T/oYNi/6SGZv+jhWX/mnta/5d5 + WP+Vd1j/lXhZ/5N3WP+Rdln/kHVZ/6WQe//f2NH/s6OU/3FWOP9eQiW9JBoOJwAAABcAAAAXAAAAFgAA + ABQAAAAUAAAAEgAAABAAAAAQAAAADgAAAAwAAAAKAAAACgAAAAgAAAAGAAAABAAAAAQAAAAC////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8AAAAAAgAAAAIAAAAEAAAABgAAAAYAAAAIAAAACgAAAAwAAAAMAAAADmBE + JnxqSyr9b08s/3NRLv97Wjb/0sa6/6iQd/9/WjP/gl00/4VfNf+IYDb/imI3/4xkOP+PZjn/kWc6/5Np + O/+Vajz/gm1A/yF7U/8ohV7/pdzD/8jt3P+l4cX/l9y8/4/auP9ayZf/V8iW/1XHlP9SxpP/T8aS/03F + kP9KxY//SMSO/0bEjf9Fw4z/RMOM/0PDjP9Dw4z/Q8OM/0TDjP9Fw43/R8SN/0jEjv9LxY//TsWR/4/a + uf+l4sf/WKuI/xt8VP9Yflj/qIlo/6aIZ/+khWX/mntZ/5l6Wf+XeVn/lnha/5R3Wf+Sd1r/kHZa/6yZ + hf/j3df/pJF9/4BnTf9mSi3bQi4aMwAAABIAAAAQAAAAEAAAAA4AAAAMAAAADAAAAAoAAAAIAAAABgAA + AAYAAAAEAAAAAgAAAAL///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8AAAAAAgAAAAIAAAAEAAAABjMjFAxnSCmibU0r/3FQLf90Uy//eFUw/6KJbv/Sxbj/hWA5/4Ve + Nf+IYDb/i2M4/41kOf+QZjr/kmg7/5RpPP+Xaz3/mG09/5FuP/8selH/HX5V/5XSt//I7Nv/seTM/5zd + wP+Y3b3/ldy8/2LLm/9ayJf/V8iW/1THlP9SxpP/UMaS/03Fkf9LxZD/SsSP/0jEjv9IxI7/R8SO/0fE + jf9HxI7/SMSO/0nEjv9KxI//TMWQ/07Fkf9QxpL/WMmX/53ewf+l4Mb/P5hz/xt8VP94hWH/q4tp/6mK + aP+jg2H/nHxZ/5t7Wv+Zelr/mHpa/5Z5Wv+UeFv/knda/8KzpP/e18//kXlh/4hxV/9uUjbwVDwhTAAA + AAoAAAAIAAAACAAAAAYAAAAGAAAABAAAAAIAAAAC////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wBlSCgWaksqxG5O + LP9yUS7/dlMv/3lWMf99WTL/y7ur/7Sdg/+HYDb/imI3/41kOf+QZjr/kmg7/5VqPP+YbD3/mm4+/5xv + P/+bcUD/PXlP/xt8VP+Aw6X/xuvZ/7zo1P+h38L/nd7A/5rdvv+W3Lz/bc+j/1zJmP9ayJf/V8iW/1XH + lf9Tx5P/UcaS/0/Gkv9OxZH/TMWQ/0vFkP9LxZD/S8WP/0vFkP9MxZD/TcWQ/07Fkf9PxpL/UcaT/1PH + lP9Vx5X/Z8yf/6bhx/+f28D/LYli/x98VP+RiWb/rY1r/6uMaf+igFz/n31a/518Wf+be1r/mXtb/5h6 + W/+VeFr/lntf/97Wzv+1pJL/jXRa/4pzWv90WT77XkIlbQAAAAIAAAAC////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8AZkgpLmpLKuBuTiz/c1Eu/3dUMP96VzH/f1oz/5d4Vv/c0cX/lXFL/4xk + OP+PZjr/kmg7/5VqPP+YbD3/m24+/51wP/+gckD/oXNB/1V5TP8bfFT/ZbCQ/8Pq2P/G69r/peDF/6Lf + w/+f38H/m92+/5jcvf960qr/X8qa/13JmP9ayZf/WMiW/1bHlf9Ux5T/U8eT/1HGk/9QxpL/T8aS/0/G + kv9PxpL/T8aS/1DGkv9QxpL/UcaT/1PHlP9Vx5T/VsiV/1jIlv9byZf/d9Gp/6zjyv+T07f/H35X/yt9 + Vv+jjWn/r45r/6uKZv+if1r/oH5b/559Wv+cfVv/mntb/5h7W/+WeVv/vaya/9vSyf+Rd1z/jXRb/4tz + W/97Ykj/Y0YomVxBJQX///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AGdJKVBrTCvzb08s/3RS + Lv94VTD/fFgy/4BbM/+DXTX/v6qU/8i0oP+OZTn/kWc6/5VqPP+YbD3/m24+/51wP/+gckH/o3RC/6V2 + Q/9weEr/G3xU/0udef+/6NT/zu7e/6ziyP+n4cX/pODD/6Dfwv+c3cD/mt2+/4XWsf9iypv/YMqa/13J + mf9byZj/WsiX/1jIlv9WyJX/VceV/1THlP9Tx5T/U8eU/1PHk/9Tx5T/VMeU/1THlP9Vx5X/V8iV/1jI + lv9ayJf/XMmY/17Jmf9gypr/iti0/6/ky/9/xaf/G3xU/z5+Vv+ujmn/sZBs/6iEX/+jgFv/ooBb/6B+ + W/+dflv/m3xb/5l7W/+eg2b/5N3W/66ZhP+Qd1v/jnVb/4x0W/+BaU//ZUkswVxBJRP///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wBnSSlNa0wr/XBPLf90Uy//eVYw/31ZMv+BXDT/hV41/5BrRP/d0cT/qYhm/5Rp + O/+Xaz3/mm0+/51wP/+gckD/o3RC/6Z2Q/+oeET/iHlI/x58VP80jWf/t+PO/9Lv4f+05c3/q+LH/6jh + xv+l4MX/ot/C/57ewP+c3b//kdq5/2XLnP9jy5v/Ycqa/1/Kmf9dyZn/W8mY/1rJl/9ZyJb/WMiW/1fI + lv9XyJb/V8iV/1fIlv9XyJb/WMiW/1nIl/9ayZf/XMmY/13Jmf9fypr/Ycqb/2PLnP9ly53/nN2//7Hl + zf9lsZD/G3xU/1mAV/+0kmz/q4Ze/6eDXP+lgVv/o4Fb/6F/W/+eflv/nH1b/5p8W//Juqn/1Mi8/5N4 + W/+Rd1v/jnVb/4x0W/+FblX/aU0x0VxBJAv///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AZkgpLGtMK/JwTy3/dFMv/3lW + Mf99WTL/glw0/4ZfNv+KYjf/qIhm/93Rw/+WbD7/mG09/5xvP/+fcUD/onNB/6V2Q/+oeET/q3pF/5t8 + R/8nfFP/JIFa/6rbxP/T8OL/vejS/6/jyv+s4sj/quLH/6fhxf+k38P/oN/B/57ewP+a3b7/as2f/2bM + nf9ky5z/Ysub/2HKmv9fypr/XsmZ/13JmP9cyZj/W8mY/1vJmP9byZf/W8mY/1vJmP9cyZj/XcmZ/17K + mf9fypr/Ycqa/2PLm/9ky5z/Zsyd/2jMnv9vzqL/qeHH/7Lkzf9JnHj/G3xU/3eCWf+shVz/q4Vc/6mD + XP+mglz/pIFc/6GAW/+ff1v/nX1b/6eNcf/n4Nn/po92/5N4W/+Rdlv/jnVb/4tzWv+FbVX/Z0wvr1tA + JAH///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AGVIKBRrTCvfcE8t/3RTL/95VjH/flkz/4JdNP+GYDb/i2M4/49mOf+6n4H/08Ct/5pu + Pv+ecED/oXNB/6R1Qv+nd0T/qnlF/618Rv+pfEb/NnxR/xt8VP+Yz7X/0u7g/8fq2f+05M3/seTL/67i + yf+r4sj/qeHG/6XgxP+i38L/oN7B/5zdv/960qr/acyf/2fMnv9my53/ZMuc/2PLm/9iypv/Ycqa/2DK + mv9fypr/X8qa/1/Kmf9fypr/X8qa/2DKmv9hypr/Ysqb/2PLnP9ky5z/Zsyd/2jMnv9qzJ//bM2g/27N + of970an/suXN/63fyP8xjGX/HnxU/4+FWv+uh1z/rIVd/6mEXP+og1z/pYJc/6KBXP+gf1v/nn1b/9XI + uv/IuKb/lnpb/5N4W/+Rdlv/jnVb/4tzWv+Da1P/ZUoug////wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wBlRygGaksqwm9PLP90Uy//eVYx/35Z + M/+DXTX/h2A2/4tjOP+PZjr/lGk7/8qzm//IsJb/oHJA/6N0Qv+mdkP/qnlF/617Rv+vfUb/r31G/018 + T/8bfFT/f76g/9Du3//Q7t7/uObP/7blzv+y5Mv/sOPK/63iyP+r4cf/p+HF/6Tfw/+i38L/n97A/5DZ + tv9tzaD/a82f/2nMn/9ozJ7/Z8yd/2bLnf9ly5z/ZMuc/2PLnP9jy5z/Y8ub/2PLnP9jy5z/ZMuc/2XL + nP9my53/Z8yd/2jMnv9qzJ//a82g/23NoP9vzqH/cc6i/3PPo/+K1rL/uebQ/6LYv/8igFn/Kn1V/6OH + XP+wiF3/rYZd/6uFXf+ohFz/poJc/6SBXP+gf1v/xrOf/9fLvf+Ze1v/lnpb/5N4W/+Qdlv/jXRb/4pz + Wv+AaE/+ZEktV////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AGlKKpxuTiz/dFIu/3lWMP9+WTP/g101/4hgNv+MYzj/kWc6/5VqPP+ZbT7/2sm2/8Ch + gP+kdUL/qHhE/6x6Rf+vfUf/sH1G/7F+Rv9nfUz/G3xU/1+piP/L7Nz/1vDj/73n0f+65s//t+XO/7Tk + zf+x48v/r+PJ/6ziyP+p4cb/puDE/6Tgw/+h3sH/nt7A/3bQpv9vzqH/bc2g/2zNoP9qzZ//acyf/2nM + nv9ozJ7/Z8ye/2fMnv9nzJ3/Z8ye/2fMnv9ozJ7/acye/2rMn/9rzZ//bM2g/23Nof9vzqH/cM6i/3LP + o/90z6T/dtCl/3jQpv+b3Lz/u+fR/4/Lr/8bfFT/PX9W/6+IXP+xiV3/r4dd/6yGXf+phF3/poNc/6OB + W/+7o4n/5NzS/5t8W/+Ye1v/lXlb/5J3Wv+PdVr/jXRZ/4pzWf98ZUv3YUUpM////wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wBoSilxbk4s/3NSLv94VTD/fVky/4Jd + NP+IYDb/jGM4/5FnOv+Vajz/mm0+/6BzRP/l2cv/uJJp/6p5Rf+tfEb/r31G/7B+Rv+yf0b/gn5K/xt8 + VP9ClnL/xOjV/9nx5f/B6NT/vefR/7vm0f+55c//tuXN/7PkzP+x48r/ruLJ/6vhx/+o4cX/puDE/6Pf + wv+g3sH/itey/3LPo/9xzqL/b86i/27Oof9tzaH/bM2g/2zNoP9rzaD/a82f/2vNn/9rzaD/bM2g/2zN + oP9tzaD/bc2h/27Oof9wzqL/cc6i/3LPo/90z6T/dtCl/3jQpv960Kf/fNGo/37Sqf+q4cb/vujT/3K3 + mP8bfFT/WIJX/7SLXf+yiV7/r4dd/62GXf+qhF3/poNc/7GUc//p4dn/polp/5t8W/+Yelv/lXlb/5J2 + Wv+PdVr/jHRZ/4lyWf96YknnXEEkGP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8AZ0kpSG1NK/xyUS7/d1Uw/31ZMv+CXTT/h2A2/4xjOP+RZzr/lWo8/5xxQv+vimL/x6qM/+3j + 2f+1iVv/r31H/7B9Rv+xfkb/sn9G/5h/SP8ifFP/Lohi/7jhzf/a8eX/xurX/77n0v+959H/vObR/7rm + 0P+45c7/teTM/7Ljy/+w48r/reLI/6rhxv+o4MX/peDD/6Pfwv+c3b7/d9Cl/3TPpP9zz6P/cs+j/3HO + o/9wzqL/cM6i/2/Oov9vzqL/b86h/2/Oov9vzqL/cM6i/3HOov9xzqP/cs+j/3PPpP91z6T/dtCl/3jQ + pv950Kb/e9Gn/33RqP9/0qn/gdKq/4XUrP+25M3/v+fT/1Oif/8bfFT/d4ZZ/7WLXv+yiV7/sIhe/62H + Xf+qhV3/qYZg/+nh2P+1m3//nX5b/5t8W/+Yelv/lXhb/5F2Wv+OdFr/i3NZ/4hxWP90W0HNWkAkB/// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AGVHKChrTCvwcVAt/3ZUL/98WDL/gVw0/4Zg + Nv+MYzj/kWc6/5VqPP+gd0r/zbac/+HRwf/v5t3/+PTw/+HOuv+/l2v/sn9G/7OARv+ogEb/Ln1S/x9+ + V/+n18D/1/Dk/8vs2//A6NP/vufS/73n0f+85tH/u+bQ/7rlz/+35c3/tOTM/7Lky/+v48n/reLI/6rh + xv+n4MX/pd/D/6Pfwv+G1K//eNCm/3fQpf920KX/dc+k/3TPpP90z6T/c8+k/3PPo/9zz6P/c8+k/3PP + pP90z6T/dc+k/3XPpf920KX/d9Cl/3jQpv960af/e9Gn/33RqP9+0qn/gNKq/4LTq/+E06z/htSt/5DX + s/+/59P/u+TP/ziPaf8dfFT/k4hb/7aMXv+zil3/sIhe/62GXf+qhV3/4dXH/8Ksk/+hf1v/nX5b/5p7 + W/+XeVv/k3da/5B1Wf+Mc1j/iXFY/4VtVv9kSy6k////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wBjRicBaUoqyW9PLP91Uy//elcx/4BbM/+GXzb/i2M4/5BmOv+Vajz/mm8//8WqjP/l2Mr/8uzk//r3 + 9P/8+/n/9e/p/+3h1P/VuJj/zrCM/0eJYf8bfFT/j8it/9Pv4f/R7t//wOjU/8Do0/++59L/vefR/7zm + 0f+75tD/uuXP/7jlzv+25c3/tOTM/7Hjyv+v4sj/rOLH/6rhxv+o4MX/puDD/5nbuv980aj/e9Gn/3rR + p/950Kb/eNCm/3jQpv930Kb/d9Cl/3fQpf930KX/eNCm/3jQpv940Kb/edCm/3rRp/970af/fNGo/33R + qf9/0qn/gNKq/4LTq/+E06z/htOt/4fUrv+J1K7/jNWw/5zauv/D6dX/rtzG/yWCWv8ofVX/p4tb/7eM + Xv+zil7/sIhe/62GXf/XxbL/0L2p/6OBW/+gf1v/nX1b/5l7Wv+WeVr/k3dZ/5B1Wf+Lclf/iHBX/3pi + SP9cQSRU////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AGlLKmZwUTD/c1Iu/3lWMP9/WjP/hV41/4pi + N/+Yckn/tZd3/8WrkP/QuaH/5dnK//Lr5P/48+//+/n3//z6+f/07eX/6t3N/86rg/9hil//G3xU/3G2 + l//O7d3/3/Pp/9rx5f/Z8eT/2PHk/9fw4//X8OP/1vDi/9Xw4v/U7+H/1O/h/9Pv4P++59L/s+TL/7Hj + yv+v4sj/rOHH/6vhxv+o4MX/pt/D/4vWsf9/0qn/ftKp/33RqP980aj/fNGo/3vRqP970af/e9Gn/3vR + p/970aj/fNGo/3zRqP990aj/ftKp/3/Sqf+C06z/suPL/7Pky/+05Mz/teTN/7bkzf+35M3/uOXO/7nl + zv+55c7/ueXO/8Lo1P/D6db/mc+1/xt8VP86f1X/tIxc/7eNX/+0i17/sIhe/863n//czLz/poJc/6OB + W/+fflv/nH1b/5h6Wv+VeFr/kXZY/450WP+KcVf/hnBX/2tRNuZZPyQM////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wBkRygTc1U27XNTMP93VDD/fVky/4NdNf+beVX/uqGG/867pv/FrZL/uZl2/7SOZv/Gp4X/4M25/+3i + 1v/38uz/+fby/+zf0f/fyK7/eYRS/xt8VP9Dl3P/st/J/7Tgyv+04Mr/teHL/7Xhy/+14cv/teHL/7Xh + y/+34cv/t+HL/7nizP/A59T/0O7f/8Dn0/+15Mz/s+PL/7Hjyv+v4sj/reHH/6vhxv+p4MT/pN/C/4bU + rf+C06v/gdKq/4DSqv+A0qr/f9Kq/3/Sqf9/0qn/f9Kq/4DSqv+A0qr/gNKq/4HSqv+C06v/g9Or/4fU + rv+/6NT/vefS/7bizP+04cv/teHL/7bhzP+24cz/tuHM/7bhzP+24cz/tuHM/7bhzP+24cz/arCR/xt8 + VP9Uglb/uY1d/7eMXv+zil7/z7ac/93Ovf+pg1z/pYFc/6F/W/+efVr/m3tZ/5d5Wf+Tdlj/j3VY/4ty + V/+IcFf/gGlQ/2BGKY3///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AGlMK5p8X0D/dVMv/31aNP+dgGH/v6qT/8y6 + pv+8oob/poBY/55wQP+jdEL/qHhE/617Rv/LqYX/3ceu/+7j1//z6+L/3MOm/7mcbP8efFP/G3xU/xt8 + VP8bfFT/G3xU/xt8VP8bfFT/G3xU/xt8VP8bfFT/G3xU/xt8VP8bfFT/G3xU/4LDpP/Q7t//wOfT/7Xk + zP+048v/s+PK/7Ljyf+v4sj/ruLH/6zhxv+p4MX/n92+/4bUrf+F06z/hNOs/4TTrP+E06z/g9Or/4PT + q/+D06v/hNOs/4TTrP+E06z/hdOs/4bUrf+H1K3/i9Ww/8Ho1f+d1Ln/IH9X/xt8VP8bfFT/G3xU/xt8 + VP8bfFT/G3xU/xt8VP8bfFT/G3xU/xt8VP8bfFT/G3xU/xt8VP+QiFn/uY1d/7eMXv/RuJ7/3s68/6yF + Xf+og1v/pYFb/6F+Wv+dfFr/mXpZ/5V4WP+RdVf/jnNX/4lxVv+Gblb/c1tA+1pAJC3///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wBlRygvc1Y3/n1fPv+FZUP/vKiU/8i2o/+xlnr/mnNJ/5drPf+dcD//onNB/6d3RP+se0b/sH1G/7F/ + Rv+4iFL/28Gk/+TRu/+4hEX/t4RF/2+BS/9cgE3/XIBN/12BTf9dgU3/XoJN/16CTf9egk3/X4JN/1+D + Tf9ghVD/ZIxc/2KMXf8bfFT/abCQ/9Du3//A59P/teTM/7Tjy/+z48r/suPJ/7Hiyf+w4sj/ruHH/6zh + xv+q4cX/mdm5/4nUrv+I1K7/iNSu/4jUrv+H1K3/h9St/4fUrf+I1K7/iNSu/4jUrv+J1K7/itWv/4vV + r/+O1rH/w+nW/4vFq/8bfFT/UYha/2OMXf9jjF3/Yote/2GJWv9ehFP/XYNS/12DU/9dg1T/XINU/1yD + Vf9cg1X/YYNW/7CMWv+6jVz/uY1d/9S6nv/fzrv/rodc/6uFXP+ng1v/o4Bb/59+Wf+cfFn/l3lY/5R3 + WP+QdFb/jHJX/4hvVf+EbVX/ZUswwP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AGhMLKuBZEb/lntg/8S0o/+3oYr/j2hA/49m + Ov+Vajz/m24+/6FzQf+mdkP/rHpF/699Rv+xfkb/s4BG/7WBRf/UtpH/38eq/7mFRf+7hkT/vIdE/76I + RP+/iUP/wIpD/8OMRf/GkUv/x5RO/8iVTv/Ilk//yZZS/9Clav/Rp23/y6Zu/xt8VP9psJD/0O7f/8Dn + 0/+15Mz/tOPL/7Pjyv+y48n/seLJ/7DiyP+v4cf/reHG/6zhxv+r4MT/ldi2/4zVsP+M1bD/jNWw/4vV + r/+L1a//i9Wv/4zVsP+M1bD/jNWw/43VsP+N1bD/jdWw/5DWsv/D6db/i8Wr/xt8VP+jmmX/0KVr/8+l + a//PpGz/zqRt/8eYWf/CkVH/wZBR/8CPU/+/j1T/v49W/76PV/+9j1j/vI5a/7uOW/+6jVz/1ryg/+DO + uv+yiFz/rodc/6mEW/+mglr/oX5Z/559Wf+aelf/lndX/5F1Vv+Nc1b/iW9U/4VuVP9zW0H/WkAkOv// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wBlRygodFc3/Z2Gbv/NwLP/p450/4ZhN/+NZDn/k2k7/5ltPv+fcUD/pXZD/6p5Rf+vfUb/sX5G/7OA + Rv+0gUX/toNF/9a4lP/fxqf/u4ZE/72IRP/AjUr/xZNR/8mZWv/NoGP/z6Rp/9Glaf/RpWr/0aZs/9Gn + bf/RqG7/0ahw/9Gpcf/Lp3H/G3xU/2mwkP/Q7t//wOfT/7XkzP+048v/s+PK/7Ljyf+x4sn/sOLI/6/h + x/+t4cb/rOHG/6vgxf+p38T/lti2/43VsP+N1bD/jdWw/43VsP+N1bD/jdWw/43VsP+N1bD/jdWw/43V + sP+N1bD/kNay/8Pp1v+Lxar/G3xU/6OcZv/RpWv/0aZr/8+la//PpGz/zaJo/8ORT//DkFD/wZBR/8GQ + Uv+/kFT/v49V/76PV/+9jlf/vI5a/7qNW//WvKD/4c66/7WKXf+wh1v/rIVb/6mCWv+kgFr/oH1Y/5x7 + WP+YeFf/k3ZW/49zVf+LcVX/h25T/4FpUf9eRCe3////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AGhMLaOTe2D/zcG0/7GbhP+IYzv/i2M4/5Fn + Ov+XbD3/nXA//6N0Qv+peUT/r31H/7F+Rv+zgEb/tIFF/7aCRf+4hEX/2LuW/97EpP+9iET/x5da/8yh + aP/Oomn/z6Np/9Ckaf/RpWv/0aZs/9Gobv/RqG//0qlx/9Kqcv/SqnP/0qpz/8ypc/8bfFT/abCQ/9Du + 3//A59P/teTM/7Tjy/+z48r/suPJ/7Hiyf+w4sj/r+HH/63hxv+s4cb/q+DF/6rgxP+o38P/l9m3/43V + sP+N1bD/jdWw/43VsP+N1bD/jdWw/43VsP+N1bD/jdWw/43VsP+Q1rL/w+nW/4vFqv8bfFT/o5xn/9Gn + bf/Rp2z/0aZs/9Cla//QpWz/yZla/8ORTv/DkFD/wZBR/8GQUv+/kFT/v49V/76PV/+8jlf/vI1a/9e9 + oP/hzbj/t4xd/7SKXP+vh1v/q4Ra/6eBWf+jf1n/nnxX/5p5V/+Vd1b/kXRW/4xxVP+Jb1P/hGxS/2tR + N/9ZPyMy////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wBkRygieF4++8m8rv+3pJD/k3RT/4piOf+OZTn/lWo8/5tuPv+hc0H/p3dE/618Rv+wfkb/sn9G/7SB + Rf+2gkX/uIRF/7qFRP/YuZL/4Mio/8WVVv/NoWn/zqNp/8+lav/RpWr/0ads/9Gnbf/SqG//0qlw/9Kq + c//Sq3P/0qt0/9Ksdv/TrHf/0LB+/xt8VP9psJD/0O7f/8Dn0/+15Mz/tOPL/7Pjyv+y48n/seLJ/7Di + yP+v4cf/reHG/6zhxv+r4MX/quDE/6nfw/+o38P/mdm4/43VsP+N1bD/jdWw/43VsP+N1bD/jdWw/43V + sP+N1bD/jdWw/5DWsv/D6db/i8Wq/xt8VP+inGj/0ahu/9Gobv/Rp23/0aZs/9GmbP/Oomf/xZFN/8OR + Tv/DkFD/wZBR/8GQUv+/kFT/v49V/76PV/+8jlf/2L6h/+DMtv+5jFz/totd/7KJXP+thlv/qYNa/6SA + Wf+gflj/m3tX/5d4V/+TdVX/jnJU/4pvU/+FbFL/emJI/1xBJK3///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////UtXMxM/Nw7f/yLqs/5N0VP+Tck7/i2M4/5Jo + O/+YbT3/n3FA/6V2Q/+sekX/sH1G/7F/Rv+0gEb/toJF/7eDRf+5hUX/u4ZE/9Sxhf/o1Lz/zaJq/8+k + av/QpWv/0aZr/9Knbf/SqG//0qlw/9Kqcv/SqnT/0qt1/9Ksd//TrXj/0615/9Ouef/VvJT/G3xU/2mw + kP/Q7t//wOfT/7XkzP+048v/s+PK/7Ljyf+x4sn/sOLI/6/hx/+t4cb/rOHG/6vgxf+q4MT/qd/D/6jf + w/+m3sL/m9q6/43VsP+N1bD/jdWw/43VsP+N1bD/jdWw/43VsP+N1bD/kNay/8Pp1v+Lxar/G3xU/6Od + af/OpGr/z6Rq/9Gnbv/Rp23/0qdt/9GmbP/HllH/xZJN/8OQTv/DkFD/wZBR/8GQUv+/j1P/vo9V/72O + Vv/awaP/3siw/7mMW/+4jFv/tIlc/6+GWv+shFr/p4FZ/6N/WP+de1b/mXlW/5R2VP+Qc1T/i29S/4dt + Uv+BalD/Y0ks/Vg+Ixv///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /yz+/v2x6+jj/Pbz8f/FtqX/lHVV/49pQf+PZjn/lWo8/5xvP/+jdEL/qXlE/699Rv+xfkb/s4BG/7WC + Rf+3g0X/uYVF/7uGRP+9iET/065//+/hz//PpGv/0aZs/9KmbP/SqG7/0qhv/9Kqcv/SqnP/0qx1/9Ks + dv/TrXj/0655/9Oue//Tr3z/1bKC/9rHpf8bfFT/abCQ/9Du3//A59P/teTM/7Tjy/+z48r/suPJ/7Hi + yf+w4sj/r+HH/63hxv+s4cb/q+DF/6rgxP+p38P/qN/D/6bewv+m3sH/ndu7/43VsP+N1bD/jdWw/43V + sP+N1bD/jdWw/43VsP+Q1rL/w+nW/4vFqv8bfFT/o5xo/8aVUf/FlE7/yZlV/86jZ//Rp27/0qdt/8yc + XP/Gkkv/xZJN/8OQTv/DkFD/wZBR/8GQUv+/j1P/vo9V/+HMtP/YvZ3/uoxZ/7iMW/+3i1v/sohb/66F + Wf+pgln/pH9X/6B8V/+belX/lndV/5FzU/+NcFL/iG5R/4NrUP9xWD3/WkAkdv///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////avb08t/6+fj/+vn3/9zTyf+Tck//i2M4/5Jo + O/+ZbT7/oHJA/6Z2Q/+te0b/sH5G/7J/Rv+0gUX/t4NF/7mERf+7hkT/vYdE/7+JRP/Ws4b/8ufY/9Kn + bv/Sp23/0qhv/9Kpcf/SqnP/0qt1/9Ksdv/SrXj/0656/9Ove//UsH3/1LB+/9Sxfv/cv5b/2cWi/xt8 + VP9psJD/0O7f/8Dn0/+15Mz/tOPL/7Pjyv+y48n/seLJ/7DiyP+v4cf/reHG/6zhxv+r4MX/quDE/6nf + w/+o38P/pt7C/6bewf+k3sD/ntu8/47Vsf+N1bD/jdWw/43VsP+N1bD/jdWw/5DWsv/D6db/i8Wq/xt8 + VP+qrIP/3L+V/86kaf/FlFD/xpRO/8mZV//PpGj/zJtb/8eSTP/Gkkv/xZJN/8OQTv/DkFD/wZBR/8CP + Uv++j1T/6dnG/9Gxi/+7jFj/uoxZ/7iLW/+1iVr/sYda/6yEWP+ngVj/on5W/517Vf+Yd1T/k3RT/49x + Uv+JblH/hWtQ/35lTf9cQSbT////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///927+zp8f38/P/6+fj/5+DZ/5FtR/+OZTn/lWo8/51wP/+jdEL/qnlF/699Rv+xf0b/tIFG/7aC + Rf+4hEX/uoZE/7yHRP++iUT/wYxH/9WxgP/z6Nn/1q56/9KocP/SqXL/0qt0/9Osdv/TrXj/0615/9Su + e//Ur3z/1LB+/9Sxf//UsYD/1bSE/+HKqf/UupH/G3xU/2mwkP/Q7t//wOfT/7XkzP+048v/s+PK/7Lj + yf+x4sn/sOLI/6/hx/+t4cb/rOHG/6vgxf+q4MT/qd/D/6jfw/+m3sL/pt7B/6TewP+j3b//nNu7/43V + sP+N1bD/jdWw/43VsP+N1bD/kNay/8Pp1v+Lxar/G3xU/7zMt//w49H/6tnA/9Cocf/HmFb/xZNO/8aT + Tv/Gk07/x5JM/8eSS//Gkkv/xZFM/8OQTv/DkE//wY9R/8GRVP/v5Nb/y6V4/7uMVv+6jFj/uYtZ/7eL + Wv+ziFr/roRY/6mCV/+kflb/nntV/5p3VP+VdVP/j3FR/4pvUf+Fa0//gWhO/2NIK/9YPiMw////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////APHv7GLm4dz++/r5//Tx7v/c0sf/jGU7/5Fn + Ov+YbT3/oHJA/6d3Q/+tfEb/sX5G/7OARv+1gkX/t4NF/7qFRP+8h0T/vohE/8CKQ//Km13/1Kx3//Po + 2f/Ztof/0qpy/9Osdf/TrXf/0654/9Sve//UsHz/1LB+/9Sxf//UsYH/1LOC/9Szg//av5b/4cqp/8+0 + hv8bfFT/abCQ/9Du3//A59P/teTM/7Tjy/+z48r/suPJ/7Hiyf+w4sj/r+HH/63hxv+s4cb/q+DF/6rg + xP+p38P/qN/D/6bewv+m3sH/pN7A/6Pdv/+i3b//lti3/43VsP+N1bD/jdWw/43VsP+Q1rL/w+nW/4vF + qv8bfFT/vM25//Tr4P/w49H/272T/9Gpc//Ln2L/xZNP/8aTTv/Gk03/x5NN/8eSSv/Fkkv/xZBM/8OQ + Tv/CkE//x5xl//Dl1//Emmb/vIxV/7uMVv+5i1j/uItZ/7WJWv+whln/q4NX/6Z/Vv+gfFX/nHlU/5Z1 + Uv+RclL/jG5Q/4drT/+BaE3/ak8z/1k/JIz///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8AeV9EWdvTy//w7On/4dnR/7Sdg/+NZDn/lGk8/5xvP/+jdEL/qnlF/699Rv+yf0b/tIFF/7eD + Rf+5hEX/u4ZE/72IRP+/iUP/xpRS/9Gnbv/SqG//8+fY/929kv/TrHX/0614/9Ouev/Ur3z/1LB9/9Sx + gP/UsoD/1LOC/9W0hP/VtIX/1bWH/+HKqf/cwpv/z7SH/xt8VP9psJD/0O7f/8Dn0/+15Mz/tOPL/7Pj + yv+y48n/seLJ/7DiyP+v4cf/reHG/6zhxv+r4MX/quDE/6nfw/+o38P/pt7C/6bewf+k3sD/o92//6Ld + v/+h3L7/ktez/43VsP+N1bD/jdWw/5DWsv/D6db/isWq/xt8VP+0v6L/7d/L/+rYwP/fw57/27yR/9Su + e//OpWv/xpRQ/8aTTv/Gk03/x5JL/8eSSv/Fkkv/xJBM/8OQTv/QqHb/8OTV/8CPU/+8jVT/u4xV/7qL + V/+4ilj/t4pZ/7KHWP+thFj/qIBW/6J9Vf+deVP/mHZS/5JyUf+Nb1D/iGxO/4NpTf9wVTn/XEEk2f// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wBnSSmTxbeq/9TIvf+1oIn/iGE3/5Bm + Ov+XbD3/n3FA/6Z2Q/+tfEb/sX5G/7OARv+2gkX/uIRF/7qGRP+8h0T/v4lE/8GLQ//Pomf/06lv/9Oq + cf/w4s//4MWe/9OteP/Trnr/1LB9/9Swfv/VsoD/1bKC/9Wzg//VtIX/1bWG/9a2iP/bvpb/4s2t/9e5 + jv/Qt4v/G3xU/2mwkP/Q7t//wOfT/7XkzP+048v/s+PK/7Ljyf+x4sn/sOLI/6/hx/+t4cb/rOHG/6vg + xf+q4MT/qd/D/6jfw/+m3sL/pt7B/6TewP+j3b//ot2//6Hcvv+e27z/j9ax/43VsP+N1bD/kNay/8Pp + 1v+Kxar/G3xU/6SjdP/YuY3/17aH/9Wzgv/bvpT/3sKb/9m4if/Pp23/xpRQ/8aTTf/Gk0z/xpJK/8eS + Sv/FkEv/xJBM/9a0if/q2sT/v45Q/76NUv+8jFP/uotV/7iKVv+3ilj/tIhY/6+FV/+pgVX/pH1U/556 + Uv+ZdlH/lHNQ/49wT/+IbE3/g2hM/3VcP/9eQiX/Vj0iG////wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AGtNLNXKvrH/rpqC/4ZhOv+LYzj/kmg7/5puPv+ic0H/qnlF/699Rv+yf0b/tIFF/7eD + Rf+5hUX/vIdE/76IRP/AikP/woxD/9GmbP/TqnH/06t0/+3cxv/jzKn/1K97/9Wwff/VsX//1bKB/9Wz + gv/VtYX/1bWG/9a1iP/Wton/1reK/+DJp//exqL/1rmO/9C4jf8bfFT/abCQ/9Du3//A59P/teTM/7Tj + y/+z48r/suPJ/7Hiyf+w4sj/r+HH/63hxv+s4cb/q+DF/6rgxP+p38P/qN/D/6bewv+m3sH/pN7A/6Pd + v/+i3b//ody+/6Dcvf+Y2bf/jdWw/43VsP+Q1rL/w+nW/4rFqv8bfFT/paR2/9W0hf/Zu5D/1LB//9Ku + ev/WtIP/3cCW/9y+lP/SrHj/xpVR/8aTTP/Gk0z/xpJJ/8aRSv/EkEv/3cCb/+TOsf/Ajk//vo1Q/72N + Uv+7i1P/uYpV/7iJVv+2iVj/sYVX/6uCVf+mflP/oXtS/5p3UP+VdE//j29P/4lsTf+EaUv/e2FG/19D + Jv9YPiNd////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wBjRicXcFIy/9TJvv+iiW3/hV81/41k + Of+Vajz/nXA//6V2Q/+te0b/sH5G/7OARv+2gkX/uIRF/7qGRP+9iET/v4lD/8KLQ//EjUP/0KRp/9Or + dP/UrXf/6dW6/+jVuv/VsH3/1bGA/9Wygv/VtIT/1bWG/9W2h//Wtoj/1riK/9a4jP/YvJL/4s6x/9i+ + lv/WupH/0bmQ/xt8VP9psJD/0O7f/8Dn0/+15Mz/tOPL/7Pjyv+y48n/seLJ/7DiyP+v4cf/reHG/6zh + xv+r4MX/quDE/6nfw/+o38P/pt7C/6bewf+k3sD/o92//6Ldv/+h3L7/oNy9/57bvP+O1bH/jdWw/5DW + sv/D6db/isWq/xt8VP+lpXf/1LOD/9m6j//Wt4j/0699/9Kuev/Trnr/2biK/93Al//Ws4P/xpdS/8aT + TP/Gk0v/xpFJ/8aRSv/kza7/3sKe/8COTv+/jU//vY1R/7yMUv+5ilP/uIpV/7eIVv+zh1f/roRX/6iB + Vv+mglv/nHhR/5ZzT/+QcE7/i21M/4VpS/9/ZEn/YkYo/1k/JJ////8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AGVHKFl4Wjv/08i9/5+CZf+IYDb/kGY6/5hsPf+gckH/qHhE/699Rv+xf0b/tIFF/7eD + Rf+5hUX/vIdE/76JRP/AikP/w4xD/8WOQ//Nn2D/1K13/9Suev/jy6n/7+DM/9WygP/Vs4L/1bSF/9W1 + h//Wtoj/1reK/9a4jP/WuYz/17qO/93Eof/hy63/17yT/9i8k//SupH/G3xU/2mwkP/Q7t//wOfT/7Xk + zP+048v/s+PK/7Ljyf+x4sn/sOLI/6/hx/+t4cb/rOHG/6vgxf+q4MT/qd/D/6jfw/+m3sL/pt7B/6Te + wP+j3b//ot2//6Hcvv+g3L3/n9y8/5TYtf+N1bD/kNay/8Pp1v+Kxar/G3xU/6Wmev/UtIX/1reJ/9m6 + j//TsYD/0699/9Kuev/SrXj/1bF+/9u7kP/Yt4j/yp1e/86kZ//fwpr/6NCx//bu5P/bwJj/wo5M/7+N + Tv++jE//vIxR/7uKUv+4iVT/t4hV/7iMXf+5k2r/r4he/6yKZP+deFD/l3RO/5FxTf+LbEv/hmhK/39l + SP9nSy3/W0Ak4f///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AZ0kpjIBiRP/Rxbj/noFj/4pi + N/+SaDv/mm4+/6N0Qv+qeUX/sH1G/7OARv+1gkX/uIRF/7qGRP+9iET/v4pD/8KMQ//EjUP/xY9F/8iW + Uf/Urnr/1K98/97BmP/z6dv/1rWF/9W1hf/Wtof/1raJ/9e4i//XuIz/17mO/9e6kP/Xu5H/4c2v/97G + o//YvZX/2L2W/9K7lP8bfFT/abCQ/9Du3//A59P/teTM/7Tjy/+z48r/suPJ/7Hiyf+w4sj/r+HH/63h + xv+s4cb/q+DF/6rgxP+p38P/qN/D/6bewv+m3sH/pN7A/6Pdv/+i3b//ody+/6Dcvf+f3Lz/m9q6/43V + sP+Q1rL/w+nW/4rFqv8bfFT/pad7/9S1h//UtIX/2byR/9a1hv/TsH7/0q98/9Kuev/SrXj/0qt2/9ez + g//fwpz/7d7J//Tq3f/48ur//fv4//Lm1//XtYj/wI1M/76MTv+9jE//u4tR/7mJUv+5i1f/v5ds/7uW + a/+1kWn/q4Vd/594T/+ZdE7/knBM/4xsS/+FaUn/gWVI/2xRM/9cQSX/VDshFP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wBoSim0hmpM/8y/sf+jhmj/jGM4/5RpPP+dcD//pXZD/618Rv+xfkb/tIBG/7aD + Rf+5hUX/vIdE/76JRP/CjUb/w41D/8WORP/FkEf/x5RQ/9KrdP/VsX7/2LeJ//Pq3P/cwJj/1raI/9e3 + if/XuIv/17mN/9e6j//XupD/17uS/9rAm//j0LT/2cCa/9i/mP/Yv5n/0ryX/xt8VP9psJD/0O7f/8Dn + 0/+15Mz/tOPL/7Pjyv+y48n/seLJ/7DiyP+v4cf/reHG/6zhxv+r4MX/quDE/6nfw/+o38P/pt7C/6be + wf+k3sD/o92//6Ldv/+h3L7/oNy9/5/cvP+e27v/kdaz/5DWsv/D6db/isWq/xt8VP+mqH3/1LaJ/9S1 + iP/XuY7/2LqP/9SxgP/TsH7/0q98/9Kuev/SrHf/0qt0/+XOr//0697/+/jz//79+//+/fz/9/Dn/+va + w//HlFj/v4xM/72LTv+7ik//uYpR/7+UZP/AmWz/vZVr/7eRaf+nf1P/n3lP/5l1Tf+TcUz/jWxL/4dp + Sf+AZEf/d1xB/19DJ/9VPCI8////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AGpLKtuNclX/v62b/7Ka + f/+OZTn/l2s9/59xQP+nd0T/r31G/7J/Rv+1gUX/t4NF/7qGRP+9iET/v4pD/8KNRP/FjkP/xY9G/8WR + Sf/Fkkz/z6Zt/9aygf/WtIP/8eXV/+LLqv/Xt4r/17iM/9e5jv/XupD/17yS/9e9lP/YvZX/3smn/+HM + r//Yv5n/2MCa/9jBm//Svpn/G3xU/2mwkP/Q7t//wOfT/7XkzP+048v/s+PK/7Ljyf+x4sn/sOLI/6/h + x/+t4cb/rOHG/6vgxf+q4MT/qd/D/6jfw/+m3sL/pt7B/6TewP+j3b//ot2//6Hcvv+g3L3/n9y8/57b + u/+Y2bf/kNay/8Pp1v+JxKn/G3xU/6epf//Vt4z/1LaK/9W2if/ZvJP/1bWG/9SxgP/TsH7/0q98/9Kt + ef/SrHf/59Gy//Pm1v/69vH//v39//79+//38Of/69rD/8iaXP+/jUz/votM/7yKT/+9jlf/w5ps/8GY + bP++l2v/to9k/6d9UP+geU//mXVN/5RwS/+NbUn/h2lI/4RoSv95X0P/Y0gs/1Y9ImP///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wBhRScGb08v/JF3Wv+tln3/w7Cb/5BmOv+YbT3/oXNB/6p5Rf+wfUb/s4BG/7aC + Rf+5hEX/u4ZE/76IRP/CjUb/xI9H/8WORP/FkEf/xZJK/8WTTf/Qp27/1rOD/9a1hv/r3MX/59a8/9e5 + jf/XuY7/17uR/9e8kv/YvZT/2L6W/9i/mP/j0LP/3cel/9nBm//ZwZ3/2cKe/9PAnP8bfFT/abCQ/9Du + 3//A59P/teTM/7Tjy/+z48r/suPJ/7Hiyf+w4sj/r+HH/63hxv+s4cb/q+DF/6rgxP+p38P/qN/D/6be + wv+m3sH/pN7A/6Pdv/+i3b//ody+/6Dcvf+f3Lz/ntu7/5zbu/+Q1rL/w+nW/4nEqf8bfFT/p6qA/9W5 + jf/Ut4v/1LaJ/9e6kP/XuY//1LKC/9OxgP/SsH7/0q57/9KteP/ewZr/6tnB//Tq3f/9+/j/+vbw//Po + 2f/ky6f/wo5O/8CNSv++i0v/vYtO/8OZZv/Dmmn/wZhq/7+Xa/+0il3/qH5Q/6F5Tv+bdUz/lHFK/45t + Sf+HaEf/hmpM/3pgRP9mSy//Vz0ji////wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AGJGJyp1WDj/k3db/5t9 + Xv/Sw7P/lWxA/5tuPv+jdEL/rHtG/7F+Rv+0gEb/t4NF/7mFRf+8h0T/v4lE/8KMRP/EjUP/xY9G/8WR + Sf/Fk0z/xpRP/8ufYv/WtYb/1raI/+bSt//t4Mz/17qP/9i7kf/YvJP/2L2V/9m+lv/Zv5j/3MWi/+PS + t//aw5//2cKe/9nDoP/aw6H/1MGf/xt8VP9psJD/0O7f/8Dn0/+15Mz/tOPL/7Pjyv+y48n/seLJ/7Di + yP+v4cf/reHG/6zhxv+r4MX/quDE/6nfw/+o38P/pt7C/6bewf+k3sD/o92//6Ldv/+h3L7/oNy9/5/c + vP+e27v/ndu7/5PXtP/D6db/icSp/xt8VP+nq4L/1rqQ/9W5jf/Ut4v/1biM/9i7k//JoGb/0Kx3/9Ox + f//Sr33/0q56/9Cpcf/UsYD/5tCy//n17v/r173/5Mqo/9Wqdf/Gk1D/wI1I/7+MSv/ClFv/xpxp/8Oa + af/BmGn/v5Zq/7OHWf+pflD/o3lN/5x1S/+VcUr/j2xI/4hoRv+Kb1H/fGBD/2hML/9YPiOy////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8AZEYoSnxgQv+Vel3/hGA7/8+/rf+tjWv/nXA//6Z2Q/+ufEb/sX9G/7SB + Rf+3g0X/uoZE/72IRP/AikP/w4xD/8WORP/FkEf/xZJK/8WTTv/GlVH/xpdV/9Sxgf/XuIv/4cmo//Pp + 3P/YvJL/2LyU/9i+lf/Zv5f/2cCa/9nBm//gzK7/4M6x/9nDn//axKH/2sSi/9rFo//Uw6H/G3xU/2mw + kP/Q7t//wOfT/7XkzP+048v/s+PK/7Ljyf+x4sn/sOLI/6/hx/+t4cb/rOHG/6vgxf+q4MT/qd/D/6jf + w/+m3sL/pt7B/6TewP+j3b//ot2//6Hcvv+g3L3/n9y8/57bu/+d27v/lti2/8Pp1v+JxKn/G3xU/6er + g//Wu5L/1rqQ/9W5jf/QsH//z6x6/8qjav/HnWH/0q97/86ocv/Hm1v/xpdV/8aWU//XtYX/7d7J/8WR + Sv/FkUf/zZ9f/9ClbP/Hllj/wIxK/8ebZf/Gm2j/xJlo/8GYaf+/lmn/tIdX/6p+T/+kek3/nHVM/5Vx + Sf+PbUj/iGhG/4drTv97X0L/aE0w/1k/I9L///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wBkRyhWgWVH/5N3 + Wf+CXDT/tp2C/8q0nf+ecED/p3dE/699Rv+yf0b/tYJF/7iERf+7hkT/volE/8GLQ//EjUP/xY9F/8WR + Sf/Fk0z/xpRP/8aWU//GmFb/yZ9j/9a2if/cwZr/9Ozf/9zEoP/YvZb/2b+Y/9nAmf/ZwZz/2sOf/+PS + uP/dyar/2sSi/9rFo//axaT/28am/9TEpP8bfFT/abCQ/9Du3//A59P/teTM/7Tjy/+z48r/suPJ/7Hi + yf+w4sj/r+HH/63hxv+s4cb/q+DF/6rgxP+p38P/qN/D/6bewv+m3sH/pN7A/6Pdv/+i3b//ody+/6Dc + vf+f3Lz/ntu7/53bu/+Y2bj/w+nW/4nEqf8bfFT/p6yE/9a8k//WupH/0bKD/8mja//Nqnj/0rOE/9Ct + ev/OqHL/z6p0/8uiaP/KoGT/yJtb/+LJpv/jy6n/xZJL/8WQSP/Fj0b/zZ9h/9SufP/QqHX/yJ1n/8ab + Zv/EmWf/wpho/7+Xaf+2ilr/q35O/6R5TP+ddkr/lnFI/49sRv+HZ0T/gWJC/3dbPP9pTjH/WT8k4P// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AGVHKGKEaUv/jnFQ/4NdNf+adk//2Mi2/6yEWf+peET/sH1G/7OA + Rv+2gkX/uYVF/7yHRP+/iUP/woxD/8WOQ//FkEb/xZJK/8WTTf/GlVH/xpdU/8aYV//Gmlv/yqFn/9e6 + j//y6dv/49Cy/9nAmf/ZwJr/2sGd/9rCnv/dyaj/5NS6/9vGpP/bxqT/28em/9vHp//bx6j/1MWl/xt8 + VP9psJD/0O7f/8Dn0/+15Mz/tOPL/7Pjyv+y48n/seLJ/7DiyP+v4cf/reHG/6zhxv+r4MX/quDE/6nf + w/+o38P/pt7C/6bewf+k3sD/o92//6Ldv/+h3L7/oNy9/5/cvP+e27v/ndu7/5vauv/D6db/icSp/xt8 + VP+nrYb/1r2V/9W7kv/IpW7/zq58/9S3jP/YvJT/1beK/9Szhf/TsoH/0rF+/9Kve//SrXr/7+LQ/9q5 + jP/Fk0z/x5RP/82fYP/PomT/0KVs/9Wyg//QqXj/xptm/8SZZv/Cl2f/wJZn/7qPYP+rfk7/pXpL/511 + Sf+WcEf/j2tF/4hnQ/+AY0L/el9C/2dMLv9ZPyTt////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AZUcoboZr + Tv+HZ0b/g101/45lOf/FrpT/0Lmg/6t6Rv+wfkb/s4BG/7eDRf+6hUT/vYhE/8CKQ//DjEP/xY5E/8WQ + SP/Fkkz/xpRP/8aWU//GmFb/xplZ/8ebXP/HnV//zKZw/+vdx//r3cj/2sGb/9rCnf/awp//2sSg/+DO + sP/i0bb/28am/9vHp//byKj/28ip/9vJq//Uxqj/G3xU/2mwkP/Q7t//wOfT/7XkzP+048v/s+PK/7Lj + yf+x4sn/sOLI/6/hx/+t4cb/rOHG/6vgxf+q4MT/qd/D/6jfw/+m3sL/pt7B/6TewP+j3b//ot2//6Hc + vv+g3L3/n9y8/57bu/+d27v/ndu7/8Pp1v+JxKn/G3xU/6euh//Wvpf/1r2V/9S4jv/WupH/1biO/9e7 + k//WuY//1LSG/9SzhP/TsYH/0rB+/9m7kP/06t3/1rSD/82iZv/Ppmv/0KRp/8+iZv/OoGT/zqNs/9Sv + gv/Op3j/xJpm/8KXZf/Almf/vJJj/61+Tf+leUv/nnVJ/5ZwR/+Pa0T/iGZD/4RmRv97X0H/ZEco/1k/ + JPr///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wBlSCh5iW1R/4BdOv+EXjX/jmU5/6B4S//ZxrL/xKF8/7F+ + Rv+0gUX/t4NF/7qGRP++iET/wYtD/8SNQ//Fj0X/xZFJ/8WTTf/GlVH/xpdU/8aYV//Gmlv/x5xe/8ee + Yf/HoGX/2b+Y//Dl1f/Yv5n/2sOe/9rEof/axaL/49O5/+DOsf/bx6j/28ip/9vJq//byqv/3Mqt/9XI + q/8bfFT/abCQ/9Du3//A59P/teTM/7Tjy/+z48r/suPJ/7Hiyf+w4sj/r+HH/63hxv+s4cb/q+DF/6rg + xP+p38P/qN/D/6bewv+m3sH/pN7A/6Pdv/+i3b//ody+/6Dcvf+f3Lz/ntu7/53bu/+e27z/xOnX/4nE + qf8bfFT/p66J/9e/mf/WvZf/1ryV/9a7kv/VuZD/1rqQ/9e8k//UtYj/1LSE/9Oygf/SsX//5dCx/+7f + y//Rq3X/0Kly/9Cnbv/QpWr/z6Nn/86hZP/Mn2P/zKFs/9Ovgv/MpXj/wpdl/8CVZf+9k2X/rn9O/6V5 + Sf+edUj/lm9F/5BsRf+IZUH/iGpL/3RXN/9jRif/WT8k/1A5IAf///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AGVI + KISLcFX/flw3/4VeNf+PZjn/mW0+/7qXcv/fy7b/uYxZ/7WBRf+4hEX/u4ZE/76JRP/Ci0P/xY5D/8WQ + Rv/Fkkr/xZRO/8aWUv/Gl1X/xplZ/8ebXP/HnWD/yKBl/8ehZ//OrHr/7uPT/9Cyhf/WvZX/28Wj/9zI + qP/k1b7/3cut/9zJqv/cyav/3Mqs/9zLrv/cy67/1cmt/xt8VP9psJD/0O7f/8Dn0/+15Mz/tOPL/7Pj + yv+y48n/seLJ/7DiyP+v4cf/reHG/6zhxv+r4MX/quDE/6nfw/+o38P/pt7C/6bewf+k3sD/o92//6Ld + v/+h3L7/oNy9/5/cvP+e27v/ndu7/57bvP/F6tj/icSp/xt8VP+nr4r/18Cb/9e/mf/WvZf/1ryU/9W6 + kf/VuY7/2L2U/9W3i//UtYb/1LOE/9OxgP/w5NP/4sqp/9Grdf/RqnL/0Khv/9CmbP/Po2f/z6Jk/82f + Y//KnWT/yp9r/9Ctgv/Jo3b/v5Vl/72UZP+wglH/pnlK/55zR/+Xb0T/j2lB/4dlQP+Iakz/bk8t/2NG + J/9ZPyT/UDggFP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8AZUcofotxVf99WjX/hV81/49mOv+abT7/pHZD/9S6 + nf/XvaD/tYJG/7mERf+8h0T/v4lE/8KMQ//FjkT/xZBI/8WSTP/GlE//xpZT/8aYV//Gmlr/x5xe/8ee + Yf/Hn2X/x6Fo/8ija//p2sT/2sSg/8use//bxqX/4M2w/+TVvv/cyar/3Mqs/9zLrv/dzK//3c2w/93N + sf/WyrD/G3xU/2mwkP/Q7t//w+nV/7jkzv+35M3/tuTM/7Xjy/+048v/s+PK/7Liyf+x4sj/sOHI/6/h + x/+u4Mb/reDF/6zgxf+q38T/qt/D/6jewv+n3sL/pt7B/6XdwP+k3cD/o9y//6Lcvv+h3L3/oty+/8fq + 2P+JxKn/G3xU/6ewjP/XwJz/17+a/9a+mP/WvZX/1ruT/9W6kP/XvJT/1rqP/9S1iP/UtIT/2r+W//Pr + 3v/Xtoj/0qx4/9Gqc//QqXD/0Kds/9Ckaf/PomT/zaBj/8qeY//Im2P/yJ1q/86rgf/HoXb/vZNk/7KF + VP+meEj/nnRG/5ZuQ/+OaUH/iGZD/4dpSf9sTSv/Y0Yn/1k/JP9QOCAN////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wBlRyhzim9U/3xaNP+FXzX/j2Y6/5puPv+kdUL/tohX/+DMtf/LpXr/uYVF/7yHRP/AikP/w4xD/8WP + RP/FkUn/xZNN/8aVUf/Gl1X/xplY/8ebXP/HnV//x59j/8egZv/Iomn/yKRs/97Kqv/l1bz/yah1/9G2 + jP/h0Lf/4tK5/9zLrP/czK//3cyw/93Nsf/dzbL/3c6z/9bMsP8bfFT/abCQ/8zs3P/T7+H/0+/h/9Pv + 4f/S7+D/0u7g/9Hu4P/R7t//0O7f/9Du3//P7t//z+3e/8/t3v/O7d7/zu3d/83t3f/N7d3/zOzc/8zs + 3P/L7Nz/y+zb/8vs2//K7Nv/yuvb/8nr2v/J69r/x+rY/4nEqf8bfFT/qLGN/9fBnv/XwJz/17+a/9a+ + l//WvJT/1buS/9a7kv/XvJP/1LaJ/9S0hv/l0rb/7d/L/9KvfP/SrXj/0at1/9Cpcf/Qp27/0KRq/8+i + Zf/NoGP/y55j/8icY//FmGH/xZtq/8upf//Dm3D/tYlZ/6Z4R/+ec0T/lWxB/49qQ/+LaUb/g2JC/25P + Lf9iRif/WT8j/k83HwH///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AGRGKGeIbVD/e1cz/4VfNf+PZjr/mm4+/6V2 + Q/+vfUb/x6N6/+LNtP/ClFz/vYhE/8CKQ//DjUP/xY9F/8WRSv/Fk07/xpZS/8aYVv/Gmln/x5xd/8ee + Yf/Hn2T/x6Fo/8ija//IpG7/1LmQ/+3j0v/LrHz/yat7/9jCn//byar/3Myv/9zMr//WwqH/1MCe/9jH + qP/czbL/1cuw/xt8VP9LnHr/jsit/47Irf+OyK3/jsit/47Irf+OyK3/jsit/47Irf+OyK3/jsit/47I + rf+OyK3/jsit/47Irf+OyK3/jsit/47Irf+OyK3/jsit/47Irf+OyK3/jsit/47Irf+OyK3/jsit/47I + rf+OyK3/YauL/xt8VP+osY7/18Kg/9fBnv/XwJv/176Z/9a9lv/VvJP/1bqQ/9e9lP/VuIz/1LWH/+/k + 1P/iy6v/0q99/9Ktev/Rq3X/0aly/9Cnbv/QpWv/z6Nn/82hY//LnmP/yJxj/8WZYv/ClmH/xJxu/8im + gP+7kWX/pnlH/51xQ/+WbkP/lXNN/45tS/+BY0L/d1s8/2JFJ/9YPiPz////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8AY0YnW4ZrT/96VzL/hV41/49mOv+abj7/pXZD/699Rv+zgEf/1LaS/+LLsP/Fllv/wYtD/8SN + Q//Fj0b/xZJK/8WUT//GllP/xphX/8aaW//HnF7/x55i/8egZv/Iomn/yKVu/8ilcP/Kqnj/7ePS/9S7 + lP/MsYP/1sGf/8qxhP/byaz/1cGf/9C6lf/OuZP/yrSM/8q1jv/ItY//L4Nb/xt8VP8bfFT/G3xU/xt8 + VP8bfFT/G3xU/xt8VP8bfFT/G3xU/xt8VP8bfFT/G3xU/xt8VP8bfFT/G3xU/xt8VP8bfFT/G3xU/xt8 + VP8bfFT/G3xU/xt8VP8bfFT/G3xU/xt8VP8bfFT/G3xU/xt8VP8bfFT/IX5X/7u6mP/YxKL/18Kg/9fB + nP/Xv5r/1r6Y/9a8lf/Vu5L/17yT/9a7kP/bwpz/8+ve/9e4jf/SsH//0q57/9Gsd//RqnP/0Kdv/9Cl + a//Po2f/zqFk/8ufY//JnGP/xpli/8OXYf+/lGH/xaF3/8Ohev+pfk7/nXFC/5x2Tf+ZdlL/kHBP/4Nl + Rf96XkD/YkUn/1c9I+X///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wBiRSdPgmdL/3lWMP+EXjX/j2Y5/5pu + Pv+ldkP/r31G/7OARv+3g0f/1reR/+PMr//ImVn/xY5D/8WQR//Fkkv/xpRP/8aXVP/GmVj/x5tc/8ed + YP/Hn2P/x6Fn/8ija//IpG7/yKZy/8iodf/l17//3syv/8+3jf/Uv5v/zLKH/9vKrP/ez7T/3s+2/97Q + t//Xxqj/y7eQ/8y4kf+6soz/laZ//5angP+Xp4L/oLSV/5eogv+XqIL/l6mD/56zk/+iuJr/oLSW/5yv + jf+iuZz/ormc/6G3mP+fs5P/orea/6G3mv+it5r/obeZ/6G2mP+gtZf/oLSW/6C0lf+fs5X/nrKU/56y + k/+esZH/nbCQ/52wj/+3uZn/2cam/9XBnv/Qt47/0LeO/9fAm//Xv5j/1r2W/9W8k//Wu5L/17uR/+XT + uf/s38v/07KC/9Owf//Srnz/0ax3/9GrdP/QqHD/0KZr/8+jZ//OoWT/y59j/8mcY//GmWL/w5dh/8CU + Yf+9lGP/xKF7/7eSav+lfVL/oHtV/5l2Uv+Ob03/g2RE/3ldP/9hRSf/Vj0i2P///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AGFEJjp5XT7/d1Uw/4NdNf+OZTn/mm0+/6R1Qv+vfUb/s4BG/7aDRf+7hkb/2bmR/+TN + rv/Mm1n/xZBI/8WSTP/GlVD/xpdV/8aZWf/Hm13/x55h/8efZf/Iomn/yKNs/8ilcP/Ip3P/yal2/9vH + pv/p3cn/0ryV/9K8l//dzbH/3s+1/97Qt//e0bj/39K6/9/Su//Uw6L/zrmT/9C+mv/PvJf/0LyX/9C9 + mP/g07r/0b6a/9LAm//czrL/4te//+LVvv/WxKP/3tC1/+PWv//j1r//4ta+/+LVvv/h1b3/4dS8/93P + s//ez7T/39K6/97SuP/e0bf/3dC2/9zPtP/czrP/2syx/9rLr//Zyq3/2cmr/9nIqv/Zx6f/0LiR/8mu + gP/Ns4f/18Gd/9fAmv/WvZf/1byU/9W7kf/XvZT/8OXV/+LMrf/Ts4T/07GA/9KvfP/RrXj/0at0/9Cp + cf/Qpmz/z6Ro/8+iZP/Mn2P/yZxj/8aZYv/Dl2H/wJRh/7ySYf+8lWj/v515/6yIYf+fe1X/lnVQ/41t + S/+CY0T/dlo8/19DJv9VPCLC////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AX0MmE25QL/92VC//gl00/45l + Of+ZbT7/pHVC/699Rv+zgEb/toNF/7qGRP+/iUb/27qQ/+bOrf/MnV7/xZNN/8aVUf/Gl1X/xppa/8ec + Xv/HnmL/x6Bm/8iiav/IpG7/yKZx/8iodf/Jqnj/zrOH/+3k1f/byav/z7iQ/9vLrv/e0Lf/3tG5/9/S + uv/g07v/4NS8/+DTu//Xxqf/0L2Y/9C9mP/Rvpn/0r+a/9zNsP/UwZ7/3tG2/+PYwv/j1r7/18ak/9vM + rv/j2MH/5NjB/+PYwf/j18D/4te//+LWv//g0rn/0sCb/9K/m//TwJ7/1sOi/9fHpv/TwZ//0b6b/9PB + n//ay6//2syx/9rLr//Zya3/2cir/9nHqP/TvZn/yq+C/9O9mP/XwZ7/18Cb/9e/mP/VvJX/1buS/+DL + rP/y6d3/17qP/9OzhP/TsYD/0q99/9Gtef/Rq3X/0alx/9CmbP/PpGj/z6Jk/8yfY//KnGP/xpli/8OX + Yf/AlGH/vJJh/7iNX/+4lW7/tZVz/557Vf+VdFD/i2tJ/4BjQ/9yVzn/XUIl/1M6IZv///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8AaUoq63VTL/+AWzT/jGQ4/5hsPf+jdEL/r31H/7J/Rv+2g0X/uoZE/76I + RP/DjEX/3byQ/+bPr//MoGL/xpZS/8aYVv/Gmlr/x5xf/8efY//HoWf/yKNr/8ilb//Ip3L/yal2/8mr + ev/JrH3/5trE/+baxf/MtYz/1cOi/9/Ruf/f0rr/4NO8/+HUvf/h1b7/4ta//+LXwP/h1Lz/08Gc/9LA + m//TwJz/1cOh/93Psv/k2cT/5dnD/9nIqf/h1Lv/5NnD/+Taw//k2cL/5NnC/+TYwv/k2MH/49fB/+LW + vv/Vwp//08Gc/9PAm//Sv5r/0b6Z/9C9mP/PvJb/0b2Z/9vLr//bzbL/2syx/9nKr//Zyaz/2Meo/8+4 + kf/Ms4j/18Oi/9fCn//XwJ3/17+Z/9W9lv/Vu5P/7eDN/+nYwv/UtYn/07SF/9Oygv/SsH3/0a15/9Gr + dv/RqXL/0KZt/8+kaf/PomT/zJ9j/8qcY//GmWL/w5dh/7+UYf+8kWH/t41f/7CIXf+0lXL/pYRf/5Nx + Tf+JaUj/f2ND/25SNf9bQCT/UTkgc////wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wBnSSnEc1Eu/39a + M/+LYzj/l2s9/6JzQf+tfEb/sn9G/7aCRf+6hUT/vohE/8KLQ//Gj0b/3b6T/+bRs//TrXj/xphW/8aa + W//HnV//x59k/8ehaP/Io2z/yKVw/8indP/JqXf/yat7/8mtfv/byav/7+fa/8q0iv/OuZP/39K7/+DU + vP/h1L3/4dW+/+LWwP/j18H/49jB/+TYw//g07r/49a//+PXv//dz7L/49a//+bbxf/g07j/3tC0/+bb + xf/m28X/5trE/+baxP/l2sT/5drD/+TZwv/k2cL/49jB/9vLrf/Uwp7/1cOg/9jIp//SwJz/0sCc/9jI + qf/e0Lb/3tC1/9zOs//bzbH/2suw/9bGp//Mt5D/yrKI/9O+mf/YxKP/18Og/9fBnf/Xv5v/1r2X/9rF + ov/z6+D/3MSg/9S2if/TtIb/07KC/9Owfv/RrXn/0at2/9Gpcv/Qpm3/z6Rp/8+iZP/Mn2P/ypxj/8aZ + Yv/Dl2H/v5Rh/7yRYf+3jF//roZa/62LZv+rjGv/knBN/4hpR/98X0D/ZUgq/1k/JP9PNx9M////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AGRHKJxxUC3/fVky/4lhN/+Vajz/oXNB/6x7Rv+yf0b/toJF/7qF + RP++iET/wotD/8WORP/FkUr/1rKB/+fTuP/bvpb/yJ5g/8edYP/Hn2X/yKJp/8ikbf/IpnH/yKh1/8mq + ef/JrHz/ya6A/9K8l//w6d3/1MGg/8q1jf/czrT/4NS+/+LWv//i1sD/49fB/+PYwv/k2cP/5drE/+Xa + xf/m28X/5tvG/+bcxv/n3Mb/59zH/+TYwP/n3Mb/59zH/+fcxv/n3Mf/5tzG/+bbxf/m28X/5drE/+Xa + w//l2cL/49e//9jHpP/g0rf/4ta+/+DUu//h1Lv/4NO6/9/SuP/e0Lf/3dC1/9zOs//bzLH/zbmU/8q0 + jP/QvJj/2Man/9jFpf/Xw6H/18Ge/9fAm//Wvpn/59nC/+zgzf/Xu5L/1LaK/9O0hv/TsoP/07B//9Gt + ef/Rq3b/0aly/9Cnbf/PpGn/z6Jk/8yfY//KnGP/xpli/8OXYf+/lGH/vJFh/7aLX/+thVr/pYFY/6yP + cP+WdVT/hmdH/3JTMv9iRSf/Vz0j/0w2HiT///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AYkUncW5O + LP96VzH/h2A2/5NpO/+fcUD/q3pF/7F/Rv+2gkX/uoVE/76IRP/Ci0P/xY5E/8WRSf/Fk07/zqRr/+TO + r//jza3/zahy/8egZf/Iomr/yKVv/8incv/JqXb/yat6/8mtfv/Jr4H/0ryX/+fcyP/g1L3/y7aP/9LA + nv/g07z/3c+1/9bFpf/Rv5r/2syt/+Xaxf/l28X/5tvG/+bcx//n3Mf/593H/+fdyP/n3cj/6N3I/+jd + yP/n3sj/597I/+fdyP/n3cj/593H/+fcxv/n3MX/5tvF/+bbxP/l2sP/5NnB/+TZwf/j18D/4dS6/+DT + uf/h1Lv/4NO6/9/RuP/d0Lb/3c+1/9rLr//NuJL/1cWm/9nJq//Yx6j/2MWm/9jEo//Xwp//18Cc/9jC + nv/x6dz/38us/9a7k//VuIz/07WH/9Ozg//TsH//0a16/9Grdv/RqXL/0Kdt/8+kaf/PomT/zJ9j/8mc + Y//GmWL/wpZh/7+UYv+7kGD/tYte/6yEWf+ifVT/pohn/5t+X/+BYkH/a0wr/19DJv9VPCL1SjQdA/// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wBeQyUya0wr/3hVMP+FXjX/kWc6/51wP/+peUT/sX5G/7WC + Rf+5hUX/vYhE/8GLQ//FjkT/xZFJ/8WTTv/GllP/yJ1f/93Dnf/n1br/1beL/8mjbP/IpW//yKdz/8mp + d//Jq3v/ya1//8qvg//UwJ3/2squ/+vj1P/MuZP/zbmT/867lf/QvJf/0b6Z/9LAm//YyKf/5tzH/+fc + x//n3cj/593I/+jeyf/o3sn/6N/K/+neyv/p38r/6N/K/+neyf/p3sr/6d7J/+jeyf/o3sj/593I/+fc + x//n3Mb/5tvF/+bbxP/l2sP/5NnC/+TYwf/k18D/49e+/+LVvP/h1Lv/4NO5/97Rt//dz7X/3M6z/9rL + r//ay6//2cmt/9jIqf/Yxqb/2MSk/9fDoP/XwZ3/49O6/+/m1//VvJP/1ruS/9W4jf/TtYf/07OD/9Ox + f//RrXr/0at2/9Gpcv/Qp23/z6Rp/8+iZP/Mn2P/yZxj/8WZYf/ClmH/vpNi/7uPYP+zil7/qoNZ/6F8 + VP+dfVv/n4Vo/4BhQP9qTSz/XUIl/1I6ILr///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AFtA + JAJoSinudVMv/4JcNP+OZTn/m24+/6d3Q/+wfkb/tIFF/7mERf+9iET/wYtD/8WOQ//FkUj/xZNO/8aW + U//GmVj/x5td/9W2h//m1bz/3sel/8qpdf/Ip3T/yap4/8msfP/JroD/yrGF/9bDo//OupX/6+PU/9jI + qv/OupT/z7yW/9G+mf/Sv5v/08Gd/9zNr//n3cj/6N3J/+jeyv/p38r/6N/K/+nfy//p38v/6eDL/+ng + zP/q4Mv/6uDM/+ngy//p38v/6d/L/+nfyv/p38n/6N7J/+jeyP/n3cf/59zG/+bcxf/l2sT/5drC/+TY + wf/j18D/49a+/+HUvP/h1Lr/39K4/97Rtv/dz7T/282y/9rLsP/Zyq3/2Miq/9jHp//YxaT/18Oh/9fB + n//v5tf/5NO6/9W7k//WupL/1bmO/9O1iP/Ts4T/07F//9Guev/Rq3b/0aly/9Cnbf/PpGn/z6Jk/8uf + Y//JnGP/xZhh/8GWYf++k2L/uo9g/7KJXf+oglj/n3pT/5VzT/+eg2f/iW5Q/2ZIKf9aQCT/TzcfeP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AGRHKK9yUS//f1oz/4tjOP+YbD3/pHVC/699 + Rv+0gEb/uIRF/7yHRP/AikP/xY5D/8WQSP/Fk03/xpZT/8aZWP/Hm13/x55i/82qd//j0LP/5dS7/9W8 + lP/Jq3r/yax9/8mugf/MtYv/1sSj/8u2j//g1L3/5NnF/8+7lf/QvZj/0r+a/9PBnf/Uwp//5dnD/+je + yf/o3sr/6d/L/+nfzP/q4Mz/6uDN/+rhzP/q4M3/6+HN/+rhzf/q4c3/6uHN/+rhzP/q4Mz/6uDM/+rf + y//p38r/6d7J/+jeyP/o3cf/59zG/+fbxf/m28T/5dnC/+TYwP/j17//4ta9/+HUu//g0rn/39G3/93Q + tf/czrP/2syx/9nKrv/YyKv/2Meo/9jFpf/Xw6L/4M+z//Hq3v/Ywp3/1byT/9W6kP/Vuo7/07WI/9Oz + g//TsX//0a56/9Grdv/RqXH/0KZt/8+kaP/PoWP/y59j/8icY//FmGH/wZVh/72SYf+5jmD/sIhc/6aA + V/+ceFL/knBN/5Z6Xv+IblP/YkUn/1Y9Iv9MNR43////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8AYUQmbW5OLP97VzH/iGE3/5VqPP+hc0H/r31H/7OARv+3g0X/vIdE/8CKQ//EjUP/xZBI/8WT + Tf/GllL/xplY/8ebXf/HnmL/x6Fn/8mkbv/Xvpf/5te//+LRt//RuZD/yq+C/863kP/VwqH/yrWO/9XD + pP/t5df/1MGf/9G+mf/TwJz/1MKe/9bGo//i1Lr/5tvE/+nfy//p38z/6uHN/+vhzf/r4s//6+LO/+vi + zv/r4s7/6+LP/+vizv/r4s7/6+LO/+vhzf/q4c3/6uHM/+rgzP/p4Mv/6d/K/+jeyf/o3cf/593G/+bb + xf/m2sT/5dnC/+TYwP/j177/4dW8/+DUuv/f0rj/3tC2/93PtP/bzbH/2cuv/9jJrP/Yx6n/2MWm/9jD + ov/s4tH/59vG/9a+mP/VvJT/1bmQ/9W6jv/TtYj/07OD/9Oxf//RrXr/0at2/9Gpcf/Qpmz/z6Rn/86h + Y//LnmP/yJpi/8SYYv/AlWH/vJJh/7iOYP+uhlr/pH5V/5p3Uf+Pbkz/kXZa/4VsUf9eQyX/Uzoh8Ucy + HAP///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wBcQSQpbE4t/3tZNv+EXjX/kWc6/55x + QP+rekX/sn9G/7aDRf+7hkT/v4lD/8ONQ//FkEf/xZNM/8aWUv/GmFf/x5tc/8eeYv/HoWf/yKNs/8im + cf/MrX3/3Mmp/+fbxv/ezbL/07+b/9PBn//Lto//zbiS/+ngz//g1Lz/0r+b/9PBnf/Vw6D/2Mim/97P + sf/g0bX/4tW7/+bbxf/r4c7/6+LP/+ziz//s49D/7OPQ/+zj0P/s49D/7OPQ/+zj0P/s48//7OLP/+zi + zv/r4s3/6+HN/+vgzP/q4Mv/6d/K/+neyf/o3cj/593G/+bbxP/l2sP/5dnB/+TXwP/i1r3/4dW8/+DT + uf/f0bf/3c+0/9zNsv/azLD/2Mmt/9jIqv/Yxqf/4NC2//Lr3//bx6f/1r6Y/9W8lP/VuZD/1bmO/9O1 + iP/Ts4P/07F//9Gtev/Rq3X/0ahw/9CmbP/Po2f/zaFj/8ueY//HmmL/w5di/7+UYf+7kWH/tYxe/6uE + Wf+hfFT/lnRP/4xtSv+Lb1P/gmlQ/1tAJP9POB+x////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wBlRyjPdVQx/4BbM/+OZTn/m24+/6h4RP+xfkb/tYJF/7qFRP++iUT/w4xD/8WP + Rv/Fkkz/xpVR/8aYV//Hm1z/x55h/8egZ//Io2z/yKZx/8modv/Jq3v/z7aO/+HSuf/q4M//39O7/825 + k//NuZP/3M+z//Hr4f/o3sz/6+PT/+nfzf/g1Lr/4dS5/+rhzv/r4c//6+LP/+TZv//m2sD/7OTQ/+3k + 0f/t5NH/7eTR/+3k0f/t5NH/7eTR/+3k0f/t5ND/7OPQ/+zjz//r487/6+LN/+rhzP/q4Mv/6t/K/+ne + yP/o3cf/59zG/+bbxP/l2sL/5NjA/+PXvv/i1bz/4NO6/9/SuP/d0LX/3M6z/9vMsP/Zyq3/2Miq/9jG + qP/t5Nb/6NzJ/9bAnP/Wvpj/1byU/9W5kP/VuY7/07SH/9Ozg//TsH//0a15/9Grdf/QqHD/z6Zr/8+j + Zv/NoGP/ypxj/8aZYv/ClmL/vpNi/7uQYf+yiV3/qIJZ/555U/+Uck7/iWpJ/4lvU/98ZUv/Vj0i/0s1 + Hlj///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AGBEJnBuTiz/e1cx/4lh + N/+Xaz3/pHVC/699Rv+0gUX/uYRF/72IRP/Ci0P/xY9F/8WSS//GlVD/xphW/8abXP/HnmH/x6Bm/8ij + bP/IpnH/yah2/8mre//Jrn//yrCE/9vKrf/n3sz/5dvH/9vNsf/m28j/+PXw//j17//38+3/9/Tu//Xx + 6P/u59j/6uDM/+vi0P/s49H/5Ni9/9/QsP/i1LX/6NzE/+3k0f/u5tP/7uXT/+nexv/p3sX/6t/H/+vh + y//t5NH/7eTR/+3j0P/s48//7OLN/+vhzf/q4Mz/6d/K/+jeyP/o3cf/59zF/+baw//k2cL/49e//+LW + vf/h1Lv/39O4/97Qtf/dzrT/28yx/9nKrv/YyKv/4dO7//Lr3//byKn/1sCc/9a+mP/Vu5P/1bmQ/9W5 + jP/TtYj/07OC/9Kvfv/RrXn/0ap0/9Cob//PpWr/z6Jl/82gY//JnGP/xZli/8GWYf+9kmL/uY5g/7CH + XP+mgFf/mndR/5l8Xf+umoX/uqud/5uJd/9WPibyRjEcCf///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8AWkAkFmhKKvx2VC//hF41/5JoO/+gckD/rXtG/7OARv+3g0X/vIdE/8GL + Q//FjkP/xZFK/8aUT//Gl1X/xppb/8edYP/HoGb/yKNr/8imcP/JqHb/yat7/8mugP/KsIT/08Cc/9G/ + nf/ay67/7+jc//bz7P/6+fX//fz6//z7+P/8+/n//Pr4//n38f/u5tb/6+LO/+3k0v/k2Lz/4dKy/+HT + tP/i1LX/6uDJ/+/m1P/v5tT/7uXR/+bZvv/k1rj/5de5/+7l0v/t5dL/7eTR/+3k0P/s48//7OLO/+vh + zP/q4Mv/6d/J/+jeyP/n3cb/59vE/+XZwv/k2MD/4te9/+LVvP/g07n/3tG2/93PtP/bzLH/2squ/9jJ + rP/u59n/59vI/9bCn//WwJz/1r6Y/9W7k//VuZD/1LeM/9S1h//TsoL/0q99/9GseP/RqnP/0Kdu/8+k + af/PomT/y59j/8icY//EmGL/wJVh/72RYv+2jF//rIRa/6J8VP+kh2f/zcCy/+DZ0v/n497/3tnU/8fA + uNb///8G////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AZEgptXFQ + Lf9/WjP/jGQ4/5puPv+oeET/sX5G/7aCRf+7hkT/v4pD/8SNQ//FkEj/xZRO/8aXVP/Gmlr/x51f/8eg + Zf/Io2v/yKZw/8modf/Jq3v/ya6A/8qwhf/UwZ//z7yY/824kv/k2cP/9fDo//z6+P/+/v3//v7+//39 + /P/8+/n/+vn1//by6v/s49L/7uXT/+LUtf/i07T/49S1/+PWt//o3MP/8OfW/+7l0f/v6NX/7+fV/+fb + v//l2Lv/7ePO/+3k0P/u5dL/7uXR/+3k0P/s48//6+LO/+vhzP/q4Mv/6d7J/+jdx//n3MX/5trD/+TY + wf/j177/4tW8/+DTuf/f0bf/3c+0/9vNsf/ayq//4tbB//Hq3//byKr/1sKf/9bAnP/Wvpj/1buT/9W5 + j//Utov/1LWH/9Oxgf/Rrnz/0ax3/9Gpcv/Qp23/z6Ro/86hY//LnmP/x5pi/8OXYv+/lGL/u5Bh/7OK + Xv+ogVj/nXpT/7+sl//i29P/8e7r//f29f/w7uz/8/Hw1////1f///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wBcQSRQaksq/3lWMP+HYDb/lWo8/6N0Qv+vfUb/tIFF/7mF + Rf++iET/w4xD/8WQRv/Fk0z/xpZT/8aZWP/HnF7/x59k/8iiav/IpXD/yKh1/8mrev/JroD/yrCF/9XC + of/Pu5f/zbmS/+HVvv/w6t//+PXw//38+//+/v3//f38//z7+f/59vH/9fDm/+3l1P/u5tT/49W2/+PV + tv/k1rf/5de5/+bZvP/q38X/7uXQ//Dp1//x6df/7ePM/+fbvv/q4Mf/7eTO/+/m0//u5tP/7uXR/+3k + 0P/s48//6+LN/+rhy//q4Mr/6d7I/+fcxv/m28T/5dnC/+PXv//i1r3/4NS6/9/RuP/dz7X/282x/9vL + sf/u6Nz/5tvH/9fEpP/Wwp//1sCb/9a9l//Vu5P/1LiO/9S2iv/UtIb/07GA/9Gue//Rq3b/0ahx/9Cm + bP/Po2b/zaBj/8qdZP/GmWL/wpZi/72SYv+6j2H/r4Zb/6V/V/+ad1L/x7em/+fh2//29fP//fz8//f2 + 9f3+/v7V////hP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AFU8 + IgJoSi7ac1Iw/4BbNP+PZjn/nXA//6x6Rf+yf0b/t4NF/7yHRP/Bi0P/xY9E/8WSS//GlVH/xphX/8eb + Xf/Hn2P/yKJp/8ilbv/IqHT/yat6/8muf//LsYX/1cOi/825lP/NuZP/2cqs/+ri0f/z7uX/+fbx//z8 + +v/7+fb/+vj0//j28P/z7uL/8evc/+/n1v/n28H/5Na4/+XYuf/m2bv/8OjV//Do1v/w6NX/8enY//Hp + 2P/x6df/7eLL/+vfxf/v59T/8OjV/+/m0//u5tP/7uXR/+3k0P/s487/6+DL/+rgy//p38n/6N3H/+bb + xf/l2sL/5Ni//+LWvf/g1Lr/39K4/93Ptf/bzbL/5drF//Dp3v/ayav/18Sk/9bCn//Wv5v/1r2X/9W6 + kv/UuI7/07WJ/9S0hf/TsX//0a16/9Grdf/QqG//z6Vq/8+iZf/Nn2P/yJxj/8SZY//AlWH/vZFi/7WM + X/+qhFn/oHtU/5RzTv+7qpj/4NnS//Lw7f/29fT/+Pf28v///8n///9z////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AFxBJVxuUDD/elYx/4hhN/+XbD3/pnZD/7B+ + Rv+1gkX/uoZE/7+KQ//EjUP/xZFJ/8WUT//Gl1X/xptb/8eeYf/HoWf/yKRt/8inc//Jqnn/ya1+/8yy + iP/Vw6L/zLiS/825k//QvJf/3c6z/+ngz//w6t3/9/Tu//j07v/w6dv/7OTR/+rhzf/18OX/9vHn//Dp + 2P/p3sT/5tm8/+fbvv/y6tn/8erZ//Lr2v/y69n/8urZ//Lq2P/v59P/8erX//Hp1//w6Nb/7+fU/+/m + 0v/t5M//7eXR/+3jz//s483/6+HL/+nfyv/o3sf/59zF/+Xaw//k2MD/49a9/+HUu//f0rj/3s+1/9zP + tP/w6d3/5NnG/9jGp//XxKP/1sKf/9a/m//VvZb/1bqR/9S4jf/TtYj/1LSE/9Kvfv/RrHj/0apz/9Cn + bv/PpGj/zqFk/8ueY//Hm2P/wpZi/7+TYv+7kGL/sYhd/6aBWP+bd1L/kHBN/5mAZv/IvbH/4NvW/+Lf + 2/r9/f3I////nP///yz///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8AVTwiA2hLLuN1VDH/gVw0/5BmOv+fcUD/rXxG/7OARv+4hEX/vYhE/8KMQ//Fj0b/xZNN/8aW + U//Gmlr/x51g/8egZv/Io2z/yKdy/8mqeP/JrX7/zLOI/9XDov/LtpD/zbmT/9C8l//Sv5v/1sSi/+DS + t//n3Mj/9O/l/+TYvv/f0K//4dKy/+LVtv/p3cP/7+bS//Ls3f/y69r/7ubR//Lr2v/z7Nv/8uvb//Ls + 2v/z7Nr/8uvZ/+rgw//w6NT/8urY//Hq1//w6db/7+fU/+/n0//u5dL/7eTQ/+zjzv/r4cz/6uDK/+je + yP/n3cb/5trD/+TYwf/j1r3/4dS6/9/SuP/ez7T/6N/N/+/p3P/Zyq7/2Man/9fEov/WwZ7/1r+Z/9W8 + lf/VuZH/1LeM/9O0h//UsoL/0a58/9Gsd//RqXH/0KZs/8+jZ//NoGP/yZ1k/8WZYv/BlmL/vZNi/7eN + YP+shVv/oXxV/5Z0UP+Ka0r/gWVJ/5uJdv+rn5L/ysS+vP///3b///83////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AW0ElZmtMLP95VjH/iGE3/5ds + Pf+mdkP/sX5G/7aCRf+7hkT/wIpD/8WORP/Fkkr/xpVR/8aYV//HnF7/x59k/8iiav/IpnD/yal3/8ms + fP/Msob/1cKh/8u2kP/NuJL/z7yW/9K/m//Uwp//18Wi/9nJpv/q4Mz/7OTS/9/QsP/h07P/49W2/+XX + uf/m2bv/6NzA/+3jzP/x6tf/9vDk//j06v/28eT/9e3f//Ps2//z7Nv/8ejT//Lq1//y69n/8urY//Hp + 1//x6Nb/7+jU/+/m0v/u5dH/7eTP/+vizf/q4Mv/6d/I/+jcxv/m28P/5NjB/+PXvv/h1Lr/39K4/+LV + vv/x7OL/4dW+/9jIq//Xxab/18Oi/9bBnf/Wvpn/1buU/9S5jv/Utor/07OF/9Sygf/Rrnr/0at2/9Co + b//QpWv/z6Jk/8yfY//Hm2P/w5hj/8CVY/+7kGL/sope/6aBWP+beFP/kHBN/4ZpSv+QemL/d2FL/084 + IepBLRkK////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wBSOiEFZkot3XFQLf+AWzT/j2Y6/55xQP+tfEb/s4BG/7mERf++iET/w4xD/8WQ + R//FlE7/xpdV/8abW//HnmL/x6Fo/8ilb//IqHX/yat7/8uxhf/Vwp//y7eQ/8y4kv/PvJb/0r+b/9TC + n//XxqP/2cmn/9/Qsf/x6dv/5trB/+LUtP/k1rf/5di7/+jbv//o3L//6t7B/+vfwv/t4sj/8enW//jz + 6P/59u3/+PTr//fy5//28OH/8uvX//Hp1f/y69r/8uvY//Hq1//w6NX/7+fU/+7m0v/t5ND/7OPO/+vg + y//p38n/6N3G/+bbxP/k2cD/49e+/+HUuv/f0rn/7ufa/+ri0v/Zyq3/2Mep/9fFpf/XwqD/1sCc/9a9 + l//Vu5L/1LiO/9O1iP/Ts4P/07CA/9GseP/RqXL/0Kdu/8+jZ//OoGT/yp1k/8WaY//ClmP/vZNi/7iO + Yf+shVv/oX1W/5V0T/+Qc1T/loFp/4FrVP9WPST/RjEbbP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wBYPiNCaEop/3dV + MP+GYDb/lms8/6V2Q/+wfkb/toJF/7uGRP/AikP/xY5E/8iXU//Gl1P/xplY/8edX//HoGb/yKRs/8in + c//Jqnn/y7GD/9XBnv/Lto7/zLeR/8+7lv/Sv5r/1MKe/9fGo//ayaf/3Myr/+jeyP/w6dn/5NW2/+XX + uf/m2bv/6Nu+/+ndwP/r38L/7ODE/+3ixv/t48f/7uPJ//Tt2v/38uX/+PPp//n17P/59ev/9/Hl//fw + 4v/07d3/8urY//Hp1v/t5M3/7uXQ/+7l0P/s487/6+HM/+rfyf/n3cb/5trD/+TZwf/t5tb/8uzh//Hs + 4f/x6+D/3c+1/9jJrf/Yx6n/18Sk/9bCn//Wv5v/1byW/9W6kf/Ut4z/07SG/9Oxgf/Sr33/0at2/9Cp + cf/QpWv/z6Jm/8yfY//Im2T/xJhk/8CUY/+7kWL/sYld/6aBWP+efVr/noJl/52Hb/+EbFT/WkAm/0o0 + Hcw+KxgC////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wBiRyurbk4s/31ZMv+MZDj/nG8//6x6Rf+zgEb/uIRF/76I + RP/DjEP/1Kx3/9Swff/Gl1X/x5tc/8efY//Iomr/yKZw/8mpd//KroH/1cCd/8y1jv/LtpD/zrqV/9G+ + mf/Uwp7/18Wi/9nJp//czKv/39Cx//Dp2v/r4cv/5di5/+favP/p3L//6t7C/+zgxP/t4sb/7uPI/+/k + yf/v5cr/8OXL//Tt2f/279//9u/e//bx4v/38uX/+PPo//j06v/48+j/9fDj//Lr2//x6dj/7+bU/+3j + zv/r4cz/6t/J/+jdxv/m2sP/8Ord//j18P/7+fb//Pv6//Tw6P/azLD/2Mms/9fGp//XxKL/1sGe/9a+ + mf/Vu5T/1LmO/9S2iv/Ts4T/07F//9Kue//Rq3T/0Kdu/9CkaP/OoGT/yp1k/8WZY//ClmP/vZJj/7aN + Yf+ykGn/sJN0/62Uef+dhGr/fmRI/1xBJf9POB/9Qi4aNf///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AFM7 + IRlrTzH1fmA+/4NdNf+SaDv/onNB/7B9Rv+1gkX/vo5Q/8aVVP/TqnL/38Ob/8iZV//GmVn/x51g/8eh + Z//IpG7/yKh0/8qtfv/Uv5v/zLWM/8q1jv/NuZP/0b2Y/9PBnf/WxaL/2cim/9zMq//ez6//6+DL//Xw + 5P/q4Mn/6Nu+/+ndwP/r4MP/7eLG/+7jyP/v5cr/8ObL//HnzP/x583/8unR//bw4P/28N//9u/f//Xu + 3f/17tz/9O7c//Xu3//17+H/9e/j//Tu4f/z7d7/9O7h//Hq2//v5tX/6+LO/+jdyP/18Oj/+/r3//7+ + /f/9/fz/9/Tv/9/TvP/YyKr/18Wm/9fCoP/WwJz/1r2X/9W6kv/UuI3/07SH/9Oygv/Sr3z/0qx4/9Cp + cf/Qpmv/z6Jl/8ufZP/Hm2X/xZtq/8Scb//Dn3j/waOC/7mcf/+nimv/kHNT/3teQP9iRSf/Uzsh/0Yx + HJX///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AFg/JGmNd17/oIdt/5BrQ/+YbD3/p3hF/7mM + WP/XuZf/yZ1m/8iYV//cvJD/1K99/8aXVf/Hm1z/x59j/8iiav/IpnH/yqx7/9S+mf/MtIr/yrSM/8y4 + kv/QvJf/08Cc/9bEof/ZyKX/3Muq/97QsP/t5NH/9/Lp//bx5//s4sn/6t7C/+zhxf/u48f/7+XK//Dm + y//x583/8ujO//Lpz//z6c//8+vU//fx4P/38OD/9vDe//Xu3v/17tz/8+za//Dn0f/r4MX/6Ny+/+zi + zP/t5ND/7+fX/+/o2P/w6dr/8OjZ//j28P/9/Pr//v7+//38+//59vL/5t3L/97Ptf/byq3/2cem/9jC + nv/Xv5r/172W/9e6kf/WuY3/1raI/9Szg//Vs4H/1K97/9awfP/WsoD/1bOG/9S1jf/RsY3/za6L/8Ki + gP+xj2v/nntX/49vTf92VjT/a1Ay/1xDKv9KNB3hPSoYD////wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AGdOM6WhjXf/sJuE/6KBXf+7nHr/soVU/9Cxjf/LpXb/v4lE/8SORP/SqnL/17SD/8me + Yf/HnV//x6Bm/8ikbv/JqXf/1LyW/8yyh//Ks4n/y7aQ/867lf/Sv5r/1cOf/9jHpP/by6n/3s6u/+fc + wv/v6NX/9fDj/+vgyP/r38L/7eHF/+7kyP/w5sv/8efN//Lpz//z6tD/9OvR//Tr0f/069H/8+vT//Xt + 1//17tv/9u/d//Ps2P/v5cv/7OHF/+rfwv/o3L//5tm7/+XZu//l2Lr/6N3G/+fcxf/m28T/8uzh//z7 + +P/8+/n/+vj1//Xx6f/k2sf/49fC/+TXwf/k1b3/5NO6/+PRtv/iz7L/4c2u/+HKqf/gyKX/38Wf/97E + nP/ev5X/27mK/9Sxgv/PqXn/x6Bx/8GYav+3jWL/rIVc/598Vv+Tc1D/hWdH/29SMv9sVDv/Tzgi9UAt + GTD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8ATzgfBnRcQs6qloL/tqGL/8Gp + kP/KsJT/0reY/9a6mf/Op3f/x5ZX/97Alf/gxqD/3L6V/8ecXv/HnmL/yKJp/8incv/Uu5P/zLKH/9bD + ov/NupT/zbmT/9C9mP/UwZ3/18aj/9rKqP/dzq3/4NKy/+PVt//v59T/8uvb/+vgxP/t4sb/7+XK//Hn + zP/y6c//9OrR//Tr0v/17NP/9ezT//Xs0//17NP/9OvR//Pp0P/y6M7/8ObL/+7kyf/t4sb/69/C/+nc + v//m2bv/5Na4/+PUtv/i1bj/5tvD/+XZwv/v6dv/9fHq//Hs4f/v6Nz/4tfB/9jHqf/XxaT/1sKf/9fB + nP/Xv5n/17yU/9W5jv/UtYj/1LKC/9Ouev/Sq3X/0adw/9CjZv/MoGX/yJxl/8OYZP/AlWT/upFj/6+I + Xv+jf1f/l3ZS/4psTP9+Ykb/clpA/1U+J/5DLxpU////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8AUjohFXpjSOmum4f/uaSN/8Orkf/Mspb/1LiZ/9e6mP/Jn2n/3sGa/+DE + nv/hx6L/1bOC/8ecXf/Hn2X/yKNs/9K3jP/Os4f/3cyw/+PXwf/d0Lf/18eo/9LAnP/WxKD/2cim/9zM + q//f0LD/49S1/+bavv/z7d7/8enV/+3ix//w5cr/8ujO//Pq0P/17NP/9u3U//bu1f/27tb/9u7V//bt + 1P/17NP/9OvR//Lpz//x58z/7+TJ/+3ixv/r38L/6Ny//+bZu//p3sX/6d7I/+TYv//h07b/6d/L//Hr + 3//h1b3/3c+0/9rLr//Yyaz/18Wn/9fDov/WwJ3/1r2X/9W7kv/UuIv/07SG/9OxgP/Srnv/0at1/9Co + cP/RpWv/zaFm/8mdZf/FmWX/wJZk/7ySZP+ximD/pYBZ/5l4VP+Nbk3/gGVI/3FYPf9bRCz/RTAbgP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AVTwiLoFn + T/iynor/u6WO/8Opjv/PtJj/1LeX/9a4lf/cv5v/38Kb/+DFnv/hxqL/y6No/8edX//HoWf/0LCC/9Cz + iP/SupP/49W+/+PXwv/k2cT/49jC/+TYwf/n3Mf/6uDM/+zj0P/u5tT/7+bU//Dp1v/28eX/8OfQ//Dm + y//y6c//9OvS//bt1P/379b/9+/X//jw2P/48Nf/9+/W//bt1f/17NP/8+rQ//Hnzf/v5cr/7eLG/+vf + wv/o3L7/5tm8/+vizP/i1bf/3c6t/+HVuf/y7OD/5drE/97Qtf/czbH/2cqu/9jHqf/XxKT/1sGe/9a+ + mf/Vu5P/1bmN/9S1iP/TsoL/0q99/9Krdv/QqHD/0aZs/86jZ//Knmb/xptl/8GWZP+9k2T/tItg/6iC + W/+celb/j3BP/4RnSv90WkD/WUAn/0gzHaw5KBYB////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8AVj0iUIhwV/6vm4X/uKGI/8aulP/QtZj/1rqa/9m8 + mv/cwJv/4MKb/+DFn//dwJf/yaBi/8eeYf/OrHn/0bWI/8mqeP/YxKL/49a//+PXwv/k2cX/5tzI/+je + yv/q4M3/7OPQ/+3l0//w6Nb/8erY//bx5f/38ub/8efO//Lpz//17NP/9u7W//jw2P/58dn/+fLa//nx + 2f/48Nj/9+/W//Xt1P/z6tH/8efN/+/kyf/t4cX/6t7B/+favf/m2r3/6+DL/+DRsf/g0bP/7+fZ/+rg + zv/f0bf/3c6z/9rLr//YyKv/18Wl/9bCoP/Wv5v/1byV/9W5kP/Utor/07OE/9Kvfv/SrXj/0alx/9Cm + bP/Qo2j/y59n/8abZf/DmGX/vpRl/7WNYv+qhFz/nXpW/5JyUf+EaEr/dlxB/1lAJf9IMxzQOikXC/// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8AVz0je5B6Yv+0oIz/vaeQ/8ivlf/Rtpr/1rqb/9m9m//dwJv/4MOb/+DFn//ewpv/yqJn/8ul + bf/TtYj/yKZy/8mqev/XxKP/4tW//+LXwv/k2cX/5tzH/+jeyv/q4c7/7OTR/+7l0//w6Nf/8urZ//j0 + 6v/48+f/8+vT//Xs0//379f/+fHZ//rz2//689z/+vPb//ry3f/48t7/9+/Y//Pq0f/x583/7uTI/+zg + xP/p3cD/5tm7/+XYu//p38j/39Cx/+zj0f/o3sv/39K3/93Qtf/bzLD/2cms/9jGpv/Xw6H/1sCc/9a9 + lv/VupD/1beL/9S0hf/TsX//0q56/9Kqc//Qp23/0KRn/82iaf/HnGf/w5hm/76UZf+2jmP/q4Vc/558 + V/+Sc1H/hWlL/3heRP9aQif/STMd6jspFx////8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AWEAkp5eCa/+sl4D/vqiQ/8iv + lf/Rt5r/1rqb/9m9mv/dwJr/4MKa/+DEnv/fw53/zKVs/9OzhP/Kpm7/yKdy/8mrev/RupT/4NK6/+LX + wf/k2sT/59zH/+nfy//r4c7/7OTR/+/m1P/x6df/8+3c//r27f/49Oj/9u7W//fv1//68tv/+/Td//z1 + 3v/79N3/+/Xi//r15v/38Nz/8+nQ//Dmy//t4sb/6t7C/+favf/k1rj/4dKz/+XYvv/p38v/6uHO/9XE + ov/Uw6L/282x/9nJrP/Yx6j/18Oi/9bBnP/Wvpf/1bqS/9W4jP/UtIb/07GA/9Kuev/SqnT/0adt/9Ck + aP/MoGf/yZ5q/8OYZ/++lWb/uI9k/6uFXf+ffFj/knNR/4ZpS/95X0b/W0Mp/0kzHfk7KRc8////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wBFMBsJWkEpupyJdP+ynon/vaiQ/8evlf/QtZn/1rqa/9m8mv/cv5n/38GZ/9i2 + hv/HmVj/0rB//82ocv/Io2v/yKdz/8mre//Msof/08Cd/9rLrv/k2cT/5tzH/+jeyv/q4c7/7eTR/+/m + 1P/x6dj/9e/h//r37v/59Ob/9/Db//ry2//89t///ffg//z13//689z/+PDa//Xs1f/x583/7uPI/+vh + xP/q3sL/5de5/+LTtP/ez6//5trD/+zj0//ZyKf/08Cc/9PCoP/Zya7/2Meo/9jEo//XwZ7/1r6X/9W7 + kv/VuIz/1LWG/9OxgP/Srnr/0qt0/9Gnbv/QpGj/zKBn/8meaP/Em2r/v5Vn/7ePZP+rhl7/nnxX/5Nz + Uv+Gakz/eWBF/1xELP9HMhz5OigWWf///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wBDLxoDXEculZuI + dP+vmoX/sZl+/8WulP/EpIH/zq6K/9i7mf/bvpj/38CY/9u7jf/Ur3r/4Mim/9i7kf/RsoT/1LmQ/8qs + fP/Kr4L/zLaP/9fGqP/i1r//5tvG/+jeyf/q4M3/7OPQ/+/m0//x6df/9vHl//r27f/58+X/+vTi//z2 + 4f/++OL/+/Xe//jw2P/17NP/8ujO/+7kyf/r4MT/6Ny//+jcwP/o3MT/3s+v/+baw//s49L/28yt/9K/ + mv/OupX/1cSl/9jHqP/YxKP/18Gd/9a9mP/Vu5H/1biM/9S0hv/UsYD/0656/9GrdP/RqG7/0KRp/8yg + aP/HnWf/xZxs/7+Waf+1jmP/qYZe/558WP+Rc1L/hGlL/3dfRf9cRSz/RjEb6DgnFjr///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8AV0EqZox4Yvueh2//uaSN/8Orkv/BoH3/toZS/8GV + X//VtIn/3sCW/97AmP/XtYb/3sWf/97Gov/fyaj/2MCZ/8qrev/JroD/yrKI/824k//bzLH/5drE/+fd + x//p38v/6+LO/+7l0v/w6NX/9vHl//n16//48eP/+PHe//bu1f/17dT/8+rQ//DmzP/t4sf/6t7C/+fa + vf/k1rj/4dKy/97Orf/l2cH/6+LR/9rLrP/RvZj/zrmT/8y4kv/Yxqf/18Si/9fAnf/WvZb/1bqR/9S3 + i//UtIb/07GA/9Ouev/SqnT/0adt/8+kaf/LoGn/xpxp/8Oaaf/BmG3/tI1k/6iEXf+ce1j/j3FR/4No + S/92XkX/YEoz/0MvGs41JRUd////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8ATDYePXpkTe6smob/t6KN/8Cpkf/FqYz/tIZS/7WCRv/Cklb/z6Zv/9q3if/SrXb/3sSe/9/G + ov/fyKf/28Of/86xg//JrH3/yrCF/8q0jf/SwJ3/4NO7/+XaxP/n3cf/6d/L/+zizv/t5dL/9O7h//fy + 5//x6db/7eHF/+3hxf/r4MP/6d3A/+favP/k17j/4tO0/9/Pr//czKr/5Ni+/+nhzv/Yyan/08Ge/9TC + ov/QvJj/zreP/9fCoP/XwJr/1r2V/9W5kP/Ut4r/1LOF/9Owfv/TrXn/0qpz/9GnbP/Po2r/yqBp/8ac + af/BmGn/v5hu/7OOZ/+lgl3/mXlW/41vUf+BZkv/c1xE/11IM/9CLhuqMiMTCv///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8ARjEcIGpROtaikHv/s6CK/7ym + jv/ApYf/sIFP/7OARv+5hUX/yJld/9CjZv/Qp23/0apz/9W1hf/exqP/3sim/9a9lf/KrHz/ya6A/8qy + h//Pu5f/4NS8/+PXwP/l2cP/5tzG/+jeyf/p4Mr/7ebT/+7m1P/l2Lz/49W2/+LUtf/h07P/39Cw/93O + rf/by6n/2Mel/+HUuv/o3sv/1sWl/825kv/MuJH/zriQ/9C4kf/SuZH/1LuT/9W6kf/RsoP/1baI/9Sz + gv/Tr3z/06x2/9Kpcf/Spmz/zaJq/8meaf/Em2n/wJZp/7qTaP+xjmn/oYBc/5V3Vf+JblD/fGRK/29Z + Qv9VQSz+OyoXfS4gEgH///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8AQC0ZDFhBKrKTf2v/rpuH/7eii/+8o4f/rIFU/7B+Rv+4hkv/zqZ0/9St + ef/PoWT/yZta/9Sxf//bv5f/3cWh/9vCnf/Mrn3/yap5/8mugP/Qu5X/2cqt/9nKrv/g07r/49a//9/S + t//XxqP/49e//+jeyf/dza7/2cim/9jIpv/ayqr/18al/9PBnv/e0LX/5drG/9PAn//KtI3/yrKH/8mv + gf/JrHz/yah2/8ilcP/Iomr/x59k/8ieYf/RrHf/0655/9KrdP/SqG7/z6Rs/8uhbP/GnWv/wplq/76W + av+0jWX/q4lm/5+AX/+GZkT/gGVH/3dgRv9YQSn/QzAb9DUlFVH///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8ANycVAUk0 + HIR+alX+qJeE/7Gch/+5oon/rYtl/6p6Rv+/lGT/yKBv/9KugP/buo//3LyR/9y+lf/cwJj/3cKc/9zC + nf/OrXr/0LOG/9a+mP/Yw6H/28mr/93Nsv/dz7X/3tC3/9G+m//Pu5X/3c+0/+LVv//f0bj/6N/O/+3m + 2f/u59v/7+ne/+bcyf/RvJf/yrCD/8mtfv/Jqnn/yKh0/8ilb//Iomn/x59k/8ecXv/GmVj/yZta/9Co + bv/SqXD/0KZt/8yjbf/Jn2z/xJts/8CYa/+4kmj/rYhi/6WGY/+Ze1z/eFk3/2dLLP9hSDD/SzYf/zwq + F98vIBIu////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AD0rGDxmUz7XlYNw/6mWgv+znYb/tp2B/7ye + ff/TuZz/1rqb/9S1j//Xt43/2baI/9Std//RqnP/1LF+/9Crd//Rr37/28Oe/9vDoP/Yv5r/3Mem/9zI + qf/Uvpn/ya+B/8qwhP/KsYX/3c2x//Dp3f/07+b/9vLr//n28f/28uv/6+DO/82xg//IqHT/yKVw/8ij + a//HoGb/x55h/8ebXP/GmFf/yJlX/8WTTf/Fj0f/y5tc/82jbv/JoG3/xp1t/8GZbP+6lGn/r4tl/6WD + YP+cf17/j3JV/2tOL/9bQCT/Tjcf/0EtGfw0JBSPJhoPDf///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////ADEiEwRBLhp0alZB9ZaEcf+plYD/spuF/8KrlP/RvKb/z7KU/9Cxjv/Ts4z/1bWL/9i3 + iv/ZtYX/2biJ/9u8kP/avZL/2buQ/9a4i//PrXr/yqZw/8ijbP/IpG7/yKZw/8imcv/YwZ3/7uPT//n2 + 8f/8+vf/+vby//Tu5P/t4tD/1rqQ/8efZP/HnWD/x5tc/8aYV//GllP/xZNO/8udXf/PoWP/zZ9k/8yk + b//JoW//xZ1u/8Kabv+7lWz/sY1m/6aEYf+bfFz/k3hc/39lSP9jSCz/UTkg/0QwG/83JxXHKh0QMP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wAyIxMbQzEdpmpX + Qv2WhHH/p5N//7yql//JtqH/w6qO/8iqi//Or4z/y6d8/8ymd//OpXH/0ahx/82dXf/HlE7/z6Zs/8uf + Yf/Im1z/x5tb/8aaW//Hm13/x5xf/9i7kP/w5dT/9vDm//jz6//59O3/9e3i/+raxP/TsH7/xpZT/8aU + UP/Fkkz/xZBI/8WORP/CjEP/wpBP/7uGRf+/kVr/xJ1w/8Gab/+4lGz/r4xn/6WFYv+bfV3/kXVY/4tz + Wv9wWD//WUMr/0YyHv84JxblKx4RZh8VCwH///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8AMSITJkMwHJ9pVkP7lIJx/7Cgj//Vyr//6OLa/+/p + 4//m2s7/1b6k/8ysiP/OrYf/0a+G/86ndv/Glln/y5xf/9CjaP/Lm1n/x5RO/9Cla//ZuIn/3b+W/+PL + q//n1Lj/7d3I/+/hzv/v4s//59K1/82gY//FkEf/wotD/7+JQ/+8h0T/uYVF/7aCRf+zgEb/s4RP/7qV + bf+zkGr/qolm/6GCYf+Xe13/jXRY/4dwV/+IdWH/d2RS/1xLOf8/Lx7gKx0QaB4UCwf///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////ACweER8+LRuXnZGG+ubi3v/5+Pb//fz8//r5+P/w6+f/xrGb/72ggf/DpIP/wZ11/72S + Yv/FoHT/x59x/8qkdf/Us4r/07CF/8qfav/Ajk7/vYhE/8meZ//TsIP/1LKH/8ylc//GmmT/zah7/8yo + fP/DmWn/uoxY/7OCTf+qeUX/o3VD/6J5Tv+nhWH/ooRj/5p9X/+SeV3/j3hf/415Y/+Id2X/d2dW/1dH + N/84KhnYJhoPYBsSCgT///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wDT0c832tjVxujm + 5PXx8O7/8e/t/+jk4P/Fuq7/uqqZ/7uolP/Crpr/xK+Z/8avmP/Eq47/uZh0/6+FWP+qekX/rHtG/699 + R/+vfUb/r31G/699Rv+ufEb/rHpF/6l4RP+ld0T/qYBU/6+MZf+yknH/rpFx/66UeP+vmH7/qZR9/6KN + dv+ciHT/l4Z0/45+bv97a1r/Xk49/0IyJO0sHxGUIBYMN////wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////SuDe3XiXkImjTj8wy29fT/uKe2z/n5GD/6aX + h/+mlYP/ppN+/6KMdP+giG//mX1g/5R1VP+VdVP/lnVR/5V0T/+UcUz/kW5H/45pQ/+JZD3/gV01/35Z + M/96VjH/elo3/4VpTP+Se2P/lIBq/5B+av+KeGb/fGtZ/2paSf9RQjL/Oi0c6SwgEqcgFgxOFg4IBf// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8AHBMKDCUZDkkxJBaLSj0u0VxOPv1sXEv/d2ZW/4FxYP+HdWT/iHdk/4p3 + ZP+LeGT/jHhj/4t3Yv+Kd2H/inVg/4d0Xv92YUv/XkYs/1xELP9wXUn/Xko2/088KP9FMyD/PSwb/zEi + FOwpHRCuIhcNbBkRCSv///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8AFA0HBhoSCikgFgxRJRoOeDEmGaE/MSXFSj0u1FJFOOFVRznsUkQ2+FFDNf9QQjP9TkEz805A + MudCNinZLB4RySgbD7QjGA2NHxULZhkRCT4TDQcX////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8ADQgEA////wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A//////////////////////////////////////////////////////// + /////////////////////////////////////8AAAAP///////////////AAAAAAB/////////////4A + AAAAAAB////////////wAAAAAAAAD///////////wAAAAAAAAAP//////////4AAAAAAAAAB//////// + //wAAAAAAAAAAD////////+AAAAAAAAAAAAA///////4AAAAAAAAAAAAAA//////wAAAAAAAAAAAAAAB + /////gAAAAAAAAAAAAAAAD////gAAAAAAAAAAAAAAAAP///gAAAAAAAAAAAAAAAAA///wAAAAAAAAAAA + AAAAAAH//4AAAAAAAAAAAAAAAAAA//8AAAAAAAAAAAAAAAAAAH//AAAAAAAAAAAAAAAAAAB//wAAAAAA + AAAAAAAAAAAAf/+AAAAAAAAAAAAAAAAAAP//gAAAAAAAAAAAAAAAAAD//+AAAAAAAAAAAAAAAAAD///w + AAAAAAAAAAAAAAAAB////AAAAAAAAAAAAAAAAB////+AAAAAAAAAAAAAAAD/////8AAAAAAAAAAAAAAH + //////8AAAAAAAAAAAAAf///////4AAAAAAAAAAAD////////8AAAAAAAAAAAA////////+AAAAAAAAA + AAAH////////AAAAAAAAAAAAA////////gAAAAAAAAAAAAH///////wAAAAAAAAAAAAB///////4AAAA + AAAAAAAAAP//////+AAAAAAAAAAAAAB///////AAAAAAAAAAAAAAP//////gAAAAAAAAAAAAAB////// + wAAAAAAAAAAAAAAf/////4AAAAAAAAAAAAAAD/////+AAAAAAAAAAAAAAAf/////AAAAAAAAAAAAAAAH + /////wAAAAAAAAAAAAAAA/////4AAAAAAAAAAAAAAAP////+AAAAAAAAAAAAAAAB/////AAAAAAAAAAA + AAAAAf////wAAAAAAAAAAAAAAAD////4AAAAAAAAAAAAAAAA////8AAAAAAAAAAAAAAAAH///+AAAAAA + AAAAAAAAAAB////gAAAAAAAAAAAAAAAAf///4AAAAAAAAAAAAAAAAD///+AAAAAAAAAAAAAAAAA////g + AAAAAAAAAAAAAAAAP///4AAAAAAAAAAAAAAAAB///+AAAAAAAAAAAAAAAAAf///AAAAAAAAAAAAAAAAA + H///wAAAAAAAAAAAAAAAAB///8AAAAAAAAAAAAAAAAAP///AAAAAAAAAAAAAAAAAD///wAAAAAAAAAAA + AAAAAA///4AAAAAAAAAAAAAAAAAP//+AAAAAAAAAAAAAAAAAD///gAAAAAAAAAAAAAAAAA///4AAAAAA + AAAAAAAAAAAP//+AAAAAAAAAAAAAAAAAD///gAAAAAAAAAAAAAAAAA///4AAAAAAAAAAAAAAAAAH//+A + AAAAAAAAAAAAAAAAB///gAAAAAAAAAAAAAAAAAf//4AAAAAAAAAAAAAAAAAH//+AAAAAAAAAAAAAAAAA + D///gAAAAAAAAAAAAAAAAA///4AAAAAAAAAAAAAAAAAP//+AAAAAAAAAAAAAAAAAD///gAAAAAAAAAAA + AAAAAA///8AAAAAAAAAAAAAAAAAP///AAAAAAAAAAAAAAAAAD///wAAAAAAAAAAAAAAAAA///8AAAAAA + AAAAAAAAAAAP///AAAAAAAAAAAAAAAAAH///wAAAAAAAAAAAAAAAAB///+AAAAAAAAAAAAAAAAAf///g + AAAAAAAAAAAAAAAAH///4AAAAAAAAAAAAAAAAD////AAAAAAAAAAAAAAAAA////wAAAAAAAAAAAAAAAA + P///8AAAAAAAAAAAAAAAAD////gAAAAAAAAAAAAAAAA////4AAAAAAAAAAAAAAAAP///+AAAAAAAAAAA + AAAAAD////wAAAAAAAAAAAAAAAA////8AAAAAAAAAAAAAAAAf////gAAAAAAAAAAAAAAAf////4AAAAA + AAAAAAAAAAP/////AAAAAAAAAAAAAAAD/////4AAAAAAAAAAAAAAB/////+AAAAAAAAAAAAAAA////// + wAAAAAAAAAAAAAAP/////+AAAAAAAAAAAAAAH//////gAAAAAAAAAAAAAD//////8AAAAAAAAAAAAAB/ + //////gAAAAAAAAAAAAAf//////8AAAAAAAAAAAAAP///////gAAAAAAAAAAAAH///////8AAAAAAAAA + AAAD////////AAAAAAAAAAAAB////////4AAAAAAAAAAAA/////////gAAAAAAAAAAAf////////8AAA + AAAAAAAAP/////////gAAAAAAAAAAH/////////8AAAAAAAAAAH//////////gAAAAAAAAAD//////// + //+AAAAAAAAAB///////////wAAAAAAAAB////////////AAAAAAAAA////////////8AAAAAAAA//// + /////////wAAAAAAA//////////////AAAAAAB//////////////8AAAAAB///////////////8AAAAH + ////////////////8AAAf//////////////////9//////////////////////////////////////// + //////////////////////////////////8= + + \ No newline at end of file diff --git a/Program.cs b/Program.cs index 37792fe..bfa92e2 100644 --- a/Program.cs +++ b/Program.cs @@ -1,19 +1,19 @@ -using System; -using System.Windows.Forms; - -namespace ImgRip -{ - static class Program - { - /// - /// The main entry point for the application. - /// - [STAThread] - static void Main() - { - Application.EnableVisualStyles(); - Application.SetCompatibleTextRenderingDefault(false); - Application.Run(new Main()); - } - } -} +using System; +using System.Windows.Forms; + +namespace ImgRip +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Main()); + } + } +} diff --git a/Properties/Resources.Designer.cs b/Properties/Resources.Designer.cs index f84a0b4..21febe0 100644 --- a/Properties/Resources.Designer.cs +++ b/Properties/Resources.Designer.cs @@ -1,179 +1,179 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.17626 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace ImgRip.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ImgRip.Properties.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Batch { - get { - object obj = ResourceManager.GetObject("Batch", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Cancel { - get { - object obj = ResourceManager.GetObject("Cancel", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Cloud { - get { - object obj = ResourceManager.GetObject("Cloud", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Delete { - get { - object obj = ResourceManager.GetObject("Delete", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Download { - get { - object obj = ResourceManager.GetObject("Download", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Files { - get { - object obj = ResourceManager.GetObject("Files", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Home { - get { - object obj = ResourceManager.GetObject("Home", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Login { - get { - object obj = ResourceManager.GetObject("Login", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap New { - get { - object obj = ResourceManager.GetObject("New", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized string similar to <?xml version="1.0" encoding="utf-8"?> - ///<ImageRipper> - /// <List> - /// <Site Name="016美图" Domain="china016.com" Image="//img[@src]" Next="//div[@class='turnPage']/a[last()-1]" /> - /// <Site Name="1000人体 " Domain="1000rt.com" Image="//p[@align='center']/img[@src]" /> - /// <Site Name="115美女" Domain="115mm.com" Image="//img[@id='bodyimg']" Next="//ul[@class='pagelist']//a" /> - /// <Site Name="126人体艺术" Domain="126rt.com" Image="//div[@class='myc']//img" Next="//div[@class='page page_l']//a" /> - /// <Site Name="15 [rest of string was truncated]";. - /// - internal static string SiteList { - get { - return ResourceManager.GetString("SiteList", resourceCulture); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Up { - get { - object obj = ResourceManager.GetObject("Up", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - } -} +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.17626 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace ImgRip.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ImgRip.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Batch { + get { + object obj = ResourceManager.GetObject("Batch", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Cancel { + get { + object obj = ResourceManager.GetObject("Cancel", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Cloud { + get { + object obj = ResourceManager.GetObject("Cloud", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Delete { + get { + object obj = ResourceManager.GetObject("Delete", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Download { + get { + object obj = ResourceManager.GetObject("Download", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Files { + get { + object obj = ResourceManager.GetObject("Files", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Home { + get { + object obj = ResourceManager.GetObject("Home", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Login { + get { + object obj = ResourceManager.GetObject("Login", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap New { + get { + object obj = ResourceManager.GetObject("New", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized string similar to <?xml version="1.0" encoding="utf-8"?> + ///<ImageRipper> + /// <List> + /// <Site Name="016美图" Domain="china016.com" Image="//img[@src]" Next="//div[@class='turnPage']/a[last()-1]" /> + /// <Site Name="1000人体 " Domain="1000rt.com" Image="//p[@align='center']/img[@src]" /> + /// <Site Name="115美女" Domain="115mm.com" Image="//img[@id='bodyimg']" Next="//ul[@class='pagelist']//a" /> + /// <Site Name="126人体艺术" Domain="126rt.com" Image="//div[@class='myc']//img" Next="//div[@class='page page_l']//a" /> + /// <Site Name="15 [rest of string was truncated]";. + /// + internal static string SiteList { + get { + return ResourceManager.GetString("SiteList", resourceCulture); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Up { + get { + object obj = ResourceManager.GetObject("Up", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/Properties/Resources.resx b/Properties/Resources.resx index 566458f..180deab 100644 --- a/Properties/Resources.resx +++ b/Properties/Resources.resx @@ -1,154 +1,154 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - ..\Resources\Batch.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\Cancel.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\delete.jpg;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\file.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\Home.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\login.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\create.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\Folder up Icon.jpg;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\download.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\cloud.jpg;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\SiteList.xml;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\Batch.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Cancel.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\delete.jpg;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\file.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Home.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\login.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\create.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Folder up Icon.jpg;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\download.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\cloud.jpg;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\SiteList.xml;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8 + \ No newline at end of file diff --git a/Properties/Settings.Designer.cs b/Properties/Settings.Designer.cs index 63529cd..58f6195 100644 --- a/Properties/Settings.Designer.cs +++ b/Properties/Settings.Designer.cs @@ -1,86 +1,86 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.431 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace ImgRip.Properties { - - - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")] - internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { - - private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); - - public static Settings Default { - get { - return defaultInstance; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("")] - public string Url { - get { - return ((string)(this["Url"])); - } - set { - this["Url"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("")] - public string Dir { - get { - return ((string)(this["Dir"])); - } - set { - this["Dir"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("")] - public string Cookie { - get { - return ((string)(this["Cookie"])); - } - set { - this["Cookie"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("")] - public string CloudID { - get { - return ((string)(this["CloudID"])); - } - set { - this["CloudID"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("")] - public string Password { - get { - return ((string)(this["Password"])); - } - set { - this["Password"] = value; - } - } - } -} +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.431 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace ImgRip.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + public string Url { + get { + return ((string)(this["Url"])); + } + set { + this["Url"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + public string Dir { + get { + return ((string)(this["Dir"])); + } + set { + this["Dir"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + public string Cookie { + get { + return ((string)(this["Cookie"])); + } + set { + this["Cookie"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + public string CloudID { + get { + return ((string)(this["CloudID"])); + } + set { + this["CloudID"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + public string Password { + get { + return ((string)(this["Password"])); + } + set { + this["Password"] = value; + } + } + } +} diff --git a/Properties/Settings.settings b/Properties/Settings.settings index b5a8974..44a020e 100644 --- a/Properties/Settings.settings +++ b/Properties/Settings.settings @@ -1,21 +1,21 @@ - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Properties/app.manifest b/Properties/app.manifest index 8df6208..2856403 100644 --- a/Properties/app.manifest +++ b/Properties/app.manifest @@ -1,47 +1,47 @@ - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SetCookie.Designer.cs b/SetCookie.Designer.cs index e77e4d8..05dc207 100644 --- a/SetCookie.Designer.cs +++ b/SetCookie.Designer.cs @@ -1,107 +1,107 @@ -namespace ImgRip -{ - partial class SetCookie - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.lblCookie = new System.Windows.Forms.Label(); - this.tbCookie = new System.Windows.Forms.TextBox(); - this.btnSummit = new System.Windows.Forms.Button(); - this.SuspendLayout(); - // - // lblCookie - // - this.lblCookie.AutoSize = true; - this.lblCookie.FlatStyle = System.Windows.Forms.FlatStyle.System; - this.lblCookie.Font = new System.Drawing.Font("Microsoft YaHei", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.lblCookie.ForeColor = System.Drawing.SystemColors.HotTrack; - this.lblCookie.Location = new System.Drawing.Point(63, 21); - this.lblCookie.Name = "lblCookie"; - this.lblCookie.Size = new System.Drawing.Size(259, 22); - this.lblCookie.TabIndex = 0; - this.lblCookie.Text = "Get Cookie from your browser"; - // - // tbCookie - // - this.tbCookie.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::ImgRip.Properties.Settings.Default, "Cookie", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - this.tbCookie.Font = new System.Drawing.Font("Microsoft YaHei", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.tbCookie.Location = new System.Drawing.Point(12, 65); - this.tbCookie.Name = "tbCookie"; - this.tbCookie.Size = new System.Drawing.Size(360, 29); - this.tbCookie.TabIndex = 1; - this.tbCookie.Text = global::ImgRip.Properties.Settings.Default.Cookie; - // - // btnSummit - // - this.btnSummit.AutoSize = true; - this.btnSummit.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.btnSummit.FlatStyle = System.Windows.Forms.FlatStyle.System; - this.btnSummit.Font = new System.Drawing.Font("Microsoft YaHei", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.btnSummit.ForeColor = System.Drawing.SystemColors.Highlight; - this.btnSummit.Location = new System.Drawing.Point(151, 107); - this.btnSummit.Name = "btnSummit"; - this.btnSummit.RightToLeft = System.Windows.Forms.RightToLeft.No; - this.btnSummit.Size = new System.Drawing.Size(83, 31); - this.btnSummit.TabIndex = 2; - this.btnSummit.Text = "Submit"; - this.btnSummit.UseVisualStyleBackColor = true; - this.btnSummit.Click += new System.EventHandler(this.button1_Click); - // - // SetCookie - // - this.AcceptButton = this.btnSummit; - this.AutoScaleDimensions = new System.Drawing.SizeF(12F, 26F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.ClientSize = new System.Drawing.Size(384, 162); - this.Controls.Add(this.btnSummit); - this.Controls.Add(this.tbCookie); - this.Controls.Add(this.lblCookie); - this.Font = new System.Drawing.Font("Microsoft YaHei", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.ForeColor = System.Drawing.Color.Green; - this.KeyPreview = true; - this.Margin = new System.Windows.Forms.Padding(7, 6, 7, 6); - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "SetCookie"; - this.ShowIcon = false; - this.ShowInTaskbar = false; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; - this.Text = "Set Cookie"; - this.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.SetCookie_KeyPress); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.Label lblCookie; - private System.Windows.Forms.TextBox tbCookie; - private System.Windows.Forms.Button btnSummit; - } +namespace ImgRip +{ + partial class SetCookie + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.lblCookie = new System.Windows.Forms.Label(); + this.tbCookie = new System.Windows.Forms.TextBox(); + this.btnSummit = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // lblCookie + // + this.lblCookie.AutoSize = true; + this.lblCookie.FlatStyle = System.Windows.Forms.FlatStyle.System; + this.lblCookie.Font = new System.Drawing.Font("Microsoft YaHei", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblCookie.ForeColor = System.Drawing.SystemColors.HotTrack; + this.lblCookie.Location = new System.Drawing.Point(63, 21); + this.lblCookie.Name = "lblCookie"; + this.lblCookie.Size = new System.Drawing.Size(259, 22); + this.lblCookie.TabIndex = 0; + this.lblCookie.Text = "Get Cookie from your browser"; + // + // tbCookie + // + this.tbCookie.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::ImgRip.Properties.Settings.Default, "Cookie", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.tbCookie.Font = new System.Drawing.Font("Microsoft YaHei", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.tbCookie.Location = new System.Drawing.Point(12, 65); + this.tbCookie.Name = "tbCookie"; + this.tbCookie.Size = new System.Drawing.Size(360, 29); + this.tbCookie.TabIndex = 1; + this.tbCookie.Text = global::ImgRip.Properties.Settings.Default.Cookie; + // + // btnSummit + // + this.btnSummit.AutoSize = true; + this.btnSummit.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.btnSummit.FlatStyle = System.Windows.Forms.FlatStyle.System; + this.btnSummit.Font = new System.Drawing.Font("Microsoft YaHei", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnSummit.ForeColor = System.Drawing.SystemColors.Highlight; + this.btnSummit.Location = new System.Drawing.Point(151, 107); + this.btnSummit.Name = "btnSummit"; + this.btnSummit.RightToLeft = System.Windows.Forms.RightToLeft.No; + this.btnSummit.Size = new System.Drawing.Size(83, 31); + this.btnSummit.TabIndex = 2; + this.btnSummit.Text = "Submit"; + this.btnSummit.UseVisualStyleBackColor = true; + this.btnSummit.Click += new System.EventHandler(this.button1_Click); + // + // SetCookie + // + this.AcceptButton = this.btnSummit; + this.AutoScaleDimensions = new System.Drawing.SizeF(12F, 26F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.ClientSize = new System.Drawing.Size(384, 162); + this.Controls.Add(this.btnSummit); + this.Controls.Add(this.tbCookie); + this.Controls.Add(this.lblCookie); + this.Font = new System.Drawing.Font("Microsoft YaHei", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.ForeColor = System.Drawing.Color.Green; + this.KeyPreview = true; + this.Margin = new System.Windows.Forms.Padding(7, 6, 7, 6); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "SetCookie"; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Set Cookie"; + this.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.SetCookie_KeyPress); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label lblCookie; + private System.Windows.Forms.TextBox tbCookie; + private System.Windows.Forms.Button btnSummit; + } } \ No newline at end of file diff --git a/SetCookie.cs b/SetCookie.cs index a1064ba..0d4357e 100644 --- a/SetCookie.cs +++ b/SetCookie.cs @@ -1,22 +1,22 @@ -namespace ImgRip -{ - using System; - using System.Windows.Forms; - - partial class SetCookie : Form - { - public SetCookie() - { - InitializeComponent(); - } - private void button1_Click(object sender, EventArgs e) - { - Close(); - } - - private void SetCookie_KeyPress(object sender, KeyPressEventArgs e) - { - if (e.KeyChar == 27) Close(); - } - } -} +namespace ImgRip +{ + using System; + using System.Windows.Forms; + + partial class SetCookie : Form + { + public SetCookie() + { + InitializeComponent(); + } + private void button1_Click(object sender, EventArgs e) + { + Close(); + } + + private void SetCookie_KeyPress(object sender, KeyPressEventArgs e) + { + if (e.KeyChar == 27) Close(); + } + } +} diff --git a/SetCookie.resx b/SetCookie.resx index 29dcb1b..1af7de1 100644 --- a/SetCookie.resx +++ b/SetCookie.resx @@ -1,120 +1,120 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + \ No newline at end of file diff --git a/Settings.cs b/Settings.cs index d424afa..e8143bd 100644 --- a/Settings.cs +++ b/Settings.cs @@ -1,28 +1,28 @@ -namespace ImgRip.Properties { - - - // This class allows you to handle specific events on the settings class: - // The SettingChanging event is raised before a setting's value is changed. - // The PropertyChanged event is raised after a setting's value is changed. - // The SettingsLoaded event is raised after the setting values are loaded. - // The SettingsSaving event is raised before the setting values are saved. - internal sealed partial class Settings { - - public Settings() { - // // To add event handlers for saving and changing settings, uncomment the lines below: - // - // this.SettingChanging += this.SettingChangingEventHandler; - // - // this.SettingsSaving += this.SettingsSavingEventHandler; - // - } - - private void SettingChangingEventHandler(object sender, System.Configuration.SettingChangingEventArgs e) { - // Add code to handle the SettingChangingEvent event here. - } - - private void SettingsSavingEventHandler(object sender, System.ComponentModel.CancelEventArgs e) { - // Add code to handle the SettingsSaving event here. - } - } -} +namespace ImgRip.Properties { + + + // This class allows you to handle specific events on the settings class: + // The SettingChanging event is raised before a setting's value is changed. + // The PropertyChanged event is raised after a setting's value is changed. + // The SettingsLoaded event is raised after the setting values are loaded. + // The SettingsSaving event is raised before the setting values are saved. + internal sealed partial class Settings { + + public Settings() { + // // To add event handlers for saving and changing settings, uncomment the lines below: + // + // this.SettingChanging += this.SettingChangingEventHandler; + // + // this.SettingsSaving += this.SettingsSavingEventHandler; + // + } + + private void SettingChangingEventHandler(object sender, System.Configuration.SettingChangingEventArgs e) { + // Add code to handle the SettingChangingEvent event here. + } + + private void SettingsSavingEventHandler(object sender, System.ComponentModel.CancelEventArgs e) { + // Add code to handle the SettingsSaving event here. + } + } +} diff --git a/SiteList.xml b/SiteList.xml index 1dc8291..6c7e3c5 100644 --- a/SiteList.xml +++ b/SiteList.xml @@ -1,232 +1,232 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Sitelist.xsd b/Sitelist.xsd index 820b708..e4bf59e 100644 --- a/Sitelist.xsd +++ b/Sitelist.xsd @@ -1,25 +1,25 @@ - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Sites.Designer.cs b/Sites.Designer.cs index 1469c0f..a33a040 100644 --- a/Sites.Designer.cs +++ b/Sites.Designer.cs @@ -1,120 +1,120 @@ -namespace ImgRip -{ - partial class Sites - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.ssPrompt = new System.Windows.Forms.StatusStrip(); - this.Prompt = new System.Windows.Forms.ToolStripStatusLabel(); - this.flPanel = new System.Windows.Forms.FlowLayoutPanel(); - this.tbSearch = new System.Windows.Forms.TextBox(); - this.ssPrompt.SuspendLayout(); - this.SuspendLayout(); - // - // ssPrompt - // - this.ssPrompt.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ssPrompt.AutoSize = false; - this.ssPrompt.BackColor = System.Drawing.SystemColors.Control; - this.ssPrompt.Dock = System.Windows.Forms.DockStyle.None; - this.ssPrompt.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.Prompt}); - this.ssPrompt.Location = new System.Drawing.Point(1, 419); - this.ssPrompt.Name = "ssPrompt"; - this.ssPrompt.Size = new System.Drawing.Size(623, 23); - this.ssPrompt.TabIndex = 11; - // - // Prompt - // - this.Prompt.Font = new System.Drawing.Font("Segoe UI", 10F, System.Drawing.FontStyle.Bold); - this.Prompt.ForeColor = System.Drawing.Color.MediumSeaGreen; - this.Prompt.Name = "Prompt"; - this.Prompt.Size = new System.Drawing.Size(0, 18); - // - // flPanel - // - this.flPanel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.flPanel.AutoScroll = true; - this.flPanel.BackColor = System.Drawing.SystemColors.ControlLight; - this.flPanel.FlowDirection = System.Windows.Forms.FlowDirection.TopDown; - this.flPanel.Font = new System.Drawing.Font("Microsoft YaHei", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.flPanel.Location = new System.Drawing.Point(0, 29); - this.flPanel.Name = "flPanel"; - this.flPanel.Size = new System.Drawing.Size(624, 390); - this.flPanel.TabIndex = 12; - // - // tbSearch - // - this.tbSearch.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.tbSearch.Font = new System.Drawing.Font("Microsoft YaHei", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.tbSearch.Location = new System.Drawing.Point(0, 1); - this.tbSearch.Name = "tbSearch"; - this.tbSearch.Size = new System.Drawing.Size(623, 27); - this.tbSearch.TabIndex = 0; - this.tbSearch.WordWrap = false; - this.tbSearch.TextChanged += new System.EventHandler(this.tbSearch_TextChanged); - // - // Sites - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.BackColor = System.Drawing.Color.White; - this.ClientSize = new System.Drawing.Size(625, 442); - this.Controls.Add(this.tbSearch); - this.Controls.Add(this.flPanel); - this.Controls.Add(this.ssPrompt); - this.ForeColor = System.Drawing.SystemColors.ControlText; - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; - this.KeyPreview = true; - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "Sites"; - this.Padding = new System.Windows.Forms.Padding(9); - this.ShowIcon = false; - this.ShowInTaskbar = false; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; - this.Text = "Support Sites"; - this.Load += new System.EventHandler(this.Sites_Load); - this.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.Sites_KeyPress); - this.ssPrompt.ResumeLayout(false); - this.ssPrompt.PerformLayout(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.StatusStrip ssPrompt; - private System.Windows.Forms.ToolStripStatusLabel Prompt; - private System.Windows.Forms.FlowLayoutPanel flPanel; - private System.Windows.Forms.TextBox tbSearch; - - } -} +namespace ImgRip +{ + partial class Sites + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.ssPrompt = new System.Windows.Forms.StatusStrip(); + this.Prompt = new System.Windows.Forms.ToolStripStatusLabel(); + this.flPanel = new System.Windows.Forms.FlowLayoutPanel(); + this.tbSearch = new System.Windows.Forms.TextBox(); + this.ssPrompt.SuspendLayout(); + this.SuspendLayout(); + // + // ssPrompt + // + this.ssPrompt.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ssPrompt.AutoSize = false; + this.ssPrompt.BackColor = System.Drawing.SystemColors.Control; + this.ssPrompt.Dock = System.Windows.Forms.DockStyle.None; + this.ssPrompt.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.Prompt}); + this.ssPrompt.Location = new System.Drawing.Point(1, 419); + this.ssPrompt.Name = "ssPrompt"; + this.ssPrompt.Size = new System.Drawing.Size(623, 23); + this.ssPrompt.TabIndex = 11; + // + // Prompt + // + this.Prompt.Font = new System.Drawing.Font("Segoe UI", 10F, System.Drawing.FontStyle.Bold); + this.Prompt.ForeColor = System.Drawing.Color.MediumSeaGreen; + this.Prompt.Name = "Prompt"; + this.Prompt.Size = new System.Drawing.Size(0, 18); + // + // flPanel + // + this.flPanel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.flPanel.AutoScroll = true; + this.flPanel.BackColor = System.Drawing.SystemColors.ControlLight; + this.flPanel.FlowDirection = System.Windows.Forms.FlowDirection.TopDown; + this.flPanel.Font = new System.Drawing.Font("Microsoft YaHei", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.flPanel.Location = new System.Drawing.Point(0, 29); + this.flPanel.Name = "flPanel"; + this.flPanel.Size = new System.Drawing.Size(624, 390); + this.flPanel.TabIndex = 12; + // + // tbSearch + // + this.tbSearch.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.tbSearch.Font = new System.Drawing.Font("Microsoft YaHei", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.tbSearch.Location = new System.Drawing.Point(0, 1); + this.tbSearch.Name = "tbSearch"; + this.tbSearch.Size = new System.Drawing.Size(623, 27); + this.tbSearch.TabIndex = 0; + this.tbSearch.WordWrap = false; + this.tbSearch.TextChanged += new System.EventHandler(this.tbSearch_TextChanged); + // + // Sites + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.White; + this.ClientSize = new System.Drawing.Size(625, 442); + this.Controls.Add(this.tbSearch); + this.Controls.Add(this.flPanel); + this.Controls.Add(this.ssPrompt); + this.ForeColor = System.Drawing.SystemColors.ControlText; + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.KeyPreview = true; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "Sites"; + this.Padding = new System.Windows.Forms.Padding(9); + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Support Sites"; + this.Load += new System.EventHandler(this.Sites_Load); + this.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.Sites_KeyPress); + this.ssPrompt.ResumeLayout(false); + this.ssPrompt.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.StatusStrip ssPrompt; + private System.Windows.Forms.ToolStripStatusLabel Prompt; + private System.Windows.Forms.FlowLayoutPanel flPanel; + private System.Windows.Forms.TextBox tbSearch; + + } +} diff --git a/Sites.cs b/Sites.cs index 51cac27..53111d3 100644 --- a/Sites.cs +++ b/Sites.cs @@ -1,90 +1,90 @@ -namespace ImgRip -{ - using System; - using System.Diagnostics; - using System.Linq; - using System.Windows.Forms; - - partial class Sites : Form - { - public Sites() - { - InitializeComponent(); - flPanel.MouseWheel += flPanel_MouseWheel; - } - - void flPanel_MouseWheel(object sender, MouseEventArgs e) - { - if (!flPanel.HasChildren) return; - var hs = flPanel.HorizontalScroll; - var width = flPanel.Controls[0].Width; - int val = hs.Value; - val += e.Delta < 0 ? width : -width; - if (val < 0) { hs.Value = 0; flPanel.ScrollControlIntoView(flPanel.Controls[0]); } - else if (val > hs.Maximum) hs.Value = hs.Maximum; - else hs.Value = val; - } - - protected override void OnMouseWheel(MouseEventArgs e) - { - flPanel_MouseWheel(flPanel, e); - } - - static readonly string labelPrompt = "http://{0}", sitePrompt = "Total {0} sites."; - - void item_MouseEnter(object sender, System.EventArgs e) - { - Prompt.Text = string.Format(labelPrompt, ((LinkLabel)sender).Tag as string); - } - - void item_MouseLeave(object sender, System.EventArgs e) - { - Prompt.Text = string.Format(sitePrompt, flPanel.Controls.Count); - } - - void item_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - Process.Start(string.Format(labelPrompt, ((LinkLabel)sender).Tag as string)); - } - - private void Sites_KeyPress(object sender, KeyPressEventArgs e) - { - if (e.KeyChar == 27) this.Close(); - } - - static LinkLabel[] lla; - - private void Sites_Load(object sender, EventArgs e) - { - var owner = this.Owner as Main; - lla = new LinkLabel[owner.sites.Length]; - int i = 0; - foreach (var site in owner.sites) - { - var item = new LinkLabel { Text = site.Name, Tag = site.ToString()}; - item.LinkClicked += item_LinkClicked; - item.MouseEnter += item_MouseEnter; - item.MouseLeave += item_MouseLeave; - lla[i++] = item; - } - flPanel.Controls.AddRange(lla); - Prompt.Text = string.Format(sitePrompt, flPanel.Controls.Count); - } - - private void tbSearch_TextChanged(object sender, EventArgs e) - { - var term = tbSearch.Text.Trim(); - if (string.IsNullOrEmpty(term)) - if (tbSearch.Text.Length > 0) return; - else { if (lla.Length != flPanel.Controls.Count) { flPanel.SuspendLayout(); flPanel.Controls.Clear(); flPanel.Controls.AddRange(lla); } } - else - { - var match = lla.Where(_ => ((string)_.Tag).ContainsEx(term)).ToArray(); - if (match.Length == lla.Length && lla.Length == flPanel.Controls.Count) return; - flPanel.SuspendLayout(); flPanel.Controls.Clear(); flPanel.Controls.AddRange(match); - } - flPanel.ResumeLayout(); - Prompt.Text = string.Format(sitePrompt, flPanel.Controls.Count); - } - } -} +namespace ImgRip +{ + using System; + using System.Diagnostics; + using System.Linq; + using System.Windows.Forms; + + partial class Sites : Form + { + public Sites() + { + InitializeComponent(); + flPanel.MouseWheel += flPanel_MouseWheel; + } + + void flPanel_MouseWheel(object sender, MouseEventArgs e) + { + if (!flPanel.HasChildren) return; + var hs = flPanel.HorizontalScroll; + var width = flPanel.Controls[0].Width; + int val = hs.Value; + val += e.Delta < 0 ? width : -width; + if (val < 0) { hs.Value = 0; flPanel.ScrollControlIntoView(flPanel.Controls[0]); } + else if (val > hs.Maximum) hs.Value = hs.Maximum; + else hs.Value = val; + } + + protected override void OnMouseWheel(MouseEventArgs e) + { + flPanel_MouseWheel(flPanel, e); + } + + static readonly string labelPrompt = "http://{0}", sitePrompt = "Total {0} sites."; + + void item_MouseEnter(object sender, System.EventArgs e) + { + Prompt.Text = string.Format(labelPrompt, ((LinkLabel)sender).Tag as string); + } + + void item_MouseLeave(object sender, System.EventArgs e) + { + Prompt.Text = string.Format(sitePrompt, flPanel.Controls.Count); + } + + void item_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + Process.Start(string.Format(labelPrompt, ((LinkLabel)sender).Tag as string)); + } + + private void Sites_KeyPress(object sender, KeyPressEventArgs e) + { + if (e.KeyChar == 27) this.Close(); + } + + static LinkLabel[] lla; + + private void Sites_Load(object sender, EventArgs e) + { + var owner = this.Owner as Main; + lla = new LinkLabel[owner.sites.Length]; + int i = 0; + foreach (var site in owner.sites) + { + var item = new LinkLabel { Text = site.Name, Tag = site.ToString()}; + item.LinkClicked += item_LinkClicked; + item.MouseEnter += item_MouseEnter; + item.MouseLeave += item_MouseLeave; + lla[i++] = item; + } + flPanel.Controls.AddRange(lla); + Prompt.Text = string.Format(sitePrompt, flPanel.Controls.Count); + } + + private void tbSearch_TextChanged(object sender, EventArgs e) + { + var term = tbSearch.Text.Trim(); + if (string.IsNullOrEmpty(term)) + if (tbSearch.Text.Length > 0) return; + else { if (lla.Length != flPanel.Controls.Count) { flPanel.SuspendLayout(); flPanel.Controls.Clear(); flPanel.Controls.AddRange(lla); } } + else + { + var match = lla.Where(_ => ((string)_.Tag).ContainsEx(term)).ToArray(); + if (match.Length == lla.Length && lla.Length == flPanel.Controls.Count) return; + flPanel.SuspendLayout(); flPanel.Controls.Clear(); flPanel.Controls.AddRange(match); + } + flPanel.ResumeLayout(); + Prompt.Text = string.Format(sitePrompt, flPanel.Controls.Count); + } + } +} diff --git a/Sites.resx b/Sites.resx index ddb7c31..34a40a4 100644 --- a/Sites.resx +++ b/Sites.resx @@ -1,126 +1,126 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 17, 17 - - - 54 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 54 + \ No newline at end of file diff --git a/SplitButton.cs b/SplitButton.cs index 64dc021..34bf0fe 100644 --- a/SplitButton.cs +++ b/SplitButton.cs @@ -1,429 +1,429 @@ -namespace ImgRip -{ - using System; - using System.ComponentModel; - using System.Drawing; - using System.Drawing.Imaging; - using System.Windows.Forms; - using System.Windows.Forms.VisualStyles; - - internal class SplitButton : Button - { - private PushButtonState _state; - private const int PushButtonWidth = 14; - private static int BorderSize = SystemInformation.Border3DSize.Width * 2; - private bool skipNextOpen; - private Rectangle dropDownRectangle; - private Rectangle UpRectangle, DownRectangle; - private bool showSplit = true; - [Category("Mouse")] - public event EventHandler UpArrowMouseDown, UpArrowMouseUp, DownArrowMouseDown, DownArrowMouseUp; - - [DefaultValue(true)] - [Category("Appearance")] - [DisplayName("Show Split")] - [Description("Check to set whether to show context menu")] - public bool ShowSplit - { - get - { - return showSplit; - } - set - { - if (value != showSplit) - { - showSplit = value; - Invalidate(); - if (this.Parent != null) - { - this.Parent.PerformLayout(); - } - } - } - } - - private PushButtonState State - { - get - { - return _state; - } - set - { - if (!_state.Equals(value)) - { - _state = value; - Invalidate(); - } - } - } - - public override Size GetPreferredSize(Size proposedSize) - { - Size preferredSize = base.GetPreferredSize(proposedSize); - if (showSplit && !string.IsNullOrEmpty(Text) && TextRenderer.MeasureText(Text, Font).Width + PushButtonWidth > preferredSize.Width) - { - return preferredSize + new Size(PushButtonWidth + BorderSize * 2, 0); - } - return preferredSize; - } - - protected override bool IsInputKey(Keys keyData) - { - if (keyData.Equals(Keys.Down) && showSplit) - { - return true; - } - else - { - return base.IsInputKey(keyData); - } - } - - protected override void OnGotFocus(EventArgs e) - { - if (!showSplit) - { - base.OnGotFocus(e); - return; - } - - if (!State.Equals(PushButtonState.Pressed) && !State.Equals(PushButtonState.Disabled)) - { - State = PushButtonState.Default; - } - } - - protected override void OnKeyDown(KeyEventArgs kevent) - { - if (showSplit) - { - if (kevent.KeyCode.Equals(Keys.Down)) - { - ShowContextMenuStrip(); - } - else if (kevent.KeyCode.Equals(Keys.Space) && kevent.Modifiers == Keys.None) - { - State = PushButtonState.Pressed; - } - } - base.OnKeyDown(kevent); - } - - protected override void OnKeyUp(KeyEventArgs kevent) - { - if (kevent.KeyCode.Equals(Keys.Space)) - { - if (Control.MouseButtons == MouseButtons.None) - { - State = PushButtonState.Normal; - } - } - base.OnKeyUp(kevent); - } - - protected override void OnLostFocus(EventArgs e) - { - if (!showSplit) - { - base.OnLostFocus(e); - return; - } - if (!State.Equals(PushButtonState.Pressed) && !State.Equals(PushButtonState.Disabled)) - { - State = PushButtonState.Normal; - } - } - - protected override void OnMouseDown(MouseEventArgs e) - { - if (!showSplit || e.Button == MouseButtons.Right) - { - base.OnMouseDown(e); - return; - } - - if (dropDownRectangle.Contains(e.Location)) - { - ShowContextMenuStrip(); - } - else if (UpRectangle.Contains(e.Location)) - { - if (UpArrowMouseDown != null) - UpArrowMouseDown(this, e); - State = PushButtonState.Pressed; - } - else if (DownRectangle.Contains(e.Location)) - { - if (DownArrowMouseDown != null) - DownArrowMouseDown(this, e); - State = PushButtonState.Pressed; - } - else - { - State = PushButtonState.Pressed; - } - } - - protected override void OnMouseEnter(EventArgs e) - { - if (!State.Equals(PushButtonState.Pressed) && !State.Equals(PushButtonState.Disabled)) - { - State = PushButtonState.Hot; - } - base.OnMouseEnter(e); - } - - protected override void OnMouseLeave(EventArgs e) - { - if (!showSplit) - { - base.OnMouseLeave(e); - return; - } - if (UpArrowMouseUp != null) UpArrowMouseUp(this, e); - if (DownArrowMouseUp != null) DownArrowMouseUp(this, e); - if (!State.Equals(PushButtonState.Pressed) && !State.Equals(PushButtonState.Disabled)) - { - if (Focused) - { - State = PushButtonState.Default; - } - else - { - State = PushButtonState.Normal; - } - } - } - - protected override void OnMouseUp(MouseEventArgs mevent) - { - if (!showSplit || mevent.Button.Equals( MouseButtons.Right)) - { - base.OnMouseUp(mevent); - return; - } - - if (ContextMenuStrip == null || !ContextMenuStrip.Visible) - { - SetButtonDrawState(); - if (Bounds.Contains(Parent.PointToClient(Cursor.Position)) && !dropDownRectangle.Contains(mevent.Location) && !DownRectangle.Contains(mevent.Location) && !UpRectangle.Contains(mevent.Location)) - { - OnClick(mevent); - } - if (UpRectangle.Contains(mevent.Location) && UpArrowMouseUp != null) UpArrowMouseUp(this, mevent); - if (DownRectangle.Contains(mevent.Location) && DownArrowMouseUp != null) DownArrowMouseUp(this, mevent); - } - } - - protected override void OnPaint(PaintEventArgs pevent) - { - base.OnPaint(pevent); - - if (!showSplit) - { - return; - } - - Graphics g = pevent.Graphics; - Rectangle bounds = this.ClientRectangle; - - // draw the button background as according to the current state. - if (State != PushButtonState.Pressed && IsDefault && !Application.RenderWithVisualStyles) - { - Rectangle backgroundBounds = bounds; - backgroundBounds.Inflate(-1, -1); - ButtonRenderer.DrawButton(g, backgroundBounds, State); - - // button renderer doesnt draw the black frame when themes are off =( - g.DrawRectangle(SystemPens.WindowFrame, 0, 0, bounds.Width - 1, bounds.Height - 1); - } - else - { - ButtonRenderer.DrawButton(g, bounds, State); - } - // calculate the current dropdown rectangle. - dropDownRectangle = new Rectangle(bounds.Right - PushButtonWidth - 1, BorderSize, PushButtonWidth, bounds.Height - BorderSize * 2); - UpRectangle = new Rectangle(BorderSize, BorderSize, bounds.Width - BorderSize * 2, PushButtonWidth); - DownRectangle = new Rectangle(BorderSize, bounds.Height - PushButtonWidth - BorderSize, bounds.Width - BorderSize * 2, PushButtonWidth); - - Rectangle focusRect = - new Rectangle(BorderSize, - PushButtonWidth, - bounds.Width - dropDownRectangle.Width - BorderSize, - bounds.Height - (PushButtonWidth * 2)); - - bool drawSplitLine = (State == PushButtonState.Hot || State == PushButtonState.Pressed || !Application.RenderWithVisualStyles); - - if (RightToLeft == RightToLeft.Yes) - { - dropDownRectangle.X = bounds.Left + 1; - focusRect.X = dropDownRectangle.Right; - if (drawSplitLine) - { - // draw two lines at the edge of the dropdown button - g.DrawLine(SystemPens.ButtonShadow, bounds.Left + PushButtonWidth, BorderSize, bounds.Left + PushButtonWidth, bounds.Bottom - BorderSize); - g.DrawLine(SystemPens.ButtonFace, bounds.Left + PushButtonWidth + 1, BorderSize, bounds.Left + PushButtonWidth + 1, bounds.Bottom - BorderSize); - } - } - else - { - if (drawSplitLine) - { - // draw two lines at the right edge of the dropdown button - g.DrawLine(SystemPens.ButtonShadow, bounds.Right - PushButtonWidth, BorderSize, bounds.Right - PushButtonWidth, bounds.Bottom - BorderSize); - g.DrawLine(SystemPens.ButtonFace, bounds.Right - PushButtonWidth - 1, BorderSize, bounds.Right - PushButtonWidth - 1, bounds.Bottom - BorderSize); - // draw two lines at the up edge of the dropdown button - g.DrawLine(SystemPens.ButtonShadow, BorderSize-1, PushButtonWidth, bounds.Right - PushButtonWidth, PushButtonWidth); - g.DrawLine(SystemPens.ButtonFace, BorderSize-1, PushButtonWidth - 1, bounds.Right - PushButtonWidth, PushButtonWidth - 1); - // draw two lines at the bottom edge of the dropdown button - g.DrawLine(SystemPens.ButtonShadow, BorderSize - 1, bounds.Bottom - PushButtonWidth, bounds.Right - PushButtonWidth, bounds.Bottom - PushButtonWidth); - g.DrawLine(SystemPens.ButtonFace, BorderSize - 1, bounds.Bottom - PushButtonWidth - 1, bounds.Right - PushButtonWidth, bounds.Bottom - PushButtonWidth - 1); - } - } - - // Draw an arrow in the correct location - PaintArrow(g, dropDownRectangle,false,false); - PaintArrow(g, UpRectangle,true,true); - PaintArrow(g, DownRectangle,true,false); - - // Figure out how to draw the text - TextFormatFlags formatFlags = TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter; - - - // If we dont' use mnemonic, set formatFlag to NoPrefix as this will show ampersand. - if (!UseMnemonic) - { - formatFlags = formatFlags | TextFormatFlags.NoPrefix; - } - else if (!ShowKeyboardCues) - { - formatFlags = formatFlags | TextFormatFlags.HidePrefix; - } - - if (!string.IsNullOrEmpty(this.Text)) - { - if (Enabled) - TextRenderer.DrawText(g, Text, Font, focusRect, SystemColors.ControlText, formatFlags); - else - TextRenderer.DrawText(g, Text, Font, focusRect, SystemColors.GrayText, formatFlags); - } - - if (Image != null) - { - if (Enabled) - g.DrawImage(Image, focusRect); - else - g.DrawImage(MakeGrayscale(Image), focusRect); - - } - - // draw the focus rectangle. - - if (State != PushButtonState.Pressed && Focused) - { - ControlPaint.DrawFocusRectangle(g, focusRect); - } - } - - Image MakeGrayscale(Image original) - { - //create a blank bitmap the same size as original - Image newBitmap = - new Bitmap(original.Width, original.Height); - - //get a graphics object from the new image - Graphics g = Graphics.FromImage(newBitmap); - - //create the grayscale ColorMatrix - ColorMatrix colorMatrix = new ColorMatrix(new float[][] { - new float[] { .3f, .3f, .3f, 0, 0 }, - new float[] { .59f, .59f, .59f, 0, 0 }, - new float[] { .11f, .11f, .11f, 0, 0 }, - new float[] { 0, 0, 0, 1, 0 }, - new float[] { 0, 0, 0, 0, 1 } }); - - //create some image attributes - ImageAttributes attributes = new ImageAttributes(); - - //set the color matrix attribute - attributes.SetColorMatrix(colorMatrix); - - //draw the original image on the new image - //using the grayscale color matrix - g.DrawImage(original, - new Rectangle(0, 0, original.Width, original.Height), - 0, 0, original.Width, original.Height, - GraphicsUnit.Pixel, attributes); - - //dispose the Graphics object - g.Dispose(); - return newBitmap; - } - - private static void PaintArrow(Graphics g, Rectangle Rect,bool Horiz,bool Up) - { - Point middle = new Point((Rect.Left + Rect.Width / 2),(Rect.Top + Rect.Height / 2)); - - //if the width is odd - favor pushing it over one pixel right. - middle.X += (Rect.Width % 2); - if (Horiz) - middle.X -= PushButtonWidth / 2; - Point[] arrow; - if (Up)//Up Arrow - arrow = new Point[] { new Point(middle.X - 3, middle.Y + 1), new Point(middle.X + 3, middle.Y + 1), new Point(middle.X, middle.Y - 4) }; - else//Down Arrow - arrow = new Point[] { new Point(middle.X - 2, middle.Y - 1), new Point(middle.X + 3, middle.Y - 1), new Point(middle.X, middle.Y + 4) }; - - g.FillPolygon(Brushes.Green, arrow); - } - - private void ShowContextMenuStrip() - { - if (skipNextOpen) - { - // we were called because we're closing the context menu strip - // when clicking the dropdown button. - skipNextOpen = false; - return; - } - State = PushButtonState.Pressed; - - if (ContextMenuStrip != null) - { - ContextMenuStrip.Closing += ContextMenuStrip_Closing; - ContextMenuStrip.Show(this, new Point(0, Height), ToolStripDropDownDirection.Default); - } - } - - void ContextMenuStrip_Closing(object sender, ToolStripDropDownClosingEventArgs e) - { - ContextMenuStrip cms = sender as ContextMenuStrip; - if (cms != null) - { - cms.Closing -= ContextMenuStrip_Closing; - } - - SetButtonDrawState(); - - if (e.CloseReason == ToolStripDropDownCloseReason.AppClicked) - { - Point pt = this.PointToClient(Cursor.Position); - skipNextOpen = (dropDownRectangle.Contains(pt) || UpRectangle.Contains(pt) || DownRectangle.Contains(pt)); - } - } - - - private void SetButtonDrawState() - { - if (Bounds.Contains(Parent.PointToClient(Cursor.Position))) - State = PushButtonState.Hot; - else if (Focused) - State = PushButtonState.Default; - else - State = PushButtonState.Normal; - } - } -} - +namespace ImgRip +{ + using System; + using System.ComponentModel; + using System.Drawing; + using System.Drawing.Imaging; + using System.Windows.Forms; + using System.Windows.Forms.VisualStyles; + + internal class SplitButton : Button + { + private PushButtonState _state; + private const int PushButtonWidth = 14; + private static int BorderSize = SystemInformation.Border3DSize.Width * 2; + private bool skipNextOpen; + private Rectangle dropDownRectangle; + private Rectangle UpRectangle, DownRectangle; + private bool showSplit = true; + [Category("Mouse")] + public event EventHandler UpArrowMouseDown, UpArrowMouseUp, DownArrowMouseDown, DownArrowMouseUp; + + [DefaultValue(true)] + [Category("Appearance")] + [DisplayName("Show Split")] + [Description("Check to set whether to show context menu")] + public bool ShowSplit + { + get + { + return showSplit; + } + set + { + if (value != showSplit) + { + showSplit = value; + Invalidate(); + if (this.Parent != null) + { + this.Parent.PerformLayout(); + } + } + } + } + + private PushButtonState State + { + get + { + return _state; + } + set + { + if (!_state.Equals(value)) + { + _state = value; + Invalidate(); + } + } + } + + public override Size GetPreferredSize(Size proposedSize) + { + Size preferredSize = base.GetPreferredSize(proposedSize); + if (showSplit && !string.IsNullOrEmpty(Text) && TextRenderer.MeasureText(Text, Font).Width + PushButtonWidth > preferredSize.Width) + { + return preferredSize + new Size(PushButtonWidth + BorderSize * 2, 0); + } + return preferredSize; + } + + protected override bool IsInputKey(Keys keyData) + { + if (keyData.Equals(Keys.Down) && showSplit) + { + return true; + } + else + { + return base.IsInputKey(keyData); + } + } + + protected override void OnGotFocus(EventArgs e) + { + if (!showSplit) + { + base.OnGotFocus(e); + return; + } + + if (!State.Equals(PushButtonState.Pressed) && !State.Equals(PushButtonState.Disabled)) + { + State = PushButtonState.Default; + } + } + + protected override void OnKeyDown(KeyEventArgs kevent) + { + if (showSplit) + { + if (kevent.KeyCode.Equals(Keys.Down)) + { + ShowContextMenuStrip(); + } + else if (kevent.KeyCode.Equals(Keys.Space) && kevent.Modifiers == Keys.None) + { + State = PushButtonState.Pressed; + } + } + base.OnKeyDown(kevent); + } + + protected override void OnKeyUp(KeyEventArgs kevent) + { + if (kevent.KeyCode.Equals(Keys.Space)) + { + if (Control.MouseButtons == MouseButtons.None) + { + State = PushButtonState.Normal; + } + } + base.OnKeyUp(kevent); + } + + protected override void OnLostFocus(EventArgs e) + { + if (!showSplit) + { + base.OnLostFocus(e); + return; + } + if (!State.Equals(PushButtonState.Pressed) && !State.Equals(PushButtonState.Disabled)) + { + State = PushButtonState.Normal; + } + } + + protected override void OnMouseDown(MouseEventArgs e) + { + if (!showSplit || e.Button == MouseButtons.Right) + { + base.OnMouseDown(e); + return; + } + + if (dropDownRectangle.Contains(e.Location)) + { + ShowContextMenuStrip(); + } + else if (UpRectangle.Contains(e.Location)) + { + if (UpArrowMouseDown != null) + UpArrowMouseDown(this, e); + State = PushButtonState.Pressed; + } + else if (DownRectangle.Contains(e.Location)) + { + if (DownArrowMouseDown != null) + DownArrowMouseDown(this, e); + State = PushButtonState.Pressed; + } + else + { + State = PushButtonState.Pressed; + } + } + + protected override void OnMouseEnter(EventArgs e) + { + if (!State.Equals(PushButtonState.Pressed) && !State.Equals(PushButtonState.Disabled)) + { + State = PushButtonState.Hot; + } + base.OnMouseEnter(e); + } + + protected override void OnMouseLeave(EventArgs e) + { + if (!showSplit) + { + base.OnMouseLeave(e); + return; + } + if (UpArrowMouseUp != null) UpArrowMouseUp(this, e); + if (DownArrowMouseUp != null) DownArrowMouseUp(this, e); + if (!State.Equals(PushButtonState.Pressed) && !State.Equals(PushButtonState.Disabled)) + { + if (Focused) + { + State = PushButtonState.Default; + } + else + { + State = PushButtonState.Normal; + } + } + } + + protected override void OnMouseUp(MouseEventArgs mevent) + { + if (!showSplit || mevent.Button.Equals( MouseButtons.Right)) + { + base.OnMouseUp(mevent); + return; + } + + if (ContextMenuStrip == null || !ContextMenuStrip.Visible) + { + SetButtonDrawState(); + if (Bounds.Contains(Parent.PointToClient(Cursor.Position)) && !dropDownRectangle.Contains(mevent.Location) && !DownRectangle.Contains(mevent.Location) && !UpRectangle.Contains(mevent.Location)) + { + OnClick(mevent); + } + if (UpRectangle.Contains(mevent.Location) && UpArrowMouseUp != null) UpArrowMouseUp(this, mevent); + if (DownRectangle.Contains(mevent.Location) && DownArrowMouseUp != null) DownArrowMouseUp(this, mevent); + } + } + + protected override void OnPaint(PaintEventArgs pevent) + { + base.OnPaint(pevent); + + if (!showSplit) + { + return; + } + + Graphics g = pevent.Graphics; + Rectangle bounds = this.ClientRectangle; + + // draw the button background as according to the current state. + if (State != PushButtonState.Pressed && IsDefault && !Application.RenderWithVisualStyles) + { + Rectangle backgroundBounds = bounds; + backgroundBounds.Inflate(-1, -1); + ButtonRenderer.DrawButton(g, backgroundBounds, State); + + // button renderer doesnt draw the black frame when themes are off =( + g.DrawRectangle(SystemPens.WindowFrame, 0, 0, bounds.Width - 1, bounds.Height - 1); + } + else + { + ButtonRenderer.DrawButton(g, bounds, State); + } + // calculate the current dropdown rectangle. + dropDownRectangle = new Rectangle(bounds.Right - PushButtonWidth - 1, BorderSize, PushButtonWidth, bounds.Height - BorderSize * 2); + UpRectangle = new Rectangle(BorderSize, BorderSize, bounds.Width - BorderSize * 2, PushButtonWidth); + DownRectangle = new Rectangle(BorderSize, bounds.Height - PushButtonWidth - BorderSize, bounds.Width - BorderSize * 2, PushButtonWidth); + + Rectangle focusRect = + new Rectangle(BorderSize, + PushButtonWidth, + bounds.Width - dropDownRectangle.Width - BorderSize, + bounds.Height - (PushButtonWidth * 2)); + + bool drawSplitLine = (State == PushButtonState.Hot || State == PushButtonState.Pressed || !Application.RenderWithVisualStyles); + + if (RightToLeft == RightToLeft.Yes) + { + dropDownRectangle.X = bounds.Left + 1; + focusRect.X = dropDownRectangle.Right; + if (drawSplitLine) + { + // draw two lines at the edge of the dropdown button + g.DrawLine(SystemPens.ButtonShadow, bounds.Left + PushButtonWidth, BorderSize, bounds.Left + PushButtonWidth, bounds.Bottom - BorderSize); + g.DrawLine(SystemPens.ButtonFace, bounds.Left + PushButtonWidth + 1, BorderSize, bounds.Left + PushButtonWidth + 1, bounds.Bottom - BorderSize); + } + } + else + { + if (drawSplitLine) + { + // draw two lines at the right edge of the dropdown button + g.DrawLine(SystemPens.ButtonShadow, bounds.Right - PushButtonWidth, BorderSize, bounds.Right - PushButtonWidth, bounds.Bottom - BorderSize); + g.DrawLine(SystemPens.ButtonFace, bounds.Right - PushButtonWidth - 1, BorderSize, bounds.Right - PushButtonWidth - 1, bounds.Bottom - BorderSize); + // draw two lines at the up edge of the dropdown button + g.DrawLine(SystemPens.ButtonShadow, BorderSize-1, PushButtonWidth, bounds.Right - PushButtonWidth, PushButtonWidth); + g.DrawLine(SystemPens.ButtonFace, BorderSize-1, PushButtonWidth - 1, bounds.Right - PushButtonWidth, PushButtonWidth - 1); + // draw two lines at the bottom edge of the dropdown button + g.DrawLine(SystemPens.ButtonShadow, BorderSize - 1, bounds.Bottom - PushButtonWidth, bounds.Right - PushButtonWidth, bounds.Bottom - PushButtonWidth); + g.DrawLine(SystemPens.ButtonFace, BorderSize - 1, bounds.Bottom - PushButtonWidth - 1, bounds.Right - PushButtonWidth, bounds.Bottom - PushButtonWidth - 1); + } + } + + // Draw an arrow in the correct location + PaintArrow(g, dropDownRectangle,false,false); + PaintArrow(g, UpRectangle,true,true); + PaintArrow(g, DownRectangle,true,false); + + // Figure out how to draw the text + TextFormatFlags formatFlags = TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter; + + + // If we dont' use mnemonic, set formatFlag to NoPrefix as this will show ampersand. + if (!UseMnemonic) + { + formatFlags = formatFlags | TextFormatFlags.NoPrefix; + } + else if (!ShowKeyboardCues) + { + formatFlags = formatFlags | TextFormatFlags.HidePrefix; + } + + if (!string.IsNullOrEmpty(this.Text)) + { + if (Enabled) + TextRenderer.DrawText(g, Text, Font, focusRect, SystemColors.ControlText, formatFlags); + else + TextRenderer.DrawText(g, Text, Font, focusRect, SystemColors.GrayText, formatFlags); + } + + if (Image != null) + { + if (Enabled) + g.DrawImage(Image, focusRect); + else + g.DrawImage(MakeGrayscale(Image), focusRect); + + } + + // draw the focus rectangle. + + if (State != PushButtonState.Pressed && Focused) + { + ControlPaint.DrawFocusRectangle(g, focusRect); + } + } + + Image MakeGrayscale(Image original) + { + //create a blank bitmap the same size as original + Image newBitmap = + new Bitmap(original.Width, original.Height); + + //get a graphics object from the new image + Graphics g = Graphics.FromImage(newBitmap); + + //create the grayscale ColorMatrix + ColorMatrix colorMatrix = new ColorMatrix(new float[][] { + new float[] { .3f, .3f, .3f, 0, 0 }, + new float[] { .59f, .59f, .59f, 0, 0 }, + new float[] { .11f, .11f, .11f, 0, 0 }, + new float[] { 0, 0, 0, 1, 0 }, + new float[] { 0, 0, 0, 0, 1 } }); + + //create some image attributes + ImageAttributes attributes = new ImageAttributes(); + + //set the color matrix attribute + attributes.SetColorMatrix(colorMatrix); + + //draw the original image on the new image + //using the grayscale color matrix + g.DrawImage(original, + new Rectangle(0, 0, original.Width, original.Height), + 0, 0, original.Width, original.Height, + GraphicsUnit.Pixel, attributes); + + //dispose the Graphics object + g.Dispose(); + return newBitmap; + } + + private static void PaintArrow(Graphics g, Rectangle Rect,bool Horiz,bool Up) + { + Point middle = new Point((Rect.Left + Rect.Width / 2),(Rect.Top + Rect.Height / 2)); + + //if the width is odd - favor pushing it over one pixel right. + middle.X += (Rect.Width % 2); + if (Horiz) + middle.X -= PushButtonWidth / 2; + Point[] arrow; + if (Up)//Up Arrow + arrow = new Point[] { new Point(middle.X - 3, middle.Y + 1), new Point(middle.X + 3, middle.Y + 1), new Point(middle.X, middle.Y - 4) }; + else//Down Arrow + arrow = new Point[] { new Point(middle.X - 2, middle.Y - 1), new Point(middle.X + 3, middle.Y - 1), new Point(middle.X, middle.Y + 4) }; + + g.FillPolygon(Brushes.Green, arrow); + } + + private void ShowContextMenuStrip() + { + if (skipNextOpen) + { + // we were called because we're closing the context menu strip + // when clicking the dropdown button. + skipNextOpen = false; + return; + } + State = PushButtonState.Pressed; + + if (ContextMenuStrip != null) + { + ContextMenuStrip.Closing += ContextMenuStrip_Closing; + ContextMenuStrip.Show(this, new Point(0, Height), ToolStripDropDownDirection.Default); + } + } + + void ContextMenuStrip_Closing(object sender, ToolStripDropDownClosingEventArgs e) + { + ContextMenuStrip cms = sender as ContextMenuStrip; + if (cms != null) + { + cms.Closing -= ContextMenuStrip_Closing; + } + + SetButtonDrawState(); + + if (e.CloseReason == ToolStripDropDownCloseReason.AppClicked) + { + Point pt = this.PointToClient(Cursor.Position); + skipNextOpen = (dropDownRectangle.Contains(pt) || UpRectangle.Contains(pt) || DownRectangle.Contains(pt)); + } + } + + + private void SetButtonDrawState() + { + if (Bounds.Contains(Parent.PointToClient(Cursor.Position))) + State = PushButtonState.Hot; + else if (Focused) + State = PushButtonState.Default; + else + State = PushButtonState.Normal; + } + } +} + diff --git a/app.config b/app.config index 1e5c552..0a802ab 100644 --- a/app.config +++ b/app.config @@ -1,55 +1,55 @@ - - - - -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +