From 2a5abb6c05d2c85f76b27bc90d03c37df78ec327 Mon Sep 17 00:00:00 2001 From: lay295 Date: Mon, 14 Oct 2019 22:47:16 -0400 Subject: [PATCH] WinForms -> WPF --- README.md | 20 +- TwitchDownloader.sln | 37 - TwitchDownloader/App.config | 53 - TwitchDownloader/Program.cs | 22 - TwitchDownloader/Properties/Settings.settings | 36 - TwitchDownloader/Resources/hypers.png | Bin 19561 -> 0 bytes TwitchDownloader/TwitchDownloader.csproj | 220 ---- TwitchDownloader/frmAbout.Designer.cs | 76 -- TwitchDownloader/frmAbout.cs | 20 - TwitchDownloader/frmAbout.resx | 700 ---------- TwitchDownloader/frmChatDownload.Designer.cs | 484 ------- TwitchDownloader/frmChatDownload.cs | 304 ----- TwitchDownloader/frmChatDownload.resx | 126 -- TwitchDownloader/frmChatRender.Designer.cs | 429 ------ TwitchDownloader/frmChatRender.cs | 967 -------------- TwitchDownloader/frmChatRender.resx | 129 -- TwitchDownloader/frmClipDownload.Designer.cs | 281 ---- TwitchDownloader/frmClipDownload.cs | 171 --- TwitchDownloader/frmClipDownload.resx | 126 -- TwitchDownloader/frmMain.Designer.cs | 153 --- TwitchDownloader/frmMain.cs | 89 -- TwitchDownloader/frmMain.resx | 700 ---------- TwitchDownloader/frmVodDownload.Designer.cs | 550 -------- TwitchDownloader/frmVodDownload.resx | 126 -- TwitchDownloader/icon_rT9_icon.ico | Bin 34494 -> 0 bytes TwitchDownloader/packages.config | 10 - TwitchDownloaderWPF.sln | 31 + TwitchDownloaderWPF/App.config | 65 + TwitchDownloaderWPF/App.xaml | 14 + TwitchDownloaderWPF/App.xaml.cs | 17 + TwitchDownloaderWPF/ChatRoot.cs | 85 ++ TwitchDownloaderWPF/Images/peepoSad.png | Bin 0 -> 1437 bytes TwitchDownloaderWPF/Images/ppHop.gif | Bin 0 -> 6413 bytes TwitchDownloaderWPF/Images/ppOverheat.gif | Bin 0 -> 11923 bytes TwitchDownloaderWPF/InfoHelper.cs | 100 ++ TwitchDownloaderWPF/MainWindow.xaml | 30 + TwitchDownloaderWPF/MainWindow.xaml.cs | 90 ++ TwitchDownloaderWPF/PageChatDownload.xaml | 108 ++ TwitchDownloaderWPF/PageChatDownload.xaml.cs | 375 ++++++ TwitchDownloaderWPF/PageChatRender.xaml | 95 ++ TwitchDownloaderWPF/PageChatRender.xaml.cs | 1149 +++++++++++++++++ TwitchDownloaderWPF/PageClipDownload.xaml | 88 ++ TwitchDownloaderWPF/PageClipDownload.xaml.cs | 187 +++ TwitchDownloaderWPF/PageVodDownload.xaml | 110 ++ .../PageVodDownload.xaml.cs | 440 ++++--- .../Properties/AssemblyInfo.cs | 23 +- .../Properties/Resources.Designer.cs | 10 - .../Properties/Resources.resx | 17 +- .../Properties/Settings.Designer.cs | 128 +- .../Properties/Settings.settings | 48 + .../IG/IG.MSControls.Core.Implicit.xaml | 898 +++++++++++++ .../IG/IG.MSControls.Toolkit.Implicit.xaml | 957 ++++++++++++++ .../Themes/IG/Styles.Shared.xaml | 788 +++++++++++ TwitchDownloaderWPF/Themes/IG/Styles.WPF.xaml | 717 ++++++++++ .../Themes/IG/Theme.Colors.xaml | 99 ++ TwitchDownloaderWPF/TwitchDownloader.csproj | 281 ++++ TwitchDownloaderWPF/icon_zps_icon.ico | Bin 0 -> 21011 bytes TwitchDownloaderWPF/packages.config | 14 + 58 files changed, 6727 insertions(+), 6066 deletions(-) delete mode 100644 TwitchDownloader.sln delete mode 100644 TwitchDownloader/App.config delete mode 100644 TwitchDownloader/Program.cs delete mode 100644 TwitchDownloader/Properties/Settings.settings delete mode 100644 TwitchDownloader/Resources/hypers.png delete mode 100644 TwitchDownloader/TwitchDownloader.csproj delete mode 100644 TwitchDownloader/frmAbout.Designer.cs delete mode 100644 TwitchDownloader/frmAbout.cs delete mode 100644 TwitchDownloader/frmAbout.resx delete mode 100644 TwitchDownloader/frmChatDownload.Designer.cs delete mode 100644 TwitchDownloader/frmChatDownload.cs delete mode 100644 TwitchDownloader/frmChatDownload.resx delete mode 100644 TwitchDownloader/frmChatRender.Designer.cs delete mode 100644 TwitchDownloader/frmChatRender.cs delete mode 100644 TwitchDownloader/frmChatRender.resx delete mode 100644 TwitchDownloader/frmClipDownload.Designer.cs delete mode 100644 TwitchDownloader/frmClipDownload.cs delete mode 100644 TwitchDownloader/frmClipDownload.resx delete mode 100644 TwitchDownloader/frmMain.Designer.cs delete mode 100644 TwitchDownloader/frmMain.cs delete mode 100644 TwitchDownloader/frmMain.resx delete mode 100644 TwitchDownloader/frmVodDownload.Designer.cs delete mode 100644 TwitchDownloader/frmVodDownload.resx delete mode 100644 TwitchDownloader/icon_rT9_icon.ico delete mode 100644 TwitchDownloader/packages.config create mode 100644 TwitchDownloaderWPF.sln create mode 100644 TwitchDownloaderWPF/App.config create mode 100644 TwitchDownloaderWPF/App.xaml create mode 100644 TwitchDownloaderWPF/App.xaml.cs create mode 100644 TwitchDownloaderWPF/ChatRoot.cs create mode 100644 TwitchDownloaderWPF/Images/peepoSad.png create mode 100644 TwitchDownloaderWPF/Images/ppHop.gif create mode 100644 TwitchDownloaderWPF/Images/ppOverheat.gif create mode 100644 TwitchDownloaderWPF/InfoHelper.cs create mode 100644 TwitchDownloaderWPF/MainWindow.xaml create mode 100644 TwitchDownloaderWPF/MainWindow.xaml.cs create mode 100644 TwitchDownloaderWPF/PageChatDownload.xaml create mode 100644 TwitchDownloaderWPF/PageChatDownload.xaml.cs create mode 100644 TwitchDownloaderWPF/PageChatRender.xaml create mode 100644 TwitchDownloaderWPF/PageChatRender.xaml.cs create mode 100644 TwitchDownloaderWPF/PageClipDownload.xaml create mode 100644 TwitchDownloaderWPF/PageClipDownload.xaml.cs create mode 100644 TwitchDownloaderWPF/PageVodDownload.xaml rename TwitchDownloader/frmVodDownload.cs => TwitchDownloaderWPF/PageVodDownload.xaml.cs (50%) rename {TwitchDownloader => TwitchDownloaderWPF}/Properties/AssemblyInfo.cs (52%) rename {TwitchDownloader => TwitchDownloaderWPF}/Properties/Resources.Designer.cs (88%) rename {TwitchDownloader => TwitchDownloaderWPF}/Properties/Resources.resx (84%) rename {TwitchDownloader => TwitchDownloaderWPF}/Properties/Settings.Designer.cs (55%) create mode 100644 TwitchDownloaderWPF/Properties/Settings.settings create mode 100644 TwitchDownloaderWPF/Themes/IG/IG.MSControls.Core.Implicit.xaml create mode 100644 TwitchDownloaderWPF/Themes/IG/IG.MSControls.Toolkit.Implicit.xaml create mode 100644 TwitchDownloaderWPF/Themes/IG/Styles.Shared.xaml create mode 100644 TwitchDownloaderWPF/Themes/IG/Styles.WPF.xaml create mode 100644 TwitchDownloaderWPF/Themes/IG/Theme.Colors.xaml create mode 100644 TwitchDownloaderWPF/TwitchDownloader.csproj create mode 100644 TwitchDownloaderWPF/icon_zps_icon.ico create mode 100644 TwitchDownloaderWPF/packages.config diff --git a/README.md b/README.md index 21e1c2c2..c8843d76 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,14 @@ + ### TwitchDownloader A Twitch VOD/Clip/Chat downloader I wrote, as well as a chat render feature -![](https://i.imgur.com/XXnLKyT.gif) +![](https://i.imgur.com/8XyVD00.gifv) ## Chat render example -![](https://i.imgur.com/OhS6XAU.gif) +![](https://i.imgur.com/rRw4bHq.gifv) + +## Video Demonstration (older version, same concept) +https://www.youtube.com/watch?v=0W3MhfhnYjk ## What can this do? - Can download Twitch VODs @@ -12,14 +16,6 @@ A Twitch VOD/Clip/Chat downloader I wrote, as well as a chat render feature - Can download chat for VODS and Clips, in either a [JSON with all the information](https://pastebin.com/raw/YDgRe6X4) or a [simple text file](https://pastebin.com/raw/016azeQX) - Can use a previously generated JSON chat file, to render the chat with FFZ and BTTV support (including GIFS) -## Why does it look so ugly? -Because I made this in 2 days and I wanted to put it up before school starts :( (tomorrow as of publishing this) - ## Things still needed to be done -- Proper error handling (Just crashes most of the time currently) -- Proper input validation -- Have the text log actually log stuff -- Better emoji support for chat rendering -- ~~Fix some GIFs that play at the wrong speed~~ -- More options for chat rendering -- Make it look less ugly +- Fix bugs that slipped by +- More options for chat rendering \ No newline at end of file diff --git a/TwitchDownloader.sln b/TwitchDownloader.sln deleted file mode 100644 index 0d8c58cd..00000000 --- a/TwitchDownloader.sln +++ /dev/null @@ -1,37 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.28803.352 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TwitchDownloader", "TwitchDownloader\TwitchDownloader.csproj", "{11768826-A184-4E62-B77C-2CF818242384}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Debug|x64 = Debug|x64 - Debug|x86 = Debug|x86 - Release|Any CPU = Release|Any CPU - Release|x64 = Release|x64 - Release|x86 = Release|x86 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {11768826-A184-4E62-B77C-2CF818242384}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {11768826-A184-4E62-B77C-2CF818242384}.Debug|Any CPU.Build.0 = Debug|Any CPU - {11768826-A184-4E62-B77C-2CF818242384}.Debug|x64.ActiveCfg = Debug|x64 - {11768826-A184-4E62-B77C-2CF818242384}.Debug|x64.Build.0 = Debug|x64 - {11768826-A184-4E62-B77C-2CF818242384}.Debug|x86.ActiveCfg = Debug|x86 - {11768826-A184-4E62-B77C-2CF818242384}.Debug|x86.Build.0 = Debug|x86 - {11768826-A184-4E62-B77C-2CF818242384}.Release|Any CPU.ActiveCfg = Release|Any CPU - {11768826-A184-4E62-B77C-2CF818242384}.Release|Any CPU.Build.0 = Release|Any CPU - {11768826-A184-4E62-B77C-2CF818242384}.Release|x64.ActiveCfg = Release|x64 - {11768826-A184-4E62-B77C-2CF818242384}.Release|x64.Build.0 = Release|x64 - {11768826-A184-4E62-B77C-2CF818242384}.Release|x86.ActiveCfg = Release|x86 - {11768826-A184-4E62-B77C-2CF818242384}.Release|x86.Build.0 = Release|x86 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {11217EF1-6708-48D6-BF64-2C2851D4F1F3} - EndGlobalSection -EndGlobal diff --git a/TwitchDownloader/App.config b/TwitchDownloader/App.config deleted file mode 100644 index e801ab20..00000000 --- a/TwitchDownloader/App.config +++ /dev/null @@ -1,53 +0,0 @@ - - - - -
- - - - - - - - - - - - #111111 - - - 500 - - - 300 - - - True - - - True - - - False - - - 9 - - - 1 - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/TwitchDownloader/Program.cs b/TwitchDownloader/Program.cs deleted file mode 100644 index de5bfd8e..00000000 --- a/TwitchDownloader/Program.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using System.Windows.Forms; - -namespace TwitchDownloader -{ - static class Program - { - /// - /// The main entry point for the application. - /// - [STAThread] - static void Main() - { - Application.EnableVisualStyles(); - Application.SetCompatibleTextRenderingDefault(false); - Application.Run(new frmMain()); - } - } -} diff --git a/TwitchDownloader/Properties/Settings.settings b/TwitchDownloader/Properties/Settings.settings deleted file mode 100644 index 78321ba5..00000000 --- a/TwitchDownloader/Properties/Settings.settings +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - #111111 - - - 500 - - - 300 - - - True - - - True - - - False - - - 9 - - - 1 - - - - - - \ No newline at end of file diff --git a/TwitchDownloader/Resources/hypers.png b/TwitchDownloader/Resources/hypers.png deleted file mode 100644 index a90bc34ab78ed63bced6fb89645588c16dcb4416..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19561 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 - - - - Debug - AnyCPU - {11768826-A184-4E62-B77C-2CF818242384} - WinExe - TwitchDownloader - TwitchDownloader - v4.7.2 - 512 - true - true - - - - - AnyCPU - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - true - - - AnyCPU - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - true - - - true - bin\x86\Debug\ - DEBUG;TRACE - full - x86 - prompt - MinimumRecommendedRules.ruleset - true - true - - - bin\x86\Release\ - TRACE - true - pdbonly - x86 - prompt - MinimumRecommendedRules.ruleset - true - true - - - true - bin\x64\Debug\ - DEBUG;TRACE - full - x64 - prompt - MinimumRecommendedRules.ruleset - true - true - - - bin\x64\Release\ - TRACE - true - pdbonly - x64 - prompt - MinimumRecommendedRules.ruleset - true - true - - - icon_rT9_icon.ico - - - - ..\packages\Accord.3.8.0\lib\net462\Accord.dll - - - ..\packages\Accord.Video.3.8.0\lib\net462\Accord.Video.dll - - - ..\packages\Accord.Video.FFMPEG.x64.3.8.0\lib\net462\Accord.Video.FFMPEG.x64.dll - - - ..\packages\Microsoft.WindowsAPICodePack-Core.1.1.0.2\lib\Microsoft.WindowsAPICodePack.dll - - - ..\packages\Microsoft.WindowsAPICodePack-Shell.1.1.0.0\lib\Microsoft.WindowsAPICodePack.Shell.dll - - - ..\packages\Microsoft.WindowsAPICodePack-Shell.1.1.0.0\lib\Microsoft.WindowsAPICodePack.ShellExtensions.dll - - - ..\packages\Newtonsoft.Json.12.0.2\lib\net45\Newtonsoft.Json.dll - - - - - - - - - - - - - - ..\packages\Xabe.FFmpeg.3.4.0\lib\netstandard2.0\Xabe.FFmpeg.dll - - - - - Form - - - frmAbout.cs - - - Form - - - frmChatDownload.cs - - - Form - - - frmChatRender.cs - - - Form - - - frmClipDownload.cs - - - Form - - - frmMain.cs - - - Form - - - frmVodDownload.cs - - - - - frmAbout.cs - - - frmChatDownload.cs - - - frmChatRender.cs - - - frmClipDownload.cs - - - frmMain.cs - - - frmVodDownload.cs - - - ResXFileCodeGenerator - Resources.Designer.cs - Designer - - - True - Resources.resx - True - - - - SettingsSingleFileGenerator - Settings.Designer.cs - - - True - Settings.settings - True - - - - - - - - - - - - - - - - This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - - - \ No newline at end of file diff --git a/TwitchDownloader/frmAbout.Designer.cs b/TwitchDownloader/frmAbout.Designer.cs deleted file mode 100644 index cf07004e..00000000 --- a/TwitchDownloader/frmAbout.Designer.cs +++ /dev/null @@ -1,76 +0,0 @@ -namespace TwitchDownloader -{ - partial class frmAbout - { - /// - /// 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() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frmAbout)); - this.label1 = new System.Windows.Forms.Label(); - this.pictureBox1 = new System.Windows.Forms.PictureBox(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); - this.SuspendLayout(); - // - // label1 - // - this.label1.Location = new System.Drawing.Point(12, 9); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(466, 343); - this.label1.TabIndex = 0; - this.label1.Text = "Made by Lewis Pardo (@lay295)\r\n\r\nDownload Icon made by Freepik from www.flaticon." + - "com\r\n\r\nTwitter Emojis\r\nhttps://twemoji.twitter.com/"; - // - // pictureBox1 - // - this.pictureBox1.Image = global::TwitchDownloader.Properties.Resources.hypers; - this.pictureBox1.Location = new System.Drawing.Point(414, 9); - this.pictureBox1.Name = "pictureBox1"; - this.pictureBox1.Size = new System.Drawing.Size(64, 64); - this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; - this.pictureBox1.TabIndex = 1; - this.pictureBox1.TabStop = false; - // - // frmAbout - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(490, 361); - this.Controls.Add(this.pictureBox1); - this.Controls.Add(this.label1); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.Name = "frmAbout"; - this.Text = "About"; - ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.Label label1; - private System.Windows.Forms.PictureBox pictureBox1; - } -} \ No newline at end of file diff --git a/TwitchDownloader/frmAbout.cs b/TwitchDownloader/frmAbout.cs deleted file mode 100644 index e8d67975..00000000 --- a/TwitchDownloader/frmAbout.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Forms; - -namespace TwitchDownloader -{ - public partial class frmAbout : Form - { - public frmAbout() - { - InitializeComponent(); - } - } -} diff --git a/TwitchDownloader/frmAbout.resx b/TwitchDownloader/frmAbout.resx deleted file mode 100644 index 66003700..00000000 --- a/TwitchDownloader/frmAbout.resx +++ /dev/null @@ -1,700 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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 - - - - - AAABAAUAEBAAAAEAIABoBAAAVgAAABgYAAABACAAiAkAAL4EAAAgIAAAAQAgAKgQAABGDgAAMDAAAAEA - IACoJQAA7h4AAEBAAAABACAAKEIAAJZEAAAoAAAAEAAAACAAAAABACAAAAAAAAAEAADXDQAA1w0AAAAA - AAAAAAAAAAAAmQAAAPsAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD7AAAAmQAAAMoAAAD/AAAA9gAAAO8AAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAA - AO8AAAD2AAAA/wAAAMoAAADMAAAA/wAAAIwAAAA1AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAA - ADgAAAA1AAAAjAAAAP8AAADMAAAAzAAAAP8AAABrAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAGsAAAD/AAAAzAAAAMwAAAD/AAAAbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAABsAAAA/wAAAMwAAACWAAAAvgAAAE8AAAAAAAAAAAAAAAAAAAAAAAAABwAA - AAkAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAL4AAACWAAAACgAAAAwAAAAFAAAAAAAAAAAAAAAAAAAABQAA - AHcAAACLAAAADAAAAAAAAAAAAAAAAAAAAAUAAAAMAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AFsAAADuAAAA9wAAAG4AAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AEEAAADfAAAA/wAAAP8AAADmAAAASAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - ACUAAADHAAAA/wAAAP8AAAD/AAAA/wAAAMsAAAAmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAjAAAAWgAAAK0AAAD/AAAA/wAAAL4AAABwAAAAKwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAB/AAAA/wAAAP8AAACJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAP8AAAD/AAAAigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH8AAAD/AAAA/wAAAIoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAA/wAAAP8AAACKAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAP8AAAD/AAAAiAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/4AAAf+AAAHngAABw4AAD8HwAA+B8AAPAPAADwDwAA/D8AAPw/ - AAD8PwAA/D8AAPw/AAAoAAAAGAAAADAAAAABACAAAAAAAAAJAADXDQAA1w0AAAAAAAAAAAAAAAAATgAA - ANwAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAANwAAABOAAAAoAAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAACgAAAArAAAAP8AAAD/AAAA+gAAAPMAAADzAAAA8wAAAPMAAADzAAAA8wAAAPMAAADzAAAA8wAA - APMAAADzAAAA8wAAAPMAAADzAAAA8wAAAPMAAAD6AAAA/wAAAP8AAACsAAAArAAAAP8AAAD/AAAAtQAA - AEkAAABIAAAASAAAAEgAAABIAAAASAAAAEgAAABIAAAASAAAAEgAAABIAAAASAAAAEgAAABIAAAASAAA - AEkAAAC1AAAA/wAAAP8AAACsAAAArAAAAP8AAAD/AAAAlwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAACXAAAA/wAAAP8AAACsAAAArAAA - AP8AAAD/AAAAmAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAIAAACYAAAA/wAAAP8AAACsAAAArAAAAP8AAAD/AAAAmAAAAAIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACYAAAA/wAA - AP8AAACsAAAArAAAAP8AAAD/AAAAmAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACZAAAA/wAAAP8AAACsAAAAcAAAAKgAAACpAAAAYwAA - AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAADQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAEAAABjAAAAqQAAAKgAAABwAAAABgAAAAgAAAAIAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAgAAAB6AAAAlgAAABUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAACAAAAAgAAAAGAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAGEAAADuAAAA+gAAAIQAAAAIAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAARQAAAN4AAAD/AAAA/wAAAO0AAABdAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxAAAAzAAAAP8AAAD/AAAA/wAA - AP8AAADZAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAB4AAAC0AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAuQAAAB8AAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAJYAAAD7AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/AAAAJYAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAFwAAAHIAAAB/AAAApgAAAPkAAAD/AAAA/wAAAPwAAADCAAAAnwAA - AI0AAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAATgAAAPIAAAD/AAAA/wAAAPgAAABfAAAAAgAAAAUAAAABAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATwAAAPIAAAD/AAAA/wAA - APgAAABcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAATwAAAPIAAAD/AAAA/wAAAPgAAABcAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATwAA - APIAAAD/AAAA/wAAAPgAAABcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATwAAAPIAAAD/AAAA/wAAAPgAAABcAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAATwAAAPIAAAD/AAAA/wAAAPgAAABcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATwAAAPIAAAD/AAAA/wAA - APgAAABcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAASgAAAO8AAAD/AAAA/wAAAPYAAABXAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/4AAH/+AAB//gAAf/4AAH5+AAD8PwAP+B - /wD/gP8A/wD/AP4AfwD8AD8A/AA/AP+APwD/gf8A/4H/AP+B/wD/gf8A/4H/AP+B/wD/gf8AKAAAACAA - AABAAAAAAQAgAAAAAAAAEAAA1w0AANcNAAAAAAAAAAAAAAAAABwAAACfAAAA9QAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA9AAAAJ4AAAAcAAAAaQAAAPMAAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA8wAAAGgAAACJAAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAiQAA - AIoAAAD/AAAA/wAAAP8AAAD9AAAA9gAAAPUAAAD2AAAA9gAAAPYAAAD2AAAA9gAAAPYAAAD2AAAA9gAA - APYAAAD2AAAA9gAAAPYAAAD2AAAA9gAAAPYAAAD2AAAA9gAAAPYAAAD1AAAA9gAAAP0AAAD/AAAA/wAA - AP8AAACKAAAAigAAAP8AAAD/AAAA/wAAANQAAABjAAAAVwAAAFgAAABYAAAAWAAAAFgAAABYAAAAWAAA - AFgAAABYAAAAWAAAAFgAAABYAAAAWAAAAFgAAABYAAAAWAAAAFgAAABYAAAAWAAAAFcAAABkAAAA1AAA - AP8AAAD/AAAA/wAAAIoAAACKAAAA/wAAAP8AAAD/AAAAvQAAABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - ABEAAAC9AAAA/wAAAP8AAAD/AAAAigAAAIoAAAD/AAAA/wAAAP8AAAC+AAAAEgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAEgAAAL4AAAD/AAAA/wAAAP8AAACKAAAAigAAAP8AAAD/AAAA/wAAAL4AAAASAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAASAAAAvgAAAP8AAAD/AAAA/wAAAIoAAACKAAAA/wAAAP8AAAD/AAAAvgAA - ABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAC+AAAA/wAAAP8AAAD/AAAAigAAAIoAAAD/AAAA/wAA - AP8AAAC+AAAAEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgAAAL4AAAD/AAAA/wAAAP8AAACKAAAAiQAA - AP4AAAD+AAAA/wAAAL0AAAARAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAvQAAAP8AAAD+AAAA/gAA - AIkAAABPAAAAkgAAAJIAAACTAAAAbAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAALAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAABsAAAAkwAA - AJIAAACSAAAATwAAAAQAAAAHAAAABwAAAAcAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAADAAAAHsAAACcAAAAIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAUAAAAHAAAABwAAAAcAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAYAAABmAAAA7AAAAPsAAACUAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAACAAAATAAAAN0AAAD/AAAA/wAAAPEAAAByAAAACAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADUAAADJAAAA/wAAAP8AAAD/AAAA/wAAAOAAAABQAAAAAQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlAAAAtQAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AMkAAAAzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFwAAAJwAAAD6AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/QAAAKgAAAAbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAACBAAAA8gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA9AAAAIIAAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAYwAAAOgAAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA6AAAAF0AAAACAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAABxAAAAoAAA - AJ4AAACwAAAA7gAAAP8AAAD/AAAA/wAAAP8AAAD4AAAA0QAAAMMAAADFAAAAiQAAAAsAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA - AAgAAAAKAAAACAAAADUAAADUAAAA/wAAAP8AAAD/AAAA/wAAAOQAAABLAAAAFwAAABoAAAATAAAAAgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAALAAAANIAAAD/AAAA/wAAAP8AAAD/AAAA4QAAADcAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtAAAA0gAAAP8AAAD/AAAA/wAAAP8AAADhAAAAOAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC0AAADSAAAA/wAAAP8AAAD/AAAA/wAA - AOEAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALQAAANIAAAD/AAAA/wAA - AP8AAAD/AAAA4QAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtAAAA0gAA - AP8AAAD/AAAA/wAAAP8AAADhAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AC0AAADSAAAA/wAAAP8AAAD/AAAA/wAAAOEAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAALQAAANIAAAD/AAAA/wAAAP8AAAD/AAAA4QAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAtAAAA0gAAAP8AAAD/AAAA/wAAAP8AAADhAAAAOAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC0AAADSAAAA/wAAAP8AAAD/AAAA/wAAAOEAAAA4AAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJwAAAMoAAAD/AAAA/wAAAP8AAAD/AAAA2QAA - ADIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAP//8AD///AA///wAP//8AD///AA///wAP+f8AH/D/g//gf///wD///8Af//+AH///A - A///gAH//wAA//8AAP//AAD///AP///wD///8A////AP///wD///8A////AP///wD///8A////AP/ygA - AAAwAAAAYAAAAAEAIAAAAAAAACQAANcNAADXDQAAAAAAAAAAAAAAAAAAAAAALAAAAJwAAADqAAAA/QAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/QAAAOkAAACaAAAAKwAAAAAAAAAXAAAAmwAA - APUAAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD1AAAAmQAA - ABYAAAA6AAAA4QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA4QAAADoAAABIAAAA9QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA9QAAAEgAAABJAAAA9gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA9gAAAEkAAABJAAAA9gAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA+gAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAA - APgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAA - APgAAAD4AAAA+AAAAPgAAAD4AAAA+gAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA9gAAAEkAAABJAAAA9gAA - AP8AAAD/AAAA/wAAAP8AAADzAAAAoQAAAHQAAAB2AAAAdgAAAHYAAAB2AAAAdgAAAHYAAAB2AAAAdgAA - AHYAAAB2AAAAdgAAAHYAAAB2AAAAdgAAAHYAAAB2AAAAdgAAAHYAAAB2AAAAdgAAAHYAAAB2AAAAdgAA - AHYAAAB2AAAAdgAAAHYAAAB2AAAAdgAAAHYAAAB0AAAAogAAAPMAAAD/AAAA/wAAAP8AAAD/AAAA9gAA - AEkAAABJAAAA9gAAAP8AAAD/AAAA/wAAAP8AAADpAAAAVQAAAAIAAAAFAAAABQAAAAUAAAAFAAAABQAA - AAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAA - AAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAADAAAAVQAAAOkAAAD/AAAA/wAA - AP8AAAD/AAAA9gAAAEkAAABJAAAA9gAAAP8AAAD/AAAA/wAAAP8AAADpAAAAUQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAA - AOkAAAD/AAAA/wAAAP8AAAD/AAAA9gAAAEkAAABJAAAA9gAAAP8AAAD/AAAA/wAAAP8AAADpAAAAUgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAUgAAAOkAAAD/AAAA/wAAAP8AAAD/AAAA9gAAAEkAAABJAAAA9gAAAP8AAAD/AAAA/wAA - AP8AAADpAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAOkAAAD/AAAA/wAAAP8AAAD/AAAA9gAAAEkAAABJAAAA9gAA - AP8AAAD/AAAA/wAAAP8AAADpAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAOkAAAD/AAAA/wAAAP8AAAD/AAAA9gAA - AEkAAABJAAAA9gAAAP8AAAD/AAAA/wAAAP8AAADpAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAOkAAAD/AAAA/wAA - AP8AAAD/AAAA9gAAAEkAAABJAAAA9gAAAP8AAAD/AAAA/wAAAP8AAADpAAAAUgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAA - AOkAAAD/AAAA/wAAAP8AAAD/AAAA9gAAAEkAAABJAAAA9gAAAP8AAAD/AAAA/wAAAP8AAADpAAAAUgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAUgAAAOkAAAD/AAAA/wAAAP8AAAD/AAAA9gAAAEkAAABJAAAA9gAAAP8AAAD/AAAA/wAA - AP8AAADpAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAOkAAAD/AAAA/wAAAP8AAAD/AAAA9gAAAEkAAABDAAAA4gAA - AOsAAADrAAAA6wAAAOwAAADWAAAASwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASwAAANYAAADsAAAA6wAAAOsAAADrAAAA4gAA - AEMAAAAgAAAAbQAAAHEAAABxAAAAcQAAAHEAAABnAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAdAAAABAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAAAAGcAAABxAAAAcQAA - AHEAAABxAAAAbQAAACAAAAABAAAABQAAAAUAAAAFAAAABQAAAAUAAAAEAAAAAgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFwAAAHwAAACeAAAAPgAA - AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA - AAQAAAAFAAAABQAAAAUAAAAFAAAABQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAbwAA - AOgAAAD7AAAAqwAAAC8AAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAkAAABYAAAA2AAAAP8AAAD/AAAA9AAAAJEAAAAeAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAABgAAAEMAAADHAAAA/gAAAP8AAAD/AAAA/wAAAOwAAAB1AAAAEgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAACAAAAMAAAAK8AAAD9AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADXAAAAVwAA - AAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAmQAAAPYAAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD9AAAAvwAAAD0AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABcAAACLAAAA8AAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA+gAAAKkAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAHIAAADjAAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPAAAACJAAAAGAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAXAAA - ANQAAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADdAAAAZwAA - AAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAIAAABIAAAAxQAAAPwAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD8AAAAyQAAAEoAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAQAAADMAAACzAAAA9gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA9wAAALAAAAAuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAJoAAADyAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPEAAACQAAAAGAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPQAAAK4AAADHAAAAxwAAAMcAAADKAAAA4wAA - APwAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA9wAAAO0AAADrAAAA6wAAAOsAAADKAAAARAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFQAAADUAAAA4AAAAOAAA - ADcAAABDAAAAmwAAAPQAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD8AAAAvgAAAGoAAABeAAAAXwAA - AF8AAABWAAAAIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAANAAAAfgAAAPEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD6AAAAmQAA - ABQAAAABAAAAAgAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAfwAAAPEAAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD6AAAAmAAAABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAfwAAAPEAAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD6AAAAmAAAABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAfwAA - APEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD6AAAAmAAAABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAOAAAAfwAAAPEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD6AAAAmAAAABIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAOAAAAfwAAAPEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD6AAAAmAAA - ABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAfwAAAPEAAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD6AAAAmAAAABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAfwAAAPEAAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD6AAAAmAAAABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAfwAA - APEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD6AAAAmAAAABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAOAAAAfwAAAPEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD6AAAAmAAAABIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAOAAAAfwAAAPEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD6AAAAmAAA - ABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAfwAAAPEAAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD6AAAAmAAAABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAfwAAAPEAAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD6AAAAmAAAABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAgAAA - APEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD6AAAAmAAAABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAOAAAAfgAAAPEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD5AAAAlwAAABIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAKAAAAbAAAAOgAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADzAAAAhQAA - AA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAACAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAP////8AAAAA/////wAAAAD/////AAAAAP////8AAAAA/////wAAAAD/ - ////AAAAAP////8AAAAA/////wAAAAD/////AAAAAP/+P/8AAAAA//wf/wAAAP//+A///wAA///wB/// - AAD//+AH//8AAP//wAP//wAA///AAf//AAD//4AB//8AAP//AAD//wAA//4AAH//AAD//AAAP/8AAP/4 - AAA//wAA//gAAB//AAD/+AAAH/8AAP/4AAAf/wAA///AAD//AAD//8AD//8AAP//wAP//wAA///AA/// - AAD//8AD//8AAP//wAP//wAA///AA///AAD//8AD//8AAP//wAP//wAA///AA///AAD//8AD//8AAP// - wAP//wAA///AA///AAD//8AD//8AAP//wAP//wAA///AA///AAAoAAAAQAAAAIAAAAABACAAAAAAAABA - AADXDQAA1w0AAAAAAAAAAAAAAAAAAAAAAAAAAAAhAAAAkgAAAN8AAAD6AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAPoAAADeAAAAkAAAACAAAAAAAAAAAAAAAAAAAAAjAAAAyAAAAPUAAAD9AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/QAAAPQAAADHAAAAIQAAAAAAAAAAAAAAlAAA - APAAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA8AAA - AJEAAAAAAAAAAAAAANgAAAD8AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAPwAAADXAAAAAAAAAAQAAADsAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA7AAAAAQAAAAFAAAA7gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAO4AAAAFAAAABQAA - AO4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAADuAAAABQAAAAUAAADuAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA7gAAAAUAAAAFAAAA7gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAADUAAAAkgAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAA - AJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAA - AJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAA - AJMAAADUAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAO4AAAAFAAAABQAAAO4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAAoAAAABAAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAA - AAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAA - AAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAA - AAoAAAAKAAAACgAAAAoAAAAQAAAAoQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADuAAAABQAA - AAUAAADuAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAJ0AAAAGAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAJ0AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA7gAAAAUAAAAFAAAA7gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACdAAAABgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAACdAAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAO4AAAAFAAAABQAAAO4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAAnQAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAHAAAAnQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADuAAAABQAAAAUAAADuAAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAJ0AAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAJ0AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA7gAA - AAUAAAAFAAAA7gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACdAAAABgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAACdAAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAO4AAAAFAAAABQAAAO4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAnQAA - AAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAnQAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADuAAAABQAAAAUAAADuAAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAJ0AAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAABwAAAJ0AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA7gAAAAUAAAAFAAAA7gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACdAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAACdAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AO4AAAAFAAAABQAAAO4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAnQAAAAYAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAnQAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAADuAAAABQAAAAUAAADuAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AJ0AAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAA - AJ0AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA7gAAAAUAAAAFAAAA7gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAACdAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAcAAACdAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAO4AAAAFAAAABQAA - AO4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAnQAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAnQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAADuAAAABQAAAAQAAADIAAAA1gAAANYAAADWAAAA1gAAANYAAADWAAAA1gAAAIQAAAAFAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAIQAAADWAAAA1gAA - ANYAAADWAAAA1gAAANYAAADWAAAAyAAAAAQAAAACAAAAUgAAAFcAAABXAAAAVwAAAFcAAABXAAAAVwAA - AFcAAAA2AAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAADwAAACkAAAAEAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAIAAAA2AAAAVwAAAFcAAABXAAAAVwAAAFcAAABXAAAAVwAAAFIAAAACAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAFwAAAH0AAACgAAAATgAA - AAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAEgAA - AHEAAADyAAAA/wAAAMUAAAA/AAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAADgAAAFgAAADjAAAA/wAAAP8AAAD/AAAAqAAAADAAAAAGAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAEYAAADOAAAA/wAAAP8AAAD/AAAA/wAAAPwAAACLAAAAJAAA - AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAADgAAACzAAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA8wAAAG8AAAAWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAACoAAACXAAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADcAAAAVgAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA - ABoAAAB8AAAA+QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAALsAAABBAAAAAwAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAwAAABrAAAA7QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAAngAAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAABlAAAA4QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPgAAACJAAAAFwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAABUAAAAyQAAAP0AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA5AAAAHQAAAAIAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABDAAAAtgAA - APkAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - APwAAADKAAAAWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAsAAAApAAAAPMAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA9wAAALAAAAA3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAaAAAAkgAAAOkAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADtAAAAmAAAABsAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAfgAAAN8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AOAAAAB9AAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAZwAAANUAAAD7AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD7AAAA0AAAAFwAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASwAA - AMgAAAD4AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPYAAAC8AAAANgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAIoAAADSAAAA3wAAAN8AAADfAAAA3wAAAN8AAADnAAAA9wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA7gAA - AJIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVAAAAbQAAAHAAAABwAAAAcAAAAHAAAABwAAAAlAAA - ANsAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA9AAAAMMAAACnAAAApwAA - AKcAAACnAAAApwAAAKIAAAB8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAEAAAAC/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AOEAAABhAAAAFwAAABcAAAAXAAAAFwAAABcAAAAUAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAvwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAADeAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAL8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA3gAAAFIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AEAAAAC/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAN4AAABSAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAABAAAAAvwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAADeAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAL8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA3gAAAFIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAC/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAN4AAABSAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAABAAAAAvwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADeAAAAUgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAL8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA3gAAAFIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAC/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAN4AAABSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAvwAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADeAAAAUgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAQAAAAL8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA3gAA - AFIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAC/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAN4AAABSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAvwAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADeAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAA - AL8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA3gAAAFIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAEAAAAC/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AN4AAABSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAvwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAADeAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAL8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA3gAAAFIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AEAAAAC/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAN4AAABSAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAABAAAAAvwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAADeAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAL0AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA2wAAAFEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC0AAACeAAAA+QAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAL0AAAA+AAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAADgAAAAAAAAAGAAAAAAAAAAYAAAAAAAAABAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB//////+AAAH//////4AAAf - //////gAAB//////+AAAH//////4AAAf//////gAAB//////+AAAH//////4AAAf//////gAAB////// - +AAAH//////4AAAf//////gAAB//////+AAAH//8P//4AP////gf////////8A/////////wB/////// - /+AD////////wAP///////+AAf///////wAA////////AAD///////4AAH///////AAAP//////8AAA/ - //////gAAB//////8AAAD//////gAAAH/////8AAAAP/////wAAAA//////AAAAD/////8AAAAP///// - /4AAA///////gAH///////+AAf///////4AB////////gAH///////+AAf///////4AB////////gAH/ - //////+AAf///////4AB////////gAH///////+AAf///////4AB////////gAH///////+AAf////// - /4AB////////gAH///////+AAf///////4AB////////gAH///////+AAf///////4AB//// - - - \ No newline at end of file diff --git a/TwitchDownloader/frmChatDownload.Designer.cs b/TwitchDownloader/frmChatDownload.Designer.cs deleted file mode 100644 index 751feae4..00000000 --- a/TwitchDownloader/frmChatDownload.Designer.cs +++ /dev/null @@ -1,484 +0,0 @@ -namespace TwitchDownloader -{ - partial class frmChatDownload - { - /// - /// 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.statusStrip = new System.Windows.Forms.StatusStrip(); - this.toolStatus = new System.Windows.Forms.ToolStripStatusLabel(); - this.toolProgressBar = new System.Windows.Forms.ToolStripProgressBar(); - this.btnDownload = new System.Windows.Forms.Button(); - this.label6 = new System.Windows.Forms.Label(); - this.textLog = new System.Windows.Forms.TextBox(); - this.labelCreated = new System.Windows.Forms.Label(); - this.labelStreamer = new System.Windows.Forms.Label(); - this.label16 = new System.Windows.Forms.Label(); - this.textTitle = new System.Windows.Forms.TextBox(); - this.label15 = new System.Windows.Forms.Label(); - this.label14 = new System.Windows.Forms.Label(); - this.pictureThumb = new System.Windows.Forms.PictureBox(); - this.label7 = new System.Windows.Forms.Label(); - this.btnGetInfo = new System.Windows.Forms.Button(); - this.textUrl = new System.Windows.Forms.TextBox(); - this.label1 = new System.Windows.Forms.Label(); - this.radioJSON = new System.Windows.Forms.RadioButton(); - this.radioTXT = new System.Windows.Forms.RadioButton(); - this.label12 = new System.Windows.Forms.Label(); - this.label13 = new System.Windows.Forms.Label(); - this.numEndSecond = new System.Windows.Forms.NumericUpDown(); - this.numEndMinute = new System.Windows.Forms.NumericUpDown(); - this.numEndHour = new System.Windows.Forms.NumericUpDown(); - this.label11 = new System.Windows.Forms.Label(); - this.label10 = new System.Windows.Forms.Label(); - this.numStartSecond = new System.Windows.Forms.NumericUpDown(); - this.numStartMinute = new System.Windows.Forms.NumericUpDown(); - this.numStartHour = new System.Windows.Forms.NumericUpDown(); - this.checkCropEnd = new System.Windows.Forms.CheckBox(); - this.checkCropStart = new System.Windows.Forms.CheckBox(); - this.label5 = new System.Windows.Forms.Label(); - this.panel2 = new System.Windows.Forms.Panel(); - this.backgroundDownloadManager = new System.ComponentModel.BackgroundWorker(); - this.statusStrip.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pictureThumb)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.numEndSecond)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.numEndMinute)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.numEndHour)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.numStartSecond)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.numStartMinute)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.numStartHour)).BeginInit(); - this.panel2.SuspendLayout(); - this.SuspendLayout(); - // - // statusStrip - // - this.statusStrip.ImageScalingSize = new System.Drawing.Size(20, 20); - this.statusStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.toolStatus, - this.toolProgressBar}); - this.statusStrip.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.HorizontalStackWithOverflow; - this.statusStrip.Location = new System.Drawing.Point(0, 368); - this.statusStrip.Name = "statusStrip"; - this.statusStrip.Size = new System.Drawing.Size(812, 22); - this.statusStrip.SizingGrip = false; - this.statusStrip.TabIndex = 66; - this.statusStrip.Text = "statusStrip1"; - // - // toolStatus - // - this.toolStatus.Name = "toolStatus"; - this.toolStatus.Size = new System.Drawing.Size(26, 17); - this.toolStatus.Text = "Idle"; - // - // toolProgressBar - // - this.toolProgressBar.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right; - this.toolProgressBar.Name = "toolProgressBar"; - this.toolProgressBar.RightToLeft = System.Windows.Forms.RightToLeft.Yes; - this.toolProgressBar.Size = new System.Drawing.Size(200, 16); - // - // btnDownload - // - this.btnDownload.Enabled = false; - this.btnDownload.Location = new System.Drawing.Point(369, 236); - this.btnDownload.Name = "btnDownload"; - this.btnDownload.Size = new System.Drawing.Size(111, 41); - this.btnDownload.TabIndex = 65; - this.btnDownload.Text = "Download"; - this.btnDownload.UseVisualStyleBackColor = true; - this.btnDownload.Click += new System.EventHandler(this.BtnDownload_Click); - // - // label6 - // - this.label6.AutoSize = true; - this.label6.Location = new System.Drawing.Point(606, 62); - this.label6.Name = "label6"; - this.label6.Size = new System.Drawing.Size(31, 13); - this.label6.TabIndex = 64; - this.label6.Text = "Log :"; - // - // textLog - // - this.textLog.Location = new System.Drawing.Point(609, 78); - this.textLog.Multiline = true; - this.textLog.Name = "textLog"; - this.textLog.Size = new System.Drawing.Size(175, 264); - this.textLog.TabIndex = 63; - // - // labelCreated - // - this.labelCreated.AutoSize = true; - this.labelCreated.Location = new System.Drawing.Point(91, 236); - this.labelCreated.Name = "labelCreated"; - this.labelCreated.Size = new System.Drawing.Size(0, 13); - this.labelCreated.TabIndex = 61; - // - // labelStreamer - // - this.labelStreamer.AutoSize = true; - this.labelStreamer.Location = new System.Drawing.Point(91, 214); - this.labelStreamer.Name = "labelStreamer"; - this.labelStreamer.Size = new System.Drawing.Size(0, 13); - this.labelStreamer.TabIndex = 62; - // - // label16 - // - this.label16.AutoSize = true; - this.label16.Location = new System.Drawing.Point(19, 62); - this.label16.Name = "label16"; - this.label16.Size = new System.Drawing.Size(62, 13); - this.label16.TabIndex = 60; - this.label16.Text = "Thumbnail :"; - // - // textTitle - // - this.textTitle.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.textTitle.Location = new System.Drawing.Point(22, 279); - this.textTitle.Multiline = true; - this.textTitle.Name = "textTitle"; - this.textTitle.ReadOnly = true; - this.textTitle.Size = new System.Drawing.Size(200, 63); - this.textTitle.TabIndex = 59; - // - // label15 - // - this.label15.AutoSize = true; - this.label15.Location = new System.Drawing.Point(22, 236); - this.label15.Name = "label15"; - this.label15.Size = new System.Drawing.Size(63, 13); - this.label15.TabIndex = 58; - this.label15.Text = "Created At :"; - // - // label14 - // - this.label14.AutoSize = true; - this.label14.Location = new System.Drawing.Point(30, 214); - this.label14.Name = "label14"; - this.label14.Size = new System.Drawing.Size(55, 13); - this.label14.TabIndex = 57; - this.label14.Text = "Streamer :"; - // - // pictureThumb - // - this.pictureThumb.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.pictureThumb.Location = new System.Drawing.Point(22, 78); - this.pictureThumb.Name = "pictureThumb"; - this.pictureThumb.Size = new System.Drawing.Size(200, 125); - this.pictureThumb.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; - this.pictureThumb.TabIndex = 56; - this.pictureThumb.TabStop = false; - // - // label7 - // - this.label7.AutoSize = true; - this.label7.Location = new System.Drawing.Point(52, 258); - this.label7.Name = "label7"; - this.label7.Size = new System.Drawing.Size(33, 13); - this.label7.TabIndex = 55; - this.label7.Text = "Title :"; - // - // btnGetInfo - // - this.btnGetInfo.Location = new System.Drawing.Point(510, 33); - this.btnGetInfo.Name = "btnGetInfo"; - this.btnGetInfo.Size = new System.Drawing.Size(75, 23); - this.btnGetInfo.TabIndex = 52; - this.btnGetInfo.Text = "Get Info"; - this.btnGetInfo.UseVisualStyleBackColor = true; - this.btnGetInfo.Click += new System.EventHandler(this.BtnGetInfo_Click); - // - // textUrl - // - this.textUrl.Location = new System.Drawing.Point(301, 35); - this.textUrl.Name = "textUrl"; - this.textUrl.Size = new System.Drawing.Size(203, 20); - this.textUrl.TabIndex = 0; - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(223, 38); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(72, 13); - this.label1.TabIndex = 50; - this.label1.Text = "Clip/VOD ID :"; - // - // radioJSON - // - this.radioJSON.AutoSize = true; - this.radioJSON.Checked = true; - this.radioJSON.Enabled = false; - this.radioJSON.Location = new System.Drawing.Point(4, 3); - this.radioJSON.Name = "radioJSON"; - this.radioJSON.Size = new System.Drawing.Size(105, 17); - this.radioJSON.TabIndex = 69; - this.radioJSON.TabStop = true; - this.radioJSON.Text = "Advanced JSON"; - this.radioJSON.UseVisualStyleBackColor = true; - // - // radioTXT - // - this.radioTXT.AutoSize = true; - this.radioTXT.Enabled = false; - this.radioTXT.Location = new System.Drawing.Point(115, 3); - this.radioTXT.Name = "radioTXT"; - this.radioTXT.Size = new System.Drawing.Size(80, 17); - this.radioTXT.TabIndex = 70; - this.radioTXT.Text = "Simple TXT"; - this.radioTXT.UseVisualStyleBackColor = true; - // - // label12 - // - this.label12.AutoSize = true; - this.label12.Enabled = false; - this.label12.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label12.Location = new System.Drawing.Point(443, 184); - this.label12.Name = "label12"; - this.label12.Size = new System.Drawing.Size(11, 13); - this.label12.TabIndex = 83; - this.label12.Text = ":"; - // - // label13 - // - this.label13.AutoSize = true; - this.label13.Enabled = false; - this.label13.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label13.Location = new System.Drawing.Point(495, 184); - this.label13.Name = "label13"; - this.label13.Size = new System.Drawing.Size(11, 13); - this.label13.TabIndex = 82; - this.label13.Text = ":"; - // - // numEndSecond - // - this.numEndSecond.Enabled = false; - this.numEndSecond.Location = new System.Drawing.Point(508, 180); - this.numEndSecond.Name = "numEndSecond"; - this.numEndSecond.Size = new System.Drawing.Size(35, 20); - this.numEndSecond.TabIndex = 81; - // - // numEndMinute - // - this.numEndMinute.Enabled = false; - this.numEndMinute.Location = new System.Drawing.Point(456, 180); - this.numEndMinute.Name = "numEndMinute"; - this.numEndMinute.Size = new System.Drawing.Size(35, 20); - this.numEndMinute.TabIndex = 80; - // - // numEndHour - // - this.numEndHour.Enabled = false; - this.numEndHour.Location = new System.Drawing.Point(405, 180); - this.numEndHour.Name = "numEndHour"; - this.numEndHour.Size = new System.Drawing.Size(35, 20); - this.numEndHour.TabIndex = 79; - // - // label11 - // - this.label11.AutoSize = true; - this.label11.Enabled = false; - this.label11.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label11.Location = new System.Drawing.Point(443, 158); - this.label11.Name = "label11"; - this.label11.Size = new System.Drawing.Size(11, 13); - this.label11.TabIndex = 78; - this.label11.Text = ":"; - // - // label10 - // - this.label10.AutoSize = true; - this.label10.Enabled = false; - this.label10.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label10.Location = new System.Drawing.Point(495, 158); - this.label10.Name = "label10"; - this.label10.Size = new System.Drawing.Size(11, 13); - this.label10.TabIndex = 77; - this.label10.Text = ":"; - // - // numStartSecond - // - this.numStartSecond.Enabled = false; - this.numStartSecond.Location = new System.Drawing.Point(508, 154); - this.numStartSecond.Name = "numStartSecond"; - this.numStartSecond.Size = new System.Drawing.Size(35, 20); - this.numStartSecond.TabIndex = 76; - // - // numStartMinute - // - this.numStartMinute.Enabled = false; - this.numStartMinute.Location = new System.Drawing.Point(456, 154); - this.numStartMinute.Name = "numStartMinute"; - this.numStartMinute.Size = new System.Drawing.Size(35, 20); - this.numStartMinute.TabIndex = 75; - // - // numStartHour - // - this.numStartHour.Enabled = false; - this.numStartHour.Location = new System.Drawing.Point(405, 154); - this.numStartHour.Name = "numStartHour"; - this.numStartHour.Size = new System.Drawing.Size(35, 20); - this.numStartHour.TabIndex = 74; - // - // checkCropEnd - // - this.checkCropEnd.AutoSize = true; - this.checkCropEnd.Enabled = false; - this.checkCropEnd.Location = new System.Drawing.Point(340, 183); - this.checkCropEnd.Name = "checkCropEnd"; - this.checkCropEnd.Size = new System.Drawing.Size(45, 17); - this.checkCropEnd.TabIndex = 73; - this.checkCropEnd.Text = "End"; - this.checkCropEnd.UseVisualStyleBackColor = true; - // - // checkCropStart - // - this.checkCropStart.AutoSize = true; - this.checkCropStart.Enabled = false; - this.checkCropStart.Location = new System.Drawing.Point(340, 157); - this.checkCropStart.Name = "checkCropStart"; - this.checkCropStart.Size = new System.Drawing.Size(48, 17); - this.checkCropStart.TabIndex = 72; - this.checkCropStart.Text = "Start"; - this.checkCropStart.UseVisualStyleBackColor = true; - // - // label5 - // - this.label5.AutoSize = true; - this.label5.Location = new System.Drawing.Point(270, 158); - this.label5.Name = "label5"; - this.label5.Size = new System.Drawing.Size(61, 13); - this.label5.TabIndex = 71; - this.label5.Text = "Crop Time :"; - // - // panel2 - // - this.panel2.Controls.Add(this.radioTXT); - this.panel2.Controls.Add(this.radioJSON); - this.panel2.Location = new System.Drawing.Point(330, 107); - this.panel2.Name = "panel2"; - this.panel2.Size = new System.Drawing.Size(200, 26); - this.panel2.TabIndex = 87; - // - // backgroundDownloadManager - // - this.backgroundDownloadManager.WorkerReportsProgress = true; - this.backgroundDownloadManager.DoWork += new System.ComponentModel.DoWorkEventHandler(this.BackgroundDownloadManager_DoWork); - this.backgroundDownloadManager.ProgressChanged += new System.ComponentModel.ProgressChangedEventHandler(this.BackgroundDownloadManager_ProgressChanged); - this.backgroundDownloadManager.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(this.BackgroundDownloadManager_RunWorkerCompleted); - // - // frmChatDownload - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(812, 390); - this.ControlBox = false; - this.Controls.Add(this.panel2); - this.Controls.Add(this.label12); - this.Controls.Add(this.label13); - this.Controls.Add(this.numEndSecond); - this.Controls.Add(this.numEndMinute); - this.Controls.Add(this.numEndHour); - this.Controls.Add(this.label11); - this.Controls.Add(this.label10); - this.Controls.Add(this.numStartSecond); - this.Controls.Add(this.numStartMinute); - this.Controls.Add(this.numStartHour); - this.Controls.Add(this.checkCropEnd); - this.Controls.Add(this.checkCropStart); - this.Controls.Add(this.label5); - this.Controls.Add(this.statusStrip); - this.Controls.Add(this.btnDownload); - this.Controls.Add(this.label6); - this.Controls.Add(this.textLog); - this.Controls.Add(this.labelCreated); - this.Controls.Add(this.labelStreamer); - this.Controls.Add(this.label16); - this.Controls.Add(this.textTitle); - this.Controls.Add(this.label15); - this.Controls.Add(this.label14); - this.Controls.Add(this.pictureThumb); - this.Controls.Add(this.label7); - this.Controls.Add(this.btnGetInfo); - this.Controls.Add(this.textUrl); - this.Controls.Add(this.label1); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; - this.Name = "frmChatDownload"; - this.Text = "frmChatDownload"; - this.WindowState = System.Windows.Forms.FormWindowState.Maximized; - this.statusStrip.ResumeLayout(false); - this.statusStrip.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pictureThumb)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.numEndSecond)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.numEndMinute)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.numEndHour)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.numStartSecond)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.numStartMinute)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.numStartHour)).EndInit(); - this.panel2.ResumeLayout(false); - this.panel2.PerformLayout(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.StatusStrip statusStrip; - private System.Windows.Forms.ToolStripStatusLabel toolStatus; - private System.Windows.Forms.Button btnDownload; - private System.Windows.Forms.Label label6; - private System.Windows.Forms.TextBox textLog; - private System.Windows.Forms.Label labelCreated; - private System.Windows.Forms.Label labelStreamer; - private System.Windows.Forms.Label label16; - private System.Windows.Forms.TextBox textTitle; - private System.Windows.Forms.Label label15; - private System.Windows.Forms.Label label14; - private System.Windows.Forms.PictureBox pictureThumb; - private System.Windows.Forms.Label label7; - private System.Windows.Forms.Button btnGetInfo; - private System.Windows.Forms.TextBox textUrl; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.RadioButton radioJSON; - private System.Windows.Forms.RadioButton radioTXT; - private System.Windows.Forms.Label label12; - private System.Windows.Forms.Label label13; - private System.Windows.Forms.NumericUpDown numEndSecond; - private System.Windows.Forms.NumericUpDown numEndMinute; - private System.Windows.Forms.NumericUpDown numEndHour; - private System.Windows.Forms.Label label11; - private System.Windows.Forms.Label label10; - private System.Windows.Forms.NumericUpDown numStartSecond; - private System.Windows.Forms.NumericUpDown numStartMinute; - private System.Windows.Forms.NumericUpDown numStartHour; - private System.Windows.Forms.CheckBox checkCropEnd; - private System.Windows.Forms.CheckBox checkCropStart; - private System.Windows.Forms.Label label5; - private System.Windows.Forms.Panel panel2; - private System.ComponentModel.BackgroundWorker backgroundDownloadManager; - private System.Windows.Forms.ToolStripProgressBar toolProgressBar; - } -} \ No newline at end of file diff --git a/TwitchDownloader/frmChatDownload.cs b/TwitchDownloader/frmChatDownload.cs deleted file mode 100644 index 382c7fba..00000000 --- a/TwitchDownloader/frmChatDownload.cs +++ /dev/null @@ -1,304 +0,0 @@ -using Newtonsoft.Json.Linq; -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.IO; -using System.Linq; -using System.Net; -using System.Text; -using System.Text.RegularExpressions; -using System.Threading; -using System.Threading.Tasks; -using System.Windows.Forms; - -namespace TwitchDownloader -{ - public partial class frmChatDownload : Form - { - bool isVod = true; - int streamerId = 0; - JObject videoData = new JObject(); - public frmChatDownload() - { - InitializeComponent(); - } - - private async void BtnGetInfo_Click(object sender, EventArgs e) - { - try - { - isVod = textUrl.Text.Any(char.IsDigit); - - btnGetInfo.Enabled = false; - if (isVod) - { - string VodId = textUrl.Text; - Task taskInfo = GetVodInfo(VodId); - await Task.WhenAll(taskInfo); - - JToken clipData = taskInfo.Result; - videoData = taskInfo.Result; - string thumbUrl = videoData["data"][0]["thumbnail_url"].ToString().Replace("%{width}", pictureThumb.Width.ToString()).Replace("%{height}", pictureThumb.Height.ToString()); - Task taskThumb = GetClipThumb(thumbUrl); - await Task.WhenAll(taskThumb); - - pictureThumb.Image = taskThumb.Result; - textTitle.Text = taskInfo.Result["data"][0]["title"].ToString(); - labelStreamer.Text = taskInfo.Result["data"][0]["user_name"].ToString(); - labelCreated.Text = taskInfo.Result["data"][0]["created_at"].ToString(); - streamerId = taskInfo.Result["data"][0]["user_id"].ToObject(); - SetEnabled(true, false); - } - else - { - string clipId = textUrl.Text; - Task taskInfo = GetClipInfo(clipId); - await Task.WhenAll(taskInfo); - - JToken clipData = taskInfo.Result; - videoData = taskInfo.Result; - string thumbUrl = clipData["thumbnails"]["medium"].ToString(); - Task taskThumb = GetClipThumb(thumbUrl); - await Task.WhenAll(taskThumb); - - pictureThumb.Image = taskThumb.Result; - labelStreamer.Text = clipData["broadcaster"]["display_name"].ToString(); - labelCreated.Text = clipData["created_at"].ToString(); - textTitle.Text = clipData["title"].ToString(); - streamerId = clipData["broadcaster"]["id"].ToObject(); - SetEnabled(true, false); - SetEnabled(false, true); - } - - btnGetInfo.Enabled = true; - } - catch (WebException) - { - MessageBox.Show("Unable to get information. Please double check VOD ID or Clip Slug and try again", "Unable to get info", MessageBoxButtons.OK, MessageBoxIcon.Error); - btnGetInfo.Enabled = true; - SetEnabled(false, false); - } - } - - private void SetEnabled(bool isEnabled, bool onlyCrop) - { - checkCropStart.Enabled = isEnabled; - numStartHour.Enabled = isEnabled; - numStartMinute.Enabled = isEnabled; - numStartSecond.Enabled = isEnabled; - checkCropEnd.Enabled = isEnabled; - numEndHour.Enabled = isEnabled; - numEndMinute.Enabled = isEnabled; - numEndSecond.Enabled = isEnabled; - - if (!onlyCrop) - { - radioJSON.Enabled = isEnabled; - radioTXT.Enabled = isEnabled; - btnDownload.Enabled = isEnabled; - } - } - - private async Task GetClipInfo(object clipId) - { - using (WebClient client = new WebClient()) - { - client.Headers.Add("Accept", "application/vnd.twitchtv.v5+json"); - client.Headers.Add("Client-ID", "kimne78kx3ncx6brgo4mv6wki5h1ko"); - string response = await client.DownloadStringTaskAsync(String.Format("https://api.twitch.tv/kraken/clips/{0}", clipId)); - JObject result = JObject.Parse(response); - return result; - } - } - - private async Task GetVodInfo(string id) - { - using (WebClient client = new WebClient()) - { - client.Headers.Add("Client-ID", "kimne78kx3ncx6brgo4mv6wki5h1ko"); - string response = await client.DownloadStringTaskAsync("https://api.twitch.tv/helix/videos?id=" + id); - JObject result = JObject.Parse(response); - return result; - } - } - - private async Task GetClipThumb(string thumbUrl) - { - Bitmap result = new Bitmap(100, 100); - using (WebClient client = new WebClient()) - { - client.Headers.Add("Client-ID", "kimne78kx3ncx6brgo4mv6wki5h1ko"); - using (Stream s = await client.OpenReadTaskAsync(thumbUrl)) - { - result = new Bitmap(s); - } - } - return result; - } - - private void BtnDownload_Click(object sender, EventArgs e) - { - SaveFileDialog saveFileDialog = new SaveFileDialog(); - - if (radioJSON.Checked) - saveFileDialog.Filter = "JSON Files | *.json"; - else - saveFileDialog.Filter = "TXT Files | *.txt"; - - saveFileDialog.RestoreDirectory = true; - - if (saveFileDialog.ShowDialog() == DialogResult.OK) - { - ChatDownloadInfo info; - if (isVod) - { - int startTime = 0; - int duration = 0; - - if (checkCropStart.Checked) - { - TimeSpan start = new TimeSpan((int)numStartHour.Value, (int)numStartMinute.Value, (int)numStartSecond.Value); - startTime = (int)Math.Round(start.TotalSeconds); - } - - if (checkCropEnd.Checked) - { - TimeSpan end = new TimeSpan((int)numEndHour.Value, (int)numEndMinute.Value, (int)numEndSecond.Value); - duration = (int)Math.Ceiling(end.TotalSeconds - startTime); - } - else - { - TimeSpan vodLength = TimeSpan.Parse(Regex.Replace(videoData["data"][0]["duration"].ToString(), @"[^\d]", ":").TrimEnd(':')); - duration = (int)Math.Ceiling(vodLength.TotalSeconds); - } - info = new ChatDownloadInfo(isVod, textUrl.Text, saveFileDialog.FileName, videoData["data"][0]["id"].ToString(), startTime, duration, radioJSON.Checked, labelStreamer.Text, streamerId); - } - else - info = new ChatDownloadInfo(isVod, textUrl.Text, saveFileDialog.FileName, videoData["vod"]["id"].ToString(), videoData["vod"]["offset"].ToObject(), videoData["duration"].ToObject(), radioJSON.Checked, labelStreamer.Text, streamerId); - toolStatus.Text = "Downloading"; - btnGetInfo.Enabled = false; - SetEnabled(false, false); - - backgroundDownloadManager.RunWorkerAsync(info); - } - } - - private void BackgroundDownloadManager_DoWork(object sender, DoWorkEventArgs e) - { - ChatDownloadInfo clipInfo = (ChatDownloadInfo)e.Argument; - - using (WebClient client = new WebClient()) - { - client.Encoding = Encoding.UTF8; - client.Headers.Add("Accept", "application/vnd.twitchtv.v5+json; charset=UTF-8"); - client.Headers.Add("Client-Id", "kimne78kx3ncx6brgo4mv6wki5h1ko"); - - bool isFirst = true; - string cursor = ""; - double latestMessage = clipInfo.offset - 1; - double videoStart = clipInfo.offset; - double videoDuration = clipInfo.duration; - JObject result = new JObject(); - JArray comments = new JArray(); - JObject streamer = new JObject(); - - streamer["name"] = clipInfo.streamer_name; - streamer["id"] = clipInfo.streamer_id; - - while (latestMessage < (videoStart + videoDuration)) - { - string response; - if (isFirst) - response = client.DownloadString(String.Format("https://api.twitch.tv/v5/videos/{0}/comments?content_offset_seconds={1}", clipInfo.vod_id, clipInfo.offset)); - else - response = client.DownloadString(String.Format("https://api.twitch.tv/v5/videos/{0}/comments?cursor={1}", clipInfo.vod_id, cursor)); - - JObject res = JObject.Parse(response); - - foreach (var comment in res["comments"]) - { - if (latestMessage < (videoStart + videoDuration)) - comments.Add(comment); - - latestMessage = comment["content_offset_seconds"].ToObject(); - } - if (res["_next"] == null) - break; - else - cursor = res["_next"].ToString(); - - int percent = (int)Math.Floor((latestMessage - videoStart)/videoDuration * 100); - backgroundDownloadManager.ReportProgress(percent, String.Format("Downloading {0}%", percent)); - - if (isFirst) - isFirst = false; - - } - - result["streamer"] = streamer; - result["comments"] = comments; - - using (StreamWriter sw = new StreamWriter(clipInfo.path)) - { - if (clipInfo.is_json) - { - sw.Write(result.ToString(Newtonsoft.Json.Formatting.Indented)); - } - else - { - foreach (var comment in result["comments"]) - { - string username = comment["commenter"]["display_name"].ToString(); - string message = comment["message"]["body"].ToString(); - sw.WriteLine(String.Format("{0}: {1}", username, message)); - } - } - - sw.Flush(); - sw.Close(); - } - } - } - - private void BackgroundDownloadManager_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) - { - toolStatus.Text = "Done"; - btnGetInfo.Enabled = true; - } - - private void BackgroundDownloadManager_ProgressChanged(object sender, ProgressChangedEventArgs e) - { - string message = (string)e.UserState; - toolStatus.Text = message; - toolProgressBar.Value = e.ProgressPercentage >= 100 ? 100 : e.ProgressPercentage; - } - } -} - -public class ChatDownloadInfo -{ - public bool is_vod { get; set; } - public string id { get; set; } - public string path { get; set; } - public string vod_id { get; set; } - public int offset { get; set; } - public double duration { get; set; } - public bool is_json { get; set; } - public string streamer_name { get; set; } - public int streamer_id { get; set; } - - public ChatDownloadInfo(bool Is_vod, string Id, string Path, string Vod_id, int Offset , double Duration, bool Is_json, string Streamer_name, int Streamer_id) - { - is_vod = Is_vod; - id = Id; - path = Path; - vod_id = Vod_id; - offset = Offset; - duration = Duration; - is_json = Is_json; - streamer_name = Streamer_name; - streamer_id = Streamer_id; - } -} \ No newline at end of file diff --git a/TwitchDownloader/frmChatDownload.resx b/TwitchDownloader/frmChatDownload.resx deleted file mode 100644 index 4721b491..00000000 --- a/TwitchDownloader/frmChatDownload.resx +++ /dev/null @@ -1,126 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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 - - - 238, 17 - - \ No newline at end of file diff --git a/TwitchDownloader/frmChatRender.Designer.cs b/TwitchDownloader/frmChatRender.Designer.cs deleted file mode 100644 index b7b1ebd3..00000000 --- a/TwitchDownloader/frmChatRender.Designer.cs +++ /dev/null @@ -1,429 +0,0 @@ -namespace TwitchDownloader -{ - partial class frmChatRender - { - /// - /// 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.colorDialog = new System.Windows.Forms.ColorDialog(); - this.label2 = new System.Windows.Forms.Label(); - this.label4 = new System.Windows.Forms.Label(); - this.label5 = new System.Windows.Forms.Label(); - this.label7 = new System.Windows.Forms.Label(); - this.label8 = new System.Windows.Forms.Label(); - this.btnColor = new System.Windows.Forms.Button(); - this.textColor = new System.Windows.Forms.TextBox(); - this.textHeight = new System.Windows.Forms.TextBox(); - this.textWidth = new System.Windows.Forms.TextBox(); - this.checkBTTV = new System.Windows.Forms.CheckBox(); - this.checkFFZ = new System.Windows.Forms.CheckBox(); - this.textJSON = new System.Windows.Forms.TextBox(); - this.btnBrowse = new System.Windows.Forms.Button(); - this.label9 = new System.Windows.Forms.Label(); - this.btnRender = new System.Windows.Forms.Button(); - this.backgroundRenderManager = new System.ComponentModel.BackgroundWorker(); - this.statusStrip = new System.Windows.Forms.StatusStrip(); - this.toolStatus = new System.Windows.Forms.ToolStripStatusLabel(); - this.toolProgressBar = new System.Windows.Forms.ToolStripProgressBar(); - this.label6 = new System.Windows.Forms.Label(); - this.textLog = new System.Windows.Forms.TextBox(); - this.label1 = new System.Windows.Forms.Label(); - this.checkOutline = new System.Windows.Forms.CheckBox(); - this.comboFonts = new System.Windows.Forms.ComboBox(); - this.label3 = new System.Windows.Forms.Label(); - this.label10 = new System.Windows.Forms.Label(); - this.textFontSize = new System.Windows.Forms.TextBox(); - this.label11 = new System.Windows.Forms.Label(); - this.textUpdateTime = new System.Windows.Forms.TextBox(); - this.statusStrip.SuspendLayout(); - this.SuspendLayout(); - // - // colorDialog - // - this.colorDialog.Color = System.Drawing.Color.FromArgb(((int)(((byte)(17)))), ((int)(((byte)(17)))), ((int)(((byte)(17))))); - // - // label2 - // - this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(147, 151); - this.label2.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(129, 17); - this.label2.TabIndex = 2; - this.label2.Text = "Background Color :"; - // - // label4 - // - this.label4.AutoSize = true; - this.label4.Location = new System.Drawing.Point(475, 151); - this.label4.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); - this.label4.Name = "label4"; - this.label4.Size = new System.Drawing.Size(57, 17); - this.label4.TabIndex = 2; - this.label4.Text = "Height :"; - // - // label5 - // - this.label5.AutoSize = true; - this.label5.Location = new System.Drawing.Point(479, 185); - this.label5.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); - this.label5.Name = "label5"; - this.label5.Size = new System.Drawing.Size(52, 17); - this.label5.TabIndex = 2; - this.label5.Text = "Width :"; - // - // label7 - // - this.label7.AutoSize = true; - this.label7.Location = new System.Drawing.Point(172, 185); - this.label7.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); - this.label7.Name = "label7"; - this.label7.Size = new System.Drawing.Size(103, 17); - this.label7.TabIndex = 3; - this.label7.Text = "BTTV Emotes :"; - // - // label8 - // - this.label8.AutoSize = true; - this.label8.Location = new System.Drawing.Point(332, 185); - this.label8.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); - this.label8.Name = "label8"; - this.label8.Size = new System.Drawing.Size(92, 17); - this.label8.TabIndex = 3; - this.label8.Text = "FFZ Emotes :"; - // - // btnColor - // - this.btnColor.BackColor = System.Drawing.Color.Black; - this.btnColor.Location = new System.Drawing.Point(283, 146); - this.btnColor.Margin = new System.Windows.Forms.Padding(4); - this.btnColor.Name = "btnColor"; - this.btnColor.Size = new System.Drawing.Size(41, 25); - this.btnColor.TabIndex = 4; - this.btnColor.UseVisualStyleBackColor = false; - this.btnColor.Click += new System.EventHandler(this.BntColor_Click); - // - // textColor - // - this.textColor.Location = new System.Drawing.Point(332, 148); - this.textColor.Margin = new System.Windows.Forms.Padding(4); - this.textColor.Name = "textColor"; - this.textColor.Size = new System.Drawing.Size(132, 22); - this.textColor.TabIndex = 5; - this.textColor.Text = "#111111"; - this.textColor.TextChanged += new System.EventHandler(this.TextColor_TextChanged); - // - // textHeight - // - this.textHeight.Location = new System.Drawing.Point(541, 148); - this.textHeight.Margin = new System.Windows.Forms.Padding(4); - this.textHeight.Name = "textHeight"; - this.textHeight.Size = new System.Drawing.Size(92, 22); - this.textHeight.TabIndex = 7; - this.textHeight.Text = "500"; - // - // textWidth - // - this.textWidth.Location = new System.Drawing.Point(541, 181); - this.textWidth.Margin = new System.Windows.Forms.Padding(4); - this.textWidth.Name = "textWidth"; - this.textWidth.Size = new System.Drawing.Size(92, 22); - this.textWidth.TabIndex = 7; - this.textWidth.Text = "300"; - // - // checkBTTV - // - this.checkBTTV.AutoSize = true; - this.checkBTTV.Checked = true; - this.checkBTTV.CheckState = System.Windows.Forms.CheckState.Checked; - this.checkBTTV.Location = new System.Drawing.Point(285, 185); - this.checkBTTV.Margin = new System.Windows.Forms.Padding(4); - this.checkBTTV.Name = "checkBTTV"; - this.checkBTTV.Size = new System.Drawing.Size(18, 17); - this.checkBTTV.TabIndex = 8; - this.checkBTTV.UseVisualStyleBackColor = true; - // - // checkFFZ - // - this.checkFFZ.AutoSize = true; - this.checkFFZ.Checked = true; - this.checkFFZ.CheckState = System.Windows.Forms.CheckState.Checked; - this.checkFFZ.Location = new System.Drawing.Point(433, 185); - this.checkFFZ.Margin = new System.Windows.Forms.Padding(4); - this.checkFFZ.Name = "checkFFZ"; - this.checkFFZ.Size = new System.Drawing.Size(18, 17); - this.checkFFZ.TabIndex = 8; - this.checkFFZ.UseVisualStyleBackColor = true; - // - // textJSON - // - this.textJSON.Location = new System.Drawing.Point(253, 55); - this.textJSON.Margin = new System.Windows.Forms.Padding(4); - this.textJSON.Name = "textJSON"; - this.textJSON.Size = new System.Drawing.Size(293, 22); - this.textJSON.TabIndex = 0; - // - // btnBrowse - // - this.btnBrowse.Location = new System.Drawing.Point(556, 53); - this.btnBrowse.Margin = new System.Windows.Forms.Padding(4); - this.btnBrowse.Name = "btnBrowse"; - this.btnBrowse.Size = new System.Drawing.Size(100, 28); - this.btnBrowse.TabIndex = 10; - this.btnBrowse.Text = "Browse"; - this.btnBrowse.UseVisualStyleBackColor = true; - this.btnBrowse.Click += new System.EventHandler(this.BtnBrowse_Click); - // - // label9 - // - this.label9.AutoSize = true; - this.label9.Location = new System.Drawing.Point(165, 59); - this.label9.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); - this.label9.Name = "label9"; - this.label9.Size = new System.Drawing.Size(79, 17); - this.label9.TabIndex = 11; - this.label9.Text = "JSON File :"; - // - // btnRender - // - this.btnRender.Location = new System.Drawing.Point(365, 337); - this.btnRender.Margin = new System.Windows.Forms.Padding(4); - this.btnRender.Name = "btnRender"; - this.btnRender.Size = new System.Drawing.Size(148, 50); - this.btnRender.TabIndex = 49; - this.btnRender.Text = "Render Chat"; - this.btnRender.UseVisualStyleBackColor = true; - this.btnRender.Click += new System.EventHandler(this.BtnRender_Click); - // - // backgroundRenderManager - // - this.backgroundRenderManager.WorkerReportsProgress = true; - this.backgroundRenderManager.DoWork += new System.ComponentModel.DoWorkEventHandler(this.BackgroundRenderManager_DoWork); - this.backgroundRenderManager.ProgressChanged += new System.ComponentModel.ProgressChangedEventHandler(this.BackgroundRenderManager_ProgressChanged); - this.backgroundRenderManager.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(this.BackgroundRenderManager_RunWorkerCompleted); - // - // statusStrip - // - this.statusStrip.ImageScalingSize = new System.Drawing.Size(20, 20); - this.statusStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.toolStatus, - this.toolProgressBar}); - this.statusStrip.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.HorizontalStackWithOverflow; - this.statusStrip.Location = new System.Drawing.Point(0, 454); - this.statusStrip.Name = "statusStrip"; - this.statusStrip.Padding = new System.Windows.Forms.Padding(1, 0, 19, 0); - this.statusStrip.Size = new System.Drawing.Size(1083, 26); - this.statusStrip.SizingGrip = false; - this.statusStrip.TabIndex = 67; - this.statusStrip.Text = "statusStrip1"; - // - // toolStatus - // - this.toolStatus.Name = "toolStatus"; - this.toolStatus.Size = new System.Drawing.Size(34, 20); - this.toolStatus.Text = "Idle"; - // - // toolProgressBar - // - this.toolProgressBar.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right; - this.toolProgressBar.Name = "toolProgressBar"; - this.toolProgressBar.RightToLeft = System.Windows.Forms.RightToLeft.Yes; - this.toolProgressBar.Size = new System.Drawing.Size(267, 18); - // - // label6 - // - this.label6.AutoSize = true; - this.label6.Location = new System.Drawing.Point(745, 33); - this.label6.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); - this.label6.Name = "label6"; - this.label6.Size = new System.Drawing.Size(40, 17); - this.label6.TabIndex = 69; - this.label6.Text = "Log :"; - // - // textLog - // - this.textLog.Location = new System.Drawing.Point(748, 59); - this.textLog.Margin = new System.Windows.Forms.Padding(4); - this.textLog.Multiline = true; - this.textLog.Name = "textLog"; - this.textLog.Size = new System.Drawing.Size(296, 361); - this.textLog.TabIndex = 68; - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(84, 218); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(191, 17); - this.label1.TabIndex = 70; - this.label1.Text = "Username/Message Outline :"; - // - // checkOutline - // - this.checkOutline.AutoSize = true; - this.checkOutline.Location = new System.Drawing.Point(285, 218); - this.checkOutline.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.checkOutline.Name = "checkOutline"; - this.checkOutline.Size = new System.Drawing.Size(18, 17); - this.checkOutline.TabIndex = 71; - this.checkOutline.UseVisualStyleBackColor = true; - // - // comboFonts - // - this.comboFonts.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.comboFonts.FormattingEnabled = true; - this.comboFonts.Location = new System.Drawing.Point(385, 213); - this.comboFonts.Margin = new System.Windows.Forms.Padding(4); - this.comboFonts.Name = "comboFonts"; - this.comboFonts.Size = new System.Drawing.Size(248, 24); - this.comboFonts.TabIndex = 73; - // - // label3 - // - this.label3.AutoSize = true; - this.label3.Location = new System.Drawing.Point(332, 217); - this.label3.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(44, 17); - this.label3.TabIndex = 72; - this.label3.Text = "Font :"; - // - // label10 - // - this.label10.AutoSize = true; - this.label10.Location = new System.Drawing.Point(332, 255); - this.label10.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); - this.label10.Name = "label10"; - this.label10.Size = new System.Drawing.Size(75, 17); - this.label10.TabIndex = 74; - this.label10.Text = "Font Size :"; - // - // textFontSize - // - this.textFontSize.Location = new System.Drawing.Point(415, 251); - this.textFontSize.Margin = new System.Windows.Forms.Padding(4); - this.textFontSize.Name = "textFontSize"; - this.textFontSize.Size = new System.Drawing.Size(49, 22); - this.textFontSize.TabIndex = 75; - this.textFontSize.Text = "9"; - // - // label11 - // - this.label11.AutoSize = true; - this.label11.Location = new System.Drawing.Point(481, 255); - this.label11.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); - this.label11.Name = "label11"; - this.label11.Size = new System.Drawing.Size(93, 17); - this.label11.TabIndex = 76; - this.label11.Text = "Update Time:"; - // - // textUpdateTime - // - this.textUpdateTime.Location = new System.Drawing.Point(584, 251); - this.textUpdateTime.Margin = new System.Windows.Forms.Padding(4); - this.textUpdateTime.Name = "textUpdateTime"; - this.textUpdateTime.Size = new System.Drawing.Size(49, 22); - this.textUpdateTime.TabIndex = 77; - this.textUpdateTime.Text = "1.0"; - // - // frmChatRender - // - this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(1083, 480); - this.ControlBox = false; - this.Controls.Add(this.textUpdateTime); - this.Controls.Add(this.label11); - this.Controls.Add(this.textFontSize); - this.Controls.Add(this.label10); - this.Controls.Add(this.comboFonts); - this.Controls.Add(this.label3); - this.Controls.Add(this.checkOutline); - this.Controls.Add(this.label1); - this.Controls.Add(this.label6); - this.Controls.Add(this.textLog); - this.Controls.Add(this.statusStrip); - this.Controls.Add(this.btnRender); - this.Controls.Add(this.label9); - this.Controls.Add(this.btnBrowse); - this.Controls.Add(this.textJSON); - this.Controls.Add(this.checkFFZ); - this.Controls.Add(this.checkBTTV); - this.Controls.Add(this.textWidth); - this.Controls.Add(this.textHeight); - this.Controls.Add(this.textColor); - this.Controls.Add(this.btnColor); - this.Controls.Add(this.label8); - this.Controls.Add(this.label7); - this.Controls.Add(this.label5); - this.Controls.Add(this.label4); - this.Controls.Add(this.label2); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; - this.Margin = new System.Windows.Forms.Padding(4); - this.Name = "frmChatRender"; - this.Text = "frmChatRender"; - this.WindowState = System.Windows.Forms.FormWindowState.Maximized; - this.Load += new System.EventHandler(this.FrmChatRender_Load); - this.statusStrip.ResumeLayout(false); - this.statusStrip.PerformLayout(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - private System.Windows.Forms.ColorDialog colorDialog; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.Label label4; - private System.Windows.Forms.Label label5; - private System.Windows.Forms.Label label7; - private System.Windows.Forms.Label label8; - private System.Windows.Forms.Button btnColor; - private System.Windows.Forms.TextBox textColor; - private System.Windows.Forms.TextBox textHeight; - private System.Windows.Forms.TextBox textWidth; - private System.Windows.Forms.CheckBox checkBTTV; - private System.Windows.Forms.CheckBox checkFFZ; - private System.Windows.Forms.TextBox textJSON; - private System.Windows.Forms.Button btnBrowse; - private System.Windows.Forms.Label label9; - private System.Windows.Forms.Button btnRender; - private System.ComponentModel.BackgroundWorker backgroundRenderManager; - private System.Windows.Forms.StatusStrip statusStrip; - private System.Windows.Forms.ToolStripStatusLabel toolStatus; - private System.Windows.Forms.ToolStripProgressBar toolProgressBar; - private System.Windows.Forms.Label label6; - private System.Windows.Forms.TextBox textLog; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.CheckBox checkOutline; - private System.Windows.Forms.ComboBox comboFonts; - private System.Windows.Forms.Label label3; - private System.Windows.Forms.Label label10; - private System.Windows.Forms.TextBox textFontSize; - private System.Windows.Forms.Label label11; - private System.Windows.Forms.TextBox textUpdateTime; - } -} \ No newline at end of file diff --git a/TwitchDownloader/frmChatRender.cs b/TwitchDownloader/frmChatRender.cs deleted file mode 100644 index 28c3126f..00000000 --- a/TwitchDownloader/frmChatRender.cs +++ /dev/null @@ -1,967 +0,0 @@ -using Accord.Video.FFMPEG; -using Newtonsoft.Json.Linq; -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Diagnostics; -using System.Drawing; -using System.Drawing.Drawing2D; -using System.Drawing.Imaging; -using System.Drawing.Text; -using System.IO; -using System.Linq; -using System.Net; -using System.Text; -using System.Text.RegularExpressions; -using System.Threading.Tasks; -using System.Windows.Forms; - -namespace TwitchDownloader -{ - public partial class frmChatRender : Form - { - public frmChatRender() - { - InitializeComponent(); - } - - private void BntColor_Click(object sender, EventArgs e) - { - if (colorDialog.ShowDialog() == DialogResult.OK) - { - textColor.Text = ToHexValue(colorDialog.Color); - } - } - - public string ToHexValue(Color color) - { - return "#" + color.R.ToString("X2") + - color.G.ToString("X2") + - color.B.ToString("X2"); - } - - private void BtnRender_Click(object sender, EventArgs e) - { - SaveFileDialog saveFileDialog = new SaveFileDialog(); - - saveFileDialog.Filter = "MP4 Files | *.mp4"; - saveFileDialog.RestoreDirectory = true; - - if (saveFileDialog.ShowDialog() == DialogResult.OK) - { - RenderOptions info = new RenderOptions(textJSON.Text, saveFileDialog.FileName, colorDialog.Color, Int32.Parse(textHeight.Text), Int32.Parse(textWidth.Text), checkBTTV.Checked, checkFFZ.Checked, checkOutline.Checked, (string)comboFonts.SelectedItem, Double.Parse(textFontSize.Text), Double.Parse(textUpdateTime.Text)); - - backgroundRenderManager.RunWorkerAsync(info); - btnRender.Enabled = false; - - Properties.Settings.Default.RENDER_FONT = (string)comboFonts.SelectedItem; - Properties.Settings.Default.RENDER_COLOR = textColor.Text; - Properties.Settings.Default.RENDER_HEIGHT = Int32.Parse(textHeight.Text); - Properties.Settings.Default.RENDER_WIDTH = Int32.Parse(textWidth.Text); - Properties.Settings.Default.RENDER_BTTV = checkBTTV.Checked; - Properties.Settings.Default.RENDER_FFZ = checkFFZ.Checked; - Properties.Settings.Default.RENDER_OUTLINE = checkOutline.Checked; - Properties.Settings.Default.RENDER_FONT_SIZE = Double.Parse(textFontSize.Text); - Properties.Settings.Default.RENDER_UPDATE_TIME = Double.Parse(textUpdateTime.Text); - Properties.Settings.Default.Save(); - } - } - - private void BackgroundRenderManager_DoWork(object sender, DoWorkEventArgs e) - { - RenderOptions renderOptions = (RenderOptions)e.Argument; - JObject chatJson = JObject.Parse(File.ReadAllText(renderOptions.json_path)); - List finalComments = new List(); - List thirdPartyEmotes = new List(); - List chatBadges = new List(); - List> chatEmotes = new List>(); - Dictionary emojiCache = new Dictionary(); - Random rand = new Random(); - string[] defaultColors = { "#FF0000", "#0000FF", "#00FF00", "#B22222", "#FF7F50", "#9ACD32", "#FF4500", "#2E8B57", "#DAA520", "#D2691E", "#5F9EA0", "#1E90FF", "#FF69B4", "#8A2BE2", "#00FF7F" }; - string emojiRegex = "(?:0\x20E3|1\x20E3|2\x20E3|3\x20E3|4\x20E3|5\x20E3|6\x20E3|7\x20E3|8\x20E3|9\x20E3|#\x20E3|\\*\x20E3|\xD83C(?:\xDDE6\xD83C(?:\xDDE8|\xDDE9|\xDDEA|\xDDEB|\xDDEC|\xDDEE|\xDDF1|\xDDF2|\xDDF4|\xDDF6|\xDDF7|\xDDF8|\xDDF9|\xDDFA|\xDDFC|\xDDFD|\xDDFF)|\xDDE7\xD83C(?:\xDDE6|\xDDE7|\xDDE9|\xDDEA|\xDDEB|\xDDEC|\xDDED|\xDDEE|\xDDEF|\xDDF1|\xDDF2|\xDDF3|\xDDF4|\xDDF6|\xDDF7|\xDDF8|\xDDF9|\xDDFB|\xDDFC|\xDDFE|\xDDFF)|\xDDE8\xD83C(?:\xDDE6|\xDDE8|\xDDE9|\xDDEB|\xDDEC|\xDDED|\xDDEE|\xDDF0|\xDDF1|\xDDF2|\xDDF3|\xDDF4|\xDDF5|\xDDF7|\xDDFA|\xDDFB|\xDDFC|\xDDFD|\xDDFE|\xDDFF)|\xDDE9\xD83C(?:\xDDEA|\xDDEC|\xDDEF|\xDDF0|\xDDF2|\xDDF4|\xDDFF)|\xDDEA\xD83C(?:\xDDE6|\xDDE8|\xDDEA|\xDDEC|\xDDED|\xDDF7|\xDDF8|\xDDF9|\xDDFA)|\xDDEB\xD83C(?:\xDDEE|\xDDEF|\xDDF0|\xDDF2|\xDDF4|\xDDF7)|\xDDEC\xD83C(?:\xDDE6|\xDDE7|\xDDE9|\xDDEA|\xDDEB|\xDDEC|\xDDED|\xDDEE|\xDDF1|\xDDF2|\xDDF3|\xDDF5|\xDDF6|\xDDF7|\xDDF8|\xDDF9|\xDDFA|\xDDFC|\xDDFE)|\xDDED\xD83C(?:\xDDF0|\xDDF2|\xDDF3|\xDDF7|\xDDF9|\xDDFA)|\xDDEE\xD83C(?:\xDDE8|\xDDE9|\xDDEA|\xDDF1|\xDDF2|\xDDF3|\xDDF4|\xDDF6|\xDDF7|\xDDF8|\xDDF9)|\xDDEF\xD83C(?:\xDDEA|\xDDF2|\xDDF4|\xDDF5)|\xDDF0\xD83C(?:\xDDEA|\xDDEC|\xDDED|\xDDEE|\xDDF2|\xDDF3|\xDDF5|\xDDF7|\xDDFC|\xDDFE|\xDDFF)|\xDDF1\xD83C(?:\xDDE6|\xDDE7|\xDDE8|\xDDEE|\xDDF0|\xDDF7|\xDDF8|\xDDF9|\xDDFA|\xDDFB|\xDDFE)|\xDDF2\xD83C(?:\xDDE6|\xDDE8|\xDDE9|\xDDEA|\xDDEB|\xDDEC|\xDDED|\xDDF0|\xDDF1|\xDDF2|\xDDF3|\xDDF4|\xDDF5|\xDDF6|\xDDF7|\xDDF8|\xDDF9|\xDDFA|\xDDFB|\xDDFC|\xDDFD|\xDDFE|\xDDFF)|\xDDF3\xD83C(?:\xDDE6|\xDDE8|\xDDEA|\xDDEB|\xDDEC|\xDDEE|\xDDF1|\xDDF4|\xDDF5|\xDDF7|\xDDFA|\xDDFF)|\xDDF4\xD83C\xDDF2|\xDDF5\xD83C(?:\xDDE6|\xDDEA|\xDDEB|\xDDEC|\xDDED|\xDDF0|\xDDF1|\xDDF2|\xDDF3|\xDDF7|\xDDF8|\xDDF9|\xDDFC|\xDDFE)|\xDDF6\xD83C\xDDE6|\xDDF7\xD83C(?:\xDDEA|\xDDF4|\xDDF8|\xDDFA|\xDDFC)|\xDDF8\xD83C(?:\xDDE6|\xDDE7|\xDDE8|\xDDE9|\xDDEA|\xDDEC|\xDDED|\xDDEE|\xDDEF|\xDDF0|\xDDF1|\xDDF2|\xDDF3|\xDDF4|\xDDF7|\xDDF8|\xDDF9|\xDDFB|\xDDFD|\xDDFE|\xDDFF)|\xDDF9\xD83C(?:\xDDE6|\xDDE8|\xDDE9|\xDDEB|\xDDEC|\xDDED|\xDDEF|\xDDF0|\xDDF1|\xDDF2|\xDDF3|\xDDF4|\xDDF7|\xDDF9|\xDDFB|\xDDFC|\xDDFF)|\xDDFA\xD83C(?:\xDDE6|\xDDEC|\xDDF2|\xDDF8|\xDDFE|\xDDFF)|\xDDFB\xD83C(?:\xDDE6|\xDDE8|\xDDEA|\xDDEC|\xDDEE|\xDDF3|\xDDFA)|\xDDFC\xD83C(?:\xDDEB|\xDDF8)|\xDDFD\xD83C\xDDF0|\xDDFE\xD83C(?:\xDDEA|\xDDF9)|\xDDFF\xD83C(?:\xDDE6|\xDDF2|\xDDFC)))|[\xA9\xAE\x203C\x2049\x2122\x2139\x2194-\x2199\x21A9\x21AA\x231A\x231B\x2328\x23CF\x23E9-\x23F3\x23F8-\x23FA\x24C2\x25AA\x25AB\x25B6\x25C0\x25FB-\x25FE\x2600-\x2604\x260E\x2611\x2614\x2615\x2618\x261D\x2620\x2622\x2623\x2626\x262A\x262E\x262F\x2638-\x263A\x2648-\x2653\x2660\x2663\x2665\x2666\x2668\x267B\x267F\x2692-\x2694\x2696\x2697\x2699\x269B\x269C\x26A0\x26A1\x26AA\x26AB\x26B0\x26B1\x26BD\x26BE\x26C4\x26C5\x26C8\x26CE\x26CF\x26D1\x26D3\x26D4\x26E9\x26EA\x26F0-\x26F5\x26F7-\x26FA\x26FD\x2702\x2705\x2708-\x270D\x270F\x2712\x2714\x2716\x271D\x2721\x2728\x2733\x2734\x2744\x2747\x274C\x274E\x2753-\x2755\x2757\x2763\x2764\x2795-\x2797\x27A1\x27B0\x27BF\x2934\x2935\x2B05-\x2B07\x2B1B\x2B1C\x2B50\x2B55\x3030\x303D\x3297\x3299]|\xD83C[\xDC04\xDCCF\xDD70\xDD71\xDD7E\xDD7F\xDD8E\xDD91-\xDD9A\xDE01\xDE02\xDE1A\xDE2F\xDE32-\xDE3A\xDE50\xDE51\xDF00-\xDF21\xDF24-\xDF93\xDF96\xDF97\xDF99-\xDF9B\xDF9E-\xDFF0\xDFF3-\xDFF5\xDFF7-\xDFFF]|\xD83D[\xDC00-\xDCFD\xDCFF-\xDD3D\xDD49-\xDD4E\xDD50-\xDD67\xDD6F\xDD70\xDD73-\xDD79\xDD87\xDD8A-\xDD8D\xDD90\xDD95\xDD96\xDDA5\xDDA8\xDDB1\xDDB2\xDDBC\xDDC2-\xDDC4\xDDD1-\xDDD3\xDDDC-\xDDDE\xDDE1\xDDE3\xDDEF\xDDF3\xDDFA-\xDE4F\xDE80-\xDEC5\xDECB-\xDED0\xDEE0-\xDEE5\xDEE9\xDEEB\xDEEC\xDEF0\xDEF3]|\xD83E[\xDD10-\xDD18\xDD80-\xDD84\xDDC0]"; - string tempFolder = Path.Combine(Path.GetTempPath(), "TwitchDownloader"); - string downloadFolder = Path.Combine(tempFolder, "Chat Render"); - - if (!Directory.Exists(downloadFolder)) - Directory.CreateDirectory(downloadFolder); - - backgroundRenderManager.ReportProgress(0, new Progress("Fetching Chat Badges")); - GetChatBadges(chatBadges, chatJson["streamer"], renderOptions); - backgroundRenderManager.ReportProgress(0, new Progress("Fetching Emotes")); - GetEmotes(chatEmotes, chatJson["comments"], renderOptions); - backgroundRenderManager.ReportProgress(0, new Progress("Fetching Third Party Emotes")); - GetThirdPartyEmotes(thirdPartyEmotes, chatJson["streamer"], renderOptions); - backgroundRenderManager.ReportProgress(0, new Progress("Fetching Twitter Emojis")); - GetTwitterEmojis(emojiCache, chatJson["comments"], renderOptions, emojiRegex); - - Size canvasSize = new Size(renderOptions.chat_width, (int)Math.Floor(32 * renderOptions.image_scale)); - Font messageFont = new Font(renderOptions.font, (float)renderOptions.font_size, FontStyle.Regular); - Font nameFont = new Font(renderOptions.font, (float)renderOptions.font_size, FontStyle.Bold); - - backgroundRenderManager.ReportProgress(0, new Progress("Rendering Comments")); - foreach (var comment in chatJson["comments"]) - { - string userName = comment["commenter"]["display_name"].ToString(); - Point drawPos = new Point(2, canvasSize.Height / 4); - Color userColor = ColorTranslator.FromHtml(comment["message"]["user_color"] != null ? comment["message"]["user_color"].ToString() : defaultColors[rand.Next(0, defaultColors.Length)]); - Bitmap sectionImage = new Bitmap(canvasSize.Width, canvasSize.Height); - Graphics g = Graphics.FromImage(sectionImage); - List
messageSections = new List
(); - List currentGifEmotes = new List(); - Section currentSection = new Section(sectionImage, false, currentGifEmotes); - g.FillRectangle(new SolidBrush(renderOptions.background_color), -10, -10, canvasSize.Width + 20, canvasSize.Height + 20); - - SetAntiAlias(g); - DrawBadges(g, renderOptions, chatBadges, comment, ref canvasSize, ref drawPos); - DrawUsername(g, renderOptions, nameFont, userName, userColor, ref canvasSize, ref drawPos); - DrawMessage(g, renderOptions, downloadFolder, sectionImage, messageSections, currentGifEmotes, currentSection, finalComments, messageFont, emojiCache, chatEmotes, thirdPartyEmotes, comment, userName, userColor, ref canvasSize, ref drawPos, emojiRegex); - int percent = (int)Math.Floor(((double)finalComments.Count / (double)chatJson["comments"].Count()) * 100); - backgroundRenderManager.ReportProgress(percent, new Progress("Rendering Comments")); - } - - backgroundRenderManager.ReportProgress(0, new Progress("Rendering Video 0%")); - RenderVideo(renderOptions, finalComments, chatJson["comments"]); - - string[] files = Directory.GetFiles(downloadFolder); - - for (int i = 0; i < files.Length; i++) - { - try - { - File.Delete(files[i]); - } - catch { } - } - } - - private void GetTwitterEmojis(Dictionary emojiCache, JToken comments, RenderOptions renderOptions, string emojiRegex) - { - using (WebClient client = new WebClient()) - { - foreach (var comment in comments) - { - foreach (var fragment in comment["message"]["fragments"]) - { - if (fragment["emoticon"] == null) - { - string[] fragmentParts = fragment["text"].ToString().Split(' '); - for (int i = 0; i < fragmentParts.Length; i++) - { - string output = fragmentParts[i].Trim(); - - if (output == "󠀀") - continue; - - Match m = Regex.Match(output, emojiRegex); - if (m.Success) - { - for (var k = 0; k < m.Value.Length; k += char.IsSurrogatePair(m.Value, k) ? 2 : 1) - { - string codepoint = String.Format("{0:X4}", char.ConvertToUtf32(m.Value, k)).ToLower(); - codepoint = codepoint.Replace("fe0f", ""); - Console.WriteLine("U+{0:X4}", codepoint); - if (codepoint != "" && !emojiCache.ContainsKey(codepoint)) - { - byte[] bytes = client.DownloadData(String.Format("https://abs.twimg.com/emoji/v2/72x72/{0}.png", codepoint)); - MemoryStream ms = new MemoryStream(bytes); - Image emojiImage = System.Drawing.Image.FromStream(ms); - emojiCache.Add(codepoint, (Bitmap)emojiImage); - } - - } - } - } - } - } - } - } - } - - private void RenderVideo(RenderOptions renderOptions, List finalComments, JToken comments) - { - Bitmap canvas = new Bitmap(renderOptions.chat_width, renderOptions.chat_height); - Graphics gcan = Graphics.FromImage(canvas); - int videoStart = (int)Math.Floor(comments.First["content_offset_seconds"].ToObject()); - int duration = (int)Math.Ceiling(comments.Last["content_offset_seconds"].ToObject()) - videoStart; - List displayedGifs = new List(); - Stopwatch stopwatch = new Stopwatch(); - using (var vFWriter = new VideoFileWriter()) - { - // create new video file - stopwatch.Start(); - vFWriter.Open(renderOptions.save_path, renderOptions.chat_width, renderOptions.chat_height, 60, VideoCodec.H264, 6000000); - gcan.FillRectangle(new SolidBrush(renderOptions.background_color), 0, 0, renderOptions.chat_width, renderOptions.chat_height); - int startTick = (int)Math.Floor(videoStart / (1.0 / 60.0)); - int endTick = (int)Math.Floor((videoStart + duration) / (1.0 / 60.0)); - int lastUpdateTick = startTick; - int globalTick = startTick; - for (int i = startTick; i < endTick; i++) - { - int height = 0; - if (globalTick % renderOptions.update_frame == 0) - { - int y = 0; - List newly_added = new List(); - List old = new List(displayedGifs); - for (int j = 0; j < finalComments.Count; j++) - { - int commentTick = (int)Math.Floor(finalComments[j].secondsOffset / (1.0 / 60.0)); - if (commentTick >= lastUpdateTick && commentTick < globalTick) - { - Bitmap sectionImage = (Bitmap)Bitmap.FromFile(finalComments[j].section); - foreach (var emote in finalComments[j].gifEmotes) - { - GifEmote newGif = new GifEmote(new Point(emote.offset.X, emote.offset.Y + height), emote.name, emote.image); - displayedGifs.Add(newGif); - newly_added.Add(newGif); - } - height += sectionImage.Height; - } - } - foreach (var emote in old) - emote.offset = new Point(emote.offset.X, emote.offset.Y - height); - foreach (var emote in newly_added) - emote.offset = new Point(emote.offset.X, (renderOptions.chat_height - height) + emote.offset.Y); - - if (height > 0) - { - Bitmap buffer = new Bitmap(renderOptions.chat_width, height); - Graphics bg = Graphics.FromImage(buffer); - - for (int j = 0; j < finalComments.Count; j++) - { - int commentTick = (int)Math.Floor(finalComments[j].secondsOffset / (1.0 / 60.0)); - if (commentTick >= lastUpdateTick && commentTick < globalTick) - { - Bitmap sectionImage = (Bitmap)Bitmap.FromFile(finalComments[j].section); - bg.DrawImage(sectionImage, 0, y); - y += sectionImage.Height; - } - } - gcan = Graphics.FromImage(canvas); - gcan.DrawImage(canvas, 0, -height); - gcan.DrawImage(buffer, 0, renderOptions.chat_height - height); - } - lastUpdateTick = globalTick; - } - List to_remove = new List(); - foreach (var emote in displayedGifs) - { - if (emote.offset.Y < -emote.image.Width - renderOptions.chat_height) - { - to_remove.Add(emote); - } - else - { - int gifTime = (int)Math.Floor(1.5 * globalTick) % emote.total_duration; - int frame = emote.frames - 1; - int timeCount = 0; - for (int k = 0; k < emote.durations.Count; k++) - { - if (timeCount + emote.durations[k] > gifTime) - { - frame = k; - break; - } - timeCount += emote.durations[k]; - } - FrameDimension dim = new FrameDimension(emote.image.FrameDimensionsList[0]); - emote.image.SelectActiveFrame(dim, frame); - gcan.DrawImage(emote.image, emote.offset.X, emote.offset.Y, (float)(emote.image.Width * renderOptions.image_scale), (float)(emote.image.Height * renderOptions.image_scale)); - } - } - - foreach (var emote in to_remove) - { - displayedGifs.Remove(emote); - } - - vFWriter.WriteVideoFrame(canvas); - foreach (var emote in displayedGifs) - { - gcan.FillRectangle(new SolidBrush(renderOptions.background_color), emote.offset.X, emote.offset.Y, (float)(emote.image.Width * renderOptions.image_scale), (float)(emote.image.Height * renderOptions.image_scale)); - } - globalTick += 1; - double percentDouble = (double)(globalTick - startTick) / (double)(endTick - startTick) * 100.0; - int percentInt = (int)Math.Floor(percentDouble); - backgroundRenderManager.ReportProgress(percentInt, new Progress(String.Format("Rendering Video {0}%", percentInt), (int)Math.Floor(stopwatch.Elapsed.TotalSeconds), percentDouble)); - } - vFWriter.Close(); - stopwatch.Stop(); - } - } - - private void DrawMessage(Graphics g, RenderOptions renderOptions, string downloadFolder, Bitmap sectionImage, List
messageSections, List currentGifEmotes, Section currentSection, List finalComments, Font messageFont, Dictionary emojiCache, List> chatEmotes, List thirdPartyEmotes, JToken comment, string userName, Color userColor, ref Size canvasSize, ref Point drawPos, string emojiRegex) - { - if (comment["source"].ToString() != "chat") - return; - if (comment["message"]["user_notice_params"]["msg-id"] != null) - return; - - int hasEmoteHeight = (int)Math.Floor(32 * renderOptions.image_scale); - int hasNoEmoteHeight = (int)Math.Floor(20 * renderOptions.image_scale); - - foreach (var fragment in comment["message"]["fragments"]) - { - if (fragment["emoticon"] == null) - { - string[] fragmentParts = fragment["text"].ToString().Split(' '); - for (int i = 0; i < fragmentParts.Length; i++) - { - bool isThirdPartyEmote = false; - - ThirdPartyEmote currentEmote = null; - foreach (var thirdPartyEmote in thirdPartyEmotes) - { - if (fragmentParts[i] == thirdPartyEmote.name) - { - isThirdPartyEmote = true; - currentEmote = thirdPartyEmote; - } - } - - if (isThirdPartyEmote) - { - if (drawPos.X + currentEmote.emote.Width * renderOptions.image_scale > canvasSize.Width) - AddNewSection(ref messageSections, ref renderOptions, ref currentGifEmotes, ref currentSection, ref g, ref sectionImage, ref canvasSize, ref drawPos); - - if (currentEmote.imageType == "gif") - { - GifEmote emote = new GifEmote(new Point(drawPos.X + 2, 0), currentEmote.name, currentEmote.emote); - currentGifEmotes.Add(emote); - currentSection.hasEmote = true; - drawPos.X += (int)Math.Ceiling(currentEmote.emote.Width * renderOptions.image_scale + 3); - } - else - { - currentSection.hasEmote = true; - float emoteHeight = (float)(currentEmote.emote.Height * renderOptions.image_scale); - g.DrawImage(currentEmote.emote, drawPos.X + 2, (hasEmoteHeight - emoteHeight) / 2, (float)(currentEmote.emote.Width * renderOptions.image_scale), emoteHeight); - drawPos.X += (int)Math.Ceiling(currentEmote.emote.Width * renderOptions.image_scale + 3); - } - } - else - { - string output = fragmentParts[i].Trim(); - - if (output == "󠀀") - continue; - - if (Regex.Match(output, emojiRegex).Success) - { - if (drawPos.X + (20 * renderOptions.image_scale) + 3 > canvasSize.Width) - AddNewSection(ref messageSections, ref renderOptions, ref currentGifEmotes, ref currentSection, ref g, ref sectionImage, ref canvasSize, ref drawPos); - - Match m = Regex.Match(output, emojiRegex); - for (var k = 0; k < m.Value.Length; k += char.IsSurrogatePair(m.Value, k) ? 2 : 1) - { - string codepoint = String.Format("{0:X4}", char.ConvertToUtf32(m.Value, k)).ToLower(); - codepoint = codepoint.Replace("fe0f", ""); - Console.WriteLine("U+{0:X4}", codepoint); - if (codepoint != "") - { - Bitmap emojiBitmap = emojiCache[codepoint]; - currentSection.hasEmote = true; - float emoteHeight = (float)(20 * renderOptions.image_scale); - float emoteWidth = (float)(20 * renderOptions.image_scale); - g.DrawImage(emojiBitmap, drawPos.X + 2, (hasEmoteHeight - emoteHeight) / 2, emoteWidth, emoteHeight); - drawPos.X += (int)Math.Ceiling(emoteWidth * renderOptions.image_scale) + 3; - } - - } - } - else - { - int inputWidth = (int)Math.Ceiling(g.MeasureString(output, messageFont, 0, StringFormat.GenericTypographic).Width); - - if (drawPos.X + inputWidth + 3 > canvasSize.Width) - AddNewSection(ref messageSections, ref renderOptions, ref currentGifEmotes, ref currentSection, ref g, ref sectionImage, ref canvasSize, ref drawPos); - if (renderOptions.outline) - { - GraphicsPath p = new GraphicsPath(); - p.AddString( - output, - messageFont.FontFamily, - (int)messageFont.Style, - g.DpiY * messageFont.Size / 72, // em size - new Point(drawPos.X, drawPos.Y + 2), // location where to draw text - new StringFormat() - ); - Pen pen = new Pen(Color.Black, 6); - pen.LineJoin = LineJoin.Round; - g.DrawPath(pen, p); - //g.FillPath(new SolidBrush(Color.Black), p); - } - g.DrawString(output, messageFont, new SolidBrush(Color.White), drawPos.X, drawPos.Y + 2); - drawPos.X += inputWidth + (int)Math.Floor(4 * renderOptions.image_scale); - } - - } - } - } - else - { - //Is a first party emote - int emoteId = Int32.Parse(fragment["emoticon"]["emoticon_id"].ToString()); - Image emoteImage = null; - - foreach (var emote in chatEmotes) - { - if (emoteId == emote.Key) - emoteImage = emote.Value; - } - - if (emoteImage != null) - { - if (drawPos.X + emoteImage.Width * renderOptions.image_scale > canvasSize.Width) - AddNewSection(ref messageSections, ref renderOptions, ref currentGifEmotes, ref currentSection, ref g, ref sectionImage, ref canvasSize, ref drawPos); - currentSection.hasEmote = true; - float emoteHeight = (float)(emoteImage.Height * renderOptions.image_scale); - g.DrawImage(emoteImage, drawPos.X - 2, (hasEmoteHeight - emoteHeight) / 2, (float)(emoteImage.Width * renderOptions.image_scale), emoteHeight); - drawPos.X += (int)Math.Floor(emoteImage.Width * renderOptions.image_scale - 2); - } - } - } - - messageSections.Add(currentSection); - List finalGifs = new List(); - - int finalY = 0; - int finalHeight = 0; - for (int i = 0; i < messageSections.Count; i++) - finalHeight += messageSections[i].hasEmote ? hasEmoteHeight : hasNoEmoteHeight; - Bitmap final = new Bitmap(canvasSize.Width, finalHeight); - g.Dispose(); - g = Graphics.FromImage(final); - for (int i = 0; i < messageSections.Count; i++) - { - foreach (var gif in messageSections[i].gifEmotes) - { - finalGifs.Add(new GifEmote(new Point(gif.offset.X, finalY), gif.name, gif.image)); - } - - if (messageSections[i].hasEmote) - { - g.DrawImage(messageSections[i].section, 0, finalY); - finalY += (int)Math.Floor(32 * renderOptions.image_scale); - } - else - { - Bitmap temp = new Bitmap(renderOptions.chat_width, (int)Math.Floor(20 * renderOptions.image_scale)); - Graphics gtemp = Graphics.FromImage(temp); - gtemp.DrawImage(messageSections[i].section, 0, -((hasEmoteHeight - hasNoEmoteHeight) / 2)); - g.DrawImage(temp, 0, finalY); - temp.Dispose(); - gtemp.Dispose(); - finalY += (int)Math.Floor(20 * renderOptions.image_scale); - } - } - g.Dispose(); - - currentSection.section.Dispose(); - string imagePath = Path.Combine(downloadFolder, finalComments.Count + ".png"); - finalComments.Add(new TwitchComment(imagePath, Double.Parse(comment["content_offset_seconds"].ToString()), finalGifs)); - final.Save(imagePath); - } - - private void AddNewSection(ref List
messageSections, ref RenderOptions renderOptions, ref List currentGifEmotes, ref Section currentSection, ref Graphics g, ref Bitmap bmp, ref Size canvasSize, ref Point drawPos) - { - messageSections.Add(currentSection); - currentGifEmotes = new List(); - bmp = new Bitmap(canvasSize.Width, canvasSize.Height); - currentSection = new Section(bmp, false, currentGifEmotes); - g = Graphics.FromImage(bmp); - SetAntiAlias(g); - g.FillRectangle(new SolidBrush(renderOptions.background_color), -10, -10, canvasSize.Width + 20, canvasSize.Height + (int)Math.Floor(32 * renderOptions.image_scale) + 20); - drawPos.X = 2; - } - - private void SetAntiAlias(Graphics g) - { - g.PixelOffsetMode = PixelOffsetMode.HighQuality; - g.SmoothingMode = SmoothingMode.AntiAlias; - g.InterpolationMode = InterpolationMode.HighQualityBicubic; - g.TextRenderingHint = TextRenderingHint.AntiAlias; - g.CompositingQuality = CompositingQuality.HighQuality; - } - - private void GetEmotes(List> chatEmotes, JToken comments, RenderOptions renderOptions) - { - List alreadyAdded = new List(); - List failedEmotes = new List(); - using (WebClient client = new WebClient()) - { - foreach (var comment in comments) - { - foreach (var fragment in comment["message"]["fragments"]) - { - if (fragment["emoticon"] != null) - { - int id = fragment["emoticon"]["emoticon_id"].ToObject(); - if (!alreadyAdded.Contains(id) && !failedEmotes.Contains(id)) - { - try - { - byte[] bytes = client.DownloadData(String.Format("https://static-cdn.jtvnw.net/emoticons/v1/{0}/1.0", id)); - alreadyAdded.Add(id); - MemoryStream ms = new MemoryStream(bytes); - Image emoteImage = System.Drawing.Image.FromStream(ms); - chatEmotes.Add(new KeyValuePair(id, emoteImage)); - } - catch - { - string emoteName = fragment["text"].ToString(); - //sometimes emote still exists but id is different, I use twitch metrics because I can't find an api to find an emote by name - try - { - HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://www.twitchmetrics.net/e/" + emoteName); - request.AllowAutoRedirect = false; - HttpWebResponse response = (HttpWebResponse)request.GetResponse(); - string redirUrl = response.Headers["Location"]; - response.Close(); - string newId = redirUrl.Split('/').Last().Split('-').First(); - byte[] bytes = client.DownloadData(String.Format("https://static-cdn.jtvnw.net/emoticons/v1/{0}/1.0", newId)); - alreadyAdded.Add(id); - MemoryStream ms = new MemoryStream(bytes); - Image emoteImage = System.Drawing.Image.FromStream(ms); - chatEmotes.Add(new KeyValuePair(id, emoteImage)); - } - catch - { - AppendLog("Unable to fetch emote " + emoteName); - failedEmotes.Add(id); - } - } - } - } - } - } - } - } - - private void AppendLog(string message) - { - textLog.BeginInvoke((Action)(() => - textLog.AppendText(message + Environment.NewLine) - )); - } - - private void DrawUsername(Graphics g, RenderOptions renderOptions, Font nameFont, string userName, Color userColor, ref Size canvasSize, ref Point drawPos) - { - if (renderOptions.outline) - { - drawPos.X += 2; - GraphicsPath p = new GraphicsPath(); - p.AddString( - userName + ":", - nameFont.FontFamily, - (int)nameFont.Style, - g.DpiY * nameFont.Size / 72, // em size - new Point(drawPos.X - 2, drawPos.Y + 2), // location where to draw text - new StringFormat() - ); - Pen pen = new Pen(Color.Black, 6); - pen.LineJoin = LineJoin.Round; - g.DrawPath(pen, p); - //g.FillPath(new SolidBrush(Color.Black), p); - } - g.DrawString(userName + ":", nameFont, new SolidBrush(userColor), drawPos.X - 2, drawPos.Y + 2); - drawPos.X += (int)Math.Floor(g.MeasureString(userName + ":", nameFont, 0, StringFormat.GenericTypographic).Width) + (int)Math.Floor(6 * renderOptions.image_scale); - } - - private void DrawBadges(Graphics g, RenderOptions renderOptions, List chatBadges, JToken comment, ref Size canvasSize, ref Point drawPos) - { - if (comment["message"]["user_badges"] != null) - { - foreach (var badge in comment["message"]["user_badges"]) - { - string id = badge["_id"].ToString(); - string version = badge["version"].ToString(); - - Image badgeImage = null; - foreach (var cachedBadge in chatBadges) - { - if (cachedBadge.name == id) - { - foreach (var cachedVersion in cachedBadge.versions) - { - if (cachedVersion.Key == version) - { - badgeImage = cachedVersion.Value; - } - } - } - } - - if (badgeImage != null) - { - float imageDim = (float)(18 * renderOptions.image_scale); - float yPos = (canvasSize.Height - imageDim) / 2; - g.DrawImage(badgeImage, drawPos.X, yPos, imageDim, imageDim); - drawPos.X += (int)Math.Floor(20 * renderOptions.image_scale); - } - } - } - } - - private void GetChatBadges(List chatBadges, JToken streamerInfo, RenderOptions renderOptions) - { - using (WebClient client = new WebClient()) - { - //Global chat badges - JObject globalBadges = JObject.Parse(client.DownloadString("https://badges.twitch.tv/v1/badges/global/display")); - //Subscriber badges - JObject subBadges = JObject.Parse(client.DownloadString(String.Format("https://badges.twitch.tv/v1/badges/channels/{0}/display", streamerInfo["id"].ToString()))); - - foreach (var badge in globalBadges["badge_sets"].Union(subBadges["badge_sets"])) - { - JProperty jBadgeProperty = badge.ToObject(); - string name = jBadgeProperty.Name; - List> versions = new List>(); - - foreach (var version in badge.First["versions"]) - { - JProperty jVersionProperty = version.ToObject(); - string versionString = jVersionProperty.Name; - string downloadUrl = version.First["image_url_2x"].ToString(); - byte[] bytes = client.DownloadData(downloadUrl); - MemoryStream ms = new MemoryStream(bytes); - try - { - //For some reason, twitch has corrupted images sometimes :) for example - //https://static-cdn.jtvnw.net/badges/v1/a9811799-dce3-475f-8feb-3745ad12b7ea/1 - Image badgeImage = System.Drawing.Image.FromStream(ms); - versions.Add(new KeyValuePair(versionString, badgeImage)); - } - catch (ArgumentException) - { } - } - - chatBadges.Add(new ChatBadge(name, versions)); - } - } - } - - private void GetThirdPartyEmotes(List thirdPartyEmotes, JToken streamerInfo, RenderOptions renderOptions) - { - using (WebClient client = new WebClient()) - { - if (renderOptions.bttv_emotes) - { - //Global BTTV emotes - JObject BBTV = JObject.Parse(client.DownloadString("https://api.betterttv.net/2/emotes")); - foreach (var emote in BBTV["emotes"]) - { - string id = emote["id"].ToString(); - byte[] bytes = client.DownloadData(String.Format("https://cdn.betterttv.net/emote/{0}/1x", id)); - MemoryStream ms = new MemoryStream(bytes); - Image temp_emote = System.Drawing.Image.FromStream(ms); - thirdPartyEmotes.Add(new ThirdPartyEmote(temp_emote, emote["code"].ToString(), emote["imageType"].ToString(), id)); - } - - //Channel specific BTTV emotes - try - { - JObject BBTV_channel = JObject.Parse(client.DownloadString("https://api.betterttv.net/2/channels/" + streamerInfo["name"].ToString())); - foreach (var emote in BBTV_channel["emotes"]) - { - string id = emote["id"].ToString(); - byte[] bytes = client.DownloadData(String.Format("https://cdn.betterttv.net/emote/{0}/1x", id)); - MemoryStream ms = new MemoryStream(bytes); - Image temp_emote = System.Drawing.Image.FromStream(ms); - thirdPartyEmotes.Add(new ThirdPartyEmote(temp_emote, emote["code"].ToString(), emote["imageType"].ToString(), id)); - } - } - catch { } - } - - if (renderOptions.ffz_emotes) - { - //Global FFZ emotes - JObject FFZ = JObject.Parse(client.DownloadString("https://api.betterttv.net/2/frankerfacez_emotes/global")); - foreach (var emote in FFZ["emotes"]) - { - string id = emote["id"].ToString(); - byte[] bytes = client.DownloadData(String.Format("https://cdn.betterttv.net/frankerfacez_emote/{0}/1", id)); - MemoryStream ms = new MemoryStream(bytes); - Image temp_emote = System.Drawing.Image.FromStream(ms); - thirdPartyEmotes.Add(new ThirdPartyEmote(temp_emote, emote["code"].ToString(), emote["imageType"].ToString(), id)); - } - - //Channel specific FFZ emotes - try - { - JObject FFZ_channel = JObject.Parse(client.DownloadString("https://api.betterttv.net/2/frankerfacez_emotes/channels/" + streamerInfo["id"].ToString())); - foreach (var emote in FFZ_channel["emotes"]) - { - string id = emote["id"].ToString(); - byte[] bytes = client.DownloadData(String.Format("https://cdn.betterttv.net/frankerfacez_emote/{0}/1", id)); - MemoryStream ms = new MemoryStream(bytes); - Image temp_emote = System.Drawing.Image.FromStream(ms); - thirdPartyEmotes.Add(new ThirdPartyEmote(temp_emote, emote["code"].ToString(), emote["imageType"].ToString(), id)); - } - } - catch { } - } - } - } - public static Image ScaleImage(Image image, int maxWidth, int maxHeight) - { - var ratioX = (double)maxWidth / image.Width; - var ratioY = (double)maxHeight / image.Height; - var ratio = Math.Min(ratioX, ratioY); - - var newWidth = (int)(image.Width * ratio); - var newHeight = (int)(image.Height * ratio); - - var newImage = new Bitmap(newWidth, newHeight); - - using (var graphics = Graphics.FromImage(newImage)) - graphics.DrawImage(image, 0, 0, newWidth, newHeight); - - return newImage; - } - private void BtnBrowse_Click(object sender, EventArgs e) - { - OpenFileDialog openFileDialog = new OpenFileDialog(); - openFileDialog.Filter = "JSON Files | *.json"; - openFileDialog.RestoreDirectory = true; - - if (openFileDialog.ShowDialog() == DialogResult.OK) - { - textJSON.Text = openFileDialog.FileName; - } - } - - private void TextColor_TextChanged(object sender, EventArgs e) - { - try - { - Color color = ColorTranslator.FromHtml(textColor.Text); - colorDialog.Color = color; - btnColor.BackColor = color; - } - catch { } - } - - private void BackgroundRenderManager_ProgressChanged(object sender, ProgressChangedEventArgs e) - { - Progress update = (Progress)e.UserState; - toolProgressBar.Value = e.ProgressPercentage >= 100 ? 100 : e.ProgressPercentage; - - if (e.ProgressPercentage > 0 && !update.justMessage) - { - int timeLeftInt = (int)Math.Floor(100.0/ update.percent_double * update.time_passed) - update.time_passed; - TimeSpan timeLeft = new TimeSpan(0, 0, timeLeftInt); - toolStatus.Text = String.Format("{0} ({1} left)", update.message, timeLeft.ToString(@"h\hm\ms\s")); - } - else - toolStatus.Text = update.message; - } - - private void BackgroundRenderManager_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) - { - toolStatus.Text = "Done Rendering"; - toolProgressBar.Value = 0; - btnRender.Enabled = true; - } - - private void FrmChatRender_Load(object sender, EventArgs e) - { - InstalledFontCollection installedFontCollection = new InstalledFontCollection(); - FontFamily[] fontFamilies = installedFontCollection.Families; - int fontIndex = 0; - string fontName = Properties.Settings.Default.RENDER_FONT == "" ? "Arial" : Properties.Settings.Default.RENDER_FONT; - for (int i = 0; i < fontFamilies.Length; i++) - { - comboFonts.Items.Add(fontFamilies[i].Name); - if (fontFamilies[i].Name == fontName) - fontIndex = i; - } - comboFonts.SelectedIndex = fontIndex; - - textColor.Text = Properties.Settings.Default.RENDER_COLOR; - textHeight.Text = Properties.Settings.Default.RENDER_HEIGHT.ToString(); - textWidth.Text = Properties.Settings.Default.RENDER_WIDTH.ToString(); - checkBTTV.Checked = Properties.Settings.Default.RENDER_BTTV; - checkFFZ.Checked = Properties.Settings.Default.RENDER_FFZ; - checkOutline.Checked = Properties.Settings.Default.RENDER_OUTLINE; - textFontSize.Text = Properties.Settings.Default.RENDER_FONT_SIZE.ToString(); - textUpdateTime.Text = Properties.Settings.Default.RENDER_UPDATE_TIME.ToString(); - - if (textFontSize.Text.IndexOf('.') == -1) - textFontSize.Text += ".0"; - if (textUpdateTime.Text.IndexOf('.') == -1) - textUpdateTime.Text += ".0"; - } - } - -} - -public class Progress -{ - public string message = ""; - public int time_passed = 0; - public double percent_double = 0.0; - public bool justMessage = false; - public Progress(string Message, int Time_passed, double Percent_double) - { - message = Message; - time_passed = Time_passed; - percent_double = Percent_double; - } - - public Progress(string Message) - { - message = Message; - justMessage = true; - } -} - -public class RenderOptions -{ - public string json_path { get; set; } - public string save_path { get; set; } - public Color background_color { get; set; } - public int chat_height { get; set; } - public int chat_width { get; set; } - public bool bttv_emotes { get; set; } - public bool ffz_emotes { get; set; } - public bool outline { get; set; } - public string font { get; set; } - public double font_size { get; set; } - public double image_scale { get; set; } - public int update_frame { get; set; } - - public RenderOptions(string Json_path, string Save_path, Color Background_color, int Chat_height, int Chat_width, bool Bttv_emotes, bool Ffz_emotes, bool Outline, string Font, double Font_size, double Update_rate) - { - json_path = Json_path; - save_path = Save_path; - background_color = Background_color; - chat_height = Chat_height; - chat_width = Chat_width; - bttv_emotes = Bttv_emotes; - ffz_emotes = Ffz_emotes; - outline = Outline; - font = Font; - font_size = Font_size; - image_scale = font_size / 9; - - if (Update_rate == 0) - update_frame = 1; - else - update_frame = (int)Math.Floor(Update_rate / (1.0 / 60.0) ); - } -} - -public class ThirdPartyEmote -{ - public Image emote; - public string imageType; - public string name; - public string id; - public int width; - public int height; - public int fps = 0; - public int frames = 0; - - public ThirdPartyEmote(Image Emote, string Name, string ImageType, string Id) - { - emote = Emote; - name = Name; - imageType = ImageType; - id = Id; - width = emote.Width; - height = emote.Height; - if (imageType == "gif") - { - FrameDimension dim = new FrameDimension(emote.FrameDimensionsList[0]); - frames = emote.GetFrameCount(dim); - PropertyItem item = emote.GetPropertyItem(0x5100); - fps = (item.Value[0] + item.Value[1] * 256) * 10; - - if (fps == 0) - fps = 2; - } - } -} - -public class TwitchComment -{ - public string section; - public double secondsOffset; - public List gifEmotes; - - public TwitchComment(string Section, double SecondsOffset, List GifEmotes) - { - section = Section; - secondsOffset = SecondsOffset; - gifEmotes = GifEmotes; - } -} - -public class GifEmote -{ - public Point offset; - public string name; - public Image image; - public FrameDimension dim; - public int frames; - public List durations; - public int total_duration; - - public GifEmote(Point Offset, string Name, Image Image) - { - offset = Offset; - name = Name; - image = Image; - dim = new FrameDimension(image.FrameDimensionsList[0]); - frames = image.GetFrameCount(dim); - var times = image.GetPropertyItem(0x5100).Value; - - durations = new List(); - for (int i = 0; i < frames; i++) - { - var duration = BitConverter.ToInt32(times, 4 * i); - durations.Add(duration); - total_duration += duration; - } - - if (total_duration == 0) - { - for (int i = 0; i < durations.Count; i++) - { - durations.RemoveAt(i); - durations.Insert(i, 10); - } - total_duration = durations.Count * 10; - } - } -} - -public class ChatBadge -{ - public string name; - public List> versions; - - public ChatBadge(string Name, List> Versions) - { - name = Name; - versions = Versions; - } -} - -public class Section -{ - public Bitmap section; - public bool hasEmote; - public List gifEmotes; - - public Section(Bitmap Section, bool HasEmote, List GifEmotes) - { - section = Section; - hasEmote = HasEmote; - gifEmotes = GifEmotes; - } -} \ No newline at end of file diff --git a/TwitchDownloader/frmChatRender.resx b/TwitchDownloader/frmChatRender.resx deleted file mode 100644 index ddd78fca..00000000 --- a/TwitchDownloader/frmChatRender.resx +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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 - - - 238, 17 - - - 443, 17 - - \ No newline at end of file diff --git a/TwitchDownloader/frmClipDownload.Designer.cs b/TwitchDownloader/frmClipDownload.Designer.cs deleted file mode 100644 index 5944a6b0..00000000 --- a/TwitchDownloader/frmClipDownload.Designer.cs +++ /dev/null @@ -1,281 +0,0 @@ -namespace TwitchDownloader -{ - partial class frmClipDownload - { - /// - /// 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.btnGetInfo = new System.Windows.Forms.Button(); - this.textUrl = new System.Windows.Forms.TextBox(); - this.label1 = new System.Windows.Forms.Label(); - this.comboQuality = new System.Windows.Forms.ComboBox(); - this.label2 = new System.Windows.Forms.Label(); - this.labelCreated = new System.Windows.Forms.Label(); - this.labelStreamer = new System.Windows.Forms.Label(); - this.label16 = new System.Windows.Forms.Label(); - this.textTitle = new System.Windows.Forms.TextBox(); - this.label15 = new System.Windows.Forms.Label(); - this.label14 = new System.Windows.Forms.Label(); - this.pictureThumb = new System.Windows.Forms.PictureBox(); - this.label7 = new System.Windows.Forms.Label(); - this.label6 = new System.Windows.Forms.Label(); - this.textLog = new System.Windows.Forms.TextBox(); - this.btnDownload = new System.Windows.Forms.Button(); - this.backgroundDownloadManager = new System.ComponentModel.BackgroundWorker(); - this.statusStrip = new System.Windows.Forms.StatusStrip(); - this.toolStatus = new System.Windows.Forms.ToolStripStatusLabel(); - ((System.ComponentModel.ISupportInitialize)(this.pictureThumb)).BeginInit(); - this.statusStrip.SuspendLayout(); - this.SuspendLayout(); - // - // btnGetInfo - // - this.btnGetInfo.Location = new System.Drawing.Point(510, 33); - this.btnGetInfo.Name = "btnGetInfo"; - this.btnGetInfo.Size = new System.Drawing.Size(75, 23); - this.btnGetInfo.TabIndex = 32; - this.btnGetInfo.Text = "Get Info"; - this.btnGetInfo.UseVisualStyleBackColor = true; - this.btnGetInfo.Click += new System.EventHandler(this.BtnGetInfo_Click); - // - // textUrl - // - this.textUrl.Location = new System.Drawing.Point(301, 35); - this.textUrl.Name = "textUrl"; - this.textUrl.Size = new System.Drawing.Size(203, 20); - this.textUrl.TabIndex = 0; - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(221, 38); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(74, 13); - this.label1.TabIndex = 30; - this.label1.Text = "Clip Slug (ID) :"; - // - // comboQuality - // - this.comboQuality.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.comboQuality.Enabled = false; - this.comboQuality.FormattingEnabled = true; - this.comboQuality.Location = new System.Drawing.Point(331, 106); - this.comboQuality.Name = "comboQuality"; - this.comboQuality.Size = new System.Drawing.Size(194, 21); - this.comboQuality.TabIndex = 34; - // - // label2 - // - this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(281, 109); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(45, 13); - this.label2.TabIndex = 33; - this.label2.Text = "Quality :"; - // - // labelCreated - // - this.labelCreated.AutoSize = true; - this.labelCreated.Location = new System.Drawing.Point(91, 236); - this.labelCreated.Name = "labelCreated"; - this.labelCreated.Size = new System.Drawing.Size(0, 13); - this.labelCreated.TabIndex = 43; - // - // labelStreamer - // - this.labelStreamer.AutoSize = true; - this.labelStreamer.Location = new System.Drawing.Point(91, 214); - this.labelStreamer.Name = "labelStreamer"; - this.labelStreamer.Size = new System.Drawing.Size(0, 13); - this.labelStreamer.TabIndex = 44; - // - // label16 - // - this.label16.AutoSize = true; - this.label16.Location = new System.Drawing.Point(19, 62); - this.label16.Name = "label16"; - this.label16.Size = new System.Drawing.Size(62, 13); - this.label16.TabIndex = 42; - this.label16.Text = "Thumbnail :"; - // - // textTitle - // - this.textTitle.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.textTitle.Location = new System.Drawing.Point(22, 279); - this.textTitle.Multiline = true; - this.textTitle.Name = "textTitle"; - this.textTitle.ReadOnly = true; - this.textTitle.Size = new System.Drawing.Size(200, 63); - this.textTitle.TabIndex = 41; - // - // label15 - // - this.label15.AutoSize = true; - this.label15.Location = new System.Drawing.Point(22, 236); - this.label15.Name = "label15"; - this.label15.Size = new System.Drawing.Size(63, 13); - this.label15.TabIndex = 40; - this.label15.Text = "Created At :"; - // - // label14 - // - this.label14.AutoSize = true; - this.label14.Location = new System.Drawing.Point(30, 214); - this.label14.Name = "label14"; - this.label14.Size = new System.Drawing.Size(55, 13); - this.label14.TabIndex = 39; - this.label14.Text = "Streamer :"; - // - // pictureThumb - // - this.pictureThumb.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.pictureThumb.Location = new System.Drawing.Point(22, 78); - this.pictureThumb.Name = "pictureThumb"; - this.pictureThumb.Size = new System.Drawing.Size(200, 125); - this.pictureThumb.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; - this.pictureThumb.TabIndex = 38; - this.pictureThumb.TabStop = false; - // - // label7 - // - this.label7.AutoSize = true; - this.label7.Location = new System.Drawing.Point(32, 258); - this.label7.Name = "label7"; - this.label7.Size = new System.Drawing.Size(53, 13); - this.label7.TabIndex = 37; - this.label7.Text = "Clip Title :"; - // - // label6 - // - this.label6.AutoSize = true; - this.label6.Location = new System.Drawing.Point(606, 62); - this.label6.Name = "label6"; - this.label6.Size = new System.Drawing.Size(31, 13); - this.label6.TabIndex = 46; - this.label6.Text = "Log :"; - // - // textLog - // - this.textLog.Location = new System.Drawing.Point(609, 78); - this.textLog.Multiline = true; - this.textLog.Name = "textLog"; - this.textLog.Size = new System.Drawing.Size(175, 264); - this.textLog.TabIndex = 45; - // - // btnDownload - // - this.btnDownload.Enabled = false; - this.btnDownload.Location = new System.Drawing.Point(368, 214); - this.btnDownload.Name = "btnDownload"; - this.btnDownload.Size = new System.Drawing.Size(111, 41); - this.btnDownload.TabIndex = 48; - this.btnDownload.Text = "Download"; - this.btnDownload.UseVisualStyleBackColor = true; - this.btnDownload.Click += new System.EventHandler(this.BtnDownload_Click); - // - // backgroundDownloadManager - // - this.backgroundDownloadManager.WorkerReportsProgress = true; - this.backgroundDownloadManager.DoWork += new System.ComponentModel.DoWorkEventHandler(this.BackgroundDownloadManager_DoWork); - this.backgroundDownloadManager.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(this.BackgroundDownloadManager_RunWorkerCompleted); - // - // statusStrip - // - this.statusStrip.ImageScalingSize = new System.Drawing.Size(20, 20); - this.statusStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.toolStatus}); - this.statusStrip.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.HorizontalStackWithOverflow; - this.statusStrip.Location = new System.Drawing.Point(0, 368); - this.statusStrip.Name = "statusStrip"; - this.statusStrip.Size = new System.Drawing.Size(812, 22); - this.statusStrip.SizingGrip = false; - this.statusStrip.TabIndex = 49; - this.statusStrip.Text = "statusStrip1"; - // - // toolStatus - // - this.toolStatus.Name = "toolStatus"; - this.toolStatus.Size = new System.Drawing.Size(26, 17); - this.toolStatus.Text = "Idle"; - // - // frmClipDownload - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(812, 390); - this.ControlBox = false; - this.Controls.Add(this.statusStrip); - this.Controls.Add(this.btnDownload); - this.Controls.Add(this.label6); - this.Controls.Add(this.textLog); - this.Controls.Add(this.labelCreated); - this.Controls.Add(this.labelStreamer); - this.Controls.Add(this.label16); - this.Controls.Add(this.textTitle); - this.Controls.Add(this.label15); - this.Controls.Add(this.label14); - this.Controls.Add(this.pictureThumb); - this.Controls.Add(this.label7); - this.Controls.Add(this.comboQuality); - this.Controls.Add(this.label2); - this.Controls.Add(this.btnGetInfo); - this.Controls.Add(this.textUrl); - this.Controls.Add(this.label1); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; - this.Name = "frmClipDownload"; - this.Text = "frmClipDownload"; - this.WindowState = System.Windows.Forms.FormWindowState.Maximized; - ((System.ComponentModel.ISupportInitialize)(this.pictureThumb)).EndInit(); - this.statusStrip.ResumeLayout(false); - this.statusStrip.PerformLayout(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.Button btnGetInfo; - private System.Windows.Forms.TextBox textUrl; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.ComboBox comboQuality; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.Label labelCreated; - private System.Windows.Forms.Label labelStreamer; - private System.Windows.Forms.Label label16; - private System.Windows.Forms.TextBox textTitle; - private System.Windows.Forms.Label label15; - private System.Windows.Forms.Label label14; - private System.Windows.Forms.PictureBox pictureThumb; - private System.Windows.Forms.Label label7; - private System.Windows.Forms.Label label6; - private System.Windows.Forms.TextBox textLog; - private System.Windows.Forms.Button btnDownload; - private System.ComponentModel.BackgroundWorker backgroundDownloadManager; - private System.Windows.Forms.StatusStrip statusStrip; - private System.Windows.Forms.ToolStripStatusLabel toolStatus; - } -} \ No newline at end of file diff --git a/TwitchDownloader/frmClipDownload.cs b/TwitchDownloader/frmClipDownload.cs deleted file mode 100644 index 9f3b19be..00000000 --- a/TwitchDownloader/frmClipDownload.cs +++ /dev/null @@ -1,171 +0,0 @@ -using Newtonsoft.Json.Linq; -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.IO; -using System.Linq; -using System.Net; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Forms; - -namespace TwitchDownloader -{ - public partial class frmClipDownload : Form - { - public frmClipDownload() - { - InitializeComponent(); - } - - private async void BtnGetInfo_Click(object sender, EventArgs e) - { - if (!textUrl.Text.All(char.IsLetter) || textUrl.Text.Length == 0) - { - MessageBox.Show("Please enter a valid Clip Slug. For example https://clips.twitch.tv/FrailOutstandingCroissantPhilosoraptor would be FrailOutstandingCroissantPhilosoraptor", "Invalid Clip Slug", MessageBoxButtons.OK, MessageBoxIcon.Error); - return; - } - - try - { - btnGetInfo.Enabled = false; - - string clipId = textUrl.Text; - Task taskInfo = GetInfo(clipId); - Task taskLinks = GetLinks(clipId); - await Task.WhenAll(taskInfo, taskLinks); - - JToken clipData = taskInfo.Result["data"][0]; - string thumbUrl = clipData["thumbnail_url"].ToString(); - Task taskThumb = GetThumb(thumbUrl); - await Task.WhenAll(taskThumb); - - pictureThumb.Image = taskThumb.Result; - labelStreamer.Text = clipData["broadcaster_name"].ToString(); - labelCreated.Text = clipData["created_at"].ToString(); - textTitle.Text = clipData["title"].ToString(); - - foreach (var quality in taskLinks.Result["quality_options"]) - { - comboQuality.Items.Add(new TwitchClip(quality["quality"].ToString(), quality["frame_rate"].ToString(), quality["source"].ToString())); - } - - comboQuality.SelectedIndex = 0; - comboQuality.Enabled = true; - btnDownload.Enabled = true; - btnGetInfo.Enabled = true; - } - catch (WebException) - { - MessageBox.Show("Unable to get Clip information. Please double check Clip Slug and try again", "Unable to get info", MessageBoxButtons.OK, MessageBoxIcon.Error); - btnGetInfo.Enabled = true; - } - } - - private async Task GetThumb(string thumbUrl) - { - Bitmap result = new Bitmap(100, 100); - using (WebClient client = new WebClient()) - { - client.Headers.Add("Client-ID", "kimne78kx3ncx6brgo4mv6wki5h1ko"); - using (Stream s = await client.OpenReadTaskAsync(thumbUrl)) - { - result = new Bitmap(s); - } - } - return result; - } - - private async Task GetInfo(object clipId) - { - using (WebClient client = new WebClient()) - { - client.Headers.Add("Client-ID", "kimne78kx3ncx6brgo4mv6wki5h1ko"); - string response = await client.DownloadStringTaskAsync(String.Format("https://api.twitch.tv/helix/clips?id={0}", clipId)); - JObject result = JObject.Parse(response); - return result; - } - } - - private async Task GetLinks(object clipId) - { - using (WebClient client = new WebClient()) - { - client.Headers.Add("Client-ID", "kimne78kx3ncx6brgo4mv6wki5h1ko"); - //API is deprecated - hopefully keeps working for a while. Can genereate full url from thumbnail but fails ocasionally https://discuss.dev.twitch.tv/t/clips-api-does-not-expose-video-url/15763/2 - string response = await client.DownloadStringTaskAsync(String.Format("https://clips.twitch.tv/api/v2/clips/{0}/status", clipId)); - JObject result = JObject.Parse(response); - return result; - } - } - - private void BtnDownload_Click(object sender, EventArgs e) - { - SaveFileDialog saveFileDialog = new SaveFileDialog(); - - saveFileDialog.Filter = "MP4 Files | *.mp4"; - saveFileDialog.RestoreDirectory = true; - - if (saveFileDialog.ShowDialog() == DialogResult.OK) - { - DownloadInfo info = new DownloadInfo((TwitchClip)comboQuality.SelectedItem, saveFileDialog.FileName); - toolStatus.Text = "Downloading"; - btnGetInfo.Enabled = false; - comboQuality.Enabled = false; - - backgroundDownloadManager.RunWorkerAsync(info); - } - } - - private void BackgroundDownloadManager_DoWork(object sender, DoWorkEventArgs e) - { - DownloadInfo clipInfo = (DownloadInfo)e.Argument; - - using (WebClient client = new WebClient()) - { - client.DownloadFile(clipInfo.clip.url, clipInfo.path); - } - } - - private void BackgroundDownloadManager_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) - { - toolStatus.Text = "Done Downloading"; - btnGetInfo.Enabled = true; - } - } -} - -public class TwitchClip -{ - public string quality { get; set; } - public string framerate { get; set; } - public string url { get; set; } - - public TwitchClip(string Quality, string Framerate, string Url) - { - quality = Quality; - framerate = Framerate; - url = Url; - } - - override - public string ToString() - { - //Only show framerate if it's not 30fps - return String.Format("{0}p{1}", quality, framerate == "30" ? "" : framerate); - } -} - -public class DownloadInfo -{ - public TwitchClip clip { get; set; } - public string path { get; set; } - - public DownloadInfo(TwitchClip Clip, string Path) - { - clip = Clip; - path = Path; - } -} \ No newline at end of file diff --git a/TwitchDownloader/frmClipDownload.resx b/TwitchDownloader/frmClipDownload.resx deleted file mode 100644 index d09dd8e0..00000000 --- a/TwitchDownloader/frmClipDownload.resx +++ /dev/null @@ -1,126 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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 - - - 347, 17 - - \ No newline at end of file diff --git a/TwitchDownloader/frmMain.Designer.cs b/TwitchDownloader/frmMain.Designer.cs deleted file mode 100644 index 17b1d40a..00000000 --- a/TwitchDownloader/frmMain.Designer.cs +++ /dev/null @@ -1,153 +0,0 @@ -namespace TwitchDownloader -{ - partial class frmMain - { - /// - /// 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() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frmMain)); - this.mainSplitContainer = new System.Windows.Forms.SplitContainer(); - this.btnAbout = new System.Windows.Forms.Button(); - this.btnFrmChatRender = new System.Windows.Forms.Button(); - this.btnFrmChatDownload = new System.Windows.Forms.Button(); - this.btnFrmClipDownload = new System.Windows.Forms.Button(); - this.btnFrmVodDownload = new System.Windows.Forms.Button(); - ((System.ComponentModel.ISupportInitialize)(this.mainSplitContainer)).BeginInit(); - this.mainSplitContainer.Panel1.SuspendLayout(); - this.mainSplitContainer.SuspendLayout(); - this.SuspendLayout(); - // - // mainSplitContainer - // - this.mainSplitContainer.IsSplitterFixed = true; - this.mainSplitContainer.Location = new System.Drawing.Point(16, 15); - this.mainSplitContainer.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); - this.mainSplitContainer.Name = "mainSplitContainer"; - this.mainSplitContainer.Orientation = System.Windows.Forms.Orientation.Horizontal; - // - // mainSplitContainer.Panel1 - // - this.mainSplitContainer.Panel1.Controls.Add(this.btnAbout); - this.mainSplitContainer.Panel1.Controls.Add(this.btnFrmChatRender); - this.mainSplitContainer.Panel1.Controls.Add(this.btnFrmChatDownload); - this.mainSplitContainer.Panel1.Controls.Add(this.btnFrmClipDownload); - this.mainSplitContainer.Panel1.Controls.Add(this.btnFrmVodDownload); - this.mainSplitContainer.Panel1.RightToLeft = System.Windows.Forms.RightToLeft.No; - // - // mainSplitContainer.Panel2 - // - this.mainSplitContainer.Panel2.RightToLeft = System.Windows.Forms.RightToLeft.No; - this.mainSplitContainer.RightToLeft = System.Windows.Forms.RightToLeft.No; - this.mainSplitContainer.Size = new System.Drawing.Size(1083, 567); - this.mainSplitContainer.SplitterDistance = 82; - this.mainSplitContainer.SplitterWidth = 1; - this.mainSplitContainer.TabIndex = 1; - // - // btnAbout - // - this.btnAbout.Location = new System.Drawing.Point(979, 4); - this.btnAbout.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); - this.btnAbout.Name = "btnAbout"; - this.btnAbout.Size = new System.Drawing.Size(100, 28); - this.btnAbout.TabIndex = 8; - this.btnAbout.Text = "About"; - this.btnAbout.UseVisualStyleBackColor = true; - this.btnAbout.Click += new System.EventHandler(this.BtnAbout_Click); - // - // btnFrmChatRender - // - this.btnFrmChatRender.Location = new System.Drawing.Point(743, 11); - this.btnFrmChatRender.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); - this.btnFrmChatRender.Name = "btnFrmChatRender"; - this.btnFrmChatRender.Size = new System.Drawing.Size(189, 60); - this.btnFrmChatRender.TabIndex = 7; - this.btnFrmChatRender.Text = "Chat Render"; - this.btnFrmChatRender.UseVisualStyleBackColor = true; - this.btnFrmChatRender.Click += new System.EventHandler(this.BtnFrmChatRender_Click); - // - // btnFrmChatDownload - // - this.btnFrmChatDownload.Location = new System.Drawing.Point(545, 11); - this.btnFrmChatDownload.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); - this.btnFrmChatDownload.Name = "btnFrmChatDownload"; - this.btnFrmChatDownload.Size = new System.Drawing.Size(189, 60); - this.btnFrmChatDownload.TabIndex = 6; - this.btnFrmChatDownload.Text = "Chat Downloader"; - this.btnFrmChatDownload.UseVisualStyleBackColor = true; - this.btnFrmChatDownload.Click += new System.EventHandler(this.BtnFrmChatDownload_Click); - // - // btnFrmClipDownload - // - this.btnFrmClipDownload.Location = new System.Drawing.Point(348, 11); - this.btnFrmClipDownload.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); - this.btnFrmClipDownload.Name = "btnFrmClipDownload"; - this.btnFrmClipDownload.Size = new System.Drawing.Size(189, 60); - this.btnFrmClipDownload.TabIndex = 5; - this.btnFrmClipDownload.Text = "Clip Downloader"; - this.btnFrmClipDownload.UseVisualStyleBackColor = true; - this.btnFrmClipDownload.Click += new System.EventHandler(this.BtnFrmClipDownload_Click); - // - // btnFrmVodDownload - // - this.btnFrmVodDownload.Location = new System.Drawing.Point(151, 11); - this.btnFrmVodDownload.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); - this.btnFrmVodDownload.Name = "btnFrmVodDownload"; - this.btnFrmVodDownload.Size = new System.Drawing.Size(189, 60); - this.btnFrmVodDownload.TabIndex = 4; - this.btnFrmVodDownload.Text = "VOD Downloader"; - this.btnFrmVodDownload.UseVisualStyleBackColor = true; - this.btnFrmVodDownload.Click += new System.EventHandler(this.BtnFrmVodDownload_Click); - // - // frmMain - // - this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(1115, 581); - this.Controls.Add(this.mainSplitContainer); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); - this.Name = "frmMain"; - this.Text = "Twitch Downloader"; - this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FrmMain_FormClosing); - this.Load += new System.EventHandler(this.FrmMain_Load); - this.mainSplitContainer.Panel1.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.mainSplitContainer)).EndInit(); - this.mainSplitContainer.ResumeLayout(false); - this.ResumeLayout(false); - - } - - #endregion - private System.Windows.Forms.SplitContainer mainSplitContainer; - private System.Windows.Forms.Button btnFrmChatRender; - private System.Windows.Forms.Button btnFrmChatDownload; - private System.Windows.Forms.Button btnFrmClipDownload; - private System.Windows.Forms.Button btnFrmVodDownload; - private System.Windows.Forms.Button btnAbout; - } -} - diff --git a/TwitchDownloader/frmMain.cs b/TwitchDownloader/frmMain.cs deleted file mode 100644 index 3a3c3fe5..00000000 --- a/TwitchDownloader/frmMain.cs +++ /dev/null @@ -1,89 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Forms; -using Xabe.FFmpeg; - -namespace TwitchDownloader -{ - public partial class frmMain : Form - { - frmVodDownload formVodDownload = new frmVodDownload(); - frmClipDownload formClipDownload = new frmClipDownload(); - frmChatDownload formChatDownload = new frmChatDownload(); - frmChatRender formChatRender = new frmChatRender(); - public frmMain() - { - InitializeComponent(); - } - - private async void FrmMain_Load(object sender, EventArgs e) - { - formVodDownload.TopLevel = false; - formVodDownload.Dock = DockStyle.Fill; - formVodDownload.Show(); - mainSplitContainer.Panel2.Controls.Add(formVodDownload); - formClipDownload.TopLevel = false; - formClipDownload.Dock = DockStyle.Fill; - mainSplitContainer.Panel2.Controls.Add(formClipDownload); - formChatDownload.TopLevel = false; - formChatDownload.Dock = DockStyle.Fill; - mainSplitContainer.Panel2.Controls.Add(formChatDownload); - formChatRender.TopLevel = false; - formChatRender.Dock = DockStyle.Fill; - mainSplitContainer.Panel2.Controls.Add(formChatRender); - - formVodDownload.Select(); - - await FFmpeg.GetLatestVersion(); - } - - private void FrmMain_FormClosing(object sender, FormClosingEventArgs e) - { - Properties.Settings.Default.Save(); - } - - private void HideForms() - { - formVodDownload.Hide(); - formClipDownload.Hide(); - formChatDownload.Hide(); - formChatRender.Hide(); - } - - private void BtnFrmVodDownload_Click(object sender, EventArgs e) - { - HideForms(); - formVodDownload.Show(); - } - - private void BtnFrmClipDownload_Click(object sender, EventArgs e) - { - HideForms(); - formClipDownload.Show(); - } - - private void BtnFrmChatDownload_Click(object sender, EventArgs e) - { - HideForms(); - formChatDownload.Show(); - } - - private void BtnFrmChatRender_Click(object sender, EventArgs e) - { - HideForms(); - formChatRender.Show(); - } - - private void BtnAbout_Click(object sender, EventArgs e) - { - frmAbout formAbout = new frmAbout(); - formAbout.Show(); - } - } -} diff --git a/TwitchDownloader/frmMain.resx b/TwitchDownloader/frmMain.resx deleted file mode 100644 index 66003700..00000000 --- a/TwitchDownloader/frmMain.resx +++ /dev/null @@ -1,700 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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 - - - - - AAABAAUAEBAAAAEAIABoBAAAVgAAABgYAAABACAAiAkAAL4EAAAgIAAAAQAgAKgQAABGDgAAMDAAAAEA - IACoJQAA7h4AAEBAAAABACAAKEIAAJZEAAAoAAAAEAAAACAAAAABACAAAAAAAAAEAADXDQAA1w0AAAAA - AAAAAAAAAAAAmQAAAPsAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD7AAAAmQAAAMoAAAD/AAAA9gAAAO8AAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAA - AO8AAAD2AAAA/wAAAMoAAADMAAAA/wAAAIwAAAA1AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAA - ADgAAAA1AAAAjAAAAP8AAADMAAAAzAAAAP8AAABrAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAGsAAAD/AAAAzAAAAMwAAAD/AAAAbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAABsAAAA/wAAAMwAAACWAAAAvgAAAE8AAAAAAAAAAAAAAAAAAAAAAAAABwAA - AAkAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAL4AAACWAAAACgAAAAwAAAAFAAAAAAAAAAAAAAAAAAAABQAA - AHcAAACLAAAADAAAAAAAAAAAAAAAAAAAAAUAAAAMAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AFsAAADuAAAA9wAAAG4AAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AEEAAADfAAAA/wAAAP8AAADmAAAASAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - ACUAAADHAAAA/wAAAP8AAAD/AAAA/wAAAMsAAAAmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAjAAAAWgAAAK0AAAD/AAAA/wAAAL4AAABwAAAAKwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAB/AAAA/wAAAP8AAACJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAP8AAAD/AAAAigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH8AAAD/AAAA/wAAAIoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAA/wAAAP8AAACKAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAP8AAAD/AAAAiAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/4AAAf+AAAHngAABw4AAD8HwAA+B8AAPAPAADwDwAA/D8AAPw/ - AAD8PwAA/D8AAPw/AAAoAAAAGAAAADAAAAABACAAAAAAAAAJAADXDQAA1w0AAAAAAAAAAAAAAAAATgAA - ANwAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAANwAAABOAAAAoAAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAACgAAAArAAAAP8AAAD/AAAA+gAAAPMAAADzAAAA8wAAAPMAAADzAAAA8wAAAPMAAADzAAAA8wAA - APMAAADzAAAA8wAAAPMAAADzAAAA8wAAAPMAAAD6AAAA/wAAAP8AAACsAAAArAAAAP8AAAD/AAAAtQAA - AEkAAABIAAAASAAAAEgAAABIAAAASAAAAEgAAABIAAAASAAAAEgAAABIAAAASAAAAEgAAABIAAAASAAA - AEkAAAC1AAAA/wAAAP8AAACsAAAArAAAAP8AAAD/AAAAlwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAACXAAAA/wAAAP8AAACsAAAArAAA - AP8AAAD/AAAAmAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAIAAACYAAAA/wAAAP8AAACsAAAArAAAAP8AAAD/AAAAmAAAAAIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACYAAAA/wAA - AP8AAACsAAAArAAAAP8AAAD/AAAAmAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACZAAAA/wAAAP8AAACsAAAAcAAAAKgAAACpAAAAYwAA - AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAADQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAEAAABjAAAAqQAAAKgAAABwAAAABgAAAAgAAAAIAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAgAAAB6AAAAlgAAABUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAACAAAAAgAAAAGAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAGEAAADuAAAA+gAAAIQAAAAIAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAARQAAAN4AAAD/AAAA/wAAAO0AAABdAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxAAAAzAAAAP8AAAD/AAAA/wAA - AP8AAADZAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAB4AAAC0AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAuQAAAB8AAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAJYAAAD7AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/AAAAJYAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAFwAAAHIAAAB/AAAApgAAAPkAAAD/AAAA/wAAAPwAAADCAAAAnwAA - AI0AAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAATgAAAPIAAAD/AAAA/wAAAPgAAABfAAAAAgAAAAUAAAABAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATwAAAPIAAAD/AAAA/wAA - APgAAABcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAATwAAAPIAAAD/AAAA/wAAAPgAAABcAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATwAA - APIAAAD/AAAA/wAAAPgAAABcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATwAAAPIAAAD/AAAA/wAAAPgAAABcAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAATwAAAPIAAAD/AAAA/wAAAPgAAABcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATwAAAPIAAAD/AAAA/wAA - APgAAABcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAASgAAAO8AAAD/AAAA/wAAAPYAAABXAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/4AAH/+AAB//gAAf/4AAH5+AAD8PwAP+B - /wD/gP8A/wD/AP4AfwD8AD8A/AA/AP+APwD/gf8A/4H/AP+B/wD/gf8A/4H/AP+B/wD/gf8AKAAAACAA - AABAAAAAAQAgAAAAAAAAEAAA1w0AANcNAAAAAAAAAAAAAAAAABwAAACfAAAA9QAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA9AAAAJ4AAAAcAAAAaQAAAPMAAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA8wAAAGgAAACJAAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAiQAA - AIoAAAD/AAAA/wAAAP8AAAD9AAAA9gAAAPUAAAD2AAAA9gAAAPYAAAD2AAAA9gAAAPYAAAD2AAAA9gAA - APYAAAD2AAAA9gAAAPYAAAD2AAAA9gAAAPYAAAD2AAAA9gAAAPYAAAD1AAAA9gAAAP0AAAD/AAAA/wAA - AP8AAACKAAAAigAAAP8AAAD/AAAA/wAAANQAAABjAAAAVwAAAFgAAABYAAAAWAAAAFgAAABYAAAAWAAA - AFgAAABYAAAAWAAAAFgAAABYAAAAWAAAAFgAAABYAAAAWAAAAFgAAABYAAAAWAAAAFcAAABkAAAA1AAA - AP8AAAD/AAAA/wAAAIoAAACKAAAA/wAAAP8AAAD/AAAAvQAAABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - ABEAAAC9AAAA/wAAAP8AAAD/AAAAigAAAIoAAAD/AAAA/wAAAP8AAAC+AAAAEgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAEgAAAL4AAAD/AAAA/wAAAP8AAACKAAAAigAAAP8AAAD/AAAA/wAAAL4AAAASAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAASAAAAvgAAAP8AAAD/AAAA/wAAAIoAAACKAAAA/wAAAP8AAAD/AAAAvgAA - ABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAC+AAAA/wAAAP8AAAD/AAAAigAAAIoAAAD/AAAA/wAA - AP8AAAC+AAAAEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgAAAL4AAAD/AAAA/wAAAP8AAACKAAAAiQAA - AP4AAAD+AAAA/wAAAL0AAAARAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAvQAAAP8AAAD+AAAA/gAA - AIkAAABPAAAAkgAAAJIAAACTAAAAbAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAALAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAABsAAAAkwAA - AJIAAACSAAAATwAAAAQAAAAHAAAABwAAAAcAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAADAAAAHsAAACcAAAAIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAUAAAAHAAAABwAAAAcAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAYAAABmAAAA7AAAAPsAAACUAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAACAAAATAAAAN0AAAD/AAAA/wAAAPEAAAByAAAACAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADUAAADJAAAA/wAAAP8AAAD/AAAA/wAAAOAAAABQAAAAAQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlAAAAtQAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AMkAAAAzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFwAAAJwAAAD6AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/QAAAKgAAAAbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAACBAAAA8gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA9AAAAIIAAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAYwAAAOgAAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA6AAAAF0AAAACAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAABxAAAAoAAA - AJ4AAACwAAAA7gAAAP8AAAD/AAAA/wAAAP8AAAD4AAAA0QAAAMMAAADFAAAAiQAAAAsAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA - AAgAAAAKAAAACAAAADUAAADUAAAA/wAAAP8AAAD/AAAA/wAAAOQAAABLAAAAFwAAABoAAAATAAAAAgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAALAAAANIAAAD/AAAA/wAAAP8AAAD/AAAA4QAAADcAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtAAAA0gAAAP8AAAD/AAAA/wAAAP8AAADhAAAAOAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC0AAADSAAAA/wAAAP8AAAD/AAAA/wAA - AOEAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALQAAANIAAAD/AAAA/wAA - AP8AAAD/AAAA4QAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtAAAA0gAA - AP8AAAD/AAAA/wAAAP8AAADhAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AC0AAADSAAAA/wAAAP8AAAD/AAAA/wAAAOEAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAALQAAANIAAAD/AAAA/wAAAP8AAAD/AAAA4QAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAtAAAA0gAAAP8AAAD/AAAA/wAAAP8AAADhAAAAOAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC0AAADSAAAA/wAAAP8AAAD/AAAA/wAAAOEAAAA4AAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJwAAAMoAAAD/AAAA/wAAAP8AAAD/AAAA2QAA - ADIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAP//8AD///AA///wAP//8AD///AA///wAP+f8AH/D/g//gf///wD///8Af//+AH///A - A///gAH//wAA//8AAP//AAD///AP///wD///8A////AP///wD///8A////AP///wD///8A////AP/ygA - AAAwAAAAYAAAAAEAIAAAAAAAACQAANcNAADXDQAAAAAAAAAAAAAAAAAAAAAALAAAAJwAAADqAAAA/QAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/QAAAOkAAACaAAAAKwAAAAAAAAAXAAAAmwAA - APUAAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD1AAAAmQAA - ABYAAAA6AAAA4QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA4QAAADoAAABIAAAA9QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA9QAAAEgAAABJAAAA9gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA9gAAAEkAAABJAAAA9gAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA+gAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAA - APgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAA - APgAAAD4AAAA+AAAAPgAAAD4AAAA+gAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA9gAAAEkAAABJAAAA9gAA - AP8AAAD/AAAA/wAAAP8AAADzAAAAoQAAAHQAAAB2AAAAdgAAAHYAAAB2AAAAdgAAAHYAAAB2AAAAdgAA - AHYAAAB2AAAAdgAAAHYAAAB2AAAAdgAAAHYAAAB2AAAAdgAAAHYAAAB2AAAAdgAAAHYAAAB2AAAAdgAA - AHYAAAB2AAAAdgAAAHYAAAB2AAAAdgAAAHYAAAB0AAAAogAAAPMAAAD/AAAA/wAAAP8AAAD/AAAA9gAA - AEkAAABJAAAA9gAAAP8AAAD/AAAA/wAAAP8AAADpAAAAVQAAAAIAAAAFAAAABQAAAAUAAAAFAAAABQAA - AAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAA - AAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAADAAAAVQAAAOkAAAD/AAAA/wAA - AP8AAAD/AAAA9gAAAEkAAABJAAAA9gAAAP8AAAD/AAAA/wAAAP8AAADpAAAAUQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAA - AOkAAAD/AAAA/wAAAP8AAAD/AAAA9gAAAEkAAABJAAAA9gAAAP8AAAD/AAAA/wAAAP8AAADpAAAAUgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAUgAAAOkAAAD/AAAA/wAAAP8AAAD/AAAA9gAAAEkAAABJAAAA9gAAAP8AAAD/AAAA/wAA - AP8AAADpAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAOkAAAD/AAAA/wAAAP8AAAD/AAAA9gAAAEkAAABJAAAA9gAA - AP8AAAD/AAAA/wAAAP8AAADpAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAOkAAAD/AAAA/wAAAP8AAAD/AAAA9gAA - AEkAAABJAAAA9gAAAP8AAAD/AAAA/wAAAP8AAADpAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAOkAAAD/AAAA/wAA - AP8AAAD/AAAA9gAAAEkAAABJAAAA9gAAAP8AAAD/AAAA/wAAAP8AAADpAAAAUgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAA - AOkAAAD/AAAA/wAAAP8AAAD/AAAA9gAAAEkAAABJAAAA9gAAAP8AAAD/AAAA/wAAAP8AAADpAAAAUgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAUgAAAOkAAAD/AAAA/wAAAP8AAAD/AAAA9gAAAEkAAABJAAAA9gAAAP8AAAD/AAAA/wAA - AP8AAADpAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAOkAAAD/AAAA/wAAAP8AAAD/AAAA9gAAAEkAAABDAAAA4gAA - AOsAAADrAAAA6wAAAOwAAADWAAAASwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASwAAANYAAADsAAAA6wAAAOsAAADrAAAA4gAA - AEMAAAAgAAAAbQAAAHEAAABxAAAAcQAAAHEAAABnAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAdAAAABAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAAAAGcAAABxAAAAcQAA - AHEAAABxAAAAbQAAACAAAAABAAAABQAAAAUAAAAFAAAABQAAAAUAAAAEAAAAAgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFwAAAHwAAACeAAAAPgAA - AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA - AAQAAAAFAAAABQAAAAUAAAAFAAAABQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAbwAA - AOgAAAD7AAAAqwAAAC8AAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAkAAABYAAAA2AAAAP8AAAD/AAAA9AAAAJEAAAAeAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAABgAAAEMAAADHAAAA/gAAAP8AAAD/AAAA/wAAAOwAAAB1AAAAEgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAACAAAAMAAAAK8AAAD9AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADXAAAAVwAA - AAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAmQAAAPYAAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD9AAAAvwAAAD0AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABcAAACLAAAA8AAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA+gAAAKkAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAHIAAADjAAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPAAAACJAAAAGAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAXAAA - ANQAAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADdAAAAZwAA - AAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAIAAABIAAAAxQAAAPwAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD8AAAAyQAAAEoAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAQAAADMAAACzAAAA9gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA9wAAALAAAAAuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAJoAAADyAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPEAAACQAAAAGAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPQAAAK4AAADHAAAAxwAAAMcAAADKAAAA4wAA - APwAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA9wAAAO0AAADrAAAA6wAAAOsAAADKAAAARAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFQAAADUAAAA4AAAAOAAA - ADcAAABDAAAAmwAAAPQAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD8AAAAvgAAAGoAAABeAAAAXwAA - AF8AAABWAAAAIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAANAAAAfgAAAPEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD6AAAAmQAA - ABQAAAABAAAAAgAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAfwAAAPEAAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD6AAAAmAAAABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAfwAAAPEAAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD6AAAAmAAAABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAfwAA - APEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD6AAAAmAAAABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAOAAAAfwAAAPEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD6AAAAmAAAABIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAOAAAAfwAAAPEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD6AAAAmAAA - ABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAfwAAAPEAAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD6AAAAmAAAABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAfwAAAPEAAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD6AAAAmAAAABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAfwAA - APEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD6AAAAmAAAABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAOAAAAfwAAAPEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD6AAAAmAAAABIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAOAAAAfwAAAPEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD6AAAAmAAA - ABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAfwAAAPEAAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD6AAAAmAAAABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAfwAAAPEAAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD6AAAAmAAAABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAgAAA - APEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD6AAAAmAAAABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAOAAAAfgAAAPEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD5AAAAlwAAABIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAKAAAAbAAAAOgAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADzAAAAhQAA - AA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAACAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAP////8AAAAA/////wAAAAD/////AAAAAP////8AAAAA/////wAAAAD/ - ////AAAAAP////8AAAAA/////wAAAAD/////AAAAAP/+P/8AAAAA//wf/wAAAP//+A///wAA///wB/// - AAD//+AH//8AAP//wAP//wAA///AAf//AAD//4AB//8AAP//AAD//wAA//4AAH//AAD//AAAP/8AAP/4 - AAA//wAA//gAAB//AAD/+AAAH/8AAP/4AAAf/wAA///AAD//AAD//8AD//8AAP//wAP//wAA///AA/// - AAD//8AD//8AAP//wAP//wAA///AA///AAD//8AD//8AAP//wAP//wAA///AA///AAD//8AD//8AAP// - wAP//wAA///AA///AAD//8AD//8AAP//wAP//wAA///AA///AAAoAAAAQAAAAIAAAAABACAAAAAAAABA - AADXDQAA1w0AAAAAAAAAAAAAAAAAAAAAAAAAAAAhAAAAkgAAAN8AAAD6AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAPoAAADeAAAAkAAAACAAAAAAAAAAAAAAAAAAAAAjAAAAyAAAAPUAAAD9AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/QAAAPQAAADHAAAAIQAAAAAAAAAAAAAAlAAA - APAAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA8AAA - AJEAAAAAAAAAAAAAANgAAAD8AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAPwAAADXAAAAAAAAAAQAAADsAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA7AAAAAQAAAAFAAAA7gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAO4AAAAFAAAABQAA - AO4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAADuAAAABQAAAAUAAADuAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA7gAAAAUAAAAFAAAA7gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAADUAAAAkgAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAA - AJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAA - AJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAA - AJMAAADUAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAO4AAAAFAAAABQAAAO4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAAoAAAABAAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAA - AAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAA - AAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAA - AAoAAAAKAAAACgAAAAoAAAAQAAAAoQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADuAAAABQAA - AAUAAADuAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAJ0AAAAGAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAJ0AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA7gAAAAUAAAAFAAAA7gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACdAAAABgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAACdAAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAO4AAAAFAAAABQAAAO4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAAnQAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAHAAAAnQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADuAAAABQAAAAUAAADuAAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAJ0AAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAJ0AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA7gAA - AAUAAAAFAAAA7gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACdAAAABgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAACdAAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAO4AAAAFAAAABQAAAO4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAnQAA - AAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAnQAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADuAAAABQAAAAUAAADuAAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAJ0AAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAABwAAAJ0AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA7gAAAAUAAAAFAAAA7gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACdAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAACdAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AO4AAAAFAAAABQAAAO4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAnQAAAAYAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAnQAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAADuAAAABQAAAAUAAADuAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AJ0AAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAA - AJ0AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA7gAAAAUAAAAFAAAA7gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAACdAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAcAAACdAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAO4AAAAFAAAABQAA - AO4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAnQAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAnQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAADuAAAABQAAAAQAAADIAAAA1gAAANYAAADWAAAA1gAAANYAAADWAAAA1gAAAIQAAAAFAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAIQAAADWAAAA1gAA - ANYAAADWAAAA1gAAANYAAADWAAAAyAAAAAQAAAACAAAAUgAAAFcAAABXAAAAVwAAAFcAAABXAAAAVwAA - AFcAAAA2AAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAADwAAACkAAAAEAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAIAAAA2AAAAVwAAAFcAAABXAAAAVwAAAFcAAABXAAAAVwAAAFIAAAACAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAFwAAAH0AAACgAAAATgAA - AAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAEgAA - AHEAAADyAAAA/wAAAMUAAAA/AAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAADgAAAFgAAADjAAAA/wAAAP8AAAD/AAAAqAAAADAAAAAGAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAEYAAADOAAAA/wAAAP8AAAD/AAAA/wAAAPwAAACLAAAAJAAA - AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAADgAAACzAAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA8wAAAG8AAAAWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAACoAAACXAAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADcAAAAVgAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA - ABoAAAB8AAAA+QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAALsAAABBAAAAAwAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAwAAABrAAAA7QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAAngAAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAABlAAAA4QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPgAAACJAAAAFwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAABUAAAAyQAAAP0AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA5AAAAHQAAAAIAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABDAAAAtgAA - APkAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - APwAAADKAAAAWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAsAAAApAAAAPMAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA9wAAALAAAAA3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAaAAAAkgAAAOkAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADtAAAAmAAAABsAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAfgAAAN8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AOAAAAB9AAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAZwAAANUAAAD7AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD7AAAA0AAAAFwAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASwAA - AMgAAAD4AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPYAAAC8AAAANgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAIoAAADSAAAA3wAAAN8AAADfAAAA3wAAAN8AAADnAAAA9wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA7gAA - AJIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVAAAAbQAAAHAAAABwAAAAcAAAAHAAAABwAAAAlAAA - ANsAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA9AAAAMMAAACnAAAApwAA - AKcAAACnAAAApwAAAKIAAAB8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAEAAAAC/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AOEAAABhAAAAFwAAABcAAAAXAAAAFwAAABcAAAAUAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAvwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAADeAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAL8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA3gAAAFIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AEAAAAC/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAN4AAABSAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAABAAAAAvwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAADeAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAL8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA3gAAAFIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAC/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAN4AAABSAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAABAAAAAvwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADeAAAAUgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAL8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA3gAAAFIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAC/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAN4AAABSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAvwAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADeAAAAUgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAQAAAAL8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA3gAA - AFIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAC/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAN4AAABSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAvwAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADeAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAA - AL8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA3gAAAFIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAEAAAAC/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AN4AAABSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAvwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAADeAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAL8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA3gAAAFIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AEAAAAC/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAN4AAABSAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAABAAAAAvwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAADeAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAL0AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA2wAAAFEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC0AAACeAAAA+QAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAL0AAAA+AAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAADgAAAAAAAAAGAAAAAAAAAAYAAAAAAAAABAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB//////+AAAH//////4AAAf - //////gAAB//////+AAAH//////4AAAf//////gAAB//////+AAAH//////4AAAf//////gAAB////// - +AAAH//////4AAAf//////gAAB//////+AAAH//8P//4AP////gf////////8A/////////wB/////// - /+AD////////wAP///////+AAf///////wAA////////AAD///////4AAH///////AAAP//////8AAA/ - //////gAAB//////8AAAD//////gAAAH/////8AAAAP/////wAAAA//////AAAAD/////8AAAAP///// - /4AAA///////gAH///////+AAf///////4AB////////gAH///////+AAf///////4AB////////gAH/ - //////+AAf///////4AB////////gAH///////+AAf///////4AB////////gAH///////+AAf////// - /4AB////////gAH///////+AAf///////4AB////////gAH///////+AAf///////4AB//// - - - \ No newline at end of file diff --git a/TwitchDownloader/frmVodDownload.Designer.cs b/TwitchDownloader/frmVodDownload.Designer.cs deleted file mode 100644 index f179a6fd..00000000 --- a/TwitchDownloader/frmVodDownload.Designer.cs +++ /dev/null @@ -1,550 +0,0 @@ -namespace TwitchDownloader -{ - partial class frmVodDownload - { - /// - /// 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.label1 = new System.Windows.Forms.Label(); - this.textUrl = new System.Windows.Forms.TextBox(); - this.label2 = new System.Windows.Forms.Label(); - this.label3 = new System.Windows.Forms.Label(); - this.label4 = new System.Windows.Forms.Label(); - this.label5 = new System.Windows.Forms.Label(); - this.comboQuality = new System.Windows.Forms.ComboBox(); - this.textFolder = new System.Windows.Forms.TextBox(); - this.textFilename = new System.Windows.Forms.TextBox(); - this.btnFolder = new System.Windows.Forms.Button(); - this.checkCropStart = new System.Windows.Forms.CheckBox(); - this.checkCropEnd = new System.Windows.Forms.CheckBox(); - this.label7 = new System.Windows.Forms.Label(); - this.label8 = new System.Windows.Forms.Label(); - this.labelLength = new System.Windows.Forms.Label(); - this.numStartHour = new System.Windows.Forms.NumericUpDown(); - this.numStartMinute = new System.Windows.Forms.NumericUpDown(); - this.numStartSecond = new System.Windows.Forms.NumericUpDown(); - this.label10 = new System.Windows.Forms.Label(); - this.label11 = new System.Windows.Forms.Label(); - this.label12 = new System.Windows.Forms.Label(); - this.label13 = new System.Windows.Forms.Label(); - this.numEndSecond = new System.Windows.Forms.NumericUpDown(); - this.numEndMinute = new System.Windows.Forms.NumericUpDown(); - this.numEndHour = new System.Windows.Forms.NumericUpDown(); - this.btnGetInfo = new System.Windows.Forms.Button(); - this.pictureThumb = new System.Windows.Forms.PictureBox(); - this.label14 = new System.Windows.Forms.Label(); - this.label15 = new System.Windows.Forms.Label(); - this.textTitle = new System.Windows.Forms.TextBox(); - this.label16 = new System.Windows.Forms.Label(); - this.btnDownload = new System.Windows.Forms.Button(); - this.labelStreamer = new System.Windows.Forms.Label(); - this.labelCreated = new System.Windows.Forms.Label(); - this.textLog = new System.Windows.Forms.TextBox(); - this.backgroundDownloadManager = new System.ComponentModel.BackgroundWorker(); - this.statusStrip = new System.Windows.Forms.StatusStrip(); - this.toolStatus = new System.Windows.Forms.ToolStripStatusLabel(); - this.toolProgressBar = new System.Windows.Forms.ToolStripProgressBar(); - this.label6 = new System.Windows.Forms.Label(); - ((System.ComponentModel.ISupportInitialize)(this.numStartHour)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.numStartMinute)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.numStartSecond)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.numEndSecond)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.numEndMinute)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.numEndHour)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.pictureThumb)).BeginInit(); - this.statusStrip.SuspendLayout(); - this.SuspendLayout(); - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(245, 38); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(50, 13); - this.label1.TabIndex = 0; - this.label1.Text = "VOD ID :"; - // - // textUrl - // - this.textUrl.Location = new System.Drawing.Point(301, 35); - this.textUrl.Name = "textUrl"; - this.textUrl.Size = new System.Drawing.Size(203, 20); - this.textUrl.TabIndex = 0; - // - // label2 - // - this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(292, 130); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(45, 13); - this.label2.TabIndex = 2; - this.label2.Text = "Quality :"; - // - // label3 - // - this.label3.AutoSize = true; - this.label3.Location = new System.Drawing.Point(295, 158); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(42, 13); - this.label3.TabIndex = 3; - this.label3.Text = "Folder :"; - // - // label4 - // - this.label4.AutoSize = true; - this.label4.Location = new System.Drawing.Point(282, 186); - this.label4.Name = "label4"; - this.label4.Size = new System.Drawing.Size(55, 13); - this.label4.TabIndex = 4; - this.label4.Text = "Filename :"; - // - // label5 - // - this.label5.AutoSize = true; - this.label5.Location = new System.Drawing.Point(272, 214); - this.label5.Name = "label5"; - this.label5.Size = new System.Drawing.Size(65, 13); - this.label5.TabIndex = 5; - this.label5.Text = "Crop Video :"; - // - // comboQuality - // - this.comboQuality.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.comboQuality.Enabled = false; - this.comboQuality.FormattingEnabled = true; - this.comboQuality.Location = new System.Drawing.Point(342, 127); - this.comboQuality.Name = "comboQuality"; - this.comboQuality.Size = new System.Drawing.Size(203, 21); - this.comboQuality.TabIndex = 7; - // - // textFolder - // - this.textFolder.Enabled = false; - this.textFolder.Location = new System.Drawing.Point(342, 155); - this.textFolder.Name = "textFolder"; - this.textFolder.Size = new System.Drawing.Size(169, 20); - this.textFolder.TabIndex = 8; - // - // textFilename - // - this.textFilename.Enabled = false; - this.textFilename.Location = new System.Drawing.Point(342, 183); - this.textFilename.Name = "textFilename"; - this.textFilename.Size = new System.Drawing.Size(203, 20); - this.textFilename.TabIndex = 9; - // - // btnFolder - // - this.btnFolder.Enabled = false; - this.btnFolder.Location = new System.Drawing.Point(518, 155); - this.btnFolder.Name = "btnFolder"; - this.btnFolder.Size = new System.Drawing.Size(28, 20); - this.btnFolder.TabIndex = 12; - this.btnFolder.Text = "..."; - this.btnFolder.UseVisualStyleBackColor = true; - this.btnFolder.Click += new System.EventHandler(this.BtnFolder_Click); - // - // checkCropStart - // - this.checkCropStart.AutoSize = true; - this.checkCropStart.Enabled = false; - this.checkCropStart.Location = new System.Drawing.Point(342, 213); - this.checkCropStart.Name = "checkCropStart"; - this.checkCropStart.Size = new System.Drawing.Size(48, 17); - this.checkCropStart.TabIndex = 13; - this.checkCropStart.Text = "Start"; - this.checkCropStart.UseVisualStyleBackColor = true; - // - // checkCropEnd - // - this.checkCropEnd.AutoSize = true; - this.checkCropEnd.Enabled = false; - this.checkCropEnd.Location = new System.Drawing.Point(342, 239); - this.checkCropEnd.Name = "checkCropEnd"; - this.checkCropEnd.Size = new System.Drawing.Size(45, 17); - this.checkCropEnd.TabIndex = 14; - this.checkCropEnd.Text = "End"; - this.checkCropEnd.UseVisualStyleBackColor = true; - // - // label7 - // - this.label7.AutoSize = true; - this.label7.Location = new System.Drawing.Point(26, 258); - this.label7.Name = "label7"; - this.label7.Size = new System.Drawing.Size(59, 13); - this.label7.TabIndex = 15; - this.label7.Text = "VOD Title :"; - // - // label8 - // - this.label8.AutoSize = true; - this.label8.Location = new System.Drawing.Point(291, 106); - this.label8.Name = "label8"; - this.label8.Size = new System.Drawing.Size(46, 13); - this.label8.TabIndex = 17; - this.label8.Text = "Length :"; - // - // labelLength - // - this.labelLength.AutoSize = true; - this.labelLength.Location = new System.Drawing.Point(339, 106); - this.labelLength.Name = "labelLength"; - this.labelLength.Size = new System.Drawing.Size(49, 13); - this.labelLength.TabIndex = 18; - this.labelLength.Text = "00:00:00"; - // - // numStartHour - // - this.numStartHour.Enabled = false; - this.numStartHour.Location = new System.Drawing.Point(407, 210); - this.numStartHour.Name = "numStartHour"; - this.numStartHour.Size = new System.Drawing.Size(35, 20); - this.numStartHour.TabIndex = 19; - // - // numStartMinute - // - this.numStartMinute.Enabled = false; - this.numStartMinute.Location = new System.Drawing.Point(458, 210); - this.numStartMinute.Name = "numStartMinute"; - this.numStartMinute.Size = new System.Drawing.Size(35, 20); - this.numStartMinute.TabIndex = 20; - // - // numStartSecond - // - this.numStartSecond.Enabled = false; - this.numStartSecond.Location = new System.Drawing.Point(510, 210); - this.numStartSecond.Name = "numStartSecond"; - this.numStartSecond.Size = new System.Drawing.Size(35, 20); - this.numStartSecond.TabIndex = 21; - // - // label10 - // - this.label10.AutoSize = true; - this.label10.Enabled = false; - this.label10.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label10.Location = new System.Drawing.Point(497, 214); - this.label10.Name = "label10"; - this.label10.Size = new System.Drawing.Size(11, 13); - this.label10.TabIndex = 22; - this.label10.Text = ":"; - // - // label11 - // - this.label11.AutoSize = true; - this.label11.Enabled = false; - this.label11.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label11.Location = new System.Drawing.Point(445, 214); - this.label11.Name = "label11"; - this.label11.Size = new System.Drawing.Size(11, 13); - this.label11.TabIndex = 23; - this.label11.Text = ":"; - // - // label12 - // - this.label12.AutoSize = true; - this.label12.Enabled = false; - this.label12.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label12.Location = new System.Drawing.Point(445, 240); - this.label12.Name = "label12"; - this.label12.Size = new System.Drawing.Size(11, 13); - this.label12.TabIndex = 28; - this.label12.Text = ":"; - // - // label13 - // - this.label13.AutoSize = true; - this.label13.Enabled = false; - this.label13.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label13.Location = new System.Drawing.Point(497, 240); - this.label13.Name = "label13"; - this.label13.Size = new System.Drawing.Size(11, 13); - this.label13.TabIndex = 27; - this.label13.Text = ":"; - // - // numEndSecond - // - this.numEndSecond.Enabled = false; - this.numEndSecond.Location = new System.Drawing.Point(510, 236); - this.numEndSecond.Name = "numEndSecond"; - this.numEndSecond.Size = new System.Drawing.Size(35, 20); - this.numEndSecond.TabIndex = 26; - // - // numEndMinute - // - this.numEndMinute.Enabled = false; - this.numEndMinute.Location = new System.Drawing.Point(458, 236); - this.numEndMinute.Name = "numEndMinute"; - this.numEndMinute.Size = new System.Drawing.Size(35, 20); - this.numEndMinute.TabIndex = 25; - // - // numEndHour - // - this.numEndHour.Enabled = false; - this.numEndHour.Location = new System.Drawing.Point(407, 236); - this.numEndHour.Name = "numEndHour"; - this.numEndHour.Size = new System.Drawing.Size(35, 20); - this.numEndHour.TabIndex = 24; - // - // btnGetInfo - // - this.btnGetInfo.Location = new System.Drawing.Point(510, 33); - this.btnGetInfo.Name = "btnGetInfo"; - this.btnGetInfo.Size = new System.Drawing.Size(75, 23); - this.btnGetInfo.TabIndex = 29; - this.btnGetInfo.Text = "Get Info"; - this.btnGetInfo.UseVisualStyleBackColor = true; - this.btnGetInfo.Click += new System.EventHandler(this.BtnGetInfo_Click); - // - // pictureThumb - // - this.pictureThumb.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.pictureThumb.Location = new System.Drawing.Point(22, 78); - this.pictureThumb.Name = "pictureThumb"; - this.pictureThumb.Size = new System.Drawing.Size(200, 125); - this.pictureThumb.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; - this.pictureThumb.TabIndex = 30; - this.pictureThumb.TabStop = false; - // - // label14 - // - this.label14.AutoSize = true; - this.label14.Location = new System.Drawing.Point(30, 214); - this.label14.Name = "label14"; - this.label14.Size = new System.Drawing.Size(55, 13); - this.label14.TabIndex = 31; - this.label14.Text = "Streamer :"; - // - // label15 - // - this.label15.AutoSize = true; - this.label15.Location = new System.Drawing.Point(22, 236); - this.label15.Name = "label15"; - this.label15.Size = new System.Drawing.Size(63, 13); - this.label15.TabIndex = 32; - this.label15.Text = "Created At :"; - // - // textTitle - // - this.textTitle.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.textTitle.Location = new System.Drawing.Point(22, 279); - this.textTitle.Multiline = true; - this.textTitle.Name = "textTitle"; - this.textTitle.ReadOnly = true; - this.textTitle.Size = new System.Drawing.Size(200, 63); - this.textTitle.TabIndex = 33; - // - // label16 - // - this.label16.AutoSize = true; - this.label16.Location = new System.Drawing.Point(19, 62); - this.label16.Name = "label16"; - this.label16.Size = new System.Drawing.Size(62, 13); - this.label16.TabIndex = 34; - this.label16.Text = "Thumbnail :"; - // - // btnDownload - // - this.btnDownload.Enabled = false; - this.btnDownload.Location = new System.Drawing.Point(377, 276); - this.btnDownload.Name = "btnDownload"; - this.btnDownload.Size = new System.Drawing.Size(111, 41); - this.btnDownload.TabIndex = 35; - this.btnDownload.Text = "Download"; - this.btnDownload.UseVisualStyleBackColor = true; - this.btnDownload.Click += new System.EventHandler(this.BtnDownload_Click); - // - // labelStreamer - // - this.labelStreamer.AutoSize = true; - this.labelStreamer.Location = new System.Drawing.Point(91, 214); - this.labelStreamer.Name = "labelStreamer"; - this.labelStreamer.Size = new System.Drawing.Size(0, 13); - this.labelStreamer.TabIndex = 36; - // - // labelCreated - // - this.labelCreated.AutoSize = true; - this.labelCreated.Location = new System.Drawing.Point(91, 236); - this.labelCreated.Name = "labelCreated"; - this.labelCreated.Size = new System.Drawing.Size(0, 13); - this.labelCreated.TabIndex = 36; - // - // textLog - // - this.textLog.Location = new System.Drawing.Point(609, 78); - this.textLog.Multiline = true; - this.textLog.Name = "textLog"; - this.textLog.Size = new System.Drawing.Size(175, 264); - this.textLog.TabIndex = 37; - // - // backgroundDownloadManager - // - this.backgroundDownloadManager.WorkerReportsProgress = true; - this.backgroundDownloadManager.DoWork += new System.ComponentModel.DoWorkEventHandler(this.BackgroundDownloadManager_DoWork); - this.backgroundDownloadManager.ProgressChanged += new System.ComponentModel.ProgressChangedEventHandler(this.BackgroundDownloadManager_ProgressChanged); - this.backgroundDownloadManager.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(this.BackgroundDownloadManager_RunWorkerCompleted); - // - // statusStrip - // - this.statusStrip.ImageScalingSize = new System.Drawing.Size(20, 20); - this.statusStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.toolStatus, - this.toolProgressBar}); - this.statusStrip.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.HorizontalStackWithOverflow; - this.statusStrip.Location = new System.Drawing.Point(0, 368); - this.statusStrip.Name = "statusStrip"; - this.statusStrip.Size = new System.Drawing.Size(812, 22); - this.statusStrip.SizingGrip = false; - this.statusStrip.TabIndex = 38; - this.statusStrip.Text = "statusStrip1"; - // - // toolStatus - // - this.toolStatus.Name = "toolStatus"; - this.toolStatus.Size = new System.Drawing.Size(26, 17); - this.toolStatus.Text = "Idle"; - // - // toolProgressBar - // - this.toolProgressBar.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right; - this.toolProgressBar.Name = "toolProgressBar"; - this.toolProgressBar.RightToLeft = System.Windows.Forms.RightToLeft.Yes; - this.toolProgressBar.Size = new System.Drawing.Size(200, 16); - // - // label6 - // - this.label6.AutoSize = true; - this.label6.Location = new System.Drawing.Point(606, 62); - this.label6.Name = "label6"; - this.label6.Size = new System.Drawing.Size(31, 13); - this.label6.TabIndex = 39; - this.label6.Text = "Log :"; - // - // frmVodDownload - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(812, 390); - this.ControlBox = false; - this.Controls.Add(this.label6); - this.Controls.Add(this.statusStrip); - this.Controls.Add(this.textLog); - this.Controls.Add(this.labelCreated); - this.Controls.Add(this.labelStreamer); - this.Controls.Add(this.btnDownload); - this.Controls.Add(this.label16); - this.Controls.Add(this.textTitle); - this.Controls.Add(this.label15); - this.Controls.Add(this.label14); - this.Controls.Add(this.pictureThumb); - this.Controls.Add(this.btnGetInfo); - this.Controls.Add(this.label12); - this.Controls.Add(this.label13); - this.Controls.Add(this.numEndSecond); - this.Controls.Add(this.numEndMinute); - this.Controls.Add(this.numEndHour); - this.Controls.Add(this.label11); - this.Controls.Add(this.label10); - this.Controls.Add(this.numStartSecond); - this.Controls.Add(this.numStartMinute); - this.Controls.Add(this.numStartHour); - this.Controls.Add(this.labelLength); - this.Controls.Add(this.label8); - this.Controls.Add(this.label7); - this.Controls.Add(this.checkCropEnd); - this.Controls.Add(this.checkCropStart); - this.Controls.Add(this.btnFolder); - this.Controls.Add(this.textFilename); - this.Controls.Add(this.textFolder); - this.Controls.Add(this.comboQuality); - this.Controls.Add(this.label5); - this.Controls.Add(this.label4); - this.Controls.Add(this.label3); - this.Controls.Add(this.label2); - this.Controls.Add(this.textUrl); - this.Controls.Add(this.label1); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; - this.Name = "frmVodDownload"; - this.Text = "z"; - this.WindowState = System.Windows.Forms.FormWindowState.Maximized; - ((System.ComponentModel.ISupportInitialize)(this.numStartHour)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.numStartMinute)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.numStartSecond)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.numEndSecond)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.numEndMinute)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.numEndHour)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.pictureThumb)).EndInit(); - this.statusStrip.ResumeLayout(false); - this.statusStrip.PerformLayout(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.Label label1; - private System.Windows.Forms.TextBox textUrl; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.Label label3; - private System.Windows.Forms.Label label4; - private System.Windows.Forms.Label label5; - private System.Windows.Forms.ComboBox comboQuality; - private System.Windows.Forms.TextBox textFolder; - private System.Windows.Forms.TextBox textFilename; - private System.Windows.Forms.Button btnFolder; - private System.Windows.Forms.CheckBox checkCropStart; - private System.Windows.Forms.CheckBox checkCropEnd; - private System.Windows.Forms.Label label7; - private System.Windows.Forms.Label label8; - private System.Windows.Forms.Label labelLength; - private System.Windows.Forms.NumericUpDown numStartHour; - private System.Windows.Forms.NumericUpDown numStartMinute; - private System.Windows.Forms.NumericUpDown numStartSecond; - private System.Windows.Forms.Label label10; - private System.Windows.Forms.Label label11; - private System.Windows.Forms.Label label12; - private System.Windows.Forms.Label label13; - private System.Windows.Forms.NumericUpDown numEndSecond; - private System.Windows.Forms.NumericUpDown numEndMinute; - private System.Windows.Forms.NumericUpDown numEndHour; - private System.Windows.Forms.Button btnGetInfo; - private System.Windows.Forms.PictureBox pictureThumb; - private System.Windows.Forms.Label label14; - private System.Windows.Forms.Label label15; - private System.Windows.Forms.TextBox textTitle; - private System.Windows.Forms.Label label16; - private System.Windows.Forms.Button btnDownload; - private System.Windows.Forms.Label labelStreamer; - private System.Windows.Forms.Label labelCreated; - private System.Windows.Forms.TextBox textLog; - private System.ComponentModel.BackgroundWorker backgroundDownloadManager; - private System.Windows.Forms.StatusStrip statusStrip; - private System.Windows.Forms.ToolStripStatusLabel toolStatus; - private System.Windows.Forms.ToolStripProgressBar toolProgressBar; - private System.Windows.Forms.Label label6; - } -} \ No newline at end of file diff --git a/TwitchDownloader/frmVodDownload.resx b/TwitchDownloader/frmVodDownload.resx deleted file mode 100644 index ecd08eb5..00000000 --- a/TwitchDownloader/frmVodDownload.resx +++ /dev/null @@ -1,126 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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 - - - 238, 17 - - \ No newline at end of file diff --git a/TwitchDownloader/icon_rT9_icon.ico b/TwitchDownloader/icon_rT9_icon.ico deleted file mode 100644 index efb5990962fd9b99875e6beb6b2d9d9b80a9067f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34494 zcmeI54~!gD9mn5U@!DG2QVTSIy;DF>0X;RPjZyXxBn1pYBWn-V2sHR73f^Hb zp`eMBh8Bdg5Thmhv58`0lyb3YkV=dav>2g1lt@u1M=9-r*Bd|I-F?@&ab{ozmL;w{g4~ zJ_$kTsRDQ}c~hKSv;AHE82f~0af33q~g z6#s(7kVI&a=25VDZTJVSy(@u&<4N;rcmQl()zwvS5+s#=659N$lV-F0y-S_+SzrpdVbs`xrvoyb0Q&ywZ_p{hAy7_G|pw2=~J0p;G-%C7zi&Qj}LZq)R%b`z@e+Li0nE zDE?cZx#!5JL|m5+t53R<$P^M?0-AT!zHb2ONJ~DBq8(uC^(Brkf=YEsbRzixsU8Qb z+lGJR+D8&;h)y)0s9%EB84Q0-Tvv4ViZL^Z)xE5=h8ruVnNd+wc;wMsUIqQ|Q+OS$ z{nGn8_%Zwdj)Qtc04Vy_kKWt`g88P1Vp792Nf8%tyF;ghw4HQaoiVvZOV!ELZCe~rIL)T&I zqw24(f%T)&;a)CQn+J%>OO1CTjU>$_Dzh>9J z`rvpO-J3?WKeZ{_{%metR5rVSM*C8hO3w-; zn-HxXzYTZ7J14GIK9Fu(jzX1Pi|F~|OYkCSox2w1LNi2b&riTJVEghb9It{jpKVYV zDhs&!7}&CHILx*4q24tyDk9}XVjcpuUt6v}lwBW!Mu?s})Ykm_B>u8>d;m7Wv5=;y ztzQp&AXsMbd@pIf3+kI`h@PP}AMb)-SyAUodl9Iu)+^Ica5ZdzLD&R(o)4C-XR|-U z7T5|J+tR25wP*D!jb94Y{)6iX+43Bm3u-6Fz}p}V|4}nZPUh?h2>Sml*A`An*_e}4 zP#abLqQ(?CNvkX0)xT?h;r+iE{qNoM#%&NBf3z?8!AU)}#*-xVb~k( z^1P8*(CK-@pwt5$9tItx7_T&y>A}Wc_#8~^Q=AaGPeBT!u~%z=e}m@wU>#)TT(-Rc zcfd&?(Y*8{(6e~d`Y9{+%MRHnTW^P>;KQIfE=x8hu|+n^_QfE7lH|!!8rdw{&j#%U zWy!WAw#a7L9%aAU*&CqsV=IvjVf`}B{#VI&H(Uc>ZxJf{9*`};dlF~A#;FTIYh^v3 zw*o!m$OhR`i~Sdnuhp^y18TKjd0Q>c{?^_BSO2d5>#2cuZ$D>HIsbtF_;``yzk>FC zS}n3cw#X*Gjj~y`cf%E+y)-|Ua?TS^UBa7P^LD6pKV5~(2HE1bO~ zcBobKTy!lA!f8;e53)gd!)%o8jS$uQm9Pu+9^yWDKh#qnWN(U0qm-e`0 zvbcVmj$JEZ7euX}^&a|rFbh(V0cojc_3a_jQFl0ADCrsNDmw3t@`01o>SHK{`XEZ7 zK8h-ay5CmTa-h9Oo37nM z`Fe|Wp71G%+uv!YI+3s2%l_*foZi8-lYdEkk38MjxvHv$!Dc&g{a)4;X2p==YgK9 z4+YVEp95FJ9?)83D->WFw7bm2!Q~MAE_x%^dLd8q4CYoPYU5|YA0fCmp*?wh>wW@E zfp!z!*F~Ujn}fdFbG?VY5{`m)65Y@D!aA_NMukt4W+}AGc&PF27`PVnokW!1{_DRX z-RaN{{a^-uTn_p+-0x%D@gV6>hCGYbVPAx2Ayc`2*w0zJcC3V#9pZgr*mSxcOB{s~rq z#@4LKxfrB91UVEh%K)c8(I5G%H-i3~nPIaX^Yq$)RN|-WG z3Oj;f>2ei6`LAX?{c(iGhhqiGQDMcRO8;{Wr^P?)pm3N!v>?$Rc97@~I!I`R{*dbK m*Ez463;xjhFv3@wx<1UVv%(?1N~sij1Eu(h@@%=84F3lO+|ecg diff --git a/TwitchDownloader/packages.config b/TwitchDownloader/packages.config deleted file mode 100644 index 400f038b..00000000 --- a/TwitchDownloader/packages.config +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/TwitchDownloaderWPF.sln b/TwitchDownloaderWPF.sln new file mode 100644 index 00000000..3f3d675d --- /dev/null +++ b/TwitchDownloaderWPF.sln @@ -0,0 +1,31 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29324.140 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TwitchDownloader", "TwitchDownloaderWPF\TwitchDownloader.csproj", "{A5940F4D-027D-4F9E-9F65-C0D842807BE1}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|x64 = Debug|x64 + Release|Any CPU = Release|Any CPU + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {A5940F4D-027D-4F9E-9F65-C0D842807BE1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A5940F4D-027D-4F9E-9F65-C0D842807BE1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A5940F4D-027D-4F9E-9F65-C0D842807BE1}.Debug|x64.ActiveCfg = Debug|x64 + {A5940F4D-027D-4F9E-9F65-C0D842807BE1}.Debug|x64.Build.0 = Debug|x64 + {A5940F4D-027D-4F9E-9F65-C0D842807BE1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A5940F4D-027D-4F9E-9F65-C0D842807BE1}.Release|Any CPU.Build.0 = Release|Any CPU + {A5940F4D-027D-4F9E-9F65-C0D842807BE1}.Release|x64.ActiveCfg = Release|x64 + {A5940F4D-027D-4F9E-9F65-C0D842807BE1}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {02B42040-EA74-42BA-B12E-4308284E432A} + EndGlobalSection +EndGlobal diff --git a/TwitchDownloaderWPF/App.config b/TwitchDownloaderWPF/App.config new file mode 100644 index 00000000..f8f97f29 --- /dev/null +++ b/TwitchDownloaderWPF/App.config @@ -0,0 +1,65 @@ + + + + +
+ + + + + + + + + + + + + + + + + 10 + + + Arial + + + 12 + + + False + + + False + + + False + + + 600 + + + 350 + + + 1 + + + True + + + True + + + 17 + + + 17 + + + 17 + + + + \ No newline at end of file diff --git a/TwitchDownloaderWPF/App.xaml b/TwitchDownloaderWPF/App.xaml new file mode 100644 index 00000000..cd3d8c15 --- /dev/null +++ b/TwitchDownloaderWPF/App.xaml @@ -0,0 +1,14 @@ + + + + + + + + + + diff --git a/TwitchDownloaderWPF/App.xaml.cs b/TwitchDownloaderWPF/App.xaml.cs new file mode 100644 index 00000000..8848d0c2 --- /dev/null +++ b/TwitchDownloaderWPF/App.xaml.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Configuration; +using System.Data; +using System.Linq; +using System.Threading.Tasks; +using System.Windows; + +namespace TwitchDownloaderWPF +{ + /// + /// Interaction logic for App.xaml + /// + public partial class App : Application + { + } +} diff --git a/TwitchDownloaderWPF/ChatRoot.cs b/TwitchDownloaderWPF/ChatRoot.cs new file mode 100644 index 00000000..e4874f2a --- /dev/null +++ b/TwitchDownloaderWPF/ChatRoot.cs @@ -0,0 +1,85 @@ +using Newtonsoft.Json; +using System; +using System.Collections.Generic; + +public class Streamer +{ + public string name { get; set; } + public int id { get; set; } +} + +public class Commenter +{ + public string display_name { get; set; } + public string _id { get; set; } + public string name { get; set; } + public string type { get; set; } + public string bio { get; set; } + public DateTime created_at { get; set; } + public DateTime updated_at { get; set; } + public string logo { get; set; } +} + +public class Emoticon +{ + public string emoticon_id { get; set; } + public string emoticon_set_id { get; set; } +} + +public class Fragment +{ + public string text { get; set; } + public Emoticon emoticon { get; set; } +} + +public class UserBadge +{ + public string _id { get; set; } + public string version { get; set; } +} + +public class Emoticon2 +{ + public string _id { get; set; } + public int begin { get; set; } + public int end { get; set; } +} + +public class Message +{ + public string body { get; set; } + public List fragments { get; set; } + public bool is_action { get; set; } + public List user_badges { get; set; } + public string user_color { get; set; } + public UserNoticeParams user_notice_params { get; set; } + public List emoticons { get; set; } +} + +public class UserNoticeParams +{ + [JsonProperty("msg-id")] + public string msg_id { get; set; } +} + +public class Comment +{ + public string _id { get; set; } + public DateTime created_at { get; set; } + public DateTime updated_at { get; set; } + public string channel_id { get; set; } + public string content_type { get; set; } + public string content_id { get; set; } + public double content_offset_seconds { get; set; } + public Commenter commenter { get; set; } + public string source { get; set; } + public string state { get; set; } + public Message message { get; set; } + public bool more_replies { get; set; } +} + +public class ChatRoot +{ + public Streamer streamer { get; set; } + public List comments { get; set; } +} \ No newline at end of file diff --git a/TwitchDownloaderWPF/Images/peepoSad.png b/TwitchDownloaderWPF/Images/peepoSad.png new file mode 100644 index 0000000000000000000000000000000000000000..afa5da4bf291701ca205677b12e2880567310e35 GIT binary patch literal 1437 zcmV;O1!DS%P)+9$_Cpy(BJc0#|k z-Fr5Mym{nfBM(<MMcT#Rks>NoA_ix*z_xtXbm*v)_n#7br2 z)_WhD{>iN$ANxYTm9g8%^K{r-sp3T;DY6J=ge=hO#8A7XtT6_%Zo~o*AxV)?KzA$B zyxMvE^Yh>S&hz*Dp(h7?;hucb;>ibQj?JGw^83Rx!?!oqJ0a@@8=0y&0lLkCtXBXQ zG0YT6t4=K3(XT`Yl03nETY>Uro#m z-QI3wc~bSRHc|53MkX6?cBHx46LnEE6(@;$uijxQnBWsfrIO%MMH3}Sy;jSKQ&+^} z=f23^GdWp z=ox9*BPCD?sOq3J4Dx{(Gh0Tz&gDAZWc_7nX^q?mzm&>BaGHm{FLB69F@D zN#NAkFLC;jA2BvIj}<8vBTfsvMyfSI1SCMr9lc$n-R#rr7j(NB$w%%FudQx>?WaHf z<+F8*s>{pE@xDhsu~3^#zam}&B8m;9C*p|34ceW{v|CqMzxH>6wTP+FH>2=E*PyGB z%mR4~K){KEUbNxbgrx1FG5V(${%K~gw1fw!PWyAokgr;=2!g8FKre>je3@4BDwsl2 zVYgeL1S%#}I>tmBJ5;FnU=&%v3UENMaxS r6)^TV{xA}qJJgBDA_D(y?b!@s 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 literal 0 HcmV?d00001 diff --git a/TwitchDownloaderWPF/Images/ppOverheat.gif b/TwitchDownloaderWPF/Images/ppOverheat.gif new file mode 100644 index 0000000000000000000000000000000000000000..539772e347e58568645394a8169a86b2ad129086 GIT binary patch literal 11923 zcmZ?wbhEHbv|zAc_{6|qW@*R3!0=x|@V~E6ljN8G|NjHIK%n@a+s`#5*x50_)kx2P znGqsXkz1gUl30=mr2pGj6eK2RrRw*$hKPlA;$j(hINz_+T0IMj; zwpDTjNhn141}He^7o{qg>KW@M8yFfYn3?GrnwXlI8R{q)85kPr8vv1+uAzyQshO3L zxdId@+1V7Oq*(>IxIwJ~@@$ndN=gc>^!3Zj%k|3j@{7{-4J|D#K_(a(=>iq#7FXs0 zeW#mOtgHldEXV+t)Z*l#%z~24{5*xCG^@m<{L&IzB_)ObP!Hr5z)j67)&qM+FF8L~ zzap_f-%!s0E1*--IMR7?`D#Eo`%`Fb8EJ)Q4N-fSWElN%WDpv;C zRAA*?l$uzQUlfv`p92fRfQ=;nu66OAYYi{ z)T$43iatst=fOmP=?27vBv)X<1ajaBJ~a=R%KsMu(=+4$e}Dh{{`K?6_itaneE#(D z!~1t{-@JbH^2PIKPoF$~^zgy`dw1{LzIF4)^=ntJT)uSi!ufM&&zwGW^2G6DM~@sn zbnw8wy?b`=+PP!Z`!zF{kpYlR+RDXrVA#D2x^gqb-HemcnRDVYH<%+I<-9K8$uBM!OHAV+x~V3Zr8RqhkuA1C65t zjmV?PqXUhj1C67z52LdWqq7gAvk#+FlA}|Su!+^tDap|(NyNJ-vPX6Qnt@xuS%iD@@;5ANaoI z{(#n~wGShi}l;g*q zy88RSKU+37HMg`Pxnkm^$p%;*QbEumpx}7koFJeebE%6tsjw|aFY(+9?nns^w$?SF z7NTjKj85Aa_Nm2Qd0Ua4<2v_lx$!-b8}G|@{aH8tI7b7}A@$8|jjio%_Tbba*i{sdHDYbz6S(;OdhxlO{f1 zmT)$1`OLT9ey^#$RBPB&cmDnJ-woB)7@;DF)gi=$%Bcsx8{{Xb$*{C;UL?dBZ54m? zkb{9n#B%!==e;-t*0kzfebJS4@J8b4omVzZ&0Ct_H~;wkFTbrpiKL+hm`Ivhnr&c- z1R5%nu{x%Ts3`hBsWE^m62(i14nxMz4xZO z-?}aJ)B5vM2pB~bw)XD(f4l3mfI`Kvt+TbGtIMH(0@N`xW}0JlPB|gxJXpYg>fH5x z_xhe`i=`fW!oN(IgX=<*uvE=Urp63LZ`mmJ%NaXPg~%m8Q#o@oP5XM2$xrS0eZZs} zr+@qR=i2%@3-qK5Ofgzm-BLivEzrz-H^G8MpnJ>X0~K>L=le>ONJ(=swKPp@xat;t z?OoWPQs0GFHyf#C?7sc{`fu6kt4=?#HiX9$QfBVL>IlLm%0FHk{x5b?1s|BtwRtG( zob36?!swLf)!{dF?eeL+j_#V_sa_!=JmY-Y2kzc5{p0s^_J}Lrc>klu_Wb_W|3Fy? zB|zlJbj7;&HkN GetThumb(string thumbUrl) + { + using (HttpClient client = new HttpClient()) + { + BitmapImage img = new BitmapImage(); + img.CacheOption = BitmapCacheOption.OnLoad; + img.BeginInit(); + img.StreamSource = await client.GetStreamAsync(thumbUrl); + img.EndInit(); + return img; + } + } + + public static async Task GetVideoInfo(int videoId) + { + using (WebClient client = new WebClient()) + { + client.Encoding = Encoding.UTF8; + client.Headers.Add("Client-ID", "kimne78kx3ncx6brgo4mv6wki5h1ko"); + string response = await client.DownloadStringTaskAsync("https://api.twitch.tv/helix/videos?id=" + videoId); + JObject result = JObject.Parse(response); + return result; + } + } + + public static async Task GetVideoToken(int videoId) + { + using (WebClient client = new WebClient()) + { + client.Encoding = Encoding.UTF8; + client.Headers.Add("Client-ID", "kimne78kx3ncx6brgo4mv6wki5h1ko"); + string response = await client.DownloadStringTaskAsync(String.Format("https://api.twitch.tv/api/vods/{0}/access_token", videoId)); + JObject result = JObject.Parse(response); + return result; + } + } + + public static async Task GetVideoPlaylist(int videoId, string token, string sig) + { + using (WebClient client = new WebClient()) + { + client.Encoding = Encoding.UTF8; + client.Headers.Add("Client-ID", "kimne78kx3ncx6brgo4mv6wki5h1ko"); + string playlist = await client.DownloadStringTaskAsync(String.Format("http://usher.twitch.tv/vod/{0}?nauth={1}&nauthsig={2}&allow_source=true&player=twitchweb", videoId, token, sig)); + return playlist.Split('\n'); + } + } + + public static async Task GetClipInfo(object clipId) + { + using (WebClient client = new WebClient()) + { + client.Encoding = Encoding.UTF8; + client.Headers.Add("Client-ID", "kimne78kx3ncx6brgo4mv6wki5h1ko"); + string response = await client.DownloadStringTaskAsync(String.Format("https://api.twitch.tv/helix/clips?id={0}", clipId)); + JObject result = JObject.Parse(response); + return result; + } + } + + public static async Task GetClipInfoChat(object clipId) + { + using (WebClient client = new WebClient()) + { + client.Headers.Add("Accept", "application/vnd.twitchtv.v5+json"); + client.Headers.Add("Client-ID", "kimne78kx3ncx6brgo4mv6wki5h1ko"); + string response = await client.DownloadStringTaskAsync(String.Format("https://api.twitch.tv/kraken/clips/{0}", clipId)); + JObject result = JObject.Parse(response); + return result; + } + } + + public static async Task GetClipLinks(object clipId) + { + using (WebClient client = new WebClient()) + { + client.Encoding = Encoding.UTF8; + client.Headers.Add("Client-ID", "kimne78kx3ncx6brgo4mv6wki5h1ko"); + //API is deprecated - hopefully keeps working for a while. Can genereate full url from thumbnail but fails ocasionally https://discuss.dev.twitch.tv/t/clips-api-does-not-expose-video-url/15763/2 + string response = await client.DownloadStringTaskAsync(String.Format("https://clips.twitch.tv/api/v2/clips/{0}/status", clipId)); + JObject result = JObject.Parse(response); + return result; + } + } + } +} diff --git a/TwitchDownloaderWPF/MainWindow.xaml b/TwitchDownloaderWPF/MainWindow.xaml new file mode 100644 index 00000000..9adee6b2 --- /dev/null +++ b/TwitchDownloaderWPF/MainWindow.xaml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + +