-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathNew-CertificateScript.ps1
482 lines (405 loc) · 71 KB
/
New-CertificateScript.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributescite d on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
#>>
<#
.Synopsis
Creates a PowerShell script containing an embedded certificate that can
easily be installed.
.DESCRIPTION
This script makes generating and sharing certificates much simpler.
It can either take an existing certificate or generate a self-signed
certificate.
When generating a certificate, all that is required is:
- one or more domain names
- zero or more additional IpAddresses (it will attempt to resolve the DNS
names and add IPs for them, and localhost)
- password (can accept plaintext or SecureString [WHY? See Below!])
When using an existing certificate, the cert can come from a file, a path to
a cert, or a X509Certificate2 object.
===================
NOTE ABOUT PASSWORD
===================
I purposefully allowed plaintext passwords for two reasons.
1. I hate having to play with SecureStrings when doing development.
It just makes things a pain. I'll mind my P's and Q's thank you very much.
2. The current build of PowerShell on Nano doesn't have full support of
SecureString. This made it kinda difficult to actually use.
.EXAMPLE
New-CertificateScript.ps1 -SelfSigned -DnsNames contoso.com, www.contoso.com -Password "MYPASSWORD" -OutputScript .\mycert.ps1 # create a self-signed certificate
Generated certificate: AC23D228856B5CDE28618467C652F216EABB6D1D
Created Certificate Script : C:\mycert.ps1
# check to see what's in the generated cert:
PS C:\ >.\mycert.ps1 -showinfo
This script has a certificate with thumbprint AC23D228856B5CDE28618467C652F216EABB6D1D
- The private key for this certificate is available (password protected)
- Supported Hosts (IPs/Hostnames)
- DNS Name=contoso.com
- DNS Name=www.contoso.com
- IP Address=0000:0000:0000:0000:0000:0000:0000:0001
- IP Address=127.0.0.1
- IP Address=64.4.6.100
- IP Address=65.55.39.10
- Supported Common Names
- contoso.com www.contoso.com - This is a Self-Signed certificate
# install it on a server:
PS C:\ >.\mycert.ps1 -install -password "MYPASSWORD"
# install it on a client:
PS C:\ >.\mycert.ps1 -install
# remove the certificate from a client or server:
PS C:\ >.\mycert.ps1 -remove
.EXAMPLE
New-CertificateScript.ps1 -Cert .\mycert.pfx -PfxPassword "pwd4pfx" -Password "MYPASSWORD" -OutputScript .\mycert.ps1 # create certificate script from a .pfx file
Created Certificate Script : C:\myscript.ps1
# check to see what's in the cert:
PS C:\ > .\myscript.ps1 -showinfo
This script has a certificate with thumbprint 0DE35C6536B30630F6B5CC6419B7EA0F3FCD50C2
- The private key for this certificate is available (password protected)
- Supported Hosts (IPs/Hostnames)
- DNS Name=contoso
- DNS Name=127.0.0.1
- Supported Common Names
- contoso
# install it on a server:
PS C:\ >.\mycert.ps1 -install -password "MYPASSWORD"
# install it on a client:
PS C:\ >.\mycert.ps1 -install
# remove the certificate from a client or server:
PS C:\ >.\mycert.ps1 -remove
#>
param(
[Parameter(ParameterSetName="selfsigned",Mandatory=$true)][Switch]$SelfSigned,
[Parameter(ParameterSetName="selfsigned",Mandatory=$true)][String[]] $DnsNames,
[Parameter(ParameterSetName="selfsigned")][String[]] $IpAddresses,
[Parameter(ParameterSetName="selfsigned")][String] $SignatureAlgorithm = "SHA384",
[Parameter(ParameterSetName="usecertfile",Mandatory=$true)]$certificate,
[Parameter(ParameterSetName="usecertfile")]$PfxPassword,
$Password,
$OutputScript
)
# embedded VCSJones.FiddlerCertGen assembly!
$CertGen = "TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4gRE9TIG1vZGUuDQ0KJAAAAAAAAABQRQAATAEDAEa9jlYAAAAAAAAAAOAAIiALATAAAJQAAAAGAAAAAAAA8rMAAAAgAAAAwAAAAAAAEAAgAAAAAgAABAAAAAAAAAAGAAAAAAAAAAAAAQAAAgAAAAAAAAMAYIUAABAAABAAAAAAEAAAEAAAAAAAABAAAAAAAAAAAAAAAKCzAABPAAAAAMAAAOgDAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAwAAABosgAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACAAAAAAAAAAAAAAACCAAAEgAAAAAAAAAAAAAAC50ZXh0AAAA+JMAAAAgAAAAlAAAAAIAAAAAAAAAAAAAAAAAACAAAGAucnNyYwAAAOgDAAAAwAAAAAQAAACWAAAAAAAAAAAAAAAAAABAAABALnJlbG9jAAAMAAAAAOAAAAACAAAAmgAAAAAAAAAAAAAAAAAAQAAAQgAAAAAAAAAAAAAAAAAAAADUswAAAAAAAEgAAAACAAUAJEAAAERyAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADoCKBQAAAoCA30BAAAEKgATMAIAXwAAAAAAAAACcgEAAHAoFQAACi0pAnIJAABwKBUAAAotJQJyHwAAcCgVAAAKLSECcjUAAHAoFQAACi0dKyQDKAQAAAZRFyoDKAUAAAZRFyoDKAYAAAZRFyoDKAcAAAZRFyoDFFEWKh4CewEAAAQqGn4CAAAEKhp+AwAABCoafgQAAAQqGn4FAAAEKnYDLQIWKgIDMwIXKgIoAwAABgNvAwAABigWAAAKKrYDLQIWKgIDMwIXKgNvFwAACgIoFwAACigYAAAKLAIWKgIDdAIAAAIoCAAABioyAigDAAAGbxkAAAoqIgIDKBoAAAoqLgIDKBoAAAoW/gEqHgIoAwAABir2cgEAAHBzAQAABoACAAAEcgkAAHBzAQAABoADAAAEch8AAHBzAQAABoAEAAAEcjUAAHBzAQAABoAFAAAEKjoCKBQAAAoCA30GAAAEKh4CewYAAAQqGn4HAAAEKhp+CAAABCp2Ay0CFioCAzMCFyoCKBAAAAYDbxAAAAYoFgAACiq2Ay0CFioCAzMCFyoDbxcAAAoCKBcAAAooGAAACiwCFioCA3QDAAACKBMAAAYqMgIoEAAABm8ZAAAKKn5yAQAAcHMPAAAGgAcAAARySwAAcHMPAAAGgAgAAAQqGn4JAAAEKh4CewoAAAQqjnMhAAAGgAkAAAQoYgAABi0HclcAAHArBXLDAABwgAsAAAQqEzAFANgAAAABAAARBSgEAAAGKAwAAAYsEHJIAQBwcqoBAHBzGwAACnoSAAN+CwAABB8YHih+AAAGLVcoHAAACiAPAAmA/gEOBF8sOxIAA34LAAAEHxgfECh+AAAGLQsoHAAACnMdAAAKehIAA34LAAAEHxgeKH4AAAYtFigcAAAKcx0AAAp6KBwAAApzHQAACnoXBCD//wAAXx8QYgsHYAwOBSwKDgUXMwoXEwQrEBgTBCsLcr4BAHBzHgAACnoGEQQIEgMofwAABi0LKBwAAApzHQAACnoJbx8AAAoOBhEEVAYqGn4LAAAEKgAbMAUATwAAAAMAABEWCgMcfiAAAAoSABYogAAABi0LctABAHBzIQAACnoGKCIAAAoLAxwHEgAWKIAAAAYtC3LQAQBwcyEAAAp6BygjAAAKDN4HBygkAAAK3AgqAAEQAAACACUAIUYABwAAAAAuKBEAAAZvEAAABioTMAUAZAAAAAQAABEEF1QSAAN+CwAABB8YFih+AAAGLRkoHAAACiAWAAmAMwIUKigcAAAKcx0AAAp6F+Aa2f4PC9AzAAABKCUAAAooJgAACgwGHycHEgIWKIEAAAYtCygcAAAKcx0AAAp6BAdLVAYqSgJyAAIAcH0KAAAEAihBAAAGKgATMAYAawAAAAYAABECbycAAAotEHIKAgBwcmICAHBzGwAACnooYQAABi0DFisFIAAAAgANAm8oAAAKCX4gAAAKEgASARICKJkAAAYtCygcAAAKcx0AAAp6BghvWwAABgYHFS4HKEMAAAYrBShCAAAGB3NjAAAGKgATMAQAFAAAAAcAABEDjTYAAAEKAgYWBo5pKCkAAAoGKhMwAgDrAAAAAAAAAANFBQAAAAUAAAAgAAAAOwAAAGsAAACbAAAAOMYAAAACb2kAAAYoEQAABigWAAAGObEAAABybAIAcCoCb2kAAAYoEQAABigWAAAGOZYAAABylgIAcCoCb2kAAAYoEQAABigWAAAGLAZywAIAcCoCb2kAAAYoEgAABigWAAAGLGZy6gIAcCoCb2kAAAYoEQAABigWAAAGLAZyDgMAcCoCb2kAAAYoEgAABigWAAAGLDZyOgMAcCoCb2kAAAYoEQAABigWAAAGLAZyYgMAcCoCb2kAAAYoEgAABigWAAAGLAZyjgMAcCpzKgAACnoAEzAEAGcAAAAIAAARcysAAAoKAgsWDCshBwiaDQZzeAAABiUZb3cAAAYlCW91AAAGbywAAAoIF1gMCAeOaTLZAxMEFgwrJBEECJoTBQZzeAAABiUeb3cAAAYlEQVvdQAABm8sAAAKCBdYDAgRBI5pMtUGKgAbMAkAkwQAAAkAABEDbycAAAotEHK2AwBwchAEAHBzGwAACnp+IAAACgp+IAAACgsfEI02AAABDCgtAAAKCG8uAAAKCB8PjzYAAAElRx9/X9JSBW8vAAAKJRMGLAYRBo5pLQUW4A0rCREGFo82AAABDQNvMAAACm8vAAAKJRMHLAYRB45pLQYW4BMEKwoRBxaPNgAAARMECCUTCCwGEQiOaS0GFuATBSsKEQgWjzYAAAETBQASC/4VPAAAAhILBW8vAAAKjml9SgEABBILCdN9SwEABBELEwkSDP4VNgAAAhIMA28xAAAKbzIAAAp9OQEABBEMEwoDKCIAAAYTDRIM/hU2AAACEgwPBigzAAAKLQ0DbzEAAApvMgAACisOEQ0PBig0AAAKKCQAAAZ9OQEABBEMEw4Eb2wAAAYTDxENb2wAAAYTEHNVAAAGExEREW9NAAAGExcggAAAABMYBG9pAAAGKBEAAAYoFgAABiwHERgfIGATGBERFhYWF3M1AAAKb1EAAAYREREYF3M2AAAKb1EAAAYREXM3AAAKJXI2BABwczgAAApvOQAACiYWczoAAApvUQAABhERDgQOBSUtByYWjRgAAAEoJQAABhZzewAABm9RAAAGczsAAAoTGREZERBvcAAABm88AAAKExoREREZEQ9vcAAABm88AAAKFnM9AAAKb1EAAAYREREaFHN5AAAGb1EAAAbeGBEZLAcRGW8+AAAK3BEXLAcRF28+AAAK3BIS/hUuAAACEhIRCX39AAAEEhISC/4VPAAAAhILCI5pfUoBAAQSCxEF031LAQAEEQt9+AAABBISEQ9vbwAABn3+AAAEEhIYffcAAAQSEhIL/hU8AAACEgsDbzAAAApvLwAACo5pfUoBAAQSCxEE031LAQAEEQt9+gAABBISEQ59+QAABBISDggTGxIbKD8AAAotIyhAAAAKExwSHCMAAAAAAADwvyhBAAAKExwSHBsoQgAACisHEhsoQwAACig2AAAGffwAAAQSEg4HExsSGyg/AAAKLRkoQAAAChMcEhwjAAAAAAAA8L8oQQAACisHEhsoQwAACig2AAAGffsAAAQSEhERb08AAAZ79QAABH0BAQAEEhIREW9PAAAGe/YAAAR9AgEABBYTExgoRAAAChMUEQ1vZgAABhENb2oAAAYXERQSEhIKfiAAAAp+IAAAChITKJgAAAYtCygcAAAKcx0AAAp6ERMoIgAAChMVEQ1vZgAABhENb2oAAAYXERQSEhIKfiAAAAoRFRITKJgAAAYtCygcAAAKcx0AAAp6ERUREygjAAAGc0UAAAoSHf4VOAAAAhIdFn1CAQAEEh0Eb2oAAAZ9RAEABBIdBG9mAAAGb1kAAAYtBB8YKwEWfUABAAQSHQRvZwAABn0/AQAEEh0WfUEBAAQSHQRvaAAABn0+AQAEER0TFiVvKAAAChgWEhYonQAABi0LKBwAAApzHQAACnpzRgAAChMe3j0RESwHERFvPgAACtwRECwHERBvPgAACtwRDywHEQ9vPgAACtwRDSwHEQ1vPgAACtwGKCQAAAoHKCQAAArcER4qAEGsAAACAAAA0wEAADwAAAAPAgAADAAAAAAAAAACAAAASgEAANEAAAAbAgAADAAAAAAAAAACAAAAQQEAABIDAABTBAAADAAAAAAAAAACAAAAOgEAACUDAABfBAAADAAAAAAAAAACAAAAMQEAADoDAABrBAAADAAAAAAAAAACAAAA8gAAAIUDAAB3BAAADAAAAAAAAAACAAAAqAAAANsDAACDBAAADQAAAAAAAAAbMAgALAIAAAoAABEEby8AAAolCywFB45pLQUW4AorCAcWjzYAAAEKEgT+FTwAAAISBARvLwAACo5pfUoBAAQSBAbTfUsBAAQRBAwSBf4VNgAAAhIFAwUoJAAABn05AQAEEQUN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rAHgCQYG5hKXAFaA2RHlCVaAHA/lCVaA7gPlCVaA3gnlCVaAKwvlCVaAJAnlCVaAbwrlCQYG5hKXAFaAswXqCVaACAvqCVaAQA/qCQYG5hKXAFaAnwDvCVaADgLvCVaALgLvCQYAehbqCQYATB30CQYA5xhtAAYACBhtAAYAFxhtAAYARBn5CQYAGgttAAYA6yf5CQYA9ARtAAYAdyuXAAYAgSttAAYAiBT5CQYAvST+CQYAIyP5CQYAcBRxCQYAsx6fCQYATB0DCgYAcSCXAAYA5CBtAAYAjCHvCQYAMCMICgYArR8NCgYAyiQICgYAJhoSCgYAliQSCgYAOigICgYAryLCCQYANhQXCgYARRQXCgYAcSCXAAYA5CBtAAYA5R8NCgYAJioXClaAqBJxCVaAkRJxCVaAfBJxCVaAyBJxCQYG5hJkAFaAwAccClaAnQccClaAMwccClaADQccCgYG5hKXAFaAchAhClaAsw8hClaAoA8hClaA0g8hClaAFxAhCgYG5hKXAFaAqgwmClaANgImClaAVBImClaA5QwmClaAuBAmClaAoAkmClaApREmClaA5hEmClaAFRImClaAxAwmClaAlQwmClaAewwmClaApBAmClaAAwQmClaAaQ8mClaATgYmClaAaQwmCgYG5hLHCVaAaQUrClaAkgQrClaA5w8rClaAlBErClaA+Q8rClaAWgsrClaABxArClaABQ4rClaA3gUrClaAigYrClaAhhArClaA7QkrClaACRErClaApAUrClaA/BArClaAegUrCgYARhOXAAYATRNtAAYAcBRxCQYA1ycDCgYARhOXAAYATRNtAAYADiiXAAYA8hhxCQYAJBlxCQYAGxq+CQYA+yaJCQYAHx+XAAYAKh9tAAYAwhO5CQYARhOXAAYATRNtAAYG5hKXAFaAzwgwClaA4wgwCgYARhOXAAYATRM1CiEA8hc5CjEACRaECTEA3RWECQYG5hKXAFaA6wU9ClaAggs9ClaAOAw9ClGATAFxCVGAXyNxCVGAShBxCQYG5hKXAFaA6wW5CVaAMgW5CVaADQa5CVaAShC5CQYG5hKXAFaA6wVCClaA2QdCClaAEAhCCgYG5hKXAFaA6wVHClaAWQ5HClaAiwVHClaAgglHClaAqQpHClaAEwVHClaAGgZHClaAfQ9HClaAwA1HClaA4Q1HClaA0w5HClaALwFHClaA8Q5HClaAMg+XAFaAww+XACEA5CFMClAgAAAAAIEYJCUQAAEAYCAAAAAAlgCCGlAKAgDLIAAAAACDCCMYQgEEANMgAAAAAJYI+wNYCgQA2iAAAAAAlggmA1gKBADhIAAAAACWCGsCWAoEAOggAAAAAJYIeQBYCgQA7yAAAAAA5gFaJ10KBAANIQAAAADGAFonYwoFADshAAAAAMYAlxZEAAYASCEAAAAAlgiMK2gKBgBRIQAAAACWCJgraAoIAF0hAAAAAMYAsB1CAQoAZSEAAAAAkRgqJXAKCgCjIQAAAACDGCQlEAAKALIhAAAAAIMIIxhCAQsAuiEAAAAAlgj7A3QKCwDBIQAAAACWCOQDdAoLAMghAAAAAOYBWid5CgsA5iEAAAAAxgBaJ2MKDAAUIgAAAADGAJcWRAANAEghAAAAAJYIjCt/Cg0AUSEAAAAAlgiYK38KDwAhIgAAAACRGColcAoRAEEiAAAAAJMIihaHChEASCIAAAAAxggjGEIBEQBQIgAAAACRGColcAoRAHQiAAAAAMMCVCqMChEAWCMAAAAAwwK5GEIBFwBgIwAAAADDAhwZnAoXAMwjAAAAAMMC/CKcChgA2CMAAAAAwwLNHaIKGQBIJAAAAACGGCQlBgAbAFwkAAAAAJYAzyqsChsA1CQAAAAAkQDrGrMKHAD0JAAAAACRAIofugoeAOwlAAAAAJEA6SnCCiAAYCYAAAAAhgDXGtAKIgCsKwAAAACGAKYr8goqAEguAAAAAIYAmxoJCy8AGDEAAAAAhhgkJQYANgAgMQAAAACTCIoWJQs2ACcxAAAAAMYIIxhCATYAMDEAAAAAwwJUKowKNgCvMQAAAADDArkYQgE8ALsxAAAAAMMCHBmcCjwAyDEAAAAAwwL8IpwKPQDYMQAAAADDAs0dogo+ABYyAAAAAIYYJCUGAEAAKTIAAAAAkRgqJXAKQAA/MgAAAACGGCQlFQBAAEgyAAAAAIYYJCUGAEEAUTIAAAAAxACiF6YAQQBgMgAAAACWAB8UKgtBAAAAAAADAIYYJCVpA0IAAAAAAAMAxgH0FqQDRAAAAAAAAwDGAe8WMgtFAAAAAAADAMYB5RY+C0gAAAAAAAAAwwdUKowKSQAAAAAAAADDB7kYQgFPAAAAAAAAAMMHHBmcCk8AAAAAAAAAwwf8IpwKUAAAAAAAAADDB80dogpRAAAAAAAAAMYNIxhCAVMAGDEAAAAAhBgkJQYAUwCZMgAAAACWCMcIRgtTAKAyAAAAAJYItglGC1MAPzIAAAAAhhgkJRUAUwBIMgAAAACGGCQlBgBUAKcyAAAAAMQAohemAFQAtDIAAAAAhhgkJUsLVABVMwAAAACGCDEdUgtVAHAzAAAAAIYIYyBYC1UAeDMAAAAA5gF6GgYAVQCUMwAAAADEAHAdBgBVAMAzAAAAAIEAhScGAFUASDQAAAAAhgBZHV4LVQBQNAAAAADmAXoaBgBVAFw0AAAAAIYIYSdjC1UAjDQAAAAAgQB6GhUAVQD8NAAAAACGAJMUSwtWABU1AAAAAIYAHSMGAFcAKDUAAAAAhgisKEQAVwA4NQAAAADEAHAdBgBXAGg1AAAAAIYYJCUGAFcAezUAAAAAlgCTFGkLVwCMNQAAAACGGCQlFQBZAJw1AAAAAIYYJCUGAFoArDUAAAAAhggNK6YAWgDCNQAAAADEAKIXpgBaAPE1AAAAAIMArRYVAFoAPzIAAAAAhhgkJRUAWwBIMgAAAACGGCQlBgBcAPo1AAAAAMQAohemAFwACjYAAAAAhhgkJRUAXAATNgAAAACGGCQlBgBdABw2AAAAAJYI0ChvC10AgDYAAAAAlghYGG8LXQC4NgAAAACDGCQlcwtdANg2AAAAAJYAgil+C2AAGDcAAAAAlgDNHZALZgBPNwAAAACDCAcXmAtoAFc3AAAAAIYIqBhCAWgAZDcAAAAAhggjGEIBaAB3NwAAAACGCOkinQtoAI83AAAAAIYIqROiC2gAlzcAAAAAhgi1E6gLaACgNwAAAACGACQqrwtpADk4AAAAAOYBehoGAGkARjgAAAAAgxgkJdgBaQBwOAAAAACDCBYqtAtqAHg4AAAAAIYIDioyAWoAtjgAAAAA5gF6GgYAagDMOAAAAADEAHAdBgBqAPg4AAAAAIYYJCW6C2oAezkAAAAAhggxHcALawCDOQAAAACGCDsdxAtrAIw5AAAAAIYInhnJC2wAlDkAAAAAhginGc4LbAAYMQAAAACGGCQlBgBtAJ05AAAAAIYYJCXUC20AtDkAAAAAkQBjE9wLbwDoOgAAAACGGCQl5QtxAAQ7AAAAAJEAfCDxC3MAAAAAAIAAliBRKf0LdAAAAAAAgACWID0pAwx2AAAAAACAAJYgtSoRDHsAAAAAAIAAliA2Hx4MfwAAAAAAgACWIDYfKQyEAAAAAACAAJYgJys1DIkAPzIAAAAAhhgkJRUAigBoPQAAAACGGCQlBgCLAHE9AAAAAMQAohemAIsAiD0AAAAAlgAKHjoMiwCdPQAAAACWAHIBQQyNALQ9AAAAAJYAjhRIDI8AJD4AAAAAlgAYHlgMkgBwPgAAAACWAGYBYAyVAHw+AAAAAJYAfAFoDJgA2D4AAAAAlgD/H3AMmwBlPwAAAACWCOIjegyeAGw/AAAAAJYIeSN6DJ4Acz8AAAAAhggjGEIBngCIPwAAAACBGCQlEACeALg/AAAAAIMIBxeADJ8AwD8AAAAA5gF6GgYAnwDNPwAAAACRGColcAqfAAAAAACAAJYgExuFDJ8AAAAAAIAAliC6KaIMpwAAAAAAgACWILoptgyuAAAAAACAAJYgnynKDLUAAAAAAIAAliC5GtwMvQAAAAAAgACWIF4q9QzGAAAAAACAAJYgpR0HDcwAAAAAAIAAliClHRYN0QAAAAAAgACWIAUsJA3WAAAAAACAAJYgBSwtDdoAAAAAAIAAliDOKTgN3gAAAAAAgACWIGsrNQzhAAAAAACAAJYg9SdCDeMAAAAAAIAAliCjFkkN5gAAAAAAgACWIOAXNQzoAAAAAACAAJYgGihODeoAAAAAAIAAliCyI1MN7AAAAAAAgACWIDsqXA3wAAAAAACAAJYg4SttDfcAAAAAAIAAliDzK3kN/gAAAAAAgACWIJ0qgw0EAQAAAACAAJYgwSqKDQcB7T8AAAAAhhgkJZgNDQEIQAAAAADmAXoaBgAOAQAAAQBfGQAAAQCaGAIAAgDvHwAAAQB0JAAAAQBZHgAAAQBNKAAAAgBSKAAAAQBNKAAAAgBSKAAAAQBfGQAAAQB0JAAAAQBZHgAAAQBNKAAAAgBSKAAAAQBNKAAAAgBSKAAAAQA8GQAAAgBgHQAAAwDvHwAABABKGwAABQDQFgIABgDdEwAAAQDzFwAAAQDzFwAAAQA8GQIAAgDdEwAAAQDDKAAAAQBuEwAAAgBGEwAAAQCSKgAAAgDhHwAAAQABJgAAAgA7JgAAAQAAGwAAAgCSKgAAAwAgIAAABAABJhAQBQA7JhAQBgDAHxAQBwAwGhAQCACfJAAAAQCSKgAAAgAgIAAAAwDAHxAQBAAwGhAQBQCfJAAAAQCSKgAAAgAgIAAAAwDAHwAABAABJhAQBQA7JhAQBgAwGhAQBwCfJAAAAQA8GQAAAgBgHQAAAwDvHwAABABKGwAABQDQFgIABgDdEwAAAQDzFwAAAQDzFwAAAQA8GQIAAgDdEwAAAQDCFwAAAQCKGQAAAQAzKAAAAgBhFgAAAQDeAAAAAQDeAAAAAgBrHgAAAwAzKAAAAQCNKAAAAQA8GQAAAgBgHQAAAwDvHwAABABKGwAABQDQFgIABgDdEwAAAQDzFwAAAQDzFwAAAQA8GQIAAgDdEwAAAQDCFwAAAQBVIQAAAQDDHQAAAQBeHwAAAQBQJQAAAgDOHgAAAQDCFwAAAQC8FgAAAQDCFwAAAQDCFwAAAQDzFwAAAgBGJAAAAwDdEwAAAQBGJAAAAgA8GQAAAwDvHwAABADQFhAQBQBgHRAQBgBKGwAAAQBGJAAAAgA8GQAAAQBTHQAAAQBtJAAAAQCKGQAAAQBTHQAAAQBTHQAAAQCCFAAAAgA9IwAAAQAxKgAAAgA9IwAAAQAKJgAAAgC9HgAAAQAKJgEgAQBlKQEgAgD7JgIAAQB7KQEgAgB6JAEgAwBSJAEgBAAbGgEgBQD7JgEAAQB8KQEgAgDKFAEgAwD7JgIABACvKgEAAQB8KQEgAgBIHwEgAwBNEwMgBAA7IAEgBQD7JgEAAQB8KQEgAgBIHwEAAwBNEwMgBAA7IAEgBQD7JgEAAQCwKgAAAQDCFwAAAQDzFwAAAgBSGQAAAQDzFwAAAgBSGQAAAQDzFwAAAgBSGQAAAwDIKAAAAQDzFwAAAgBSGQAAAwBTHQAAAQDzFwAAAgBSGQAAAwBTHQAAAQDzFwAAAgBSGQAAAwBTHQAAAQDzFwAAAgBSGQAAAwBTHQAAAQBfGQEAAQAdKwEgAgCQEwEgAwD7JgEgBACKIgEgBQCsHwEgBgCTGQEgBwBkGQEgCACXJwEgAQDSGQEgAgAEGgEgAwB9IgEgBAD7JgEgBQDuEgIABgCsFAMgBwCXFAEgAQDSGQEgAgAEGgEgAwB9IgEgBAD7JgEgBQDuEgIABgCsFAMgBwCXFAEAAQD3KgEgAgDCEwEgAwDSGQEgBABeFAEgBQD7JgEgBgClIgEgBwB3IgMgCABvIgEAAQD3KgEgAgDCEwEgAwDSGQEgBAAEGgEgBQB9IgEgBgCsHwEgBwCXIgEgCACiFAMgCQCXFAEgAQC9KAEgAgD7JgEgAwDVJwIABAD2KgIgBQDBEwIgBgDaKgEgAQBiKwEgAgBZKwEgAwD7JgMgBAC5HQMgBQCaHQEgAQBiKwEgAgBZKwEgAwD7JgMgBAC5HQMgBQCaHQEgAQBuKQEgAgB5FAEgAwD7JgEABAB0EwEgAQBuKQEgAgB5FAEgAwD7JgEgBAB0EwEgAQBNGAEgAgD6FwEgAwD7JgAgAAAAAAEgAQAAGAAgAAAAAAEAAQAAGAEgAgAsGAAgAAAAAAEgAQBQHwAgAAAAAAEgAQCwKgAgAAAAAAEgAQArKAAgAAAAAAIAAQAbJAEgAgDJGAEgAwD7JgAgAAAAAAEAAQAcJAIAAgCvKgEgAwBVFAEgBAAxGQEgBQDMEwEgBgD7JgAgAAAAAAEAAQArKAEgAgAnLAEAAwAfKQEgBAAWKQIgBQB2KAEgBgD7JgAgAAAAAAEAAQArKAEgAgAnLAEAAwAOKQEgBAAGKQEgBQD7JgAgAAAAAAEAAQCwKgEgAgD7JgAgAAAAAAEAAQAcJAIAAgCvKgEgAwAxGQEgBADMEwEgBQD7JgAAAQDlIQIABgADAAoAEABxABEAcQAYAHEAGgBxAD8AcQBIAHEACQAkJQEAEQAkJQYAGQAkJQoAKQAkJRAAMQAkJRAAOQAkJRAAQQAkJRAASQAkJRAAUQAkJRAAWQAkJRAAYQAkJRUAaQAkJRAAcQAkJRAAeQAkJRAAiQAkJRoAkQAkJQYAqQAkJQYAmQBwHQYAQQEkJQYAmQAkJQYAYQGMKy4AYQFaJy4AmQATGjQAUQGYKzoAmQCXFkQAmQBaJ0gAaQEkJVoAcQHZJGAAeQEkJQEAaQEkJRAAgQF0GgYAiQHEIm0AkQEkJRAAcQGNHnAAcQFJHnUAcQGaHnoAUQGwF4cAcQF5HZAAsQCAKqYAqQEHF6oAcQFUK7MAuQEkJQYAHAAkJQYAHACTFNUAwQExGyYBwQF1JiwByQF7EzIBsQAMGTcBsQBzHzwB0QExHUIBJABFHaYAJAAxHU0B2QEkJVIB4QEkJVoB6QEkJQYA0QEkJRAA6QGTFGEB8QEkJWgB8QAkJQYA+QHiHXABAQIkJXcB4QB6GgYALABFHaYA2QCMKYUB2QDiJ4oB2QC/J5ABLABkKE0BiQFYKHAAsQAkJSwBsQAkJZYB2QCUKYUBiQGMK9IBsQAkJdgBAQEkJRUAgQHzF20A2QARFC8CCQFtGWQACQF8GWQAcQFUKzwCKQGmHqYAyQHCFDwBCQIkJRAAEQJoHUUCNACsKEQANABVH1cCcQE6JV0CNADrJHwCPACgKE0BPAAoKaYANAAdIwYANACTFNUANAAkJQYAiQFcAi8CiQFYKI4CRABFHaYAgQHQFKYAiQGYK9IBRAAkJdUARAAxHU0BGQJfIZ4CIQJtIaQCKQIkJaoCKQIUILACTABFHaYATABkKE0BYQHTK9QCMQIkJRAAgQF6GgYAcQFEGt8C2QAOI0QA2QD5HUQA2QB0HucC2QDcKUQA2QBUJUQA2QAZHUQA2QA+FkQA2QBRFkQAKQEkJe0CgQHNF6oAKQEkJQ4DVACsKEQAXAAkJQYAZABVH1cCcQE2HlcDXACTFNUAwQCFJjIBbAAkJWkDXADaHW8DcQEnHnUAdAAkJWkDcQFyAYUDfAAkJWkDhAD0FqQDYQHuHUQAcQF8AbQDUQEJIKYA+QDlGcMDUQGMKzoAeQEkJdADCQBAAN8DCQBEAN8DCQBIAOQDCQBMAOkDCABUAO4DCABYAN8DCABcAPMDCABgAPgDCABkAP0DCABsAO4DCABwAN8DDgCUAAIEDgCYACUEEgCZAO4DDgCcADgEEgCdAO4DDgCgAEsEEgChAO4DDgCkAG4EEgClAO4DDgCoAJcEDgCsAMAEDgCwAOkEDgC0ABIFEgC1AO4DDgC4AD0FEgC5AO4DDgC8AGgFDgDAAIsFDgDEALIFEgDNAO4DEgDRAO4DEgDVAO4DCQDgAO4DCQDkAN8DCQDoAPMDCQDsAPgDCQDwAP0DCQD0ANkFCQD4AN4FCQD8AOMFCQAAAegFCQAEAe0FCQAIAfIFCQAMAfcFCQAQAfwFCQAUAQEGCQAYAQYGCQAcAQsGCQAgARAGCQAkARUGCQAoARoGCABgAfgDCABkAR8GCABoASQGCQBwAd8DCQB0AfMDCQB4Af0DCQB8ASQGCQCAAekDCQCEASkGCQCIAS4GCQCMATMGCQCQATgGEgCRAe4DCQCUAT0GAgCVAboIDgCYAUIGCQCgAYsGCQCkAZAGCQCoAZUGCQCsAZoGCQCwAZoGCQC0AZ8GCQC4AaQGCQC8AakGCQDAAa4GCQDEAbMGCQDIAbgGCQDMAb0GCQDQAcIGCQDUAccGCQDYAcwGCQDcAdEGCQDgAdYGCQDkAdsGCQDoAeAGCQDsAeUGCQDwAeoGCQD0Ae8GCQD4AfQGCQD8AfkGCQAAAv4GCQAEAgMHCQAIAggHCQAMAg0HCQAQAhIHCQAUAhcHCQAYAhwHCQAcAiEHCQAgAiYHCQAkAisHCQAoAjAHCQAsAjUHCQAwAjoHCQA0Aj8HCQA4AkQHCQA8AkkHCQBAAk4HCQBEAlMHCQBMAu4DCQBQAqkGCQBUAlgHCQBYAl0HCQBcAmIHCQBgAmcHCQBkAmwHCQBsAu4DCQBwAu4DCQB0At8DCQB4AvMDCQB8AvgDCQCAAv0DCQCEAu4DCQCIAt8DCQCMAvMDCQCQAvgDCQCUAt8DCQCYAvgDCQCcAv0DCQCgAtkFCQCkAt4FCQCoAh8GCQCsAiQGCQCwAnEHCQC0AuMFCQC4AugFCQC8Au0FCQDAAvIFCQDEAvcFCQDIAvwFCQDMAnYHCQDQAnsHCQDUAt8DCQDYAvMDCQDcAt8DCQDgAvMDCQDkAvgDCQDoAv0DCQDsAtkFCQDwAt8DCQD0AvMDCQD4AvgDCQD8Av0DCQAAA/0DCQAEA9kFCQAIA94FCQAMAx8GCQAQAyQGCQAUA3EHCQAYA3YHCQAcA3sHCQAgA+MFCQAkA+gFCQAoA+0FCQAsA98DCQAwA/MDCQA0A/gDCQA4A/0DCQA8A9kFCQBAA94FCQBEAx8GCQBIA98DCQBMA/MDCQBUA+4DCQBYA4AHCQBcA4UHCQBgA4oHCQBkA48HCQBoA5QHCQBsA5kHCQB0A/gDCQB4Ax8GCQB8AyQGCQCEA+4DCQCIA98DCQCMA/MDDgAUBJ4HDgAYBL0HDgAcBMoHDgAgBNMHCAAoBN8DCAAsBPMDCAAwBP0DCAA0BCQGCQA8BO4HCQBABCQGCQBEBPcFCQBIBOQDCQBMBOkDCQBUBO4DCQBYBN8DCQBcBPMDCQBgBPgDCQBkBP0DCQBoBNkFCQBsBN4FCQBwBB8GCQB0BCQGCQB4BHEHCQB8BHYHCQCABHsHCQCEBOMFCQCIBPMHCQCMBPgHCQCQBP0HCQCUBAIIBwCcBAcIBwCgBAoIBwCkBA0IBwCoBBAIBwCsBBMIBwCwBBYIBwC0BBMIBwC4BBYIBwC8BBkIBwDABBwIBwDEBB8IBwDIBCIIBwDMBCUIBwDQBCgIBwDUBCsIBwDYBC4ICQAgBTMGCQAkBd8DCQBABe4DCQBEBd8DCQBIBfMDDgBMBTEIDgBQBUgIDgBUBZEICQBcBe4DCQBgBd8DCQBkBfMDCQBoBaYICQBwBe4DCQB0BeQDCQB4BSkGCQCABe4DCQCEBd8DCQCIBfMDCQCMBSQGCQCQBfcFCQCUBeQDCQCYBekDCQCcBSkGCQCgBasICQCkBYAHCQCoBYUHCQCsBY8HCQCwBbAICQC0Be4DCQC4BbUIIQCLAN8DJwCDAN8DLgALAAgOLgATABEOLgAbADAOLgAjADkOLgArAFYOLgAzAFYOLgA7AFYOLgBDADkOLgBLAFwOLgBTAFYOLgBbAFYOLgBjAHQOLgBrAJ4OLgBzAKsOQQCLAN8DYACLAN8DYQCLAN8DgACLAN8DgQCLAN8DoACLAN8DoQCLAN8DwACLAN8DwQCLAN8D4ACLAN8D4QCLAN8DAQGLAN8DIQGLAN8DQQGLAN8DgQGLAN8DwQGLAN8DAAKLAN8DIAKLAN8DQAKLAN8DIAOLAN8DQAOLAN8DAwSbAN8DQAWLAN8DYAWLAN8DIwabAN8DYwabAN8DgwabAN8DQwebAN8DgwibAN8DwwibAN8DoQqLAN8DwQqLAN8DgA6LAN8DoA6LAN8DwA6LAN8D4A6LAN8DoBGLAN8DwBGLAN8DoSmLAN8DwSmLAN8D6QBcCesAXgnvAGAJ8QBgCfMAXgn1AF4J+QBeCfsAXgkBAV4JAwFcCQUBXgkHAV4JCwFeCQ8BXgkRAV4JQQFiCUMBXglFAWIJRwFiCUkBZAlLAWQJTQFiCU8BXglRAWYJUwFiCVUBXglXAVwJWwFeCV0BXglfAWYJYQFiCWMBXgllAVwJaQFeCW0BXglvAV4JcQFmCXMBXgl1AVwJdwFcCXkBXgl9AV4JfwFeCYEBXAmDAWIJhQFiCYcBXAmJAVwJiwFeCY0BXAmPAV4JkQFcCZUBXgmXAWgJmQFqCZsBXgmdAV4JnwFgCaEBXgmjAVwJpQFeCacBXgmpAWAJqwFeCa0BXAmvAV4JsQFeCbUBXAm3AV4JuQFeCbsBYgm9AWAJvwFcCcEBXgnDAWgJxQFcCccBXAnLAWYJzQFcCc8BXAnRAWgJ0wFcCdUBbQnXAVwJ2QFtCd0BbwnfAV4J4QFtCecBbwnpAW8J6wFeCe0BXgnvAW0J8wFvCfcBXgn5AV4J+wFeCf0BbQkBAm8JBQJeCQcCXgkJAm0JDQJeCQ8CbQkVAm8JFwJeCRkCXgkIAAYAvAgAAAAA5gAAAAAA5wAAAAAA6AAAAAAA6QAAAAAA6gAAAAAA6wAAAAAA7ABOAGQAZwB/AJcAmgCuALwA2wCdAd0BFAIiAigCMwJKAmwCcgKTAroCzALZAvUCGAOVA6sDrwO6A8wDAgABAAMABgAEAAkABgALAAwADQANAA4AEAAQABEAEgATABQAFwAVABgAFwAaABwAHAAeAD8AIAAAAFoZng0AAP8Dog0AACoDog0AAG8Cog0AAH0Aog0AAFoZng0AAP8Dpw0AAOgDpw0AAI4WrA0AAFoZng0AAI4WsQ0AAFoZng0AAFoZng0AAMsItg0AALoJtg0AAEwduw0AAEohwQ0AAJgnxw0AALAozQ0AABEr0Q0AANQo1Q0AAFwY1Q0AAOsX2Q0AAMwYng0AAFoZng0AAP8i3g0AANQT4w0AACYq6Q0AADMr7w0AAEwd9A0AACEa+A0AAOYj/Q0AAH0j/Q0AAFoZng0AAOsXAw4CAAMAAwACAAQABQACAAUABwACAAYACQACAAcACwACABAADQACABEADwACABIAEQACABkAEwACABoAFQACACoAFwACACsAGQACAEAAGwACAEIAHQACAEMAHwACAEgAIQACAEkAIwACAE8AJQACAFMAJwACAFkAKQACAGEAKwACAGIALQACAGYALwACAGcAMQACAGgAMwACAGkANQACAGoANwABAGsANwACAG8AOQACAHAAOwACAHQAPQABAHUAPQACAHYAPwABAHcAPwACAI0AQQACAI4AQwACAI8ARQACAJEARwAQAJYAJQARAKgAJQAaAOQAJQABAOgeQgAmABAfIAAnAM4ARgF+AVAChgKYAsYCQQNJA08DYgN6A4oDnAPAA0AB+wBRKQEARgH9AD0pAQBGAf8AtSoBAEYBAQE2HwEARgEDATYfAQBGAQUBJysBAEYBKQETGwIAQAErAbopAgBAAS0BuikCAEABLwGfKQIAQAExAbkaAgBAATMBXioCAAYBNQGlHQIABgE3AaUdAgAGATkBBSwCAAYBOwEFLAIABgE9Ac4pAwABAT8BaysDAAEBQQH1JwMAAQFDAaMWBAABAUUB4BcFAAEBRwEaKAUAAQFJAbIjBQABAUsBOyoFAAEBTQHhKwUAAQFPAfMrBQABAVEBnSoFAAEBUwHBKgUABIAAAAEAAAAAAAAAAAAAAAAAIyAAAAQAAAAAAAAAAAAAANYDhxMAAAAABAAAAAAAAAAAAAAA1gNsHwAAAABIABEAAAACABQA5QABAAEAFAABKQAAAAARAYQQAAAAABkB+R8YARwCrQBmAq0AXAMQAYEDEAGRAwAAAAAAYXBpLW1zLXdpbi1zZWN1cml0eS1jcnlwdG9hcGktbDEtMS0wAGFwaS1tcy13aW4tY29yZS1oZWFwLWwyLTEtMABhcGktbXMtd2luLWNvcmUtbGlicmFyeWxvYWRlci1sMS0yLTAAQUxHX1NJRF9SSVBFTUQxNjAAZ2V0X0VDRFNBX1A1MjEAQUxHX1NJRF9TSEExAENBTEdfU0hBMQBDRVJUX1YxAE51bGxhYmxlYDEASUVxdWF0YWJsZWAxAEFjdGlvbmAxAElDb2xsZWN0aW9uYDEASUxpc3RgMQBwYXJhbTEAVEluMQBBTEdfU0lEXzNERVNfMTEyAENBTEdfM0RFU18xMTIAQUxHX1NJRF9TSEFfNTEyAENBTEdfU0hBXzUxMgBBRFZBUEkzMgBMT0FEX0xJQlJBUllfU0VBUkNIX1NZU1RFTTMyAENSWVBUMzIAQWR2QXBpMzIAS2VybmVsMzIAV3JpdGVVSW50MzIAUmVhZEludDMyAFdyaXRlSW50MzIAQ3J5cHQzMgBBTEdfU0lEX0FFU18xOTIAQ0FMR19BRVNfMTkyAEFMR19TSURfUkMyAENBTEdfUkMyAEFMR19TSURfTUQyAENBTEdfTUQyAHN6T0lEX1NVQkpFQ1RfQUxUX05BTUUyAHN6T0lEX0FVVEhPUklUWV9LRVlfSURFTlRJRklFUjIAQ0VSVF9WMgBGdW5jYDIAWDUwOUNlcnRpZmljYXRlMgBDRVJUX1YzAENSWVBUX1NUUklOR19CQVNFNjQAQUxHX1NJRF9TQUZFUlNLNjQAVG9JbnQ2NABTSEEzODQAZ2V0X0VDRFNBX1AzODQAQUxHX1NJRF9TSEFfMzg0AENBTEdfU0hBXzM4NABBTEdfU0lEX1JDNABDQUxHX1JDNABBTEdfU0lEX01ENABDQUxHX01ENABBTEdfU0lEX1JDNQBDQUxHX1JDNQBBTEdfU0lEX1NTTDNTSEFNRDUAQ0FMR19TU0wzX1NIQU1ENQBBTEdfU0lEX01ENQBDQUxHX01ENQBDQUxHX0hVR0hFU19NRDUAU0hBMjU2AGdldF9FQ0RTQV9QMjU2AEFMR19TSURfU0hBXzI1NgBDQUxHX1NIQV8yNTYAQUxHX1NJRF9BRVNfMjU2AENBTEdfQUVTXzI1NgBBTEdfU0lEX1NBRkVSU0sxMjgAQUxHX1NJRF9BRVNfMTI4AENBTEdfQUVTXzEyOAA8TW9kdWxlPgBBTEdfU0lEX0lERUEAQUxHX1NJRF9LRUEAQUxHX1NJRF9TSEEAQ0FMR19TSEEAQUxHX1NJRF9FQ0RTQQBnZXRfRUNEU0EAQUxHX1RZUEVfUlNBAGdldF9SU0EAQ1JZUFRfU1RSSU5HX0hBU0hEQVRBAFBST1ZfRk9SVEVaWkEAQ1JZUFRfT0JKSURfQkxPQgBOQVRJVkVfQ1JZUFRPQVBJX0JMT0IAQ1JZUFRfQklUX0JMT0IAQUxHX1NJRF9ITUFDAENBTEdfSE1BQwBBTEdfU0lEX01BQwBQUk9WX0lOVEVMX1NFQwBHQwBDUllQVF9VU0VSX1BST1RFQ1RFRABBTEdfU0lEAEFMR19JRABDRVJUX1NFVF9LRVlfUFJPVl9IQU5ETEVfUFJPUF9JRABDRVJUX1NFVF9LRVlfQ09OVEVYVF9QUk9QX0lEAHBzelJlZ2lzdGVyZWRJRABBTEdfU0lEX1JJUEVNRABMT0FEX0xJQlJBUllfQVNfSU1BR0VfUkVTT1VSQ0UAQVRfS0VZRVhDSEFOR0UAUFJPVl9NU19FWENIQU5HRQBBTEdfQ0xBU1NfS0VZX0VYQ0hBTkdFAENSWVBUX0VYUE9SVEFCTEUAQ1JZUFRfQVJDSElWQUJMRQBMT0FEX0xJQlJBUllfQVNfREFUQUZJTEUAQ1JZUFRfVk9MQVRJTEUAQ0VSVF9BTFRfTkFNRV9ETlNfTkFNRQBGSUxFVElNRQBTWVNURU1USU1FAENSWVBUX09OTElORQBOT05FAEFMR19UWVBFAEFMR19DTEFTU19TSUdOQVRVUkUAQVRfU0lHTkFUVVJFAExPQURfTElCUkFSWV9BU19EQVRBRklMRV9FWENMVVNJVkUAQUxHX1NJRF9ESF9TQU5ERgBDUllQVF9TVFJJTkdfTk9DUkxGAEFMR19TSURfVExTMVBSRgBDQUxHX1RMUzFQUkYAQ0FMR19ESF9TRgBDUllQVF9TRgBBTEdfU0lEX0hBU0hfUkVQTEFDRV9PV0YAQ0FMR19IQVNIX1JFUExBQ0VfT1dGAFBST1ZfUkVQTEFDRV9PV0YAQ1JZUFRfQUNRVUlSRV9DQUNIRV9GTEFHAENSWVBUX0FDUVVJUkVfV0lORE9XX0hBTkRMRV9GTEFHAE5DUllQVF9BTExPV19QTEFJTlRFWFRfQVJDSElWSU5HX0ZMQUcATkNSWVBUX0FMTE9XX0FSQ0hJVklOR19GTEFHAENSWVBUX0FDUVVJUkVfVVNFX1BST1ZfSU5GT19GTEFHAENSWVBUX0FDUVVJUkVfU0lMRU5UX0ZMQUcATkNSWVBUX1NJTEVOVF9GTEFHAE5DUllQVF9BTExPV19QTEFJTlRFWFRfRVhQT1JUX0ZMQUcATkNSWVBUX0FMTE9XX0VYUE9SVF9GTEFHAE5DUllQVF9NQUNISU5FX0tFWV9GTEFHAENSWVBUX0FDUVVJUkVfQ09NUEFSRV9LRVlfRkxBRwBOQ1JZUFRfT1ZFUldSSVRFX0tFWV9GTEFHAENSWVBUX0FDUVVJUkVfUFJFRkVSX05DUllQVF9LRVlfRkxBRwBDUllQVF9BQ1FVSVJFX0FMTE9XX05DUllQVF9LRVlfRkxBRwBDUllQVF9BQ1FVSVJFX09OTFlfTkNSWVBUX0tFWV9GTEFHAFBST1ZfRUNfRUNOUkFfU0lHAFBST1ZfRUNfRUNEU0FfU0lHAFBST1ZfUlNBX1NJRwBnZXRfQ05HAFBLQ1NfN19BU05fRU5DT0RJTkcAWDUwOV9BU05fRU5DT0RJTkcAQ1JZUFRfQUNRVUlSRV9OT19IRUFMSU5HAFBST1ZfUk5HAEFMR19TSURfRUNESABBTEdfVFlQRV9ESABQUk9WX0RTU19ESABBTEdfU0lEX1NDSEFOTkVMX01BU1RFUl9IQVNIAENBTEdfU0NIQU5ORUxfTUFTVEVSX0hBU0gAQUxHX0NMQVNTX0hBU0gATE9BRF9XSVRIX0FMVEVSRURfU0VBUkNIX1BBVEgAQ1JZUFRfU1RSSU5HX0hFWEFTQ0lJAGdldF9DQVBJAEFMR19TSURfU0tJUEpBQ0sAQ0FMR19TS0lQSkFDSwBBTEdfVFlQRV9CTE9DSwBDUllQVF9LRUsAQUxHX1NJRF9DWUxJTktfTUVLAEFMR19TSURfVEVLAENBTEdfVEVLAEFMR19TSURfUlNBX01TQVRXT1JLAENSWVBUX0FDUVVJUkVfTkNSWVBUX0tFWV9GTEFHU19NQVNLAEFMR19TSURfU0VBTABDQUxHX1NFQUwAQUxHX1RZUEVfU0VDVVJFQ0hBTk5FTABQUk9WX1JTQV9TQ0hBTk5FTABQUk9WX0RIX1NDSEFOTkVMAExPQURfSUdOT1JFX0NPREVfQVVUSFpfTEVWRUwAQUxHX0NMQVNTX0FMTABQUk9WX0VDX0VDTlJBX0ZVTEwAUFJPVl9FQ19FQ0RTQV9GVUxMAFBST1ZfUlNBX0ZVTEwAQ0VSVF9BTFRfTkFNRV9VUkwAcHdzelVSTABQUk9WX1NTTABBTEdfVFlQRV9TVFJFQU0AQUxHX1NJRF9ESF9FUEhFTQBDQUxHX0RIX0VQSEVNAENSWVBUX1BSRUdFTgBDQUxHX1JTQV9TSUdOAENBTEdfTk9fU0lHTgBDRVJUX0NSRUFURV9TRUxGU0lHTl9OT19TSUdOAENBTEdfRFNTX1NJR04AQ0VSVF9BTFRfTkFNRV9FTlRSWV9VTklPTgBDRVJUX0VYVEVOU0lPTgBDRVJUX0FVVEhPUklUWV9LRVlfSUQyX0lORk8AQ0VSVF9BTFRfTkFNRV9JTkZPAENFUlRfSU5GTwBDUllQVF9LRVlfUFJPVl9JTkZPAENFUlRfUFVCTElDX0tFWV9JTkZPAENFUlRfQ1JFQVRFX1NFTEZTSUdOX05PX0tFWV9JTkZPAEFMR19TSURfUlNBX1BHUABDUllQVF9TVFJJTkdfTk9DUgBDUllQVF9TVFJJTkdfSEVYQVNDSUlBRERSAENSWVBUX1NUUklOR19IRVhBRERSAENSWVBUX1NUUklOR19CQVNFNjRIRUFERVIAQ1JZUFRfU1RSSU5HX0JBU0U2NFg1MDlDUkxIRUFERVIAQ1JZUFRfU1RSSU5HX0JBU0U2NFJFUVVFU1RIRUFERVIAQ1JZUFRfQUxHT1JJVEhNX0lERU5USUZJRVIAQUxHX1NJRF9UTFMxX01BU1RFUgBDQUxHX1RMUzFfTUFTVEVSAEFMR19TSURfUENUMV9NQVNURVIAQ0FMR19QQ1QxX01BU1RFUgBBTEdfU0lEX1NTTDJfTUFTVEVSAENBTEdfU1NMMl9NQVNURVIAQUxHX1NJRF9TU0wzX01BU1RFUgBDQUxHX1NTTDNfTUFTVEVSAEVLVV9TRVJWRVIATE9BRF9MSUJSQVJZX1NFQVJDSF9ETExfTE9BRF9ESVIATE9BRF9MSUJSQVJZX1NFQVJDSF9BUFBMSUNBVElPTl9ESVIAQ1JZUFRfSU5JVElBVE9SAEFMR19TSURfUlNBX1BLQ1MAQUxHX1NJRF9EU1NfUEtDUwBQUk9WX1JTQV9BRVMAQUxHX1NJRF9BRVMAQ0FMR19BRVMARE9OVF9SRVNPTFZFX0RMTF9SRUZFUkVOQ0VTAEFMR19TSURfM0RFUwBDQUxHXzNERVMAQUxHX1NJRF9ERVMAQ0FMR19ERVMAUFJPVl9TUFlSVVNfTFlOS1MAQUxHX1NJRF9EU1NfRE1TAENFUlRfRVhURU5TSU9OUwBMT0FEX0xJQlJBUllfU0VBUkNIX1VTRVJfRElSUwBMT0FEX0xJQlJBUllfU0VBUkNIX0RFRkFVTFRfRElSUwBBTEdfQ0xBU1MAQUxHX1RZUEVfRFNTAFBST1ZfRFNTAEVSUk9SX1NVQ0NFU1MAQ0VSVF9BTFRfTkFNRV9JUF9BRERSRVNTAFNFQ1VSSVRZX1NUQVRVUwBDUllQVF9TVFJJTkdfU1RSSUNUAExPQURfTElCUkFSWV9SRVFVSVJFX1NJR05FRF9UQVJHRVQAQ1JZUFRfREVMRVRFS0VZU0VUAENSWVBUX05FV0tFWVNFVABOVEVfQkFEX0tFWVNFVABDUllQVF9NQUNISU5FX0tFWVNFVABDUllQVF9DUkVBVEVfU0FMVABDUllQVF9OT19TQUxUAENSWVBUX1JFQ0lQSUVOVABDUllQVF9TSUxFTlQAQUxHX0NMQVNTX0RBVEFfRU5DUllQVABBTEdfQ0xBU1NfTVNHX0VOQ1JZUFQAQUxHX1NJRF9DQVNUAEFMR19TSURfUlNBX0VOVFJVU1QAQ1JZUFRfVkVSSUZZQ09OVEVYVABDUllQVF9DUkVBVEVfSVYAQUxHX1NJRF9FQ01RVgBDUllQVF9TVFJJTkdfSEVYUkFXAENSWVBUX1NUUklOR19IRVgAQUxHX1NJRF9ERVNYAENBTEdfREVTWABDQUxHX0tFQV9LRVlYAENBTEdfUlNBX0tFWVgAQ1JZUFRfU0dDS0VZAENSWVBUX0RBVEFfS0VZAEFMR19TSURfU0NIQU5ORUxfTUFDX0tFWQBDQUxHX1NDSEFOTkVMX01BQ19LRVkAUlNBX1BVQkxJQ19LRVkARUNDX1BVQkxJQ19LRVkAQUxHX1NJRF9TQ0hBTk5FTF9FTkNfS0VZAENBTEdfU0NIQU5ORUxfRU5DX0tFWQBDUllQVF9VUERBVEVfS0VZAENSWVBUX1NUUklOR19CQVNFNjRfQU5ZAEFMR19TSURfUlNBX0FOWQBBTEdfU0lEX0FOWQBBTEdfVFlQRV9BTlkAQ1JZUFRfU1RSSU5HX0FOWQBBTEdfQ0xBU1NfQU5ZAEFMR19TSURfRFNTX0FOWQBDUllQVF9TVFJJTkdfSEVYX0FOWQBDQUxHX0FHUkVFREtFWV9BTlkAQUxHX1NJRF9BR1JFRURfS0VZX0FOWQBDUllQVF9TVFJJTkdfQklOQVJZAENFUlRfQUxUX05BTUVfRU5UUlkATkNSWVBUX05BTUVfUFJPUEVSVFkATkNSWVBUX0xFTkdUSF9QUk9QRVJUWQBOQ1JZUFRfQUxHT1JJVEhNX0dST1VQX1BST1BFUlRZAE5DUllQVF9FWFBPUlRfUE9MSUNZX1BST1BFUlRZAHZhbHVlX18AcEVuY29kZVBhcmEAU0hBMWVjZHNhAFNIQTM4NGVjZHNhAFNIQTI1NmVjZHNhAFNIQTFyc2EATUQycnNhAFNIQTM4NHJzYQBNRDVyc2EAU0hBMjU2cnNhAGNiRGF0YQBwYkRhdGEAQXNuRW5jb2RlZERhdGEARW5jb2RlRGF0YQBwRGF0YQBwdkRhdGEAZ2V0X1Jhd0RhdGEAbXNjb3JsaWIAcFN1YmplY3RJc3N1ZXJCbG9iAF9ibG9iAGdldF9LZXlTcGVjAHNldF9LZXlTcGVjAHBkd0tleVNwZWMAZHdMZWdhY3lLZXlTcGVjAF9rZXlTcGVjAFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljAEludFB0ckFyaXRobWV0aWMAVG9GaWxlVGltZVV0YwBUb0ZpbGVUaW1lU3RydWN0dXJlVXRjAElzc3VlclVuaXF1ZUlkAFN1YmplY3RVbmlxdWVJZABwc3pBbGdJZABwc3pQdWJsaWNLZXlPYmpJZABwc3pPYmpJZABkd1Byb3BJZABwdWJsaWNLZXlJZABSZWFkAEFkZABwY2JFbmNvZGVkAHBiRW5jb2RlZABwdkVuY29kZWQAX2lzRGlzcG9zZWQAZ2V0X09pZABBbGdpZABnZXRfSXNJbnZhbGlkAFNhZmVIYW5kbGVaZXJvT3JNaW51c09uZUlzSW52YWxpZAA8RUNEU0FfUDUyMT5rX19CYWNraW5nRmllbGQAPEVDRFNBX1AzODQ+a19fQmFja2luZ0ZpZWxkADxFQ0RTQV9QMjU2PmtfX0JhY2tpbmdGaWVsZAA8RUNEU0E+a19fQmFja2luZ0ZpZWxkADxSU0E+a19fQmFja2luZ0ZpZWxkADxJbnN0YW5jZT5rX19CYWNraW5nRmllbGQAPE5hbWU+a19fQmFja2luZ0ZpZWxkADxUeXBlPmtfX0JhY2tpbmdGaWVsZAA8VmFsdWU+a19fQmFja2luZ0ZpZWxkADxNaWNyb3NvZnRTbWFydENhcmRQcm92aWRlcj5rX19CYWNraW5nRmllbGQAPE1pY3Jvc29mdFNvZnR3YXJlS2V5U3RvcmFnZVByb3ZpZGVyPmtfX0JhY2tpbmdGaWVsZABnZXRfU2Vjb25kAHdTZWNvbmQAZ2V0X01pbGxpc2Vjb25kAG1ldGhvZABDZXJ0QWx0TmFtZUNob2ljZQBkd0FsdE5hbWVDaG9pY2UAZ2V0X0luc3RhbmNlAEdldEhhc2hDb2RlAExvY2FsRnJlZQBTZXRDYWxsZXJGcmVlAF9jYWxsZXJGcmVlAEtleVVzYWdlAGtleVVzYWdlAEtleUV4Y2hhbmdlAEVuZEludm9rZQBCZWdpbkludm9rZQBJRGlzcG9zYWJsZQBnZXRfSGFuZGxlAE5DcnlwdFN0b3JhZ2VQcm92aWRlclNhZmVIYW5kbGUATkNyeXB0S2V5T3JDcnlwdFByb3ZpZGVyU2FmZUhhbmRsZQBMb2NhbEJ1ZmZlclNhZmVIYW5kbGUAQ3J5cHRLZXlTYWZlSGFuZGxlAExpYnJhcnlTYWZlSGFuZGxlAFJ1bnRpbWVUeXBlSGFuZGxlAFJlbGVhc2VIYW5kbGUAR2V0VHlwZUZyb21IYW5kbGUAb3duc0hhbmRsZQBEYW5nZXJvdXNHZXRIYW5kbGUATkNyeXB0SXNLZXlIYW5kbGUAX2hhbmRsZQBoRmlsZQBoTW9kdWxlAHB3c3pSZmM4MjJOYW1lAHB3c3pETlNOYW1lAGdldF9OYW1lAGxwUHJvY05hbWUAWDUwMERpc3Rpbmd1aXNoZWROYW1lAGxwRmlsZU5hbWUAZ2V0X1VzZUxlZ2FjeUtleVN0b3JlTmFtZQBfbGVnYWN5S2V5U3RvcmVOYW1lAFg1MDlBbHRlcm5hdGl2ZU5hbWUAYWxnb3JpdGhtTmFtZQBnZXRfUHJvdmlkZXJOYW1lAEdldFByb3ZpZGVyTmFtZQBwc3pQcm92aWRlck5hbWUAX3Byb3ZpZGVyTmFtZQBwT3RoZXJOYW1lAHB3c3pDb250YWluZXJOYW1lAERuc05hbWUAZ2V0X1N1YmplY3ROYW1lAEdldE5hbWUAcHdzelByb3ZOYW1lAHBzektleU5hbWUAa2V5TmFtZQBEaXJlY3RvcnlOYW1lAHByb3BlcnR5TmFtZQBuYW1lAHBFbmRUaW1lAGR3SGlnaERhdGVUaW1lAGR3TG93RGF0ZVRpbWUAZGF0ZVRpbWUAcFN0YXJ0VGltZQBnZXRfVHlwZQBzZXRfVHlwZQBYNTA5QWx0ZXJuYXRpdmVOYW1lVHlwZQBWYWx1ZVR5cGUAZHdDZXJ0RW5jb2RpbmdUeXBlAEdldFVuZGVybHlpbmdUeXBlAFByb3ZpZGVyVHlwZQBscHN6U3RydWN0VHlwZQBHZXRUeXBlAGR3UHJvdlR5cGUATm90QmVmb3JlAG5vdEJlZm9yZQBTaWduYXR1cmUAUHRyVG9TdHJ1Y3R1cmUATkNyeXB0SGFuZGxlQmFzZQBLZXlQcm92aWRlckJhc2UAQ2xvc2UARGlzcG9zZQBUcnlQYXJzZQBYNTA5Q2VydGlmaWNhdGUAR2VuZXJhdGVTZWxmU2lnbmVkQ2VydGlmaWNhdGUAQ3J5cHRTaWduQW5kRW5jb2RlQ2VydGlmaWNhdGUAR2VuZXJhdGVDZXJ0aWZpY2F0ZQBTZXJpYWxpemVDZXJ0aWZpY2F0ZQBpc3N1aW5nQ2VydGlmaWNhdGUAQ2VydENyZWF0ZVNlbGZTaWduQ2VydGlmaWNhdGUAQ3JlYXRlAE11bHRpY2FzdERlbGVnYXRlAG92ZXJ3cml0ZQBDb21waWxlckdlbmVyYXRlZEF0dHJpYnV0ZQBHdWlkQXR0cmlidXRlAFVudmVyaWZpYWJsZUNvZGVBdHRyaWJ1dGUARGVidWdnYWJsZUF0dHJpYnV0ZQBDb21WaXNpYmxlQXR0cmlidXRlAEFzc2VtYmx5VGl0bGVBdHRyaWJ1dGUAQXNzZW1ibHlUcmFkZW1hcmtBdHRyaWJ1dGUAVGFyZ2V0RnJhbWV3b3JrQXR0cmlidXRlAEFzc2VtYmx5RmlsZVZlcnNpb25BdHRyaWJ1dGUAU2VjdXJpdHlQZXJtaXNzaW9uQXR0cmlidXRlAEFzc2VtYmx5Q29uZmlndXJhdGlvbkF0dHJpYnV0ZQBBc3NlbWJseURlc2NyaXB0aW9uQXR0cmlidXRlAEZsYWdzQXR0cmlidXRlAENvbXBpbGF0aW9uUmVsYXhhdGlvbnNBdHRyaWJ1dGUAQXNzZW1ibHlQcm9kdWN0QXR0cmlidXRlAEFzc2VtYmx5Q29weXJpZ2h0QXR0cmlidXRlAEFzc2VtYmx5Q29tcGFueUF0dHJpYnV0ZQBSdW50aW1lQ29tcGF0aWJpbGl0eUF0dHJpYnV0ZQBnZXRfTWludXRlAHdNaW51dGUAQnl0ZQBnZXRfVmFsdWUAc2V0X1ZhbHVlAGdldF9IYXNWYWx1ZQBfdmFsdWUARnJlZXplAGtleVNpemUAU3VwcHJlc3NGaW5hbGl6ZQBTaXplT2YAU3lzdGVtLlJ1bnRpbWUuVmVyc2lvbmluZwBwY2NoU3RyaW5nAENyeXB0QmluYXJ5VG9TdHJpbmcAcHN6U3RyaW5nAGRpc3Bvc2luZwBPcGVuRXhpc3RpbmcARm9yRWFjaABDb21wdXRlSGFzaABnZXRfTGVuZ3RoAGdldF9Nb250aAB3TW9udGgAUmVhZFN0cmluZ1VuaQBXcml0ZVN0cmluZ1VuaQBQdHJUb1N0cmluZ1VuaQBTdHJpbmdUb0hHbG9iYWxVbmkAUHRyVG9TdHJpbmdBbnNpAG9iagBBc3luY0NhbGxiYWNrAGNhbGxiYWNrAGdldF9EYXlPZldlZWsAd0RheU9mV2VlawBBbGxvY0hHbG9iYWwARnJlZUhHbG9iYWwAZ2V0X0NyaXRpY2FsAGZDcml0aWNhbABjcml0aWNhbABNYXJzaGFsAHZhbABTeXN0ZW0uQ29tcG9uZW50TW9kZWwAY3J5cHQzMi5kbGwAVkNTSm9uZXMuRmlkZGxlckNlcnRHZW4uZGxsAG5jcnlwdC5kbGwAVXJsAGNQcm92UGFyYW0AcmdQcm92UGFyYW0AQ3J5cHRHZXRQcm92UGFyYW0AZHdQYXJhbQBoTWVtAGdldF9JdGVtAGl0ZW0AT3BlcmF0aW5nU3lzdGVtAGdldF9TaWduYXR1cmVBbGdvcml0aG0ASGFzaEFsZ29yaXRobVRvU2lnbmF0dXJlQWxnb3JpdGhtAHBTaWduYXR1cmVBbGdvcml0aG0Ac2lnbmF0dXJlQWxnb3JpdGhtAEhhc2hBbGdvcml0aG0AaGFzaEFsZ29yaXRobQBhbGdvcml0aG0AVEVudW0AV3JpdGVFbnVtAGdldF9Jc0VudW0Ab3BfTGVzc1RoYW4AZG4AVkNTSm9uZXMuRmlkZGxlckNlcnRHZW4AcGR3RGF0YUxlbgBfZnJvemVuAE1hcnNoYWxYNTA5RXh0ZW5zaW9uAGdldF9FeHRlbnNpb24AY0V4dGVuc2lvbgBFbmNvZGVFeHRlbnNpb24AWDUwOUtleVVzYWdlRXh0ZW5zaW9uAFg1MDlFbmhhbmNlZEtleVVzYWdlRXh0ZW5zaW9uAFg1MDlTdWJqZWN0QWx0ZXJuYXRpdmVOYW1lRXh0ZW5zaW9uAHJnRXh0ZW5zaW9uAFg1MDlTdWJqZWN0S2V5SWRlbnRpZmllckV4dGVuc2lvbgBYNTA5QXV0aG9yaXR5S2V5SWRlbnRpZmllckV4dGVuc2lvbgBYNTA5QmFzaWNDb25zdHJhaW50c0V4dGVuc2lvbgBfZXh0ZW5zaW9uAGdldF9PU1ZlcnNpb24AZ2V0X1ZlcnNpb24AQ2VydGlmaWNhdGVWZXJzaW9uAGR3VmVyc2lvbgBTZWN1cml0eUFjdGlvbgBTeXN0ZW0uUmVmbGVjdGlvbgBPaWRDb2xsZWN0aW9uAE1hcnNoYWxYNTA5RXh0ZW5zaW9uQ29sbGVjdGlvbgBfY29sbGVjdGlvbgBXaW4zMkV4Y2VwdGlvbgBPYmplY3REaXNwb3NlZEV4Y2VwdGlvbgBOb3RTdXBwb3J0ZWRFeGNlcHRpb24AQXJndW1lbnROdWxsRXhjZXB0aW9uAEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24AQXJndW1lbnRFeGNlcHRpb24AcGNiSW5mbwBwSW5mbwBwdlN0cnVjdEluZm8AcEtleVByb3ZJbmZvAHB2SGFzaEF1eEluZm8AcHZBdXhJbmZvAFN1YmplY3RQdWJsaWNLZXlJbmZvAFplcm8AVkNTSm9uZXMuRmlkZGxlckNlcnRHZW4uSW50ZXJvcABnZXRfQWxnb3JpdGhtR3JvdXAAR2V0QWxnb3JpdGhtR3JvdXAAZ2V0X1llYXIAd1llYXIAQ2xlYXIAQXV0aG9yaXR5Q2VydFNlcmlhbE51bWJlcgBzZXJpYWxOdW1iZXIATkNyeXB0UHJvcGVydHlSZWFkZXIAQVBJTXNXaW5Db3JlTGlicmFyeUxvYWRlcgBnZXRfTWljcm9zb2Z0U21hcnRDYXJkUHJvdmlkZXIAU0hBMUNyeXB0b1NlcnZpY2VQcm92aWRlcgBOQ3J5cHRPcGVuU3RvcmFnZVByb3ZpZGVyAE5DcnlwdFN0b3JhZ2VQcm92aWRlcgBnZXRfTWljcm9zb2Z0U29mdHdhcmVLZXlTdG9yYWdlUHJvdmlkZXIAX3N0b3JhZ2VQcm92aWRlcgBwaFByb3ZpZGVyAENuZ0tleVByb3ZpZGVyAENhcGlLZXlQcm92aWRlcgBfa2V5UHJvdmlkZXIAcHN6UHJvdmlkZXIAU3RyaW5nQnVpbGRlcgBfYnVmZmVyAG90aGVyAHBzekNvbnRhaW5lcgBGaWxlVGltZUhlbHBlcgBOb3RBZnRlcgBub3RBZnRlcgBOQ3J5cHRQcm9wZXJ0eVdyaXRlcgBBdXRob3JpdHlDZXJ0SXNzdWVyAEZyZWV6ZXIAR2V0TGFzdFdpbjMyRXJyb3IAR2V0RW51bWVyYXRvcgBDZXJ0aWZpY2F0ZUdlbmVyYXRvcgBSYW5kb21OdW1iZXJHZW5lcmF0b3IALmN0b3IALmNjdG9yAF9ibG9iUHRyAFN0cnVjdHVyZVRvUHRyAEludFB0cgBwdHIAZ2V0X0hvdXIAd0hvdXIAT0lEcwBTeXN0ZW0uRGlhZ25vc3RpY3MAd01pbGxpc2Vjb25kcwBTeXN0ZW0uUnVudGltZS5JbnRlcm9wU2VydmljZXMAU3lzdGVtLlJ1bnRpbWUuQ29tcGlsZXJTZXJ2aWNlcwBEZWJ1Z2dpbmdNb2RlcwBDbmdQcm9wZXJ0aWVzAE1pY3Jvc29mdC5XaW4zMi5TYWZlSGFuZGxlcwBkbnNOYW1lcwBhbHROYW1lcwBTeXN0ZW0uUnVudGltZS5JbnRlcm9wU2VydmljZXMuQ29tVHlwZXMAaXBBZGRyZXNzZXMAU3lzdGVtLlNlY3VyaXR5LkNyeXB0b2dyYXBoeS5YNTA5Q2VydGlmaWNhdGVzAEdldE5vblplcm9CeXRlcwBHZXRBZGRyZXNzQnl0ZXMAWDUwOUtleVVzYWdlRmxhZ3MAQ3J5cHRCaW5hcnlTdHJpbmdGbGFncwBTZWxmU2lnbkZsYWdzAENyeXB0S2V5UHJvdkluZm9GbGFncwBDcnlwdEFjcXVpcmVDb250ZXh0RmxhZ3MAZHdGbGFncwBOQ3J5cHRDcmVhdGVQZXJzaXN0ZWRLZXlGbGFncwBBY3F1aXJlUHJpdmF0ZUtleUZsYWdzAENyeXB0R2VuS2V5RmxhZ3MATG9hZExpYnJhcnlGbGFncwBFcXVhbHMAZ2V0X0V4dGVuc2lvbnMAX21hcnNoYWxlZEV4dGVuc2lvbnMAUmVidWlsZEV4dGVuc2lvbnMAcEV4dGVuc2lvbnMAU3lzdGVtLlNlY3VyaXR5LlBlcm1pc3Npb25zAEFkZFllYXJzAEtleVByb3ZpZGVycwBwdlBhcmFtZXRlcnMAQWRkSG91cnMASVBBZGRyZXNzAEdldFByb2NBZGRyZXNzAElwQWRkcmVzcwBjVW51c2VkQml0cwBOQ3J5cHRGcmVlT2JqZWN0AGhPYmplY3QAb2JqZWN0AFN1YmplY3QAU3lzdGVtLk5ldABsZWZ0AHJpZ2h0AG9wX0V4cGxpY2l0AEdldFZhbHVlT3JEZWZhdWx0AHBjYlJlc3VsdABJQXN5bmNSZXN1bHQAcmVzdWx0AEVudmlyb25tZW50AGdldF9DdXJyZW50AGdldF9Db3VudABOQ3J5cHQAcENlcnQAY2VydABjb252ZXJ0AGdldF9IYXNDbmdTdXBwb3J0AF9oYXNDbmdTdXBwb3J0AFBsYXRmb3JtU3VwcG9ydABUT3V0AGNiSW5wdXQAcGJJbnB1dABjYk91dHB1dABwYk91dHB1dABNb3ZlTmV4dABTeXN0ZW0uVGV4dABDcnlwdEFjcXVpcmVDb250ZXh0AENyeXB0UmVsZWFzZUNvbnRleHQAcENvbnRleHQAcENlcnRDb250ZXh0AHBoUHJvdgBDcmVhdGVOZXcAZ2V0X05vdwBnZXRfVXRjTm93AENyeXB0RXhwb3J0UHVibGljS2V5SW5mb0V4AENyeXB0RW5jb2RlT2JqZWN0RXgATG9hZExpYnJhcnlFeABnZXRfRGF5AHdEYXkARG5zQWx0TmFtZXNGcm9tQXJyYXkAQ25nRXhwb3J0UG9saWN5AGdldF9LZXkAZ2V0X1B1YmxpY0tleQBUb1B1YmxpY0tleQBfcHVibGljS2V5AE5DcnlwdENyZWF0ZVBlcnNpc3RlZEtleQBDcmVhdGVLZXkAQ3J5cHRBY3F1aXJlQ2VydGlmaWNhdGVQcml2YXRlS2V5AGdldF9IYXNQcml2YXRlS2V5AHByaXZhdGVLZXkATkNyeXB0RmluYWxpemVLZXkAcGhLZXkAQ3J5cHRHZW5LZXkATkNyeXB0T3BlbktleQBFeHRyYWN0S2V5AHBmQ2FsbGVyRnJlZVByb3ZPck5DcnlwdEtleQBwaENyeXB0UHJvdk9yTkNyeXB0S2V5AGdldF9Jc05DcnlwdEtleQBuQ3J5cHRLZXkAQ3J5cHREZXN0cm95S2V5AFN5c3RlbS5TZWN1cml0eS5DcnlwdG9ncmFwaHkAQ29weQBjYkJpbmFyeQBwYkJpbmFyeQBGcmVlTGlicmFyeQBjQWx0RW50cnkAcmdBbHRFbnRyeQBvcF9FcXVhbGl0eQBvcF9JbmVxdWFsaXR5AEdlbmVyYXRlQ2VydGlmaWNhdGVBdXRob3JpdHkAU3lzdGVtLlNlY3VyaXR5AElzTnVsbE9yRW1wdHkATkNyeXB0R2V0UHJvcGVydHkATkNyeXB0U2V0UHJvcGVydHkAQ2VydFNldENlcnRpZmljYXRlQ29udGV4dFByb3BlcnR5AHBzelByb3BlcnR5AAAAB1IAUwBBAAAVRQBDAEQAUwBBAF8AUAAyADUANgAAFUUAQwBEAFMAQQBfAFAAMwA4ADQAABVFAEMARABTAEEAXwBQADUAMgAxAAALRQBDAEQAUwBBAABrTQBpAGMAcgBvAHMAbwBmAHQAIABFAG4AaABhAG4AYwBlAGQAIABSAFMAQQAgAGEAbgBkACAAQQBFAFMAIABDAHIAeQBwAHQAbwBnAHIAYQBwAGgAaQBjACAAUAByAG8AdgBpAGQAZQByAACAg00AaQBjAHIAbwBzAG8AZgB0ACAARQBuAGgAYQBuAGMAZQBkACAAUgBTAEEAIABhAG4AZAAgAEEARQBTACAAQwByAHkAcAB0AG8AZwByAGEAcABoAGkAYwAgAFAAcgBvAHYAaQBkAGUAcgAgACgAUAByAG8AdABvAHQAeQBwAGUAKQAAYUMAQQBQAEkAIABkAG8AZQBzACAAbgBvAHQAIABzAHUAcABwAG8AcgB0ACAAYQBsAGcAbwByAGkAdABoAG0AcwAgAG8AdABoAGUAcgAgAHQAaABhAG4AIABSAFMAQQAuAAATYQBsAGcAbwByAGkAdABoAG0AABFrAGUAeQBVAHMAYQBnAGUAAC9GAGEAaQBsAGUAZAAgAHQAbwAgAGcAZQB0ACAAcAByAG8AcABlAHIAdAB5AC4AAAlDAEEAUABJAABXQwBlAHIAdABpAGYAaQBjAGEAdABlACAAZABvAGUAcwAgAG4AbwB0ACAAYwBvAG4AdABhAGkAbgAgAGEAIABwAHIAaQB2AGEAdABlACAAawBlAHkALgAACWMAZQByAHQAACkxAC4AMgAuADgANAAwAC4AMQAxADMANQA0ADkALgAxAC4AMQAuADIAACkxAC4AMgAuADgANAAwAC4AMQAxADMANQA0ADkALgAxAC4AMQAuADQAACkxAC4AMgAuADgANAAwAC4AMQAxADMANQA0ADkALgAxAC4AMQAuADUAACMxAC4AMgAuADgANAAwAC4AMQAwADAANAA1AC4ANAAuADEAACsxAC4AMgAuADgANAAwAC4AMQAxADMANQA0ADkALgAxAC4AMQAuADEAMQAAJzEALgAyAC4AOAA0ADAALgAxADAAMAA0ADUALgA0AC4AMwAuADIAACsxAC4AMgAuADgANAAwAC4AMQAxADMANQA0ADkALgAxAC4AMQAuADEAMgAAJzEALgAyAC4AOAA0ADAALgAxADAAMAA0ADUALgA0AC4AMwAuADMAAFlJAHMAcwB1AGkAbgBnACAAYwBlAHIAdABpAGYAaQBjAGEAdABlACAAbQB1AHMAdAAgAGgAYQB2AGUAIABhACAAcAByAGkAdgBhAHQAZQAgAGsAZQB5AC4AACVpAHMAcwB1AGkAbgBnAEMAZQByAHQAaQBmAGkAYwBhAHQAZQAAIzEALgAzAC4ANgAuADEALgA1AC4ANQAuADcALgAzAC4AMQAAM0YAYQBpAGwAZQBkACAAdABvACAAZwBlAG4AZQByAGEAdABlACAAYQAgAGsAZQB5AC4AAA1MAGUAbgBnAHQAaAAAG0UAeABwAG8AcgB0ACAAUABvAGwAaQBjAHkAAC9GAGEAaQBsAGUAZAAgAHQAbwAgAGYAaQBuAGEAbABpAHoAZQAgAGsAZQB5AC4AAAlOAGEAbQBlAAAfQQBsAGcAbwByAGkAdABoAG0AIABHAHIAbwB1AHAAACdGAGEAaQBsAGUAZAAgAHQAbwAgAG8AcABlAG4AIABrAGUAeQAuAAAHQwBOAEcAAAliAGwAbwBiAAAVbgBjAHIAeQBwAHQALgBkAGwAbAAAG04AQwByAHkAcAB0AE8AcABlAG4ASwBlAHkAAA9rAGUAeQBOAGEAbQBlAAAjMQAuADIALgA4ADQAMAAuADEAMAAwADQANQAuADIALgAxAAApMQAuADIALgA4ADQAMAAuADEAMQAzADUANAA5AC4AMQAuADEALgAxAAATMgAuADUALgAyADkALgAzADUAABMyAC4ANQAuADIAOQAuADEANwAAM1UAbgBhAGIAbABlACAAdABvACAAcQB1AGUAcgB5ACAAcAByAG8AcABlAHIAdAB5AC4AAC9VAG4AYQBiAGwAZQAgAHQAbwAgAHMAZQB0ACAAcAByAG8AcABlAHIAdAB5AC4AADtWAGEAbAB1AGUAIABtAHUAcwB0ACAAYgBlACAAYQBuACAAZQBuAHUAbQBlAHIAYQB0AGkAbwBuAC4AAAt2AGEAbAB1AGUAAFFGAGEAaQBsAGUAZAAgAHQAbwAgAG8AcABlAG4AIAB0AGgAZQAgAEMATgBHACAAcwB0AG8AcgBhAGcAZQAgAHAAcgBvAHYAaQBkAGUAcgAuAABPTQBpAGMAcgBvAHMAbwBmAHQAIABTAG8AZgB0AHcAYQByAGUAIABLAGUAeQAgAFMAdABvAHIAYQBnAGUAIABQAHIAbwB2AGkAZABlAHIAAFNNAGkAYwByAG8AcwBvAGYAdAAgAFMAbQBhAHIAdAAgAEMAYQByAGQAIABLAGUAeQAgAFMAdABvAHIAYQBnAGUAIABQAHIAbwB2AGkAZABlAHIAAAAAIXR6lQPOn0iNnAddn4rR/wAEIAEBCAMgAAEFIAEBEREEIAEBDgQgAQECBSABARFBBhUSUQESCAYVElEB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"
#<< param ( [Parameter(ParameterSetName="Install",Mandatory=$true)][Switch]$Install,[Parameter(ParameterSetName="Install")]$PasswordForPrivateKey,$SSLPort,[Parameter(ParameterSetName="Remove",Mandatory=$true)][Switch]$Remove,[Parameter(ParameterSetName="info",Mandatory=$true)][Switch]$ShowInfo)
#ensure that we are elevated.
If (-Not ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) {
write-host "You must run this command elevated"
return
}
function Import-CertificateFile(
[Parameter(Mandatory=$true)][System.Security.Cryptography.X509Certificates.X509Certificate2] $cert ,
[Parameter(Mandatory=$true)][string] $StoreName,
[switch] $LocalMachine,
[switch] $CurrentUser,
[string] $CertPassword
) {
$StoreScope = "CurrentUser"
if( $localMachine ) {
$StoreScope = "LocalMachine"
}
if (Test-Path "cert:\$StoreScope\$StoreName") {
try {
$store = New-Object System.Security.Cryptography.X509Certificates.X509Store $StoreName, $StoreScope
$store.Open([System.Security.Cryptography.X509Certificates.OpenFlags]::ReadWrite)
$store.Add($cert)
$store.Dispose()
Write-Host "Successfully added '$($cert.SubjectName.Name)' to 'cert:\$StoreScope\$StoreName\$($cert.Thumbprint)'."
}
catch {
Write-Error ("Error adding '$($cert.SubjectName.Name)' to 'cert:\$StoreScope\$StoreName': $_ .") -ErrorAction:Continue
}
}
else {
Write-Warning "Certificate store '$StoreName' does not exist. Skipping..."
}
}
function Get-SANs($c) {
$SAN = ($c.extensions |? { $_.Oid.FriendlyName -eq "Subject Alternative Name"} |% { (new-object -type System.Security.Cryptography.AsnEncodedData $_.Oid,$_.RawData).Format($true) } )
$SANs = "$SAN".Split( "`n`r" ,[StringSplitOptions]::RemoveEmptyEntries )
return $SANs
}
function Get-CNs($c) {
$CNs= $c.SubjectName.Name.split(",") |? { $_ -match "CN=" } |% { $_.split("=" )[1] }
return $CNs
}
# init_pfx
# init_cert
function Install-Certificate( $PasswordForPrivateKey, $SSLPort ) {
Get-EventSubscriber | Unregister-Event
@("$ENV:APPDATA\Microsoft\Crypto\keys", "$ENV:ALLUSERSPROFILE\Microsoft\Crypto\keys" ) |% {
$fsw = New-Object IO.FileSystemWatcher $_ -Property @{IncludeSubdirectories = $false;NotifyFilter = [IO.NotifyFilters]'FileName, LastWrite, DirectoryName';EnableRaisingEvents = $true }
$null = Register-ObjectEvent $fsw Created -Action {
# write-host "KEY FILE: $($Event.SourceEventArgs.FullPath)"
$acl = get-acl $Event.SourceEventArgs.FullPath
$acl.AddAccessRule( (new-object System.Security.AccessControl.FileSystemAccessRule "users","Read","Allow") )
$null = set-acl $Event.SourceEventArgs.FullPath -aclobject $acl
}
}
# put in root so this system recognizes the certificate
$c = [System.Security.Cryptography.X509Certificates.X509Certificate2] $cert
Import-CertificateFile $c "root" -localmachine
if( $pfx -and $PasswordForPrivateKey ) {
# private key installation supoprted
$sf = [System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]::Exportable + [System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]::MachineKeySet + [System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]::PersisteKeySet
$c = new-object -type System.Security.Cryptography.X509Certificates.X509Certificate2] -argumentlist $pfx, $PasswordForPrivateKey, $sf
Import-CertificateFile $c "my" -localmachine
$appid = "{$((New-Guid).Guid)}"
# Register certs for SSL too..
if( $SSLPort ) {
# enable firewall for that port.
netsh advfirewall firewall add rule name="SSL on port $SSLPort" protocol=TCP dir=in localport=$SSLPort action=allow
$certhash = "certhash=$($c.Thumbprint)"
Get-SANs $c |% {
$type,$value = "$_".split("=")
if( $type -eq "DNS Name" ) {
$bind = "hostnameport=$($value):$SSLPort"
}
if( $type -eq "IP Address" ) {
if( $value.indexOf(":") -gt -1 ) {
$bind = "ipport=[$($value)]:$SSLPort"
} else {
$bind = "ipport=$($value):$SSLPort"
}
}
$null = netsh http delete sslcert $bind
$shh = netsh http add sslcert $bind $certhash appid=$appid certstorename=MY
if( $shh -match "successfully" ) {
write-host "$shh ($($c.Thumbprint)) to $bind"
} else {
write-warning "netsh http add sslcert $bind $certhash appid=$appid certstorename=MY `n$shh"
}
}
$CNs = Get-CNs $c |% {
$value = "$_"
if( !( $value -match "\s+") ) {
$bind = "hostnameport=$($value):$SSLPort"
$null = netsh http delete sslcert $bind
$shh = netsh http add sslcert $bind $certhash appid=$appid certstorename=MY
if( $shh -match "successfully" ) {
write-host "$shh ($($c.Thumbprint)) to $bind"
} else {
write-warning "netsh http add sslcert $bind $certhash appid=$appid certstorename=MY `n$shh"
}
}
}
}
}
Get-EventSubscriber | Unregister-Event
}
function remove-cert( $path ) {
if( test-path $path ) {
write-host "Removing certificate at $path"
erase $path -ea 0
if( test-path $path ) {
write-error "Failed to remove certificate at $path"
}
}
}
function go($Install,$PasswordForPrivateKey, $Remove,$ShowInfo, $SSLPort ) {
if( $ShowInfo ) {
$c = [System.Security.Cryptography.X509Certificates.X509Certificate2] $cert
Write-host "This script has a certificate with thumbprint $($c.Thumbprint)"
if( $pfx ) {
Write-host " - The private key for this certificate is available (password protected)"
} else {
Write-host " - The private key for this certificate is not available"
}
$SANs = Get-SANs $c
if( $SANs ) {
Write-Host " - Supported Hosts (IPs/Hostnames)"
$SANs |% { Write-Host " - $_" }
}
$CNs= Get-CNs $c
if( $CNs ) {
Write-Host " - Supported Common Names"
$CNs |% { Write-Host " - $_" }
}
return
}
if( $install ) {
if( $PasswordForPrivateKey ) {
if( $pfx ) {
Install-Certificate $PasswordForPrivateKey $SSLPort
} else {
write-error "This script does not contain a certificate with a private key."
return;
}
} else {
Install-Certificate
}
}
if( $Remove ) {
$c = [System.Security.Cryptography.X509Certificates.X509Certificate2] $cert
if( $SSLPort ) {
$certhash = "certhash=$($c.Thumbprint)"
Get-SANs $c |% {
$type,$value = "$_".split("=")
if( $type -eq "DNS Name" ) {
$bind = "hostnameport=$($value):$SSLPort"
}
if( $type -eq "IP Address" ) {
if( $value.indexOf(":") -gt -1 ) {
$bind = "ipport=[$($value)]:$SSLPort"
} else {
$bind = "ipport=$($value):$SSLPort"
}
}
$shh = netsh http delete sslcert $bind
if( $shh -match "successfully" ) {
write-host "$($shh.Trim()) from $bind"
}
}
$CNs = Get-CNs $c |% {
$value = "$_"
if( !( $value -match "\s+") ) {
$bind = "hostnameport=$($value):$SSLPort"
$shh = netsh http delete sslcert $bind
if( $shh -match "successfully" ) {
write-host "$($shh.Trim()) from $bind"
}
}
}
}
remove-cert "cert:\localmachine\my\$($c.Thumbprint)"
remove-cert "cert:\localmachine\root\$($c.Thumbprint)"
remove-cert "cert:\currentuser\my\$($c.Thumbprint)"
remove-cert "cert:\currentuser\root\$($c.Thumbprint)"
}
}
#>>
function Delete-TryHarder( [String]$filename ) {
if( (test-path $filename ) ) {
$filename = resolve-path $filename
erase $filename -ea 0 -force
# did it erase?
if( (test-path $filename ) ) {
# try to move it to the temp folder first.
$newfilename = "$env:tmp\delete-on-reboot-$((New-Guid).Guid)"
move $filename $newfilename -ea 0 -force
if( (test-path $newfilename ) ) {
$filename = $newfilename
}
# use Kernel32.MoveFileEx
if( ! $script:kernel32 ) {
$script:kernel32 = Add-Type -Name MoveFileUtils -MemberDefinition '[DllImport("kernel32.dll", SetLastError=true, CharSet=CharSet.Auto)] public static extern bool MoveFileEx(string lpExistingFileName, string lpNewFileName, int dwFlags);' -PassThru
}
# delete on next reboot.
$script:kernel32::MoveFileEx($filename, $null, 0x00000004)
write-debug "'$filename' will be deleted on reboot"
}
}
}
function Generate-Script([System.Security.Cryptography.X509Certificates.X509Certificate2] $cert, $password ) {
if( -not $OutputScript ) {
$OutputScript = ".\$($cert.Thumbprint)-Certificate.ps1"
}
# use this script as a template
$txt = Get-Content -raw $PSCommandPath
$txt = $txt -replace "(?ms)\#\>\>.*?\#\<\<",""
# add cert with private key to script
if( $password ) {
if( !$cert.HasPrivateKey ) {
write-error "Password specfied, but certificate doesn't have a private key."
return;
}
$pfx = [System.Convert]::ToBase64String( $cert.Export([System.Security.Cryptography.X509Certificates.X509ContentType]::Pkcs12, $Password ) )
$txt = $txt -replace "\# init_pfx","`$pfx = [System.Convert]::FromBase64String('$pfx')"
}
# add cert without private key to script
$cer = [System.Convert]::ToBase64String( $cert.Export([System.Security.Cryptography.X509Certificates.X509ContentType]::Cert ) )
$txt = $txt -replace "\# init_cert","`$cert = [System.Convert]::FromBase64String('$cer')"
# save new script
set-Content -path $OutputScript -value $txt
write-host "Created Certificate Script : $(resolve-path $OutputScript)"
}
function Generate-SelfSignedCertificate([Parameter(Mandatory=$true)][String[]] $DnsNames, $Password ,[String[]] $IpAddresses, [String] $SignatureAlgorithm ) {
# ensure LocalHost is added
# and any that are specified by the user
$IpAddresses = @("127.0.0.1", "::1") + $IpAddresses
# look up addresses for domain names
$Addresses += ( $DnsNames |% {[System.Net.Dns]::GetHostAddresses($_)} )
# create IP address objects
$Addresses += $IpAddresses |? {$_ }|% { [System.Net.IpAddress]::Parse($_) }
# remove duplicates
$Addresses = $Addresses | sort -Property IpAddressToString | select-object -Unique
# generate certificates
$key = [VCSJones.FiddlerCertGen.PrivateKey]::CreateNew(
[VCSJones.FiddlerCertGen.KeyProviders]::CNG,
"Self-Signed-Key;",
[VCSJones.FiddlerCertGen.Algorithm]::RSA,
[VCSJones.FiddlerCertGen.KeyUsage]::KeyExchange,
2048,
$true)
# $key.KeySpec = [VCSJones.FiddlerCertGen.Interop.KeySpec]::AT_KEYEXCHANGE
$gen = new-object -type VCSJones.FiddlerCertGen.CertificateGenerator
$cert = $gen.GenerateSelfSignedCertificate(
$key,
( new-object -type System.Security.Cryptography.X509Certificates.X500DistinguishedName "CN=$($dnsNames[0]), O=FOR ENCRYPTION ONLY-NO TRUST IMPLIED, OU=Created by script" ),
[VCSJones.FiddlerCertGen.HashAlgorithm] $SignatureAlgorithm,
$DnsNames,
$Addresses);
# drop the key
$null = $key.Dispose()
if( $cert ) {
Write-host "Generated certificate: $($cert.Thumbprint)"
Generate-Script -cert $cert -password $password
} else {
write-error "Failed to generate self-signed certificate."
}
}
function Load-Assembly([string]$base64Assembly) {
# convert to binary
$assembly = [System.Convert]::FromBase64String($base64Assembly)
# generate temporary filename
$name = "$env:temp\$((New-Guid).Guid).dll"
# save file to temporary location
Set-Content -Path $name -Value $assembly -Encoding Byte
# load assembly
Add-Type -Path $name
# Clean up assembly
$null = Delete-TryHarder $name
# [System.Convert]::ToBase64String( [System.IO.File]::ReadAllBytes(".\VCSJones.FiddlerCertGen.dll") )
}
# load the cert gen assembly.
Load-Assembly($CertGen)
if( $SelfSigned ) {
# we're creating a self-signed certificate
if( $Password ) {
Generate-SelfSignedCertificate $DnsNames $Password $IpAddresses $SignatureAlgorithm
} else {
write-error "You must specify a password when generating a self-signed password"
}
} else {
# we're going to use an existing certificate that the user has.
if( $PfxPassword ) {
$exportable =[System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]::Exportable
$cert = new-object -type System.Security.Cryptography.X509Certificates.X509Certificate2 -argumentlist $certificate, $PfxPassword, $exportable -ea 0
} else {
if( $certificate -is [System.Security.Cryptography.X509Certificates.X509Certificate2] ) {
$cert = $certificate
} else {
$p = resolve-path $certificate
if( $p ) {
if ( "Cert" -eq $p.Drive ) {
$cert = dir $p.path
} else {
$cert = new-object -type System.Security.Cryptography.X509Certificates.X509Certificate2 -argumentlist $certificate -ea 0
}
}
}
}
if( $cert ) {
Generate-Script -cert $cert -password $password
} else {
write-error "Unable to load certificate from $certificate"
}
}
#<< go $Install $PasswordForPrivateKey $Remove $ShowInfo $SSLPort