@alternative-path/testlens-playwright-reporter 0.3.9 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.d.ts +7 -1
- package/index.js +62 -29
- package/index.ts +65 -30
- package/package.json +2 -1
- package/testlens-ca-bundle.pem +88 -0
package/index.d.ts
CHANGED
|
@@ -157,9 +157,15 @@ export interface SpecData {
|
|
|
157
157
|
export declare class TestLensReporter implements Reporter {
|
|
158
158
|
private config;
|
|
159
159
|
private axiosInstance;
|
|
160
|
+
/**
|
|
161
|
+
* Get bundled CA certificates for TestLens
|
|
162
|
+
* Combines custom CA bundle with Node.js root certificates
|
|
163
|
+
* This ensures SSL works with both testlens.qa-path.com and other HTTPS endpoints
|
|
164
|
+
*/
|
|
165
|
+
private static getBundledCaCertificates;
|
|
160
166
|
/**
|
|
161
167
|
* Automatically detect and load system CA certificates
|
|
162
|
-
* Uses
|
|
168
|
+
* Uses bundled certificates as primary source, falls back to system certificates
|
|
163
169
|
*/
|
|
164
170
|
private static getSystemCaCertificates;
|
|
165
171
|
private runId;
|
package/index.js
CHANGED
|
@@ -22,32 +22,63 @@ async function getMime() {
|
|
|
22
22
|
}
|
|
23
23
|
class TestLensReporter {
|
|
24
24
|
/**
|
|
25
|
-
*
|
|
26
|
-
*
|
|
25
|
+
* Get bundled CA certificates for TestLens
|
|
26
|
+
* Combines custom CA bundle with Node.js root certificates
|
|
27
|
+
* This ensures SSL works with both testlens.qa-path.com and other HTTPS endpoints
|
|
27
28
|
*/
|
|
28
|
-
static
|
|
29
|
-
|
|
30
|
-
//
|
|
29
|
+
static getBundledCaCertificates() {
|
|
30
|
+
const allCerts = [];
|
|
31
|
+
// First, add our bundled TestLens CA certificate chain
|
|
32
|
+
try {
|
|
33
|
+
const certPath = path.join(__dirname, 'testlens-ca-bundle.pem');
|
|
34
|
+
if (fs.existsSync(certPath)) {
|
|
35
|
+
const certData = fs.readFileSync(certPath, 'utf8');
|
|
36
|
+
// Split the bundle into individual certificates
|
|
37
|
+
const certs = certData.match(/-----BEGIN CERTIFICATE-----[\s\S]+?-----END CERTIFICATE-----/g);
|
|
38
|
+
if (certs && certs.length > 0) {
|
|
39
|
+
const buffers = certs.map(cert => Buffer.from(cert, 'utf8'));
|
|
40
|
+
allCerts.push(...buffers);
|
|
41
|
+
if (process.env.DEBUG) {
|
|
42
|
+
console.log(`✓ Loaded bundled TestLens CA certificates (${buffers.length} certificate(s))`);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
if (process.env.DEBUG) {
|
|
49
|
+
console.log('⚠️ Bundled CA certificate not available');
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
// Then, add Node.js built-in root certificates for general SSL support
|
|
31
53
|
try {
|
|
32
54
|
if (tls.rootCertificates && Array.isArray(tls.rootCertificates) && tls.rootCertificates.length > 0) {
|
|
33
|
-
|
|
34
|
-
|
|
55
|
+
const rootCerts = tls.rootCertificates.map(cert => Buffer.from(cert, 'utf8'));
|
|
56
|
+
allCerts.push(...rootCerts);
|
|
35
57
|
if (process.env.DEBUG) {
|
|
36
|
-
console.log(`✓
|
|
58
|
+
console.log(`✓ Added Node.js built-in root certificates (${rootCerts.length} certificates)`);
|
|
37
59
|
}
|
|
38
|
-
return rootCerts;
|
|
39
60
|
}
|
|
40
61
|
}
|
|
41
62
|
catch (error) {
|
|
42
|
-
// Fall through to file-based detection if tls.rootCertificates is not available
|
|
43
63
|
if (process.env.DEBUG) {
|
|
44
|
-
console.log('⚠️ Node.js built-in root certificates not available
|
|
64
|
+
console.log('⚠️ Node.js built-in root certificates not available');
|
|
45
65
|
}
|
|
46
66
|
}
|
|
67
|
+
return allCerts.length > 0 ? allCerts : undefined;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Automatically detect and load system CA certificates
|
|
71
|
+
* Uses bundled certificates as primary source, falls back to system certificates
|
|
72
|
+
*/
|
|
73
|
+
static getSystemCaCertificates() {
|
|
74
|
+
// First, try to use our bundled certificates (Node.js rootCertificates)
|
|
75
|
+
const bundledCerts = TestLensReporter.getBundledCaCertificates();
|
|
76
|
+
if (bundledCerts && bundledCerts.length > 0) {
|
|
77
|
+
return bundledCerts;
|
|
78
|
+
}
|
|
47
79
|
// Fallback: Try to load from file system (for older Node.js versions or special cases)
|
|
48
80
|
const platform = os.platform();
|
|
49
81
|
const certificates = [];
|
|
50
|
-
// Fallback: Try to load certificates from common file system locations
|
|
51
82
|
const certPaths = [];
|
|
52
83
|
if (platform === 'darwin') {
|
|
53
84
|
// macOS: Common certificate locations
|
|
@@ -156,42 +187,44 @@ class TestLensReporter {
|
|
|
156
187
|
// Determine SSL validation behavior
|
|
157
188
|
let rejectUnauthorized = true; // Default to secure
|
|
158
189
|
let ca = undefined;
|
|
159
|
-
//
|
|
160
|
-
// This
|
|
161
|
-
const
|
|
190
|
+
// Use bundled CA certificates as primary source (Node.js rootCertificates)
|
|
191
|
+
// This ensures consistent behavior across all platforms
|
|
192
|
+
const bundledCerts = TestLensReporter.getBundledCaCertificates();
|
|
162
193
|
// Load custom CA certificate if explicitly provided (for advanced users)
|
|
194
|
+
// Custom certificates will be combined with bundled certificates
|
|
163
195
|
if (this.config.caCertificate) {
|
|
164
196
|
try {
|
|
165
197
|
if (fs.existsSync(this.config.caCertificate)) {
|
|
166
198
|
const customCert = fs.readFileSync(this.config.caCertificate);
|
|
167
|
-
// Combine
|
|
168
|
-
if (
|
|
169
|
-
ca = [...
|
|
199
|
+
// Combine bundled certs with custom cert
|
|
200
|
+
if (bundledCerts && Array.isArray(bundledCerts) && bundledCerts.length > 0) {
|
|
201
|
+
ca = [...bundledCerts, customCert];
|
|
202
|
+
console.log(`✓ Using bundled CA certificates + custom certificate: ${this.config.caCertificate}`);
|
|
170
203
|
}
|
|
171
204
|
else {
|
|
172
205
|
ca = customCert;
|
|
206
|
+
console.log(`✓ Using custom CA certificate: ${this.config.caCertificate}`);
|
|
173
207
|
}
|
|
174
|
-
console.log(`✓ Using custom CA certificate: ${this.config.caCertificate}`);
|
|
175
208
|
}
|
|
176
209
|
else {
|
|
177
210
|
console.warn(`⚠️ CA certificate file not found: ${this.config.caCertificate}`);
|
|
178
|
-
// Fall back to
|
|
179
|
-
ca =
|
|
211
|
+
// Fall back to bundled certs if custom cert not found
|
|
212
|
+
ca = bundledCerts || undefined;
|
|
180
213
|
}
|
|
181
214
|
}
|
|
182
215
|
catch (error) {
|
|
183
216
|
console.warn(`⚠️ Failed to read CA certificate file: ${this.config.caCertificate}`, error.message);
|
|
184
|
-
// Fall back to
|
|
185
|
-
ca =
|
|
217
|
+
// Fall back to bundled certs if custom cert read fails
|
|
218
|
+
ca = bundledCerts || undefined;
|
|
186
219
|
}
|
|
187
220
|
}
|
|
188
221
|
else {
|
|
189
|
-
// Use
|
|
190
|
-
//
|
|
191
|
-
|
|
192
|
-
ca
|
|
193
|
-
|
|
194
|
-
|
|
222
|
+
// Use bundled certificates as primary source
|
|
223
|
+
// This works reliably across all platforms (Windows, macOS, Linux)
|
|
224
|
+
ca = bundledCerts || undefined;
|
|
225
|
+
if (ca && process.env.DEBUG) {
|
|
226
|
+
console.log(`✓ Using bundled CA certificates (${Array.isArray(ca) ? ca.length : 1} certificates)`);
|
|
227
|
+
}
|
|
195
228
|
}
|
|
196
229
|
// Check various ways SSL validation can be disabled (in order of precedence)
|
|
197
230
|
if (this.config.ignoreSslErrors) {
|
package/index.ts
CHANGED
|
@@ -185,33 +185,66 @@ export class TestLensReporter implements Reporter {
|
|
|
185
185
|
private axiosInstance: AxiosInstance;
|
|
186
186
|
|
|
187
187
|
/**
|
|
188
|
-
*
|
|
189
|
-
*
|
|
188
|
+
* Get bundled CA certificates for TestLens
|
|
189
|
+
* Combines custom CA bundle with Node.js root certificates
|
|
190
|
+
* This ensures SSL works with both testlens.qa-path.com and other HTTPS endpoints
|
|
190
191
|
*/
|
|
191
|
-
private static
|
|
192
|
-
|
|
193
|
-
|
|
192
|
+
private static getBundledCaCertificates(): Buffer[] | undefined {
|
|
193
|
+
const allCerts: Buffer[] = [];
|
|
194
|
+
|
|
195
|
+
// First, add our bundled TestLens CA certificate chain
|
|
196
|
+
try {
|
|
197
|
+
const certPath = path.join(__dirname, 'testlens-ca-bundle.pem');
|
|
198
|
+
if (fs.existsSync(certPath)) {
|
|
199
|
+
const certData = fs.readFileSync(certPath, 'utf8');
|
|
200
|
+
// Split the bundle into individual certificates
|
|
201
|
+
const certs = certData.match(/-----BEGIN CERTIFICATE-----[\s\S]+?-----END CERTIFICATE-----/g);
|
|
202
|
+
if (certs && certs.length > 0) {
|
|
203
|
+
const buffers = certs.map(cert => Buffer.from(cert, 'utf8'));
|
|
204
|
+
allCerts.push(...buffers);
|
|
205
|
+
if (process.env.DEBUG) {
|
|
206
|
+
console.log(`✓ Loaded bundled TestLens CA certificates (${buffers.length} certificate(s))`);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
} catch (error) {
|
|
211
|
+
if (process.env.DEBUG) {
|
|
212
|
+
console.log('⚠️ Bundled CA certificate not available');
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
// Then, add Node.js built-in root certificates for general SSL support
|
|
194
217
|
try {
|
|
195
218
|
if (tls.rootCertificates && Array.isArray(tls.rootCertificates) && tls.rootCertificates.length > 0) {
|
|
196
|
-
|
|
197
|
-
|
|
219
|
+
const rootCerts = tls.rootCertificates.map(cert => Buffer.from(cert, 'utf8'));
|
|
220
|
+
allCerts.push(...rootCerts);
|
|
198
221
|
if (process.env.DEBUG) {
|
|
199
|
-
console.log(`✓
|
|
222
|
+
console.log(`✓ Added Node.js built-in root certificates (${rootCerts.length} certificates)`);
|
|
200
223
|
}
|
|
201
|
-
return rootCerts;
|
|
202
224
|
}
|
|
203
225
|
} catch (error) {
|
|
204
|
-
// Fall through to file-based detection if tls.rootCertificates is not available
|
|
205
226
|
if (process.env.DEBUG) {
|
|
206
|
-
console.log('⚠️ Node.js built-in root certificates not available
|
|
227
|
+
console.log('⚠️ Node.js built-in root certificates not available');
|
|
207
228
|
}
|
|
208
229
|
}
|
|
209
230
|
|
|
231
|
+
return allCerts.length > 0 ? allCerts : undefined;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
/**
|
|
235
|
+
* Automatically detect and load system CA certificates
|
|
236
|
+
* Uses bundled certificates as primary source, falls back to system certificates
|
|
237
|
+
*/
|
|
238
|
+
private static getSystemCaCertificates(): Buffer[] | undefined {
|
|
239
|
+
// First, try to use our bundled certificates (Node.js rootCertificates)
|
|
240
|
+
const bundledCerts = TestLensReporter.getBundledCaCertificates();
|
|
241
|
+
if (bundledCerts && bundledCerts.length > 0) {
|
|
242
|
+
return bundledCerts;
|
|
243
|
+
}
|
|
244
|
+
|
|
210
245
|
// Fallback: Try to load from file system (for older Node.js versions or special cases)
|
|
211
246
|
const platform = os.platform();
|
|
212
247
|
const certificates: Buffer[] = [];
|
|
213
|
-
|
|
214
|
-
// Fallback: Try to load certificates from common file system locations
|
|
215
248
|
const certPaths: string[] = [];
|
|
216
249
|
|
|
217
250
|
if (platform === 'darwin') {
|
|
@@ -348,39 +381,41 @@ export class TestLensReporter implements Reporter {
|
|
|
348
381
|
let rejectUnauthorized = true; // Default to secure
|
|
349
382
|
let ca: Buffer | string | Buffer[] | undefined = undefined;
|
|
350
383
|
|
|
351
|
-
//
|
|
352
|
-
// This
|
|
353
|
-
const
|
|
384
|
+
// Use bundled CA certificates as primary source (Node.js rootCertificates)
|
|
385
|
+
// This ensures consistent behavior across all platforms
|
|
386
|
+
const bundledCerts = TestLensReporter.getBundledCaCertificates();
|
|
354
387
|
|
|
355
388
|
// Load custom CA certificate if explicitly provided (for advanced users)
|
|
389
|
+
// Custom certificates will be combined with bundled certificates
|
|
356
390
|
if (this.config.caCertificate) {
|
|
357
391
|
try {
|
|
358
392
|
if (fs.existsSync(this.config.caCertificate)) {
|
|
359
393
|
const customCert = fs.readFileSync(this.config.caCertificate);
|
|
360
|
-
// Combine
|
|
361
|
-
if (
|
|
362
|
-
ca = [...
|
|
394
|
+
// Combine bundled certs with custom cert
|
|
395
|
+
if (bundledCerts && Array.isArray(bundledCerts) && bundledCerts.length > 0) {
|
|
396
|
+
ca = [...bundledCerts, customCert];
|
|
397
|
+
console.log(`✓ Using bundled CA certificates + custom certificate: ${this.config.caCertificate}`);
|
|
363
398
|
} else {
|
|
364
399
|
ca = customCert;
|
|
400
|
+
console.log(`✓ Using custom CA certificate: ${this.config.caCertificate}`);
|
|
365
401
|
}
|
|
366
|
-
console.log(`✓ Using custom CA certificate: ${this.config.caCertificate}`);
|
|
367
402
|
} else {
|
|
368
403
|
console.warn(`⚠️ CA certificate file not found: ${this.config.caCertificate}`);
|
|
369
|
-
// Fall back to
|
|
370
|
-
ca =
|
|
404
|
+
// Fall back to bundled certs if custom cert not found
|
|
405
|
+
ca = bundledCerts || undefined;
|
|
371
406
|
}
|
|
372
407
|
} catch (error) {
|
|
373
408
|
console.warn(`⚠️ Failed to read CA certificate file: ${this.config.caCertificate}`, (error as Error).message);
|
|
374
|
-
// Fall back to
|
|
375
|
-
ca =
|
|
409
|
+
// Fall back to bundled certs if custom cert read fails
|
|
410
|
+
ca = bundledCerts || undefined;
|
|
376
411
|
}
|
|
377
412
|
} else {
|
|
378
|
-
// Use
|
|
379
|
-
//
|
|
380
|
-
|
|
381
|
-
ca
|
|
382
|
-
|
|
383
|
-
|
|
413
|
+
// Use bundled certificates as primary source
|
|
414
|
+
// This works reliably across all platforms (Windows, macOS, Linux)
|
|
415
|
+
ca = bundledCerts || undefined;
|
|
416
|
+
if (ca && process.env.DEBUG) {
|
|
417
|
+
console.log(`✓ Using bundled CA certificates (${Array.isArray(ca) ? ca.length : 1} certificates)`);
|
|
418
|
+
}
|
|
384
419
|
}
|
|
385
420
|
|
|
386
421
|
// Check various ways SSL validation can be disabled (in order of precedence)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@alternative-path/testlens-playwright-reporter",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.1",
|
|
4
4
|
"description": "Universal Playwright reporter for TestLens - works with both TypeScript and JavaScript projects",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"types": "index.d.ts",
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
"lib/",
|
|
15
15
|
"postinstall.js",
|
|
16
16
|
"cross-env.js",
|
|
17
|
+
"testlens-ca-bundle.pem",
|
|
17
18
|
"README.md",
|
|
18
19
|
"CHANGELOG.md"
|
|
19
20
|
],
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
|
2
|
+
MIIFvDCCBKSgAwIBAgIQCCpc5jpiqFvmHWmaKaa8zTANBgkqhkiG9w0BAQsFADA8
|
|
3
|
+
MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRwwGgYDVQQDExNBbWF6b24g
|
|
4
|
+
UlNBIDIwNDggTTA0MB4XDTI1MTExNDAwMDAwMFoXDTI2MTIxMzIzNTk1OVowGDEW
|
|
5
|
+
MBQGA1UEAwwNKi5xYS1wYXRoLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
|
|
6
|
+
AQoCggEBAMFsdDGpKLNQ9GayoFXQpE9VLNxEZ/76AaiJMj30Nkuf245KxcPdmPMQ
|
|
7
|
+
rklyBsKv2r4vGwqIrIh4ey59Zpi5z/GMtSP6DwPU/MGGRQGJ9Mpc2dhpxNvka7hW
|
|
8
|
+
9+t/uFAMbwvAhAe82fahsd6q/jtRMChkKQ2Ndln41PPnTPzqqoc2GWdYJO69W1x0
|
|
9
|
+
5CbovMOOoGKkskrS2TNe5+vYp8c8AWR6ga3zR2lxMVDAAXKcD/ejMq/FMR8TD9rf
|
|
10
|
+
6pWnsalQE7UAIgSltu9hrJRttCnyC6343WIQKspd3x+fZ6WdqtR4YywLij9DMBgJ
|
|
11
|
+
KwYUHMjoY4lfkSgowhgnuCUFeqVhBrsCAwEAAaOCAtwwggLYMB8GA1UdIwQYMBaA
|
|
12
|
+
FB9SkmFWglR/gWbYHT0KqjJch90IMB0GA1UdDgQWBBSsbNiBXRvG7yzfgQnHA4Fm
|
|
13
|
+
Gvve1TAYBgNVHREEETAPgg0qLnFhLXBhdGguY29tMBMGA1UdIAQMMAowCAYGZ4EM
|
|
14
|
+
AQIBMA4GA1UdDwEB/wQEAwIFoDATBgNVHSUEDDAKBggrBgEFBQcDATA7BgNVHR8E
|
|
15
|
+
NDAyMDCgLqAshipodHRwOi8vY3JsLnIybTA0LmFtYXpvbnRydXN0LmNvbS9yMm0w
|
|
16
|
+
NC5jcmwwdQYIKwYBBQUHAQEEaTBnMC0GCCsGAQUFBzABhiFodHRwOi8vb2NzcC5y
|
|
17
|
+
Mm0wNC5hbWF6b250cnVzdC5jb20wNgYIKwYBBQUHMAKGKmh0dHA6Ly9jcnQucjJt
|
|
18
|
+
MDQuYW1hem9udHJ1c3QuY29tL3IybTA0LmNlcjAMBgNVHRMBAf8EAjAAMIIBfgYK
|
|
19
|
+
KwYBBAHWeQIEAgSCAW4EggFqAWgAdgDYCVU7lE96/8gWGW+UT4WrsPj8XodVJg8V
|
|
20
|
+
0S5yu0VLFAAAAZqBmF/qAAAEAwBHMEUCIHg3mktTsuS8r57mR014haS8fqwcbqa1
|
|
21
|
+
P3so9Qd02JFBAiEAsHQf6eH9AL0HoG5jEVfz4aZdNp/Y8unnDO+ZWSfW/wcAdgDC
|
|
22
|
+
MX5XRRmjRe5/ON6ykEHrx8IhWiK/f9W1rXaa2Q5SzQAAAZqBmF/lAAAEAwBHMEUC
|
|
23
|
+
IQCZhIaG3vpxTThIdHhvNCymkHGKFLggUBcPCqYMdYVFpAIgW+BszH9Kdon3IKNJ
|
|
24
|
+
xKx5e4K+XZ+NhfXqqnCmPYeCwzQAdgCUTkOH+uzB74HzGSQmqBhlAcfTXzgCAT9y
|
|
25
|
+
Z31VNy4Z2AAAAZqBmF/1AAAEAwBHMEUCIQDGh+jKNI6NO30js2yl0ItBltCDGA5d
|
|
26
|
+
3A1qoPf81FCF8wIgFTxoXXotS8nhDzOeyJh1wL6wKMxcwKXUUMcOKEjFsH4wDQYJ
|
|
27
|
+
KoZIhvcNAQELBQADggEBAMY6zXuf7YSu4s/nHd4qSjOq7mAPvWKSumPMXcRp4FfX
|
|
28
|
+
16dAyqaiasX2B7dXccks4QeCUyNxCjh89irTYwgDcde8J05PEM9dpxUglyWE6gEB
|
|
29
|
+
r+pp8xJzT9hP2TmLhkNsFKhiT8aR+wz9fiALVDeQLyUS1GOSmnAXbH8MjZkm5Cxb
|
|
30
|
+
Taqb+N8alKrMf7Y9Cwf77KRFpKqm+b1e6h/EuVIJWAFau1jKVS5Qd6KTjyf0sRys
|
|
31
|
+
7nvF3JqKVIb6BlTimNUq1wYMJKX6mOb/MlHo8juzKMb+MYUA5ZHrO36u3nOgThiI
|
|
32
|
+
oOJavnwzLhk7AWp8urdy9yTj8P3b/3H3VtCfYMeAabE=
|
|
33
|
+
-----END CERTIFICATE-----
|
|
34
|
+
|
|
35
|
+
-----BEGIN CERTIFICATE-----
|
|
36
|
+
MIIEXjCCA0agAwIBAgITB3MSTyqVLj7Rili9uF0bwM5fJzANBgkqhkiG9w0BAQsF
|
|
37
|
+
ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6
|
|
38
|
+
b24gUm9vdCBDQSAxMB4XDTIyMDgyMzIyMjYzNVoXDTMwMDgyMzIyMjYzNVowPDEL
|
|
39
|
+
MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEcMBoGA1UEAxMTQW1hem9uIFJT
|
|
40
|
+
QSAyMDQ4IE0wNDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM3pVR6A
|
|
41
|
+
lQOp4xe776FdePXyejgA38mYx1ou9/jrpV6Sfn+/oqBKgwhY6ePsQHHQayWBJdBn
|
|
42
|
+
v4Wz363qRI4XUh9swBFJ11TnZ3LqOMvHmWq2+loA0QPtOfXdJ2fHBLrBrngtJ/GB
|
|
43
|
+
0p5olAVYrSZgvQGP16Rf8ddtNyxEEhYm3HuhmNi+vSeAq1tLYJPAvRCXonTpWdSD
|
|
44
|
+
xY6hvdmxlqTYi82AtBXSfpGQ58HHM0hw0C6aQakghrwWi5fGslLOqzpimNMIsT7c
|
|
45
|
+
qa0GJx6JfKqJqmQQNplO2h8n9ZsFJgBowof01ppdoLAWg6caMOM0om/VILKaa30F
|
|
46
|
+
9W/r8Qjah7ltGVkCAwEAAaOCAVowggFWMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYD
|
|
47
|
+
VR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAdBgNV
|
|
48
|
+
HQ4EFgQUH1KSYVaCVH+BZtgdPQqqMlyH3QgwHwYDVR0jBBgwFoAUhBjMhTTsvAyU
|
|
49
|
+
lC4IWZzHshBOCggwewYIKwYBBQUHAQEEbzBtMC8GCCsGAQUFBzABhiNodHRwOi8v
|
|
50
|
+
b2NzcC5yb290Y2ExLmFtYXpvbnRydXN0LmNvbTA6BggrBgEFBQcwAoYuaHR0cDov
|
|
51
|
+
L2NydC5yb290Y2ExLmFtYXpvbnRydXN0LmNvbS9yb290Y2ExLmNlcjA/BgNVHR8E
|
|
52
|
+
ODA2MDSgMqAwhi5odHRwOi8vY3JsLnJvb3RjYTEuYW1hem9udHJ1c3QuY29tL3Jv
|
|
53
|
+
b3RjYTEuY3JsMBMGA1UdIAQMMAowCAYGZ4EMAQIBMA0GCSqGSIb3DQEBCwUAA4IB
|
|
54
|
+
AQA+1O5UsAaNuW3lHzJtpNGwBnZd9QEYFtxpiAnIaV4qApnGS9OCw5ZPwie7YSlD
|
|
55
|
+
ZF5yyFPsFhUC2Q9uJHY/CRV1b5hIiGH0+6+w5PgKiY1MWuWT8VAaJjFxvuhM7a/e
|
|
56
|
+
fN2TIw1Wd6WCl6YRisunjQOrSP+unqC8A540JNyZ1JOE3jVqat3OZBGgMvihdj2w
|
|
57
|
+
Y23EpwesrKiQzkHzmvSH67PVW4ycbPy08HVZnBxZ5NrlGG9bwXR3fNTaz+c+Ej6c
|
|
58
|
+
5AnwI3qkOFgSkg3Y75cdFz6pO/olK+e3AqygAcv0WjzmkDPuBjssuZjCHMC56oH3
|
|
59
|
+
GJkV29Di2j5prHJbwZjG1inU
|
|
60
|
+
-----END CERTIFICATE-----
|
|
61
|
+
|
|
62
|
+
-----BEGIN CERTIFICATE-----
|
|
63
|
+
MIIEkjCCA3qgAwIBAgITBn+USionzfP6wq4rAfkI7rnExjANBgkqhkiG9w0BAQsF
|
|
64
|
+
ADCBmDELMAkGA1UEBhMCVVMxEDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNj
|
|
65
|
+
b3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4x
|
|
66
|
+
OzA5BgNVBAMTMlN0YXJmaWVsZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1
|
|
67
|
+
dGhvcml0eSAtIEcyMB4XDTE1MDUyNTEyMDAwMFoXDTM3MTIzMTAxMDAwMFowOTEL
|
|
68
|
+
MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv
|
|
69
|
+
b3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJ4gHHKeNXj
|
|
70
|
+
ca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgHFzZM
|
|
71
|
+
9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qw
|
|
72
|
+
IFAGbHrQgLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6
|
|
73
|
+
VOujw5H5SNz/0egwLX0tdHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L
|
|
74
|
+
93FcXmn/6pUCyziKrlA4b9v7LWIbxcceVOF34GfID5yHI9Y/QCB/IIDEgEw+OyQm
|
|
75
|
+
jgSubJrIqg0CAwEAAaOCATEwggEtMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/
|
|
76
|
+
BAQDAgGGMB0GA1UdDgQWBBSEGMyFNOy8DJSULghZnMeyEE4KCDAfBgNVHSMEGDAW
|
|
77
|
+
gBScXwDfqgHXMCs4iKK4bUqc8hGRgzB4BggrBgEFBQcBAQRsMGowLgYIKwYBBQUH
|
|
78
|
+
MAGGImh0dHA6Ly9vY3NwLnJvb3RnMi5hbWF6b250cnVzdC5jb20wOAYIKwYBBQUH
|
|
79
|
+
MAKGLGh0dHA6Ly9jcnQucm9vdGcyLmFtYXpvbnRydXN0LmNvbS9yb290ZzIuY2Vy
|
|
80
|
+
MD0GA1UdHwQ2MDQwMqAwoC6GLGh0dHA6Ly9jcmwucm9vdGcyLmFtYXpvbnRydXN0
|
|
81
|
+
LmNvbS9yb290ZzIuY3JsMBEGA1UdIAQKMAgwBgYEVR0gADANBgkqhkiG9w0BAQsF
|
|
82
|
+
AAOCAQEAYjdCXLwQtT6LLOkMm2xF4gcAevnFWAu5CIw+7bMlPLVvUOTNNWqnkzSW
|
|
83
|
+
MiGpSESrnO09tKpzbeR/FoCJbM8oAxiDR3mjEH4wW6w7sGDgd9QIpuEdfF7Au/ma
|
|
84
|
+
eyKdpwAJfqxGF4PcnCZXmTA5YpaP7dreqsXMGz7KQ2hsVxa81Q4gLv7/wmpdLqBK
|
|
85
|
+
bRRYh5TmOTFffHPLkIhqhBGWJ6bt2YFGpn6jcgAKUj6DiAdjd4lpFw85hdKrCEVN
|
|
86
|
+
0FE6/V1dN2RMfjCyVSRCnTawXZwXgWHxyvkQAiSr6w10kY17RSlQOYiypok1JR4U
|
|
87
|
+
akcjMS9cmvqtmg5iUaQqqcT5NJ0hGA==
|
|
88
|
+
-----END CERTIFICATE-----
|