├── GifEditingStudio-sm.png
├── README.md
├── ScreenCapture.png
└── TeamsPhoneScreenCaptureTool.ps1
/GifEditingStudio-sm.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jamescussen/Teams-Phone-Screen-Capture-Tool/b3ea57d2f7fd271936f778e22276099a746ad1e7/GifEditingStudio-sm.png
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Teams Phone Screen Capture Tool
2 |
3 | Hello, this is a PowerShell based tool for easily screen capturing on a Microsoft Teams Phone device as either a single image or an animated GIF (that you can also edit and markup in the tool). You can read more about it and how to use it on my blog here: https://www.myteamslab.com/2020/10/teams-phone-screen-capture-tool.html
4 |
5 | 
6 |
7 | 
8 |
9 | **Updates:**
10 |
11 | Updated to 1.02
12 | - Fixed GIF Export Error on PowerShell 5 and lower
13 |
14 | Updated to 1.01:
15 | - Updated to support for non-Teams CCX and VVX phones
16 | - Support for PowerShell Version 7
17 |
18 |
19 |
--------------------------------------------------------------------------------
/ScreenCapture.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jamescussen/Teams-Phone-Screen-Capture-Tool/b3ea57d2f7fd271936f778e22276099a746ad1e7/ScreenCapture.png
--------------------------------------------------------------------------------
/TeamsPhoneScreenCaptureTool.ps1:
--------------------------------------------------------------------------------
1 | ########################################################################
2 | # Name: Teams Phone Screen Capture Tool
3 | # Version: v1.0.2 (6/10/2022)
4 | # Original Release Date: 20/10/2020
5 | # Created By: James Cussen
6 | # Web Site: http://www.myteamslab.com
7 | # Notes: This is a PowerShell tool. To run the tool, open it from the PowerShell command line or right click on it and select "Run with PowerShell".
8 | # For more information on the requirements for setting up and using this tool please visit http://www.myteamslab.com.
9 | #
10 | # Copyright: Copyright (c) 2022, James Cussen (www.myteamslab.com) All rights reserved.
11 | # Licence: Redistribution and use of script, source and binary forms, with or without modification, are permitted provided that the following conditions are met:
12 | # 1) Redistributions of script code must retain the above copyright notice, this list of conditions and the following disclaimer.
13 | # 2) Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
14 | # 3) Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
15 | # 4) This license does not include any resale or commercial use of this software.
16 | # 5) Any portion of this software may not be reproduced, duplicated, copied, sold, resold, or otherwise exploited for any commercial purpose without express written consent of James Cussen.
17 | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; LOSS OF GOODWILL OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
18 | #
19 | # Prerequisites: You need a Microsoft Teams Phone to connect to
20 | # Known Issues: Doesn't work with AudioCodes phones because at the time of making it they don't support web based access to screen images.
21 | # Release Notes:
22 | # 1.00 - Initial Release
23 | #
24 | # 1.01 - Poly Phone and PowerShell v7 Update
25 | # - Updated to support for non-Teams CCX and VVX phones
26 | # - Support for PowerShell Version 7
27 | #
28 | # 1.02 - Fixed GIF Export Error on PowerShell 5 and lower
29 | #
30 | #########################################################################
31 |
32 |
33 |
34 | param (
35 | [parameter(ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)]
36 | [ValidateNotNullOrEmpty()]
37 | [string] $IPAddress = "10.0.0.238",
38 |
39 | [parameter(ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)]
40 | [ValidateNotNullOrEmpty()]
41 | [string] $DeviceType = "Poly",
42 |
43 |
44 | [parameter(ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)]
45 | [ValidateNotNullOrEmpty()]
46 | [string] $Password = "12345"
47 | )
48 |
49 |
50 | $theVersion = $PSVersionTable.PSVersion
51 | $MajorVersion = $theVersion.Major
52 | $MinorVersion = $theVersion.Minor
53 |
54 | $OS = [environment]::OSVersion
55 | if($OS -match "Windows")
56 | {
57 | Write-Host "This is a Windows Machine. CHECK PASSED!" -foreground "green"
58 | }
59 | else
60 | {
61 | Write-Host "This is not a Windows machine. You're in untested territory, good luck. If it doesn't work, try Windows." -foreground "Yellow"
62 | }
63 |
64 | $DotNetCoreCommands = $false
65 | Write-Host ""
66 | Write-Host "--------------------------------------------------------------"
67 | Write-Host "Powershell Version Check..." -foreground "yellow"
68 | Write-Host "Powershell Version ${MajorVersion}.${MinorVersion}" -foreground "yellow"
69 | if($MajorVersion -eq "1")
70 | {
71 | Write-Host "This machine only has Version 1 Powershell installed. This version of Powershell is not supported." -foreground "red"
72 | exit
73 | }
74 | elseif($MajorVersion -eq "2")
75 | {
76 | Write-Host "This machine has Version 2 Powershell installed. This version of Powershell is not supported." -foreground "red"
77 | exit
78 | }
79 | elseif($MajorVersion -eq "3")
80 | {
81 | Write-Host "This machine has version 3 Powershell installed. CHECK PASSED!" -foreground "green"
82 | }
83 | elseif($MajorVersion -eq "4")
84 | {
85 | Write-Host "This machine has version 4 Powershell installed. CHECK PASSED!" -foreground "green"
86 | }
87 | elseif($MajorVersion -eq "5")
88 | {
89 | Write-Host "This machine has version 5 Powershell installed. CHECK PASSED!" -foreground "green"
90 | }
91 | elseif($MajorVersion -eq "6")
92 | {
93 | Write-Host "ERROR: This machine has version 6 Powershell installed. It's recommended that you upgrade to a minimum of Version 7" -foreground "red"
94 | exit
95 | }
96 | elseif($MajorVersion -eq "7")
97 | {
98 | Write-Host "This machine has version 7 Powershell installed. CHECK PASSED!" -foreground "green"
99 | $DotNetCoreCommands = $true
100 | }
101 | else
102 | {
103 | Write-Host "This machine has version ${MajorVersion}.${MinorVersion} of Powershell installed. This tool in GUI mode is not supported with this version. Try command line mode instead." -foreground "red"
104 | exit
105 | }
106 | Write-Host "--------------------------------------------------------------"
107 | Write-Host ""
108 |
109 | if(!$DotNetCoreCommands) #PowerShell 7 doesn't like this using -SkipCertificateCheck instead
110 | {
111 | add-type @"
112 | using System.Net;
113 | using System.Security.Cryptography.X509Certificates;
114 |
115 | public class IDontCarePolicy : ICertificatePolicy {
116 | public IDontCarePolicy() {}
117 | public bool CheckValidationResult(
118 | ServicePoint sPoint, X509Certificate cert,
119 | WebRequest wRequest, int certProb) {
120 | return true;
121 | }
122 | }
123 | "@
124 | [System.Net.ServicePointManager]::CertificatePolicy = new-object IDontCarePolicy
125 | }
126 | [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls11 -bor [System.Net.SecurityProtocolType]::Tls12
127 |
128 |
129 |
130 | # Set up the form ============================================================
131 |
132 | [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
133 | [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
134 |
135 | $objForm = New-Object System.Windows.Forms.Form
136 | $objForm.Text = "Teams Phone Screen Capture Tool 1.02"
137 | $objForm.Size = New-Object System.Drawing.Size(390,220)
138 | $objForm.MinimumSize = New-Object System.Drawing.Size(390,220)
139 | $objForm.MaximizeBox = $false
140 | $objForm.FormBorderStyle = [System.Windows.Forms.FormBorderStyle]::FixedSingle
141 | $objForm.StartPosition = "CenterScreen"
142 | $objForm.Res
143 | #MyTeamsLab Icon
144 | [byte[]]$WindowIcon = @(71, 73, 70, 56, 57, 97, 32, 0, 32, 0, 231, 137, 0, 0, 52, 93, 0, 52, 94, 0, 52, 95, 0, 53, 93, 0, 53, 94, 0, 53, 95, 0,53, 96, 0, 54, 94, 0, 54, 95, 0, 54, 96, 2, 54, 95, 0, 55, 95, 1, 55, 96, 1, 55, 97, 6, 55, 96, 3, 56, 98, 7, 55, 96, 8, 55, 97, 9, 56, 102, 15, 57, 98, 17, 58, 98, 27, 61, 99, 27, 61, 100, 24, 61, 116, 32, 63, 100, 36, 65, 102, 37, 66, 103, 41, 68, 104, 48, 72, 106, 52, 75, 108, 55, 77, 108, 57, 78, 109, 58, 79, 111, 59, 79, 110, 64, 83, 114, 65, 83, 114, 68, 85, 116, 69, 86, 117, 71, 88, 116, 75, 91, 120, 81, 95, 123, 86, 99, 126, 88, 101, 125, 89, 102, 126, 90, 103, 129, 92, 103, 130, 95, 107, 132, 97, 108, 132, 99, 110, 134, 100, 111, 135, 102, 113, 136, 104, 114, 137, 106, 116, 137, 106,116, 139, 107, 116, 139, 110, 119, 139, 112, 121, 143, 116, 124, 145, 120, 128, 147, 121, 129, 148, 124, 132, 150, 125,133, 151, 126, 134, 152, 127, 134, 152, 128, 135, 152, 130, 137, 154, 131, 138, 155, 133, 140, 157, 134, 141, 158, 135,141, 158, 140, 146, 161, 143, 149, 164, 147, 152, 167, 148, 153, 168, 151, 156, 171, 153, 158, 172, 153, 158, 173, 156,160, 174, 156, 161, 174, 158, 163, 176, 159, 163, 176, 160, 165, 177, 163, 167, 180, 166, 170, 182, 170, 174, 186, 171,175, 186, 173, 176, 187, 173, 177, 187, 174, 178, 189, 176, 180, 190, 177, 181, 191, 179, 182, 192, 180, 183, 193, 182,185, 196, 185, 188, 197, 188, 191, 200, 190, 193, 201, 193, 195, 203, 193, 196, 204, 196, 198, 206, 196, 199, 207, 197,200, 207, 197, 200, 208, 198, 200, 208, 199, 201, 208, 199, 201, 209, 200, 202, 209, 200, 202, 210, 202, 204, 212, 204,206, 214, 206, 208, 215, 206, 208, 216, 208, 210, 218, 209, 210, 217, 209, 210, 220, 209, 211, 218, 210, 211, 219, 210,211, 220, 210, 212, 219, 211, 212, 219, 211, 212, 220, 212, 213, 221, 214, 215, 223, 215, 216, 223, 215, 216, 224, 216,217, 224, 217, 218, 225, 218, 219, 226, 218, 220, 226, 219, 220, 226, 219, 220, 227, 220, 221, 227, 221, 223, 228, 224,225, 231, 228, 229, 234, 230, 231, 235, 251, 251, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 33, 254, 17, 67, 114, 101, 97, 116, 101, 100, 32, 119, 105, 116, 104, 32, 71, 73, 77, 80, 0, 33, 249, 4, 1, 10, 0, 255, 0, 44, 0, 0, 0, 0, 32, 0, 32, 0, 0, 8, 254, 0, 255, 29, 24, 72, 176, 160, 193, 131, 8, 25, 60, 16, 120, 192, 195, 10, 132, 16, 35, 170, 248, 112, 160, 193, 64, 30, 135, 4, 68, 220, 72, 16, 128, 33, 32, 7, 22, 92, 68, 84, 132, 35, 71, 33, 136, 64, 18, 228, 81, 135, 206, 0, 147, 16, 7, 192, 145, 163, 242, 226, 26, 52, 53, 96, 34, 148, 161, 230, 76, 205, 3, 60, 214, 204, 72, 163, 243, 160, 25, 27, 62, 11, 6, 61, 96, 231, 68, 81, 130, 38, 240, 28, 72, 186, 114, 205, 129, 33, 94, 158, 14, 236, 66, 100, 234, 207, 165, 14, 254, 108, 120, 170, 193, 15, 4, 175, 74, 173, 30, 120, 50, 229, 169, 20, 40, 3, 169, 218, 28, 152, 33, 80, 2, 157, 6, 252, 100, 136, 251, 85, 237, 1, 46, 71,116, 26, 225, 66, 80, 46, 80, 191, 37, 244, 0, 48, 57, 32, 15, 137, 194, 125, 11, 150, 201, 97, 18, 7, 153, 130, 134, 151, 18, 140, 209, 198, 36, 27, 24, 152, 35, 23, 188, 147, 98, 35, 138, 56, 6, 51, 251, 29, 24, 4, 204, 198, 47, 63, 82, 139, 38, 168, 64, 80, 7, 136, 28, 250, 32, 144, 157, 246, 96, 19, 43, 16, 169, 44, 57, 168, 250, 32, 6, 66, 19, 14, 70, 248, 99, 129, 248, 236, 130, 90, 148, 28, 76, 130, 5, 97, 241, 131, 35, 254, 4, 40, 8, 128, 15, 8, 235, 207, 11, 88, 142, 233, 81, 112, 71, 24, 136, 215, 15, 190, 152, 67, 128, 224, 27, 22, 232, 195, 23, 180, 227, 98, 96, 11, 55, 17, 211, 31, 244, 49, 102, 160, 24, 29, 249, 201, 71, 80, 1, 131, 136, 16, 194, 30, 237, 197, 215, 91, 68, 76, 108, 145, 5, 18, 27, 233, 119, 80, 5, 133, 0, 66, 65, 132, 32, 73, 48, 16, 13, 87, 112, 20, 133, 19, 28, 85, 113, 195, 1, 23, 48, 164, 85, 68, 18, 148, 24, 16, 0, 59)
145 | $ico = New-Object IO.MemoryStream($WindowIcon, 0, $WindowIcon.Length)
146 | $objForm.Icon = [System.Drawing.Icon]::FromHandle((new-object System.Drawing.Bitmap -argument $ico).GetHIcon())
147 | $objForm.KeyPreview = $True
148 | $objForm.TabStop = $false
149 |
150 |
151 | $MyLinkLabel = New-Object System.Windows.Forms.LinkLabel
152 | $MyLinkLabel.Location = New-Object System.Drawing.Size(220,10)
153 | $MyLinkLabel.Size = New-Object System.Drawing.Size(135,15)
154 | $MyLinkLabel.DisabledLinkColor = [System.Drawing.Color]::Red
155 | $MyLinkLabel.VisitedLinkColor = [System.Drawing.Color]::Blue
156 | $MyLinkLabel.LinkBehavior = [System.Windows.Forms.LinkBehavior]::HoverUnderline
157 | $MyLinkLabel.LinkColor = [System.Drawing.Color]::Navy
158 | $MyLinkLabel.TabStop = $False
159 | $MyLinkLabel.Text = " www.myteamslab.com"
160 | $MyLinkLabel.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Right
161 | $MyLinkLabel.TextAlign = [System.Drawing.ContentAlignment]::BottomRight #TopRight
162 | $MyLinkLabel.add_click(
163 | {
164 | [system.Diagnostics.Process]::start("http://www.myteamslab.com")
165 | })
166 | $objForm.Controls.Add($MyLinkLabel)
167 |
168 |
169 | $IPAddressLabel = New-Object System.Windows.Forms.Label
170 | $IPAddressLabel.Location = New-Object System.Drawing.Size(50,40)
171 | $IPAddressLabel.Size = New-Object System.Drawing.Size(80,15)
172 | $IPAddressLabel.Text = "IP Address:"
173 | $IPAddressLabel.TabStop = $false
174 | $IPAddressLabel.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left
175 | $objForm.Controls.Add($IPAddressLabel)
176 |
177 |
178 | #IPAddressTextBox ============================================================
179 | $IPAddressTextBox = new-object System.Windows.Forms.textbox
180 | $IPAddressTextBox.location = new-object system.drawing.size(130,40)
181 | $IPAddressTextBox.size= new-object system.drawing.size(150,23)
182 | $IPAddressTextBox.text = $IPAddress
183 | $IPAddressTextBox.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left
184 | $IPAddressTextBox.tabIndex = 1
185 | $objform.controls.add($IPAddressTextBox)
186 |
187 |
188 | $BrandLabel = New-Object System.Windows.Forms.Label
189 | $BrandLabel.Location = New-Object System.Drawing.Size(50,70)
190 | $BrandLabel.Size = New-Object System.Drawing.Size(80,15)
191 | $BrandLabel.Text = "Phone Type:"
192 | $BrandLabel.TabStop = $false
193 | $BrandLabel.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left
194 | $objForm.Controls.Add($BrandLabel)
195 |
196 | $BrandDropDownBox = New-Object System.Windows.Forms.ComboBox
197 | $BrandDropDownBox.Location = New-Object System.Drawing.Size(130,70)
198 | $BrandDropDownBox.Size = New-Object System.Drawing.Size(150,15)
199 | $BrandDropDownBox.DropDownHeight = 100
200 | $BrandDropDownBox.tabIndex = 2
201 | $BrandDropDownBox.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left
202 | $BrandDropDownBox.DropDownStyle = "DropDownList"
203 |
204 | [void] $BrandDropDownBox.Items.Add("Poly")
205 | [void] $BrandDropDownBox.Items.Add("Yealink")
206 | #[void] $BrandDropDownBox.Items.Add("AudioCodes")
207 |
208 | $objForm.Controls.Add($BrandDropDownBox)
209 |
210 | $DeviceType = $DeviceType.toLower()
211 | if($DeviceType -eq "yealink")
212 | {
213 | $BrandDropDownBox.SelectedItem = "Yealink"
214 | }
215 | else
216 | {
217 | $BrandDropDownBox.SelectedItem = "Poly"
218 | }
219 |
220 |
221 | $BrandDropDownBox.Add_SelectedIndexChanged({
222 |
223 | if($BrandDropDownBox.SelectedItem -eq "Poly")
224 | {
225 | $PasswordTextBox.text = "456"
226 | }
227 | elseif($BrandDropDownBox.SelectedItem -eq "Yealink")
228 | {
229 | $PasswordTextBox.text = "admin"
230 | }
231 | })
232 |
233 | #PasswordLabel ============================================================
234 | $PasswordLabel = New-Object System.Windows.Forms.Label
235 | $PasswordLabel.Location = New-Object System.Drawing.Size(50,100)
236 | $PasswordLabel.Size = New-Object System.Drawing.Size(80,15)
237 | $PasswordLabel.Text = "Password:"
238 | $PasswordLabel.TabStop = $false
239 | $PasswordLabel.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left
240 | $objForm.Controls.Add($PasswordLabel)
241 |
242 |
243 | #PasswordTextBox ============================================================
244 | $PasswordTextBox = new-object System.Windows.Forms.textbox
245 | $PasswordTextBox.location = new-object system.drawing.size(130,100)
246 | $PasswordTextBox.size = new-object system.drawing.size(150,23)
247 | $PasswordTextBox.text = $Password
248 | $PasswordTextBox.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left
249 | $PasswordTextBox.tabIndex = 3
250 | $objform.controls.add($PasswordTextBox)
251 |
252 |
253 | # ScreenButton ============================================================
254 | $ScreenButton = New-Object System.Windows.Forms.Button
255 | $ScreenButton.Location = New-Object System.Drawing.Size(120,135)
256 | $ScreenButton.Size = New-Object System.Drawing.Size(130,23)
257 | $ScreenButton.Text = "Show Screen"
258 | $ScreenButton.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left
259 | $ScreenButton.Add_Click(
260 | {
261 |
262 | [System.Windows.Forms.Application]::DoEvents()
263 |
264 | $theIPAddress = $null
265 | $theIPAddress = $IPAddressTextBox.Text
266 |
267 | if($theIPAddress -ne $null)
268 | {
269 | $theBrand = $BrandDropDownBox.SelectedItem
270 | $thePassword = $PasswordTextBox.text
271 | Write-Host "INFO: Type Selected: $theBrand" -foreground yellow
272 | $Script:ImageArrayResult = $null
273 | ShowScreen -IPAddress $theIPAddress -Brand $theBrand -Password $thePassword
274 | if($Script:ImageArrayResult -ne $null)
275 | {
276 | EditGifDialog -ImageArray $Script:ImageArrayResult
277 | }
278 |
279 | }
280 |
281 | })
282 | $objForm.Controls.Add($ScreenButton)
283 |
284 |
285 | $Script:ImageArrayResult = $null
286 | function ShowScreen([string]$IPAddress, [string] $Brand, [string] $Password)
287 | {
288 |
289 | $SyncHash = [hashtable]::Synchronized(@{})
290 | $SyncHash.boolWhile = $true
291 | $SyncHash.IPAddress = $IPAddress
292 | $SyncHash.Brand = $Brand
293 | $SyncHash.Port = "443"
294 | $SyncHash.Image = $null
295 | $SyncHash.DotNetCoreCommands = $DotNetCoreCommands
296 | if($SyncHash.Brand -eq "Poly")
297 | {
298 | $SyncHash.HTTPUsername = "Polycom"
299 | $SyncHash.HTTPPassword = $Password
300 | }
301 | elseif($SyncHash.Brand -eq "Yealink")
302 | {
303 | $SyncHash.HTTPUsername = "admin"
304 | $SyncHash.HTTPPassword = $Password
305 | }
306 |
307 | $SyncHash.UseHTTPS = $true
308 |
309 | $SyncHash.screenConnected = $false
310 |
311 | [byte[]]$SyncHash.connectingImage = @(71, 73, 70, 56, 57, 97, 100, 1, 200, 0, 231, 255, 0, 46, 15, 20, 50, 14, 22, 56, 13, 24, 52, 15, 18, 62, 12, 17, 44, 18, 15, 62, 12, 22, 61, 12, 27, 48, 17, 17, 57, 14, 20, 65, 13, 13, 69, 11, 22, 44, 19, 21, 43, 19, 26, 72, 11, 17, 47, 18, 26, 55, 17, 14, 60, 16, 16, 50, 19, 23, 40, 22, 30, 84, 9, 23, 36, 25, 16, 34, 25, 26, 43, 23, 23, 92, 8, 22, 30, 27, 26, 29, 27, 30, 36, 25, 35, 40, 25, 23, 39, 25, 27, 24, 29, 35, 38, 25, 32, 27, 29, 26, 84, 12, 19, 26, 29, 31, 43, 24, 28, 68, 17, 22, 33, 28, 23, 34, 27, 32, 33, 27, 36, 37, 27, 24, 32, 29, 28, 31, 29, 32, 30, 30, 24, 77, 15, 30, 36, 28, 28, 33, 29, 28, 26, 32, 24, 25, 32, 28, 29, 31, 28, 30, 30, 37, 28, 31, 33, 97, 11, 19, 32, 30, 33, 23, 33, 33, 36, 29, 34, 30, 32, 29, 80, 17, 23, 34, 31, 30, 33, 31, 34, 22, 35, 30, 26, 34, 30, 31, 33, 30, 78, 19, 27, 33, 33, 27, 40, 31, 31, 90, 16, 27, 96, 14, 32, 45, 31, 33, 34, 35, 33, 92, 18, 24, 113, 13, 34, 84, 24, 32, 106, 18, 31, 108, 18, 37, 38, 40, 37, 117, 17, 30, 117, 18, 37, 97, 25, 39, 99, 25, 34, 105, 23, 36, 42, 44, 41, 133, 19, 35, 115, 25, 43, 121, 23, 47,45, 47, 45, 131, 23, 45, 133, 23, 41, 111, 30, 42, 128, 29, 40, 109, 35, 42, 51, 53, 50, 122, 32, 48, 217, 3, 50, 151, 25, 45, 130, 32, 50, 143, 28, 52, 217, 5, 61, 160, 24, 49, 217, 6, 56, 55, 57, 54, 219, 8, 51, 160, 27, 45, 155, 28, 52,220, 11, 46, 210, 15, 47, 209, 15, 52, 135, 38, 55, 142, 36, 53, 220, 12, 52, 60, 62, 59, 137, 39, 51, 176, 27, 53, 219, 13, 62, 210, 17, 58, 220, 14, 57, 143, 40, 50, 203, 23, 44, 222, 17, 53, 212, 21, 49, 202, 24, 55, 212, 21, 54, 213, 22, 43, 211, 21, 64, 204, 25, 50, 169, 35, 61, 176, 33, 59, 155, 40, 55, 185, 31, 52, 169, 36, 56, 171, 36, 52, 212, 23, 60, 195, 29, 52, 203, 26, 61, 203, 26, 66, 214, 24, 50, 194, 29, 67, 186, 32, 63, 223, 21, 59, 164, 40, 60, 187, 33, 59,214, 25, 55, 186, 33, 69, 196, 31, 58, 195, 31, 63, 215, 26, 50, 165, 41, 66, 179, 37, 67, 69, 71, 69, 158, 44, 65, 206, 30, 57, 182, 38, 57, 217, 28, 51, 153, 47, 64, 182, 39, 63, 191, 37, 56, 173, 43, 65, 175, 43, 60, 191, 38, 62, 190, 38, 67, 165, 49, 57, 74, 76, 73, 202, 40, 68, 217, 36, 71, 79, 81, 78, 83, 85, 83, 88, 90, 87, 200, 56, 82, 200, 57, 88, 177, 65, 82, 204, 57, 78, 187, 62, 83, 94, 96, 93, 193, 66, 89, 102, 104, 101, 207, 83, 106, 203, 85, 99, 111, 113, 110,209, 84, 101, 198, 88, 97, 192, 89, 109, 204, 87, 106, 197, 90, 104, 175, 102, 112, 119, 121, 118, 124, 126, 123, 130, 132, 129, 135, 137, 134, 240, 105, 129, 222, 113, 133, 225, 113, 126, 139, 141, 138, 234, 114, 130, 235, 114, 139, 230, 117, 130, 225, 120, 136, 143, 145, 142, 231, 120, 140, 217, 125, 138, 207, 129, 146, 148, 150, 147, 197, 136, 146, 156, 158, 155, 163, 165, 162, 255, 137, 158, 255, 144, 169, 170, 172, 169, 255, 149, 171, 174, 177, 173, 245, 158, 164, 255, 155, 166, 253, 156, 174, 246, 160, 174, 179, 182, 178, 239, 167, 174, 187, 189, 186, 193, 195, 192, 198, 200, 197, 202, 205, 201, 255, 190, 208, 255, 191, 201, 206, 209, 205, 254, 198, 205, 210, 213, 209, 255, 199, 212, 214, 216, 213, 218, 221, 217, 255, 211, 224, 222, 224, 221, 255, 215, 224, 255, 219, 220, 225, 228, 224, 255, 224, 229, 230, 232, 229, 234, 237, 233, 255, 230, 241, 237, 240, 236, 255, 236, 239, 255, 236, 245, 254, 238, 253, 241, 244, 240, 255, 242, 236, 255, 242, 243, 254, 244, 250, 245, 248, 244, 250, 247, 252, 249, 251, 248, 255, 250, 242, 255, 250, 248, 255, 252, 251, 255, 252, 255, 251, 254, 250, 250, 254, 255, 254, 254, 245, 253, 255, 252, 255, 255, 255, 33, 254, 17, 67, 114, 101, 97, 116,101, 100, 32, 119, 105, 116, 104, 32, 71, 73, 77, 80, 0, 33, 249, 4, 1, 10, 0, 255, 0, 44, 0, 0, 0, 0, 100, 1, 200, 0, 0, 8, 254, 0, 99, 8, 28, 72, 176, 160, 193, 131, 8, 19, 42, 92, 200, 176, 161, 195, 135, 16, 17, 186, 112, 33, 16, 134, 192, 137, 20, 7, 98, 140, 200, 177, 163, 199, 143, 32, 67, 138, 28, 73, 178, 164, 201, 147, 40, 21, 78, 172, 120, 113, 165, 70, 151, 41, 99, 202, 156, 73, 179, 166, 205, 155, 56, 65, 194, 108, 89, 112, 99, 206, 159, 64, 131, 10, 29, 74, 212, 230, 206, 24, 71, 125, 22, 93, 202, 180, 169, 211, 167, 57, 147, 102, 124, 9, 181, 170, 213, 171, 88, 179, 30, 148, 106, 112, 170, 214, 175, 96, 195, 138, 141, 121, 116, 36, 198, 179, 104, 207, 142, 93, 203, 182, 45, 81, 165, 36, 211, 202, 133, 235, 182, 174, 221, 187, 113, 213, 66, 212, 235, 81, 133, 10, 134, 126, 241, 10, 30, 44, 24, 109, 68, 190, 29, 3,47, 84, 76, 184, 177, 99, 177, 103, 113, 8, 4, 193, 83, 34, 221, 131, 56, 36, 31, 100, 60, 16, 132, 231, 129, 53, 106, 60, 30, 77, 26, 43, 70, 205, 159, 47, 183, 44, 251, 121, 96, 102, 132, 156, 39, 183, 198, 17, 186, 180, 237, 219, 75, 79, 203, 70, 76, 144, 119, 140, 214, 174, 97, 255, 45, 232, 153, 114, 12, 218, 162, 113, 43, 95, 206, 188, 185, 243, 231, 208, 163, 75, 159, 78, 189, 186, 245, 235, 216, 179, 107, 223, 206, 189, 187, 247, 239, 224, 195, 254, 139, 31, 79, 190,188, 249, 243, 232, 211, 171, 95, 207, 190, 189, 251, 247, 240, 227, 203, 159, 79, 191, 190, 253, 251, 248, 243, 235, 223, 207, 191, 191, 255, 255, 0, 6, 40, 224, 128, 51, 41, 229, 153, 111, 171, 121, 197, 81, 108, 155, 13, 71, 224, 131, 157, 129, 128, 145, 103, 48, 80, 54, 81, 11, 20, 25, 215, 155, 106, 15, 49, 248, 218, 64, 12, 66, 40, 224, 129, 46, 20, 151, 218, 132, 32, 56, 152, 22, 67, 192, 21, 52, 131, 131, 26, 209, 246, 87, 113, 34, 138, 168, 130, 9, 129, 89, 116, 28,106, 34, 248, 165, 130, 6, 26, 236, 48, 17, 8, 62, 200, 230, 163, 8, 34, 204, 160, 228, 111, 2, 225, 48, 209, 107, 158,37, 233, 3, 14, 21, 34, 133, 163, 143, 44, 213, 72, 160, 11, 38, 224, 56, 131, 13, 58, 254, 70, 164, 15, 51, 104, 80, 195, 14, 59, 36, 39, 89, 6, 40, 116, 208, 193, 5, 23, 48, 32, 129, 4, 12, 212, 9, 231, 8, 28, 116, 208, 66, 9, 37, 122, 134, 67, 17, 59, 168, 32, 2, 8, 61, 76, 233, 130, 143, 88, 106, 9, 225, 74, 74, 190, 232, 66, 11, 65, 252, 134, 195, 14, 55, 152, 80, 34, 12, 152, 246, 0, 130, 5, 12, 12, 64, 128, 3, 20, 132, 64, 3, 13, 73, 96, 128, 65, 8, 20, 56, 16, 1, 2, 23, 148, 176, 194, 11, 254, 56, 72, 232, 2, 144, 51, 100, 70, 99, 69, 74, 118, 169, 160, 162, 2, 42, 233, 215, 7, 24, 254, 150, 1, 164, 46, 148, 16, 4, 7, 157, 146, 128, 196, 19, 83, 188, 145, 201, 31, 160, 116, 210, 73, 32, 210, 46, 178, 8, 27, 111, 96, 225, 196, 15, 9, 12, 192, 0, 156, 122, 30, 10, 130, 6, 147, 173, 240, 42, 166, 51, 116, 9, 35, 175, 3, 190, 120, 163, 10, 51, 88, 88, 44, 10, 12, 36, 64, 65, 19, 103, 248, 1, 9, 36, 143, 60, 66, 200, 191, 120, 88, 98, 9, 31, 120, 224, 65, 72, 191, 144, 32, 146, 72, 31, 96, 76, 33, 4, 9, 3, 112, 192, 167, 11, 53, 40, 41, 153, 185, 43, 196, 144,46, 142, 236, 214, 56, 67, 154, 241, 174, 128, 66, 1, 16, 44, 240, 196, 26, 146, 36, 82, 200, 32, 99, 180, 225, 114, 27, 141, 196, 124, 7, 26, 101, 148, 113, 200, 24, 99, 204, 49, 134, 34, 113, 236, 33, 138, 35, 146, 88, 1, 197, 15, 16, 0,48, 130, 11, 72, 206, 64, 145, 185, 2, 37, 218, 177, 127, 126, 81, 228, 82, 153, 34, 20, 81, 66, 1, 33, 92, 33, 8, 35, 252, 226, 49, 72, 35, 56, 151, 209, 197, 33, 119, 148, 125, 136, 29, 46, 147, 109, 246, 29, 99, 52, 162, 70, 193, 143, 120, 18, 200, 21, 33, 36, 208, 2, 14, 47, 234, 250, 244, 254, 131, 81, 35, 69, 81, 133, 65, 116, 0, 64, 4, 90, 252, 225, 9, 31, 135, 196, 172, 56, 216, 99, 28, 226, 120, 226, 135, 212, 252, 248, 228, 143, 183, 129, 118, 35, 131, 64, 178, 200, 20, 36, 0, 208, 65, 165, 62, 238, 186, 55, 127, 26, 168, 80, 195, 74, 146, 149, 192, 192, 2, 74, 156, 161, 201, 35, 120, 152, 77, 57, 206, 180, 151, 129, 243, 226, 49, 59, 110, 118, 25, 47, 195, 204, 71, 33, 159, 244, 209, 196, 2, 12, 224, 32, 130, 6, 55, 220, 144, 129, 11, 154, 141, 206, 223, 12, 199, 87, 140, 131, 5, 23, 36, 144, 67, 22, 157, 24, 162, 134, 26, 141, 76, 94, 243, 247, 142, 211, 126, 187, 226, 145, 219, 76, 57, 239, 109, 220, 161, 179, 26, 133, 104, 194, 6, 18, 158, 155, 80, 169, 14, 37, 58, 223, 159, 103, 74, 218, 0, 2, 17, 4, 48, 33, 200, 38, 120, 72, 131, 34, 20, 97, 59, 156, 61, 174, 102, 104, 64, 67, 27, 10, 72, 62, 244, 185, 204, 102, 184, 19, 95, 204, 222, 246, 8, 78, 80, 97, 1, 23, 192, 129, 160, 124, 160, 33, 251, 229, 199, 56, 69, 112, 193, 8, 22, 144, 5, 79, 88, 66, 13, 135, 120, 160, 206, 104, 119, 192, 4, 46, 208, 118, 185, 115, 224, 203, 32, 24, 193, 220, 149, 173, 17, 150, 240, 3, 27, 8, 112, 129, 18, 37, 201, 131, 254, 250, 57, 77, 9, 46, 176, 128, 51, 64, 2, 15, 221, 211, 3, 26, 236, 224, 182, 49, 192, 112, 113, 141, 43, 159, 249, 190, 71, 197, 222, 221, 110, 16, 95, 195, 89, 218, 238, 80, 7, 75, 48, 130, 13, 14, 184, 64, 147, 128, 152, 159, 11, 9, 206, 1, 108, 16, 133, 204, 34, 215, 134, 46, 144, 47, 113, 109, 195, 93, 247, 164, 104, 62, 199, 117, 207, 138, 184, 179, 92, 2, 239, 16, 137, 70, 224, 193, 19, 127, 200, 1, 3, 74, 80, 36, 50, 226, 71, 3, 31, 0, 64, 14, 22, 177, 9, 196, 145, 45, 133, 99, 232, 194, 13, 187, 231, 64, 155, 221, 1, 138, 45, 163, 97, 35, 118, 39, 185, 196, 53, 34, 13, 119, 224,221, 18, 219, 112, 136, 52, 184, 77, 20, 146, 192, 128, 4, 68, 103, 200, 242, 248, 102, 6, 49, 8, 2, 0, 132, 240, 135, 71, 168, 97, 119, 181, 35, 91, 238, 202, 71, 51, 93, 42, 78, 139, 141, 147, 153, 236, 192, 183, 198, 222, 189, 44, 133, 153, 59, 3, 5, 16, 208, 129, 173, 176, 178, 149, 216, 185, 145, 174, 50, 80, 132, 223, 28, 74, 105, 28, 112, 192, 34, 68, 129, 196, 237, 241, 110, 151, 139, 83, 219, 29, 60, 185, 75, 244, 101, 178, 123, 107, 147, 98, 28, 121, 87, 134, 6, 190, 204, 143, 155, 48, 3, 13, 0, 208, 39, 14, 74, 72, 93, 235, 254, 130, 230, 117, 242, 166, 171, 88, 89, 68, 7, 63, 226,128, 2, 232, 0, 137, 9, 114, 207, 101, 114, 52, 96, 217, 198, 25, 199, 201, 1, 211, 113, 157, 60, 32, 66, 27, 145, 54, 183, 113, 143, 119, 104, 43, 195, 219, 8, 225, 5, 7, 140, 128, 154, 198, 185, 39, 188, 96, 201, 52, 125, 90, 7, 81, 127,241, 65, 166, 50, 96, 129, 32, 36, 224, 10, 158, 144, 67, 219, 184, 151, 66, 82, 206, 241, 118, 45, 163, 153, 57, 27, 183, 80, 220, 157, 141, 148, 143, 3, 219, 49, 237, 232, 182, 220, 245, 238, 14, 124, 240, 98, 19, 12, 208, 129, 113, 137,166, 7, 72, 241, 11, 73, 51, 102, 82, 234, 28, 74, 170, 21, 233, 129, 13, 244, 215, 1, 9, 12, 33, 17, 114, 80, 195, 28,98, 22, 201, 7, 62, 14, 167, 198, 68, 91, 250, 22, 186, 61, 197, 161, 15, 142, 113, 180, 220, 2, 229, 72, 201, 5, 46, 176, 108, 132, 224, 132, 18, 36, 144, 129, 27, 252, 5, 170, 49, 240, 209, 12, 74, 90, 85, 233, 92, 117, 73, 49, 192, 212,86, 123, 112, 1, 109, 22, 34, 103, 106, 192, 89, 23, 94, 216, 201, 39, 78, 180, 101, 104, 91, 168, 39, 29, 8, 215, 241,153, 149, 174, 141, 168, 217, 216, 30, 216, 136, 66, 44, 98, 1, 35, 184, 129, 6, 112, 112, 174, 23, 157, 192, 4, 175, 42, 254, 44, 117, 176, 74, 17, 28, 216, 160, 76, 56, 24, 192, 21, 32, 49, 136, 177, 70, 182, 11, 117, 172, 108, 1, 131, 41, 212, 204, 142, 243, 102, 57, 181, 41, 227, 60, 11, 212, 114, 218, 241, 146, 155, 180, 220, 229, 32, 241, 5, 3, 124, 64, 66, 175, 122, 1, 12, 164, 25, 131, 23, 200, 54, 58, 22, 161, 45, 69, 242, 198, 0, 33, 124, 66, 13, 131, 104, 171, 29,106, 182, 208, 154, 197, 176, 13, 113, 92, 110, 27, 18, 168, 7, 59, 166, 16, 13, 208, 93, 110, 92, 23, 88, 185, 25, 30,162, 173, 141, 152, 236, 203, 240, 48, 137, 33, 92, 160, 66, 64, 120, 129, 119, 221, 245, 93, 233, 132, 23, 94, 126, 187, 234, 8, 217, 128, 135, 54, 108, 239, 162, 118, 88, 104, 40, 219, 25, 218, 119, 46, 55, 133, 101, 64, 131, 30, 198, 137, 62, 14, 203, 151, 195, 21, 173, 89, 239, 32, 120, 201, 178, 189, 12, 13, 165, 61, 67, 2, 248, 212, 193, 6, 87, 167, 81, 171, 49, 129, 0, 154, 240, 9, 62, 0, 85, 197, 101, 208, 172, 123, 41, 186, 64, 180, 193, 149, 157, 143, 188, 131, 90,221, 216, 8, 2, 130, 248, 101, 151, 220, 30, 27, 103, 168, 73, 242, 181, 81, 13, 159, 112, 2, 3, 50, 226, 21, 196, 218,120, 58, 102, 100, 193, 25, 10, 113, 71, 255, 14, 19, 197, 46, 211, 131, 254, 229, 120, 122, 135, 177, 69, 185, 205, 11, 188, 29, 31, 184, 7, 92, 250, 90, 52, 134, 84, 236, 100, 30, 213, 247, 8, 54, 44, 160, 3, 61, 50, 65, 12, 152, 134, 227, 47, 47, 39, 159, 191, 105, 1, 3, 158, 112, 222, 232, 30, 243, 141, 194, 37, 91, 102, 83, 200, 68, 238, 13, 34, 96, 220, 211, 25, 230, 54, 17, 211, 77, 62, 114, 14, 119, 0, 112, 56, 43, 25, 206, 196, 225, 129, 17, 76, 0, 128, 6, 5, 189, 130, 18, 104, 204, 203, 134, 190, 13, 103, 2, 211, 1, 2, 188, 161, 160, 199, 141, 104, 3, 193, 247, 200, 67, 116, 97, 14,107, 69, 111, 33, 16, 209, 9, 102, 140, 98, 123, 99, 24, 196, 35, 192, 225, 139, 215, 89, 34, 13, 165, 228, 93, 124, 71, 237, 95, 220, 165, 33, 169, 98, 48, 0, 151, 44, 181, 130, 241, 194, 58, 214, 165, 9, 12, 211, 112, 132, 131, 11, 24, 97, 17, 143, 216, 100, 59, 185, 23, 90, 77, 150, 143, 114, 161, 76, 159, 205, 6, 81, 8, 71, 208, 194, 28, 237, 80, 5, 89,199, 192, 136, 118, 196, 195, 26, 169, 128, 4, 247, 198, 144, 6, 151, 229, 23, 210, 213, 86, 28, 40, 249, 141, 4, 14, 168, 107, 42, 136, 6, 247, 99, 196, 237, 221, 46, 197, 0, 0, 48, 117, 228, 76, 99, 166, 231, 119, 207, 17, 162, 160, 30, 39, 31, 254, 30, 49, 137, 98, 184, 227, 30, 241, 56, 133, 26, 218, 25, 6, 77, 180, 163, 31, 242, 40, 199, 43, 84, 54, 112, 245, 145, 115, 151, 16, 213, 179, 219, 28, 103, 135, 71, 96, 129, 153, 78, 43, 139, 196, 29, 227, 151, 236, 110, 87, 5, 32, 72, 128, 24, 6, 17, 185, 105, 59, 113, 138, 80, 222, 29, 219, 186, 48, 54, 53, 108, 194, 22, 220, 112, 7, 62, 252, 33, 143, 83, 80, 116, 12, 97, 72, 132, 59, 250, 129, 143, 121, 184, 131, 26, 125, 120, 4, 31, 208, 73, 197, 160, 150, 154, 168, 78, 180, 3, 30, 216, 64, 130, 14, 204, 64, 6, 50, 80, 1, 135, 134, 78, 24, 189, 155, 203, 34, 50, 48, 1, 10, 144, 192, 136, 57, 40, 48, 190, 78, 228, 239, 148, 97, 102, 54, 156, 205, 1, 189, 132, 96, 132, 48, 220, 33, 143, 173, 115, 29, 21, 44, 43, 67, 24, 28, 225, 14, 127, 248, 3, 31, 101, 31, 71, 45, 46, 65, 8, 104, 151, 216, 237, 13, 180, 99, 36, 121, 103, 137, 62, 24, 225, 2, 183, 141, 154, 208, 249, 62, 154, 208, 200, 160, 5, 8, 72, 2, 36, 50, 57, 134, 11, 119,152, 191, 57, 99, 225, 228, 112, 248, 137, 90, 128, 99, 30, 243, 208, 199, 214, 251, 209, 14, 84, 236, 97, 147, 113, 72, 68, 59, 60, 207, 15, 125, 212, 195, 236, 211, 8, 4, 30, 124, 254, 221, 70, 181, 17, 21, 108, 145, 182, 157, 26, 30, 33, 5, 9, 192, 96, 73, 46, 200, 0, 237, 113, 163, 164, 228, 201, 160, 3, 17, 200, 194, 35, 88, 24, 234, 139, 62, 176, 12, 43, 28, 67, 188, 47, 137, 135, 71, 104, 98, 24, 235, 48, 15, 248, 160, 15, 250, 176, 15, 251, 0, 115, 206, 151, 51, 141,32, 125, 254, 176, 15, 213, 87, 15, 214, 55, 15, 220, 32, 11, 176, 115, 75, 233, 147, 66, 227, 68, 86, 91, 36, 57, 138,99, 9, 98, 144, 0, 26, 82, 34, 205, 179, 126, 163, 209, 126, 56, 210, 1, 14, 64, 7, 243, 103, 64, 250, 5, 100, 166, 212, 86, 81, 118, 106, 182, 224, 13, 149, 7, 122, 91, 199, 15, 254, 192, 124, 167, 160, 127, 151, 36, 125, 3, 72, 128, 158,151, 131, 248, 208, 14, 198, 48, 9, 100, 182, 51, 167, 87, 102, 49, 51, 89, 139, 51, 8, 129, 64, 2, 234, 119, 17, 199, 65, 130, 165, 225, 43, 126, 113, 1, 33, 0, 10, 100, 150, 54, 55, 3, 95, 44, 132, 78, 25, 72, 48, 144, 48, 9, 195, 160, 117, 158, 103, 15, 250, 224, 15, 202, 39, 15, 242, 96, 12, 143, 96, 51, 138, 48, 126, 195, 80, 14, 200, 183, 117, 246, 96, 15, 251, 160, 134, 243, 176, 13, 173, 0, 9, 133, 32, 86, 119, 0, 109, 158, 228, 50, 97, 3, 51, 96, 19, 51, 254, 154, 128, 4, 22, 208, 60, 53, 70, 133, 164, 161, 2, 18, 64, 3, 157, 128, 68, 6, 55, 101, 180, 179, 70, 75, 116, 7, 163, 192, 8, 181, 192, 13, 108, 136, 15, 121, 72, 128, 252, 128, 15, 238, 0, 14, 178, 208, 72, 135, 120, 109, 132, 160, 9, 220, 240, 114, 121, 216, 128, 213, 135, 124, 238, 80, 132, 134, 32, 7, 95, 211, 83, 132, 24, 117, 186, 195, 8, 78, 208, 1, 94, 209, 136, 142, 72, 116, 18, 192, 4, 158, 128, 68, 188, 147, 107, 94, 104, 81, 119, 176, 64, 236, 227, 7, 101, 88, 121, 65, 168, 135, 216, 167, 125, 151, 116, 59, 138, 16, 73, 57, 100, 12, 53, 232, 128, 213, 151, 134, 164, 200, 135, 52, 39, 51, 68, 150, 73, 146, 68, 98, 93, 0, 9, 78, 208, 0, 83, 49, 130, 193, 56, 26, 32, 48, 0, 82, 0, 59, 171, 7, 119, 78, 247,120, 144, 48, 131, 53, 168, 134, 250, 192, 15, 177, 184, 14, 175, 192, 8, 120, 64, 83, 108, 214, 5, 138, 128, 67, 155, 32, 11, 158, 216, 15, 14, 40, 138, 159, 215, 14, 179, 152, 8, 123, 144, 73, 59, 21, 100, 143, 228, 50, 144, 48, 5, 1, 208, 2, 84, 197, 142, 237, 88, 24, 157, 145, 0, 94, 16, 144, 145, 52, 54, 158, 52, 109, 110, 131, 7, 137, 80, 12, 237, 0, 122, 65, 248, 131, 215, 231, 13, 156, 240, 254, 8, 97, 213, 56, 81, 228, 133, 138, 48, 7, 237, 132, 7, 130, 16, 13, 53, 104, 121, 159, 7, 122, 243, 48, 13, 167, 176, 50, 29, 134, 98, 227, 228, 98, 118, 80, 8, 92, 32, 0, 29, 144, 49, 32, 16,43, 29, 217, 24, 127, 3, 85, 74, 103, 9, 224, 167, 92, 115, 100, 54, 111, 115, 10, 158, 184, 117, 4, 248, 138, 160, 231, 14, 189, 240, 9, 21, 8, 73, 49, 35, 98, 165, 118, 7, 167, 246, 10, 229, 0, 141, 158, 71, 128, 214, 23, 115, 193, 0, 144, 1, 54, 89, 32, 118, 67, 243, 85, 8, 107, 192, 148, 43, 80, 36, 192, 24, 149, 109, 177, 17, 48, 64, 149, 75, 199, 113,230, 99, 64, 135, 160, 7, 245, 53, 126, 205, 32, 15, 121, 216, 141, 202, 135, 15, 242, 224, 13, 169, 0, 8, 115, 22, 51,30, 134, 122, 115, 52, 86, 143, 208, 7, 212, 0, 141, 112, 89, 15, 91, 135, 15, 235, 192, 9, 132, 16, 90, 106, 166, 64, 150, 20, 90, 104, 160, 151, 6, 192, 1, 43, 32, 25, 127, 9, 152, 107, 33, 152, 132, 249, 53, 31, 135, 92, 53, 51, 98, 119, 96, 9, 144, 240, 12, 102, 8, 153, 102, 103, 12, 130, 64, 8, 107, 247, 75, 104, 211, 123, 134, 57, 124, 23, 86, 8, 41, 217, 150, 248, 128, 131, 158, 87, 118, 235, 32, 9, 2, 23, 57, 46, 100, 62, 29, 254, 230, 154, 176, 41, 155, 180, 137, 23, 83, 129, 41, 49, 160, 116, 233, 181, 75, 181, 83, 6, 188, 233, 155, 205, 48, 15, 254, 80, 15, 16, 24, 129, 201, 144, 9, 182, 244, 73, 250, 53, 86, 110, 133, 6, 103, 5, 96, 106, 0, 9, 146, 112, 11, 236, 201, 143, 252, 88, 118, 238, 80, 9, 233, 54, 78, 217, 105, 95, 109, 240, 8, 107, 240, 154, 221, 86, 63, 223, 105, 23, 46, 129, 41, 73, 39, 6, 39, 68, 62, 81, 132, 64, 237, 36, 7, 144, 208, 152, 250, 8, 129, 122, 120, 12, 126, 112, 66, 142, 211, 6, 43, 132, 103, 52, 116, 59, 227, 148, 6, 131, 160, 9, 199, 128, 14, 55, 136, 131, 222, 216, 14, 4, 250, 73, 24, 72, 76, 221, 163, 160, 12, 186, 18, 179, 249, 160, 95, 17, 161, 21, 50, 0, 94, 80, 161, 224, 84, 62, 113, 198, 62, 207, 32, 15, 247, 240, 121, 162, 184, 15, 101, 183, 13, 168, 112, 68, 40, 244, 68, 183, 196, 59, 228, 132, 51, 129, 56, 114, 147, 48, 13, 148, 199, 146, 250, 40, 153, 235, 208, 7, 72, 84, 84, 237, 70, 67, 135, 240, 8, 95, 112, 0, 77, 57, 123, 60, 26, 22, 59, 241, 142, 33, 201, 61, 52, 165, 54, 53, 67, 59, 151, 198, 149, 160, 153, 134, 159, 119, 125, 98, 57, 9, 150, 16, 136, 203, 200, 97, 67, 134, 153, 11, 196, 7, 254, 140, 96, 11, 116, 8, 129, 150, 199, 15, 251, 160, 15, 243, 48, 14, 188, 80, 160, 19, 116, 158, 185, 227, 9, 103, 154, 166, 215, 180, 166, 119, 161, 36, 239, 24, 143, 86, 121, 81, 114, 58, 62, 110, 243, 8, 129, 160, 141, 54, 216, 128, 106, 40, 153, 238, 48, 13, 171, 160, 118, 203, 136, 6, 109, 3, 170, 161, 213, 8, 143, 224, 7, 211, 176, 14, 150, 135, 167, 160, 87, 15, 103, 183, 170, 209, 53, 92, 181, 51, 169, 92, 144, 145, 126, 131, 169, 110, 1, 75, 19, 225, 35, 145, 120, 9, 207, 150, 59, 110, 149, 140, 49, 115, 105, 158, 240, 10, 220, 16, 15, 73, 250, 150, 145, 57, 15, 229,64, 11, 202, 26, 98, 152, 51, 62, 208, 38, 171, 51, 136, 124, 251, 24, 141, 97, 57, 12, 137, 96, 149, 64, 101, 86, 52, 217, 54, 5, 199, 8, 79, 208, 0, 27, 32, 3, 26, 224, 2, 42, 69, 172, 107, 97, 3, 23, 129, 172, 70, 48, 137, 55, 199, 113,164, 85, 84, 189, 39, 170, 209, 16, 15, 165, 90, 128, 158, 39, 15, 238, 240, 12, 126, 112, 154, 219, 51, 7, 113, 168, 6, 124, 64, 8, 158, 208, 11, 90, 71, 128, 245, 224, 15, 246, 240, 147, 242, 192, 13, 169, 0, 86, 199, 180, 97, 162, 197, 54, 220, 51, 78, 140, 128, 4, 29, 112, 2, 175, 229, 2, 61, 16, 38, 246, 58, 254, 22, 46, 224, 46, 12, 144, 3, 127, 64, 8, 45, 243, 75, 137, 87, 81, 159, 116, 147, 244, 198, 8, 176, 0, 157, 209, 249, 147, 160, 55, 153, 181, 192, 8, 106, 64, 64, 109, 160, 162, 144, 176, 10, 52, 104, 131, 105, 152, 135, 94, 26, 12, 154, 80, 8, 182, 136, 66, 110, 247, 64, 110, 116, 80, 105, 112, 9, 36, 64, 49, 129, 119, 41, 45, 219, 22, 190, 50, 2, 182, 246, 134, 39, 218, 56, 156, 245, 130, 56, 51, 8, 26, 186, 8, 209, 208, 14, 208, 88, 170, 97, 9, 12, 120, 48, 89, 203, 72, 8, 193, 48, 14, 2, 104, 121, 25, 139, 170, 220, 208, 135, 17, 217, 123, 183, 228, 118, 153, 148, 56, 236, 198, 7, 129, 144, 0, 49, 80, 3, 122, 231, 160, 95, 11, 25, 2, 241, 34, 130, 131, 5, 144, 128, 158, 186, 68, 84, 83, 102, 159, 6, 37, 7, 167, 86, 11, 235, 224, 150, 55, 168, 124, 249, 70, 86, 122, 0, 8, 1, 72, 128, 160, 135, 131, 48, 183, 14, 197, 112, 9, 82, 219, 86, 52, 133, 179, 136, 25, 57, 161, 86, 8, 87, 48, 0, 61, 224, 40, 207, 212, 184, 87, 1, 113, 45, 208, 1, 72, 240, 9, 99, 80, 95, 108, 115, 115, 53, 21, 100, 184, 179, 114, 106, 0, 8, 139, 112, 124, 149, 183, 143, 252, 184, 15, 93, 183, 61, 203, 8, 8, 238, 0, 151, 150, 254, 39, 153, 222, 80, 11, 128, 128, 7, 52, 100, 74, 105, 208, 118, 200, 85, 87, 106, 249, 9, 71, 192, 0, 154, 98, 28, 138, 171, 187, 108, 58, 16, 142, 98, 0, 126, 176, 73, 122, 128, 100, 165, 150, 62, 138, 160, 59, 52, 117, 73, 132, 0, 7, 119, 91, 121, 246, 192, 143, 254, 208, 14, 94, 23, 51, 122, 112, 9, 213, 27, 141, 186, 250, 12, 175, 19, 64, 165, 52, 57,134, 88, 102, 138, 247, 50, 166, 69, 1, 25, 244, 148, 177, 178, 3, 228, 162, 190, 61, 202, 18, 74, 18, 0, 99, 150, 6, 106, 166, 120, 138, 99, 54, 109, 244, 78, 40, 20, 74, 119, 32, 7, 136, 32, 9, 219, 208, 188, 105, 56, 15, 1, 220, 61, 151, 240, 14, 251, 184, 134, 217, 10, 86, 136, 35, 59, 53, 101, 185, 84, 54, 89, 188, 131, 163, 29, 32, 25, 62, 240, 2, 32,96, 193, 17, 135, 193, 87, 161, 36, 15, 112, 4, 61, 246, 86, 30, 167, 89, 46, 99, 7, 106, 245, 72, 152, 83, 8, 254, 39,12, 1, 8, 129, 249, 6, 103, 101, 16, 195, 1, 218, 14, 210, 224, 7, 134, 112, 66, 233, 229, 118, 50, 84, 71, 83, 86, 141, 136, 160, 101, 45, 32, 16, 84, 229, 52, 70, 124, 196, 4, 49, 3, 13, 64, 1, 103, 192, 189, 25, 88, 188, 226, 84, 83, 43, 22, 62, 88, 4, 177, 155, 176, 10, 254, 219, 240, 14, 102, 167, 10, 203, 56, 89, 140, 80, 189, 216, 58, 11, 128, 32, 86, 27, 23, 168, 101, 252, 70, 192, 229, 54, 123, 208, 7, 36, 128, 2, 10, 242, 109, 111, 92, 21, 248, 58, 16, 55, 48, 1, 2, 48, 5, 159, 224, 54, 208, 37, 191, 228, 227, 78, 132, 216, 54, 87, 186, 138, 38, 135, 14, 170, 192, 110, 109, 176, 9, 235, 144, 170, 173, 240, 8, 117, 160, 8, 36, 138, 108, 19, 37, 84, 206, 42, 76, 115, 36, 7, 159, 96, 5, 1, 224, 36, 46, 146, 201, 89, 241, 37, 4, 209, 187, 23, 240, 3, 125, 176, 50, 151, 36, 69, 158, 20, 57, 55, 183, 83, 119, 149, 129, 40, 137, 117, 162, 0, 131, 203, 102, 174, 1, 217, 70, 192, 165, 62, 45, 211, 192, 140, 35, 71, 147, 116, 7, 133, 32, 9, 20, 48, 2, 195, 26, 88, 69, 76, 204, 76, 81, 104, 221, 214, 2, 45, 16, 0, 84, 192, 167, 36, 54, 87, 138, 227, 95, 122, 188, 78, 16, 116, 59, 150, 224, 47, 94, 131, 155, 35, 247, 8, 86, 89, 84, 138, 176, 68, 101, 144, 6, 160, 202, 110, 115, 132,59, 245, 247, 9, 24, 249, 1, 139, 219, 52, 235, 204, 206, 69, 1, 47, 195, 209, 106, 72, 51, 1, 44, 64, 160, 149, 99, 98, 68, 246, 192, 201, 232, 61, 119, 165, 54, 152, 163, 56, 145, 229, 75, 166, 84, 254, 6, 80, 204, 97, 55, 35, 142, 56, 199, 172, 161, 214, 122, 63, 208, 1, 26, 160, 52, 25, 99, 3, 121, 55, 104, 20, 93, 21, 130, 53, 104, 230, 34, 2, 27, 240,0, 88, 240, 8, 248, 21, 111, 52, 100, 163, 168, 204, 54, 183, 131, 62, 191, 150, 152, 118, 144, 212, 221, 51, 89, 115, 96, 95, 119, 80, 191, 13, 117, 122, 7, 84, 64, 15, 196, 7, 158, 112, 5, 118, 147, 36, 76, 131, 211, 127, 65, 85, 59, 237, 20, 61, 141, 49, 54, 160, 2, 31, 176, 0, 96, 26, 184, 111, 245, 113, 12, 173, 212, 70, 213, 6, 138, 224, 98, 241, 75, 74, 12, 197, 205, 54, 35, 136, 112, 218, 172, 189, 68, 98, 170, 231, 133, 166, 21, 2, 12, 0, 2, 208, 3, 34, 57, 77, 214,101, 13, 21, 79, 2, 3, 60, 96, 3, 241, 60, 4, 146, 192, 7, 248, 217, 8, 192, 198, 102, 143, 115, 92, 225, 115, 213, 247, 103, 185, 89, 109, 198, 207, 44, 62, 226, 180, 127, 255, 197, 200, 123, 224, 8, 66, 80, 0, 40, 144, 184, 34, 112, 91, 38, 0, 209, 139, 253, 20, 25, 97, 17, 143, 114, 55, 142, 205, 3, 46, 208, 0, 7, 64, 5, 155, 144, 6, 3, 103, 203, 186, 163, 217, 57, 71, 188, 37, 70, 166, 148, 115, 220, 14, 133, 162, 34, 236, 170, 69, 85, 6, 131, 128, 8, 86, 48, 0, 230, 254, 66, 36, 173, 61, 3, 31, 240, 1, 185, 27, 219, 81, 1, 19, 181, 45, 130, 18, 242, 1, 13, 240, 3, 94, 144, 110, 2, 36, 215, 155, 20, 111, 9, 135, 103, 47, 244, 204, 200, 221, 222, 77, 199, 217, 232, 51, 7, 115, 208, 5, 133, 64, 119, 21, 240,2, 43, 240, 148, 49, 224, 218, 130, 198, 178, 218, 45, 20, 74, 113, 33, 24, 82, 34, 19, 145, 1, 0, 112, 110, 5, 170, 156, 184, 169, 199, 233, 93, 87, 29, 231, 222, 199, 93, 95, 190, 250, 196, 107, 134, 67, 130, 240, 3, 173, 242, 2, 64, 16,43, 90, 197, 96, 255, 205, 20, 122, 113, 33, 22, 48, 224, 56, 192, 3, 49, 80, 94, 124, 74, 165, 191, 244, 50, 90, 196, 95, 165, 198, 107, 16, 142, 220, 141, 39, 62, 42, 102, 97, 166, 101, 4, 5, 176, 2, 64, 160, 227, 254, 180, 21, 31, 94, 20, 1, 222, 221, 32, 192, 3, 60, 0, 2, 18, 144, 4, 33, 202, 131, 130, 58, 81, 157, 13, 105, 48, 30, 227, 237, 13, 95, 240, 69, 54, 54, 30, 8, 80, 48, 0, 40, 224, 36, 25, 2, 149, 5, 17, 34, 63, 142, 19, 62, 161, 35, 143, 114, 41, 48, 128, 72,2, 0, 5, 126, 48, 103, 34, 12, 95, 205, 170, 115, 229, 244, 228, 80, 30, 69, 12, 254, 72, 132, 176, 8, 88, 16, 0, 29, 16, 4, 240, 220, 2, 254, 234, 199, 142, 239, 50, 209, 95, 94, 32, 43, 129, 41, 48, 128, 3, 203, 131, 33, 120, 115, 35, 45, 176, 99, 147, 64, 8, 117, 160, 152, 132, 88, 84, 206, 76, 188, 116, 4, 229, 201, 61, 162, 9, 100, 51, 236, 211, 9, 87,14, 209, 242, 115, 3, 37, 82, 4, 203, 67, 16, 127, 30, 232, 67, 225, 163, 180, 61, 230, 46, 80, 41, 59, 208, 1, 1, 0, 5, 154, 208, 167, 55, 68, 67, 185, 118, 64, 111, 30, 81, 200, 173, 107, 113, 154, 100, 135, 80, 8, 125, 160, 4, 76, 233, 87, 35, 101, 172, 193, 66, 232, 238, 2, 232, 166, 158, 18, 74, 33, 158, 126, 3, 207, 22, 240, 178, 62, 160, 3, 3, 144, 4, 125, 0, 64, 209, 149, 97, 166, 228, 105, 148, 51, 71, 224, 123, 220, 184, 14, 57, 12, 229, 219, 126, 4, 9, 98, 0, 5, 104, 42, 88, 91, 101, 3, 221, 157, 88, 232, 226, 46, 217, 157, 236, 38, 177, 34, 9, 1, 2, 64, 128, 41, 46, 224, 234, 44, 240, 5, 126, 48, 8, 118, 144, 64, 165, 4, 74, 23, 165, 107, 220, 14, 218, 7, 228, 61, 17, 181, 51, 165, 165, 9, 95, 0, 63, 31, 160, 90, 25, 96, 91, 233, 190, 238, 3, 145, 234, 239, 14, 239, 121, 33, 239, 5, 1, 3, 10, 246, 2, 61, 144, 1, 138, 59, 1, 11, 208, 4, 177, 78, 81, 217, 30, 254, 194, 108, 164, 157, 195, 13, 225, 188, 70, 147, 141, 160, 161, 147, 64, 5, 6, 112, 1, 132, 162, 229, 20, 177, 85, 74, 19, 44, 62, 110, 241, 55, 49, 23, 48, 129, 41, 10, 22, 155, 198, 227, 1, 173, 30, 0, 57, 192, 6, 159, 224, 53, 22, 197, 110, 236, 68, 240, 150, 62, 124, 109, 83, 8, 147, 176, 6, 78, 32, 0, 13, 96, 2, 56, 208, 3, 13, 42, 23, 195, 94, 241, 58, 79, 22, 1, 62, 241, 153, 194, 36, 183, 149, 36, 25, 112, 1, 4, 144, 4, 139, 144, 8, 176, 51, 103, 153, 214, 70, 223, 222, 244, 145, 131, 67, 143, 16, 60, 74, 96, 0, 85, 127, 3, 162, 129, 223, 13, 10, 207, 27, 177, 245, 92, 31, 232, 177, 242, 26, 31, 18, 18, 226, 121, 25, 46, 17, 43, 46, 160, 3, 32, 144, 41, 62,224, 2, 31, 48, 2, 18, 64, 0, 80, 240, 7, 141, 36, 189, 197, 171, 157, 185, 233, 237, 16, 21, 54, 167, 246, 7, 73, 64, 0, 12, 64, 4, 65, 240, 236, 2, 161, 93, 180, 237, 34, 61, 205, 34, 201, 174, 223, 76, 194, 250, 32, 193, 236, 101, 225, 18, 126, 97, 41, 204, 163, 96, 18, 162, 184, 155, 34, 1, 14, 32, 5, 102, 112, 9, 158, 224, 47, 150, 32, 7, 56, 231, 237,28, 120, 146, 253, 199, 8, 128, 96, 6, 76, 144, 3, 8, 176, 218, 250, 254, 51, 17, 78, 57, 152, 194, 156, 88, 143, 155, 250, 11, 193, 145, 255, 221, 60, 216, 191, 243, 207, 244, 40, 23, 224, 41, 57, 0, 5, 108, 32, 9, 154, 224, 135, 95, 243,61, 32, 29, 233, 153, 163, 9, 139, 144, 45, 57, 16, 1, 3, 112, 1, 107, 220, 27, 40, 177, 163, 93, 223, 20, 18, 210, 85,6, 64, 1, 73, 96, 5, 249, 146, 8, 0, 225, 233, 209, 64, 130, 3, 55, 49, 98, 228, 71, 204, 149, 36, 20, 8, 0, 224, 80, 2, 4, 136, 24, 21, 45, 94, 196, 152, 81, 227, 70, 142, 29, 61, 126, 4, 25, 82, 228, 72, 146, 37, 77, 158, 68, 153, 82, 229, 74, 148, 42, 84, 104, 48, 97, 162, 195, 5, 0, 3, 18, 144, 248, 33, 228, 9, 22, 44, 92, 124, 242, 116, 130, 228, 7, 137, 4, 3, 36, 48, 232, 208, 98, 199, 14, 138, 44, 157, 62, 133, 26, 85, 234, 84, 170, 85, 173, 58, 85, 33, 195, 131, 7, 17, 34, 102, 224, 192, 225, 2, 5, 135, 11, 12, 36, 72, 16, 96, 64, 64, 0, 6, 23, 80, 148, 88, 1, 4, 71, 69, 151, 117, 175, 222, 197, 155, 87, 239, 94, 190, 125, 67, 206, 232, 58, 67, 176, 75, 23, 25, 92, 180, 64, 140, 248, 195, 132, 9, 29, 92, 196, 0, 1, 3, 198, 68, 23, 46, 106, 212, 112, 233, 87, 243, 102, 206, 157, 61, 127, 254, 174, 40, 120, 34, 8, 176, 77, 113, 248, 16, 44, 56, 166, 138, 138, 48, 122, 244, 240, 129, 3, 68, 6, 195, 149, 65, 223, 198, 157, 91, 247, 238, 141,133, 93, 172, 88, 49, 49, 6, 142, 30, 146, 71, 131, 56, 140, 216, 197, 68, 24, 193, 129, 175, 224, 29, 93, 250, 116, 234, 121, 75, 148, 168, 12, 86, 182, 228, 225, 115, 43, 127, 127, 140, 17, 120, 69, 225, 213, 205, 159, 71, 159, 94, 35, 120, 246, 182, 99, 212, 85, 145, 122, 6, 235, 202, 202, 31, 75, 134, 161, 94, 255, 126, 254, 186, 193, 195, 7, 176, 174, 25, 108, 72, 205, 165, 152, 86, 27, 208, 6, 27, 250, 99, 176, 65, 7, 243, 146, 207, 165, 193, 234, 74, 46, 188, 208, 230, 11, 16, 190, 7, 55, 228, 176, 67, 15, 63, 4, 49, 68, 17, 71, 36, 177, 68, 19, 79, 68, 49, 69, 21, 87, 100, 177, 69, 23, 95, 132, 49, 70, 25, 103, 164, 177, 70, 27, 111, 196, 49, 71, 29, 119, 228, 241, 174, 101, 252, 241, 135, 156, 30, 135, 20, 105, 23, 108, 206, 129, 103, 159, 125, 224, 57, 39, 27, 98, 170, 120, 241, 71, 127, 156, 217, 72, 27, 32, 175, 33,50, 75, 142, 136, 81, 7, 72, 47, 191, 244, 7, 158, 106, 182, 104, 49, 27, 32, 113, 217, 40, 29, 32, 145, 209, 178, 77, 139, 40, 9, 7, 76, 57, 129, 220, 254, 135, 76, 22, 213, 180, 103, 9, 55, 247, 236, 200, 20, 53, 129, 100, 231, 26, 93, 76, 217, 194, 20, 92, 148, 209, 134, 30, 127, 210, 105, 209, 141, 125, 130, 228, 51, 210, 140, 200, 232, 210, 31, 123, 198, 220, 136, 146, 107, 178, 105, 113, 151, 43, 37, 5, 181, 34, 51, 253, 161, 103, 151, 146, 182, 80, 38, 28, 118, 236, 161, 39, 157, 107, 66, 209, 232, 26, 32, 119, 113, 229, 154, 115, 232, 217, 135, 30, 114, 126, 137, 117, 214, 90, 111, 205, 117, 215, 142, 126, 201, 70, 29, 92, 225, 249, 198, 84, 142, 118, 41, 246, 88, 113, 160, 49, 165, 34, 100, 230, 164, 211, 78, 89, 253, 33, 230, 162, 107, 105, 181, 21, 87, 93, 121, 221, 8, 85, 113, 146, 204, 213, 85, 69, 197, 9, 181, 63,93, 188, 4, 119, 164, 95, 42, 5, 19, 30, 52, 49, 34, 7, 200, 108, 30, 149, 115, 153, 140, 234, 245, 231, 222, 57, 245, 205, 200, 21, 113, 168, 173, 70, 35, 92, 248, 149, 211, 30, 88, 171, 161, 214, 31, 117, 44, 26, 216, 31, 88, 45, 226, 215, 223, 124, 53, 202, 5, 222, 57, 177, 76, 119, 191, 56, 251, 45, 73, 74, 106, 225, 161, 228, 162, 40, 236, 105, 24, 72,120, 244, 180, 232, 228, 148, 195, 100, 217, 162, 92, 20, 109, 88, 89, 139, 144, 65, 121, 228, 138, 186, 105, 56, 156, 138, 138, 254, 80, 244, 225, 150, 115, 110, 120, 101, 140, 126, 33, 154, 218, 118, 59, 70, 207, 21, 58, 89, 33, 105, 90,32, 207, 81, 198, 20, 55, 112, 177, 18, 200, 130, 45, 194, 229, 75, 118, 160, 113, 133, 12, 87, 70, 245, 39, 150, 139, 186, 246, 242, 235, 176, 199, 246, 210, 108, 139, 98, 65, 217, 158, 110, 136, 113, 101, 11, 74, 118, 225, 183, 155, 139,118, 193, 87, 157, 101, 234, 14, 37, 150, 101, 190, 209, 187, 34, 151, 25, 213, 40, 22, 32, 181, 57, 219, 107, 176, 197, 38, 219, 237, 138, 112, 201, 217, 111, 86, 196, 70, 166, 155, 156, 75, 102, 58, 61, 103, 128, 252, 134, 36, 82, 224, 185, 178, 8, 140, 70, 21, 210, 162, 207, 45, 117, 6, 74, 139, 150, 32, 221, 159, 92, 46, 90, 221, 158, 214, 47, 130, 29, 200, 217, 43, 34, 67, 205, 116, 92, 153, 20, 101, 161, 99, 160, 36, 118, 109, 236, 228, 40, 23, 32, 177, 217, 72, 74, 42, 85, 7, 210, 118, 215, 43, 202, 93, 246, 150, 255, 60, 126, 95, 135, 59, 87, 239, 27, 32, 159, 23, 233, 218, 194, 49, 114, 218, 31, 118, 46, 226, 217, 31, 101, 52, 58, 7, 72, 168, 45, 74, 127, 253, 140, 218, 247, 231, 253, 24, 160, 33, 181, 148, 141, 216, 9, 211, 34, 134, 253, 17, 135, 233, 60, 242, 191, 108, 105, 36, 107, 146, 139, 65, 252, 254, 216, 231, 62, 139, 72, 41, 128, 25, 169, 2, 202, 24, 199, 61, 244, 84, 106, 119, 33, 217, 2, 233, 236, 65, 10, 141, 44, 225, 81, 240, 184, 8, 255, 252, 161, 191, 140, 116, 9, 132, 33, 4, 18, 9, 49, 98, 194, 150, 197, 238, 101, 136, 171, 2, 233, 246, 97, 191, 142, 196, 105, 31, 110, 216, 72, 151, 232, 33, 192, 138, 136, 80, 133, 23, 97, 161, 69, 212, 52, 67, 141, 172, 203, 31, 0, 163, 160, 121, 104, 70, 195, 143, 120, 202, 31, 227, 195, 200, 22, 128, 132, 184, 24, 144, 2, 72, 195, 187, 136, 27, 128, 228, 51, 139, 88, 113, 123, 25, 209, 162, 63, 184, 24, 3, 35, 190, 204, 31, 161, 139, 129, 19, 161, 216, 17, 69, 157, 35, 83, 64, 66, 87, 23, 175, 168, 145, 48, 142, 81, 113, 103, 220, 200, 255, 16, 152, 68, 233, 68, 193, 75, 28, 20, 201, 255, 144, 136, 145, 59, 142, 81, 106, 19, 60, 154, 214, 46, 114, 72, 141, 252, 66, 145, 21, 249, 159, 25, 183, 118, 173, 65, 114, 228, 142, 28, 203, 136, 35, 253, 129, 201, 24, 48, 50, 147, 143, 140, 193, 234, 192, 135, 145, 129, 209, 131, 143, 230, 241, 35, 144, 246, 232, 145, 172, 233, 98, 35, 248, 243, 7, 52, 44, 66, 201, 94, 249, 195, 149, 179, 4, 82, 37, 43, 114, 173, 91, 198, 32, 107, 54, 99, 229, 172, 64, 254, 178, 58, 96, 106, 11, 72, 5, 220, 101, 46, 107, 217, 203, 86, 106, 196, 101, 113, 60, 37, 117, 104, 54, 202, 143, 124, 236, 130, 23, 41, 194, 159, 36, 199, 47, 224, 101, 100, 96, 246, 64, 94, 12, 184, 169, 145, 111, 34, 239, 99, 243, 170, 38, 144, 122, 217, 17, 158, 237, 131, 12, 27, 137, 216, 196, 42, 50, 78, 111, 90, 202, 156, 170, 196, 24, 40, 163, 41, 157, 136, 169, 35, 156, 30, 241, 158, 250, 52, 178, 58, 104, 46, 1, 101, 39, 196, 136, 65, 253, 225, 198, 215, 29, 180, 131, 40, 99, 104, 69, 2, 170, 203, 141, 124, 140, 162, 25, 225, 31, 22, 177, 25, 52, 220, 57, 52, 35, 10, 141, 104, 12, 34, 182, 52, 255, 1, 137, 164, 251, 220, 141, 200, 186, 241, 206, 14, 18, 67, 28, 243, 194, 198, 212, 120, 40, 173, 71, 237, 227, 130, 104, 67, 35, 70, 148, 231, 15, 230, 113, 13, 116, 249, 228, 169, 49, 29, 6, 72, 143, 196, 116, 81, 44, 229, 8, 37, 230, 152, 184, 197, 53, 14, 143, 25, 217, 105, 79, 119, 102, 175, 76, 118, 233, 134, 40, 157, 78, 21, 224, 165, 14, 103, 196, 194, 13, 100, 96, 5, 46, 150, 161, 13, 13, 70, 161, 34, 78, 12, 210, 46, 66, 17, 138, 93, 164, 111, 147, 180, 251, 158, 70, 96, 201, 38, 232, 77, 73, 174, 107, 114, 106, 152, 156, 81, 254, 183, 45, 144, 34, 23, 202, 192, 70, 58, 108, 166, 73, 135, 33, 131, 21, 91, 40, 133, 88, 181, 161, 14, 179, 198, 128, 21, 94, 130, 70, 41, 220, 128, 12, 104, 58, 15, 174, 118, 205, 200, 92, 47, 2, 203, 125, 92, 35, 108, 172, 88, 6, 253, 22, 149, 17, 145, 161, 179, 129, 94, 50, 109, 69, 74, 139, 213, 167, 196, 130, 102, 47, 75, 221, 60, 83, 198, 41, 244, 157, 73, 35, 1, 253, 97, 250, 82, 43, 209, 20, 98, 36, 107, 13, 187, 42, 197, 82, 22, 209, 45, 36, 109, 106, 22, 57, 96, 109, 253, 177, 219, 24, 224, 246, 34, 166, 48, 174, 156, 104, 123, 145, 172, 237, 48, 35, 213, 157, 105, 69, 176, 203, 218, 167, 184, 2, 97, 115, 162, 71, 54, 16, 232, 167, 57, 217, 174, 132, 164, 202, 110,69, 72, 167, 81, 29, 166, 55, 6, 235, 133, 224, 111, 231, 4, 205, 138, 144, 66, 180, 96, 218, 199, 214, 68, 37, 167, 241, 181, 23, 136, 232, 213, 8, 124, 49, 34, 178, 47, 169, 227, 90, 116, 253, 47, 0, 53, 82, 41, 250, 90, 132, 193, 220, 141, 138, 46, 178, 145, 14, 92, 217, 3, 30, 228, 192, 6, 49, 254, 201, 59, 103, 144, 227, 88, 231, 168, 70, 180, 48, 226,197, 6, 87, 164, 124, 80, 36, 177, 70, 78, 188, 145, 92, 76, 88, 81, 246, 96, 199, 55, 160, 177, 202, 245, 24, 68, 97, 25, 227, 218, 135, 133, 195, 225, 12, 162, 26, 206, 25, 20, 182, 135, 58, 186, 113, 203, 80, 192, 241, 34, 41, 14, 24, 144, 214, 120, 86, 113, 28, 139, 28, 203, 136, 66, 76, 247, 193, 57, 139, 148, 194, 75, 250, 173, 242, 149, 51, 98, 101, 125, 66, 216, 203, 123, 169, 2, 255, 114, 250, 101, 50, 243, 167, 8, 233, 91, 103, 153, 213, 188, 155, 88, 176, 35, 195,135, 21, 91, 104, 155, 186, 102, 58, 167, 116, 184, 56, 172, 115, 158, 111, 67, 54, 254, 202, 83, 207, 127, 230, 12, 46, 174, 65, 142, 85, 229, 234, 28, 216, 96, 46, 160, 21, 189, 104, 70, 55, 218, 209, 143, 134, 116, 164, 37, 61, 105, 74,87, 218, 210, 151, 198, 116, 166, 53, 189, 105, 78, 119, 218, 211, 46, 210, 206, 167, 25, 13, 150, 139, 104, 199, 212, 165, 54, 245, 92, 42, 146, 234, 211, 136, 90, 209, 170, 30, 201, 169, 81, 61, 23, 82, 187, 218, 214, 183, 198, 117, 174,117, 189, 107, 94, 247, 218, 215, 191, 6, 118, 176, 133, 61, 108, 98, 23, 219, 216, 199, 70, 118, 178, 149, 189, 108, 102, 55, 219, 217, 207, 134, 118, 180, 165, 61, 109, 106, 87, 219, 218, 215, 198, 118, 182, 181, 189, 109, 110, 119, 219,219, 223, 6, 119, 184, 197, 61, 110, 28, 5, 4, 0, 59)
312 | [byte[]]$SyncHash.screenCapErrorImage = @(71, 73, 70, 56, 57, 97, 100, 1, 200, 0, 231, 255, 0, 66, 8, 18, 46, 15, 20, 51, 14, 17, 50, 14, 21, 74, 7, 17, 61, 11, 21, 75, 8, 11, 56, 13, 24, 62, 12, 17, 50, 15, 26, 44, 18, 15, 43, 18, 20, 61, 12, 27, 48, 17, 17, 57, 14, 20, 31, 22, 23, 65, 13, 13, 43, 19, 26, 90, 5, 21, 47, 18, 26, 55, 17, 14, 55, 17, 20, 60, 16, 16, 50, 19, 23, 71, 13, 17, 42, 22, 22, 40, 22, 30, 72, 13, 22, 46, 21, 23, 71, 13, 27, 32, 25, 29, 31, 26, 21, 36, 25, 16, 36, 24, 30, 38, 24, 26, 85, 10, 24, 30, 27, 26, 29, 27, 30, 36, 25, 35, 35, 26, 27, 40, 25, 23, 24, 29, 35, 27, 29, 26, 26, 29, 31, 43, 24, 28, 68, 17, 22, 45, 24, 24, 33, 27, 36, 68, 17, 26, 23, 31, 27, 37, 27, 24, 22, 31, 32, 35, 27, 32, 40, 26, 28, 28, 30, 28, 32, 29, 28, 31, 29, 32, 30, 30, 24, 36, 28, 28, 33, 29, 28, 26, 32, 24, 27, 31, 33, 40, 27, 33, 29, 31, 28, 30, 30, 37, 97, 11, 19, 32, 30, 33, 87, 14, 21, 35, 30, 24, 36, 29, 34, 25, 33, 29, 24, 33, 34, 82, 16, 23, 77, 18, 22, 30, 32, 29, 34, 31, 30, 33, 31, 34, 22, 35, 30, 26, 34, 30, 82, 17, 31, 31, 33, 30, 30, 33, 35, 33, 33, 27, 99, 13, 27, 40, 31, 31, 96, 14, 32, 91, 17, 28, 45, 31, 33, 80, 21, 29, 34, 35, 33, 93, 19, 25, 122, 12, 38, 124, 13, 29, 109, 18, 32, 95, 22, 38, 87, 25,34, 38, 40, 37, 116, 16, 37, 117, 17, 30, 105, 23, 32, 99, 25, 34, 111, 21, 39, 105, 24, 37, 42, 44, 41, 45, 47, 45, 103, 30, 40, 141, 19, 39, 110, 29, 42, 131, 23, 39, 122, 25, 50, 124, 26, 47, 118, 29, 50, 132, 25, 47, 49, 51, 48, 157, 18, 42, 114, 33, 44, 128, 29, 40, 143, 24, 47, 121, 32, 47, 128, 30, 45, 52, 54, 51, 152, 26, 46, 160, 24, 50, 218, 6, 56, 55, 57, 54, 218, 8, 51, 132, 35, 53, 154, 29, 52, 57, 59, 57, 140, 34, 52, 210, 15, 47, 220, 12, 46, 209, 15, 52, 135,38, 55, 165, 29, 52, 220, 12, 52, 219, 12, 57, 158, 32, 45, 137, 39, 51, 152, 36, 53, 221, 15, 53, 62, 64, 61, 143, 40,50, 168, 33, 49, 211, 19, 59, 221, 16, 58, 167, 33, 59, 212, 21, 49, 212, 21, 54, 176, 32, 59, 211, 21, 64, 203, 25, 55, 148, 42, 57, 223, 19, 54, 214, 23, 44, 162, 38, 58, 205, 26, 45, 203, 26, 61, 223, 20, 59, 214, 24, 50, 205, 27, 51, 214, 24, 55, 196, 30, 53, 194, 30, 68, 171, 38, 64, 180, 36, 56, 196, 31, 58, 215, 25, 61, 163, 41, 65, 179, 36, 66, 188,34, 60, 187, 34, 65, 69, 71, 68, 206, 30, 58, 174, 40, 59, 205, 30, 68, 197, 33, 64, 160, 45, 59, 190, 36, 56, 182, 39,63, 168, 44, 62, 189, 37, 71, 207, 33, 64, 73, 75, 72, 192, 39, 63, 191, 39, 68, 169, 47, 58, 77, 79, 77, 213, 40, 63, 215, 41, 63, 81, 83, 81, 215, 43, 70, 86, 88, 85, 215, 53, 72, 90, 92, 89, 95, 97, 94, 216, 65, 81, 100, 103, 100, 104, 106, 103, 109, 111, 108, 114, 116, 113, 116, 119, 116, 120, 122, 120, 123, 126, 123, 130, 132, 129, 134, 136, 133, 137, 139, 136, 142, 144, 141, 222, 123, 130, 147, 149, 146, 222, 130, 134, 150, 152, 149, 156, 158, 155, 226, 141, 147, 162, 164, 161, 227, 148, 152, 166, 168, 165, 170, 173, 170, 229, 156, 157, 229, 158, 165, 175, 177, 174, 230, 165, 170, 179, 182, 179, 231, 173, 175, 185, 187, 184, 235, 177, 179, 188, 191, 187, 193, 195, 192, 198, 200, 197, 202, 204, 201, 206, 208, 205, 239, 202, 203, 210, 212, 209, 214, 216, 213, 242, 213, 212, 219, 221, 218, 244, 217, 221, 222, 224, 221, 225, 227, 224, 243, 223, 225, 230, 232, 229, 249, 229, 231, 246, 233, 233, 234, 237, 233, 238, 240, 237, 250, 237, 238, 247, 241, 240, 241, 244, 240, 246, 248, 245, 252, 247, 246, 249, 251, 248, 255, 251, 250, 251, 253, 250, 255, 253, 251, 253, 255, 252, 30, 30, 30, 33, 254, 17, 67, 114, 101, 97, 116, 101, 100, 32, 119, 105, 116, 104, 32, 71, 73, 77, 80, 0, 33, 249, 4, 1, 10, 0, 255, 0, 44, 0, 0, 0, 0, 100, 1, 200, 0, 0, 8, 254, 0, 127, 8, 28, 72, 176, 160, 193, 131, 8, 19, 42, 92, 200, 176, 161, 195, 135, 16, 17, 238, 216, 33, 208, 136, 192, 137, 20, 7, 98, 140, 200, 177, 163, 199, 143, 32, 67, 138, 28, 73, 178, 164, 201, 147, 40, 21, 78, 172, 120, 113, 165, 70, 151, 41, 99, 202, 156, 73, 179, 166, 205, 155, 56, 65, 194, 108, 89, 112, 99, 206, 159, 64, 131, 10, 29, 74, 212, 230, 206, 31, 71, 125, 22, 93, 202, 180, 169, 211, 167, 57,147, 102, 124, 9, 181, 170, 213, 171, 88, 179, 30, 148, 106, 112, 170, 214, 175, 96, 195, 138, 141, 121, 116, 36, 198, 179, 104, 207, 142, 93, 203, 182, 45, 81, 165, 36, 211, 202, 133, 235, 182, 174, 221, 187, 113, 213, 66, 212, 235, 17, 7, 14, 134, 126, 241, 10, 30, 44, 24, 109, 68, 190, 29, 3, 47, 84, 76, 184, 177, 99, 177, 103, 149, 8, 84, 193, 83, 34, 221, 131, 74, 36, 31, 100, 60, 80, 133, 231, 129, 66, 132, 60, 30, 77, 26, 43, 70, 205, 159, 47, 183, 44, 251, 121, 96, 102, 132, 156, 39, 183, 86, 18, 186, 180, 237, 219, 75, 79, 203, 70, 76, 144, 247, 143, 214, 174, 97, 255, 45, 232, 153, 242, 15, 218, 162, 113, 43, 95, 206, 188, 185, 243, 231, 208, 163, 75, 159, 78, 189, 186, 245, 235, 216, 179, 107, 223, 206, 189, 187, 247, 239, 224, 195, 254, 139, 31, 79, 190, 188, 249, 243, 232, 211, 171, 95, 207, 190, 189, 251, 247, 240, 227, 203, 159, 79, 191, 190, 253, 251, 248, 243, 235, 223, 207, 191, 191, 255, 255, 0, 6, 40, 224, 128, 51, 41, 229, 153, 111, 171, 121, 197, 81, 108, 155, 13, 71, 224, 131, 157, 169, 128, 145, 103, 49, 80, 54, 145, 14, 20, 25, 215, 155, 106, 15, 49, 248, 218, 64, 12, 66, 40, 224, 129, 59, 20, 151, 218, 132, 42, 56, 152, 22, 67, 192, 21, 180, 130, 131, 26,209, 246, 87, 113, 34, 138, 136, 3, 13, 129, 89, 116, 28, 106, 47, 250, 85, 66, 9, 76, 76, 164, 2, 20, 178, 249, 133, 195, 10, 72, 70, 17, 197, 111, 2, 41, 49, 209, 107, 158, 173, 16, 5, 20, 74, 84, 136, 20, 142, 70, 178, 84, 35, 129, 59, 208, 128, 227, 10, 71, 232, 248, 219, 144, 80, 172, 80, 130, 16, 76, 48, 145, 156, 100, 36, 200, 80, 131, 8, 25, 100, 192, 193, 5, 23, 112, 96, 103, 6, 46, 176, 128, 66, 13, 58, 16, 81, 162, 103, 74, 100, 193, 196, 145, 42, 56, 65, 229, 14,70, 102, 185, 37, 132, 43, 33, 249, 226, 14, 58, 80, 241, 155, 18, 76, 20, 225, 65, 137, 49, 100, 234, 132, 10, 15, 44,32, 0, 2, 24, 140, 48, 68, 16, 65, 76, 49, 133, 4, 67, 140, 128, 129, 5, 13, 100, 240, 65, 14, 254, 60, 40, 33, 225, 14, 63, 70, 145, 25, 141, 21, 33, 233, 165, 130, 139, 10, 136, 164, 95, 33, 156, 144, 33, 9, 39, 80, 177, 3, 17, 84, 160, 224, 105, 11, 95, 144, 97, 135, 34, 152, 196, 162, 139, 43, 212, 82, 75, 11, 45, 152, 220, 49, 135, 23, 88, 56, 32, 192,2, 120, 242, 137, 168, 10, 37, 76, 150, 3, 172, 49, 24, 177, 130, 151, 48, 246, 58, 96, 143, 95, 90, 184, 195, 7, 50, 44, 224, 192, 8, 97, 252, 81, 9, 44, 176, 152, 98, 138, 40, 0, 95, 114, 73, 43, 160, 8, 44, 138, 191, 176, 140, 178, 138,36, 117, 148, 49, 66, 11, 2, 160, 240, 193, 68, 66, 32, 41, 217, 185, 57, 252, 176, 46, 142, 238, 214, 184, 130, 154, 43, 168, 144, 131, 12, 10, 80, 176, 1, 25, 133, 160, 178, 74, 39, 167, 32, 194, 200, 203, 140, 132, 18, 10, 37, 147, 12, 210, 71, 31, 159, 32, 162, 51, 34, 145, 156, 98, 9, 44, 181, 160, 18, 136, 25, 88, 80, 16, 0, 11, 59, 36, 73, 209, 185, 2, 41, 218, 177, 127, 126, 81, 228, 146, 153, 43, 100, 65, 132, 2, 67, 176, 241, 136, 42, 253, 94, 2, 73, 40, 58, 223, 252, 201, 36, 100, 127, 146, 9, 35, 56, 147, 61, 201, 216, 136, 132, 66, 136, 192, 166, 224, 98, 8, 27, 67, 56, 112, 130,18, 47, 238, 250, 244, 254, 131, 81, 35, 69, 145, 17, 42, 80, 81, 67, 0, 22, 164, 17, 139, 42, 160, 124, 66, 137, 204, 148, 52, 174, 243, 39, 144, 43, 254, 137, 216, 145, 87, 14, 121, 31, 103, 83, 2, 9, 44, 155, 148, 209, 66, 0, 34, 176, 219, 247, 222, 1, 150, 128, 131, 16, 43, 73, 70, 196, 2, 27, 148, 241, 199, 44, 166, 92, 82, 182, 229, 59, 135, 173, 115,227, 184, 83, 2, 121, 217, 55, 247, 30, 10, 40, 157, 44, 28, 70, 7, 28, 224, 93, 130, 151, 36, 236, 160, 25, 233, 252, 69, 97, 102, 197, 74, 60, 144, 129, 3, 72, 208, 225, 202, 43, 132, 16, 18, 74, 229, 189, 83, 94, 59, 34, 185, 79, 142, 179, 229, 189, 79, 162, 51, 33, 157, 204, 18, 200, 19, 160, 123, 233, 193, 18, 37, 50, 223, 95, 148, 96, 170, 112, 5, 2, 98, 60, 34, 203, 37, 130, 32, 226, 73, 31, 59, 139, 220, 205, 6, 97, 51, 0, 130, 175, 113, 226, 235, 158, 226, 114, 87, 187, 198, 189, 205, 20, 164, 112, 3, 0, 92, 160, 132, 35, 65, 65, 67, 242, 203, 143, 113, 178, 176, 3, 22, 0, 224, 14, 170, 184, 4, 33, 62, 129, 54, 3, 6, 240, 114, 4, 236, 221, 1, 19, 216, 61, 156, 229, 206, 113, 50, 27, 219, 36, 40, 209, 138, 74, 4, 2, 1, 25, 40, 145, 148, 50, 168, 159, 211, 124, 32, 3, 254, 27, 248, 3, 44, 46, 161, 59, 77, 12, 34, 19, 110, 67, 4, 0, 95, 136, 136, 203, 81, 174, 133, 80, 188, 29, 36, 32, 65, 137, 176, 165, 141, 19, 173, 80, 69, 32, 8, 224, 130, 38, 241, 48, 63, 19, 57, 193, 224, 48, 128, 9, 88, 52, 110, 109, 189, 91, 156, 238, 20, 119, 192, 23, 58, 145, 114, 144, 211, 93, 247, 218, 56, 51, 204, 17, 112, 109, 161, 184, 4, 46, 22, 145, 4, 14, 124, 128, 72, 95, 196, 79, 9, 124, 16, 0, 36, 108, 66, 22, 137, 27, 219, 228, 148, 72, 54, 4, 182, 112, 108, 12, 84, 162, 11, 207, 136, 70, 202, 53, 78, 16,147, 24, 224, 217, 62, 33, 8, 183, 193, 2, 21, 18, 184, 0, 175, 2, 105, 30, 223, 172, 224, 7, 84, 8, 192, 8, 22, 97, 10, 66, 240, 110, 103, 105, 67, 160, 248, 108, 6, 73, 220, 217, 110, 129, 106, 123, 35, 46, 89, 216, 187, 201, 109, 238, 15, 35, 104, 64, 13, 182, 50, 74, 82, 102, 231, 70, 187, 34, 65, 22, 126, 131, 168, 40, 236, 0, 5, 24, 216, 196, 16, 221,70, 136, 155, 201, 50, 124, 185, 124, 161, 54, 113, 87, 182, 74, 46, 145, 18, 105, 116, 100, 31, 94, 150, 71, 89, 36, 34, 8, 1, 248, 211, 5, 37, 36, 58, 99, 114, 39, 111, 187, 146, 85, 12, 126, 176, 4, 28, 148, 0, 5, 16, 254, 112, 132, 25,41, 145, 189, 80, 88, 147, 137, 77, 204, 101, 27, 183, 233, 70, 1, 254, 83, 108, 252, 36, 4, 56, 25, 113, 182, 62, 188,77, 20, 121, 192, 0, 11, 148, 105, 28, 118, 30, 233, 148, 76, 115, 167, 117, 18, 245, 23, 40, 104, 138, 88, 84, 112, 0,27, 112, 1, 137, 182, 105, 79, 124, 146, 203, 25, 248, 148, 88, 64, 130, 186, 212, 165, 113, 228, 167, 35, 75, 56, 9, 80, 100, 241, 14, 5, 168, 1, 185, 68, 227, 4, 164, 248, 5, 163, 25, 211, 40, 117, 16, 245, 83, 129, 196, 192, 9, 71, 56, 130, 10, 106, 112, 129, 42, 172, 2, 18, 132, 56, 160, 36, 225, 120, 59, 37, 50, 226, 165, 88, 205, 170, 56, 203, 55, 9, 81, 144, 162, 12, 23, 32, 1, 199, 122, 250, 3, 35, 173, 32, 163, 66, 149, 14, 81, 145, 100, 212, 24, 28, 97, 6, 78, 112,1, 1, 54, 209, 137, 243, 89, 81, 129, 139, 212, 170, 94, 181, 218, 203, 151, 245, 129, 18, 157, 160, 197, 6, 88, 80, 132, 18, 40, 1, 93, 47, 122, 1, 13, 96, 149, 86, 234, 20, 149, 34, 74, 152, 65, 20, 12, 91, 1, 54, 192, 162, 164, 73, 132,227, 19, 255, 186, 215, 206, 18, 116, 134, 161, 200, 100, 38, 206, 22, 10, 88, 184, 161, 0, 33, 144, 16, 172, 120, 96, 4, 100, 254, 128, 7, 141, 141, 254, 142, 69, 30, 75, 145, 40, 220, 104, 1, 86, 200, 5, 33, 160, 170, 189, 76, 220, 76, 109, 255, 92, 160, 103, 135, 155, 187, 126, 46, 20, 102, 151, 72, 69, 21, 50, 80, 33, 41, 240, 0, 182, 61, 138, 173, 116,102, 123, 36, 191, 17, 149, 5, 27, 8, 196, 37, 24, 145, 61, 237, 97, 78, 109, 153, 228, 44, 113, 199, 251, 194, 208, 134, 183, 15, 131, 8, 69, 39, 254, 224, 128, 137, 97, 80, 186, 213, 113, 212, 106, 104, 112, 128, 45, 228, 2, 20, 227, 235, 94, 46, 255, 73, 222, 254, 106, 147, 132, 14, 93, 69, 26, 22, 144, 17, 175, 176, 21, 190, 67, 133, 84, 13, 58, 32, 137, 78, 108, 239, 145, 179, 19, 175, 127, 39, 140, 187, 62, 152, 207, 20, 129, 216, 128, 8, 242, 246, 3, 166, 201, 23, 193, 203, 105, 215, 100, 116, 176, 0, 50, 232, 54, 180, 10, 196, 29, 228, 226, 225, 143, 22, 187, 248, 197, 48, 142, 177, 140, 103, 44, 99, 121, 192, 244, 19, 121, 84, 133, 24, 2, 80, 65, 26, 116, 152, 8, 26, 59, 48, 136, 113, 195, 153, 192, 212, 0, 1, 138, 48, 227, 218, 80, 26, 211, 198, 177, 152, 198, 80, 142, 178, 148, 109, 236, 210, 80, 8, 194, 166, 122, 40, 64, 151, 104, 176, 131, 28, 80, 228, 195, 67, 190, 77, 96, 152, 134, 35, 37, 100, 64, 11, 180, 48, 5, 254, 138, 101, 10, 206, 73, 82, 226, 201, 82, 142, 179, 156, 91, 76, 101, 130, 90, 217, 124, 170, 120, 2, 10, 216, 53, 21, 17, 135, 121,52, 99, 134, 173, 151, 126, 16, 128, 145, 38, 18, 124, 10, 109, 179, 112, 225, 60, 231, 70, 211, 184, 206, 219, 28, 161, 217, 76, 49, 7, 97, 58, 173, 44, 127, 118, 140, 95, 86, 27, 3, 191, 168, 192, 1, 134, 128, 68, 94, 109, 201, 223, 55, 183, 184, 30, 20, 206, 170, 60, 232, 140, 85, 37, 102, 226, 18, 152, 104, 65, 13, 86, 0, 4, 32, 224, 128, 67, 153, 38, 204, 173, 207, 101, 17, 32, 208, 64, 6, 88, 80, 5, 34, 6, 193, 136, 182, 57, 46, 156, 78, 62, 117, 170, 177, 186, 106, 127, 64, 186, 188, 146, 100, 68, 43, 72, 161, 5, 23, 28, 161, 71, 184, 206, 181, 99, 66, 3, 132, 19, 52, 96, 12, 176, 144,36, 34, 186, 219, 230, 23, 62, 25, 213, 4, 253, 133, 103, 213, 77, 208, 102, 63, 251, 133, 56, 3, 32, 33, 76, 193, 133,11, 168, 235, 148, 59, 32, 129, 182, 113, 163, 43, 26, 0, 65, 4, 22, 160, 131, 41, 2, 56, 137, 236, 149, 59, 119, 231, 38, 40, 52, 236, 81, 141, 189, 86, 195, 30, 208, 104, 55, 171, 93, 138, 179, 153, 133, 162, 21, 122, 112, 128, 134, 74, 180, 188, 125, 143, 166, 223, 56, 16, 1, 6, 254, 28, 49, 240, 199, 85, 113, 103, 218, 76, 184, 54, 161, 145, 15, 127, 236, 163, 225, 89, 189, 198, 62, 252, 145, 143, 136, 107, 211, 221, 90, 149, 25, 36, 92, 209, 2, 125, 95, 228, 56, 30, 47,205, 175, 252, 146, 129, 33, 232, 194, 193, 222, 51, 96, 202, 149, 173, 77, 118, 184, 120, 31, 215, 192, 170, 204, 93, 252, 142, 109, 226, 252, 165, 51, 59, 224, 44, 176, 112, 183, 206, 4, 93, 57, 56, 184, 64, 16, 92, 113, 9, 127, 90, 56, 129, 3, 77, 182, 63, 208, 253, 66, 98, 188, 227, 233, 218, 112, 233, 54, 102, 222, 226, 120, 16, 195, 234, 19, 119, 233,236, 38, 161, 138, 47, 136, 192, 43, 239, 253, 250, 99, 194, 46, 134, 16, 154, 125, 201, 55, 75, 187, 169, 215, 78, 208, 96, 188, 189, 197, 251, 216, 198, 54, 231, 78, 245, 187, 227, 221, 217, 88, 229, 93, 31, 96, 145, 134, 8, 76, 165, 227, 130, 31, 141, 10, 42, 160, 134, 216, 73, 50, 166, 183, 51, 55, 211, 183, 25, 12, 167, 67, 190, 27, 47, 236, 6, 221, 253, 241, 142, 96, 184, 244, 234, 48, 93, 219, 203, 96, 241, 134, 1, 232, 32, 168, 160, 15, 125, 97, 58, 227, 128, 60, 136, 240, 244, 11, 84, 252, 226, 217, 190, 205, 95, 168, 227, 197, 223, 192, 221, 55, 94, 172, 14, 219, 223, 62, 239, 4, 149, 33, 67, 59, 254, 97, 135, 3, 212, 32, 99, 42, 144, 149, 240, 27, 67, 145, 163, 254, 192, 1, 122, 104, 69, 21, 17, 122, 77, 213, 51, 254, 165, 188, 120, 190, 139, 195, 65, 137, 112, 80, 159, 23, 204, 198, 254, 54, 27, 137, 222, 78, 20, 194, 251, 57, 64, 36, 129, 55, 126, 110, 177, 17, 230, 7, 106, 167, 208, 56, 222, 211, 68, 194, 133, 59, 42, 247, 82, 167,112, 14, 47, 246, 120, 45, 166, 14, 248, 151, 127, 152, 247, 82, 144, 212, 127, 133, 80, 0, 40, 144, 3, 146, 49, 128, 4, 200, 22, 27, 97, 4, 61, 133, 128, 139, 83, 57, 86, 180, 116, 239, 135, 85, 161, 32, 129, 49, 118, 14, 9, 168, 106, 250, 247, 95, 138, 51, 78, 254, 231, 129, 32, 200, 36, 35, 120, 23, 83, 97, 4, 22, 1, 106, 80, 21, 67, 42, 37, 73, 44, 200,124, 88, 5, 131, 46, 118, 14, 51, 163, 85, 184, 151, 125, 146, 195, 8, 166, 208, 129, 31, 40, 36, 61, 232, 131, 25, 1, 132, 159, 150, 126, 218, 51, 51, 57, 227, 68, 71, 184, 87, 74, 216, 98, 76, 168, 87, 79, 184, 77, 147, 244, 9, 83, 168, 131, 43, 33, 130, 87, 8, 22, 46, 161, 133, 21, 144, 7, 173, 144, 104, 107, 36, 71, 18, 166, 118, 72, 104, 103, 99, 184, 132, 77, 136, 129, 239, 6, 111, 11, 164, 134, 126, 192, 0, 223, 135, 105, 254, 111, 8, 25, 128, 55, 135, 34, 36, 83, 187, 19, 94, 97, 136, 85, 17, 56, 129, 247, 71, 131, 25, 72, 113, 156, 245, 9, 184, 224, 6, 134, 232, 101, 136, 114, 74, 137, 104, 23, 72, 50, 122, 165, 167, 126, 222, 37, 67, 223, 132, 112, 171, 71, 80, 241, 247, 98, 244, 103, 127, 46, 102, 129, 128, 216, 106, 153, 136, 11, 189, 167, 3, 126, 19, 138, 110, 129, 111, 68, 21, 118, 65, 80, 10, 173, 208, 73, 186, 83, 97, 169, 168, 135, 47, 229, 124, 208, 39, 125, 212, 103, 125, 18, 119, 137, 4, 165, 51, 86, 198, 8, 170, 64, 6, 17, 96, 2, 64, 80, 2, 59, 224, 81, 186, 184, 22, 71, 112, 17, 70, 114, 1, 90, 160, 11, 151, 128, 99, 240, 86, 106, 203, 231, 82, 173, 247, 116, 176, 151, 59, 178, 71, 117, 204, 120, 115, 53, 200, 68, 218, 179, 54, 170, 128, 5, 34, 240, 2, 138, 181, 3, 78, 48, 79, 219, 72, 130, 61, 194, 1, 72, 16, 11, 162, 160, 68, 77, 120, 87, 238, 183, 135, 141, 227, 120, 79, 39, 121, 218, 212, 142, 45, 246, 14, 150, 7, 143, 206, 184, 77, 110, 227, 79, 130, 80, 10, 45, 176, 3, 66, 224, 107, 37, 34, 38, 253, 56, 22, 191, 194, 2, 72, 102, 10, 236, 247, 56, 200, 118, 142, 218, 228, 118, 112, 39, 119, 179, 103, 119, 151, 23, 136, 185, 227, 254, 54, 139, 3, 10, 134, 224, 0, 63, 32, 4, 183, 22, 63, 31, 57, 22, 25, 241, 34, 131, 51, 7, 176, 208, 7, 154, 48, 54, 219, 51, 136, 18, 246, 128, 185, 227, 122, 46, 23, 117, 47, 53, 117, 15, 249, 146, 26, 56, 57, 5, 215, 9, 117, 32, 0, 78, 240, 40, 197, 180, 147, 166, 1, 34, 58, 32, 2, 95, 144, 11, 136, 48, 148, 230, 211, 128, 147, 227, 128, 171, 136, 59, 44, 231, 114, 48, 39, 117, 51, 151, 15, 210, 0, 149, 48, 53, 78, 147, 112, 9, 171, 16, 6, 11, 176, 41, 198, 129, 147, 90, 25, 22, 83, 241, 40, 48, 80, 9, 161, 165, 9, 189, 20, 62, 102, 217, 130, 47, 180, 112, 107, 153, 85, 15, 103, 115, 18, 9, 147, 107, 52, 78, 125, 208, 9, 155, 48, 2, 25, 32, 43, 183, 194, 4, 229, 178, 151, 95, 145, 133, 65, 54, 0, 127, 208, 9, 130, 32, 152, 150, 68, 73, 198, 152, 110, 235, 118, 125, 19, 153, 59, 55, 83, 66, 166, 224,7, 5, 32, 2, 146, 1, 5, 60, 160, 2, 152, 233, 103, 154, 137, 21, 82, 50, 1, 97, 112, 95, 171, 233, 68, 138, 163, 54, 40, 185, 108, 205, 8, 147, 171, 57, 9, 96, 51, 10, 94, 176, 0, 184, 216, 97, 77, 19, 34, 183, 249, 20, 160, 40, 16, 43, 16, 1, 35, 240, 7, 151, 112, 118, 120, 152, 54, 101, 254, 131, 148, 194, 249, 66, 103, 40, 75, 214, 68, 8, 150, 32, 9, 45,32, 3, 10, 34, 100, 207, 121, 21, 221, 56, 16, 52, 160, 1, 7, 80, 6, 185, 192, 79, 51, 212, 102, 110, 182, 120, 142, 118, 159, 49, 22, 136, 141, 4, 57, 144, 144, 11, 112, 48, 0, 78, 226, 34, 233, 153, 21, 96, 66, 16, 58, 80, 3, 46, 176, 1,13, 6, 9, 51, 148, 64, 70, 201, 104, 248, 25, 161, 250, 105, 156, 161, 213, 9, 168, 48, 2, 44, 144, 139, 101, 101, 155,3, 218, 20, 31, 230, 101, 58, 160, 3, 3, 208, 6, 169, 32, 59, 9, 164, 154, 125, 0, 161, 17, 122, 159, 142, 89, 112, 132, 144, 11, 118, 48, 0, 62, 144, 147, 205, 217, 161, 88, 113, 36, 195, 145, 3, 126, 178, 2, 26, 240, 4, 152, 96, 10, 6, 133, 162, 42, 186, 162, 141, 86, 103, 49, 245, 155, 132, 48, 109, 27, 80, 3, 37, 224, 76, 25, 115, 4, 182, 198, 156, 54, 10, 21, 102, 213, 97, 231, 178, 2, 38, 48, 1, 107, 96, 10, 131, 64, 54, 131, 73, 159, 201, 71, 51, 230, 211, 157, 113, 105, 64, 189, 3, 10, 184, 192, 6, 14, 160, 3, 82, 194, 52, 80, 250, 23, 65, 53, 165, 78, 81, 165, 24, 115, 4, 56, 16, 2, 0, 32, 9, 34, 228, 77, 41, 213, 128, 98, 154, 122, 100, 202, 77, 147, 19, 71, 254, 74, 164, 51, 146, 105, 0, 28, 160, 2,206, 3, 34, 81, 26, 167, 114, 10, 21, 79, 18, 3, 77, 112, 4, 58, 144, 0, 85, 64, 10, 160, 48, 8, 108, 4, 64, 50, 20, 57, 75, 6, 57, 169, 199, 75, 126, 74, 92, 192, 117, 118, 217, 163, 51, 150, 80, 11, 86, 160, 0, 50, 112, 147, 96, 178, 46,51, 250, 168, 79, 193, 153, 144, 162, 3, 85, 210, 4, 77, 176, 3, 17, 192, 0, 109, 32, 11, 130, 160, 61, 97, 243, 136, 228, 83, 159, 162, 42, 75, 150, 115, 172, 145, 131, 114, 251, 53, 8, 136, 6, 78, 144, 48, 10, 112, 80, 1, 231, 50, 36, 43, 48, 3, 43, 224, 3, 33, 144, 149, 178, 250, 19, 74, 81, 171, 28, 39, 33, 33, 16, 1, 27, 144, 7, 166, 64, 9, 253, 99, 62, 7, 228, 165, 143, 20, 62, 235, 186, 70, 200, 250, 174, 74, 39, 71, 104, 131, 54, 97, 99, 11, 129, 208, 2, 32, 192, 3, 57, 16, 126, 63, 112, 109, 131, 230, 145, 219, 42, 20, 221, 234, 173, 37, 50, 17, 36, 16, 0, 67, 176, 9, 106, 102, 62, 218, 67, 69, 217, 153, 98, 42, 134, 87, 238, 250, 174, 150, 51, 148, 38, 100, 85, 190, 149, 9, 224, 211, 10, 143, 128, 5,25, 64, 4, 60, 32, 5, 178, 130, 84, 209, 21, 176, 76, 161, 23, 23, 114, 2, 24, 162, 60, 77, 240, 254, 3, 184, 149, 10, 173, 48, 78, 194, 101, 85, 102, 202, 126, 224, 9, 71, 20, 139, 172, 101, 243, 61, 171, 233, 80, 129, 165, 5, 10, 144, 3,82, 32, 180, 178, 2, 176, 63, 103, 178, 111, 1, 19, 23, 130, 33, 42, 128, 171, 42, 112, 1, 93, 80, 9, 173, 128, 8, 141,68, 159, 156, 5, 177, 143, 217, 75, 57, 187, 181, 0, 196, 169, 153, 132, 62, 174, 96, 6, 2, 32, 3, 78, 146, 33, 226, 87, 16, 206, 137, 180, 55, 225, 19, 58, 2, 41, 152, 98, 4, 131, 116, 0, 102, 80, 9, 160, 224, 74, 149, 212, 70, 18, 171, 98, 44, 180, 181, 180, 99, 80, 98, 179, 54, 162, 176, 9, 107, 48, 0, 53, 64, 5, 58, 160, 178, 250, 6, 122, 55, 146, 182, 106, 91, 19, 37, 8, 132, 74, 144, 60, 24, 130, 55, 55, 162, 3, 7, 16, 6, 169, 32, 10, 156, 160, 9, 162, 217, 172, 14, 74, 150, 123, 203, 183, 201, 202, 128, 232, 69, 75, 96, 43, 182, 51, 234, 37, 92, 166, 2, 89, 144, 60, 4, 177, 184, 28, 218, 184, 142, 155, 133, 64, 232, 55, 43, 107, 41, 76, 32, 2, 3, 96, 6, 179, 32, 59, 252, 183, 75, 131, 122, 57, 55, 139, 179, 199, 10, 71, 142, 184, 59, 138, 100, 11, 146, 80, 6, 7, 32, 2, 69, 240, 83, 108, 229, 182, 63, 0, 132, 234, 226, 52, 178, 254, 27, 21, 48, 81, 187, 182, 171, 3, 15, 144, 52, 80, 176, 4, 2, 48, 5, 146, 176, 63, 40, 150, 9, 147, 208, 73,161, 117, 172, 89, 75, 188, 6, 101, 57, 186, 179, 54, 136, 240, 171, 121, 4, 11, 122, 96, 6, 12, 32, 2, 102, 53, 3, 73,229, 173, 211, 11, 132, 67, 167, 173, 215, 123, 18, 43, 146, 16, 42, 32, 5, 153, 178, 3, 34, 144, 0, 79, 0, 7, 149, 0, 9, 153, 64, 64, 156, 132, 73, 10, 165, 181, 131, 200, 100, 197, 203, 61, 84, 5, 62, 233, 227, 7, 88, 16, 0, 33, 64, 3, 37, 64, 2, 74, 144, 84, 251, 27, 162, 94, 97, 17, 217, 22, 192, 38, 49, 23, 7, 97, 4, 207, 197, 3, 78, 64, 2, 56, 169, 1,29, 16, 6, 179, 160, 126, 125, 32, 140, 140, 195, 167, 41, 197, 190, 195, 58, 62, 77, 4, 62, 155, 147, 10, 110, 0, 3, 25, 80, 40, 101, 75, 17, 73, 181, 2, 210, 187, 21, 42, 140, 19, 115, 145, 189, 46, 172, 175, 153, 177, 2, 41, 144, 187, 3, 128, 4, 129, 176, 10, 94, 147, 80, 137, 134, 87, 162, 251, 174, 96, 163, 94, 169, 16, 8, 94, 112, 0, 17, 64, 3, 74, 224, 4, 158, 40, 23, 23, 197, 196, 79, 60, 20, 124, 241, 131, 70, 96, 126, 148, 113, 4, 206, 19, 5, 36, 144, 1, 8, 208, 5,155, 176, 10, 254, 177, 83, 183, 192, 90, 66, 227, 19, 198, 220, 115, 113, 166, 144, 11, 203, 91, 0, 105, 76, 3, 162, 161, 175, 158, 104, 194, 43, 241, 198, 136, 24, 199, 150, 41, 25, 31, 18, 18, 181, 123, 25, 46, 33, 43, 59, 176, 4, 42, 160, 41, 80, 176, 3, 33, 192, 2, 23, 128, 0, 102, 176, 8, 136, 148, 61, 186, 87, 66, 71, 74, 177, 249, 21, 54, 151, 160, 10, 139, 48, 6, 8, 176, 0, 87, 64, 5, 194, 34, 16, 60, 144, 41, 72, 225, 34, 85, 202, 34, 215, 203, 175, 76, 66, 204, 32, 161, 189, 101, 225, 18, 126, 193, 101, 202, 243, 92, 18, 130, 147, 42, 112, 2, 23, 64, 0, 92, 32, 7, 165, 128, 11, 255, 210, 197, 19, 251, 195, 138, 227, 54, 112, 163, 10, 178, 240, 8, 98, 128, 4, 13, 208, 170, 51, 48, 43, 224, 103, 130, 1, 58, 189, 210, 25, 204, 11, 17, 124, 1, 187, 60, 240, 188, 182, 89, 9, 41, 46, 240, 41, 73, 96, 6, 129, 128, 10, 179, 0, 11, 157, 240, 53, 143, 52, 57, 48, 35, 196, 176, 48, 11, 155, 160, 8, 107, 144, 4, 22, 80, 1, 25, 176, 156, 26, 129, 18, 110, 24, 199, 78, 33, 33, 76, 85, 0, 35, 208, 5, 112, 176, 9, 149, 176, 10, 170, 224, 47, 30, 237, 209, 178, 160, 10, 170, 80, 9, 122, 80, 7, 93, 48, 2, 8, 16, 254, 0, 18, 211, 34, 18, 29, 29, 62, 226, 37, 53, 144, 1, 1, 32, 0, 14, 208,2, 88, 96, 5, 100, 176, 6, 115, 96, 7, 60, 61, 7, 107, 224, 5, 95, 128, 5, 45, 224, 0, 21, 80, 39, 124, 146, 38, 17, 221, 210, 33, 6, 4, 41, 144, 2, 73, 146, 25, 59, 32, 3, 40, 144, 1, 11, 64, 39, 7, 80, 0, 7, 48, 0, 224, 34, 3, 175, 34, 178, 205, 105, 189, 74, 13, 29, 142, 162, 36, 216, 38, 185, 33, 26, 162, 33, 160, 1, 26, 80, 3, 25, 146, 41, 36, 18, 26, 140, 27, 214, 203, 161, 36, 197, 113, 43, 77, 2, 5, 206, 3, 114, 21, 225, 4, 134, 34, 43, 36, 144, 60, 149, 44, 215, 202, 145, 111, 93, 182, 175, 148, 177, 198, 110, 93, 28, 181, 202, 180, 161, 188, 175, 24, 35, 216, 215, 65, 4, 126, 162, 60, 183, 82, 187, 175, 49, 192, 4, 145, 81, 44, 13, 217, 204, 17, 197, 202, 108, 86, 142, 242, 23, 75, 187, 18, 212, 203,217, 209, 113, 22, 28, 149, 218, 71, 114, 109, 67, 167, 186, 95, 66, 194, 166, 45, 214, 161, 125, 81, 137, 194, 191, 3,49, 116, 170, 29, 215, 177, 189, 219, 188, 221, 219, 190, 253, 219, 192, 29, 220, 194, 61, 220, 196, 93, 220, 198, 13, 22, 216, 208, 98, 237, 16, 219, 206, 48, 14, 238, 112, 15, 250, 160, 15, 247, 254, 224, 14, 228, 240, 12, 104, 64, 29, 214, 208, 98, 217, 128, 16, 229, 208, 98, 226, 240, 20, 183, 32, 103, 212, 224, 78, 207, 48, 15, 80, 118, 15, 222, 128, 7, 210, 65, 14, 45, 166, 12, 8, 1, 15, 45, 22, 13, 79, 17, 13, 114, 118, 12, 164, 196, 10, 233, 16, 103, 250, 160, 222, 209, 1, 223, 250, 0, 6, 99, 33, 14, 250, 189, 76, 95, 36, 12, 240, 221, 98, 244, 32, 14, 204, 32, 12, 120, 32, 12, 202, 64, 13, 229, 128, 15, 254, 0, 15, 210, 209, 8, 252, 224, 15, 203, 61, 22, 237, 208, 98, 207, 128, 96, 128, 96, 222, 254, 160, 15, 222, 16, 7, 8, 209, 8, 226, 64, 14, 210, 225, 12, 222, 61, 22, 103, 160, 15, 45, 198, 10, 8, 198, 222, 254, 128, 15, 205, 192, 17, 120, 64, 13, 233, 64, 15, 250, 128, 15, 240, 0, 14, 187, 112, 16, 2, 238, 15, 206, 80, 12, 224, 224,14, 248, 192, 15, 248, 208, 14, 29, 110, 16, 65, 62, 228, 69, 126, 228, 73, 190, 228, 8, 225, 12, 228, 48, 15, 248, 32,221, 232, 224, 12, 10, 65, 229, 86, 46, 221, 235, 192, 13, 192, 32, 16, 244, 61, 99, 252, 192, 223, 224, 192, 225, 6, 113, 227, 57, 190, 227, 61, 254, 227, 76, 222, 98, 78, 110, 228, 72, 174, 228, 28, 177, 12, 45, 70, 225, 14, 49, 14, 45, 86, 227, 254, 202, 80, 14, 58, 174, 15, 224, 32, 16, 122, 238, 15, 124, 238, 231, 209, 29, 232, 3, 161, 230, 58, 206, 227, 62, 126, 16, 131, 94, 232, 127, 142, 232, 217, 193, 12, 46, 38, 229, 15, 225, 12, 32, 14, 99, 247, 224, 222, 5, 177, 225, 254, 64, 14, 23, 30, 99, 214, 96, 16, 158, 14, 234, 50, 54, 234, 6, 97, 12, 235, 48, 99, 222, 112, 16, 202, 224, 233, 49, 166, 15, 183, 240, 3, 222, 64, 99, 243, 48, 16, 171, 238, 15, 110, 62, 16, 152, 46, 99, 155, 78, 234, 45, 102, 234, 162, 30, 17, 220, 16, 236, 15, 225, 14, 33, 110, 12, 249, 253, 98, 168, 142, 236, 250, 160, 236, 48, 134, 234, 63, 208, 235, 49, 246, 235, 5, 225, 236, 208, 206, 236, 219, 177, 236, 40, 30, 17, 217, 77, 99, 247, 0, 227, 3, 209, 226, 81, 118, 15, 0, 62, 238, 46, 126, 222, 231, 62, 16, 203, 32, 225, 52, 86, 227, 4, 17, 13, 233, 238, 235, 2, 97, 14, 52, 150,14, 2, 145, 5, 18, 126, 235, 4, 241, 237, 51, 22, 238, 4, 65, 238, 234, 14, 17, 232, 208, 98, 227, 221, 16, 113, 224, 226, 209, 29, 99, 246, 157, 240, 33, 62, 239, 46, 102, 223, 63, 224, 239, 190, 46, 238, 2, 225, 240, 11, 15, 99, 18, 143,29, 197, 208, 98, 250, 32, 12, 17, 49, 230, 254, 224, 14, 212, 32, 254, 12, 141, 208, 231, 46, 214, 234, 3, 161, 12, 47, 70, 15, 220, 96, 12, 128, 80, 12, 50, 238, 15, 27, 255, 3, 44, 239, 98, 46, 15, 243, 50, 31, 241, 4, 113, 12, 10, 111,14, 207, 80, 12, 120, 192, 10, 205, 224, 233, 232, 64, 16, 205, 16, 234, 243, 128, 13, 66, 127, 11, 200, 96, 13, 232, 112, 244, 2, 65, 238, 120, 110, 16, 199, 208, 98, 230, 16, 239, 46, 70, 242, 38, 143, 242, 45, 166, 242, 2, 113, 243, 8, 254, 242, 49, 63, 243, 53, 207, 16, 247, 208, 98, 195, 224, 16, 148, 238, 98, 240, 144, 13, 198, 112, 221, 3, 209, 246, 119, 14, 247, 114, 47, 230, 91, 95, 242, 39, 223, 221, 95, 79, 16, 116, 63, 225, 118, 223, 29, 201, 237, 15, 82, 255, 16, 187, 144, 246, 254, 32, 14, 4, 62, 16, 50, 158, 225, 2, 145, 13, 30, 159, 13, 119, 255, 3, 96, 128, 248, 203, 64, 16, 144, 31, 226, 146, 79, 16, 149, 223, 98, 151, 47, 16, 124, 0, 223, 240, 80, 12, 6, 1, 8, 46, 206, 239, 63, 192, 10, 136,111, 14, 36, 174, 16, 109, 63, 14, 8, 49, 248, 216, 48, 16, 135, 239, 221, 139, 47, 16, 141, 143, 249, 145, 63, 249, 157, 239, 15, 159, 223, 16, 195, 32, 103, 210, 94, 236, 51, 110, 13, 183, 63, 16, 196, 143, 15, 198, 111, 16, 181, 159, 248, 199, 254, 159, 251, 200, 223, 98, 202, 127, 252, 219, 81, 240, 254, 48, 251, 16, 17, 228, 89, 159, 234, 8, 78, 16, 246, 238, 15, 7, 127, 237, 45, 6, 242, 3, 241, 253, 225, 79, 16, 200, 238, 15, 228, 255, 3, 197, 142, 15, 97, 126, 16, 244, 224, 15, 247, 48, 16, 103, 238, 15, 235, 64, 253, 6, 65, 252, 150, 78, 16, 124, 143, 12, 3, 161, 253, 0, 241, 67, 224,192, 31, 198, 252, 249, 163, 71, 208, 220, 65, 106, 4, 7, 186, 59, 40, 204, 225, 68, 130, 212, 14, 94, 196, 152, 17, 217, 64, 116, 7, 149, 81, 20, 216, 209, 223, 71, 138, 226, 14, 154, 163, 104, 16, 33, 65, 145, 36, 65, 190, 132, 25, 83, 230, 76, 154, 53, 107, 206, 59, 184, 204, 38, 158, 123, 254, 244, 237, 162, 8, 134, 159, 191, 123, 4, 233, 29, 4, 70, 17,103, 81, 163, 72, 149, 18, 29, 120, 166, 103, 70, 170, 254, 224, 9, 68, 211, 83, 223, 176, 153, 233, 124, 54, 2, 137, 19, 95, 22, 129, 60, 125, 2, 157, 40, 20, 234, 192, 163, 254, 146, 78, 92, 106, 147, 92, 85, 170, 250, 192, 176, 245, 55,246, 229, 81, 189, 19, 205, 254, 12, 58, 148, 169, 64, 190, 100, 109, 30, 70, 156, 88, 49, 98, 124, 7, 185, 214, 116, 118, 18, 100, 156, 131, 87, 5, 250, 58, 56, 143, 98, 163, 131, 233, 8, 98, 254, 246, 167, 121, 34, 103, 127, 158, 5, 50, 163, 75, 21, 157, 192, 102, 7, 87, 207, 108, 236, 14, 36, 171, 131, 235, 6, 70, 246, 135, 146, 34, 101, 171, 3, 65, 139,118, 72, 218, 52, 77, 120, 7, 163, 209, 4, 86, 251, 101, 114, 127, 182, 41, 226, 214, 61, 145, 183, 229, 31, 204, 157, 47, 198, 158, 93, 251, 225, 51, 23, 209, 210, 4, 119, 208, 26, 72, 100, 157, 7, 70, 59, 88, 238, 249, 65, 111, 4, 209, 251, 83, 63, 17, 119, 123, 129, 225, 83, 99, 4, 87, 255, 32, 182, 153, 229, 253, 229, 167, 232, 153, 131, 0, 252, 193, 190, 241, 40, 242, 111, 184, 247, 226, 115, 104, 190, 154, 26, 25, 74, 31, 176, 102, 154, 102, 192, 151, 42, 252, 15, 36, 3, 201, 51, 79, 32, 12, 9, 220, 46, 68, 17, 71, 236, 238, 160, 141, 106, 42, 231, 32, 102, 64, 226, 230, 32, 110, 6, 50,201, 159, 3, 29, 178, 111, 69, 24, 197, 163, 168, 198, 129, 82, 244, 199, 25, 154, 120, 244, 81, 38, 108, 14, 10, 114, 34, 251, 158, 217, 81, 69, 22, 93, 188, 81, 198, 28, 149, 164, 9, 183, 118, 106, 26, 231, 32, 36, 65, 170, 210, 159, 43,39, 226, 209, 198, 137, 90, 244, 231, 69, 129, 178, 220, 114, 68, 51, 207, 84, 172, 49, 127, 248, 171, 201, 43, 127, 116, 154, 40, 139, 226, 252, 57, 254, 102, 160, 118, 14, 42, 134, 162, 117, 124, 194, 131, 160, 59, 253, 201, 115, 162, 61, 245, 233, 83, 32, 55, 93, 138, 201, 77, 47, 97, 90, 136, 31, 64, 64, 218, 211, 159, 91, 6, 114, 19, 78, 135, 228, 60, 168, 78, 129, 254, 12, 212, 161, 65, 11, 157, 201, 62, 16, 99, 250, 115, 82, 144, 74, 5, 169, 82, 138, 48, 165, 211, 206, 131, 76, 69, 51, 86, 89, 101, 138, 116, 158, 56, 106, 18, 169, 161, 137, 178, 81, 78, 32, 48, 244, 89, 203, 161, 95, 253, 145, 109, 160, 97, 7, 35, 104, 216, 98, 67, 194, 177, 171, 102, 99, 58, 10, 184, 75, 27, 147, 54, 87, 138, 120, 109,206, 88, 96, 145, 213, 150, 88, 155, 34, 181, 52, 166, 51, 128, 149, 214, 161, 113, 67, 123, 201, 218, 93, 123, 253, 225, 220, 114, 103, 133, 55, 222, 31, 134, 116, 141, 15, 144, 192, 120, 102, 29, 146, 178, 116, 199, 176, 129, 166, 1, 150, 31, 75, 149, 113, 141, 34, 130, 253, 25, 135, 160, 131, 95, 115, 232, 224, 132, 7, 178, 111, 158, 239, 96, 202, 18, 30, 123, 97, 162, 13, 93, 4, 211, 35, 136, 95, 127, 61, 12, 120, 224, 130, 39, 114, 184, 166, 44, 26, 235, 75, 166, 131, 25, 36, 153, 99, 44, 15, 234, 215, 33, 128, 253, 17, 120, 160, 149, 229, 197, 57, 94, 52, 112, 202, 44, 155, 99, 26, 254,225, 99, 24, 101, 176, 49, 71, 171, 51, 4, 194, 205, 159, 118, 154, 185, 229, 22, 103, 22, 178, 112, 32, 122, 179, 161,8, 204, 105, 8, 154, 186, 234, 131, 174, 182, 249, 162, 123, 176, 49, 6, 143, 56, 124, 81, 134, 154, 113, 224, 105, 102, 32, 1, 51, 155, 102, 152, 56, 128, 81, 198, 154, 114, 230, 57, 250, 135, 97, 46, 226, 198, 151, 70, 162, 185, 142, 94,54, 145, 190, 104, 233, 166, 159, 190, 8, 196, 172, 191, 220, 186, 38, 255, 24, 150, 9, 219, 191, 215, 93, 243, 165, 164, 5, 119, 26, 234, 12, 7, 114, 60, 103, 205, 101, 61, 70, 205, 251, 148, 246, 243, 62, 114, 28, 130, 250, 68, 135, 68, 242, 69, 33, 19, 41, 66, 221, 33, 30, 83, 227, 103, 194, 77, 239, 91, 22, 15, 96, 51, 90, 150, 71, 211, 103, 79, 109, 116, 213, 253, 217, 157, 163, 131, 82, 167, 137, 222, 207, 145, 45, 253, 165, 228, 95, 250, 147, 46, 223, 7, 90, 126, 115,233, 71, 44, 166, 249, 170, 240, 33, 71, 83, 129, 128, 153, 51, 35, 125, 168, 118, 72, 172, 143, 7, 234, 169, 92, 241, 41, 42, 127, 34, 52, 94, 175, 234, 186, 203, 32, 170, 138, 31, 250, 4, 154, 43, 163, 232, 206, 39, 136, 251, 170, 190, 135, 43, 175, 241, 5, 74, 95, 77, 44, 119, 159, 225, 252, 0, 127, 79, 73, 25, 69, 254, 244, 87, 23, 240, 17, 228, 128, 211, 131, 224, 118, 152, 65, 14, 120, 224, 131, 31, 250, 184, 71, 59, 198, 17, 141, 91, 77, 132, 15, 217, 104, 135, 5, 239, 225, 14, 111, 72, 196, 33, 187, 232, 144, 67, 84, 18, 157, 31, 160, 176, 52, 41, 145, 12, 69, 150, 65, 193, 198, 232, 131, 30, 232, 224, 134, 246, 8, 114, 6, 107, 172, 227, 30, 250, 192, 96, 58, 176, 65, 188, 168, 96, 163, 130, 250, 152, 135, 57, 108, 116, 11, 118, 17, 228, 131, 33, 228, 199, 8, 75, 56, 17, 23, 22, 112, 32, 43, 180, 9, 207, 62, 71, 32, 23,186, 239, 132, 77, 4, 201, 19, 69, 72, 66, 19, 18, 164, 139, 17, 68, 99, 26, 213, 184, 70, 54, 182, 209, 141, 111, 132,99, 28, 229, 56, 71, 58, 214, 209, 142, 119, 196, 99, 30, 245, 184, 71, 62, 246, 209, 143, 127, 4, 100, 32, 5, 57, 72, 66, 22, 210, 144, 135, 68, 100, 34, 21, 185, 72, 70, 54, 210, 145, 143, 132, 100, 36, 37, 57, 73, 74, 86, 210, 146, 151,196, 100, 38, 53, 185, 73, 78, 118, 210, 147, 159, 4, 101, 40, 69, 57, 74, 82, 150, 210, 148, 167, 68, 101, 42, 85, 185, 74, 86, 182, 242, 37, 74, 128, 165, 43, 101, 73, 201, 88, 14, 4, 150, 183, 172, 165, 64, 112, 153, 203, 93, 42, 1, 10,179, 4, 230, 35, 149, 96, 128, 24, 92, 58, 228, 150, 63, 200, 101, 48, 149, 185, 76, 102, 54, 211, 153, 207, 132, 102, 52, 165, 57, 77, 106, 86, 211, 154, 215, 196, 102, 54, 181, 185, 77, 110, 118, 211, 155, 223, 4, 103, 56, 197, 57, 78, 114, 150, 211, 156, 231, 68, 103, 58, 213, 185, 78, 118, 182, 211, 157, 239, 132, 103, 60, 229, 57, 79, 122, 214, 211, 158, 247, 196, 103, 62, 245, 185, 79, 126, 246, 211, 159, 255, 4, 104, 64, 5, 58, 80, 130, 22, 180, 158, 1, 1, 0, 59)
313 |
314 |
315 | # SaveImageButton ============================================================
316 | $SyncHash.SaveImageButton = New-Object System.Windows.Forms.Button
317 | $SyncHash.SaveImageButton.Location = New-Object System.Drawing.Size(20,230)
318 | $SyncHash.SaveImageButton.Size = New-Object System.Drawing.Size(80,22)
319 | $SyncHash.SaveImageButton.Text = "Save Image"
320 | $SyncHash.SaveImageButton.Margin = 10
321 | $SyncHash.SaveImageButton.Enabled = $false
322 | $SyncHash.SaveImageButton.Add_Click(
323 | {
324 | #SAVE IMAGE
325 | $img = $SyncHash.PictureBox.Image
326 | SaveImageFile -bmp $img
327 | })
328 |
329 |
330 | $SyncHash.RecordingGIF = $false
331 |
332 | # RecordGifButton button ============================================================
333 | $SyncHash.RecordGifButton = New-Object System.Windows.Forms.Button
334 | $SyncHash.RecordGifButton.Location = New-Object System.Drawing.Size(200,230)
335 | $SyncHash.RecordGifButton.Size = New-Object System.Drawing.Size(80,22)
336 | $SyncHash.RecordGifButton.Text = "Record GIF"
337 | #$SyncHash.RecordGifButton.Margin = 10
338 | $SyncHash.RecordGifButton.ForeColor = "green"
339 | $SyncHash.RecordGifButton.Enabled = $false
340 | #$SyncHash.RecordGifButton.Anchor = [System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Left
341 | $SyncHash.RecordGifButton.Add_Click(
342 | {
343 | Write-Host "INFO: Recording GIF" -foreground yellow
344 | $SyncHash.RecordGifButton.Enabled = $false
345 | $SyncHash.SaveImageButton.Enabled = $false
346 | $SyncHash.StopRecordGifButton.Enabled = $true
347 |
348 | #SAVE IMAGE
349 | $imgArray = @()
350 |
351 | $SyncHash.RecordingGIF = $true
352 | While ($SyncHash.RecordingGIF)
353 | {
354 | [System.Drawing.Image]$imageObject = $SyncHash.PictureBox.Image
355 | $imgArray += $imageObject
356 | [System.Windows.Forms.Application]::DoEvents()
357 | Start-Sleep -Milliseconds 500
358 | [System.Windows.Forms.Application]::DoEvents()
359 |
360 | }
361 |
362 | $SyncHash.RecordGifButton.Enabled = $true
363 | $SyncHash.SaveImageButton.Enabled = $true
364 | $Script:ImageArrayResult = $imgArray
365 | $SyncHash.form.Close()
366 | })
367 |
368 | # StopRecordGifButton ============================================================
369 | $SyncHash.StopRecordGifButton = New-Object System.Windows.Forms.Button
370 | $SyncHash.StopRecordGifButton.Location = New-Object System.Drawing.Size(290,230)
371 | $SyncHash.StopRecordGifButton.Size = New-Object System.Drawing.Size(80,22)
372 | $SyncHash.StopRecordGifButton.Text = "Stop Record"
373 | $SyncHash.StopRecordGifButton.Enabled = $false
374 | $SyncHash.StopRecordGifButton.ForeColor = "red"
375 | $SyncHash.StopRecordGifButton.Add_Click(
376 | {
377 | Write-Host "INFO: Stop Recording GIF" -foreground yellow
378 | $SyncHash.RecordingGIF = $false
379 | $SyncHash.StopRecordGifButton.Enabled = $false
380 | })
381 |
382 | $SyncHash.ImageWidth = 300
383 | $SyncHash.ImageHeight = 300
384 |
385 | # PictureBox ============================================================
386 | $SyncHash.PictureBox = new-object Windows.Forms.PictureBox
387 | $SyncHash.PictureBox.Location = New-Object System.Drawing.Size(10,10)
388 | $SyncHash.PictureBox.width = 0
389 | $SyncHash.PictureBox.height = 0
390 | $SyncHash.PictureBox.BorderStyle = "FixedSingle"
391 | $SyncHash.PictureBox.sizemode = "Autosize"
392 | $SyncHash.PictureBox.Margin = 10
393 | $SyncHash.PictureBox.WaitOnLoad = $true
394 | $SyncHash.PictureBox.Image = $SyncHash.connectingImage
395 |
396 | $SyncHash.PictureBox.Add_SizeChanged(
397 | {
398 | if($SyncHash.screenConnected)
399 | {
400 | if($SyncHash.ImageHeight -gt 700)
401 | {
402 | $SyncHash.PictureBox.sizemode = "StretchImage"
403 | $SyncHash.PictureBox.width = ($SyncHash.ImageWidth / 2)
404 | $SyncHash.PictureBox.height = ($SyncHash.ImageHeight / 2)
405 |
406 | if($SyncHash.form -ne $null)
407 | {
408 | $SyncHash.form.Height = ($SyncHash.ImageHeight / 2) + 60
409 | $SyncHash.form.Width = ($SyncHash.ImageWidth / 2) + 40
410 | $SyncHash.form.Refresh()
411 | [System.Windows.Forms.Application]::DoEvents()
412 | }
413 | }
414 | else
415 | {
416 | $SyncHash.form.Refresh()
417 | [System.Windows.Forms.Application]::DoEvents()
418 | }
419 | }
420 | elseif(!$SyncHash.screenConnected)
421 | {
422 | $SyncHash.PictureBox.sizemode = "Autosize"
423 | }
424 |
425 | $width = $SyncHash.PictureBox.Width
426 | $height = $SyncHash.PictureBox.Height
427 | $SyncHash.SaveImageButton.Location = New-Object System.Drawing.Size(20,($height + 20))
428 | $SyncHash.RecordGifButton.Location = New-Object System.Drawing.Size(($width - 150),($height + 20))
429 | $SyncHash.StopRecordGifButton.Location = New-Object System.Drawing.Size(($width - 70),($height + 20))
430 |
431 | $SyncHash.form.Refresh()
432 | [System.Windows.Forms.Application]::DoEvents()
433 | })
434 |
435 | $SyncHash.PictureBox.Add_MouseDown(
436 | {
437 | #$script:startX = $_.X
438 | #$script:startY = $_.Y
439 | })
440 |
441 | $SyncHash.PictureBox.Add_MouseUp(
442 | {
443 | #$X = $_.X
444 | #$Y = $_.Y
445 | })
446 |
447 |
448 |
449 |
450 | # Create the form
451 | $SyncHash.form = New-Object System.Windows.Forms.Form
452 | $SyncHash.form.Text = "Screen"
453 | $SyncHash.form.Size = New-Object System.Drawing.Size(100,100)
454 | $SyncHash.form.FormBorderStyle = "FixedSingle"
455 | $SyncHash.form.StartPosition = "CenterScreen"
456 | $SyncHash.form.AutoSizeMode = "GrowAndShrink"
457 | $SyncHash.form.AutoSize = $True
458 | $SyncHash.form.Topmost = $True
459 | $SyncHash.form.MaximizeBox = $False
460 | $SyncHash.form.MinimizeBox = $False
461 | $SyncHash.form.tag = $null
462 | #$SyncHash.form.MaximumSize = New-Object System.Drawing.Size(500,370)
463 | #Myteamslab Icon
464 | [byte[]]$WindowIcon = @(71, 73, 70, 56, 57, 97, 32, 0, 32, 0, 231, 137, 0, 0, 52, 93, 0, 52, 94, 0, 52, 95, 0, 53, 93, 0, 53, 94, 0, 53, 95, 0,53, 96, 0, 54, 94, 0, 54, 95, 0, 54, 96, 2, 54, 95, 0, 55, 95, 1, 55, 96, 1, 55, 97, 6, 55, 96, 3, 56, 98, 7, 55, 96, 8, 55, 97, 9, 56, 102, 15, 57, 98, 17, 58, 98, 27, 61, 99, 27, 61, 100, 24, 61, 116, 32, 63, 100, 36, 65, 102, 37, 66, 103, 41, 68, 104, 48, 72, 106, 52, 75, 108, 55, 77, 108, 57, 78, 109, 58, 79, 111, 59, 79, 110, 64, 83, 114, 65, 83, 114, 68, 85, 116, 69, 86, 117, 71, 88, 116, 75, 91, 120, 81, 95, 123, 86, 99, 126, 88, 101, 125, 89, 102, 126, 90, 103, 129, 92, 103, 130, 95, 107, 132, 97, 108, 132, 99, 110, 134, 100, 111, 135, 102, 113, 136, 104, 114, 137, 106, 116, 137, 106,116, 139, 107, 116, 139, 110, 119, 139, 112, 121, 143, 116, 124, 145, 120, 128, 147, 121, 129, 148, 124, 132, 150, 125,133, 151, 126, 134, 152, 127, 134, 152, 128, 135, 152, 130, 137, 154, 131, 138, 155, 133, 140, 157, 134, 141, 158, 135,141, 158, 140, 146, 161, 143, 149, 164, 147, 152, 167, 148, 153, 168, 151, 156, 171, 153, 158, 172, 153, 158, 173, 156,160, 174, 156, 161, 174, 158, 163, 176, 159, 163, 176, 160, 165, 177, 163, 167, 180, 166, 170, 182, 170, 174, 186, 171,175, 186, 173, 176, 187, 173, 177, 187, 174, 178, 189, 176, 180, 190, 177, 181, 191, 179, 182, 192, 180, 183, 193, 182,185, 196, 185, 188, 197, 188, 191, 200, 190, 193, 201, 193, 195, 203, 193, 196, 204, 196, 198, 206, 196, 199, 207, 197,200, 207, 197, 200, 208, 198, 200, 208, 199, 201, 208, 199, 201, 209, 200, 202, 209, 200, 202, 210, 202, 204, 212, 204,206, 214, 206, 208, 215, 206, 208, 216, 208, 210, 218, 209, 210, 217, 209, 210, 220, 209, 211, 218, 210, 211, 219, 210,211, 220, 210, 212, 219, 211, 212, 219, 211, 212, 220, 212, 213, 221, 214, 215, 223, 215, 216, 223, 215, 216, 224, 216,217, 224, 217, 218, 225, 218, 219, 226, 218, 220, 226, 219, 220, 226, 219, 220, 227, 220, 221, 227, 221, 223, 228, 224,225, 231, 228, 229, 234, 230, 231, 235, 251, 251, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 33, 254, 17, 67, 114, 101, 97, 116, 101, 100, 32, 119, 105, 116, 104, 32, 71, 73, 77, 80, 0, 33, 249, 4, 1, 10, 0, 255, 0, 44, 0, 0, 0, 0, 32, 0, 32, 0, 0, 8, 254, 0, 255, 29, 24, 72, 176, 160, 193, 131, 8, 25, 60, 16, 120, 192, 195, 10, 132, 16, 35, 170, 248, 112, 160, 193, 64, 30, 135, 4, 68, 220, 72, 16, 128, 33, 32, 7, 22, 92, 68, 84, 132, 35, 71, 33, 136, 64, 18, 228, 81, 135, 206, 0, 147, 16, 7, 192, 145, 163, 242, 226, 26, 52, 53, 96, 34, 148, 161, 230, 76, 205, 3, 60, 214, 204, 72, 163, 243, 160, 25, 27, 62, 11, 6, 61, 96, 231, 68, 81, 130, 38, 240, 28, 72, 186, 114, 205, 129, 33, 94, 158, 14, 236, 66, 100, 234, 207, 165, 14, 254, 108, 120, 170, 193, 15, 4, 175, 74, 173, 30, 120, 50, 229, 169, 20, 40, 3, 169, 218, 28, 152, 33, 80, 2, 157, 6, 252, 100, 136, 251, 85, 237, 1, 46, 71,116, 26, 225, 66, 80, 46, 80, 191, 37, 244, 0, 48, 57, 32, 15, 137, 194, 125, 11, 150, 201, 97, 18, 7, 153, 130, 134, 151, 18, 140, 209, 198, 36, 27, 24, 152, 35, 23, 188, 147, 98, 35, 138, 56, 6, 51, 251, 29, 24, 4, 204, 198, 47, 63, 82, 139, 38, 168, 64, 80, 7, 136, 28, 250, 32, 144, 157, 246, 96, 19, 43, 16, 169, 44, 57, 168, 250, 32, 6, 66, 19, 14, 70, 248, 99, 129, 248, 236, 130, 90, 148, 28, 76, 130, 5, 97, 241, 131, 35, 254, 4, 40, 8, 128, 15, 8, 235, 207, 11, 88, 142, 233, 81, 112, 71, 24, 136, 215, 15, 190, 152, 67, 128, 224, 27, 22, 232, 195, 23, 180, 227, 98, 96, 11, 55, 17, 211, 31, 244, 49, 102, 160, 24, 29, 249, 201, 71, 80, 1, 131, 136, 16, 194, 30, 237, 197, 215, 91, 68, 76, 108, 145, 5, 18, 27, 233, 119, 80, 5, 133, 0, 66, 65, 132, 32, 73, 48, 16, 13, 87, 112, 20, 133, 19, 28, 85, 113, 195, 1, 23, 48, 164, 85, 68, 18, 148, 24, 16, 0, 59)
465 | $ico = New-Object IO.MemoryStream($WindowIcon, 0, $WindowIcon.Length)
466 | $SyncHash.form.Icon = [System.Drawing.Icon]::FromHandle((new-object System.Drawing.Bitmap -argument $ico).GetHIcon())
467 | $SyncHash.form.ShowInTaskbar = $true
468 |
469 | $SyncHash.form.Add_Closing(
470 | {
471 | Write-Host "INFO: Closing window" -foreground yellow
472 | $SyncHash.boolWhile = $false
473 | })
474 |
475 |
476 | # Add all of the controls to the form
477 | $SyncHash.form.Controls.Add($SyncHash.PictureBox)
478 | $SyncHash.form.Controls.Add($SyncHash.TextLabel)
479 | $SyncHash.form.Controls.Add($SyncHash.SaveImageButton)
480 | $SyncHash.form.Controls.Add($SyncHash.RecordGifButton)
481 | $SyncHash.form.Controls.Add($SyncHash.StopRecordGifButton)
482 |
483 |
484 | $runspace = [System.Management.Automation.Runspaces.RunspaceFactory]::CreateRunspace($Host)
485 | $runspace.Open()
486 | $runspace.SessionStateProxy.SetVariable('SyncHash',$SyncHash)
487 | $powershell = [System.Management.Automation.PowerShell]::Create()
488 | $powershell.Runspace = $runspace
489 |
490 |
491 | #THIS IS THE RUNSPACE CODE
492 | $powershell.AddScript({
493 |
494 | [string]$theIPAddress = $SyncHash.IPAddress
495 | [string]$thePort = $SyncHash.Port
496 | [byte[]]$errorImage = @(71, 73, 70, 56, 57, 97, 100, 1, 200, 0, 231, 255, 0, 66, 8, 18, 46, 15, 20, 51, 14, 17, 50, 14, 21, 74, 7, 17, 61, 11, 21, 75, 8, 11, 56, 13, 24, 62, 12, 17, 50, 15, 26, 44, 18, 15, 43, 18, 20, 61, 12, 27, 48, 17, 17, 57, 14, 20, 31, 22, 23, 65, 13, 13, 43, 19, 26, 90, 5, 21, 47, 18, 26, 55, 17, 14, 55, 17, 20, 60, 16, 16, 50, 19, 23, 71, 13, 17, 42, 22, 22, 40, 22, 30, 72, 13, 22, 46, 21, 23, 71, 13, 27, 32, 25, 29, 31, 26, 21, 36, 25, 16, 36, 24, 30, 38, 24, 26, 85, 10, 24, 30, 27, 26, 29, 27, 30, 36, 25, 35, 35, 26, 27, 40, 25, 23, 24, 29, 35, 27, 29, 26, 26, 29, 31, 43, 24, 28, 68, 17, 22, 45, 24, 24, 33, 27, 36, 68, 17, 26, 23, 31, 27, 37, 27, 24, 22, 31, 32, 35, 27, 32, 40, 26, 28, 28, 30, 28, 32, 29, 28, 31, 29, 32, 30, 30, 24, 36, 28, 28, 33, 29, 28, 26, 32, 24, 27, 31, 33, 40, 27, 33, 29, 31, 28, 30, 30, 37, 97, 11, 19, 32, 30, 33, 87, 14, 21, 35, 30, 24, 36, 29, 34, 25, 33, 29, 24, 33, 34, 82, 16, 23, 77, 18, 22, 30, 32, 29, 34, 31, 30, 33, 31, 34, 22, 35, 30, 26, 34, 30, 82, 17, 31, 31, 33, 30, 30, 33, 35, 33, 33, 27, 99, 13, 27, 40, 31, 31, 96, 14, 32, 91, 17, 28, 45, 31, 33, 80, 21, 29, 34, 35, 33, 93, 19, 25, 122, 12, 38, 124, 13, 29, 109, 18, 32, 95, 22, 38, 87, 25,34, 38, 40, 37, 116, 16, 37, 117, 17, 30, 105, 23, 32, 99, 25, 34, 111, 21, 39, 105, 24, 37, 42, 44, 41, 45, 47, 45, 103, 30, 40, 141, 19, 39, 110, 29, 42, 131, 23, 39, 122, 25, 50, 124, 26, 47, 118, 29, 50, 132, 25, 47, 49, 51, 48, 157, 18, 42, 114, 33, 44, 128, 29, 40, 143, 24, 47, 121, 32, 47, 128, 30, 45, 52, 54, 51, 152, 26, 46, 160, 24, 50, 218, 6, 56, 55, 57, 54, 218, 8, 51, 132, 35, 53, 154, 29, 52, 57, 59, 57, 140, 34, 52, 210, 15, 47, 220, 12, 46, 209, 15, 52, 135,38, 55, 165, 29, 52, 220, 12, 52, 219, 12, 57, 158, 32, 45, 137, 39, 51, 152, 36, 53, 221, 15, 53, 62, 64, 61, 143, 40,50, 168, 33, 49, 211, 19, 59, 221, 16, 58, 167, 33, 59, 212, 21, 49, 212, 21, 54, 176, 32, 59, 211, 21, 64, 203, 25, 55, 148, 42, 57, 223, 19, 54, 214, 23, 44, 162, 38, 58, 205, 26, 45, 203, 26, 61, 223, 20, 59, 214, 24, 50, 205, 27, 51, 214, 24, 55, 196, 30, 53, 194, 30, 68, 171, 38, 64, 180, 36, 56, 196, 31, 58, 215, 25, 61, 163, 41, 65, 179, 36, 66, 188,34, 60, 187, 34, 65, 69, 71, 68, 206, 30, 58, 174, 40, 59, 205, 30, 68, 197, 33, 64, 160, 45, 59, 190, 36, 56, 182, 39,63, 168, 44, 62, 189, 37, 71, 207, 33, 64, 73, 75, 72, 192, 39, 63, 191, 39, 68, 169, 47, 58, 77, 79, 77, 213, 40, 63, 215, 41, 63, 81, 83, 81, 215, 43, 70, 86, 88, 85, 215, 53, 72, 90, 92, 89, 95, 97, 94, 216, 65, 81, 100, 103, 100, 104, 106, 103, 109, 111, 108, 114, 116, 113, 116, 119, 116, 120, 122, 120, 123, 126, 123, 130, 132, 129, 134, 136, 133, 137, 139, 136, 142, 144, 141, 222, 123, 130, 147, 149, 146, 222, 130, 134, 150, 152, 149, 156, 158, 155, 226, 141, 147, 162, 164, 161, 227, 148, 152, 166, 168, 165, 170, 173, 170, 229, 156, 157, 229, 158, 165, 175, 177, 174, 230, 165, 170, 179, 182, 179, 231, 173, 175, 185, 187, 184, 235, 177, 179, 188, 191, 187, 193, 195, 192, 198, 200, 197, 202, 204, 201, 206, 208, 205, 239, 202, 203, 210, 212, 209, 214, 216, 213, 242, 213, 212, 219, 221, 218, 244, 217, 221, 222, 224, 221, 225, 227, 224, 243, 223, 225, 230, 232, 229, 249, 229, 231, 246, 233, 233, 234, 237, 233, 238, 240, 237, 250, 237, 238, 247, 241, 240, 241, 244, 240, 246, 248, 245, 252, 247, 246, 249, 251, 248, 255, 251, 250, 251, 253, 250, 255, 253, 251, 253, 255, 252, 30, 30, 30, 33, 254, 17, 67, 114, 101, 97, 116, 101, 100, 32, 119, 105, 116, 104, 32, 71, 73, 77, 80, 0, 33, 249, 4, 1, 10, 0, 255, 0, 44, 0, 0, 0, 0, 100, 1, 200, 0, 0, 8, 254, 0, 127, 8, 28, 72, 176, 160, 193, 131, 8, 19, 42, 92, 200, 176, 161, 195, 135, 16, 17, 238, 216, 33, 208, 136, 192, 137, 20, 7, 98, 140, 200, 177, 163, 199, 143, 32, 67, 138, 28, 73, 178, 164, 201, 147, 40, 21, 78, 172, 120, 113, 165, 70, 151, 41, 99, 202, 156, 73, 179, 166, 205, 155, 56, 65, 194, 108, 89, 112, 99, 206, 159, 64, 131, 10, 29, 74, 212, 230, 206, 31, 71, 125, 22, 93, 202, 180, 169, 211, 167, 57,147, 102, 124, 9, 181, 170, 213, 171, 88, 179, 30, 148, 106, 112, 170, 214, 175, 96, 195, 138, 141, 121, 116, 36, 198, 179, 104, 207, 142, 93, 203, 182, 45, 81, 165, 36, 211, 202, 133, 235, 182, 174, 221, 187, 113, 213, 66, 212, 235, 17, 7, 14, 134, 126, 241, 10, 30, 44, 24, 109, 68, 190, 29, 3, 47, 84, 76, 184, 177, 99, 177, 103, 149, 8, 84, 193, 83, 34, 221, 131, 74, 36, 31, 100, 60, 80, 133, 231, 129, 66, 132, 60, 30, 77, 26, 43, 70, 205, 159, 47, 183, 44, 251, 121, 96, 102, 132, 156, 39, 183, 86, 18, 186, 180, 237, 219, 75, 79, 203, 70, 76, 144, 247, 143, 214, 174, 97, 255, 45, 232, 153, 242, 15, 218, 162, 113, 43, 95, 206, 188, 185, 243, 231, 208, 163, 75, 159, 78, 189, 186, 245, 235, 216, 179, 107, 223, 206, 189, 187, 247, 239, 224, 195, 254, 139, 31, 79, 190, 188, 249, 243, 232, 211, 171, 95, 207, 190, 189, 251, 247, 240, 227, 203, 159, 79, 191, 190, 253, 251, 248, 243, 235, 223, 207, 191, 191, 255, 255, 0, 6, 40, 224, 128, 51, 41, 229, 153, 111, 171, 121, 197, 81, 108, 155, 13, 71, 224, 131, 157, 169, 128, 145, 103, 49, 80, 54, 145, 14, 20, 25, 215, 155, 106, 15, 49, 248, 218, 64, 12, 66, 40, 224, 129, 59, 20, 151, 218, 132, 42, 56, 152, 22, 67, 192, 21, 180, 130, 131, 26,209, 246, 87, 113, 34, 138, 136, 3, 13, 129, 89, 116, 28, 106, 47, 250, 85, 66, 9, 76, 76, 164, 2, 20, 178, 249, 133, 195, 10, 72, 70, 17, 197, 111, 2, 41, 49, 209, 107, 158, 173, 16, 5, 20, 74, 84, 136, 20, 142, 70, 178, 84, 35, 129, 59, 208, 128, 227, 10, 71, 232, 248, 219, 144, 80, 172, 80, 130, 16, 76, 48, 145, 156, 100, 36, 200, 80, 131, 8, 25, 100, 192, 193, 5, 23, 112, 96, 103, 6, 46, 176, 128, 66, 13, 58, 16, 81, 162, 103, 74, 100, 193, 196, 145, 42, 56, 65, 229, 14,70, 102, 185, 37, 132, 43, 33, 249, 226, 14, 58, 80, 241, 155, 18, 76, 20, 225, 65, 137, 49, 100, 234, 132, 10, 15, 44,32, 0, 2, 24, 140, 48, 68, 16, 65, 76, 49, 133, 4, 67, 140, 128, 129, 5, 13, 100, 240, 65, 14, 254, 60, 40, 33, 225, 14, 63, 70, 145, 25, 141, 21, 33, 233, 165, 130, 139, 10, 136, 164, 95, 33, 156, 144, 33, 9, 39, 80, 177, 3, 17, 84, 160, 224, 105, 11, 95, 144, 97, 135, 34, 152, 196, 162, 139, 43, 212, 82, 75, 11, 45, 152, 220, 49, 135, 23, 88, 56, 32, 192,2, 120, 242, 137, 168, 10, 37, 76, 150, 3, 172, 49, 24, 177, 130, 151, 48, 246, 58, 96, 143, 95, 90, 184, 195, 7, 50, 44, 224, 192, 8, 97, 252, 81, 9, 44, 176, 152, 98, 138, 40, 0, 95, 114, 73, 43, 160, 8, 44, 138, 191, 176, 140, 178, 138,36, 117, 148, 49, 66, 11, 2, 160, 240, 193, 68, 66, 32, 41, 217, 185, 57, 252, 176, 46, 142, 238, 214, 184, 130, 154, 43, 168, 144, 131, 12, 10, 80, 176, 1, 25, 133, 160, 178, 74, 39, 167, 32, 194, 200, 203, 140, 132, 18, 10, 37, 147, 12, 210, 71, 31, 159, 32, 162, 51, 34, 145, 156, 98, 9, 44, 181, 160, 18, 136, 25, 88, 80, 16, 0, 11, 59, 36, 73, 209, 185, 2, 41, 218, 177, 127, 126, 81, 228, 146, 153, 43, 100, 65, 132, 2, 67, 176, 241, 136, 42, 253, 94, 2, 73, 40, 58, 223, 252, 201, 36, 100, 127, 146, 9, 35, 56, 147, 61, 201, 216, 136, 132, 66, 136, 192, 166, 224, 98, 8, 27, 67, 56, 112, 130,18, 47, 238, 250, 244, 254, 131, 81, 35, 69, 145, 17, 42, 80, 81, 67, 0, 22, 164, 17, 139, 42, 160, 124, 66, 137, 204, 148, 52, 174, 243, 39, 144, 43, 254, 137, 216, 145, 87, 14, 121, 31, 103, 83, 2, 9, 44, 155, 148, 209, 66, 0, 34, 176, 219, 247, 222, 1, 150, 128, 131, 16, 43, 73, 70, 196, 2, 27, 148, 241, 199, 44, 166, 92, 82, 182, 229, 59, 135, 173, 115,227, 184, 83, 2, 121, 217, 55, 247, 30, 10, 40, 157, 44, 28, 70, 7, 28, 224, 93, 130, 151, 36, 236, 160, 25, 233, 252, 69, 97, 102, 197, 74, 60, 144, 129, 3, 72, 208, 225, 202, 43, 132, 16, 18, 74, 229, 189, 83, 94, 59, 34, 185, 79, 142, 179, 229, 189, 79, 162, 51, 33, 157, 204, 18, 200, 19, 160, 123, 233, 193, 18, 37, 50, 223, 95, 148, 96, 170, 112, 5, 2, 98, 60, 34, 203, 37, 130, 32, 226, 73, 31, 59, 139, 220, 205, 6, 97, 51, 0, 130, 175, 113, 226, 235, 158, 226, 114, 87, 187, 198, 189, 205, 20, 164, 112, 3, 0, 92, 160, 132, 35, 65, 65, 67, 242, 203, 143, 113, 178, 176, 3, 22, 0, 224, 14, 170, 184, 4, 33, 62, 129, 54, 3, 6, 240, 114, 4, 236, 221, 1, 19, 216, 61, 156, 229, 206, 113, 50, 27, 219, 36, 40, 209, 138, 74, 4, 2, 1, 25, 40, 145, 148, 50, 168, 159, 211, 124, 32, 3, 254, 27, 248, 3, 44, 46, 161, 59, 77, 12, 34, 19, 110, 67, 4, 0, 95, 136, 136, 203, 81, 174, 133, 80, 188, 29, 36, 32, 65, 137, 176, 165, 141, 19, 173, 80, 69, 32, 8, 224, 130, 38, 241, 48, 63, 19, 57, 193, 224, 48, 128, 9, 88, 52, 110, 109, 189, 91, 156, 238, 20, 119, 192, 23, 58, 145, 114, 144, 211, 93, 247, 218, 56, 51, 204, 17, 112, 109, 161, 184, 4, 46, 22, 145, 4, 14, 124, 128, 72, 95, 196, 79, 9, 124, 16, 0, 36, 108, 66, 22, 137, 27, 219, 228, 148, 72, 54, 4, 182, 112, 108, 12, 84, 162, 11, 207, 136, 70, 202, 53, 78, 16,147, 24, 224, 217, 62, 33, 8, 183, 193, 2, 21, 18, 184, 0, 175, 2, 105, 30, 223, 172, 224, 7, 84, 8, 192, 8, 22, 97, 10, 66, 240, 110, 103, 105, 67, 160, 248, 108, 6, 73, 220, 217, 110, 129, 106, 123, 35, 46, 89, 216, 187, 201, 109, 238, 15, 35, 104, 64, 13, 182, 50, 74, 82, 102, 231, 70, 187, 34, 65, 22, 126, 131, 168, 40, 236, 0, 5, 24, 216, 196, 16, 221,70, 136, 155, 201, 50, 124, 185, 124, 161, 54, 113, 87, 182, 74, 46, 145, 18, 105, 116, 100, 31, 94, 150, 71, 89, 36, 34, 8, 1, 248, 211, 5, 37, 36, 58, 99, 114, 39, 111, 187, 146, 85, 12, 126, 176, 4, 28, 148, 0, 5, 16, 254, 112, 132, 25,41, 145, 189, 80, 88, 147, 137, 77, 204, 101, 27, 183, 233, 70, 1, 254, 83, 108, 252, 36, 4, 56, 25, 113, 182, 62, 188,77, 20, 121, 192, 0, 11, 148, 105, 28, 118, 30, 233, 148, 76, 115, 167, 117, 18, 245, 23, 40, 104, 138, 88, 84, 112, 0,27, 112, 1, 137, 182, 105, 79, 124, 146, 203, 25, 248, 148, 88, 64, 130, 186, 212, 165, 113, 228, 167, 35, 75, 56, 9, 80, 100, 241, 14, 5, 168, 1, 185, 68, 227, 4, 164, 248, 5, 163, 25, 211, 40, 117, 16, 245, 83, 129, 196, 192, 9, 71, 56, 130, 10, 106, 112, 129, 42, 172, 2, 18, 132, 56, 160, 36, 225, 120, 59, 37, 50, 226, 165, 88, 205, 170, 56, 203, 55, 9, 81, 144, 162, 12, 23, 32, 1, 199, 122, 250, 3, 35, 173, 32, 163, 66, 149, 14, 81, 145, 100, 212, 24, 28, 97, 6, 78, 112,1, 1, 54, 209, 137, 243, 89, 81, 129, 139, 212, 170, 94, 181, 218, 203, 151, 245, 129, 18, 157, 160, 197, 6, 88, 80, 132, 18, 40, 1, 93, 47, 122, 1, 13, 96, 149, 86, 234, 20, 149, 34, 74, 152, 65, 20, 12, 91, 1, 54, 192, 162, 164, 73, 132,227, 19, 255, 186, 215, 206, 18, 116, 134, 161, 200, 100, 38, 206, 22, 10, 88, 184, 161, 0, 33, 144, 16, 172, 120, 96, 4, 100, 254, 128, 7, 141, 141, 254, 142, 69, 30, 75, 145, 40, 220, 104, 1, 86, 200, 5, 33, 160, 170, 189, 76, 220, 76, 109, 255, 92, 160, 103, 135, 155, 187, 126, 46, 20, 102, 151, 72, 69, 21, 50, 80, 33, 41, 240, 0, 182, 61, 138, 173, 116,102, 123, 36, 191, 17, 149, 5, 27, 8, 196, 37, 24, 145, 61, 237, 97, 78, 109, 153, 228, 44, 113, 199, 251, 194, 208, 134, 183, 15, 131, 8, 69, 39, 254, 224, 128, 137, 97, 80, 186, 213, 113, 212, 106, 104, 112, 128, 45, 228, 2, 20, 227, 235, 94, 46, 255, 73, 222, 254, 106, 147, 132, 14, 93, 69, 26, 22, 144, 17, 175, 176, 21, 190, 67, 133, 84, 13, 58, 32, 137, 78, 108, 239, 145, 179, 19, 175, 127, 39, 140, 187, 62, 152, 207, 20, 129, 216, 128, 8, 242, 246, 3, 166, 201, 23, 193, 203, 105, 215, 100, 116, 176, 0, 50, 232, 54, 180, 10, 196, 29, 228, 226, 225, 143, 22, 187, 248, 197, 48, 142, 177, 140, 103, 44, 99, 121, 192, 244, 19, 121, 84, 133, 24, 2, 80, 65, 26, 116, 152, 8, 26, 59, 48, 136, 113, 195, 153, 192, 212, 0, 1, 138, 48, 227, 218, 80, 26, 211, 198, 177, 152, 198, 80, 142, 178, 148, 109, 236, 210, 80, 8, 194, 166, 122, 40, 64, 151, 104, 176, 131, 28, 80, 228, 195, 67, 190, 77, 96, 152, 134, 35, 37, 100, 64, 11, 180, 48, 5, 254, 138, 101, 10, 206, 73, 82, 226, 201, 82, 142, 179, 156, 91, 76, 101, 130, 90, 217, 124, 170, 120, 2, 10, 216, 53, 21, 17, 135, 121,52, 99, 134, 173, 151, 126, 16, 128, 145, 38, 18, 124, 10, 109, 179, 112, 225, 60, 231, 70, 211, 184, 206, 219, 28, 161, 217, 76, 49, 7, 97, 58, 173, 44, 127, 118, 140, 95, 86, 27, 3, 191, 168, 192, 1, 134, 128, 68, 94, 109, 201, 223, 55, 183, 184, 30, 20, 206, 170, 60, 232, 140, 85, 37, 102, 226, 18, 152, 104, 65, 13, 86, 0, 4, 32, 224, 128, 67, 153, 38, 204, 173, 207, 101, 17, 32, 208, 64, 6, 88, 80, 5, 34, 6, 193, 136, 182, 57, 46, 156, 78, 62, 117, 170, 177, 186, 106, 127, 64, 186, 188, 146, 100, 68, 43, 72, 161, 5, 23, 28, 161, 71, 184, 206, 181, 99, 66, 3, 132, 19, 52, 96, 12, 176, 144,36, 34, 186, 219, 230, 23, 62, 25, 213, 4, 253, 133, 103, 213, 77, 208, 102, 63, 251, 133, 56, 3, 32, 33, 76, 193, 133,11, 168, 235, 148, 59, 32, 129, 182, 113, 163, 43, 26, 0, 65, 4, 22, 160, 131, 41, 2, 56, 137, 236, 149, 59, 119, 231, 38, 40, 52, 236, 81, 141, 189, 86, 195, 30, 208, 104, 55, 171, 93, 138, 179, 153, 133, 162, 21, 122, 112, 128, 134, 74, 180, 188, 125, 143, 166, 223, 56, 16, 1, 6, 254, 28, 49, 240, 199, 85, 113, 103, 218, 76, 184, 54, 161, 145, 15, 127, 236, 163, 225, 89, 189, 198, 62, 252, 145, 143, 136, 107, 211, 221, 90, 149, 25, 36, 92, 209, 2, 125, 95, 228, 56, 30, 47,205, 175, 252, 146, 129, 33, 232, 194, 193, 222, 51, 96, 202, 149, 173, 77, 118, 184, 120, 31, 215, 192, 170, 204, 93, 252, 142, 109, 226, 252, 165, 51, 59, 224, 44, 176, 112, 183, 206, 4, 93, 57, 56, 184, 64, 16, 92, 113, 9, 127, 90, 56, 129, 3, 77, 182, 63, 208, 253, 66, 98, 188, 227, 233, 218, 112, 233, 54, 102, 222, 226, 120, 16, 195, 234, 19, 119, 233,236, 38, 161, 138, 47, 136, 192, 43, 239, 253, 250, 99, 194, 46, 134, 16, 154, 125, 201, 55, 75, 187, 169, 215, 78, 208, 96, 188, 189, 197, 251, 216, 198, 54, 231, 78, 245, 187, 227, 221, 217, 88, 229, 93, 31, 96, 145, 134, 8, 76, 165, 227, 130, 31, 141, 10, 42, 160, 134, 216, 73, 50, 166, 183, 51, 55, 211, 183, 25, 12, 167, 67, 190, 27, 47, 236, 6, 221, 253, 241, 142, 96, 184, 244, 234, 48, 93, 219, 203, 96, 241, 134, 1, 232, 32, 168, 160, 15, 125, 97, 58, 227, 128, 60, 136, 240, 244, 11, 84, 252, 226, 217, 190, 205, 95, 168, 227, 197, 223, 192, 221, 55, 94, 172, 14, 219, 223, 62, 239, 4, 149, 33, 67, 59, 254, 97, 135, 3, 212, 32, 99, 42, 144, 149, 240, 27, 67, 145, 163, 254, 192, 1, 122, 104, 69, 21, 17, 122, 77, 213, 51, 254, 165, 188, 120, 190, 139, 195, 65, 137, 112, 80, 159, 23, 204, 198, 254, 54, 27, 137, 222, 78, 20, 194, 251, 57, 64, 36, 129, 55, 126, 110, 177, 17, 230, 7, 106, 167, 208, 56, 222, 211, 68, 194, 133, 59, 42, 247, 82, 167,112, 14, 47, 246, 120, 45, 166, 14, 248, 151, 127, 152, 247, 82, 144, 212, 127, 133, 80, 0, 40, 144, 3, 146, 49, 128, 4, 200, 22, 27, 97, 4, 61, 133, 128, 139, 83, 57, 86, 180, 116, 239, 135, 85, 161, 32, 129, 49, 118, 14, 9, 168, 106, 250, 247, 95, 138, 51, 78, 254, 231, 129, 32, 200, 36, 35, 120, 23, 83, 97, 4, 22, 1, 106, 80, 21, 67, 42, 37, 73, 44, 200,124, 88, 5, 131, 46, 118, 14, 51, 163, 85, 184, 151, 125, 146, 195, 8, 166, 208, 129, 31, 40, 36, 61, 232, 131, 25, 1, 132, 159, 150, 126, 218, 51, 51, 57, 227, 68, 71, 184, 87, 74, 216, 98, 76, 168, 87, 79, 184, 77, 147, 244, 9, 83, 168, 131, 43, 33, 130, 87, 8, 22, 46, 161, 133, 21, 144, 7, 173, 144, 104, 107, 36, 71, 18, 166, 118, 72, 104, 103, 99, 184, 132, 77, 136, 129, 239, 6, 111, 11, 164, 134, 126, 192, 0, 223, 135, 105, 254, 111, 8, 25, 128, 55, 135, 34, 36, 83, 187, 19, 94, 97, 136, 85, 17, 56, 129, 247, 71, 131, 25, 72, 113, 156, 245, 9, 184, 224, 6, 134, 232, 101, 136, 114, 74, 137, 104, 23, 72, 50, 122, 165, 167, 126, 222, 37, 67, 223, 132, 112, 171, 71, 80, 241, 247, 98, 244, 103, 127, 46, 102, 129, 128, 216, 106, 153, 136, 11, 189, 167, 3, 126, 19, 138, 110, 129, 111, 68, 21, 118, 65, 80, 10, 173, 208, 73, 186, 83, 97, 169, 168, 135, 47, 229, 124, 208, 39, 125, 212, 103, 125, 18, 119, 137, 4, 165, 51, 86, 198, 8, 170, 64, 6, 17, 96, 2, 64, 80, 2, 59, 224, 81, 186, 184, 22, 71, 112, 17, 70, 114, 1, 90, 160, 11, 151, 128, 99, 240, 86, 106, 203, 231, 82, 173, 247, 116, 176, 151, 59, 178, 71, 117, 204, 120, 115, 53, 200, 68, 218, 179, 54, 170, 128, 5, 34, 240, 2, 138, 181, 3, 78, 48, 79, 219, 72, 130, 61, 194, 1, 72, 16, 11, 162, 160, 68, 77, 120, 87, 238, 183, 135, 141, 227, 120, 79, 39, 121, 218, 212, 142, 45, 246, 14, 150, 7, 143, 206, 184, 77, 110, 227, 79, 130, 80, 10, 45, 176, 3, 66, 224, 107, 37, 34, 38, 253, 56, 22, 191, 194, 2, 72, 102, 10, 236, 247, 56, 200, 118, 142, 218, 228, 118, 112, 39, 119, 179, 103, 119, 151, 23, 136, 185, 227, 254, 54, 139, 3, 10, 134, 224, 0, 63, 32, 4, 183, 22, 63, 31, 57, 22, 25, 241, 34, 131, 51, 7, 176, 208, 7, 154, 48, 54, 219, 51, 136, 18, 246, 128, 185, 227, 122, 46, 23, 117, 47, 53, 117, 15, 249, 146, 26, 56, 57, 5, 215, 9, 117, 32, 0, 78, 240, 40, 197, 180, 147, 166, 1, 34, 58, 32, 2, 95, 144, 11, 136, 48, 148, 230, 211, 128, 147, 227, 128, 171, 136, 59, 44, 231, 114, 48, 39, 117, 51, 151, 15, 210, 0, 149, 48, 53, 78, 147, 112, 9, 171, 16, 6, 11, 176, 41, 198, 129, 147, 90, 25, 22, 83, 241, 40, 48, 80, 9, 161, 165, 9, 189, 20, 62, 102, 217, 130, 47, 180, 112, 107, 153, 85, 15, 103, 115, 18, 9, 147, 107, 52, 78, 125, 208, 9, 155, 48, 2, 25, 32, 43, 183, 194, 4, 229, 178, 151, 95, 145, 133, 65, 54, 0, 127, 208, 9, 130, 32, 152, 150, 68, 73, 198, 152, 110, 235, 118, 125, 19, 153, 59, 55, 83, 66, 166, 224,7, 5, 32, 2, 146, 1, 5, 60, 160, 2, 152, 233, 103, 154, 137, 21, 82, 50, 1, 97, 112, 95, 171, 233, 68, 138, 163, 54, 40, 185, 108, 205, 8, 147, 171, 57, 9, 96, 51, 10, 94, 176, 0, 184, 216, 97, 77, 19, 34, 183, 249, 20, 160, 40, 16, 43, 16, 1, 35, 240, 7, 151, 112, 118, 120, 152, 54, 101, 254, 131, 148, 194, 249, 66, 103, 40, 75, 214, 68, 8, 150, 32, 9, 45,32, 3, 10, 34, 100, 207, 121, 21, 221, 56, 16, 52, 160, 1, 7, 80, 6, 185, 192, 79, 51, 212, 102, 110, 182, 120, 142, 118, 159, 49, 22, 136, 141, 4, 57, 144, 144, 11, 112, 48, 0, 78, 226, 34, 233, 153, 21, 96, 66, 16, 58, 80, 3, 46, 176, 1,13, 6, 9, 51, 148, 64, 70, 201, 104, 248, 25, 161, 250, 105, 156, 161, 213, 9, 168, 48, 2, 44, 144, 139, 101, 101, 155,3, 218, 20, 31, 230, 101, 58, 160, 3, 3, 208, 6, 169, 32, 59, 9, 164, 154, 125, 0, 161, 17, 122, 159, 142, 89, 112, 132, 144, 11, 118, 48, 0, 62, 144, 147, 205, 217, 161, 88, 113, 36, 195, 145, 3, 126, 178, 2, 26, 240, 4, 152, 96, 10, 6, 133, 162, 42, 186, 162, 141, 86, 103, 49, 245, 155, 132, 48, 109, 27, 80, 3, 37, 224, 76, 25, 115, 4, 182, 198, 156, 54, 10, 21, 102, 213, 97, 231, 178, 2, 38, 48, 1, 107, 96, 10, 131, 64, 54, 131, 73, 159, 201, 71, 51, 230, 211, 157, 113, 105, 64, 189, 3, 10, 184, 192, 6, 14, 160, 3, 82, 194, 52, 80, 250, 23, 65, 53, 165, 78, 81, 165, 24, 115, 4, 56, 16, 2, 0, 32, 9, 34, 228, 77, 41, 213, 128, 98, 154, 122, 100, 202, 77, 147, 19, 71, 254, 74, 164, 51, 146, 105, 0, 28, 160, 2,206, 3, 34, 81, 26, 167, 114, 10, 21, 79, 18, 3, 77, 112, 4, 58, 144, 0, 85, 64, 10, 160, 48, 8, 108, 4, 64, 50, 20, 57, 75, 6, 57, 169, 199, 75, 126, 74, 92, 192, 117, 118, 217, 163, 51, 150, 80, 11, 86, 160, 0, 50, 112, 147, 96, 178, 46,51, 250, 168, 79, 193, 153, 144, 162, 3, 85, 210, 4, 77, 176, 3, 17, 192, 0, 109, 32, 11, 130, 160, 61, 97, 243, 136, 228, 83, 159, 162, 42, 75, 150, 115, 172, 145, 131, 114, 251, 53, 8, 136, 6, 78, 144, 48, 10, 112, 80, 1, 231, 50, 36, 43, 48, 3, 43, 224, 3, 33, 144, 149, 178, 250, 19, 74, 81, 171, 28, 39, 33, 33, 16, 1, 27, 144, 7, 166, 64, 9, 253, 99, 62, 7, 228, 165, 143, 20, 62, 235, 186, 70, 200, 250, 174, 74, 39, 71, 104, 131, 54, 97, 99, 11, 129, 208, 2, 32, 192, 3, 57, 16, 126, 63, 112, 109, 131, 230, 145, 219, 42, 20, 221, 234, 173, 37, 50, 17, 36, 16, 0, 67, 176, 9, 106, 102, 62, 218, 67, 69, 217, 153, 98, 42, 134, 87, 238, 250, 174, 150, 51, 148, 38, 100, 85, 190, 149, 9, 224, 211, 10, 143, 128, 5,25, 64, 4, 60, 32, 5, 178, 130, 84, 209, 21, 176, 76, 161, 23, 23, 114, 2, 24, 162, 60, 77, 240, 254, 3, 184, 149, 10, 173, 48, 78, 194, 101, 85, 102, 202, 126, 224, 9, 71, 20, 139, 172, 101, 243, 61, 171, 233, 80, 129, 165, 5, 10, 144, 3,82, 32, 180, 178, 2, 176, 63, 103, 178, 111, 1, 19, 23, 130, 33, 42, 128, 171, 42, 112, 1, 93, 80, 9, 173, 128, 8, 141,68, 159, 156, 5, 177, 143, 217, 75, 57, 187, 181, 0, 196, 169, 153, 132, 62, 174, 96, 6, 2, 32, 3, 78, 146, 33, 226, 87, 16, 206, 137, 180, 55, 225, 19, 58, 2, 41, 152, 98, 4, 131, 116, 0, 102, 80, 9, 160, 224, 74, 149, 212, 70, 18, 171, 98, 44, 180, 181, 180, 99, 80, 98, 179, 54, 162, 176, 9, 107, 48, 0, 53, 64, 5, 58, 160, 178, 250, 6, 122, 55, 146, 182, 106, 91, 19, 37, 8, 132, 74, 144, 60, 24, 130, 55, 55, 162, 3, 7, 16, 6, 169, 32, 10, 156, 160, 9, 162, 217, 172, 14, 74, 150, 123, 203, 183, 201, 202, 128, 232, 69, 75, 96, 43, 182, 51, 234, 37, 92, 166, 2, 89, 144, 60, 4, 177, 184, 28, 218, 184, 142, 155, 133, 64, 232, 55, 43, 107, 41, 76, 32, 2, 3, 96, 6, 179, 32, 59, 252, 183, 75, 131, 122, 57, 55, 139, 179, 199, 10, 71, 142, 184, 59, 138, 100, 11, 146, 80, 6, 7, 32, 2, 69, 240, 83, 108, 229, 182, 63, 0, 132, 234, 226, 52, 178, 254, 27, 21, 48, 81, 187, 182, 171, 3, 15, 144, 52, 80, 176, 4, 2, 48, 5, 146, 176, 63, 40, 150, 9, 147, 208, 73,161, 117, 172, 89, 75, 188, 6, 101, 57, 186, 179, 54, 136, 240, 171, 121, 4, 11, 122, 96, 6, 12, 32, 2, 102, 53, 3, 73,229, 173, 211, 11, 132, 67, 167, 173, 215, 123, 18, 43, 146, 16, 42, 32, 5, 153, 178, 3, 34, 144, 0, 79, 0, 7, 149, 0, 9, 153, 64, 64, 156, 132, 73, 10, 165, 181, 131, 200, 100, 197, 203, 61, 84, 5, 62, 233, 227, 7, 88, 16, 0, 33, 64, 3, 37, 64, 2, 74, 144, 84, 251, 27, 162, 94, 97, 17, 217, 22, 192, 38, 49, 23, 7, 97, 4, 207, 197, 3, 78, 64, 2, 56, 169, 1,29, 16, 6, 179, 160, 126, 125, 32, 140, 140, 195, 167, 41, 197, 190, 195, 58, 62, 77, 4, 62, 155, 147, 10, 110, 0, 3, 25, 80, 40, 101, 75, 17, 73, 181, 2, 210, 187, 21, 42, 140, 19, 115, 145, 189, 46, 172, 175, 153, 177, 2, 41, 144, 187, 3, 128, 4, 129, 176, 10, 94, 147, 80, 137, 134, 87, 162, 251, 174, 96, 163, 94, 169, 16, 8, 94, 112, 0, 17, 64, 3, 74, 224, 4, 158, 40, 23, 23, 197, 196, 79, 60, 20, 124, 241, 131, 70, 96, 126, 148, 113, 4, 206, 19, 5, 36, 144, 1, 8, 208, 5,155, 176, 10, 254, 177, 83, 183, 192, 90, 66, 227, 19, 198, 220, 115, 113, 166, 144, 11, 203, 91, 0, 105, 76, 3, 162, 161, 175, 158, 104, 194, 43, 241, 198, 136, 24, 199, 150, 41, 25, 31, 18, 18, 181, 123, 25, 46, 33, 43, 59, 176, 4, 42, 160, 41, 80, 176, 3, 33, 192, 2, 23, 128, 0, 102, 176, 8, 136, 148, 61, 186, 87, 66, 71, 74, 177, 249, 21, 54, 151, 160, 10, 139, 48, 6, 8, 176, 0, 87, 64, 5, 194, 34, 16, 60, 144, 41, 72, 225, 34, 85, 202, 34, 215, 203, 175, 76, 66, 204, 32, 161, 189, 101, 225, 18, 126, 193, 101, 202, 243, 92, 18, 130, 147, 42, 112, 2, 23, 64, 0, 92, 32, 7, 165, 128, 11, 255, 210, 197, 19, 251, 195, 138, 227, 54, 112, 163, 10, 178, 240, 8, 98, 128, 4, 13, 208, 170, 51, 48, 43, 224, 103, 130, 1, 58, 189, 210, 25, 204, 11, 17, 124, 1, 187, 60, 240, 188, 182, 89, 9, 41, 46, 240, 41, 73, 96, 6, 129, 128, 10, 179, 0, 11, 157, 240, 53, 143, 52, 57, 48, 35, 196, 176, 48, 11, 155, 160, 8, 107, 144, 4, 22, 80, 1, 25, 176, 156, 26, 129, 18, 110, 24, 199, 78, 33, 33, 76, 85, 0, 35, 208, 5, 112, 176, 9, 149, 176, 10, 170, 224, 47, 30, 237, 209, 178, 160, 10, 170, 80, 9, 122, 80, 7, 93, 48, 2, 8, 16, 254, 0, 18, 211, 34, 18, 29, 29, 62, 226, 37, 53, 144, 1, 1, 32, 0, 14, 208,2, 88, 96, 5, 100, 176, 6, 115, 96, 7, 60, 61, 7, 107, 224, 5, 95, 128, 5, 45, 224, 0, 21, 80, 39, 124, 146, 38, 17, 221, 210, 33, 6, 4, 41, 144, 2, 73, 146, 25, 59, 32, 3, 40, 144, 1, 11, 64, 39, 7, 80, 0, 7, 48, 0, 224, 34, 3, 175, 34, 178, 205, 105, 189, 74, 13, 29, 142, 162, 36, 216, 38, 185, 33, 26, 162, 33, 160, 1, 26, 80, 3, 25, 146, 41, 36, 18, 26, 140, 27, 214, 203, 161, 36, 197, 113, 43, 77, 2, 5, 206, 3, 114, 21, 225, 4, 134, 34, 43, 36, 144, 60, 149, 44, 215, 202, 145, 111, 93, 182, 175, 148, 177, 198, 110, 93, 28, 181, 202, 180, 161, 188, 175, 24, 35, 216, 215, 65, 4, 126, 162, 60, 183, 82, 187, 175, 49, 192, 4, 145, 81, 44, 13, 217, 204, 17, 197, 202, 108, 86, 142, 242, 23, 75, 187, 18, 212, 203,217, 209, 113, 22, 28, 149, 218, 71, 114, 109, 67, 167, 186, 95, 66, 194, 166, 45, 214, 161, 125, 81, 137, 194, 191, 3,49, 116, 170, 29, 215, 177, 189, 219, 188, 221, 219, 190, 253, 219, 192, 29, 220, 194, 61, 220, 196, 93, 220, 198, 13, 22, 216, 208, 98, 237, 16, 219, 206, 48, 14, 238, 112, 15, 250, 160, 15, 247, 254, 224, 14, 228, 240, 12, 104, 64, 29, 214, 208, 98, 217, 128, 16, 229, 208, 98, 226, 240, 20, 183, 32, 103, 212, 224, 78, 207, 48, 15, 80, 118, 15, 222, 128, 7, 210, 65, 14, 45, 166, 12, 8, 1, 15, 45, 22, 13, 79, 17, 13, 114, 118, 12, 164, 196, 10, 233, 16, 103, 250, 160, 222, 209, 1, 223, 250, 0, 6, 99, 33, 14, 250, 189, 76, 95, 36, 12, 240, 221, 98, 244, 32, 14, 204, 32, 12, 120, 32, 12, 202, 64, 13, 229, 128, 15, 254, 0, 15, 210, 209, 8, 252, 224, 15, 203, 61, 22, 237, 208, 98, 207, 128, 96, 128, 96, 222, 254, 160, 15, 222, 16, 7, 8, 209, 8, 226, 64, 14, 210, 225, 12, 222, 61, 22, 103, 160, 15, 45, 198, 10, 8, 198, 222, 254, 128, 15, 205, 192, 17, 120, 64, 13, 233, 64, 15, 250, 128, 15, 240, 0, 14, 187, 112, 16, 2, 238, 15, 206, 80, 12, 224, 224,14, 248, 192, 15, 248, 208, 14, 29, 110, 16, 65, 62, 228, 69, 126, 228, 73, 190, 228, 8, 225, 12, 228, 48, 15, 248, 32,221, 232, 224, 12, 10, 65, 229, 86, 46, 221, 235, 192, 13, 192, 32, 16, 244, 61, 99, 252, 192, 223, 224, 192, 225, 6, 113, 227, 57, 190, 227, 61, 254, 227, 76, 222, 98, 78, 110, 228, 72, 174, 228, 28, 177, 12, 45, 70, 225, 14, 49, 14, 45, 86, 227, 254, 202, 80, 14, 58, 174, 15, 224, 32, 16, 122, 238, 15, 124, 238, 231, 209, 29, 232, 3, 161, 230, 58, 206, 227, 62, 126, 16, 131, 94, 232, 127, 142, 232, 217, 193, 12, 46, 38, 229, 15, 225, 12, 32, 14, 99, 247, 224, 222, 5, 177, 225, 254, 64, 14, 23, 30, 99, 214, 96, 16, 158, 14, 234, 50, 54, 234, 6, 97, 12, 235, 48, 99, 222, 112, 16, 202, 224, 233, 49, 166, 15, 183, 240, 3, 222, 64, 99, 243, 48, 16, 171, 238, 15, 110, 62, 16, 152, 46, 99, 155, 78, 234, 45, 102, 234, 162, 30, 17, 220, 16, 236, 15, 225, 14, 33, 110, 12, 249, 253, 98, 168, 142, 236, 250, 160, 236, 48, 134, 234, 63, 208, 235, 49, 246, 235, 5, 225, 236, 208, 206, 236, 219, 177, 236, 40, 30, 17, 217, 77, 99, 247, 0, 227, 3, 209, 226, 81, 118, 15, 0, 62, 238, 46, 126, 222, 231, 62, 16, 203, 32, 225, 52, 86, 227, 4, 17, 13, 233, 238, 235, 2, 97, 14, 52, 150,14, 2, 145, 5, 18, 126, 235, 4, 241, 237, 51, 22, 238, 4, 65, 238, 234, 14, 17, 232, 208, 98, 227, 221, 16, 113, 224, 226, 209, 29, 99, 246, 157, 240, 33, 62, 239, 46, 102, 223, 63, 224, 239, 190, 46, 238, 2, 225, 240, 11, 15, 99, 18, 143,29, 197, 208, 98, 250, 32, 12, 17, 49, 230, 254, 224, 14, 212, 32, 254, 12, 141, 208, 231, 46, 214, 234, 3, 161, 12, 47, 70, 15, 220, 96, 12, 128, 80, 12, 50, 238, 15, 27, 255, 3, 44, 239, 98, 46, 15, 243, 50, 31, 241, 4, 113, 12, 10, 111,14, 207, 80, 12, 120, 192, 10, 205, 224, 233, 232, 64, 16, 205, 16, 234, 243, 128, 13, 66, 127, 11, 200, 96, 13, 232, 112, 244, 2, 65, 238, 120, 110, 16, 199, 208, 98, 230, 16, 239, 46, 70, 242, 38, 143, 242, 45, 166, 242, 2, 113, 243, 8, 254, 242, 49, 63, 243, 53, 207, 16, 247, 208, 98, 195, 224, 16, 148, 238, 98, 240, 144, 13, 198, 112, 221, 3, 209, 246, 119, 14, 247, 114, 47, 230, 91, 95, 242, 39, 223, 221, 95, 79, 16, 116, 63, 225, 118, 223, 29, 201, 237, 15, 82, 255, 16, 187, 144, 246, 254, 32, 14, 4, 62, 16, 50, 158, 225, 2, 145, 13, 30, 159, 13, 119, 255, 3, 96, 128, 248, 203, 64, 16, 144, 31, 226, 146, 79, 16, 149, 223, 98, 151, 47, 16, 124, 0, 223, 240, 80, 12, 6, 1, 8, 46, 206, 239, 63, 192, 10, 136,111, 14, 36, 174, 16, 109, 63, 14, 8, 49, 248, 216, 48, 16, 135, 239, 221, 139, 47, 16, 141, 143, 249, 145, 63, 249, 157, 239, 15, 159, 223, 16, 195, 32, 103, 210, 94, 236, 51, 110, 13, 183, 63, 16, 196, 143, 15, 198, 111, 16, 181, 159, 248, 199, 254, 159, 251, 200, 223, 98, 202, 127, 252, 219, 81, 240, 254, 48, 251, 16, 17, 228, 89, 159, 234, 8, 78, 16, 246, 238, 15, 7, 127, 237, 45, 6, 242, 3, 241, 253, 225, 79, 16, 200, 238, 15, 228, 255, 3, 197, 142, 15, 97, 126, 16, 244, 224, 15, 247, 48, 16, 103, 238, 15, 235, 64, 253, 6, 65, 252, 150, 78, 16, 124, 143, 12, 3, 161, 253, 0, 241, 67, 224,192, 31, 198, 252, 249, 163, 71, 208, 220, 65, 106, 4, 7, 186, 59, 40, 204, 225, 68, 130, 212, 14, 94, 196, 152, 17, 217, 64, 116, 7, 149, 81, 20, 216, 209, 223, 71, 138, 226, 14, 154, 163, 104, 16, 33, 65, 145, 36, 65, 190, 132, 25, 83, 230, 76, 154, 53, 107, 206, 59, 184, 204, 38, 158, 123, 254, 244, 237, 162, 8, 134, 159, 191, 123, 4, 233, 29, 4, 70, 17,103, 81, 163, 72, 149, 18, 29, 120, 166, 103, 70, 170, 254, 224, 9, 68, 211, 83, 223, 176, 153, 233, 124, 54, 2, 137, 19, 95, 22, 129, 60, 125, 2, 157, 40, 20, 234, 192, 163, 254, 146, 78, 92, 106, 147, 92, 85, 170, 250, 192, 176, 245, 55,246, 229, 81, 189, 19, 205, 254, 12, 58, 148, 169, 64, 190, 100, 109, 30, 70, 156, 88, 49, 98, 124, 7, 185, 214, 116, 118, 18, 100, 156, 131, 87, 5, 250, 58, 56, 143, 98, 163, 131, 233, 8, 98, 254, 246, 167, 121, 34, 103, 127, 158, 5, 50, 163, 75, 21, 157, 192, 102, 7, 87, 207, 108, 236, 14, 36, 171, 131, 235, 6, 70, 246, 135, 146, 34, 101, 171, 3, 65, 139,118, 72, 218, 52, 77, 120, 7, 163, 209, 4, 86, 251, 101, 114, 127, 182, 41, 226, 214, 61, 145, 183, 229, 31, 204, 157, 47, 198, 158, 93, 251, 225, 51, 23, 209, 210, 4, 119, 208, 26, 72, 100, 157, 7, 70, 59, 88, 238, 249, 65, 111, 4, 209, 251, 83, 63, 17, 119, 123, 129, 225, 83, 99, 4, 87, 255, 32, 182, 153, 229, 253, 229, 167, 232, 153, 131, 0, 252, 193, 190, 241, 40, 242, 111, 184, 247, 226, 115, 104, 190, 154, 26, 25, 74, 31, 176, 102, 154, 102, 192, 151, 42, 252, 15, 36, 3, 201, 51, 79, 32, 12, 9, 220, 46, 68, 17, 71, 236, 238, 160, 141, 106, 42, 231, 32, 102, 64, 226, 230, 32, 110, 6, 50,201, 159, 3, 29, 178, 111, 69, 24, 197, 163, 168, 198, 129, 82, 244, 199, 25, 154, 120, 244, 81, 38, 108, 14, 10, 114, 34, 251, 158, 217, 81, 69, 22, 93, 188, 81, 198, 28, 149, 164, 9, 183, 118, 106, 26, 231, 32, 36, 65, 170, 210, 159, 43,39, 226, 209, 198, 137, 90, 244, 231, 69, 129, 178, 220, 114, 68, 51, 207, 84, 172, 49, 127, 248, 171, 201, 43, 127, 116, 154, 40, 139, 226, 252, 57, 254, 102, 160, 118, 14, 42, 134, 162, 117, 124, 194, 131, 160, 59, 253, 201, 115, 162, 61, 245, 233, 83, 32, 55, 93, 138, 201, 77, 47, 97, 90, 136, 31, 64, 64, 218, 211, 159, 91, 6, 114, 19, 78, 135, 228, 60, 168, 78, 129, 254, 12, 212, 161, 65, 11, 157, 201, 62, 16, 99, 250, 115, 82, 144, 74, 5, 169, 82, 138, 48, 165, 211, 206, 131, 76, 69, 51, 86, 89, 101, 138, 116, 158, 56, 106, 18, 169, 161, 137, 178, 81, 78, 32, 48, 244, 89, 203, 161, 95, 253, 145, 109, 160, 97, 7, 35, 104, 216, 98, 67, 194, 177, 171, 102, 99, 58, 10, 184, 75, 27, 147, 54, 87, 138, 120, 109,206, 88, 96, 145, 213, 150, 88, 155, 34, 181, 52, 166, 51, 128, 149, 214, 161, 113, 67, 123, 201, 218, 93, 123, 253, 225, 220, 114, 103, 133, 55, 222, 31, 134, 116, 141, 15, 144, 192, 120, 102, 29, 146, 178, 116, 199, 176, 129, 166, 1, 150, 31, 75, 149, 113, 141, 34, 130, 253, 25, 135, 160, 131, 95, 115, 232, 224, 132, 7, 178, 111, 158, 239, 96, 202, 18, 30, 123, 97, 162, 13, 93, 4, 211, 35, 136, 95, 127, 61, 12, 120, 224, 130, 39, 114, 184, 166, 44, 26, 235, 75, 166, 131, 25, 36, 153, 99, 44, 15, 234, 215, 33, 128, 253, 17, 120, 160, 149, 229, 197, 57, 94, 52, 112, 202, 44, 155, 99, 26, 254,225, 99, 24, 101, 176, 49, 71, 171, 51, 4, 194, 205, 159, 118, 154, 185, 229, 22, 103, 22, 178, 112, 32, 122, 179, 161,8, 204, 105, 8, 154, 186, 234, 131, 174, 182, 249, 162, 123, 176, 49, 6, 143, 56, 124, 81, 134, 154, 113, 224, 105, 102, 32, 1, 51, 155, 102, 152, 56, 128, 81, 198, 154, 114, 230, 57, 250, 135, 97, 46, 226, 198, 151, 70, 162, 185, 142, 94,54, 145, 190, 104, 233, 166, 159, 190, 8, 196, 172, 191, 220, 186, 38, 255, 24, 150, 9, 219, 191, 215, 93, 243, 165, 164, 5, 119, 26, 234, 12, 7, 114, 60, 103, 205, 101, 61, 70, 205, 251, 148, 246, 243, 62, 114, 28, 130, 250, 68, 135, 68, 242, 69, 33, 19, 41, 66, 221, 33, 30, 83, 227, 103, 194, 77, 239, 91, 22, 15, 96, 51, 90, 150, 71, 211, 103, 79, 109, 116, 213, 253, 217, 157, 163, 131, 82, 167, 137, 222, 207, 145, 45, 253, 165, 228, 95, 250, 147, 46, 223, 7, 90, 126, 115,233, 71, 44, 166, 249, 170, 240, 33, 71, 83, 129, 128, 153, 51, 35, 125, 168, 118, 72, 172, 143, 7, 234, 169, 92, 241, 41, 42, 127, 34, 52, 94, 175, 234, 186, 203, 32, 170, 138, 31, 250, 4, 154, 43, 163, 232, 206, 39, 136, 251, 170, 190, 135, 43, 175, 241, 5, 74, 95, 77, 44, 119, 159, 225, 252, 0, 127, 79, 73, 25, 69, 254, 244, 87, 23, 240, 17, 228, 128, 211, 131, 224, 118, 152, 65, 14, 120, 224, 131, 31, 250, 184, 71, 59, 198, 17, 141, 91, 77, 132, 15, 217, 104, 135, 5, 239, 225, 14, 111, 72, 196, 33, 187, 232, 144, 67, 84, 18, 157, 31, 160, 176, 52, 41, 145, 12, 69, 150, 65, 193, 198, 232, 131, 30, 232, 224, 134, 246, 8, 114, 6, 107, 172, 227, 30, 250, 192, 96, 58, 176, 65, 188, 168, 96, 163, 130, 250, 152, 135, 57, 108, 116, 11, 118, 17, 228, 131, 33, 228, 199, 8, 75, 56, 17, 23, 22, 112, 32, 43, 180, 9, 207, 62, 71, 32, 23,186, 239, 132, 77, 4, 201, 19, 69, 72, 66, 19, 18, 164, 139, 17, 68, 99, 26, 213, 184, 70, 54, 182, 209, 141, 111, 132,99, 28, 229, 56, 71, 58, 214, 209, 142, 119, 196, 99, 30, 245, 184, 71, 62, 246, 209, 143, 127, 4, 100, 32, 5, 57, 72, 66, 22, 210, 144, 135, 68, 100, 34, 21, 185, 72, 70, 54, 210, 145, 143, 132, 100, 36, 37, 57, 73, 74, 86, 210, 146, 151,196, 100, 38, 53, 185, 73, 78, 118, 210, 147, 159, 4, 101, 40, 69, 57, 74, 82, 150, 210, 148, 167, 68, 101, 42, 85, 185, 74, 86, 182, 242, 37, 74, 128, 165, 43, 101, 73, 201, 88, 14, 4, 150, 183, 172, 165, 64, 112, 153, 203, 93, 42, 1, 10,179, 4, 230, 35, 149, 96, 128, 24, 92, 58, 228, 150, 63, 200, 101, 48, 149, 185, 76, 102, 54, 211, 153, 207, 132, 102, 52, 165, 57, 77, 106, 86, 211, 154, 215, 196, 102, 54, 181, 185, 77, 110, 118, 211, 155, 223, 4, 103, 56, 197, 57, 78, 114, 150, 211, 156, 231, 68, 103, 58, 213, 185, 78, 118, 182, 211, 157, 239, 132, 103, 60, 229, 57, 79, 122, 214, 211, 158, 247, 196, 103, 62, 245, 185, 79, 126, 246, 211, 159, 255, 4, 104, 64, 5, 58, 80, 130, 22, 180, 158, 1, 1, 0, 59)
497 |
498 | $RetryTimer = 3
499 |
500 | While($SyncHash.boolWhile)
501 | {
502 |
503 | if($SyncHash.Brand -eq "Poly")
504 | {
505 | $PhoneUrl = "https://${theIPAddress}:${thePort}/captureScreen/mainScreen"
506 | }
507 | elseif($SyncHash.Brand -eq "Yealink")
508 | {
509 | $PhoneUrl = "https://${theIPAddress}:${thePort}/screencapture/download"
510 | }
511 |
512 | $sessionText = ""
513 | if($SyncHash.Brand -eq "Poly")
514 | {
515 |
516 | $user = $SyncHash.HTTPUsername
517 | $pass = $SyncHash.HTTPPassword
518 | $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user,$pass)))
519 | try{
520 | if($SyncHash.DotNetCoreCommands)
521 | {
522 | $r = Invoke-WebRequest -Uri "https://${theIPAddress}:${thePort}/form-submit/auth.htm" -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Method POST -UserAgent "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:96.0) Gecko/20100101 Firefox/96.0" -SessionVariable so -SkipCertificateCheck
523 | }
524 | else
525 | {
526 | $r = Invoke-WebRequest -Uri "https://${theIPAddress}:${thePort}/form-submit/auth.htm" -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Method POST -UserAgent "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:96.0) Gecko/20100101 Firefox/96.0"
527 | }
528 | }
529 | catch
530 | {
531 | Write-Host "ERROR: " $_ -foreground red
532 | Write-Host "It looks like the phone doesn't have the web interface enabled. Make sure that you have enabled the web interface!" -foreground red
533 | $ConnectError = $true
534 | }
535 |
536 | $sessionText = ""
537 | if($r.StatusCode -eq 200 -and !($r.Content -imatch "INVALID_LOGIN") -and !($ConnectError))
538 | {
539 | $cookieSession = $r.Headers."Set-Cookie"
540 | $sessionC = $cookieSession -split ";"
541 | $sessionText = $sessionC[0]
542 | }
543 | else
544 | {
545 | Write-Host "ERROR: Failed to get session cookie" -foreground "red"
546 | }
547 | }
548 |
549 | Try {
550 | if($SyncHash.DotNetCoreCommands)
551 | {
552 | if($SyncHash.Brand -eq "Poly")
553 | {
554 | $response = Invoke-WebRequest -Uri $PhoneUrl -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Method GET -WebSession $so -UserAgent "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:96.0) Gecko/20100101 Firefox/96.0" -TimeoutSec 3 -SkipCertificateCheck
555 | }
556 | else
557 | {
558 | $user = $SyncHash.HTTPUsername
559 | $pass = $SyncHash.HTTPPassword
560 | $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user,$pass)))
561 | $response = Invoke-WebRequest -Uri $PhoneUrl -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Method GET -UserAgent "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:96.0) Gecko/20100101 Firefox/96.0" -TimeoutSec 3 -SkipCertificateCheck
562 | }
563 | [System.Drawing.Image] $Image = $response.Content
564 | }
565 | else
566 | {
567 | $WebClient = $null
568 | $WebClient = New-Object System.Net.WebClient
569 | $WebClient.Credentials = New-Object System.Net.NetworkCredential($SyncHash.HTTPUsername,$SyncHash.HTTPPassword)
570 | if($SyncHash.Brand -eq "Poly" -and $sessionText -ne "")
571 | {
572 | $WebClient.Headers.Add("Cookie", "$sessionText")
573 | }
574 | [System.Drawing.Image] $Image = $WebClient.DownloadData($PhoneUrl)
575 | }
576 |
577 | }
578 | Catch [Exception] {
579 | $theError = $_.Exception.Message
580 | Write-Host "ERROR: $theError" -foreground red
581 | $WebResponse = [net.HttpWebResponse]$_.Exception.Response
582 | $resst = $WebResponse.getResponseStream()
583 | $sr = new-object IO.StreamReader($resst)
584 | [string]$result = $sr.ReadToEnd()
585 | $WebResponse.close()
586 |
587 | if($theError -imatch "Not Found")
588 | {
589 | Write-Host "ERROR: It looks like the phone does not have the Screen Capture feature enabled. Enable Screen Capture in the settings of the phone and try again." -foreground "red"
590 | $Image = $null
591 | $SyncHash.screenConnected = $false
592 | $SyncHash.form.Close()
593 | }
594 | elseif($theError -imatch "Unauthorized")
595 | {
596 | Write-Host "ERROR: The password you have entered is incorrect. Check your password." -foreground "red"
597 | $Image = $null
598 | $SyncHash.screenConnected = $false
599 | $SyncHash.form.Close()
600 | }
601 | elseif($theError -imatch "Forbidden")
602 | {
603 | Write-Host "ERROR: It looks like the phone does not have the Screen Capture feature enabled. Enable Screen Capture in the settings of the phone and try again." -foreground "red"
604 | $Image = $null
605 | $SyncHash.screenConnected = $false
606 | $SyncHash.form.Close()
607 | }
608 | else
609 | {
610 | $Image = $null
611 | $SyncHash.screenConnected = $false
612 | Write-Host "INFO: " $_.Exception.Message -foreground "yellow"
613 | }
614 |
615 | }
616 | if($Image -ne $null)
617 | {
618 |
619 | Try {
620 | #DISPLAY IMAGE
621 | $SyncHash.screenConnected = $true
622 |
623 | #Get the Image Size
624 | $SyncHash.ImageWidth = $Image.Width
625 | $SyncHash.ImageHeight = $Image.Height
626 |
627 | #Display Image
628 | $SyncHash.PictureBox.Image = $Image
629 | $SyncHash.PictureBox.Visible = $true
630 |
631 | if($SyncHash.RecordingGIF)
632 | {
633 | $SyncHash.RecordGifButton.Enabled = $false
634 | $SyncHash.StopRecordGifButton.Enabled = $true
635 | $SyncHash.SaveImageButton.Enabled = $false
636 | }
637 | else
638 | {
639 | $SyncHash.RecordGifButton.Enabled = $true
640 | $SyncHash.StopRecordGifButton.Enabled = $false
641 | $SyncHash.SaveImageButton.Enabled = $true
642 | }
643 | $RetryTimer = 1
644 |
645 | }
646 | Catch [Exception] {
647 | Write-Host "INFO: Cannot display image." -foreground "yellow"
648 |
649 | $SyncHash.screenConnected = $false
650 |
651 | #If display fails show error image.
652 | $SyncHash.PictureBox.Image = $errorImage
653 | $SyncHash.PictureBox.Visible = $true
654 | $SyncHash.SaveImageButton.Enabled = $false
655 | $SyncHash.RecordGifButton.Enabled = $false
656 |
657 | $RetryTimer = 10
658 | }
659 | }
660 | else
661 | {
662 | #RESIZE THE IMAGE SIZE
663 | $SyncHash.PictureBox.sizemode = "Autosize"
664 |
665 | $SyncHash.screenConnected = $false
666 | #If display fails show error image.
667 | $SyncHash.PictureBox.Image = $SyncHash.screenCapErrorImage
668 | $SyncHash.PictureBox.Visible = $true
669 | $SyncHash.SaveImageButton.Enabled = $false
670 | $SyncHash.RecordGifButton.Enabled = $false
671 | }
672 |
673 | for($i=0; $i -lt $RetryTimer; $i++)
674 | {
675 | if(!$SyncHash.boolWhile)
676 | {
677 | break
678 | }
679 | Start-Sleep -milliseconds 300
680 | }
681 |
682 | }
683 |
684 | }) | Out-Null
685 |
686 | $handle = $powershell.BeginInvoke()
687 |
688 |
689 | # Initialize and show the form.
690 | $SyncHash.form.Add_Shown({$SyncHash.form.Activate()})
691 | $SyncHash.form.ShowDialog() > $null # Trash the text of the button that was clicked.
692 |
693 | $SyncHash.boolWhile = $false
694 | While (-Not $handle.IsCompleted) {
695 | Start-Sleep -Milliseconds 50
696 | }
697 |
698 | $script:screenConnected = $false
699 |
700 | $runspace.Close()
701 | $powershell.Dispose()
702 | }
703 |
704 |
705 | $script:startX = 0
706 | $script:startY = 0
707 | $script:currentImage = 0
708 | $script:frames = @()
709 | $script:mouseDown = $false
710 | $script:ghostBoxCount = 0
711 |
712 | function EditGifDialog([array] $ImageArray)
713 | {
714 | Add-Type -AssemblyName System.Drawing
715 | Add-Type -AssemblyName System.Windows.Forms
716 |
717 | Write-Host "INFO: Opening GIF Editing Studio." -foreground yellow
718 |
719 | $X = 0
720 | $Y = 0
721 |
722 | function Update-ShapeTable
723 | {
724 | $lv.Items.Clear()
725 | foreach($frame in $frames)
726 | {
727 | $lvItem = new-object System.Windows.Forms.ListViewItem($frame.ShapeNumber)
728 | [void]$lvItem.SubItems.Add($frame.StartFrame)
729 | [void]$lvItem.SubItems.Add($frame.EndFrame)
730 | [void]$lv.Items.Add($lvItem)
731 | }
732 | }
733 |
734 |
735 | #DrawShapesLabel ============================================================
736 | $DrawShapesLabel = New-Object System.Windows.Forms.Label
737 | $Font = New-Object System.Drawing.Font("Arial",10,[System.Drawing.FontStyle]::Bold)
738 | # Font styles are: Regular, Bold, Italic, Underline, Strikeout
739 | $DrawShapesLabel.Font = $Font
740 | $DrawShapesLabel.Location = New-Object System.Drawing.Size(20,5)
741 | $DrawShapesLabel.Size = New-Object System.Drawing.Size(150,18)
742 | $DrawShapesLabel.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left
743 | $DrawShapesLabel.Text = "Draw Shapes:"
744 | $DrawShapesLabel.TabStop = $false
745 |
746 | $PictureBox = new-object Windows.Forms.PictureBox
747 | $PictureBox.Location = New-Object System.Drawing.Size(20,25)
748 | $PictureBox.width = 280
749 | $PictureBox.height = 280
750 | $PictureBox.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left
751 | $PictureBox.BorderStyle = "FixedSingle"
752 | #$PictureBox.sizemode = "Zoom"
753 | $PictureBox.sizemode = 4
754 | $PictureBox.Margin = 10
755 | #$PictureBox.ForeColor = [System.Drawing.Color]::Black
756 | $PictureBox.WaitOnLoad = $true
757 | if($ImageArray.Length -ne -1)
758 | {
759 | $PictureBox.Image = $ImageArray[0]
760 | }
761 |
762 | $PictureBox.Add_MouseDown(
763 | {
764 | $script:startX = $_.X
765 | $script:startY = $_.Y
766 | $script:mouseDown = $true
767 | })
768 |
769 | $PictureBox.Add_MouseMove(
770 | {
771 | $script:ghostBoxCount++
772 |
773 | if($script:ghostBoxCount -gt 10)
774 | {
775 | if($script:mouseDown -eq $true)
776 | {
777 | $X = $_.X
778 | $Y = $_.Y
779 |
780 | $img = $ImageArray[$script:currentImage]
781 |
782 | $sizeMultiplier = 1
783 | $lineThickness = 1
784 |
785 | $tempY = $script:startY
786 | $tempX = $script:startX
787 | if($img.Width -gt $PictureBox.Width -and $img.Width -gt $img.Height)
788 | {
789 | $sizeMultiplier = ($img.Width / $PictureBox.Width)
790 |
791 | $difference = ($PictureBox.Height - ($img.Height / $sizeMultiplier)) / 2
792 | $tempY = $tempY - $difference
793 | $Y = $Y - $difference
794 | $tempY = $tempY -as [int]
795 | $Y = $Y -as [int]
796 |
797 | [int]$lineThickness = $img.Width / 200
798 |
799 | }
800 | elseif($img.Height -gt $PictureBox.Height -and $img.Height -gt $img.Width)
801 | {
802 | $sizeMultiplier = ($img.Height / $PictureBox.Height)
803 | $difference = ($PictureBox.Width - ($img.Width / $sizeMultiplier)) / 2
804 | $tempX = $tempX - $difference
805 | $X = $X - $difference
806 | $tempX = $tempX -as [int]
807 | $X = $X -as [int]
808 |
809 | [int]$lineThickness = $img.Height / 200
810 |
811 | }
812 |
813 | $imgForGraph = New-Object System.Drawing.Bitmap($img.Width, $img.Height)
814 | [System.Drawing.Graphics] $graph = [System.Drawing.Graphics]::FromImage($imgForGraph) #Converting image to stop indexed image error on GIFs
815 | $graph.DrawImage($img, 0, 0, [int]$img.Width, [int]$img.Height)
816 |
817 | [System.Drawing.Pen] $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::Gray, $lineThickness)
818 |
819 | $1 = $tempX * $sizeMultiplier
820 | $2 = $tempY * $sizeMultiplier
821 | $3 = ($X * $sizeMultiplier - ($tempX * $sizeMultiplier))
822 | $4 =($Y * $sizeMultiplier - ($tempY * $sizeMultiplier))
823 | $1 = $1 -as [int]
824 | $2 = $2 -as [int]
825 | $3 = $3 -as [int]
826 | $4 = $4 -as [int]
827 |
828 | if($3 -lt 0)
829 | {
830 | $1 = $1 + $3
831 | $3 = $3 * -1
832 | }
833 | if($4 -lt 0)
834 | {
835 | $2 = $2 + $4
836 | $4 = $4 * -1
837 | }
838 |
839 | if($ShapeDropDownBox.SelectedItem -eq "Circle")
840 | {
841 | $graph.DrawEllipse($pen,$1, $2, $3, $4)
842 | }
843 | else
844 | {
845 | $graph.DrawRectangle($pen,$1, $2, $3, $4)
846 | }
847 | $graph.Dispose()
848 |
849 | $PictureBox.Image = $imgForGraph
850 | $imgForGraph = $null
851 | $script:ghostBoxCount = 0
852 | }
853 | }
854 | })
855 |
856 | $PictureBox.Add_MouseUp(
857 | {
858 | $script:mouseDown = $false
859 |
860 | $X = $_.X
861 | $Y = $_.Y
862 |
863 | $img = $ImageArray[$script:currentImage]
864 |
865 | $sizeMultiplier = 1
866 | $lineThickness = 1
867 | if($img.Width -gt $PictureBox.Width -and $img.Width -gt $img.Height)
868 | {
869 | $sizeMultiplier = ($img.Width / $PictureBox.Width)
870 |
871 | $difference = ($PictureBox.Height - ($img.Height / $sizeMultiplier)) / 2
872 | $script:startY = $script:startY - $difference
873 | $Y = $Y - $difference
874 | $script:startY = $script:startY -as [int]
875 | $Y = $Y -as [int]
876 |
877 | [int]$lineThickness = $img.Width / 200
878 |
879 | }
880 | elseif($img.Height -gt $PictureBox.Height -and $img.Height -gt $img.Width)
881 | {
882 | $sizeMultiplier = ($img.Height / $PictureBox.Height)
883 | $difference = ($PictureBox.Width - ($img.Width / $sizeMultiplier)) / 2
884 | $script:startX = $script:startX - $difference
885 | $X = $X - $difference
886 | $script:startX = $script:startX -as [int]
887 | $X = $X -as [int]
888 |
889 | [int]$lineThickness = $img.Height / 200
890 |
891 | }
892 |
893 | $1 = $script:startX * $sizeMultiplier
894 | $2 = $script:startY * $sizeMultiplier
895 | $3 = ($X * $sizeMultiplier - ($script:startX * $sizeMultiplier))
896 | $4 =($Y * $sizeMultiplier - ($script:startY * $sizeMultiplier))
897 | $1 = $1 -as [int]
898 | $2 = $2 -as [int]
899 | $3 = $3 -as [int]
900 | $4 = $4 -as [int]
901 |
902 | if($3 -lt 0)
903 | {
904 | $1 = $1 + $3
905 | $3 = $3 * -1
906 | }
907 | if($4 -lt 0)
908 | {
909 | $2 = $2 + $4
910 | $4 = $4 * -1
911 | }
912 |
913 | $lvItem = new-object System.Windows.Forms.ListViewItem($script:currentImage)
914 | [void]$lvItem.SubItems.Add($script:currentImage)
915 | [void]$lvItem.SubItems.Add($ShapeDropDownBox.SelectedItem)
916 | [void]$lvItem.SubItems.Add($ColourDropDownBox.SelectedItem)
917 | [void]$lvItem.SubItems.Add($1)
918 | [void]$lvItem.SubItems.Add($2)
919 | [void]$lvItem.SubItems.Add($3)
920 | [void]$lvItem.SubItems.Add($4)
921 | [void]$lv.Items.Add($lvItem)
922 |
923 | Update-AnimationScreen
924 |
925 | })
926 |
927 |
928 | #ShapeLabel ============================================================
929 | $ShapeLabel = New-Object System.Windows.Forms.Label
930 | $Font = New-Object System.Drawing.Font("Arial",10,[System.Drawing.FontStyle]::Bold)
931 | # Font styles are: Regular, Bold, Italic, Underline, Strikeout
932 | $ShapeLabel.Font = $Font
933 | $ShapeLabel.Location = New-Object System.Drawing.Size(340,20)
934 | $ShapeLabel.Size = New-Object System.Drawing.Size(140,18)
935 | $ShapeLabel.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left
936 | $ShapeLabel.Text = "Markup Shape:"
937 | $ShapeLabel.TabStop = $false
938 |
939 |
940 | $ShapeDropDownBox = New-Object System.Windows.Forms.ComboBox
941 | $ShapeDropDownBox.Location = New-Object System.Drawing.Size(340,40)
942 | $ShapeDropDownBox.Size = New-Object System.Drawing.Size(140,15)
943 | $ShapeDropDownBox.DropDownHeight = 100
944 | $ShapeDropDownBox.tabIndex = 4
945 | $ShapeDropDownBox.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left
946 | $ShapeDropDownBox.DropDownStyle = "DropDownList"
947 |
948 | [void] $ShapeDropDownBox.Items.Add("Rectangle")
949 | [void] $ShapeDropDownBox.Items.Add("Circle")
950 |
951 | $numberOfItems = $ShapeDropDownBox.count
952 | if($numberOfItems -gt 0)
953 | {
954 | $ShapeDropDownBox.SelectedIndex = 0
955 | }
956 |
957 | #ColourLabel ============================================================
958 | $ColourLabel = New-Object System.Windows.Forms.Label
959 | $Font = New-Object System.Drawing.Font("Arial",10,[System.Drawing.FontStyle]::Bold)
960 | # Font styles are: Regular, Bold, Italic, Underline, Strikeout
961 | $ColourLabel.Font = $Font
962 | $ColourLabel.Location = New-Object System.Drawing.Size(500,20)
963 | $ColourLabel.Size = New-Object System.Drawing.Size(140,18)
964 | $ColourLabel.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left
965 | $ColourLabel.Text = "Markup Colour:"
966 | $ColourLabel.TabStop = $false
967 |
968 |
969 | $ColourDropDownBox = New-Object System.Windows.Forms.ComboBox
970 | $ColourDropDownBox.Location = New-Object System.Drawing.Size(500,40)
971 | $ColourDropDownBox.Size = New-Object System.Drawing.Size(140,15)
972 | $ColourDropDownBox.DropDownHeight = 200
973 | $ColourDropDownBox.tabIndex = 5
974 | $ColourDropDownBox.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left
975 | $ColourDropDownBox.DropDownStyle = "DropDownList"
976 |
977 | [void] $ColourDropDownBox.Items.Add("Red")
978 | [void] $ColourDropDownBox.Items.Add("Purple")
979 | [void] $ColourDropDownBox.Items.Add("Green")
980 | [void] $ColourDropDownBox.Items.Add("Blue")
981 | [void] $ColourDropDownBox.Items.Add("Orange")
982 | [void] $ColourDropDownBox.Items.Add("Pink")
983 | [void] $ColourDropDownBox.Items.Add("Yellow")
984 | [void] $ColourDropDownBox.Items.Add("White")
985 | [void] $ColourDropDownBox.Items.Add("Maroon")
986 | [void] $ColourDropDownBox.Items.Add("Black")
987 |
988 | $numberOfItems = $ColourDropDownBox.count
989 | if($numberOfItems -gt 0)
990 | {
991 | $ColourDropDownBox.SelectedIndex = 0
992 | }
993 |
994 | #MarkupShapeLabel ============================================================
995 | $MarkupShapeLabel = New-Object System.Windows.Forms.Label
996 | $Font = New-Object System.Drawing.Font("Arial",10,[System.Drawing.FontStyle]::Bold)
997 | # Font styles are: Regular, Bold, Italic, Underline, Strikeout
998 | $MarkupShapeLabel.Font = $Font
999 | $MarkupShapeLabel.Location = New-Object System.Drawing.Size(340,70)
1000 | $MarkupShapeLabel.Size = New-Object System.Drawing.Size(200,18)
1001 | $MarkupShapeLabel.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left
1002 | $MarkupShapeLabel.Text = "Markup Shapes:"
1003 | $MarkupShapeLabel.TabStop = $false
1004 |
1005 | $lv = New-Object windows.forms.ListView
1006 | $lv.View = [System.Windows.Forms.View]"Details"
1007 | $lv.Size = New-Object System.Drawing.Size(510,190)
1008 | $lv.Location = New-Object System.Drawing.Size(340,90)
1009 | $lv.FullRowSelect = $true
1010 | $lv.GridLines = $true
1011 | $lv.HideSelection = $false
1012 | #$lv.Sorting = [System.Windows.Forms.SortOrder]::Ascending
1013 | $lv.Sorting = [System.Windows.Forms.SortOrder]::None
1014 | $lv.Anchor = [System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left
1015 | [void]$lv.Columns.Add("StartFrame", 65)
1016 | [void]$lv.Columns.Add("EndFrame", 60)
1017 | [void]$lv.Columns.Add("Shape", 60)
1018 | [void]$lv.Columns.Add("Colour", 60)
1019 | [void]$lv.Columns.Add("StartX", 60)
1020 | [void]$lv.Columns.Add("StartY", 60)
1021 | [void]$lv.Columns.Add("Width", 60)
1022 | [void]$lv.Columns.Add("Height", 60)
1023 |
1024 | $lv.add_MouseUp(
1025 | {
1026 | foreach ($item in $lv.SelectedItems)
1027 | {
1028 | $user = $item.Text
1029 | if($item -ne $null)
1030 | {
1031 | $startFrame = $item.Text -as [int]
1032 | $endFrame = $item.SubItems[1].Text -as [int]
1033 | $Shape = $item.SubItems[2].Text
1034 | $Colour = $item.SubItems[3].Text
1035 | $StartX = $item.SubItems[4].Text -as [int]
1036 | $StartY = $item.SubItems[5].Text -as [int]
1037 | $Width = $item.SubItems[6].Text -as [int]
1038 | $Height = $item.SubItems[7].Text -as [int]
1039 | $StartFrameTextBox.text = "$startFrame"
1040 | $EndFrameTextBox.text = "$endFrame"
1041 | $ShapeTextBox.SelectedItem = "$Shape"
1042 | $ColourTextBox.SelectedItem = "$Colour"
1043 | $StartXTextBox.text = "$StartX"
1044 | $StartYTextBox.text = "$StartY"
1045 | $WidthTextBox.text = "$Width"
1046 | $HeightTextBox.text = "$Height"
1047 |
1048 | #Update the image number
1049 | $arrayLength = $ImageArray.length - 1
1050 | $script:currentImage = $startFrame
1051 | Update-AnimationScreen
1052 | $currentImageNumber = $script:currentImage
1053 | $FrameNumberNumberBox.Value = $currentImageNumber
1054 | }
1055 | }
1056 | #Write-Host "Number of selected items: " $lv.SelectedItems.count
1057 | if($lv.SelectedItems.count -eq 0)
1058 | {
1059 | $StartFrameTextBox.text = ""
1060 | $EndFrameTextBox.text = ""
1061 | $ShapeTextBox.SelectedItem = ""
1062 | $ColourTextBox.SelectedItem = ""
1063 | $StartXTextBox.text = ""
1064 | $StartYTextBox.text = ""
1065 | $WidthTextBox.text = ""
1066 | $HeightTextBox.text = ""
1067 | }
1068 | $lv.Refresh()
1069 | })
1070 |
1071 | # List Key Event ============================================================
1072 | $lv.add_KeyUp(
1073 | {
1074 | if ($_.KeyCode -eq "Up" -or $_.KeyCode -eq "Down")
1075 | {
1076 | foreach ($item in $lv.SelectedItems)
1077 | {
1078 | if($item -ne $null)
1079 | {
1080 | $startFrame = $item.Text -as [int]
1081 | $endFrame = $item.SubItems[1].Text -as [int]
1082 | $Shape = $item.SubItems[2].Text
1083 | $Colour = $item.SubItems[3].Text
1084 | $StartX = $item.SubItems[4].Text -as [int]
1085 | $StartY = $item.SubItems[5].Text -as [int]
1086 | $Width = $item.SubItems[6].Text -as [int]
1087 | $Height = $item.SubItems[7].Text -as [int]
1088 | $StartFrameTextBox.text = "$startFrame"
1089 | $EndFrameTextBox.text = "$endFrame"
1090 | $ShapeTextBox.SelectedItem = "$Shape"
1091 | $ColourTextBox.SelectedItem = "$Colour"
1092 | $StartXTextBox.text = "$StartX"
1093 | $StartYTextBox.text = "$StartY"
1094 | $WidthTextBox.text = "$Width"
1095 | $HeightTextBox.text = "$Height"
1096 |
1097 | #Update the image number
1098 | $arrayLength = $ImageArray.length - 1
1099 | $script:currentImage = $startFrame
1100 | Update-AnimationScreen
1101 | $currentImageNumber = $script:currentImage
1102 | $FrameNumberNumberBox.Value = $currentImageNumber
1103 |
1104 | }
1105 | }
1106 | }
1107 | if($lv.SelectedItems.count -eq 0)
1108 | {
1109 | $StartFrameTextBox.text = ""
1110 | $EndFrameTextBox.text = ""
1111 | $ShapeTextBox.SelectedItem = ""
1112 | $ColourTextBox.SelectedItem = ""
1113 | $StartXTextBox.text = ""
1114 | $StartYTextBox.text = ""
1115 | $WidthTextBox.text = ""
1116 | $HeightTextBox.text = ""
1117 | }
1118 | $lv.Refresh()
1119 | })
1120 |
1121 | $lv.add_SelectedIndexChanged(
1122 | {
1123 | Update-AnimationScreen
1124 | })
1125 |
1126 |
1127 |
1128 | #StartFrameTextBox ============================================================
1129 | $StartFrameTextBox = new-object System.Windows.Forms.textbox
1130 | $StartFrameTextBox.location = new-object system.drawing.size(340,285)
1131 | $StartFrameTextBox.size = new-object system.drawing.size(70,23)
1132 | $StartFrameTextBox.text = ""
1133 | $StartFrameTextBox.Anchor = [System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Left
1134 | $StartFrameTextBox.tabIndex = 6
1135 |
1136 |
1137 | #EndFrameTextBox ============================================================
1138 | $EndFrameTextBox = new-object System.Windows.Forms.textbox
1139 | $EndFrameTextBox.location = new-object system.drawing.size(410,285)
1140 | $EndFrameTextBox.size = new-object system.drawing.size(60,23)
1141 | $EndFrameTextBox.text = ""
1142 | $EndFrameTextBox.Anchor = [System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Left
1143 | $EndFrameTextBox.tabIndex = 7
1144 |
1145 | #ShapeTextBox ============================================================
1146 | $ShapeTextBox = New-Object System.Windows.Forms.ComboBox
1147 | $ShapeTextBox.Location = New-Object System.Drawing.Size(470,285)
1148 | $ShapeTextBox.Size = New-Object System.Drawing.Size(60,23)
1149 | $ShapeTextBox.DropDownHeight = 100
1150 | $ShapeTextBox.tabIndex = 8
1151 | $ShapeTextBox.Anchor = [System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Left
1152 | $ShapeTextBox.DropDownStyle = "DropDownList"
1153 |
1154 | [void] $ShapeTextBox.Items.Add("Rectangle")
1155 | [void] $ShapeTextBox.Items.Add("Circle")
1156 |
1157 | $numberOfItems = $ShapeTextBox.count
1158 | if($numberOfItems -gt 0)
1159 | {
1160 | $ShapeTextBox.SelectedIndex = 0
1161 | }
1162 |
1163 |
1164 | $ColourTextBox = New-Object System.Windows.Forms.ComboBox
1165 | $ColourTextBox.Location = New-Object System.Drawing.Size(530,285)
1166 | $ColourTextBox.Size = New-Object System.Drawing.Size(60,23)
1167 | $ColourTextBox.DropDownHeight = 200
1168 | $ColourTextBox.tabIndex = 9
1169 | $ColourTextBox.Anchor = [System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Left
1170 | $ColourTextBox.DropDownStyle = "DropDownList"
1171 |
1172 | [void] $ColourTextBox.Items.Add("Red")
1173 | [void] $ColourTextBox.Items.Add("Purple")
1174 | [void] $ColourTextBox.Items.Add("Green")
1175 | [void] $ColourTextBox.Items.Add("Blue")
1176 | [void] $ColourTextBox.Items.Add("Orange")
1177 | [void] $ColourTextBox.Items.Add("Pink")
1178 | [void] $ColourTextBox.Items.Add("Yellow")
1179 | [void] $ColourTextBox.Items.Add("White")
1180 | [void] $ColourTextBox.Items.Add("Maroon")
1181 | [void] $ColourTextBox.Items.Add("Black")
1182 |
1183 | $numberOfItems = $ColourTextBox.count
1184 | if($numberOfItems -gt 0)
1185 | {
1186 | $ColourTextBox.SelectedIndex = 0
1187 | }
1188 |
1189 |
1190 | #StartXTextBox ============================================================
1191 | $StartXTextBox = new-object System.Windows.Forms.textbox
1192 | $StartXTextBox.location = new-object system.drawing.size(590,285)
1193 | $StartXTextBox.size = new-object system.drawing.size(60,23)
1194 | $StartXTextBox.text = ""
1195 | $StartXTextBox.Anchor = [System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Left
1196 | $StartXTextBox.tabIndex = 10
1197 |
1198 | #StartYTextBox ============================================================
1199 | $StartYTextBox = new-object System.Windows.Forms.textbox
1200 | $StartYTextBox.location = new-object system.drawing.size(650,285)
1201 | $StartYTextBox.size = new-object system.drawing.size(60,23)
1202 | $StartYTextBox.text = ""
1203 | $StartYTextBox.Anchor = [System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Left
1204 | $StartYTextBox.tabIndex = 11
1205 |
1206 | #WidthTextBox ============================================================
1207 | $WidthTextBox = new-object System.Windows.Forms.textbox
1208 | $WidthTextBox.location = new-object system.drawing.size(710,285)
1209 | $WidthTextBox.size = new-object system.drawing.size(60,23)
1210 | $WidthTextBox.text = ""
1211 | $WidthTextBox.Anchor = [System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Left
1212 | $WidthTextBox.tabIndex = 12
1213 |
1214 | #HeightTextBox ============================================================
1215 | $HeightTextBox = new-object System.Windows.Forms.textbox
1216 | $HeightTextBox.location = new-object system.drawing.size(770,285)
1217 | $HeightTextBox.size = new-object system.drawing.size(60,23)
1218 | $HeightTextBox.text = ""
1219 | $HeightTextBox.Anchor = [System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Left
1220 | $HeightTextBox.tabIndex = 13
1221 |
1222 |
1223 |
1224 | #EditShapeButton ============================================================
1225 | $EditShapeButton = New-Object System.Windows.Forms.Button
1226 | $EditShapeButton.Location = New-Object System.Drawing.Size(490,315)
1227 | $EditShapeButton.Size = New-Object System.Drawing.Size(100,20)
1228 | $EditShapeButton.Text = "Update Shape"
1229 | $EditShapeButton.TabIndex = 14
1230 | $EditShapeButton.Add_Click(
1231 | {
1232 | foreach ($item in $lv.SelectedItems)
1233 | {
1234 | $StartFrame = $StartFrameTextBox.text -as [int]
1235 | if($StartFrame -gt 0 -and $StartFrame -lt ($ImageArray.length))
1236 | {
1237 | $item.Text = $StartFrameTextBox.text
1238 | }
1239 | else
1240 | {
1241 | Write-Host "INFO: Unable to use the Start Frame value" -foreground yellow
1242 | }
1243 | $EndFrame = $EndFrameTextBox.text -as [int]
1244 | if($EndFrame -gt 0 -and $EndFrame -lt ($ImageArray.length))
1245 | {
1246 | $item.SubItems[1].Text = $EndFrameTextBox.text
1247 | }
1248 | else
1249 | {
1250 | Write-Host "INFO: Unable to use the End Frame value" -foreground yellow
1251 | }
1252 | if($ShapeTextBox.text -eq "Rectangle" -or $ShapeTextBox.text -eq "Circle")
1253 | {
1254 | $item.SubItems[2].Text = $ShapeTextBox.text
1255 | }
1256 | else
1257 | {
1258 | Write-Host "INFO: Unable to use the Shape value" -foreground yellow
1259 | }
1260 |
1261 | $item.SubItems[3].Text = $ColourTextBox.text
1262 |
1263 | $StartX = $StartXTextBox.text -as [int]
1264 | if($StartX -ge 0)
1265 | {
1266 | $item.SubItems[4].Text = $StartXTextBox.text
1267 | }
1268 | else
1269 | {
1270 | Write-Host "INFO: Unable to use the Start X value" -foreground yellow
1271 | }
1272 | $StartY = $StartYTextBox.text -as [int]
1273 | if($StartY -ge 0)
1274 | {
1275 | $item.SubItems[5].Text = $StartYTextBox.text
1276 | }
1277 | else
1278 | {
1279 | Write-Host "INFO: Unable to use the Start Y value" -foreground yellow
1280 | }
1281 | $Width = $WidthTextBox.text -as [int]
1282 | if($Width -ge 0)
1283 | {
1284 | $item.SubItems[6].Text = $WidthTextBox.text
1285 | }
1286 | else
1287 | {
1288 | Write-Host "INFO: Unable to use the Width value" -foreground yellow
1289 | }
1290 | $Height = $HeightTextBox.text -as [int]
1291 | if($Height -ge 0)
1292 | {
1293 | $item.SubItems[7].Text = $HeightTextBox.text
1294 | }
1295 | else
1296 | {
1297 | Write-Host "INFO: Unable to use the Height value" -foreground yellow
1298 | }
1299 |
1300 | }
1301 | Update-AnimationScreen
1302 |
1303 | })
1304 |
1305 | #DeleteShapeButton ============================================================
1306 | $DeleteShapeButton = New-Object System.Windows.Forms.Button
1307 | $DeleteShapeButton.Location = New-Object System.Drawing.Size(600,315)
1308 | $DeleteShapeButton.Size = New-Object System.Drawing.Size(100,20)
1309 | $DeleteShapeButton.Text = "Delete Shape"
1310 | $DeleteShapeButton.TabIndex = 15
1311 | $DeleteShapeButton.Add_Click(
1312 | {
1313 | $beforeDelete = $lv.SelectedItems[0].Index
1314 | if($beforeDelete -ne $null)
1315 | {
1316 | $lv.Items.RemoveAt($lv.SelectedItems[0].Index)
1317 | Update-AnimationScreen
1318 | }
1319 | if($beforeDelete -ge $lv.Items.Count)
1320 | {
1321 | $beforeDelete = $beforeDelete - 1
1322 | }
1323 | if($lv.items.Count -ge 1)
1324 | {
1325 | $lv.Items[$beforeDelete].Selected = $true;
1326 | }
1327 | elseif($lv.items.Count -eq 0)
1328 | {
1329 | Write-Host "No items left"
1330 | }
1331 | })
1332 |
1333 |
1334 |
1335 | function Update-AnimationScreen
1336 | {
1337 | $img = $ImageArray[$script:currentImage]
1338 |
1339 | $imgForGraph = New-Object System.Drawing.Bitmap($img.Width, $img.Height)
1340 | [System.Drawing.Graphics] $graph = [System.Drawing.Graphics]::FromImage($imgForGraph) #Converting image to stop indexed image error on GIFs
1341 | $graph.DrawImage($img, 0, 0, [int]$img.Width, [int]$img.Height)
1342 |
1343 | foreach ($item in $lv.Items)
1344 | {
1345 | [int]$lineThickness = $img.Height / 200
1346 |
1347 | $startFrame = $item.Text -as [int]
1348 | $endFrame = $item.SubItems[1].Text -as [int]
1349 | $shape = $item.SubItems[2].Text
1350 | $colour = $item.SubItems[3].Text
1351 | $1 = $item.SubItems[4].Text -as [int]
1352 | $2 = $item.SubItems[5].Text -as [int]
1353 | $3 = $item.SubItems[6].Text -as [int]
1354 | $4 = $item.SubItems[7].Text -as [int]
1355 |
1356 | if($script:currentImage -ge $startFrame -and $script:currentImage -le $endFrame)
1357 | {
1358 | Write-Host "INFO: Found $shape to render" -foreground yellow
1359 |
1360 | if($item.Index -eq $lv.SelectedItems[0].Index)
1361 | {
1362 | [System.Drawing.Pen] $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::MediumTurquoise, $lineThickness)
1363 | }
1364 | elseif($colour -eq "Green")
1365 | {
1366 | [System.Drawing.Pen] $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::Green, $lineThickness)
1367 | }
1368 | elseif($colour -eq "Purple")
1369 | {
1370 | [System.Drawing.Pen] $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::Purple, $lineThickness)
1371 | }
1372 | elseif($colour -eq "Blue")
1373 | {
1374 | [System.Drawing.Pen] $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::Blue, $lineThickness)
1375 | }
1376 | elseif($colour -eq "Orange")
1377 | {
1378 | [System.Drawing.Pen] $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::Orange, $lineThickness)
1379 | }
1380 | elseif($colour -eq "Pink")
1381 | {
1382 | [System.Drawing.Pen] $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::Pink, $lineThickness)
1383 | }
1384 | elseif($colour -eq "Yellow")
1385 | {
1386 | [System.Drawing.Pen] $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::Yellow, $lineThickness)
1387 | }
1388 | elseif($colour -eq "White")
1389 | {
1390 | [System.Drawing.Pen] $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::White, $lineThickness)
1391 | }
1392 | elseif($colour -eq "Maroon")
1393 | {
1394 | [System.Drawing.Pen] $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::Maroon, $lineThickness)
1395 | }
1396 | elseif($colour -eq "Black")
1397 | {
1398 | [System.Drawing.Pen] $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::Black, $lineThickness)
1399 | }
1400 | else
1401 | {
1402 | [System.Drawing.Pen] $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::Red, $lineThickness)
1403 | }
1404 |
1405 | if($shape -eq "Circle")
1406 | {
1407 | $graph.DrawEllipse($pen,$1, $2, $3, $4)
1408 | }
1409 | else
1410 | {
1411 | $graph.DrawRectangle($pen,$1, $2, $3, $4)
1412 | }
1413 | }
1414 | }
1415 | $PictureBox.Image = $imgForGraph
1416 | $graph.Dispose()
1417 | $imgForGraph = $null
1418 | }
1419 |
1420 |
1421 | #LeftManualButton ============================================================
1422 | $LeftManualButton = New-Object System.Windows.Forms.Button
1423 | $LeftManualButton.Location = New-Object System.Drawing.Size(30,310)
1424 | $LeftManualButton.Size = New-Object System.Drawing.Size(60,18)
1425 | $LeftManualButton.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left
1426 | $LeftManualButton.Text = "Previous"
1427 | $LeftManualButton.TabIndex = 16
1428 | $LeftManualButton.Add_Click(
1429 | {
1430 | $arrayLength = $ImageArray.length - 1
1431 | if($script:currentImage -gt 0)
1432 | {$script:currentImage--}
1433 | $img = $ImageArray[$script:currentImage]
1434 |
1435 | Update-AnimationScreen
1436 |
1437 | $currentImageNumber = $script:currentImage
1438 | $FrameNumberNumberBox.Value = $currentImageNumber
1439 |
1440 | })
1441 |
1442 |
1443 | #RightManualButton ============================================================
1444 | $RightManualButton = New-Object System.Windows.Forms.Button
1445 | $RightManualButton.Location = New-Object System.Drawing.Size(100,310)
1446 | $RightManualButton.Size = New-Object System.Drawing.Size(60,18)
1447 | $RightManualButton.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left
1448 | $RightManualButton.Text = "Next"
1449 | $RightManualButton.TabIndex = 17
1450 | $RightManualButton.Add_Click(
1451 | {
1452 | $arrayLength = $ImageArray.length - 1
1453 | if($script:currentImage -lt ($ImageArray.length - 1))
1454 | {
1455 | $script:currentImage++
1456 | }
1457 |
1458 | Update-AnimationScreen
1459 |
1460 | $currentImageNumber = $script:currentImage
1461 | $FrameNumberNumberBox.Value = $currentImageNumber
1462 | })
1463 |
1464 | #FrameNumberLabel ============================================================
1465 | $FrameNumberLabel = New-Object System.Windows.Forms.Label
1466 | $Font = New-Object System.Drawing.Font("Arial",10,[System.Drawing.FontStyle]::Bold)
1467 | # Font styles are: Regular, Bold, Italic, Underline, Strikeout
1468 | $FrameNumberLabel.Font = $Font
1469 | $FrameNumberLabel.Location = New-Object System.Drawing.Size(170,310)
1470 | $FrameNumberLabel.Size = New-Object System.Drawing.Size(53,18)
1471 | $FrameNumberLabel.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left
1472 | $FrameNumberLabel.Text = "Frame:"
1473 | $FrameNumberLabel.TabStop = $false
1474 |
1475 |
1476 | $FrameNumberNumberBox = New-Object System.Windows.Forms.NumericUpDown
1477 | $FrameNumberNumberBox.Location = New-Object Drawing.Size(226,310)
1478 | $FrameNumberNumberBox.Size = New-Object Drawing.Size(45,24)
1479 | $FrameNumberNumberBox.Minimum = 0
1480 | $FrameNumberNumberBox.Maximum = $ImageArray.length - 1
1481 | $FrameNumberNumberBox.Increment = 1
1482 | $FrameNumberNumberBox.Value = 0
1483 | $FrameNumberNumberBox.TabIndex = 18
1484 |
1485 | $FrameNumberNumberBox.Add_ValueChanged({
1486 |
1487 | $script:currentImage = $FrameNumberNumberBox.Value
1488 |
1489 | Update-AnimationScreen
1490 |
1491 | })
1492 |
1493 | #FrameNumberLabel ============================================================
1494 | $FrameNumberEndNumberLabel = New-Object System.Windows.Forms.Label
1495 | $Font = New-Object System.Drawing.Font("Arial",10,[System.Drawing.FontStyle]::Bold)
1496 | # Font styles are: Regular, Bold, Italic, Underline, Strikeout
1497 | $FrameNumberEndNumberLabel.Font = $Font
1498 | $FrameNumberEndNumberLabel.Location = New-Object System.Drawing.Size(280,310)
1499 | $FrameNumberEndNumberLabel.Size = New-Object System.Drawing.Size(60,18)
1500 | $FrameNumberEndNumberLabel.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left
1501 | $arrayLength = $ImageArray.length - 1
1502 | $FrameNumberEndNumberLabel.Text = "/ $arrayLength"
1503 | $FrameNumberEndNumberLabel.TabStop = $false
1504 |
1505 |
1506 | #StartFrameLabel ============================================================
1507 | $StartFrameImageLabel = New-Object System.Windows.Forms.Label
1508 | $Font = New-Object System.Drawing.Font("Arial",10,[System.Drawing.FontStyle]::Bold)
1509 | # Font styles are: Regular, Bold, Italic, Underline, Strikeout
1510 | $StartFrameImageLabel.Font = $Font
1511 | $StartFrameImageLabel.Location = New-Object System.Drawing.Size(20,340)
1512 | $StartFrameImageLabel.Size = New-Object System.Drawing.Size(90,18)
1513 | $StartFrameImageLabel.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left
1514 | $StartFrameImageLabel.Text = "Start Frame:"
1515 | $StartFrameImageLabel.TabStop = $false
1516 |
1517 |
1518 | $StartFrameImageNumberBox = New-Object System.Windows.Forms.NumericUpDown
1519 | $StartFrameImageNumberBox.Location = New-Object Drawing.Size(110,340)
1520 | $StartFrameImageNumberBox.Size = New-Object Drawing.Size(45,24)
1521 | $StartFrameImageNumberBox.Minimum = 0
1522 | $StartFrameImageNumberBox.Maximum = $ImageArray.length - 1
1523 | $StartFrameImageNumberBox.Increment = 1
1524 | $StartFrameImageNumberBox.Value = 0
1525 | $StartFrameImageNumberBox.TabIndex = 19
1526 |
1527 | $StartFrameImageNumberBox.Add_ValueChanged({
1528 |
1529 | if($StartFrameImageNumberBox.Value -ge $EndFrameImageNumberBox.Value)
1530 | {
1531 | $StartFrameImageNumberBox.Value = $StartFrameImageNumberBox.Value - 1
1532 | }
1533 | })
1534 |
1535 |
1536 | #EndFrameLabel ============================================================
1537 | $EndFrameImageLabel = New-Object System.Windows.Forms.Label
1538 | $Font = New-Object System.Drawing.Font("Arial",10,[System.Drawing.FontStyle]::Bold)
1539 | # Font styles are: Regular, Bold, Italic, Underline, Strikeout
1540 | $EndFrameImageLabel.Font = $Font
1541 | $EndFrameImageLabel.Location = New-Object System.Drawing.Size(160,340)
1542 | $EndFrameImageLabel.Size = New-Object System.Drawing.Size(90,18)
1543 | $EndFrameImageLabel.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left
1544 | $EndFrameImageLabel.Text = "End Frame:"
1545 | $EndFrameImageLabel.TabStop = $false
1546 |
1547 |
1548 | $EndFrameImageNumberBox = New-Object System.Windows.Forms.NumericUpDown
1549 | $EndFrameImageNumberBox.Location = New-Object Drawing.Size(250,340)
1550 | $EndFrameImageNumberBox.Size = New-Object Drawing.Size(45,24)
1551 | $EndFrameImageNumberBox.Minimum = 0
1552 | $EndFrameImageNumberBox.Maximum = $ImageArray.length - 1
1553 | $EndFrameImageNumberBox.Increment = 1
1554 | $EndFrameImageNumberBox.Value = $ImageArray.length - 1
1555 | $EndFrameImageNumberBox.TabIndex = 20
1556 |
1557 |
1558 | $EndFrameImageNumberBox.Add_ValueChanged({
1559 |
1560 | if($EndFrameImageNumberBox.Value -le $StartFrameImageNumberBox.Value)
1561 | {
1562 | $EndFrameImageNumberBox.Value = $EndFrameImageNumberBox.Value + 1
1563 | }
1564 | })
1565 |
1566 |
1567 | #ImageSizeLabel ============================================================
1568 | $ImageSizeLabel = New-Object System.Windows.Forms.Label
1569 | $Font = New-Object System.Drawing.Font("Arial",10,[System.Drawing.FontStyle]::Bold)
1570 | # Font styles are: Regular, Bold, Italic, Underline, Strikeout
1571 | $ImageSizeLabel.Font = $Font
1572 | $ImageSizeLabel.Location = New-Object System.Drawing.Size(20,365)
1573 | $ImageSizeLabel.Size = New-Object System.Drawing.Size(90,18)
1574 | $ImageSizeLabel.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left
1575 | $ImageSizeLabel.Text = "Image Size:"
1576 | $ImageSizeLabel.TabStop = $false
1577 |
1578 |
1579 | $ImageHeightTextBox = New-Object System.Windows.Forms.NumericUpDown
1580 | $ImageHeightTextBox.Location = New-Object Drawing.Size(110,365)
1581 | $ImageHeightTextBox.Size = New-Object Drawing.Size(50,23)
1582 | $ImageHeightTextBox.Minimum = 0
1583 | $ImageHeightTextBox.Maximum = 5000
1584 | $ImageHeightTextBox.Increment = 1
1585 | $ImageHeightTextBox.Value = $imgSize.Height -as [int]
1586 | $ImageHeightTextBox.TabIndex = 21
1587 |
1588 |
1589 | $ImageHeightTextBox.Add_ValueChanged({
1590 |
1591 | [int]$imageHeight = $ImageHeightTextBox.Value
1592 | $SizeMult = $imageHeight / $imgSize.Height
1593 | $ImageWidthTextBox.text = ($imgSize.Width * $SizeMult) -as [int]
1594 |
1595 | })
1596 |
1597 |
1598 | #ImageSizeXLabel ============================================================
1599 | $ImageSizeXLabel = New-Object System.Windows.Forms.Label
1600 | $Font = New-Object System.Drawing.Font("Arial",10,[System.Drawing.FontStyle]::Bold)
1601 | # Font styles are: Regular, Bold, Italic, Underline, Strikeout
1602 | $ImageSizeXLabel.Font = $Font
1603 | $ImageSizeXLabel.Location = New-Object System.Drawing.Size(167,365)
1604 | $ImageSizeXLabel.Size = New-Object System.Drawing.Size(9,18)
1605 | $ImageSizeXLabel.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left
1606 | $ImageSizeXLabel.Text = "x"
1607 | $ImageSizeXLabel.TabStop = $false
1608 |
1609 | #WidthWidth Text box ============================================================
1610 | $ImageWidthTextBox = new-object System.Windows.Forms.textbox
1611 | $ImageWidthTextBox.location = new-object system.drawing.size(185,365)
1612 | $ImageWidthTextBox.size = new-object system.drawing.size(50,23)
1613 | $ImageWidthTextBox.text = ""
1614 | $ImageWidthTextBox.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left
1615 | $ImageWidthTextBox.tabIndex = 22
1616 | $ImageWidthTextBox.Enabled = $false
1617 |
1618 |
1619 | $imgSize = $ImageArray[0]
1620 | if($imgSize -ne $null)
1621 | {
1622 | $ImageHeightTextBox.text = $imgSize.Height
1623 | $ImageWidthTextBox.text = $imgSize.Width
1624 | }
1625 |
1626 | #ResetSizeButton ============================================================
1627 | $ResetSizeButton = New-Object System.Windows.Forms.Button
1628 | $ResetSizeButton.Location = New-Object System.Drawing.Size(245,365)
1629 | $ResetSizeButton.Size = New-Object System.Drawing.Size(70,18)
1630 | $ResetSizeButton.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left
1631 | $ResetSizeButton.Text = "Reset Size"
1632 | $ResetSizeButton.TabIndex = 23
1633 | $ResetSizeButton.Add_Click(
1634 | {
1635 | $imgSize = $ImageArray[0]
1636 | if($imgSize -ne $null)
1637 | {
1638 | $ImageHeightTextBox.Value = $imgSize.Height
1639 | #$ImageWidthTextBox.text = $imgSize.Width
1640 | }
1641 |
1642 | })
1643 |
1644 |
1645 | #InfiniteLoopsLabel ============================================================
1646 | $InfiniteLoopsLabel = New-Object System.Windows.Forms.Label
1647 | $Font = New-Object System.Drawing.Font("Arial",10,[System.Drawing.FontStyle]::Bold)
1648 | # Font styles are: Regular, Bold, Italic, Underline, Strikeout
1649 | $InfiniteLoopsLabel.Font = $Font
1650 | $InfiniteLoopsLabel.Location = New-Object System.Drawing.Size(20,390)
1651 | $InfiniteLoopsLabel.Size = New-Object System.Drawing.Size(95,18)
1652 | $InfiniteLoopsLabel.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left
1653 | $InfiniteLoopsLabel.Text = "Infinite Loop:"
1654 | $InfiniteLoopsLabel.TabStop = $false
1655 |
1656 | # InfiniteLoopsCheckBox ============================================================
1657 | $InfiniteLoopsCheckBox = New-Object System.Windows.Forms.Checkbox
1658 | $InfiniteLoopsCheckBox.Location = New-Object System.Drawing.Size(120,390)
1659 | $InfiniteLoopsCheckBox.Size = New-Object System.Drawing.Size(20,20)
1660 | $InfiniteLoopsCheckBox.Checked = $true
1661 | $InfiniteLoopsCheckBox.TabIndex = 24
1662 |
1663 |
1664 | # ExportGIFButton button.
1665 | $ExportGIFButton = New-Object System.Windows.Forms.Button
1666 | $ExportGIFButton.Location = New-Object System.Drawing.Size(350,385)
1667 | $ExportGIFButton.Size = New-Object System.Drawing.Size(90,25)
1668 | $ExportGIFButton.Anchor = [System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Left
1669 | $ExportGIFButton.Text = "Export GIF"
1670 | $ExportGIFButton.tabIndex = 25
1671 | $ExportGIFButton.Add_Click({
1672 |
1673 | #Process the array
1674 | $loopNo = 0
1675 | $FinalImageArray = @()
1676 | foreach($img in $ImageArray)
1677 | {
1678 | $StartFrameImageSetting = $StartFrameImageNumberBox.Value
1679 | $EndFrameImageSetting = $EndFrameImageNumberBox.Value
1680 | if($loopNo -ge $StartFrameImageSetting -and $loopNo -le $EndFrameImageSetting)
1681 | {
1682 | $imgForGraph = New-Object System.Drawing.Bitmap($img.Width, $img.Height)
1683 | [System.Drawing.Graphics] $graph = [System.Drawing.Graphics]::FromImage($imgForGraph) #Converting image to stop indexed image error on GIFs
1684 | $graph.DrawImage($img, 0, 0, [int]$img.Width, [int]$img.Height)
1685 |
1686 |
1687 | foreach ($item in $lv.Items)
1688 | {
1689 | [int]$lineThickness = $img.Height / 200
1690 |
1691 | $startFrame = $item.Text -as [int]
1692 | $endFrame = $item.SubItems[1].Text -as [int]
1693 | $shape = $item.SubItems[2].Text
1694 | $colour = $item.SubItems[3].Text
1695 | $1 = $item.SubItems[4].Text -as [int]
1696 | $2 = $item.SubItems[5].Text -as [int]
1697 | $3 = $item.SubItems[6].Text -as [int]
1698 | $4 = $item.SubItems[7].Text -as [int]
1699 |
1700 | if($loopNo -ge $startFrame -and $loopNo -le $endFrame)
1701 | {
1702 | #Write-Host "INFO: Found shape to render - $colour,$1,$2,$3,$4" -foreground yellow
1703 |
1704 | if($colour -eq "Green")
1705 | {
1706 | [System.Drawing.Pen] $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::Green, $lineThickness)
1707 | }
1708 | elseif($colour -eq "Purple")
1709 | {
1710 | [System.Drawing.Pen] $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::Purple, $lineThickness)
1711 | }
1712 | elseif($colour -eq "Blue")
1713 | {
1714 | [System.Drawing.Pen] $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::Blue, $lineThickness)
1715 | }
1716 | elseif($colour -eq "Orange")
1717 | {
1718 | [System.Drawing.Pen] $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::Orange, $lineThickness)
1719 | }
1720 | elseif($colour -eq "Pink")
1721 | {
1722 | [System.Drawing.Pen] $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::Pink, $lineThickness)
1723 | }
1724 | elseif($colour -eq "Yellow")
1725 | {
1726 | [System.Drawing.Pen] $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::Yellow, $lineThickness)
1727 | }
1728 | elseif($colour -eq "White")
1729 | {
1730 | [System.Drawing.Pen] $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::White, $lineThickness)
1731 | }
1732 | elseif($colour -eq "Maroon")
1733 | {
1734 | [System.Drawing.Pen] $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::Maroon, $lineThickness)
1735 | }
1736 | elseif($colour -eq "Black")
1737 | {
1738 | [System.Drawing.Pen] $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::Black, $lineThickness)
1739 | }
1740 | else
1741 | {
1742 | [System.Drawing.Pen] $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::Red, $lineThickness)
1743 | }
1744 |
1745 | if($shape -eq "Circle")
1746 | {
1747 | $graph.DrawEllipse($pen,$1, $2, $3, $4)
1748 | }
1749 | else
1750 | {
1751 | $graph.DrawRectangle($pen,$1, $2, $3, $4)
1752 | }
1753 | }
1754 | }
1755 |
1756 | $graph.Dispose()
1757 |
1758 | $ImageHeightSetting = $ImageHeightTextBox.Value -as [int]
1759 | if($imgForGraph.Height -ne $ImageHeightSetting)
1760 | {
1761 | Write-Host "INFO: Resizing image." -foreground yellow
1762 | $imgForGraph = ResizeImageHeightRetainRatio -img $imgForGraph -heightInPixels $ImageHeightSetting
1763 | }
1764 |
1765 | $FinalImageArray += $imgForGraph
1766 | }
1767 | else
1768 | {
1769 | Write-Host "INFO: Ignoring frame $loopNo as it's outside of the start/end bounds." -foreground yellow
1770 | }
1771 | $loopNo++
1772 | }
1773 |
1774 | if($FinalImageArray -eq $null)
1775 | {
1776 | Write-Host "INFO: Canceled Dialog - Image array equals null" -foreground "yellow"
1777 | }
1778 | else
1779 | {
1780 | try {
1781 |
1782 | $fileDialog = New-Object System.Windows.Forms.SaveFileDialog
1783 | $fileDialog.FileName = "AnimatedScreenShot.gif"
1784 | $fileDialog.Title = "Save Animated GIF"
1785 | $fileDialog.Filter = "GIF (*.gif)|*.*"
1786 | $fileDialog.CheckFileExists = $false
1787 | $Show = $fileDialog.ShowDialog()
1788 | if ($Show -eq "OK")
1789 | {
1790 | [string]$filename = $fileDialog.FileName
1791 |
1792 | #Write-Host 'INFO: Creating GifWriter object' -foreground yellow
1793 |
1794 | $infiniteloops = $InfiniteLoopsCheckBox.Checked
1795 | $fileLocation = $filename
1796 | $GifWriterObject = Import-GifWriter -FileLocation $fileLocation -InfiniteLoops $infiniteloops
1797 |
1798 | foreach ($img in $FinalImageArray)
1799 | {
1800 | Write-Host "INFO: Adding image to GIF." -foreground yellow
1801 | $GifWriterObject.WriteFrame([System.Drawing.Image]$img)
1802 | $img = $null
1803 | }
1804 |
1805 | $GifWriterObject.Dispose()
1806 | $FinalImageArray = @()
1807 | Write-Output $True
1808 | }
1809 | }
1810 | catch {
1811 | Write-Host $Error[0] -foreground red
1812 | exit -1
1813 | }
1814 | }
1815 |
1816 | })
1817 |
1818 |
1819 | # Create the Cancel button.
1820 | $CancelButton = New-Object System.Windows.Forms.Button
1821 | $CancelButton.Location = New-Object System.Drawing.Size(450,385)
1822 | $CancelButton.Size = New-Object System.Drawing.Size(90,25)
1823 | $CancelButton.Anchor = [System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Left
1824 | $CancelButton.Text = "Close"
1825 | $CancelButton.tabIndex = 26
1826 | $CancelButton.Add_Click({
1827 | Write-Host "INFO: Canceled dialog" -foreground "yellow"
1828 | $form.Tag = $null
1829 | $form.Close()
1830 |
1831 | })
1832 |
1833 | # Create the form.
1834 | $form = New-Object System.Windows.Forms.Form
1835 | $form.Text = "GIF Editing Studio"
1836 | $form.Size = New-Object System.Drawing.Size(880,465)
1837 | $form.FormBorderStyle = 'FixedSingle'
1838 | $form.StartPosition = "CenterScreen"
1839 | $form.AutoSizeMode = 'GrowAndShrink'
1840 | [byte[]]$WindowIcon = @(71, 73, 70, 56, 57, 97, 32, 0, 32, 0, 231, 137, 0, 0, 52, 93, 0, 52, 94, 0, 52, 95, 0, 53, 93, 0, 53, 94, 0, 53, 95, 0,53, 96, 0, 54, 94, 0, 54, 95, 0, 54, 96, 2, 54, 95, 0, 55, 95, 1, 55, 96, 1, 55, 97, 6, 55, 96, 3, 56, 98, 7, 55, 96, 8, 55, 97, 9, 56, 102, 15, 57, 98, 17, 58, 98, 27, 61, 99, 27, 61, 100, 24, 61, 116, 32, 63, 100, 36, 65, 102, 37, 66, 103, 41, 68, 104, 48, 72, 106, 52, 75, 108, 55, 77, 108, 57, 78, 109, 58, 79, 111, 59, 79, 110, 64, 83, 114, 65, 83, 114, 68, 85, 116, 69, 86, 117, 71, 88, 116, 75, 91, 120, 81, 95, 123, 86, 99, 126, 88, 101, 125, 89, 102, 126, 90, 103, 129, 92, 103, 130, 95, 107, 132, 97, 108, 132, 99, 110, 134, 100, 111, 135, 102, 113, 136, 104, 114, 137, 106, 116, 137, 106,116, 139, 107, 116, 139, 110, 119, 139, 112, 121, 143, 116, 124, 145, 120, 128, 147, 121, 129, 148, 124, 132, 150, 125,133, 151, 126, 134, 152, 127, 134, 152, 128, 135, 152, 130, 137, 154, 131, 138, 155, 133, 140, 157, 134, 141, 158, 135,141, 158, 140, 146, 161, 143, 149, 164, 147, 152, 167, 148, 153, 168, 151, 156, 171, 153, 158, 172, 153, 158, 173, 156,160, 174, 156, 161, 174, 158, 163, 176, 159, 163, 176, 160, 165, 177, 163, 167, 180, 166, 170, 182, 170, 174, 186, 171,175, 186, 173, 176, 187, 173, 177, 187, 174, 178, 189, 176, 180, 190, 177, 181, 191, 179, 182, 192, 180, 183, 193, 182,185, 196, 185, 188, 197, 188, 191, 200, 190, 193, 201, 193, 195, 203, 193, 196, 204, 196, 198, 206, 196, 199, 207, 197,200, 207, 197, 200, 208, 198, 200, 208, 199, 201, 208, 199, 201, 209, 200, 202, 209, 200, 202, 210, 202, 204, 212, 204,206, 214, 206, 208, 215, 206, 208, 216, 208, 210, 218, 209, 210, 217, 209, 210, 220, 209, 211, 218, 210, 211, 219, 210,211, 220, 210, 212, 219, 211, 212, 219, 211, 212, 220, 212, 213, 221, 214, 215, 223, 215, 216, 223, 215, 216, 224, 216,217, 224, 217, 218, 225, 218, 219, 226, 218, 220, 226, 219, 220, 226, 219, 220, 227, 220, 221, 227, 221, 223, 228, 224,225, 231, 228, 229, 234, 230, 231, 235, 251, 251, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 33, 254, 17, 67, 114, 101, 97, 116, 101, 100, 32, 119, 105, 116, 104, 32, 71, 73, 77, 80, 0, 33, 249, 4, 1, 10, 0, 255, 0, 44, 0, 0, 0, 0, 32, 0, 32, 0, 0, 8, 254, 0, 255, 29, 24, 72, 176, 160, 193, 131, 8, 25, 60, 16, 120, 192, 195, 10, 132, 16, 35, 170, 248, 112, 160, 193, 64, 30, 135, 4, 68, 220, 72, 16, 128, 33, 32, 7, 22, 92, 68, 84, 132, 35, 71, 33, 136, 64, 18, 228, 81, 135, 206, 0, 147, 16, 7, 192, 145, 163, 242, 226, 26, 52, 53, 96, 34, 148, 161, 230, 76, 205, 3, 60, 214, 204, 72, 163, 243, 160, 25, 27, 62, 11, 6, 61, 96, 231, 68, 81, 130, 38, 240, 28, 72, 186, 114, 205, 129, 33, 94, 158, 14, 236, 66, 100, 234, 207, 165, 14, 254, 108, 120, 170, 193, 15, 4, 175, 74, 173, 30, 120, 50, 229, 169, 20, 40, 3, 169, 218, 28, 152, 33, 80, 2, 157, 6, 252, 100, 136, 251, 85, 237, 1, 46, 71,116, 26, 225, 66, 80, 46, 80, 191, 37, 244, 0, 48, 57, 32, 15, 137, 194, 125, 11, 150, 201, 97, 18, 7, 153, 130, 134, 151, 18, 140, 209, 198, 36, 27, 24, 152, 35, 23, 188, 147, 98, 35, 138, 56, 6, 51, 251, 29, 24, 4, 204, 198, 47, 63, 82, 139, 38, 168, 64, 80, 7, 136, 28, 250, 32, 144, 157, 246, 96, 19, 43, 16, 169, 44, 57, 168, 250, 32, 6, 66, 19, 14, 70, 248, 99, 129, 248, 236, 130, 90, 148, 28, 76, 130, 5, 97, 241, 131, 35, 254, 4, 40, 8, 128, 15, 8, 235, 207, 11, 88, 142, 233, 81, 112, 71, 24, 136, 215, 15, 190, 152, 67, 128, 224, 27, 22, 232, 195, 23, 180, 227, 98, 96, 11, 55, 17, 211, 31, 244, 49, 102, 160, 24, 29, 249, 201, 71, 80, 1, 131, 136, 16, 194, 30, 237, 197, 215, 91, 68, 76, 108, 145, 5, 18, 27, 233, 119, 80, 5, 133, 0, 66, 65, 132, 32, 73, 48, 16, 13, 87, 112, 20, 133, 19, 28, 85, 113, 195, 1, 23, 48, 164, 85, 68, 18, 148, 24, 16, 0, 59)
1841 |
1842 | $ico = New-Object IO.MemoryStream($WindowIcon, 0, $WindowIcon.Length)
1843 | $form.Icon = [System.Drawing.Icon]::FromHandle((new-object System.Drawing.Bitmap -argument $ico).GetHIcon())
1844 | #$form.Topmost = $True
1845 | #$form.AcceptButton = $okButton
1846 | $form.ShowInTaskbar = $true
1847 | #$form.MinimizeBox = $False
1848 | $form.Tag = $null
1849 |
1850 | $form.Controls.Add($okButton)
1851 | $form.Controls.Add($CancelButton)
1852 | $form.Controls.Add($DrawShapesLabel)
1853 | $form.Controls.Add($PictureBox)
1854 | $form.Controls.Add($ShapeLabel)
1855 | $form.Controls.Add($ShapeDropDownBox)
1856 | $form.Controls.Add($ColourLabel)
1857 | $form.Controls.Add($ColourDropDownBox)
1858 | $form.Controls.Add($RightManualButton)
1859 | $form.Controls.Add($LeftManualButton)
1860 | $form.Controls.Add($FrameNumberLabel)
1861 | $form.Controls.Add($FrameNumberNumberBox)
1862 | $form.Controls.Add($FrameNumberEndNumberLabel)
1863 | $form.Controls.Add($lv)
1864 | $form.Controls.Add($EditShapeButton)
1865 | $form.Controls.Add($DeleteShapeButton)
1866 | $form.Controls.Add($StartFrameTextBox)
1867 | $form.Controls.Add($EndFrameTextBox)
1868 | $form.Controls.Add($ShapeTextBox)
1869 | $form.Controls.Add($ColourTextBox)
1870 | $form.Controls.Add($StartXTextBox)
1871 | $form.Controls.Add($StartYTextBox)
1872 | $form.Controls.Add($WidthTextBox)
1873 | $form.Controls.Add($HeightTextBox)
1874 | $form.Controls.Add($MarkupShapeLabel)
1875 | $form.Controls.Add($ImageSizeLabel)
1876 | $form.Controls.Add($ImageHeightTextBox)
1877 | $form.Controls.Add($ImageWidthTextBox)
1878 | $form.Controls.Add($ImageSizeXLabel)
1879 | $form.Controls.Add($StartFrameImageLabel)
1880 | $form.Controls.Add($StartFrameImageNumberBox)
1881 | $form.Controls.Add($EndFrameImageLabel)
1882 | $form.Controls.Add($EndFrameImageNumberBox)
1883 | $form.Controls.Add($ExportGIFButton)
1884 | $form.Controls.Add($ResetSizeButton)
1885 | $form.Controls.Add($InfiniteLoopsLabel)
1886 | $form.Controls.Add($InfiniteLoopsCheckBox)
1887 |
1888 |
1889 | # Initialize and show the form.
1890 | $form.Add_Shown({$form.Activate()})
1891 | $form.ShowDialog() > $null # Trash the text of the button that was clicked.
1892 |
1893 | }
1894 |
1895 | function ResizeImageHeightRetainRatio([System.Drawing.Image] $img, [int] $heightInPixels)
1896 | {
1897 | Write-Host "INFO: Resizing image to height: $heightInPixels" -foreground yellow
1898 | $imgWidth = $img.Width
1899 | $imgHeight = $img.Height
1900 | $ratio = $heightInPixels / $imgHeight
1901 | [int] $widthInPixels = $imgWidth*$ratio
1902 | $imgResized = New-Object System.Drawing.Bitmap([int]($imgWidth*$ratio), $heightInPixels)
1903 | $graph = [System.Drawing.Graphics]::FromImage($imgResized)
1904 |
1905 | $graph.Clear([System.Drawing.Color]::White)
1906 | $rectangle = New-Object System.Drawing.Rectangle(0, 0, $widthInPixels, $heightInPixels)
1907 |
1908 | $graph.InterpolationMode = [System.Drawing.Drawing2D.InterpolationMode]::HighQualityBicubic
1909 | $graph.SmoothingMode = [System.Drawing.Drawing2D.SmoothingMode]::HighQuality
1910 | $graph.CompositingQuality = [System.Drawing.Drawing2D.CompositingQuality]::HighQuality
1911 | $graph.PixelOffsetMode = [System.Drawing.Drawing2D.PixelOffsetMode]::HighQuality
1912 | $graph.DrawImage($img,$rectangle, 0,0, $imgWidth, $imgHeight, [System.Drawing.GraphicsUnit]::Pixel)
1913 |
1914 | $img.Dispose()
1915 | return $imgResized
1916 | }
1917 |
1918 | function SaveImageFile([System.Drawing.Image] $bmp)
1919 | {
1920 |
1921 | Write-Host "Saving Image..." -foreground "yellow"
1922 | #File Dialog
1923 | $objFileForm = New-Object System.Windows.Forms.SaveFileDialog
1924 | $objFileForm.FileName = "ScreenShot.jpg"
1925 | $objFileForm.Title = "Save Image"
1926 | $objFileForm.Filter = "JPG (*.jpg)|*.*"
1927 | $objFileForm.CheckFileExists = $false
1928 | $Show = $objFileForm.ShowDialog()
1929 | if ($Show -eq "OK")
1930 | {
1931 | [string]$imageTarget = $objFileForm.FileName
1932 |
1933 | Write-Host "Output File: $imageTarget" -foreground "green"
1934 | [int]$quality = 95
1935 |
1936 | #Encoder parameter for image quality
1937 | $myEncoder = [System.Drawing.Imaging.Encoder]::Quality
1938 | $encoderParams = New-Object System.Drawing.Imaging.EncoderParameters(1)
1939 | $encoderParams.Param[0] = New-Object System.Drawing.Imaging.EncoderParameter($myEncoder, $quality)
1940 | # get codec
1941 | $myImageCodecInfo = [System.Drawing.Imaging.ImageCodecInfo]::GetImageEncoders()|where {$_.MimeType -eq 'image/jpeg'}
1942 |
1943 | #save to file
1944 | $bmp.Save($imageTarget,$myImageCodecInfo, $($encoderParams))
1945 | $bmp.Dispose()
1946 |
1947 | }
1948 | else
1949 | {
1950 | Write-Host "INFO: Canceled save image dialog..." -foreground "Yellow"
1951 | return
1952 | }
1953 | }
1954 |
1955 |
1956 | function Import-GifWriter {
1957 | Param (
1958 | [parameter(ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)]
1959 | [ValidateNotNullOrEmpty()]
1960 | [string] $FileLocation,
1961 | [bool] $InfiniteLoops = $true
1962 | )
1963 |
1964 | #https://stackoverflow.com/questions/1196322/how-to-create-an-animated-gif-in-net
1965 | $GifWriter = @'
1966 | using System;
1967 | using System.Drawing;
1968 | using System.Drawing.Imaging;
1969 | using System.IO;
1970 | using System.Threading.Tasks;
1971 |
1972 | ///
1973 | /// Creates a GIF using .Net GIF encoding and additional animation headers.
1974 | ///
1975 |
1976 | public class GifWriter
1977 | {
1978 | #region Fields
1979 | const long SourceGlobalColorInfoPosition = 10, SourceImageBlockPosition = 789;
1980 |
1981 | readonly BinaryWriter _writer;
1982 | bool _firstFrame = true;
1983 | readonly object _syncLock = new object();
1984 | #endregion
1985 |
1986 | ///
1987 | /// Creates a new instance of GifWriter.
1988 | ///
1989 | /// The to output the Gif to.
1990 | /// Default Delay between consecutive frames... FrameRate = 1000 / DefaultFrameDelay.
1991 | /// No of times the Gif should repeat... -1 to repeat indefinitely.
1992 | public GifWriter(Stream OutStream, int DefaultFrameDelay = 500, int Repeat = -1)
1993 | {
1994 | if (OutStream == null)
1995 | throw new ArgumentNullException("OutStream");
1996 |
1997 | if (DefaultFrameDelay <= 0)
1998 | throw new ArgumentOutOfRangeException("DefaultFrameDelay");
1999 |
2000 | if (Repeat < -1)
2001 | throw new ArgumentOutOfRangeException("Repeat");
2002 |
2003 | _writer = new BinaryWriter(OutStream);
2004 | this.DefaultFrameDelay = DefaultFrameDelay;
2005 | this.Repeat = Repeat;
2006 | }
2007 |
2008 | ///
2009 | /// Creates a new instance of GifWriter.
2010 | ///
2011 | /// The path to the file to output the Gif to.
2012 | /// Default Delay between consecutive frames... FrameRate = 1000 / DefaultFrameDelay.
2013 | /// No of times the Gif should repeat... -1 to repeat indefinitely.
2014 | public GifWriter(string FileName, int DefaultFrameDelay = 500, int Repeat = -1)
2015 | : this(new FileStream(FileName, FileMode.OpenOrCreate, FileAccess.Write, FileShare.Read), DefaultFrameDelay, Repeat) { }
2016 |
2017 | #region Properties
2018 | ///
2019 | /// Gets or Sets the Default Width of a Frame. Used when unspecified.
2020 | ///
2021 | public int DefaultWidth { get; set; }
2022 |
2023 | ///
2024 | /// Gets or Sets the Default Height of a Frame. Used when unspecified.
2025 | ///
2026 | public int DefaultHeight { get; set; }
2027 |
2028 | ///
2029 | /// Gets or Sets the Default Delay in Milliseconds.
2030 | ///
2031 | public int DefaultFrameDelay { get; set; }
2032 |
2033 | ///
2034 | /// The Number of Times the Animation must repeat.
2035 | /// -1 indicates no repeat. 0 indicates repeat indefinitely
2036 | ///
2037 | public int Repeat { get; set; }
2038 | #endregion
2039 |
2040 | ///
2041 | /// Adds a frame to this animation.
2042 | ///
2043 | /// The image to add
2044 | /// Delay in Milliseconds between this and last frame... 0 =
2045 | public void WriteFrame(Image Image, int Delay = 0)
2046 | {
2047 | lock (_syncLock)
2048 | using (var gifStream = new MemoryStream())
2049 | {
2050 | Image.Save(gifStream, ImageFormat.Gif);
2051 |
2052 | // Steal the global color table info
2053 | if (_firstFrame)
2054 | InitHeader(gifStream, _writer, Image.Width, Image.Height);
2055 |
2056 | WriteGraphicControlBlock(gifStream, _writer, Delay == 0 ? DefaultFrameDelay : Delay);
2057 | WriteImageBlock(gifStream, _writer, !_firstFrame, 0, 0, Image.Width, Image.Height);
2058 | }
2059 |
2060 | if (_firstFrame)
2061 | _firstFrame = false;
2062 | }
2063 |
2064 | #region Write
2065 | void InitHeader(Stream SourceGif, BinaryWriter Writer, int Width, int Height)
2066 | {
2067 | // File Header
2068 | Writer.Write("GIF".ToCharArray()); // File type
2069 | Writer.Write("89a".ToCharArray()); // File Version
2070 |
2071 | Writer.Write((short)(DefaultWidth == 0 ? Width : DefaultWidth)); // Initial Logical Width
2072 | Writer.Write((short)(DefaultHeight == 0 ? Height : DefaultHeight)); // Initial Logical Height
2073 |
2074 | SourceGif.Position = SourceGlobalColorInfoPosition;
2075 | Writer.Write((byte)SourceGif.ReadByte()); // Global Color Table Info
2076 | Writer.Write((byte)0); // Background Color Index
2077 | Writer.Write((byte)0); // Pixel aspect ratio
2078 | WriteColorTable(SourceGif, Writer);
2079 |
2080 | // App Extension Header for Repeating
2081 | if (Repeat == -1)
2082 | return;
2083 |
2084 | Writer.Write(unchecked((short)0xff21)); // Application Extension Block Identifier
2085 | Writer.Write((byte)0x0b); // Application Block Size
2086 | Writer.Write("NETSCAPE2.0".ToCharArray()); // Application Identifier
2087 | Writer.Write((byte)3); // Application block length
2088 | Writer.Write((byte)1);
2089 | Writer.Write((short)Repeat); // Repeat count for images.
2090 | Writer.Write((byte)0); // terminator
2091 | }
2092 |
2093 | static void WriteColorTable(Stream SourceGif, BinaryWriter Writer)
2094 | {
2095 | SourceGif.Position = 13; // Locating the image color table
2096 | var colorTable = new byte[768];
2097 | SourceGif.Read(colorTable, 0, colorTable.Length);
2098 | Writer.Write(colorTable, 0, colorTable.Length);
2099 | }
2100 |
2101 | static void WriteGraphicControlBlock(Stream SourceGif, BinaryWriter Writer, int FrameDelay)
2102 | {
2103 | SourceGif.Position = 781; // Locating the source GCE
2104 | var blockhead = new byte[8];
2105 | SourceGif.Read(blockhead, 0, blockhead.Length); // Reading source GCE
2106 |
2107 | Writer.Write(unchecked((short)0xf921)); // Identifier
2108 | Writer.Write((byte)0x04); // Block Size
2109 | Writer.Write((byte)(blockhead[3] & 0xf7 | 0x08)); // Setting disposal flag
2110 | Writer.Write((short)(FrameDelay / 10)); // Setting frame delay
2111 | Writer.Write(blockhead[6]); // Transparent color index
2112 | Writer.Write((byte)0); // Terminator
2113 | }
2114 |
2115 | static void WriteImageBlock(Stream SourceGif, BinaryWriter Writer, bool IncludeColorTable, int X, int Y, int Width, int Height)
2116 | {
2117 | SourceGif.Position = SourceImageBlockPosition; // Locating the image block
2118 | var header = new byte[11];
2119 | SourceGif.Read(header, 0, header.Length);
2120 | Writer.Write(header[0]); // Separator
2121 | Writer.Write((short)X); // Position X
2122 | Writer.Write((short)Y); // Position Y
2123 | Writer.Write((short)Width); // Width
2124 | Writer.Write((short)Height); // Height
2125 |
2126 | if (IncludeColorTable) // If first frame, use global color table - else use local
2127 | {
2128 | SourceGif.Position = SourceGlobalColorInfoPosition;
2129 | Writer.Write((byte)(SourceGif.ReadByte() & 0x3f | 0x80)); // Enabling local color table
2130 | WriteColorTable(SourceGif, Writer);
2131 | }
2132 | else Writer.Write((byte)(header[9] & 0x07 | 0x07)); // Disabling local color table
2133 |
2134 | Writer.Write(header[10]); // LZW Min Code Size
2135 |
2136 | // Read/Write image data
2137 | SourceGif.Position = SourceImageBlockPosition + header.Length;
2138 |
2139 | var dataLength = SourceGif.ReadByte();
2140 | while (dataLength > 0)
2141 | {
2142 | var imgData = new byte[dataLength];
2143 | SourceGif.Read(imgData, 0, dataLength);
2144 |
2145 | Writer.Write((byte)dataLength);
2146 | Writer.Write(imgData, 0, dataLength);
2147 | dataLength = SourceGif.ReadByte();
2148 | }
2149 |
2150 | Writer.Write((byte)0); // Terminator
2151 | }
2152 | #endregion
2153 |
2154 | ///
2155 | /// Frees all resources used by this object.
2156 | ///
2157 | public void Dispose()
2158 | {
2159 | // Complete File
2160 | _writer.Write((byte)0x3b); // File Trailer
2161 |
2162 | _writer.BaseStream.Dispose();
2163 | _writer.Dispose();
2164 | }
2165 | }
2166 | '@
2167 |
2168 | Write-Host 'INFO: Adding GifWriter Class Assembly' -foreground yellow
2169 | try {
2170 |
2171 | if($DotNetCoreCommands)
2172 | {
2173 | Add-Type $GifWriter -ReferencedAssemblies 'System.Windows.Forms', 'System.Drawing', 'System.Drawing.Common', 'System.Threading'
2174 | }
2175 | else
2176 | {
2177 | Add-Type $GifWriter -ReferencedAssemblies 'System.Windows.Forms', 'System.Drawing', 'System.Threading'
2178 | }
2179 |
2180 | Write-Host "INFO: Saving GIF to file location: $FileLocation" -foreground green
2181 | if($InfiniteLoops)
2182 | {
2183 | $GifWriterObject = [GifWriter]::new($FileLocation,500,0)
2184 | }
2185 | else
2186 | {
2187 | $GifWriterObject = [GifWriter]::new($FileLocation,500,-1)
2188 | }
2189 |
2190 | Write-Host 'INFO: Returning GifWriter object' -foreground yellow
2191 |
2192 | Write-Output $GifWriterObject
2193 | }
2194 | catch {
2195 | Write-Host $Error[0] -foreground red
2196 | }
2197 | }
2198 |
2199 | # Activate the form ============================================================
2200 | $objForm.Add_Shown({$objForm.Activate()})
2201 | [void] $objForm.ShowDialog()
2202 |
2203 |
2204 | # SIG # Begin signature block
2205 | # MIIjVgYJKoZIhvcNAQcCoIIjRzCCI0MCAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB
2206 | # gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR
2207 | # AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQULXs5HFXCEPkKAYAeyk710Kfk
2208 | # //Gggh10MIIFMDCCBBigAwIBAgIQBAkYG1/Vu2Z1U0O1b5VQCDANBgkqhkiG9w0B
2209 | # AQsFADBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYD
2210 | # VQQLExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVk
2211 | # IElEIFJvb3QgQ0EwHhcNMTMxMDIyMTIwMDAwWhcNMjgxMDIyMTIwMDAwWjByMQsw
2212 | # CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu
2213 | # ZGlnaWNlcnQuY29tMTEwLwYDVQQDEyhEaWdpQ2VydCBTSEEyIEFzc3VyZWQgSUQg
2214 | # Q29kZSBTaWduaW5nIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
2215 | # +NOzHH8OEa9ndwfTCzFJGc/Q+0WZsTrbRPV/5aid2zLXcep2nQUut4/6kkPApfmJ
2216 | # 1DcZ17aq8JyGpdglrA55KDp+6dFn08b7KSfH03sjlOSRI5aQd4L5oYQjZhJUM1B0
2217 | # sSgmuyRpwsJS8hRniolF1C2ho+mILCCVrhxKhwjfDPXiTWAYvqrEsq5wMWYzcT6s
2218 | # cKKrzn/pfMuSoeU7MRzP6vIK5Fe7SrXpdOYr/mzLfnQ5Ng2Q7+S1TqSp6moKq4Tz
2219 | # rGdOtcT3jNEgJSPrCGQ+UpbB8g8S9MWOD8Gi6CxR93O8vYWxYoNzQYIH5DiLanMg
2220 | # 0A9kczyen6Yzqf0Z3yWT0QIDAQABo4IBzTCCAckwEgYDVR0TAQH/BAgwBgEB/wIB
2221 | # ADAOBgNVHQ8BAf8EBAMCAYYwEwYDVR0lBAwwCgYIKwYBBQUHAwMweQYIKwYBBQUH
2222 | # AQEEbTBrMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20wQwYI
2223 | # KwYBBQUHMAKGN2h0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFz
2224 | # c3VyZWRJRFJvb3RDQS5jcnQwgYEGA1UdHwR6MHgwOqA4oDaGNGh0dHA6Ly9jcmw0
2225 | # LmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5jcmwwOqA4oDaG
2226 | # NGh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RD
2227 | # QS5jcmwwTwYDVR0gBEgwRjA4BgpghkgBhv1sAAIEMCowKAYIKwYBBQUHAgEWHGh0
2228 | # dHBzOi8vd3d3LmRpZ2ljZXJ0LmNvbS9DUFMwCgYIYIZIAYb9bAMwHQYDVR0OBBYE
2229 | # FFrEuXsqCqOl6nEDwGD5LfZldQ5YMB8GA1UdIwQYMBaAFEXroq/0ksuCMS1Ri6en
2230 | # IZ3zbcgPMA0GCSqGSIb3DQEBCwUAA4IBAQA+7A1aJLPzItEVyCx8JSl2qB1dHC06
2231 | # GsTvMGHXfgtg/cM9D8Svi/3vKt8gVTew4fbRknUPUbRupY5a4l4kgU4QpO4/cY5j
2232 | # DhNLrddfRHnzNhQGivecRk5c/5CxGwcOkRX7uq+1UcKNJK4kxscnKqEpKBo6cSgC
2233 | # PC6Ro8AlEeKcFEehemhor5unXCBc2XGxDI+7qPjFEmifz0DLQESlE/DmZAwlCEIy
2234 | # sjaKJAL+L3J+HNdJRZboWR3p+nRka7LrZkPas7CM1ekN3fYBIM6ZMWM9CBoYs4Gb
2235 | # T8aTEAb8B4H6i9r5gkn3Ym6hU/oSlBiFLpKR6mhsRDKyZqHnGKSaZFHvMIIFNTCC
2236 | # BB2gAwIBAgIQCjSHIb+9FkHaGapmaAdBYDANBgkqhkiG9w0BAQsFADByMQswCQYD
2237 | # VQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGln
2238 | # aWNlcnQuY29tMTEwLwYDVQQDEyhEaWdpQ2VydCBTSEEyIEFzc3VyZWQgSUQgQ29k
2239 | # ZSBTaWduaW5nIENBMB4XDTIwMDEwNjAwMDAwMFoXDTIzMDExMDEyMDAwMFowcjEL
2240 | # MAkGA1UEBhMCQVUxDDAKBgNVBAgTA1ZJQzEQMA4GA1UEBxMHTWl0Y2hhbTEVMBMG
2241 | # A1UEChMMSmFtZXMgQ3Vzc2VuMRUwEwYDVQQLEwxKYW1lcyBDdXNzZW4xFTATBgNV
2242 | # BAMTDEphbWVzIEN1c3NlbjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
2243 | # AM3q0UPJQVPnA/Y1s0Fe4trGhjc16182jZBFJFHWW3pueKrpZaRkMKegW9IcxBbD
2244 | # yGj0ne/epCL70AnW9lulTPc6eWcWY/HSIed/X6K9jVuwL/JI4/qqavoHg+wRloS1
2245 | # ynTEXX3VWYH/YYFovhTr/myR6eTAiovaTVhIvJoL2kWXdhbhie/kZWKWIRmpmDcP
2246 | # Smld9v0/bdjJu2/QLNY5bLPv2Y2vibG+UaQxX4Ul+XihtRcvE9EJ2hLyZtC469ig
2247 | # 9hPQAJgfemWpTbsIaj6HIhFH5U1Mq5kpWMPR8RWenFl7x4nXF5xVvXsR6WrFwtmo
2248 | # MMWM2LPhaqGy+nA8NufJInUCAwEAAaOCAcUwggHBMB8GA1UdIwQYMBaAFFrEuXsq
2249 | # CqOl6nEDwGD5LfZldQ5YMB0GA1UdDgQWBBT+fAtBa1j45lF9yIVym7Yzj/FB0DAO
2250 | # BgNVHQ8BAf8EBAMCB4AwEwYDVR0lBAwwCgYIKwYBBQUHAwMwdwYDVR0fBHAwbjA1
2251 | # oDOgMYYvaHR0cDovL2NybDMuZGlnaWNlcnQuY29tL3NoYTItYXNzdXJlZC1jcy1n
2252 | # MS5jcmwwNaAzoDGGL2h0dHA6Ly9jcmw0LmRpZ2ljZXJ0LmNvbS9zaGEyLWFzc3Vy
2253 | # ZWQtY3MtZzEuY3JsMEwGA1UdIARFMEMwNwYJYIZIAYb9bAMBMCowKAYIKwYBBQUH
2254 | # AgEWHGh0dHBzOi8vd3d3LmRpZ2ljZXJ0LmNvbS9DUFMwCAYGZ4EMAQQBMIGEBggr
2255 | # BgEFBQcBAQR4MHYwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2ljZXJ0LmNv
2256 | # bTBOBggrBgEFBQcwAoZCaHR0cDovL2NhY2VydHMuZGlnaWNlcnQuY29tL0RpZ2lD
2257 | # ZXJ0U0hBMkFzc3VyZWRJRENvZGVTaWduaW5nQ0EuY3J0MAwGA1UdEwEB/wQCMAAw
2258 | # DQYJKoZIhvcNAQELBQADggEBAHwUySCXpI9ILpmOBI+3G0hy52zIdIaw16wGlMRW
2259 | # nSyYCjApfDdGDrkf+VcOL6Ar4Frhb9XVTp7O5Wc7v2PU/5D6jacVc8Szuo2Qzd8x
2260 | # D5qbdhNZ6npS9wXQRdHhCvIvJhJKxXYvEIE9VYao3kTgiylJvDfdvMDN4gRIx/aR
2261 | # ckJQQzRxYIhbfR/zV4RSeSHwvMg827e2v/YVcLXFjFsoMb0ioy+qQkwFwVz1mo4l
2262 | # PnXXFelUbN0LkWLHsdAxqwATNQHA150SmTpS7tm4Ye2m23lgVlwgGgR2JghWz6bK
2263 | # VI+nm+UfACOdvpXnjBIIDyMNUl9tRx4eo6xyxfUSVASQ3kswggWNMIIEdaADAgEC
2264 | # AhAOmxiO+dAt5+/bUOIIQBhaMA0GCSqGSIb3DQEBDAUAMGUxCzAJBgNVBAYTAlVT
2265 | # MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
2266 | # b20xJDAiBgNVBAMTG0RpZ2lDZXJ0IEFzc3VyZWQgSUQgUm9vdCBDQTAeFw0yMjA4
2267 | # MDEwMDAwMDBaFw0zMTExMDkyMzU5NTlaMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQK
2268 | # EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNV
2269 | # BAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDCCAiIwDQYJKoZIhvcNAQEBBQAD
2270 | # ggIPADCCAgoCggIBAL/mkHNo3rvkXUo8MCIwaTPswqclLskhPfKK2FnC4SmnPVir
2271 | # dprNrnsbhA3EMB/zG6Q4FutWxpdtHauyefLKEdLkX9YFPFIPUh/GnhWlfr6fqVcW
2272 | # WVVyr2iTcMKyunWZanMylNEQRBAu34LzB4TmdDttceItDBvuINXJIB1jKS3O7F5O
2273 | # yJP4IWGbNOsFxl7sWxq868nPzaw0QF+xembud8hIqGZXV59UWI4MK7dPpzDZVu7K
2274 | # e13jrclPXuU15zHL2pNe3I6PgNq2kZhAkHnDeMe2scS1ahg4AxCN2NQ3pC4FfYj1
2275 | # gj4QkXCrVYJBMtfbBHMqbpEBfCFM1LyuGwN1XXhm2ToxRJozQL8I11pJpMLmqaBn
2276 | # 3aQnvKFPObURWBf3JFxGj2T3wWmIdph2PVldQnaHiZdpekjw4KISG2aadMreSx7n
2277 | # DmOu5tTvkpI6nj3cAORFJYm2mkQZK37AlLTSYW3rM9nF30sEAMx9HJXDj/chsrIR
2278 | # t7t/8tWMcCxBYKqxYxhElRp2Yn72gLD76GSmM9GJB+G9t+ZDpBi4pncB4Q+UDCEd
2279 | # slQpJYls5Q5SUUd0viastkF13nqsX40/ybzTQRESW+UQUOsxxcpyFiIJ33xMdT9j
2280 | # 7CFfxCBRa2+xq4aLT8LWRV+dIPyhHsXAj6KxfgommfXkaS+YHS312amyHeUbAgMB
2281 | # AAGjggE6MIIBNjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTs1+OC0nFdZEzf
2282 | # Lmc/57qYrhwPTzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzAOBgNV
2283 | # HQ8BAf8EBAMCAYYweQYIKwYBBQUHAQEEbTBrMCQGCCsGAQUFBzABhhhodHRwOi8v
2284 | # b2NzcC5kaWdpY2VydC5jb20wQwYIKwYBBQUHMAKGN2h0dHA6Ly9jYWNlcnRzLmRp
2285 | # Z2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5jcnQwRQYDVR0fBD4w
2286 | # PDA6oDigNoY0aHR0cDovL2NybDMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0QXNzdXJl
2287 | # ZElEUm9vdENBLmNybDARBgNVHSAECjAIMAYGBFUdIAAwDQYJKoZIhvcNAQEMBQAD
2288 | # ggEBAHCgv0NcVec4X6CjdBs9thbX979XB72arKGHLOyFXqkauyL4hxppVCLtpIh3
2289 | # bb0aFPQTSnovLbc47/T/gLn4offyct4kvFIDyE7QKt76LVbP+fT3rDB6mouyXtTP
2290 | # 0UNEm0Mh65ZyoUi0mcudT6cGAxN3J0TU53/oWajwvy8LpunyNDzs9wPHh6jSTEAZ
2291 | # NUZqaVSwuKFWjuyk1T3osdz9HNj0d1pcVIxv76FQPfx2CWiEn2/K2yCNNWAcAgPL
2292 | # ILCsWKAOQGPFmCLBsln1VWvPJ6tsds5vIy30fnFqI2si/xK4VC0nftg62fC2h5b9
2293 | # W9FcrBjDTZ9ztwGpn1eqXijiuZQwggauMIIElqADAgECAhAHNje3JFR82Ees/Shm
2294 | # Kl5bMA0GCSqGSIb3DQEBCwUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdp
2295 | # Q2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNVBAMTGERp
2296 | # Z2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDAeFw0yMjAzMjMwMDAwMDBaFw0zNzAzMjIy
2297 | # MzU5NTlaMGMxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjE7
2298 | # MDkGA1UEAxMyRGlnaUNlcnQgVHJ1c3RlZCBHNCBSU0E0MDk2IFNIQTI1NiBUaW1l
2299 | # U3RhbXBpbmcgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDGhjUG
2300 | # SbPBPXJJUVXHJQPE8pE3qZdRodbSg9GeTKJtoLDMg/la9hGhRBVCX6SI82j6ffOc
2301 | # iQt/nR+eDzMfUBMLJnOWbfhXqAJ9/UO0hNoR8XOxs+4rgISKIhjf69o9xBd/qxkr
2302 | # PkLcZ47qUT3w1lbU5ygt69OxtXXnHwZljZQp09nsad/ZkIdGAHvbREGJ3HxqV3rw
2303 | # N3mfXazL6IRktFLydkf3YYMZ3V+0VAshaG43IbtArF+y3kp9zvU5EmfvDqVjbOSm
2304 | # xR3NNg1c1eYbqMFkdECnwHLFuk4fsbVYTXn+149zk6wsOeKlSNbwsDETqVcplicu
2305 | # 9Yemj052FVUmcJgmf6AaRyBD40NjgHt1biclkJg6OBGz9vae5jtb7IHeIhTZgirH
2306 | # kr+g3uM+onP65x9abJTyUpURK1h0QCirc0PO30qhHGs4xSnzyqqWc0Jon7ZGs506
2307 | # o9UD4L/wojzKQtwYSH8UNM/STKvvmz3+DrhkKvp1KCRB7UK/BZxmSVJQ9FHzNklN
2308 | # iyDSLFc1eSuo80VgvCONWPfcYd6T/jnA+bIwpUzX6ZhKWD7TA4j+s4/TXkt2ElGT
2309 | # yYwMO1uKIqjBJgj5FBASA31fI7tk42PgpuE+9sJ0sj8eCXbsq11GdeJgo1gJASgA
2310 | # DoRU7s7pXcheMBK9Rp6103a50g5rmQzSM7TNsQIDAQABo4IBXTCCAVkwEgYDVR0T
2311 | # AQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUuhbZbU2FL3MpdpovdYxqII+eyG8wHwYD
2312 | # VR0jBBgwFoAU7NfjgtJxXWRM3y5nP+e6mK4cD08wDgYDVR0PAQH/BAQDAgGGMBMG
2313 | # A1UdJQQMMAoGCCsGAQUFBwMIMHcGCCsGAQUFBwEBBGswaTAkBggrBgEFBQcwAYYY
2314 | # aHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEEGCCsGAQUFBzAChjVodHRwOi8vY2Fj
2315 | # ZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNydDBDBgNV
2316 | # HR8EPDA6MDigNqA0hjJodHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRU
2317 | # cnVzdGVkUm9vdEc0LmNybDAgBgNVHSAEGTAXMAgGBmeBDAEEAjALBglghkgBhv1s
2318 | # BwEwDQYJKoZIhvcNAQELBQADggIBAH1ZjsCTtm+YqUQiAX5m1tghQuGwGC4QTRPP
2319 | # MFPOvxj7x1Bd4ksp+3CKDaopafxpwc8dB+k+YMjYC+VcW9dth/qEICU0MWfNthKW
2320 | # b8RQTGIdDAiCqBa9qVbPFXONASIlzpVpP0d3+3J0FNf/q0+KLHqrhc1DX+1gtqpP
2321 | # kWaeLJ7giqzl/Yy8ZCaHbJK9nXzQcAp876i8dU+6WvepELJd6f8oVInw1YpxdmXa
2322 | # zPByoyP6wCeCRK6ZJxurJB4mwbfeKuv2nrF5mYGjVoarCkXJ38SNoOeY+/umnXKv
2323 | # xMfBwWpx2cYTgAnEtp/Nh4cku0+jSbl3ZpHxcpzpSwJSpzd+k1OsOx0ISQ+UzTl6
2324 | # 3f8lY5knLD0/a6fxZsNBzU+2QJshIUDQtxMkzdwdeDrknq3lNHGS1yZr5Dhzq6YB
2325 | # T70/O3itTK37xJV77QpfMzmHQXh6OOmc4d0j/R0o08f56PGYX/sr2H7yRp11LB4n
2326 | # LCbbbxV7HhmLNriT1ObyF5lZynDwN7+YAN8gFk8n+2BnFqFmut1VwDophrCYoCvt
2327 | # lUG3OtUVmDG0YgkPCr2B2RP+v6TR81fZvAT6gt4y3wSJ8ADNXcL50CN/AAvkdgIm
2328 | # 2fBldkKmKYcJRyvmfxqkhQ/8mJb2VVQrH4D6wPIOK+XW+6kvRBVK5xMOHds3OBqh
2329 | # K/bt1nz8MIIGwDCCBKigAwIBAgIQDE1pckuU+jwqSj0pB4A9WjANBgkqhkiG9w0B
2330 | # AQsFADBjMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xOzA5
2331 | # BgNVBAMTMkRpZ2lDZXJ0IFRydXN0ZWQgRzQgUlNBNDA5NiBTSEEyNTYgVGltZVN0
2332 | # YW1waW5nIENBMB4XDTIyMDkyMTAwMDAwMFoXDTMzMTEyMTIzNTk1OVowRjELMAkG
2333 | # A1UEBhMCVVMxETAPBgNVBAoTCERpZ2lDZXJ0MSQwIgYDVQQDExtEaWdpQ2VydCBU
2334 | # aW1lc3RhbXAgMjAyMiAtIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
2335 | # AQDP7KUmOsap8mu7jcENmtuh6BSFdDMaJqzQHFUeHjZtvJJVDGH0nQl3PRWWCC9r
2336 | # ZKT9BoMW15GSOBwxApb7crGXOlWvM+xhiummKNuQY1y9iVPgOi2Mh0KuJqTku3h4
2337 | # uXoW4VbGwLpkU7sqFudQSLuIaQyIxvG+4C99O7HKU41Agx7ny3JJKB5MgB6FVueF
2338 | # 7fJhvKo6B332q27lZt3iXPUv7Y3UTZWEaOOAy2p50dIQkUYp6z4m8rSMzUy5Zsi7
2339 | # qlA4DeWMlF0ZWr/1e0BubxaompyVR4aFeT4MXmaMGgokvpyq0py2909ueMQoP6Mc
2340 | # D1AGN7oI2TWmtR7aeFgdOej4TJEQln5N4d3CraV++C0bH+wrRhijGfY59/XBT3Eu
2341 | # iQMRoku7mL/6T+R7Nu8GRORV/zbq5Xwx5/PCUsTmFntafqUlc9vAapkhLWPlWfVN
2342 | # L5AfJ7fSqxTlOGaHUQhr+1NDOdBk+lbP4PQK5hRtZHi7mP2Uw3Mh8y/CLiDXgazT
2343 | # 8QfU4b3ZXUtuMZQpi+ZBpGWUwFjl5S4pkKa3YWT62SBsGFFguqaBDwklU/G/O+mr
2344 | # Bw5qBzliGcnWhX8T2Y15z2LF7OF7ucxnEweawXjtxojIsG4yeccLWYONxu71LHx7
2345 | # jstkifGxxLjnU15fVdJ9GSlZA076XepFcxyEftfO4tQ6dwIDAQABo4IBizCCAYcw
2346 | # DgYDVR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwFgYDVR0lAQH/BAwwCgYIKwYB
2347 | # BQUHAwgwIAYDVR0gBBkwFzAIBgZngQwBBAIwCwYJYIZIAYb9bAcBMB8GA1UdIwQY
2348 | # MBaAFLoW2W1NhS9zKXaaL3WMaiCPnshvMB0GA1UdDgQWBBRiit7QYfyPMRTtlwvN
2349 | # PSqUFN9SnDBaBgNVHR8EUzBRME+gTaBLhklodHRwOi8vY3JsMy5kaWdpY2VydC5j
2350 | # b20vRGlnaUNlcnRUcnVzdGVkRzRSU0E0MDk2U0hBMjU2VGltZVN0YW1waW5nQ0Eu
2351 | # Y3JsMIGQBggrBgEFBQcBAQSBgzCBgDAkBggrBgEFBQcwAYYYaHR0cDovL29jc3Au
2352 | # ZGlnaWNlcnQuY29tMFgGCCsGAQUFBzAChkxodHRwOi8vY2FjZXJ0cy5kaWdpY2Vy
2353 | # dC5jb20vRGlnaUNlcnRUcnVzdGVkRzRSU0E0MDk2U0hBMjU2VGltZVN0YW1waW5n
2354 | # Q0EuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBVqioa80bzeFc3MPx140/WhSPx/PmV
2355 | # OZsl5vdyipjDd9Rk/BX7NsJJUSx4iGNVCUY5APxp1MqbKfujP8DJAJsTHbCYidx4
2356 | # 8s18hc1Tna9i4mFmoxQqRYdKmEIrUPwbtZ4IMAn65C3XCYl5+QnmiM59G7hqopvB
2357 | # U2AJ6KO4ndetHxy47JhB8PYOgPvk/9+dEKfrALpfSo8aOlK06r8JSRU1NlmaD1TS
2358 | # sht/fl4JrXZUinRtytIFZyt26/+YsiaVOBmIRBTlClmia+ciPkQh0j8cwJvtfEiy
2359 | # 2JIMkU88ZpSvXQJT657inuTTH4YBZJwAwuladHUNPeF5iL8cAZfJGSOA1zZaX5YW
2360 | # sWMMxkZAO85dNdRZPkOaGK7DycvD+5sTX2q1x+DzBcNZ3ydiK95ByVO5/zQQZ/Ym
2361 | # Mph7/lxClIGUgp2sCovGSxVK05iQRWAzgOAj3vgDpPZFR+XOuANCR+hBNnF3rf2i
2362 | # 6Jd0Ti7aHh2MWsgemtXC8MYiqE+bvdgcmlHEL5r2X6cnl7qWLoVXwGDneFZ/au/C
2363 | # lZpLEQLIgpzJGgV8unG1TnqZbPTontRamMifv427GFxD9dAq6OJi7ngE273R+1sK
2364 | # qHB+8JeEeOMIA11HLGOoJTiXAdI/Otrl5fbmm9x+LMz/F0xNAKLY1gEOuIvu5uBy
2365 | # VYksJxlh9ncBjDGCBUwwggVIAgEBMIGGMHIxCzAJBgNVBAYTAlVTMRUwEwYDVQQK
2366 | # EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xMTAvBgNV
2367 | # BAMTKERpZ2lDZXJ0IFNIQTIgQXNzdXJlZCBJRCBDb2RlIFNpZ25pbmcgQ0ECEAo0
2368 | # hyG/vRZB2hmqZmgHQWAwCQYFKw4DAhoFAKB4MBgGCisGAQQBgjcCAQwxCjAIoAKA
2369 | # AKECgAAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEO
2370 | # MAwGCisGAQQBgjcCARUwIwYJKoZIhvcNAQkEMRYEFKnLiLiz5ovsU3+y4LkZN3IL
2371 | # pFugMA0GCSqGSIb3DQEBAQUABIIBAEd32ZEbtkmcep+IrWVqVZvNTnFqB2+z3dVr
2372 | # dWZAjxhCyokHElaiiuWlBem+adR0O/jSrQqoCQQSqWWl4hLE/jLIoS7ALl7CGO/U
2373 | # 4v8c9obazEihNZ0okTPjBI31aDYSLN+GrCg1qMydl5OYo+4tlKjNnC1AChzKbm9Q
2374 | # tLaFEWFMd6E4hA7bz3RwhKe9XvMwpmrNOPlvb3OcM06NLwqASysF4Ngr0DqIbQgD
2375 | # n2//n4oDecPqe7HBvT0whIE9IndTg9jbS5zJNacCsw8/fvMq6wFw+AW5DJ26j7Jm
2376 | # jfizSp5HEghBKljm4BtbBir0rHQ2cdVR0QW8evF9zi5ctgooK0+hggMgMIIDHAYJ
2377 | # KoZIhvcNAQkGMYIDDTCCAwkCAQEwdzBjMQswCQYDVQQGEwJVUzEXMBUGA1UEChMO
2378 | # RGlnaUNlcnQsIEluYy4xOzA5BgNVBAMTMkRpZ2lDZXJ0IFRydXN0ZWQgRzQgUlNB
2379 | # NDA5NiBTSEEyNTYgVGltZVN0YW1waW5nIENBAhAMTWlyS5T6PCpKPSkHgD1aMA0G
2380 | # CWCGSAFlAwQCAQUAoGkwGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAcBgkqhkiG
2381 | # 9w0BCQUxDxcNMjIxMDA3MDIzNTAwWjAvBgkqhkiG9w0BCQQxIgQgnUr5aBcfMXS8
2382 | # 0drzJbnABzpA8ux4KQVsw0x1y7OzRScwDQYJKoZIhvcNAQEBBQAEggIAjSxeXv1z
2383 | # aiqDjxq5qYcDN9RIE6RqgDrjCx/6taNMih3FIGLLWAvk4sHDotEuyvCM9w9RHzKZ
2384 | # p3Og+pCSKbpj8c/c2giG4YA68eKNVh7QLfjQ4KtXcdivtmjqMDruFUn8pnOKDHQ6
2385 | # KMV5PD77oI/giAlFKHbOdluKGSA1dryFa6VEuWeFw4Lzu/TVzAr3NlN5+UIpzYNB
2386 | # +RCUGqEj4nkqAlN+jeQvDYKIWen/xVQhNqe7z0UtHFwT4dfLI67f07S1qbX0sWCk
2387 | # j4Vqxc5ZuPE+p0hNxXtCASpfSN/COt96dZOk/B87QF+Uu3yLV+LNXJO8Hy+ure31
2388 | # maF0p89uEB3EVWvmsDGEJrrRs1aM5876l53SVgUdVmjxAy/o7damMfNp7+eJPiqI
2389 | # Dc94mMZOsTfCz2j6h4oMze6i/Ae9igD/y+41XNhVCjQOvHa7AYUxo7QI1qSU/viV
2390 | # aEisWANNrgy/qRfK5VQ4zci0mZOXyTgHW/hTyXC/ESVWRjmsETrj1uNA0kSXiIBT
2391 | # YjHxRatlnpRNmMBvcX6nANfSsfQ1aofG/784Vlrq5S2p8Mw+LxFSt5HD2Q7ynNix
2392 | # X/LUkl7CZdZBvc6vCOKjlJFWPhs2A3AyKxouwebwljyX7VZTbcxaEzSbobZv+CTv
2393 | # or+UT524+myZK4uEokusZR0scGW+BsmzWMw=
2394 | # SIG # End signature block
2395 |
--------------------------------------------------------------------------------