@angular-architects/native-federation 20.0.6 → 20.0.7
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/README.md +102 -2
- package/package.json +3 -3
- package/src/builders/build/builder.js +84 -59
- package/src/builders/build/builder.js.map +1 -1
- package/src/builders/build/federation-build-notifier.d.ts +65 -0
- package/src/builders/build/federation-build-notifier.js +183 -0
- package/src/builders/build/federation-build-notifier.js.map +1 -0
- package/src/builders/build/schema.d.ts +2 -0
- package/src/builders/build/schema.json +15 -0
- package/src/schematics/init/schematic.js +6 -2
- package/src/schematics/init/schematic.js.map +1 -1
- package/src/tools/fstart-as-data-url.d.ts +1 -1
- package/src/tools/fstart-as-data-url.js +1 -1
- package/src/tools/fstart-as-data-url.js.map +1 -1
package/README.md
CHANGED
|
@@ -351,7 +351,7 @@ We support combining Native Federation with Module Federation. Please find [more
|
|
|
351
351
|
Since version 19.0.13, Native Federation for Angular supports Angular I18N. Here are some things to keep in mind:
|
|
352
352
|
|
|
353
353
|
- Make sure, you also add I18N support to your shell (e.g., `ng add @angular/localize --project shell`)
|
|
354
|
-
- Configure I18N in your `angular.json`. Don
|
|
354
|
+
- Configure I18N in your `angular.json`. Don't use command line parameters (as the Native Federation Builder does not forward them to the ApplicationBuilder by design)
|
|
355
355
|
- In production, make sure your `federation.manifest.json` points to the right language versions of your remotes
|
|
356
356
|
|
|
357
357
|
### Angular Localization
|
|
@@ -362,7 +362,7 @@ Since version 20.0.6, loading locales works out of the box, when the feature `ig
|
|
|
362
362
|
|
|
363
363
|
```js
|
|
364
364
|
features: {
|
|
365
|
-
ignoreUnusedDeps: true
|
|
365
|
+
ignoreUnusedDeps: true;
|
|
366
366
|
}
|
|
367
367
|
```
|
|
368
368
|
|
|
@@ -384,6 +384,106 @@ module.exports = withNativeFederation({
|
|
|
384
384
|
|
|
385
385
|
This option was introduced with version 19.0.14.
|
|
386
386
|
|
|
387
|
+
#### Shell reloading when MFE finishes building for local development
|
|
388
|
+
|
|
389
|
+
During development, you might want your shell application to automatically reload when a remote Micro Frontend finishes rebuilding. This is especially useful when you're developing multiple applications simultaneously and want to see changes immediately without manual refresh.
|
|
390
|
+
|
|
391
|
+
Native Federation provides a **build notifications system** that enables automatic page reloads when federation artifacts are rebuilt.
|
|
392
|
+
|
|
393
|
+
##### Configuration
|
|
394
|
+
|
|
395
|
+
**1. Enable build notifications in the remote MFE**
|
|
396
|
+
|
|
397
|
+
In your remote's `angular.json`, add the `buildNotifications` configuration:
|
|
398
|
+
|
|
399
|
+
```json
|
|
400
|
+
{
|
|
401
|
+
"projects": {
|
|
402
|
+
"mfe1": {
|
|
403
|
+
"architect": {
|
|
404
|
+
"build": {
|
|
405
|
+
"builder": "@angular-architects/native-federation:build",
|
|
406
|
+
"options": {
|
|
407
|
+
"target": "mfe1:esbuild:development",
|
|
408
|
+
"rebuildDelay": 0,
|
|
409
|
+
"dev": true,
|
|
410
|
+
"buildNotifications": {
|
|
411
|
+
"enable": true
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
```
|
|
420
|
+
|
|
421
|
+
**2. Add the watcher to your shell application**
|
|
422
|
+
|
|
423
|
+
Import and call `watchFederationBuildCompletion` in your shell's `main.ts`:
|
|
424
|
+
|
|
425
|
+
```typescript
|
|
426
|
+
import {
|
|
427
|
+
watchFederationBuildCompletion,
|
|
428
|
+
BUILD_NOTIFICATIONS_ENDPOINT,
|
|
429
|
+
} from '@angular-architects/native-federation';
|
|
430
|
+
|
|
431
|
+
// Shell watching MFE1 (running on port 4201)
|
|
432
|
+
if (!environment.production) {
|
|
433
|
+
watchFederationBuildCompletion(
|
|
434
|
+
`http://localhost:4201${BUILD_NOTIFICATIONS_ENDPOINT}`
|
|
435
|
+
);
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
bootstrapApplication(AppComponent, appConfig);
|
|
439
|
+
```
|
|
440
|
+
|
|
441
|
+
##### Multiple MFEs
|
|
442
|
+
|
|
443
|
+
If your shell watches multiple MFEs, you can call the function multiple times:
|
|
444
|
+
|
|
445
|
+
```typescript
|
|
446
|
+
if (!environment.production) {
|
|
447
|
+
// Watch MFE1 on port 4201
|
|
448
|
+
watchFederationBuildCompletion(
|
|
449
|
+
`http://localhost:4201${BUILD_NOTIFICATIONS_ENDPOINT}`
|
|
450
|
+
);
|
|
451
|
+
|
|
452
|
+
// Watch MFE2 on port 4202
|
|
453
|
+
watchFederationBuildCompletion(
|
|
454
|
+
`http://localhost:4202${BUILD_NOTIFICATIONS_ENDPOINT}`
|
|
455
|
+
);
|
|
456
|
+
}
|
|
457
|
+
```
|
|
458
|
+
|
|
459
|
+
##### Requirements
|
|
460
|
+
|
|
461
|
+
- Only works in development mode (`dev: true`)
|
|
462
|
+
- Requires `buildNotifications.enable: true` in the target MFE's configuration
|
|
463
|
+
- MFEs must be running with the native-federation dev server
|
|
464
|
+
- Should never be enabled in production builds
|
|
465
|
+
|
|
466
|
+
##### Custom Endpoints
|
|
467
|
+
|
|
468
|
+
You can customize the notification endpoint if needed:
|
|
469
|
+
|
|
470
|
+
```json
|
|
471
|
+
{
|
|
472
|
+
"buildNotifications": {
|
|
473
|
+
"enable": true,
|
|
474
|
+
"endpoint": "/my-custom-build-events"
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
```
|
|
478
|
+
|
|
479
|
+
Then use it in your shell's watcher:
|
|
480
|
+
|
|
481
|
+
```typescript
|
|
482
|
+
watchFederationBuildCompletion('http://localhost:4201/my-custom-build-events');
|
|
483
|
+
```
|
|
484
|
+
|
|
485
|
+
This feature significantly improves the development experience by eliminating manual page refreshes and ensuring your shell always reflects the latest changes from your remote micro frontends.
|
|
486
|
+
|
|
387
487
|
## FAQ
|
|
388
488
|
|
|
389
489
|
### When to use this package?
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@angular-architects/native-federation",
|
|
3
|
-
"version": "20.0.
|
|
3
|
+
"version": "20.0.7",
|
|
4
4
|
"main": "src/index.js",
|
|
5
5
|
"generators": "./collection.json",
|
|
6
6
|
"builders": "./builders.json",
|
|
@@ -20,8 +20,8 @@
|
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
22
22
|
"@babel/core": "^7.19.0",
|
|
23
|
-
"@softarc/native-federation": "3.
|
|
24
|
-
"@softarc/native-federation-runtime": "3.
|
|
23
|
+
"@softarc/native-federation": "3.3.0",
|
|
24
|
+
"@softarc/native-federation-runtime": "3.3.0",
|
|
25
25
|
"@chialab/esbuild-plugin-commonjs": "^0.18.0",
|
|
26
26
|
"esbuild": "^0.25.1",
|
|
27
27
|
"mrmime": "^1.0.1",
|
|
@@ -2,27 +2,25 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.runBuilder = runBuilder;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
|
-
const path = tslib_1.__importStar(require("path"));
|
|
6
5
|
const fs = tslib_1.__importStar(require("fs"));
|
|
7
6
|
const mrmime = tslib_1.__importStar(require("mrmime"));
|
|
7
|
+
const path = tslib_1.__importStar(require("path"));
|
|
8
8
|
const build_1 = require("@angular/build");
|
|
9
9
|
const private_1 = require("@angular/build/private");
|
|
10
10
|
const architect_1 = require("@angular-devkit/architect");
|
|
11
11
|
const options_1 = require("@angular-devkit/build-angular/src/builders/dev-server/options");
|
|
12
12
|
const build_2 = require("@softarc/native-federation/build");
|
|
13
|
+
const architect_2 = require("@angular-devkit/architect");
|
|
13
14
|
const build_3 = require("@softarc/native-federation/build");
|
|
14
15
|
const angular_esbuild_adapter_1 = require("../../utils/angular-esbuild-adapter");
|
|
15
|
-
const build_4 = require("@softarc/native-federation/build");
|
|
16
|
-
const build_5 = require("@softarc/native-federation/build");
|
|
17
|
-
const build_6 = require("@softarc/native-federation/build");
|
|
18
|
-
const architect_2 = require("@angular-devkit/architect");
|
|
19
|
-
const rebuild_events_1 = require("../../utils/rebuild-events");
|
|
20
|
-
const updateIndexHtml_1 = require("../../utils/updateIndexHtml");
|
|
21
16
|
const fs_1 = require("fs");
|
|
17
|
+
const fstart_as_data_url_1 = require("../../tools/fstart-as-data-url");
|
|
18
|
+
const i18n_1 = require("../../utils/i18n");
|
|
22
19
|
const mem_resuts_1 = require("../../utils/mem-resuts");
|
|
20
|
+
const rebuild_events_1 = require("../../utils/rebuild-events");
|
|
23
21
|
const shared_mappings_plugin_1 = require("../../utils/shared-mappings-plugin");
|
|
24
|
-
const
|
|
25
|
-
const
|
|
22
|
+
const updateIndexHtml_1 = require("../../utils/updateIndexHtml");
|
|
23
|
+
const federation_build_notifier_1 = require("./federation-build-notifier");
|
|
26
24
|
function _buildApplication(options, context, pluginsOrExtensions) {
|
|
27
25
|
let extensions;
|
|
28
26
|
if (pluginsOrExtensions && Array.isArray(pluginsOrExtensions)) {
|
|
@@ -38,6 +36,7 @@ function _buildApplication(options, context, pluginsOrExtensions) {
|
|
|
38
36
|
function runBuilder(nfOptions, context) {
|
|
39
37
|
return tslib_1.__asyncGenerator(this, arguments, function* runBuilder_1() {
|
|
40
38
|
var _a, e_1, _b, _c;
|
|
39
|
+
var _d;
|
|
41
40
|
let target = (0, architect_2.targetFromTargetString)(nfOptions.target);
|
|
42
41
|
let _options = (yield tslib_1.__await(context.getTargetOptions(target)));
|
|
43
42
|
let builder = yield tslib_1.__await(context.getBuilderNameForTarget(target));
|
|
@@ -108,10 +107,11 @@ function runBuilder(nfOptions, context) {
|
|
|
108
107
|
watch: false, // options.watch,
|
|
109
108
|
dev: !!nfOptions.dev,
|
|
110
109
|
entryPoint,
|
|
110
|
+
buildNotifications: nfOptions.buildNotifications,
|
|
111
111
|
};
|
|
112
112
|
const activateSsr = nfOptions.ssr && !nfOptions.dev;
|
|
113
|
-
const config = yield tslib_1.__await((0,
|
|
114
|
-
const externals = (0,
|
|
113
|
+
const config = yield tslib_1.__await((0, build_3.loadFederationConfig)(fedOptions));
|
|
114
|
+
const externals = (0, build_3.getExternals)(config);
|
|
115
115
|
const plugins = [
|
|
116
116
|
(0, shared_mappings_plugin_1.createSharedMappingsPlugin)(config.sharedMappings),
|
|
117
117
|
{
|
|
@@ -127,7 +127,17 @@ function runBuilder(nfOptions, context) {
|
|
|
127
127
|
if (activateSsr) {
|
|
128
128
|
options.externalDependencies = externals;
|
|
129
129
|
}
|
|
130
|
+
const isLocalDevelopment = runServer && nfOptions.dev;
|
|
131
|
+
// Initialize SSE reloader only for local development
|
|
132
|
+
if (isLocalDevelopment && ((_d = nfOptions.buildNotifications) === null || _d === void 0 ? void 0 : _d.enable)) {
|
|
133
|
+
federation_build_notifier_1.federationBuildNotifier.initialize(nfOptions.buildNotifications.endpoint);
|
|
134
|
+
}
|
|
130
135
|
const middleware = [
|
|
136
|
+
...(isLocalDevelopment
|
|
137
|
+
? [
|
|
138
|
+
federation_build_notifier_1.federationBuildNotifier.createEventMiddleware((req) => removeBaseHref(req, options.baseHref)),
|
|
139
|
+
]
|
|
140
|
+
: []),
|
|
131
141
|
(req, res, next) => {
|
|
132
142
|
const url = removeBaseHref(req, options.baseHref);
|
|
133
143
|
const fileName = path.join(fedOptions.workspaceRoot, devServerOutputPath, url);
|
|
@@ -171,7 +181,7 @@ function runBuilder(nfOptions, context) {
|
|
|
171
181
|
}
|
|
172
182
|
let federationResult;
|
|
173
183
|
try {
|
|
174
|
-
federationResult = yield tslib_1.__await((0,
|
|
184
|
+
federationResult = yield tslib_1.__await((0, build_3.buildForFederation)(config, fedOptions, externals));
|
|
175
185
|
}
|
|
176
186
|
catch (e) {
|
|
177
187
|
console.error(e);
|
|
@@ -200,56 +210,76 @@ function runBuilder(nfOptions, context) {
|
|
|
200
210
|
indexHtmlTransformer: transformIndexHtml(nfOptions),
|
|
201
211
|
});
|
|
202
212
|
try {
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
213
|
+
try {
|
|
214
|
+
// builderRun.output.subscribe(async (output) => {
|
|
215
|
+
for (var _e = true, builderRun_1 = tslib_1.__asyncValues(builderRun), builderRun_1_1; builderRun_1_1 = yield tslib_1.__await(builderRun_1.next()), _a = builderRun_1_1.done, !_a; _e = true) {
|
|
216
|
+
_c = builderRun_1_1.value;
|
|
217
|
+
_e = false;
|
|
218
|
+
const output = _c;
|
|
219
|
+
lastResult = output;
|
|
220
|
+
if (!write && output['outputFiles']) {
|
|
221
|
+
memResults.add(output['outputFiles'].map((file) => new mem_resuts_1.EsBuildResult(file)));
|
|
222
|
+
}
|
|
223
|
+
if (!write && output['assetFiles']) {
|
|
224
|
+
memResults.add(output['assetFiles'].map((file) => new mem_resuts_1.NgCliAssetResult(file)));
|
|
225
|
+
}
|
|
226
|
+
// if (write && !runServer && !nfOptions.skipHtmlTransform) {
|
|
227
|
+
// updateIndexHtml(fedOptions, nfOptions);
|
|
228
|
+
// }
|
|
229
|
+
// if (!runServer) {
|
|
230
|
+
// yield output;
|
|
231
|
+
// }
|
|
232
|
+
if (!first && (nfOptions.dev || watch)) {
|
|
233
|
+
setTimeout(() => tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
234
|
+
try {
|
|
235
|
+
federationResult = yield (0, build_3.buildForFederation)(config, fedOptions, externals, {
|
|
236
|
+
skipMappingsAndExposed: false,
|
|
237
|
+
skipShared: true,
|
|
238
|
+
});
|
|
239
|
+
if (hasLocales && localeFilter) {
|
|
240
|
+
(0, i18n_1.translateFederationArtefacts)(i18n, localeFilter, outputOptions.base, federationResult);
|
|
241
|
+
}
|
|
242
|
+
build_2.logger.info('Done!');
|
|
243
|
+
// Notifies about build completion
|
|
244
|
+
if (isLocalDevelopment) {
|
|
245
|
+
federation_build_notifier_1.federationBuildNotifier.broadcastBuildCompletion();
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
catch (error) {
|
|
249
|
+
build_2.logger.error('Federation rebuild failed!');
|
|
250
|
+
// Notifies about build failure
|
|
251
|
+
if (isLocalDevelopment) {
|
|
252
|
+
federation_build_notifier_1.federationBuildNotifier.broadcastBuildError(error);
|
|
253
|
+
}
|
|
227
254
|
}
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
build_2.logger.error('Not successful!');
|
|
232
|
-
}
|
|
233
|
-
// if (runServer) {
|
|
234
|
-
// setTimeout(() => reloadShell(nfOptions.shell), 0);
|
|
235
|
-
// }
|
|
236
|
-
}), nfOptions.rebuildDelay);
|
|
255
|
+
}), nfOptions.rebuildDelay);
|
|
256
|
+
}
|
|
257
|
+
first = false;
|
|
237
258
|
}
|
|
238
|
-
|
|
259
|
+
}
|
|
260
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
261
|
+
finally {
|
|
262
|
+
try {
|
|
263
|
+
if (!_e && !_a && (_b = builderRun_1.return)) yield tslib_1.__await(_b.call(builderRun_1));
|
|
264
|
+
}
|
|
265
|
+
finally { if (e_1) throw e_1.error; }
|
|
239
266
|
}
|
|
240
267
|
}
|
|
241
|
-
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
242
268
|
finally {
|
|
243
|
-
|
|
244
|
-
|
|
269
|
+
if (isLocalDevelopment) {
|
|
270
|
+
federation_build_notifier_1.federationBuildNotifier.stopEventServer();
|
|
245
271
|
}
|
|
246
|
-
finally { if (e_1) throw e_1.error; }
|
|
247
272
|
}
|
|
248
273
|
yield yield tslib_1.__await(lastResult || { success: false });
|
|
249
274
|
});
|
|
250
275
|
}
|
|
251
|
-
|
|
252
|
-
|
|
276
|
+
function removeBaseHref(req, baseHref) {
|
|
277
|
+
let url = req.url;
|
|
278
|
+
if (baseHref && url.startsWith(baseHref)) {
|
|
279
|
+
url = url.substr(baseHref.length);
|
|
280
|
+
}
|
|
281
|
+
return url;
|
|
282
|
+
}
|
|
253
283
|
function writeFstartScript(fedOptions) {
|
|
254
284
|
const serverOutpath = path.join(fedOptions.outputPath, '../server');
|
|
255
285
|
const fstartPath = path.join(serverOutpath, 'fstart.mjs');
|
|
@@ -267,13 +297,6 @@ function getLocaleFilter(options, runServer) {
|
|
|
267
297
|
}
|
|
268
298
|
return localize;
|
|
269
299
|
}
|
|
270
|
-
function removeBaseHref(req, baseHref) {
|
|
271
|
-
let url = req.url;
|
|
272
|
-
if (baseHref && url.startsWith(baseHref)) {
|
|
273
|
-
url = url.substr(baseHref.length);
|
|
274
|
-
}
|
|
275
|
-
return url;
|
|
276
|
-
}
|
|
277
300
|
function infereConfigPath(tsConfig) {
|
|
278
301
|
const relProjectPath = path.dirname(tsConfig);
|
|
279
302
|
const relConfigPath = path.join(relProjectPath, 'federation.config.js');
|
|
@@ -295,4 +318,6 @@ function addDebugInformation(fileName, rawBody) {
|
|
|
295
318
|
remoteEntry.shared = [...shared, ...sharedForVite];
|
|
296
319
|
return JSON.stringify(remoteEntry, null, 2);
|
|
297
320
|
}
|
|
321
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
322
|
+
exports.default = (0, architect_1.createBuilder)(runBuilder);
|
|
298
323
|
//# sourceMappingURL=builder.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builder.js","sourceRoot":"","sources":["../../../../../../libs/native-federation/src/builders/build/builder.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"builder.js","sourceRoot":"","sources":["../../../../../../libs/native-federation/src/builders/build/builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { IncomingMessage, ServerResponse } from 'http';
|
|
2
|
+
type NextFunction = (error?: Error) => void;
|
|
3
|
+
type MiddlewareFunction = (req: IncomingMessage, res: ServerResponse, next: NextFunction) => void;
|
|
4
|
+
/**
|
|
5
|
+
* Manages Server-Sent Events for federation hot reload in local development
|
|
6
|
+
* Only active when running in development mode with dev server
|
|
7
|
+
*/
|
|
8
|
+
export declare class FederationBuildNotifier {
|
|
9
|
+
private connections;
|
|
10
|
+
private cleanupInterval;
|
|
11
|
+
private isActive;
|
|
12
|
+
private endpoint;
|
|
13
|
+
/**
|
|
14
|
+
* Initializes the SSE reloader for local development
|
|
15
|
+
*/
|
|
16
|
+
initialize(endpoint: string): void;
|
|
17
|
+
/**
|
|
18
|
+
* Creates SSE middleware for federation events
|
|
19
|
+
*/
|
|
20
|
+
createEventMiddleware(removeBaseHref: (req: IncomingMessage) => string): MiddlewareFunction;
|
|
21
|
+
/**
|
|
22
|
+
* Sets up a new SSE connection
|
|
23
|
+
*/
|
|
24
|
+
private _setupSSEConnection;
|
|
25
|
+
/**
|
|
26
|
+
* Removes a connection from the pool
|
|
27
|
+
*/
|
|
28
|
+
private _removeConnection;
|
|
29
|
+
/**
|
|
30
|
+
* Broadcasts an event to all connected clients
|
|
31
|
+
* Only works in local development mode
|
|
32
|
+
*/
|
|
33
|
+
private _broadcastEvent;
|
|
34
|
+
/**
|
|
35
|
+
* Sends an event to a specific response stream
|
|
36
|
+
*/
|
|
37
|
+
private _sendEvent;
|
|
38
|
+
/**
|
|
39
|
+
* Starts periodic cleanup of dead connections
|
|
40
|
+
*/
|
|
41
|
+
private startCleanup;
|
|
42
|
+
/**
|
|
43
|
+
* Notifies about successful federation rebuild
|
|
44
|
+
*/
|
|
45
|
+
broadcastBuildCompletion(): void;
|
|
46
|
+
/**
|
|
47
|
+
* Notifies about failed federation rebuild
|
|
48
|
+
*/
|
|
49
|
+
broadcastBuildError(error: unknown): void;
|
|
50
|
+
/**
|
|
51
|
+
* Stops cleanup and closes all connections
|
|
52
|
+
* Should be called when development server stops
|
|
53
|
+
*/
|
|
54
|
+
stopEventServer(): void;
|
|
55
|
+
/**
|
|
56
|
+
* Returns the number of active connections
|
|
57
|
+
*/
|
|
58
|
+
get activeConnections(): number;
|
|
59
|
+
/**
|
|
60
|
+
* Returns whether the reloader is active
|
|
61
|
+
*/
|
|
62
|
+
get isRunning(): boolean;
|
|
63
|
+
}
|
|
64
|
+
export declare const federationBuildNotifier: FederationBuildNotifier;
|
|
65
|
+
export {};
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.federationBuildNotifier = exports.FederationBuildNotifier = void 0;
|
|
4
|
+
const native_federation_runtime_1 = require("@softarc/native-federation-runtime");
|
|
5
|
+
const build_1 = require("@softarc/native-federation/build");
|
|
6
|
+
/**
|
|
7
|
+
* Manages Server-Sent Events for federation hot reload in local development
|
|
8
|
+
* Only active when running in development mode with dev server
|
|
9
|
+
*/
|
|
10
|
+
class FederationBuildNotifier {
|
|
11
|
+
constructor() {
|
|
12
|
+
this.connections = [];
|
|
13
|
+
this.cleanupInterval = null;
|
|
14
|
+
this.isActive = false;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Initializes the SSE reloader for local development
|
|
18
|
+
*/
|
|
19
|
+
initialize(endpoint) {
|
|
20
|
+
if (this.isActive) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
this.endpoint = endpoint;
|
|
24
|
+
this.isActive = true;
|
|
25
|
+
this.startCleanup();
|
|
26
|
+
build_1.logger.info(`[Federation SSE] Local reloader initialized with endpoint ${this.endpoint}`);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Creates SSE middleware for federation events
|
|
30
|
+
*/
|
|
31
|
+
createEventMiddleware(removeBaseHref) {
|
|
32
|
+
if (!this.isActive) {
|
|
33
|
+
return (req, res, next) => next();
|
|
34
|
+
}
|
|
35
|
+
return (req, res, next) => {
|
|
36
|
+
const url = removeBaseHref(req);
|
|
37
|
+
if (url !== this.endpoint) {
|
|
38
|
+
return next();
|
|
39
|
+
}
|
|
40
|
+
this._setupSSEConnection(req, res);
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Sets up a new SSE connection
|
|
45
|
+
*/
|
|
46
|
+
_setupSSEConnection(req, res) {
|
|
47
|
+
res.writeHead(200, {
|
|
48
|
+
'Content-Type': 'text/event-stream',
|
|
49
|
+
'Cache-Control': 'no-cache',
|
|
50
|
+
Connection: 'keep-alive',
|
|
51
|
+
'Access-Control-Allow-Origin': '*',
|
|
52
|
+
'Access-Control-Allow-Headers': 'Cache-Control',
|
|
53
|
+
});
|
|
54
|
+
// Send initial connection event
|
|
55
|
+
this._sendEvent(res, {
|
|
56
|
+
type: 'connected',
|
|
57
|
+
timestamp: Date.now(),
|
|
58
|
+
});
|
|
59
|
+
// Store connection
|
|
60
|
+
const connection = { response: res, request: req };
|
|
61
|
+
this.connections.push(connection);
|
|
62
|
+
// Handle disconnection
|
|
63
|
+
req.on('close', () => this._removeConnection(connection));
|
|
64
|
+
req.on('error', () => this._removeConnection(connection));
|
|
65
|
+
build_1.logger.info(`[Federation SSE] Client connected. Active connections: ${this.connections.length}`);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Removes a connection from the pool
|
|
69
|
+
*/
|
|
70
|
+
_removeConnection(connection) {
|
|
71
|
+
const index = this.connections.indexOf(connection);
|
|
72
|
+
if (index !== -1) {
|
|
73
|
+
this.connections.splice(index, 1);
|
|
74
|
+
build_1.logger.info(`[Federation SSE] Client disconnected. Active connections: ${this.connections.length}`);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Broadcasts an event to all connected clients
|
|
79
|
+
* Only works in local development mode
|
|
80
|
+
*/
|
|
81
|
+
_broadcastEvent(event) {
|
|
82
|
+
if (!this.isActive || this.connections.length === 0) {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
const deadConnections = [];
|
|
86
|
+
this.connections.forEach((connection) => {
|
|
87
|
+
try {
|
|
88
|
+
this._sendEvent(connection.response, event);
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
deadConnections.push(connection);
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
// Remove dead connections
|
|
95
|
+
deadConnections.forEach((connection) => this._removeConnection(connection));
|
|
96
|
+
if (this.connections.length > 0) {
|
|
97
|
+
build_1.logger.info(`[Federation SSE] Event '${event.type}' broadcast to ${this.connections.length} clients`);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Sends an event to a specific response stream
|
|
102
|
+
*/
|
|
103
|
+
_sendEvent(res, event) {
|
|
104
|
+
const data = JSON.stringify(event);
|
|
105
|
+
res.write(`data: ${data}\n\n`);
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Starts periodic cleanup of dead connections
|
|
109
|
+
*/
|
|
110
|
+
startCleanup() {
|
|
111
|
+
if (this.cleanupInterval) {
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
this.cleanupInterval = setInterval(() => {
|
|
115
|
+
const aliveBefore = this.connections.length;
|
|
116
|
+
this.connections = this.connections.filter((connection) => !connection.response.destroyed &&
|
|
117
|
+
!connection.request.destroyed &&
|
|
118
|
+
connection.response.writable);
|
|
119
|
+
if (this.connections.length !== aliveBefore) {
|
|
120
|
+
build_1.logger.info(`[Federation SSE] Cleaned up ${aliveBefore - this.connections.length} dead connections`);
|
|
121
|
+
}
|
|
122
|
+
}, 30000); // Clean every 30 seconds
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Notifies about successful federation rebuild
|
|
126
|
+
*/
|
|
127
|
+
broadcastBuildCompletion() {
|
|
128
|
+
this._broadcastEvent({
|
|
129
|
+
type: native_federation_runtime_1.BuildNotificationType.COMPLETED,
|
|
130
|
+
timestamp: Date.now(),
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Notifies about failed federation rebuild
|
|
135
|
+
*/
|
|
136
|
+
broadcastBuildError(error) {
|
|
137
|
+
this._broadcastEvent({
|
|
138
|
+
type: native_federation_runtime_1.BuildNotificationType.ERROR,
|
|
139
|
+
timestamp: Date.now(),
|
|
140
|
+
error: error instanceof Error ? error.message : 'Unknown error',
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Stops cleanup and closes all connections
|
|
145
|
+
* Should be called when development server stops
|
|
146
|
+
*/
|
|
147
|
+
stopEventServer() {
|
|
148
|
+
if (!this.isActive) {
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
if (this.cleanupInterval) {
|
|
152
|
+
clearInterval(this.cleanupInterval);
|
|
153
|
+
this.cleanupInterval = null;
|
|
154
|
+
}
|
|
155
|
+
this.connections.forEach((connection) => {
|
|
156
|
+
try {
|
|
157
|
+
connection.response.end();
|
|
158
|
+
}
|
|
159
|
+
catch (error) {
|
|
160
|
+
// Connection might already be closed
|
|
161
|
+
}
|
|
162
|
+
});
|
|
163
|
+
this.connections = [];
|
|
164
|
+
this.isActive = false;
|
|
165
|
+
build_1.logger.info('[Federation SSE] Local reloader disposed');
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Returns the number of active connections
|
|
169
|
+
*/
|
|
170
|
+
get activeConnections() {
|
|
171
|
+
return this.connections.length;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Returns whether the reloader is active
|
|
175
|
+
*/
|
|
176
|
+
get isRunning() {
|
|
177
|
+
return this.isActive;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
exports.FederationBuildNotifier = FederationBuildNotifier;
|
|
181
|
+
// Singleton instance for local development
|
|
182
|
+
exports.federationBuildNotifier = new FederationBuildNotifier();
|
|
183
|
+
//# sourceMappingURL=federation-build-notifier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"federation-build-notifier.js","sourceRoot":"","sources":["../../../../../../libs/native-federation/src/builders/build/federation-build-notifier.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { JsonObject } from '@angular-devkit/core';
|
|
2
|
+
import type { BuildNotificationOptions } from '@softarc/native-federation-runtime';
|
|
2
3
|
import type { ESMSInitOptions } from 'es-module-shims';
|
|
3
4
|
|
|
4
5
|
export interface NfBuilderSchema extends JsonObject {
|
|
@@ -7,6 +8,7 @@ export interface NfBuilderSchema extends JsonObject {
|
|
|
7
8
|
port: number;
|
|
8
9
|
open: boolean;
|
|
9
10
|
rebuildDelay: number;
|
|
11
|
+
buildNotifications?: BuildNotificationOptions;
|
|
10
12
|
shell: string;
|
|
11
13
|
watch: boolean;
|
|
12
14
|
skipHtmlTransform: boolean;
|
|
@@ -64,6 +64,21 @@
|
|
|
64
64
|
"devServer": {
|
|
65
65
|
"type": "boolean",
|
|
66
66
|
"description": "can be used to disable the dev server when dev=true"
|
|
67
|
+
},
|
|
68
|
+
"buildNotifications": {
|
|
69
|
+
"type": "object",
|
|
70
|
+
"properties": {
|
|
71
|
+
"enable": {
|
|
72
|
+
"type": "boolean",
|
|
73
|
+
"default": true,
|
|
74
|
+
"description": "Enable build completion notifications for local development. It will send events to notify when the federation build is complete."
|
|
75
|
+
},
|
|
76
|
+
"endpoint": {
|
|
77
|
+
"type": "string",
|
|
78
|
+
"default": "/@angular-architects/native-federation:build-notifications",
|
|
79
|
+
"description": "You can override the default endpoint to send build completion events to."
|
|
80
|
+
}
|
|
81
|
+
}
|
|
67
82
|
}
|
|
68
83
|
}
|
|
69
84
|
}
|
|
@@ -48,8 +48,12 @@ function config(options) {
|
|
|
48
48
|
}
|
|
49
49
|
const federationConfigPath = path.join(projectRoot, 'federation.config.js');
|
|
50
50
|
const exists = tree.exists(federationConfigPath);
|
|
51
|
-
const cand1 = path
|
|
52
|
-
|
|
51
|
+
const cand1 = path
|
|
52
|
+
.join(projectSourceRoot, 'app', 'app.component.ts')
|
|
53
|
+
.replace(/\\/g, '/');
|
|
54
|
+
const cand2 = path
|
|
55
|
+
.join(projectSourceRoot, 'app', 'app.ts')
|
|
56
|
+
.replace(/\\/g, '/');
|
|
53
57
|
const appComponent = tree.exists(cand1)
|
|
54
58
|
? cand1
|
|
55
59
|
: tree.exists(cand2)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schematic.js","sourceRoot":"","sources":["../../../../../../libs/native-federation/src/schematics/init/schematic.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"schematic.js","sourceRoot":"","sources":["../../../../../../libs/native-federation/src/schematics/init/schematic.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const fstart = "Ly8gbGlicy9uYXRpdmUtZmVkZXJhdGlvbi1ub2RlL3NyYy9saWIvbm9kZS9pbml0LW5vZGUtZmVkZXJhdGlvbi50cwppbXBvcnQgeyByZWdpc3RlciB9IGZyb20gIm5vZGU6bW9kdWxlIjsKaW1wb3J0IHsgcGF0aFRvRmlsZVVSTCB9IGZyb20gIm5vZGU6dXJsIjsKaW1wb3J0ICogYXMgZnMyIGZyb20gIm5vZGU6ZnMvcHJvbWlzZXMiOwppbXBvcnQgKiBhcyBwYXRoMiBmcm9tICJub2RlOnBhdGgiOwoKLy8gbGlicy9uYXRpdmUtZmVkZXJhdGlvbi1ydW50aW1lL3NyYy9saWIvbW9kZWwvaW1wb3J0LW1hcC50cwpmdW5jdGlvbiBtZXJnZUltcG9ydE1hcHMobWFwMSwgbWFwMikgewogIHJldHVybiB7CiAgICBpbXBvcnRzOiB7IC4uLm1hcDEuaW1wb3J0cywgLi4ubWFwMi5pbXBvcnRzIH0sCiAgICBzY29wZXM6IHsgLi4ubWFwMS5zY29wZXMsIC4uLm1hcDIuc2NvcGVzIH0KICB9Owp9CgovLyBsaWJzL25hdGl2ZS1mZWRlcmF0aW9uLXJ1bnRpbWUvc3JjL2xpYi9tb2RlbC9nbG9iYWwtY2FjaGUudHMKdmFyIG5mTmFtZXNwYWNlID0gIl9fTkFUSVZFX0ZFREVSQVRJT05fXyI7CnZhciBnbG9iYWwyID0gZ2xvYmFsVGhpczsKZ2xvYmFsMltuZk5hbWVzcGFjZV0gPz89IHsKICBleHRlcm5hbHM6IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCksCiAgcmVtb3RlTmFtZXNUb1JlbW90ZTogLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSwKICBiYXNlVXJsVG9SZW1vdGVOYW1lczogLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKQp9Owp2YXIgZ2xvYmFsQ2FjaGUgPSBnbG9iYWwyW25mTmFtZXNwYWNlXTsKCi8vIGxpYnMvbmF0aXZlLWZlZGVyYXRpb24tcnVudGltZS9zcmMvbGliL21vZGVsL2V4dGVybmFscy50cwp2YXIgZXh0ZXJuYWxzID0gZ2xvYmFsQ2FjaGUuZXh0ZXJuYWxzOwpmdW5jdGlvbiBnZXRFeHRlcm5hbEtleShzaGFyZWQpIHsKICByZXR1cm4gYCR7c2hhcmVkLnBhY2thZ2VOYW1lfUAke3NoYXJlZC52ZXJzaW9ufWA7Cn0KZnVuY3Rpb24gZ2V0RXh0ZXJuYWxVcmwoc2hhcmVkKSB7CiAgY29uc3QgcGFja2FnZUtleSA9IGdldEV4dGVybmFsS2V5KHNoYXJlZCk7CiAgcmV0dXJuIGV4dGVybmFscy5nZXQocGFja2FnZUtleSk7Cn0KZnVuY3Rpb24gc2V0RXh0ZXJuYWxVcmwoc2hhcmVkLCB1cmwyKSB7CiAgY29uc3QgcGFja2FnZUtleSA9IGdldEV4dGVybmFsS2V5KHNoYXJlZCk7CiAgZXh0ZXJuYWxzLnNldChwYWNrYWdlS2V5LCB1cmwyKTsKfQoKLy8gbGlicy9uYXRpdmUtZmVkZXJhdGlvbi1ydW50aW1lL3NyYy9saWIvdXRpbHMvcGF0aC11dGlscy50cwpmdW5jdGlvbiBnZXREaXJlY3RvcnkodXJsMikgewogIGNvbnN0IHBhcnRzID0gdXJsMi5zcGxpdCgiLyIpOwogIHBhcnRzLnBvcCgpOwogIHJldHVybiBwYXJ0cy5qb2luKCIvIik7Cn0KZnVuY3Rpb24gam9pblBhdGhzKHBhdGgxLCBwYXRoMjIpIHsKICB3aGlsZSAocGF0aDEuZW5kc1dpdGgoIi8iKSkgewogICAgcGF0aDEgPSBwYXRoMS5zdWJzdHJpbmcoMCwgcGF0aDEubGVuZ3RoIC0gMSk7CiAgfQogIGlmIChwYXRoMjIuc3RhcnRzV2l0aCgiLi8iKSkgewogICAgcGF0aDIyID0gcGF0aDIyLnN1YnN0cmluZygyLCBwYXRoMjIubGVuZ3RoKTsKICB9CiAgcmV0dXJuIGAke3BhdGgxfS8ke3BhdGgyMn1gOwp9CgovLyBsaWJzL25hdGl2ZS1mZWRlcmF0aW9uLXJ1bnRpbWUvc3JjL2xpYi9tb2RlbC9yZW1vdGVzLnRzCnZhciByZW1vdGVOYW1lc1RvUmVtb3RlID0gZ2xvYmFsQ2FjaGUucmVtb3RlTmFtZXNUb1JlbW90ZTsKdmFyIGJhc2VVcmxUb1JlbW90ZU5hbWVzID0gZ2xvYmFsQ2FjaGUuYmFzZVVybFRvUmVtb3RlTmFtZXM7CmZ1bmN0aW9uIGFkZFJlbW90ZShyZW1vdGVOYW1lLCByZW1vdGUpIHsKICByZW1vdGVOYW1lc1RvUmVtb3RlLnNldChyZW1vdGVOYW1lLCByZW1vdGUpOwogIGJhc2VVcmxUb1JlbW90ZU5hbWVzLnNldChyZW1vdGUuYmFzZVVybCwgcmVtb3RlTmFtZSk7Cn0KCi8vIGxpYnMvbmF0aXZlLWZlZGVyYXRpb24tcnVudGltZS9zcmMvbGliL2luaXQtZmVkZXJhdGlvbi50cwphc3luYyBmdW5jdGlvbiBwcm9jZXNzUmVtb3RlSW5mb3MocmVtb3Rlcywgb3B0aW9ucyA9IHsgdGhyb3dJZlJlbW90ZU5vdEZvdW5kOiBmYWxzZSB9KSB7CiAgY29uc3QgcHJvY2Vzc1JlbW90ZUluZm9Qcm9taXNlcyA9IE9iamVjdC5rZXlzKHJlbW90ZXMpLm1hcCgKICAgIGFzeW5jIChyZW1vdGVOYW1lKSA9PiB7CiAgICAgIHRyeSB7CiAgICAgICAgbGV0IHVybDIgPSByZW1vdGVzW3JlbW90ZU5hbWVdOwogICAgICAgIGlmIChvcHRpb25zLmNhY2hlVGFnKSB7CiAgICAgICAgICBjb25zdCBhZGRBcHBlbmQgPSByZW1vdGVzW3JlbW90ZU5hbWVdLmluY2x1ZGVzKCI/IikgPyAiJiIgOiAiPyI7CiAgICAgICAgICB1cmwyICs9IGAke2FkZEFwcGVuZH10PSR7b3B0aW9ucy5jYWNoZVRhZ31gOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYXdhaXQgcHJvY2Vzc1JlbW90ZUluZm8odXJsMiwgcmVtb3RlTmFtZSk7CiAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICBjb25zdCBlcnJvciA9IGBFcnJvciBsb2FkaW5nIHJlbW90ZSBlbnRyeSBmb3IgJHtyZW1vdGVOYW1lfSBmcm9tIGZpbGUgJHtyZW1vdGVzW3JlbW90ZU5hbWVdfWA7CiAgICAgICAgaWYgKG9wdGlvbnMudGhyb3dJZlJlbW90ZU5vdEZvdW5kKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3IpOwogICAgICAgIH0KICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgfQogICk7CiAgY29uc3QgcmVtb3RlSW1wb3J0TWFwcyA9IGF3YWl0IFByb21pc2UuYWxsKHByb2Nlc3NSZW1vdGVJbmZvUHJvbWlzZXMpOwogIGNvbnN0IGltcG9ydE1hcCA9IHJlbW90ZUltcG9ydE1hcHMucmVkdWNlKAogICAgKGFjYywgcmVtb3RlSW1wb3J0TWFwKSA9PiByZW1vdGVJbXBvcnRNYXAgPyBtZXJnZUltcG9ydE1hcHMoYWNjLCByZW1vdGVJbXBvcnRNYXApIDogYWNjLAogICAgeyBpbXBvcnRzOiB7fSwgc2NvcGVzOiB7fSB9CiAgKTsKICByZXR1cm4gaW1wb3J0TWFwOwp9CmFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NSZW1vdGVJbmZvKGZlZGVyYXRpb25JbmZvVXJsLCByZW1vdGVOYW1lKSB7CiAgY29uc3QgYmFzZVVybCA9IGdldERpcmVjdG9yeShmZWRlcmF0aW9uSW5mb1VybCk7CiAgY29uc3QgcmVtb3RlSW5mbyA9IGF3YWl0IGxvYWRGZWRlcmF0aW9uSW5mbyhmZWRlcmF0aW9uSW5mb1VybCk7CiAgaWYgKCFyZW1vdGVOYW1lKSB7CiAgICByZW1vdGVOYW1lID0gcmVtb3RlSW5mby5uYW1lOwogIH0KICBjb25zdCBpbXBvcnRNYXAgPSBjcmVhdGVSZW1vdGVJbXBvcnRNYXAocmVtb3RlSW5mbywgcmVtb3RlTmFtZSwgYmFzZVVybCk7CiAgYWRkUmVtb3RlKHJlbW90ZU5hbWUsIHsgLi4ucmVtb3RlSW5mbywgYmFzZVVybCB9KTsKICByZXR1cm4gaW1wb3J0TWFwOwp9CmZ1bmN0aW9uIGNyZWF0ZVJlbW90ZUltcG9ydE1hcChyZW1vdGVJbmZvLCByZW1vdGVOYW1lLCBiYXNlVXJsKSB7CiAgY29uc3QgaW1wb3J0cyA9IHByb2Nlc3NFeHBvc2VkKHJlbW90ZUluZm8sIHJlbW90ZU5hbWUsIGJhc2VVcmwpOwogIGNvbnN0IHNjb3BlcyA9IHByb2Nlc3NSZW1vdGVJbXBvcnRzKHJlbW90ZUluZm8sIGJhc2VVcmwpOwogIHJldHVybiB7IGltcG9ydHMsIHNjb3BlcyB9Owp9CmFzeW5jIGZ1bmN0aW9uIGxvYWRGZWRlcmF0aW9uSW5mbyh1cmwyKSB7CiAgY29uc3QgaW5mbyA9IGF3YWl0IGZldGNoKHVybDIpLnRoZW4oKHIpID0+IHIuanNvbigpKTsKICByZXR1cm4gaW5mbzsKfQpmdW5jdGlvbiBwcm9jZXNzUmVtb3RlSW1wb3J0cyhyZW1vdGVJbmZvLCBiYXNlVXJsKSB7CiAgY29uc3Qgc2NvcGVzID0ge307CiAgY29uc3Qgc2NvcGVkSW1wb3J0cyA9IHt9OwogIGZvciAoY29uc3Qgc2hhcmVkIG9mIHJlbW90ZUluZm8uc2hhcmVkKSB7CiAgICBjb25zdCBvdXRGaWxlTmFtZSA9IGdldEV4dGVybmFsVXJsKHNoYXJlZCkgPz8gam9pblBhdGhzKGJhc2VVcmwsIHNoYXJlZC5vdXRGaWxlTmFtZSk7CiAgICBzZXRFeHRlcm5hbFVybChzaGFyZWQsIG91dEZpbGVOYW1lKTsKICAgIHNjb3BlZEltcG9ydHNbc2hhcmVkLnBhY2thZ2VOYW1lXSA9IG91dEZpbGVOYW1lOwogIH0KICBzY29wZXNbYmFzZVVybCArICIvIl0gPSBzY29wZWRJbXBvcnRzOwogIHJldHVybiBzY29wZXM7Cn0KZnVuY3Rpb24gcHJvY2Vzc0V4cG9zZWQocmVtb3RlSW5mbywgcmVtb3RlTmFtZSwgYmFzZVVybCkgewogIGNvbnN0IGltcG9ydHMgPSB7fTsKICBmb3IgKGNvbnN0IGV4cG9zZWQgb2YgcmVtb3RlSW5mby5leHBvc2VzKSB7CiAgICBjb25zdCBrZXkgPSBqb2luUGF0aHMocmVtb3RlTmFtZSwgZXhwb3NlZC5rZXkpOwogICAgY29uc3QgdmFsdWUgPSBqb2luUGF0aHMoYmFzZVVybCwgZXhwb3NlZC5vdXRGaWxlTmFtZSk7CiAgICBpbXBvcnRzW2tleV0gPSB2YWx1ZTsKICB9CiAgcmV0dXJuIGltcG9ydHM7Cn0KYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc0hvc3RJbmZvKGhvc3RJbmZvLCByZWxCdW5kbGVzUGF0aCA9ICIuLyIpIHsKICBjb25zdCBpbXBvcnRzID0gaG9zdEluZm8uc2hhcmVkLnJlZHVjZSgKICAgIChhY2MsIGN1cikgPT4gKHsKICAgICAgLi4uYWNjLAogICAgICBbY3VyLnBhY2thZ2VOYW1lXTogcmVsQnVuZGxlc1BhdGggKyBjdXIub3V0RmlsZU5hbWUKICAgIH0pLAogICAge30KICApOwogIGZvciAoY29uc3Qgc2hhcmVkIG9mIGhvc3RJbmZvLnNoYXJlZCkgewogICAgc2V0RXh0ZXJuYWxVcmwoc2hhcmVkLCByZWxCdW5kbGVzUGF0aCArIHNoYXJlZC5vdXRGaWxlTmFtZSk7CiAgfQogIHJldHVybiB7IGltcG9ydHMsIHNjb3Blczoge30gfTsKfQoKLy8gbGlicy9uYXRpdmUtZmVkZXJhdGlvbi1ub2RlL3NyYy9saWIvdXRpbHMvaW1wb3J0LW1hcC1sb2FkZXIuanMKaW1wb3J0IHBhdGggZnJvbSAicGF0aCI7CmltcG9ydCB1cmwgZnJvbSAidXJsIjsKaW1wb3J0IHsgcHJvbWlzZXMgYXMgZnMgfSBmcm9tICJmcyI7CnZhciBJTVBPUlRfTUFQX0ZJTEVfTkFNRSA9ICJub2RlLmltcG9ydG1hcCI7CnZhciBiYXNlVVJMID0gdXJsLnBhdGhUb0ZpbGVVUkwocHJvY2Vzcy5jd2QoKSkgKyBwYXRoLnNlcDsKZnVuY3Rpb24gcmVzb2x2ZUFuZENvbXBvc2VJbXBvcnRNYXAocGFyc2VkKSB7CiAgaWYgKCFpc1BsYWluT2JqZWN0KHBhcnNlZCkpIHsKICAgIHRocm93IEVycm9yKGBJbnZhbGlkIGltcG9ydCBtYXAgLSB0b3AgbGV2ZWwgbXVzdCBiZSBhbiBvYmplY3RgKTsKICB9CiAgbGV0IHNvcnRlZEFuZE5vcm1hbGl6ZWRJbXBvcnRzID0ge307CiAgaWYgKHBhcnNlZC5oYXNPd25Qcm9wZXJ0eSgiaW1wb3J0cyIpKSB7CiAgICBpZiAoIWlzUGxhaW5PYmplY3QocGFyc2VkLmltcG9ydHMpKSB7CiAgICAgIHRocm93IEVycm9yKGBJbnZhbGlkIGltcG9ydCBtYXAgLSAiaW1wb3J0cyIgcHJvcGVydHkgbXVzdCBiZSBhbiBvYmplY3RgKTsKICAgIH0KICAgIHNvcnRlZEFuZE5vcm1hbGl6ZWRJbXBvcnRzID0gc29ydEFuZE5vcm1hbGl6ZVNwZWNpZmllck1hcCgKICAgICAgcGFyc2VkLmltcG9ydHMsCiAgICAgIGJhc2VVUkwKICAgICk7CiAgfQogIGxldCBzb3J0ZWRBbmROb3JtYWxpemVkU2NvcGVzID0ge307CiAgaWYgKHBhcnNlZC5oYXNPd25Qcm9wZXJ0eSgic2NvcGVzIikpIHsKICAgIGlmICghaXNQbGFpbk9iamVjdChwYXJzZWQuc2NvcGVzKSkgewogICAgICB0aHJvdyBFcnJvcihgSW52YWxpZCBpbXBvcnQgbWFwIC0gInNjb3BlcyIgcHJvcGVydHkgbXVzdCBiZSBhbiBvYmplY3RgKTsKICAgIH0KICAgIHNvcnRlZEFuZE5vcm1hbGl6ZWRTY29wZXMgPSBzb3J0QW5kTm9ybWFsaXplU2NvcGVzKHBhcnNlZC5zY29wZXMsIGJhc2VVUkwpOwogIH0KICBjb25zdCBpbnZhbGlkS2V5cyA9IE9iamVjdC5rZXlzKHBhcnNlZCkuZmlsdGVyKAogICAgKGtleSkgPT4ga2V5ICE9PSAiaW1wb3J0cyIgJiYga2V5ICE9PSAic2NvcGVzIgogICk7CiAgaWYgKGludmFsaWRLZXlzLmxlbmd0aCA+IDApIHsKICAgIGNvbnNvbGUud2FybigKICAgICAgYEludmFsaWQgdG9wLWxldmVsIGtleSR7aW52YWxpZEtleXMubGVuZ3RoID4gMCA/ICJzIiA6ICIifSBpbiBpbXBvcnQgbWFwIC0gJHtpbnZhbGlkS2V5cy5qb2luKCIsICIpfWAKICAgICk7CiAgfQogIHJldHVybiB7CiAgICBpbXBvcnRzOiBzb3J0ZWRBbmROb3JtYWxpemVkSW1wb3J0cywKICAgIHNjb3Blczogc29ydGVkQW5kTm9ybWFsaXplZFNjb3BlcwogIH07Cn0KZnVuY3Rpb24gc29ydEFuZE5vcm1hbGl6ZVNwZWNpZmllck1hcChtYXAsIGJhc2VVUkwyKSB7CiAgY29uc3Qgbm9ybWFsaXplZCA9IHt9OwogIGZvciAobGV0IHNwZWNpZmllcktleSBpbiBtYXApIHsKICAgIGNvbnN0IHZhbHVlID0gbWFwW3NwZWNpZmllcktleV07CiAgICBjb25zdCBub3JtYWxpemVkU3BlY2lmaWVyS2V5ID0gbm9ybWFsaXplU3BlY2lmaWVyS2V5KHNwZWNpZmllcktleSwgYmFzZVVSTDIpOwogICAgaWYgKG5vcm1hbGl6ZWRTcGVjaWZpZXJLZXkgPT09IG51bGwpIHsKICAgICAgY29udGludWU7CiAgICB9CiAgICBsZXQgYWRkcmVzc1VSTCA9IHBhcnNlVVJMTGlrZVNwZWNpZmllcih2YWx1ZSwgYmFzZVVSTDIpOwogICAgaWYgKGFkZHJlc3NVUkwgPT09IG51bGwpIHsKICAgICAgY29uc29sZS53YXJuKAogICAgICAgIGBJbnZhbGlkIFVSTCBhZGRyZXNzIGZvciBpbXBvcnQgbWFwIHNwZWNpZmllciAnJHtzcGVjaWZpZXJLZXl9J2AKICAgICAgKTsKICAgICAgbm9ybWFsaXplZFtub3JtYWxpemVkU3BlY2lmaWVyS2V5XSA9IG51bGw7CiAgICAgIGNvbnRpbnVlOwogICAgfQogICAgaWYgKHNwZWNpZmllcktleS5lbmRzV2l0aCgiLyIpICYmICFhZGRyZXNzVVJMLmVuZHNXaXRoKCIvIikpIHsKICAgICAgY29uc29sZS53YXJuKAogICAgICAgIGBJbnZhbGlkIFVSTCBhZGRyZXNzIGZvciBpbXBvcnQgbWFwIHNwZWNpZmllciAnJHtzcGVjaWZpZXJLZXl9JyAtIHNpbmNlIHRoZSBzcGVjaWZpZXIgZW5kcyBpbiBzbGFzaCwgc28gbXVzdCB0aGUgYWRkcmVzc2AKICAgICAgKTsKICAgICAgbm9ybWFsaXplZFtub3JtYWxpemVkU3BlY2lmaWVyS2V5XSA9IG51bGw7CiAgICAgIGNvbnRpbnVlOwogICAgfQogICAgbm9ybWFsaXplZFtub3JtYWxpemVkU3BlY2lmaWVyS2V5XSA9IGFkZHJlc3NVUkw7CiAgfQogIHJldHVybiBub3JtYWxpemVkOwp9CmZ1bmN0aW9uIG5vcm1hbGl6ZVNwZWNpZmllcktleShrZXkpIHsKICBpZiAoa2V5ID09PSAiIikgewogICAgY29uc29sZS53YXJuKGBTcGVjaWZpZXIga2V5cyBpbiBpbXBvcnQgbWFwcyBtYXkgbm90IGJlIHRoZSBlbXB0eSBzdHJpbmdgKTsKICAgIHJldHVybiBudWxsOwogIH0KICByZXR1cm4gcGFyc2VVUkxMaWtlU3BlY2lmaWVyKGtleSwgYmFzZVVSTCkgfHwga2V5Owp9CmZ1bmN0aW9uIHBhcnNlVVJMTGlrZVNwZWNpZmllcihzcGVjaWZpZXIsIGJhc2VVUkwyKSB7CiAgY29uc3QgdXNlQmFzZVVybEFzUGFyZW50ID0gc3BlY2lmaWVyLnN0YXJ0c1dpdGgoIi8iKSB8fCBzcGVjaWZpZXIuc3RhcnRzV2l0aCgiLi8iKSB8fCBzcGVjaWZpZXIuc3RhcnRzV2l0aCgiLi4vIik7CiAgdHJ5IHsKICAgIHJldHVybiBuZXcgVVJMKHNwZWNpZmllciwgdXNlQmFzZVVybEFzUGFyZW50ID8gYmFzZVVSTDIgOiB2b2lkIDApLmhyZWY7CiAgfSBjYXRjaCB7CiAgICByZXR1cm4gbnVsbDsKICB9Cn0KZnVuY3Rpb24gc29ydEFuZE5vcm1hbGl6ZVNjb3BlcyhtYXAsIGJhc2VVUkwyKSB7CiAgbGV0IG5vcm1hbGl6ZWQgPSB7fTsKICBmb3IgKGxldCBzY29wZVByZWZpeCBpbiBtYXApIHsKICAgIGNvbnN0IHBvdGVudGlhbFNwZWNpZmllck1hcCA9IG1hcFtzY29wZVByZWZpeF07CiAgICBpZiAoIWlzUGxhaW5PYmplY3QocG90ZW50aWFsU3BlY2lmaWVyTWFwKSkgewogICAgICB0aHJvdyBUeXBlRXJyb3IoCiAgICAgICAgYFRoZSB2YWx1ZSBvZiBzY29wZSAke3Njb3BlUHJlZml4fSBtdXN0IGJlIGEgSlNPTiBvYmplY3RgCiAgICAgICk7CiAgICB9CiAgICBsZXQgc2NvcGVQcmVmaXhVUkw7CiAgICB0cnkgewogICAgICBzY29wZVByZWZpeFVSTCA9IG5ldyBVUkwoc2NvcGVQcmVmaXgsIGJhc2VVUkwyKS5ocmVmOwogICAgfSBjYXRjaCB7CiAgICAgIGNvbnNvbGUud2FybigKICAgICAgICBgU2NvcGUgcHJlZml4IFVSTCAnJHtzY29wZVByZWZpeH0nIHdhcyBub3QgcGFyc2VhYmxlIGluIGltcG9ydCBtYXBgCiAgICAgICk7CiAgICAgIGNvbnRpbnVlOwogICAgfQogICAgbm9ybWFsaXplZFtzY29wZVByZWZpeFVSTF0gPSBzb3J0QW5kTm9ybWFsaXplU3BlY2lmaWVyTWFwKAogICAgICBwb3RlbnRpYWxTcGVjaWZpZXJNYXAsCiAgICAgIGJhc2VVUkwyCiAgICApOwogIH0KICByZXR1cm4gbm9ybWFsaXplZDsKfQpmdW5jdGlvbiBpc1BsYWluT2JqZWN0KG9iaikgewogIHJldHVybiBvYmogPT09IE9iamVjdChvYmopICYmICFBcnJheS5pc0FycmF5KG9iaik7Cn0KdmFyIGltcG9ydE1hcFByb21pc2UgPSBnZXRJbXBvcnRNYXBQcm9taXNlKCk7CmFzeW5jIGZ1bmN0aW9uIGdldEltcG9ydE1hcFByb21pc2UoKSB7CiAgY29uc3QgcmVsYXRpdmVQYXRoID0gcHJvY2Vzcy5lbnYuSU1QT1JUX01BUF9QQVRIIHx8IElNUE9SVF9NQVBfRklMRV9OQU1FOwogIGNvbnN0IGltcG9ydE1hcFBhdGggPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgcmVsYXRpdmVQYXRoKTsKICBsZXQgc3RyOwogIHRyeSB7CiAgICBzdHIgPSBhd2FpdCBmcy5yZWFkRmlsZShpbXBvcnRNYXBQYXRoKTsKICB9IGNhdGNoIChlcnIpIHsKICAgIHJldHVybiBlbXB0eU1hcCgpOwogIH0KICBsZXQganNvbjsKICB0cnkgewogICAganNvbiA9IGF3YWl0IEpTT04ucGFyc2Uoc3RyKTsKICB9IGNhdGNoIChlcnIpIHsKICAgIHRocm93IEVycm9yKAogICAgICBgSW1wb3J0IG1hcCBhdCAke2ltcG9ydE1hcFBhdGh9IGNvbnRhaW5zIGludmFsaWQganNvbjogJHtlcnIubWVzc2FnZX1gCiAgICApOwogIH0KICByZXR1cm4gcmVzb2x2ZUFuZENvbXBvc2VJbXBvcnRNYXAoanNvbik7Cn0KZ2xvYmFsLm5vZGVMb2FkZXIgPSBnbG9iYWwubm9kZUxvYWRlciB8fCB7fTsKZ2xvYmFsLm5vZGVMb2FkZXIuc2V0SW1wb3J0TWFwUHJvbWlzZSA9IGZ1bmN0aW9uIHNldEltcG9ydE1hcFByb21pc2UocHJvbWlzZSkgewogIGltcG9ydE1hcFByb21pc2UgPSBwcm9taXNlLnRoZW4oKG1hcCkgPT4gewogICAgcmV0dXJuIHJlc29sdmVBbmRDb21wb3NlSW1wb3J0TWFwKG1hcCk7CiAgfSk7Cn07CmZ1bmN0aW9uIGVtcHR5TWFwKCkgewogIHJldHVybiB7IGltcG9ydHM6IHt9LCBzY29wZXM6IHt9IH07Cn0KCi8vIGxpYnMvbmF0aXZlLWZlZGVyYXRpb24tbm9kZS9zcmMvbGliL3V0aWxzL2xvYWRlci1hcy1kYXRhLXVybC5qcwp2YXIgcmVzb2x2ZXIgPSAiYVcxd2IzSjBJSEJoZEdnZ1puSnZiU0FuY0dGMGFDYzdDbWx0Y0c5eWRDQjFjbXdnWm5KdmJTQW5kWEpzSnpzS2FXMXdiM0owSUhzZ2NISnZiV2x6WlhNZ1lYTWdabk1nZlNCbWNtOXRJQ2RtY3ljN0NncGxlSEJ2Y25RZ1kyOXVjM1FnU1UxUVQxSlVYMDFCVUY5R1NVeEZYMDVCVFVVZ1BTQW5ibTlrWlM1cGJYQnZjblJ0WVhBbk93b0tZMjl1YzNRZ1ltRnpaVlZTVENBOUlIVnliQzV3WVhSb1ZHOUdhV3hsVlZKTUtIQnliMk5sYzNNdVkzZGtLQ2twSUNzZ2NHRjBhQzV6WlhBN0Nnb3ZMeUJvZEhSd2N6b3ZMM2RwWTJjdVoybDBhSFZpTG1sdkwybHRjRzl5ZEMxdFlYQnpMeU51WlhjdGNtVnpiMngyWlMxaGJHZHZjbWwwYUcwS1pYaHdiM0owSUdaMWJtTjBhVzl1SUhKbGMyOXNkbVZUY0dWamFXWnBaWElvYVcxd2IzSjBUV0Z3TENCemNHVmphV1pwWlhJc0lIQmhjbVZ1ZEZWU1RDa2dld29nSUd4bGRDQmpkWEp5Wlc1MFFtRnpaVlZTVERzS0lDQnBaaUFvY0dGeVpXNTBWVkpNS1NCN0NpQWdJQ0JqYjI1emRDQnNZWE4wVTJ4aGMyaEpibVJsZUNBOUlIQmhjbVZ1ZEZWU1RDNXNZWE4wU1c1a1pYaFBaaWh3WVhSb0xuTmxjQ2s3Q2lBZ0lDQmpkWEp5Wlc1MFFtRnpaVlZTVENBOUlIQmhjbVZ1ZEZWU1RDNXpiR2xqWlNnd0xDQnNZWE4wVTJ4aGMyaEpibVJsZUNBcklERXBPd29nSUgwZ1pXeHpaU0I3Q2lBZ0lDQmpkWEp5Wlc1MFFtRnpaVlZTVENBOUlHSmhjMlZWVWt3N0NpQWdmUW9nSUdOdmJuTjBJRzV2Y20xaGJHbDZaV1JUY0dWamFXWnBaWElnUFFvZ0lDQWdjR0Z5YzJWVlVreE1hV3RsVTNCbFkybG1hV1Z5S0hOd1pXTnBabWxsY2l3Z1kzVnljbVZ1ZEVKaGMyVlZVa3dwSUh4OElITndaV05wWm1sbGNqc0tJQ0JtYjNJZ0tHeGxkQ0J6WTI5d1pWQnlaV1pwZUNCcGJpQnBiWEJ2Y25STllYQXVjMk52Y0dWektTQjdDaUFnSUNCcFppQW9DaUFnSUNBZ0lITmpiM0JsVUhKbFptbDRJRDA5UFNCamRYSnlaVzUwUW1GelpWVlNUQ0I4ZkFvZ0lDQWdJQ0FvYzJOdmNHVlFjbVZtYVhndVpXNWtjMWRwZEdnb0p5OG5LU0FtSmlCamRYSnlaVzUwUW1GelpWVlNUQzV6ZEdGeWRITlhhWFJvS0hOamIzQmxVSEpsWm1sNEtTa0tJQ0FnSUNrZ2V3b2dJQ0FnSUNCamIyNXpkQ0J6WTI5d1pVbHRjRzl5ZEhOTllYUmphQ0E5SUhKbGMyOXNkbVZKYlhCdmNuUnpUV0YwWTJnb0NpQWdJQ0FnSUNBZ2JtOXliV0ZzYVhwbFpGTndaV05wWm1sbGNpd0tJQ0FnSUNBZ0lDQnBiWEJ2Y25STllYQXVjMk52Y0dWelczTmpiM0JsVUhKbFptbDRYUW9nSUNBZ0lDQXBPd29nSUNBZ0lDQnBaaUFvYzJOdmNHVkpiWEJ2Y25SelRXRjBZMmdwSUhzS0lDQWdJQ0FnSUNCeVpYUjFjbTRnYzJOdmNHVkpiWEJ2Y25SelRXRjBZMmc3Q2lBZ0lDQWdJSDBLSUNBZ0lIMGdaV3h6WlNCN0NpQWdJQ0FnSUdOdmJuTjBJSFJ2Y0V4bGRtVnNTVzF3YjNKMGMwMWhkR05vSUQwZ2NtVnpiMngyWlVsdGNHOXlkSE5OWVhSamFDZ0tJQ0FnSUNBZ0lDQnViM0p0WVd4cGVtVmtVM0JsWTJsbWFXVnlMQW9nSUNBZ0lDQWdJR2x0Y0c5eWRFMWhjQzVwYlhCdmNuUnpDaUFnSUNBZ0lDazdDaUFnSUNBZ0lHbG1JQ2gwYjNCTVpYWmxiRWx0Y0c5eWRITk5ZWFJqYUNrZ2V3b2dJQ0FnSUNBZ0lISmxkSFZ5YmlCMGIzQk1aWFpsYkVsdGNHOXlkSE5OWVhSamFEc0tJQ0FnSUNBZ2ZRb2dJQ0FnZlFvZ0lIMEtDaUFnY21WMGRYSnVJSEpsYzI5c2RtVkpiWEJ2Y25SelRXRjBZMmdvYm05eWJXRnNhWHBsWkZOd1pXTnBabWxsY2l3Z2FXMXdiM0owVFdGd0xtbHRjRzl5ZEhNcE93cDlDZ292THlCb2RIUndjem92TDNkcFkyY3VaMmwwYUhWaUxtbHZMMmx0Y0c5eWRDMXRZWEJ6THlOeVpYTnZiSFpsTFdGdUxXbHRjRzl5ZEhNdGJXRjBZMmdLWm5WdVkzUnBiMjRnY21WemIyeDJaVWx0Y0c5eWRITk5ZWFJqYUNodWIzSnRZV3hwZW1Wa1UzQmxZMmxtYVdWeUxDQnpjR1ZqYVdacFpYSk5ZWEFwSUhzS0lDQm1iM0lnS0d4bGRDQnpjR1ZqYVdacFpYSkxaWGtnYVc0Z2MzQmxZMmxtYVdWeVRXRndLU0I3Q2lBZ0lDQmpiMjV6ZENCeVpYTnZiSFYwYVc5dVVtVnpkV3gwSUQwZ2MzQmxZMmxtYVdWeVRXRndXM053WldOcFptbGxja3RsZVYwN0Nnb2dJQ0FnYVdZZ0tITndaV05wWm1sbGNrdGxlU0E5UFQwZ2JtOXliV0ZzYVhwbFpGTndaV05wWm1sbGNpa2dld29nSUNBZ0lDQnBaaUFvY21WemIyeDFkR2x2YmxKbGMzVnNkQ0E5UFQwZ2JuVnNiQ2tnZXdvZ0lDQWdJQ0FnSUhSb2NtOTNJRlI1Y0dWRmNuSnZjaWdLSUNBZ0lDQWdJQ0FnSUdCVWFHVWdhVzF3YjNKMElHMWhjQ0J5WlhOdmJIVjBhVzl1SUc5bUlDUjdjM0JsWTJsbWFXVnlTMlY1ZlNCbVlXbHNaV1FnWkhWbElIUnZJR0VnYm5Wc2JDQmxiblJ5ZVdBS0lDQWdJQ0FnSUNBcE93b2dJQ0FnSUNCOUNpQWdJQ0FnSUhKbGRIVnliaUJ5WlhOdmJIVjBhVzl1VW1WemRXeDBPd29nSUNBZ2ZTQmxiSE5sSUdsbUlDZ0tJQ0FnSUNBZ2MzQmxZMmxtYVdWeVMyVjVMbVZ1WkhOWGFYUm9LQ2N2SnlrZ0ppWUtJQ0FnSUNBZ2JtOXliV0ZzYVhwbFpGTndaV05wWm1sbGNpNXpkR0Z5ZEhOWGFYUm9LSE53WldOcFptbGxja3RsZVNrS0lDQWdJQ2tnZXdvZ0lDQWdJQ0JwWmlBb2NtVnpiMngxZEdsdmJsSmxjM1ZzZENBOVBUMGdiblZzYkNrZ2V3b2dJQ0FnSUNBZ0lIUm9jbTkzSUZSNWNHVkZjbkp2Y2lnS0lDQWdJQ0FnSUNBZ0lHQlVhR1VnYVcxd2IzSjBJRzFoY0NCeVpYTnZiSFYwYVc5dUlHOW1JQ1I3YzNCbFkybG1hV1Z5UzJWNWZTQm1ZV2xzWldRZ1pIVmxJSFJ2SUdFZ2JuVnNiQ0JsYm5SeWVXQUtJQ0FnSUNBZ0lDQXBPd29nSUNBZ0lDQjlDaUFnSUNBZ0lHTnZibk4wSUdGbWRHVnlVSEpsWm1sNElEMGdibTl5YldGc2FYcGxaRk53WldOcFptbGxjaTV6YkdsalpTaHpjR1ZqYVdacFpYSkxaWGt1YkdWdVozUm9LVHNLSUNBZ0lDQWdkSEo1SUhzS0lDQWdJQ0FnSUNCeVpYUjFjbTRnYm1WM0lGVlNUQ2hoWm5SbGNsQnlaV1pwZUN3Z2NtVnpiMngxZEdsdmJsSmxjM1ZzZENrdWFISmxaanNLSUNBZ0lDQWdmU0JqWVhSamFDQjdDaUFnSUNBZ0lDQWdkR2h5YjNjZ1ZIbHdaVVZ5Y205eUtBb2dJQ0FnSUNBZ0lDQWdZRlJvWlNCcGJYQnZjblFnYldGd0lISmxjMjlzZFhScGIyNGdiMllnSkh0emNHVmphV1pwWlhKTFpYbDlJR1poYVd4bFpDQmtkV1VnZEc4Z1ZWSk1JSEJoY25ObElHWmhhV3gxY21WZ0NpQWdJQ0FnSUNBZ0tUc0tJQ0FnSUNBZ2ZRb2dJQ0FnZlFvZ0lIMEtDaUFnY21WMGRYSnVJRzUxYkd3N0NuMEtDaTh2SUdoMGRIQnpPaTh2ZDJsalp5NW5hWFJvZFdJdWFXOHZhVzF3YjNKMExXMWhjSE12STNCaGNuTnBibWNLWlhod2IzSjBJR1oxYm1OMGFXOXVJSEpsYzI5c2RtVkJibVJEYjIxd2IzTmxTVzF3YjNKMFRXRndLSEJoY25ObFpDa2dld29nSUM4dklGTjBaWEFnTWdvZ0lHbG1JQ2doYVhOUWJHRnBiazlpYW1WamRDaHdZWEp6WldRcEtTQjdDaUFnSUNCMGFISnZkeUJGY25KdmNpaGdTVzUyWVd4cFpDQnBiWEJ2Y25RZ2JXRndJQzBnZEc5d0lHeGxkbVZzSUcxMWMzUWdZbVVnWVc0Z2IySnFaV04wWUNrN0NpQWdmUW9LSUNBdkx5QlRkR1Z3SURNS0lDQnNaWFFnYzI5eWRHVmtRVzVrVG05eWJXRnNhWHBsWkVsdGNHOXlkSE1nUFNCN2ZUc0tDaUFnTHk4Z1UzUmxjQ0EwQ2lBZ2FXWWdLSEJoY25ObFpDNW9ZWE5QZDI1UWNtOXdaWEowZVNnbmFXMXdiM0owY3ljcEtTQjdDaUFnSUNBdkx5QlRkR1Z3SURRdU1Rb2dJQ0FnYVdZZ0tDRnBjMUJzWVdsdVQySnFaV04wS0hCaGNuTmxaQzVwYlhCdmNuUnpLU2tnZXdvZ0lDQWdJQ0IwYUhKdmR5QkZjbkp2Y2loZ1NXNTJZV3hwWkNCcGJYQnZjblFnYldGd0lDMGdJbWx0Y0c5eWRITWlJSEJ5YjNCbGNuUjVJRzExYzNRZ1ltVWdZVzRnYjJKcVpXTjBZQ2s3Q2lBZ0lDQjlDZ29nSUNBZ0x5OGdVM1JsY0NBMExqSUtJQ0FnSUhOdmNuUmxaRUZ1WkU1dmNtMWhiR2w2WldSSmJYQnZjblJ6SUQwZ2MyOXlkRUZ1WkU1dmNtMWhiR2w2WlZOd1pXTnBabWxsY2sxaGNDZ0tJQ0FnSUNBZ2NHRnljMlZrTG1sdGNHOXlkSE1zQ2lBZ0lDQWdJR0poYzJWVlVrd0tJQ0FnSUNrN0NpQWdmUW9LSUNBdkx5QlRkR1Z3SURVS0lDQnNaWFFnYzI5eWRHVmtRVzVrVG05eWJXRnNhWHBsWkZOamIzQmxjeUE5SUh0OU93b0tJQ0F2THlCVGRHVndJRFlLSUNCcFppQW9jR0Z5YzJWa0xtaGhjMDkzYmxCeWIzQmxjblI1S0NkelkyOXdaWE1uS1NrZ2V3b2dJQ0FnTHk4Z1UzUmxjQ0EyTGpFS0lDQWdJR2xtSUNnaGFYTlFiR0ZwYms5aWFtVmpkQ2h3WVhKelpXUXVjMk52Y0dWektTa2dld29nSUNBZ0lDQjBhSEp2ZHlCRmNuSnZjaWhnU1c1MllXeHBaQ0JwYlhCdmNuUWdiV0Z3SUMwZ0luTmpiM0JsY3lJZ2NISnZjR1Z5ZEhrZ2JYVnpkQ0JpWlNCaGJpQnZZbXBsWTNSZ0tUc0tJQ0FnSUgwS0NpQWdJQ0F2THlCVGRHVndJRFl1TWdvZ0lDQWdjMjl5ZEdWa1FXNWtUbTl5YldGc2FYcGxaRk5qYjNCbGN5QTlJSE52Y25SQmJtUk9iM0p0WVd4cGVtVlRZMjl3WlhNb2NHRnljMlZrTG5OamIzQmxjeXdnWW1GelpWVlNUQ2s3Q2lBZ2ZRb0tJQ0F2THlCVGRHVndJRGNLSUNCamIyNXpkQ0JwYm5aaGJHbGtTMlY1Y3lBOUlFOWlhbVZqZEM1clpYbHpLSEJoY25ObFpDa3VabWxzZEdWeUtBb2dJQ0FnS0d0bGVTa2dQVDRnYTJWNUlDRTlQU0FuYVcxd2IzSjBjeWNnSmlZZ2EyVjVJQ0U5UFNBbmMyTnZjR1Z6SndvZ0lDazdDaUFnYVdZZ0tHbHVkbUZzYVdSTFpYbHpMbXhsYm1kMGFDQStJREFwSUhzS0lDQWdJR052Ym5OdmJHVXVkMkZ5YmlnS0lDQWdJQ0FnWUVsdWRtRnNhV1FnZEc5d0xXeGxkbVZzSUd0bGVTUjdDaUFnSUNBZ0lDQWdhVzUyWVd4cFpFdGxlWE11YkdWdVozUm9JRDRnTUNBL0lDZHpKeUE2SUNjbkNpQWdJQ0FnSUgwZ2FXNGdhVzF3YjNKMElHMWhjQ0F0SUNSN2FXNTJZV3hwWkV0bGVYTXVhbTlwYmlnbkxDQW5LWDFnQ2lBZ0lDQXBPd29nSUgwS0NpQWdMeThnVTNSbGNDQTRDaUFnY21WMGRYSnVJSHNLSUNBZ0lHbHRjRzl5ZEhNNklITnZjblJsWkVGdVpFNXZjbTFoYkdsNlpXUkpiWEJ2Y25SekxBb2dJQ0FnYzJOdmNHVnpPaUJ6YjNKMFpXUkJibVJPYjNKdFlXeHBlbVZrVTJOdmNHVnpMQW9nSUgwN0NuMEtDaTh2SUdoMGRIQnpPaTh2ZDJsalp5NW5hWFJvZFdJdWFXOHZhVzF3YjNKMExXMWhjSE12STNOdmNuUXRZVzVrTFc1dmNtMWhiR2w2WlMxaExYTndaV05wWm1sbGNpMXRZWEFLWm5WdVkzUnBiMjRnYzI5eWRFRnVaRTV2Y20xaGJHbDZaVk53WldOcFptbGxjazFoY0NodFlYQXNJR0poYzJWVlVrd3BJSHNLSUNCamIyNXpkQ0J1YjNKdFlXeHBlbVZrSUQwZ2UzMDdDZ29nSUdadmNpQW9iR1YwSUhOd1pXTnBabWxsY2t0bGVTQnBiaUJ0WVhBcElIc0tJQ0FnSUdOdmJuTjBJSFpoYkhWbElEMGdiV0Z3VzNOd1pXTnBabWxsY2t0bGVWMDdDZ29nSUNBZ1kyOXVjM1FnYm05eWJXRnNhWHBsWkZOd1pXTnBabWxsY2t0bGVTQTlJRzV2Y20xaGJHbDZaVk53WldOcFptbGxja3RsZVNoemNHVmphV1pwWlhKTFpYa3NJR0poYzJWVlVrd3BPd29nSUNBZ2FXWWdLRzV2Y20xaGJHbDZaV1JUY0dWamFXWnBaWEpMWlhrZ1BUMDlJRzUxYkd3cElIc0tJQ0FnSUNBZ1kyOXVkR2x1ZFdVN0NpQWdJQ0I5Q2dvZ0lDQWdiR1YwSUdGa1pISmxjM05WVWt3Z1BTQndZWEp6WlZWU1RFeHBhMlZUY0dWamFXWnBaWElvZG1Gc2RXVXNJR0poYzJWVlVrd3BPd29nSUNBZ2FXWWdLR0ZrWkhKbGMzTlZVa3dnUFQwOUlHNTFiR3dwSUhzS0lDQWdJQ0FnWTI5dWMyOXNaUzUzWVhKdUtBb2dJQ0FnSUNBZ0lHQkpiblpoYkdsa0lGVlNUQ0JoWkdSeVpYTnpJR1p2Y2lCcGJYQnZjblFnYldGd0lITndaV05wWm1sbGNpQW5KSHR6Y0dWamFXWnBaWEpMWlhsOUoyQUtJQ0FnSUNBZ0tUc0tJQ0FnSUNBZ2JtOXliV0ZzYVhwbFpGdHViM0p0WVd4cGVtVmtVM0JsWTJsbWFXVnlTMlY1WFNBOUlHNTFiR3c3Q2lBZ0lDQWdJR052Ym5ScGJuVmxPd29nSUNBZ2ZRb0tJQ0FnSUdsbUlDaHpjR1ZqYVdacFpYSkxaWGt1Wlc1a2MxZHBkR2dvSnk4bktTQW1KaUFoWVdSa2NtVnpjMVZTVEM1bGJtUnpWMmwwYUNnbkx5Y3BLU0I3Q2lBZ0lDQWdJR052Ym5OdmJHVXVkMkZ5YmlnS0lDQWdJQ0FnSUNCZ1NXNTJZV3hwWkNCVlVrd2dZV1JrY21WemN5Qm1iM0lnYVcxd2IzSjBJRzFoY0NCemNHVmphV1pwWlhJZ0p5UjdjM0JsWTJsbWFXVnlTMlY1ZlNjZ0xTQnphVzVqWlNCMGFHVWdjM0JsWTJsbWFXVnlJR1Z1WkhNZ2FXNGdjMnhoYzJnc0lITnZJRzExYzNRZ2RHaGxJR0ZrWkhKbGMzTmdDaUFnSUNBZ0lDazdDaUFnSUNBZ0lHNXZjbTFoYkdsNlpXUmJibTl5YldGc2FYcGxaRk53WldOcFptbGxja3RsZVYwZ1BTQnVkV3hzT3dvZ0lDQWdJQ0JqYjI1MGFXNTFaVHNLSUNBZ0lIMEtDaUFnSUNCdWIzSnRZV3hwZW1Wa1cyNXZjbTFoYkdsNlpXUlRjR1ZqYVdacFpYSkxaWGxkSUQwZ1lXUmtjbVZ6YzFWU1REc0tJQ0I5Q2dvZ0lISmxkSFZ5YmlCdWIzSnRZV3hwZW1Wa093cDlDZ292THlCb2RIUndjem92TDNkcFkyY3VaMmwwYUhWaUxtbHZMMmx0Y0c5eWRDMXRZWEJ6THlOdWIzSnRZV3hwZW1VdFlTMXpjR1ZqYVdacFpYSXRhMlY1Q21aMWJtTjBhVzl1SUc1dmNtMWhiR2w2WlZOd1pXTnBabWxsY2t0bGVTaHJaWGtwSUhzS0lDQnBaaUFvYTJWNUlEMDlQU0FuSnlrZ2V3b2dJQ0FnWTI5dWMyOXNaUzUzWVhKdUtHQlRjR1ZqYVdacFpYSWdhMlY1Y3lCcGJpQnBiWEJ2Y25RZ2JXRndjeUJ0WVhrZ2JtOTBJR0psSUhSb1pTQmxiWEIwZVNCemRISnBibWRnS1RzS0lDQWdJSEpsZEhWeWJpQnVkV3hzT3dvZ0lIMEtDaUFnY21WMGRYSnVJSEJoY25ObFZWSk1UR2xyWlZOd1pXTnBabWxsY2loclpYa3NJR0poYzJWVlVrd3BJSHg4SUd0bGVUc0tmUW9LTHk4Z2FIUjBjSE02THk5M2FXTm5MbWRwZEdoMVlpNXBieTlwYlhCdmNuUXRiV0Z3Y3k4amNHRnljMlV0WVMxMWNtd3RiR2xyWlMxcGJYQnZjblF0YzNCbFkybG1hV1Z5Q21aMWJtTjBhVzl1SUhCaGNuTmxWVkpNVEdsclpWTndaV05wWm1sbGNpaHpjR1ZqYVdacFpYSXNJR0poYzJWVlVrd3BJSHNLSUNCamIyNXpkQ0IxYzJWQ1lYTmxWWEpzUVhOUVlYSmxiblFnUFFvZ0lDQWdjM0JsWTJsbWFXVnlMbk4wWVhKMGMxZHBkR2dvSnk4bktTQjhmQW9nSUNBZ2MzQmxZMmxtYVdWeUxuTjBZWEowYzFkcGRHZ29KeTR2SnlrZ2ZId0tJQ0FnSUhOd1pXTnBabWxsY2k1emRHRnlkSE5YYVhSb0tDY3VMaThuS1RzS0NpQWdkSEo1SUhzS0lDQWdJSEpsZEhWeWJpQnVaWGNnVlZKTUtITndaV05wWm1sbGNpd2dkWE5sUW1GelpWVnliRUZ6VUdGeVpXNTBJRDhnWW1GelpWVlNUQ0E2SUhWdVpHVm1hVzVsWkNrdWFISmxaanNLSUNCOUlHTmhkR05vSUhzS0lDQWdJSEpsZEhWeWJpQnVkV3hzT3dvZ0lIMEtmUW9LTHk4Z2FIUjBjSE02THk5M2FXTm5MbWRwZEdoMVlpNXBieTlwYlhCdmNuUXRiV0Z3Y3k4amMyOXlkQzFoYm1RdGJtOXliV0ZzYVhwbExYTmpiM0JsY3dwbWRXNWpkR2x2YmlCemIzSjBRVzVrVG05eWJXRnNhWHBsVTJOdmNHVnpLRzFoY0N3Z1ltRnpaVlZTVENrZ2V3b2dJR3hsZENCdWIzSnRZV3hwZW1Wa0lEMGdlMzA3Q2dvZ0lHWnZjaUFvYkdWMElITmpiM0JsVUhKbFptbDRJR2x1SUcxaGNDa2dld29nSUNBZ1kyOXVjM1FnY0c5MFpXNTBhV0ZzVTNCbFkybG1hV1Z5VFdGd0lEMGdiV0Z3VzNOamIzQmxVSEpsWm1sNFhUc0tJQ0FnSUdsbUlDZ2hhWE5RYkdGcGJrOWlhbVZqZENod2IzUmxiblJwWVd4VGNHVmphV1pwWlhKTllYQXBLU0I3Q2lBZ0lDQWdJSFJvY205M0lGUjVjR1ZGY25KdmNpZ0tJQ0FnSUNBZ0lDQmdWR2hsSUhaaGJIVmxJRzltSUhOamIzQmxJQ1I3YzJOdmNHVlFjbVZtYVhoOUlHMTFjM1FnWW1VZ1lTQktVMDlPSUc5aWFtVmpkR0FLSUNBZ0lDQWdLVHNLSUNBZ0lIMEtDaUFnSUNCc1pYUWdjMk52Y0dWUWNtVm1hWGhWVWt3N0NpQWdJQ0IwY25rZ2V3b2dJQ0FnSUNCelkyOXdaVkJ5WldacGVGVlNUQ0E5SUc1bGR5QlZVa3dvYzJOdmNHVlFjbVZtYVhnc0lHSmhjMlZWVWt3cExtaHlaV1k3Q2lBZ0lDQjlJR05oZEdOb0lIc0tJQ0FnSUNBZ1kyOXVjMjlzWlM1M1lYSnVLQW9nSUNBZ0lDQWdJR0JUWTI5d1pTQndjbVZtYVhnZ1ZWSk1JQ2NrZTNOamIzQmxVSEpsWm1sNGZTY2dkMkZ6SUc1dmRDQndZWEp6WldGaWJHVWdhVzRnYVcxd2IzSjBJRzFoY0dBS0lDQWdJQ0FnS1RzS0lDQWdJQ0FnWTI5dWRHbHVkV1U3Q2lBZ0lDQjlDZ29nSUNBZ2JtOXliV0ZzYVhwbFpGdHpZMjl3WlZCeVpXWnBlRlZTVEYwZ1BTQnpiM0owUVc1a1RtOXliV0ZzYVhwbFUzQmxZMmxtYVdWeVRXRndLQW9nSUNBZ0lDQndiM1JsYm5ScFlXeFRjR1ZqYVdacFpYSk5ZWEFzQ2lBZ0lDQWdJR0poYzJWVlVrd0tJQ0FnSUNrN0NpQWdmUW9LSUNCeVpYUjFjbTRnYm05eWJXRnNhWHBsWkRzS2ZRb0tablZ1WTNScGIyNGdhWE5RYkdGcGJrOWlhbVZqZENodlltb3BJSHNLSUNCeVpYUjFjbTRnYjJKcUlEMDlQU0JQWW1wbFkzUW9iMkpxS1NBbUppQWhRWEp5WVhrdWFYTkJjbkpoZVNodlltb3BPd3A5Q2dvdkx5QXRMUzBLQ214bGRDQnBiWEJ2Y25STllYQlFjbTl0YVhObElEMGdaMlYwU1cxd2IzSjBUV0Z3VUhKdmJXbHpaU2dwT3dvS1pYaHdiM0owSUdGemVXNWpJR1oxYm1OMGFXOXVJSEpsYzI5c2RtVW9jM0JsWTJsbWFXVnlMQ0JqYjI1MFpYaDBMQ0JrWldaaGRXeDBVbVZ6YjJ4MlpTa2dld29nSUdOdmJuTjBJSHNnY0dGeVpXNTBWVkpNSUQwZ2JuVnNiQ0I5SUQwZ1kyOXVkR1Y0ZERzS0lDQmpiMjV6ZENCcGJYQnZjblJOWVhBZ1BTQmhkMkZwZENCcGJYQnZjblJOWVhCUWNtOXRhWE5sT3dvZ0lHTnZibk4wSUdsdGNHOXlkRTFoY0ZWeWJDQTlJSEpsYzI5c2RtVlRjR1ZqYVdacFpYSW9hVzF3YjNKMFRXRndMQ0J6Y0dWamFXWnBaWElzSUhCaGNtVnVkRlZTVENrN0Nnb2dJSEpsZEhWeWJpQmtaV1poZFd4MFVtVnpiMngyWlNocGJYQnZjblJOWVhCVmNtd2dQejhnYzNCbFkybG1hV1Z5TENCamIyNTBaWGgwTENCa1pXWmhkV3gwVW1WemIyeDJaU2s3Q24wS0NtVjRjRzl5ZENCaGMzbHVZeUJtZFc1amRHbHZiaUJzYjJGa0tIVnliQ3dnWTI5dWRHVjRkQ3dnWkdWbVlYVnNkRXh2WVdRcElIc0tJQ0JwWmlBb2RYSnNMbk4wWVhKMGMxZHBkR2dvSjJoMGRIQTZMeThuS1NCOGZDQjFjbXd1YzNSaGNuUnpWMmwwYUNnbmFIUjBjSE02THk4bktTa2dld29nSUNBZ1kyOXVjM1FnY21WeklEMGdZWGRoYVhRZ1ptVjBZMmdvZFhKc0tUc0tJQ0FnSUdsbUlDZ2hjbVZ6TG05cktTQjdDaUFnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2loZ1JtRnBiR1ZrSUhSdklHWmxkR05vSUcxdlpIVnNaU0JtY205dElDUjdkWEpzZldBcE93b2dJQ0FnZlFvZ0lDQWdZMjl1YzNRZ2MyOTFjbU5sSUQwZ1lYZGhhWFFnY21WekxuUmxlSFFvS1RzS0lDQWdJSEpsZEhWeWJpQjdDaUFnSUNBZ0lITm9iM0owUTJseVkzVnBkRG9nZEhKMVpTd0tJQ0FnSUNBZ1ptOXliV0YwT2lBbmJXOWtkV3hsSnl3Z0NpQWdJQ0FnSUhOdmRYSmpaU3dLSUNBZ0lIMDdDaUFnZlFvS0lDQnBaaUFvSVhWeWJDNXpkR0Z5ZEhOWGFYUm9LQ2R1YjJSbE9pY3BLU0I3Q2lBZ0lDQmpiMjUwWlhoMExtWnZjbTFoZENBOUlDZHRiMlIxYkdVbk93b2dJSDBLSUNBS0lDQnlaWFIxY200Z1pHVm1ZWFZzZEV4dllXUW9kWEpzTENCamIyNTBaWGgwTENCa1pXWmhkV3gwVEc5aFpDazdDbjBLQ21GemVXNWpJR1oxYm1OMGFXOXVJR2RsZEVsdGNHOXlkRTFoY0ZCeWIyMXBjMlVvS1NCN0NpQWdZMjl1YzNRZ2NtVnNZWFJwZG1WUVlYUm9JRDBnY0hKdlkyVnpjeTVsYm5ZdVNVMVFUMUpVWDAxQlVGOVFRVlJJSUh4OElFbE5VRTlTVkY5TlFWQmZSa2xNUlY5T1FVMUZPd29nSUdOdmJuTjBJR2x0Y0c5eWRFMWhjRkJoZEdnZ1BTQndZWFJvTG5KbGMyOXNkbVVvY0hKdlkyVnpjeTVqZDJRb0tTd2djbVZzWVhScGRtVlFZWFJvS1RzS0NpQWdiR1YwSUhOMGNqc0tJQ0IwY25rZ2V3b2dJQ0FnYzNSeUlEMGdZWGRoYVhRZ1puTXVjbVZoWkVacGJHVW9hVzF3YjNKMFRXRndVR0YwYUNrN0NpQWdmU0JqWVhSamFDQW9aWEp5S1NCN0NpQWdJQ0J5WlhSMWNtNGdaVzF3ZEhsTllYQW9LVHNLSUNCOUNnb2dJR3hsZENCcWMyOXVPd29nSUhSeWVTQjdDaUFnSUNCcWMyOXVJRDBnWVhkaGFYUWdTbE5QVGk1d1lYSnpaU2h6ZEhJcE93b2dJSDBnWTJGMFkyZ2dLR1Z5Y2lrZ2V3b2dJQ0FnZEdoeWIzY2dSWEp5YjNJb0NpQWdJQ0FnSUdCSmJYQnZjblFnYldGd0lHRjBJQ1I3YVcxd2IzSjBUV0Z3VUdGMGFIMGdZMjl1ZEdGcGJuTWdhVzUyWVd4cFpDQnFjMjl1T2lBa2UyVnljaTV0WlhOellXZGxmV0FLSUNBZ0lDazdDaUFnZlFvS0lDQnlaWFIxY200Z2NtVnpiMngyWlVGdVpFTnZiWEJ2YzJWSmJYQnZjblJOWVhBb2FuTnZiaWs3Q24wS0NtZHNiMkpoYkM1dWIyUmxURzloWkdWeUlEMGdaMnh2WW1Gc0xtNXZaR1ZNYjJGa1pYSWdmSHdnZTMwN0NncG5iRzlpWVd3dWJtOWtaVXh2WVdSbGNpNXpaWFJKYlhCdmNuUk5ZWEJRY205dGFYTmxJRDBnWm5WdVkzUnBiMjRnYzJWMFNXMXdiM0owVFdGd1VISnZiV2x6WlNod2NtOXRhWE5sS1NCN0NpQWdhVzF3YjNKMFRXRndVSEp2YldselpTQTlJSEJ5YjIxcGMyVXVkR2hsYmlnb2JXRndLU0E5UGlCN0NpQWdJQ0J5WlhSMWNtNGdjbVZ6YjJ4MlpVRnVaRU52YlhCdmMyVkpiWEJ2Y25STllYQW9iV0Z3S1RzS0lDQjlLVHNLZlRzS0NtWjFibU4wYVc5dUlHVnRjSFI1VFdGd0tDa2dld29nSUhKbGRIVnliaUI3SUdsdGNHOXlkSE02SUh0OUxDQnpZMjl3WlhNNklIdDlJSDA3Q24wSyI7CgovLyBsaWJzL25hdGl2ZS1mZWRlcmF0aW9uLW5vZGUvc3JjL2xpYi9ub2RlL2luaXQtbm9kZS1mZWRlcmF0aW9uLnRzCnZhciBkZWZhdWx0T3B0aW9ucyA9IHsKICByZW1vdGVzT3JNYW5pZmVzdFVybDoge30sCiAgcmVsQnVuZGxlUGF0aDogIi4uL2Jyb3dzZXIiLAogIHRocm93SWZSZW1vdGVOb3RGb3VuZDogZmFsc2UKfTsKYXN5bmMgZnVuY3Rpb24gaW5pdE5vZGVGZWRlcmF0aW9uKG9wdGlvbnMpIHsKICBjb25zdCBtZXJnZWRPcHRpb25zID0geyAuLi5kZWZhdWx0T3B0aW9ucywgLi4ub3B0aW9ucyB9OwogIGNvbnN0IGltcG9ydE1hcCA9IGF3YWl0IGNyZWF0ZU5vZGVJbXBvcnRNYXAobWVyZ2VkT3B0aW9ucyk7CiAgYXdhaXQgd3JpdGVJbXBvcnRNYXAoaW1wb3J0TWFwKTsKICBhd2FpdCB3cml0ZVJlc29sdmVyKCk7CiAgcmVnaXN0ZXIocGF0aFRvRmlsZVVSTCgiLi9mZWRlcmF0aW9uLXJlc29sdmVyLm1qcyIpLmhyZWYpOwp9CmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZU5vZGVJbXBvcnRNYXAob3B0aW9ucykgewogIGNvbnN0IHsgcmVtb3Rlc09yTWFuaWZlc3RVcmwsIHJlbEJ1bmRsZVBhdGggfSA9IG9wdGlvbnM7CiAgY29uc3QgcmVtb3RlcyA9IHR5cGVvZiByZW1vdGVzT3JNYW5pZmVzdFVybCA9PT0gIm9iamVjdCIgPyByZW1vdGVzT3JNYW5pZmVzdFVybCA6IGF3YWl0IGxvYWRGc01hbmlmZXN0KHJlbW90ZXNPck1hbmlmZXN0VXJsKTsKICBjb25zdCBob3N0SW5mbyA9IGF3YWl0IGxvYWRGc0ZlZGVyYXRpb25JbmZvKHJlbEJ1bmRsZVBhdGgpOwogIGNvbnN0IGhvc3RJbXBvcnRNYXAgPSBhd2FpdCBwcm9jZXNzSG9zdEluZm8oaG9zdEluZm8sICIuLyIgKyByZWxCdW5kbGVQYXRoKTsKICBjb25zdCByZW1vdGVzSW1wb3J0TWFwID0gYXdhaXQgcHJvY2Vzc1JlbW90ZUluZm9zKHJlbW90ZXMsIHsKICAgIHRocm93SWZSZW1vdGVOb3RGb3VuZDogb3B0aW9ucy50aHJvd0lmUmVtb3RlTm90Rm91bmQsCiAgICBjYWNoZVRhZzogb3B0aW9ucy5jYWNoZVRhZwogIH0pOwogIGNvbnN0IGltcG9ydE1hcCA9IG1lcmdlSW1wb3J0TWFwcyhob3N0SW1wb3J0TWFwLCByZW1vdGVzSW1wb3J0TWFwKTsKICByZXR1cm4gaW1wb3J0TWFwOwp9CmFzeW5jIGZ1bmN0aW9uIGxvYWRGc01hbmlmZXN0KG1hbmlmZXN0VXJsKSB7CiAgY29uc3QgY29udGVudCA9IGF3YWl0IGZzMi5yZWFkRmlsZShtYW5pZmVzdFVybCwgInV0Zi04Iik7CiAgY29uc3QgbWFuaWZlc3QgPSBKU09OLnBhcnNlKGNvbnRlbnQpOwogIHJldHVybiBtYW5pZmVzdDsKfQphc3luYyBmdW5jdGlvbiBsb2FkRnNGZWRlcmF0aW9uSW5mbyhyZWxCdW5kbGVQYXRoKSB7CiAgY29uc3QgbWFuaWZlc3RQYXRoID0gcGF0aDIuam9pbihyZWxCdW5kbGVQYXRoLCAicmVtb3RlRW50cnkuanNvbiIpOwogIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBmczIucmVhZEZpbGUobWFuaWZlc3RQYXRoLCAidXRmLTgiKTsKICBjb25zdCBtYW5pZmVzdCA9IEpTT04ucGFyc2UoY29udGVudCk7CiAgcmV0dXJuIG1hbmlmZXN0Owp9CmFzeW5jIGZ1bmN0aW9uIHdyaXRlSW1wb3J0TWFwKG1hcCkgewogIGF3YWl0IGZzMi53cml0ZUZpbGUoCiAgICBJTVBPUlRfTUFQX0ZJTEVfTkFNRSwKICAgIEpTT04uc3RyaW5naWZ5KG1hcCwgbnVsbCwgMiksCiAgICAidXRmLTgiCiAgKTsKfQphc3luYyBmdW5jdGlvbiB3cml0ZVJlc29sdmVyKCkgewogIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHJlc29sdmVyLCAiYmFzZTY0Iik7CiAgYXdhaXQgZnMyLndyaXRlRmlsZSgiZmVkZXJhdGlvbi1yZXNvbHZlci5tanMiLCBidWZmZXIsICJ1dGYtOCIpOwp9CgovLyBsaWJzL25hdGl2ZS1mZWRlcmF0aW9uLW5vZGUvc3JjL2xpYi91dGlscy9mc3RhcnQtYXJncy1wYXJzZXIudHMKaW1wb3J0ICogYXMgZnMzIGZyb20gIm5vZGU6ZnMiOwp2YXIgZGVmYXVsdEFyZ3MgPSB7CiAgZW50cnk6ICIuL3NlcnZlci5tanMiLAogIHJlbW90ZXNPck1hbmlmZXN0VXJsOiAiLi4vYnJvd3Nlci9mZWRlcmF0aW9uLm1hbmlmZXN0Lmpzb24iLAogIHJlbEJ1bmRsZVBhdGg6ICIuLi9icm93c2VyLyIKfTsKZnVuY3Rpb24gcGFyc2VGU3RhcnRBcmdzKCkgewogIGNvbnN0IGFyZ3MyID0gewogICAgZW50cnk6ICIiLAogICAgcmVtb3Rlc09yTWFuaWZlc3RVcmw6ICIiLAogICAgcmVsQnVuZGxlUGF0aDogIiIKICB9OwogIGxldCBrZXkgPSAiIjsKICBmb3IgKGxldCBpID0gMjsgaSA8IHByb2Nlc3MuYXJndi5sZW5ndGg7IGkrKykgewogICAgY29uc3QgY2FuZCA9IHByb2Nlc3MuYXJndltpXTsKICAgIGlmIChjYW5kLnN0YXJ0c1dpdGgoIi0tIikpIHsKICAgICAgY29uc3QgY2FuZEtleSA9IGNhbmQuc3Vic3RyaW5nKDIpOwogICAgICBpZiAoZGVmYXVsdEFyZ3NbY2FuZEtleV0pIHsKICAgICAgICBrZXkgPSBjYW5kS2V5OwogICAgICB9IGVsc2UgewogICAgICAgIGNvbnNvbGUuZXJyb3IoYHN3aXRjaCAke2NhbmR9IG5vdCBzdXBwb3J0ZWQhYCk7CiAgICAgICAgZXhpdFdpdGhVc2FnZShkZWZhdWx0QXJncyk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoa2V5KSB7CiAgICAgIGFyZ3MyW2tleV0gPSBjYW5kOwogICAgICBrZXkgPSAiIjsKICAgIH0gZWxzZSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoYHVucmVsYWRlZCB2YWx1ZSAke2NhbmR9IWApOwogICAgICBleGl0V2l0aFVzYWdlKGRlZmF1bHRBcmdzKTsKICAgIH0KICB9CiAgYXBwbHlEZWZhdWx0QXJncyhhcmdzMik7CiAgcmV0dXJuIGFyZ3MyOwp9CmZ1bmN0aW9uIGFwcGx5RGVmYXVsdEFyZ3MoYXJnczIpIHsKICBpZiAoYXJnczIucmVsQnVuZGxlUGF0aCAmJiAhYXJnczIucmVtb3Rlc09yTWFuaWZlc3RVcmwpIHsKICAgIGNvbnN0IGNhbmQgPSBkZWZhdWx0QXJncy5yZWxCdW5kbGVQYXRoICsgImZlZGVyYXRpb24ubWFuaWZlc3QuanNvbiI7CiAgICBpZiAoZnMzLmV4aXN0c1N5bmMoY2FuZCkpIHsKICAgICAgYXJnczIucmVtb3Rlc09yTWFuaWZlc3RVcmwgPSBjYW5kOwogICAgfQogIH0KICBhcmdzMi5lbnRyeSA9IGFyZ3MyLmVudHJ5IHx8IGRlZmF1bHRBcmdzLmVudHJ5OwogIGFyZ3MyLnJlbEJ1bmRsZVBhdGggPSBhcmdzMi5yZWxCdW5kbGVQYXRoIHx8IGRlZmF1bHRBcmdzLnJlbEJ1bmRsZVBhdGg7CiAgYXJnczIucmVtb3Rlc09yTWFuaWZlc3RVcmwgPSBhcmdzMi5yZW1vdGVzT3JNYW5pZmVzdFVybCB8fCBkZWZhdWx0QXJncy5yZW1vdGVzT3JNYW5pZmVzdFVybDsKICBpZiAoIWZzMy5leGlzdHNTeW5jKGFyZ3MyLnJlbW90ZXNPck1hbmlmZXN0VXJsKSkgewogICAgYXJnczIucmVtb3Rlc09yTWFuaWZlc3RVcmwgPSB2b2lkIDA7CiAgfQp9CmZ1bmN0aW9uIGV4aXRXaXRoVXNhZ2UoZGVmYXVsdEFyZ3MyKSB7CiAgbGV0IGFyZ3MyID0gIiI7CiAgZm9yIChjb25zdCBrZXkgaW4gZGVmYXVsdEFyZ3MyKSB7CiAgICBhcmdzMiArPSBgWy0tJHtrZXl9ICR7ZGVmYXVsdEFyZ3MyW2tleV19XSBgOwogIH0KICBjb25zb2xlLmxvZygidXNhZ2U6IG5mc3RhcnQgIiArIGFyZ3MyKTsKICBwcm9jZXNzLmV4aXQoMSk7Cn0KCi8vIGxpYnMvbmF0aXZlLWZlZGVyYXRpb24tbm9kZS9zcmMvbGliL3V0aWxzL2ZzdGFydC50cwp2YXIgYXJncyA9IHBhcnNlRlN0YXJ0QXJncygpOwooYXN5bmMgKCkgPT4gewogIGF3YWl0IGluaXROb2RlRmVkZXJhdGlvbih7CiAgICAuLi5hcmdzLnJlbW90ZXNPck1hbmlmZXN0VXJsID8geyByZW1vdGVzT3JNYW5pZmVzdFVybDogYXJncy5yZW1vdGVzT3JNYW5pZmVzdFVybCB9IDoge30sCiAgICByZWxCdW5kbGVQYXRoOiBhcmdzLnJlbEJ1bmRsZVBhdGgKICB9KTsKICBhd2FpdCBpbXBvcnQoYXJncy5lbnRyeSk7Cn0pKCk7Cg==";
|
|
1
|
+
export declare const fstart = "Ly8gbGlicy9uYXRpdmUtZmVkZXJhdGlvbi1ub2RlL3NyYy9saWIvbm9kZS9pbml0LW5vZGUtZmVkZXJhdGlvbi50cwppbXBvcnQgeyByZWdpc3RlciB9IGZyb20gIm5vZGU6bW9kdWxlIjsKaW1wb3J0IHsgcGF0aFRvRmlsZVVSTCB9IGZyb20gIm5vZGU6dXJsIjsKaW1wb3J0ICogYXMgZnMyIGZyb20gIm5vZGU6ZnMvcHJvbWlzZXMiOwppbXBvcnQgKiBhcyBwYXRoMiBmcm9tICJub2RlOnBhdGgiOwoKLy8gbGlicy9uYXRpdmUtZmVkZXJhdGlvbi1ydW50aW1lL3NyYy9saWIvbW9kZWwvZ2xvYmFsLWNhY2hlLnRzCnZhciBuZk5hbWVzcGFjZSA9ICJfX05BVElWRV9GRURFUkFUSU9OX18iOwp2YXIgZ2xvYmFsMiA9IGdsb2JhbFRoaXM7Cmdsb2JhbDJbbmZOYW1lc3BhY2VdID8/PSB7CiAgZXh0ZXJuYWxzOiAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpLAogIHJlbW90ZU5hbWVzVG9SZW1vdGU6IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCksCiAgYmFzZVVybFRvUmVtb3RlTmFtZXM6IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCkKfTsKdmFyIGdsb2JhbENhY2hlID0gZ2xvYmFsMltuZk5hbWVzcGFjZV07CgovLyBsaWJzL25hdGl2ZS1mZWRlcmF0aW9uLXJ1bnRpbWUvc3JjL2xpYi9tb2RlbC9leHRlcm5hbHMudHMKdmFyIGV4dGVybmFscyA9IGdsb2JhbENhY2hlLmV4dGVybmFsczsKZnVuY3Rpb24gZ2V0RXh0ZXJuYWxLZXkoc2hhcmVkKSB7CiAgcmV0dXJuIGAke3NoYXJlZC5wYWNrYWdlTmFtZX1AJHtzaGFyZWQudmVyc2lvbn1gOwp9CmZ1bmN0aW9uIGdldEV4dGVybmFsVXJsKHNoYXJlZCkgewogIGNvbnN0IHBhY2thZ2VLZXkgPSBnZXRFeHRlcm5hbEtleShzaGFyZWQpOwogIHJldHVybiBleHRlcm5hbHMuZ2V0KHBhY2thZ2VLZXkpOwp9CmZ1bmN0aW9uIHNldEV4dGVybmFsVXJsKHNoYXJlZCwgdXJsMikgewogIGNvbnN0IHBhY2thZ2VLZXkgPSBnZXRFeHRlcm5hbEtleShzaGFyZWQpOwogIGV4dGVybmFscy5zZXQocGFja2FnZUtleSwgdXJsMik7Cn0KCi8vIGxpYnMvbmF0aXZlLWZlZGVyYXRpb24tcnVudGltZS9zcmMvbGliL21vZGVsL2ltcG9ydC1tYXAudHMKZnVuY3Rpb24gbWVyZ2VJbXBvcnRNYXBzKG1hcDEsIG1hcDIpIHsKICByZXR1cm4gewogICAgaW1wb3J0czogeyAuLi5tYXAxLmltcG9ydHMsIC4uLm1hcDIuaW1wb3J0cyB9LAogICAgc2NvcGVzOiB7IC4uLm1hcDEuc2NvcGVzLCAuLi5tYXAyLnNjb3BlcyB9CiAgfTsKfQoKLy8gbGlicy9uYXRpdmUtZmVkZXJhdGlvbi1ydW50aW1lL3NyYy9saWIvbW9kZWwvcmVtb3Rlcy50cwp2YXIgcmVtb3RlTmFtZXNUb1JlbW90ZSA9IGdsb2JhbENhY2hlLnJlbW90ZU5hbWVzVG9SZW1vdGU7CnZhciBiYXNlVXJsVG9SZW1vdGVOYW1lcyA9IGdsb2JhbENhY2hlLmJhc2VVcmxUb1JlbW90ZU5hbWVzOwpmdW5jdGlvbiBhZGRSZW1vdGUocmVtb3RlTmFtZSwgcmVtb3RlKSB7CiAgcmVtb3RlTmFtZXNUb1JlbW90ZS5zZXQocmVtb3RlTmFtZSwgcmVtb3RlKTsKICBiYXNlVXJsVG9SZW1vdGVOYW1lcy5zZXQocmVtb3RlLmJhc2VVcmwsIHJlbW90ZU5hbWUpOwp9CgovLyBsaWJzL25hdGl2ZS1mZWRlcmF0aW9uLXJ1bnRpbWUvc3JjL2xpYi91dGlscy9wYXRoLXV0aWxzLnRzCmZ1bmN0aW9uIGdldERpcmVjdG9yeSh1cmwyKSB7CiAgY29uc3QgcGFydHMgPSB1cmwyLnNwbGl0KCIvIik7CiAgcGFydHMucG9wKCk7CiAgcmV0dXJuIHBhcnRzLmpvaW4oIi8iKTsKfQpmdW5jdGlvbiBqb2luUGF0aHMocGF0aDEsIHBhdGgyMikgewogIHdoaWxlIChwYXRoMS5lbmRzV2l0aCgiLyIpKSB7CiAgICBwYXRoMSA9IHBhdGgxLnN1YnN0cmluZygwLCBwYXRoMS5sZW5ndGggLSAxKTsKICB9CiAgaWYgKHBhdGgyMi5zdGFydHNXaXRoKCIuLyIpKSB7CiAgICBwYXRoMjIgPSBwYXRoMjIuc3Vic3RyaW5nKDIsIHBhdGgyMi5sZW5ndGgpOwogIH0KICByZXR1cm4gYCR7cGF0aDF9LyR7cGF0aDIyfWA7Cn0KCi8vIGxpYnMvbmF0aXZlLWZlZGVyYXRpb24tcnVudGltZS9zcmMvbGliL3dhdGNoLWZlZGVyYXRpb24tYnVpbGQudHMKZnVuY3Rpb24gd2F0Y2hGZWRlcmF0aW9uQnVpbGRDb21wbGV0aW9uKGVuZHBvaW50KSB7CiAgY29uc3QgZXZlbnRTb3VyY2UgPSBuZXcgRXZlbnRTb3VyY2UoZW5kcG9pbnQpOwogIGV2ZW50U291cmNlLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2ZW50KSB7CiAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShldmVudC5kYXRhKTsKICAgIGlmIChkYXRhLnR5cGUgPT09ICJmZWRlcmF0aW9uLXJlYnVpbGQtY29tcGxldGUiIC8qIENPTVBMRVRFRCAqLykgewogICAgICBjb25zb2xlLmxvZygiW0ZlZGVyYXRpb25dIFJlYnVpbGQgY29tcGxldGVkLCByZWxvYWRpbmcuLi4iKTsKICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpOwogICAgfQogIH07CiAgZXZlbnRTb3VyY2Uub25lcnJvciA9IGZ1bmN0aW9uKGV2ZW50KSB7CiAgICBjb25zb2xlLndhcm4oIltGZWRlcmF0aW9uXSBTU0UgY29ubmVjdGlvbiBlcnJvcjoiLCBldmVudCk7CiAgfTsKfQoKLy8gbGlicy9uYXRpdmUtZmVkZXJhdGlvbi1ydW50aW1lL3NyYy9saWIvaW5pdC1mZWRlcmF0aW9uLnRzCmFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NSZW1vdGVJbmZvcyhyZW1vdGVzLCBvcHRpb25zID0geyB0aHJvd0lmUmVtb3RlTm90Rm91bmQ6IGZhbHNlIH0pIHsKICBjb25zdCBwcm9jZXNzUmVtb3RlSW5mb1Byb21pc2VzID0gT2JqZWN0LmtleXMocmVtb3RlcykubWFwKAogICAgYXN5bmMgKHJlbW90ZU5hbWUpID0+IHsKICAgICAgdHJ5IHsKICAgICAgICBsZXQgdXJsMiA9IHJlbW90ZXNbcmVtb3RlTmFtZV07CiAgICAgICAgaWYgKG9wdGlvbnMuY2FjaGVUYWcpIHsKICAgICAgICAgIGNvbnN0IGFkZEFwcGVuZCA9IHJlbW90ZXNbcmVtb3RlTmFtZV0uaW5jbHVkZXMoIj8iKSA/ICImIiA6ICI/IjsKICAgICAgICAgIHVybDIgKz0gYCR7YWRkQXBwZW5kfXQ9JHtvcHRpb25zLmNhY2hlVGFnfWA7CiAgICAgICAgfQogICAgICAgIHJldHVybiBhd2FpdCBwcm9jZXNzUmVtb3RlSW5mbyh1cmwyLCByZW1vdGVOYW1lKTsKICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgIGNvbnN0IGVycm9yID0gYEVycm9yIGxvYWRpbmcgcmVtb3RlIGVudHJ5IGZvciAke3JlbW90ZU5hbWV9IGZyb20gZmlsZSAke3JlbW90ZXNbcmVtb3RlTmFtZV19YDsKICAgICAgICBpZiAob3B0aW9ucy50aHJvd0lmUmVtb3RlTm90Rm91bmQpIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvcik7CiAgICAgICAgfQogICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICB9CiAgKTsKICBjb25zdCByZW1vdGVJbXBvcnRNYXBzID0gYXdhaXQgUHJvbWlzZS5hbGwocHJvY2Vzc1JlbW90ZUluZm9Qcm9taXNlcyk7CiAgY29uc3QgaW1wb3J0TWFwID0gcmVtb3RlSW1wb3J0TWFwcy5yZWR1Y2UoCiAgICAoYWNjLCByZW1vdGVJbXBvcnRNYXApID0+IHJlbW90ZUltcG9ydE1hcCA/IG1lcmdlSW1wb3J0TWFwcyhhY2MsIHJlbW90ZUltcG9ydE1hcCkgOiBhY2MsCiAgICB7IGltcG9ydHM6IHt9LCBzY29wZXM6IHt9IH0KICApOwogIHJldHVybiBpbXBvcnRNYXA7Cn0KYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1JlbW90ZUluZm8oZmVkZXJhdGlvbkluZm9VcmwsIHJlbW90ZU5hbWUpIHsKICBjb25zdCBiYXNlVXJsID0gZ2V0RGlyZWN0b3J5KGZlZGVyYXRpb25JbmZvVXJsKTsKICBjb25zdCByZW1vdGVJbmZvID0gYXdhaXQgbG9hZEZlZGVyYXRpb25JbmZvKGZlZGVyYXRpb25JbmZvVXJsKTsKICBpZiAoIXJlbW90ZU5hbWUpIHsKICAgIHJlbW90ZU5hbWUgPSByZW1vdGVJbmZvLm5hbWU7CiAgfQogIGlmIChyZW1vdGVJbmZvLmJ1aWxkTm90aWZpY2F0aW9uc0VuZHBvaW50KSB7CiAgICB3YXRjaEZlZGVyYXRpb25CdWlsZENvbXBsZXRpb24oCiAgICAgIGJhc2VVcmwgKyByZW1vdGVJbmZvLmJ1aWxkTm90aWZpY2F0aW9uc0VuZHBvaW50CiAgICApOwogIH0KICBjb25zdCBpbXBvcnRNYXAgPSBjcmVhdGVSZW1vdGVJbXBvcnRNYXAocmVtb3RlSW5mbywgcmVtb3RlTmFtZSwgYmFzZVVybCk7CiAgYWRkUmVtb3RlKHJlbW90ZU5hbWUsIHsgLi4ucmVtb3RlSW5mbywgYmFzZVVybCB9KTsKICByZXR1cm4gaW1wb3J0TWFwOwp9CmZ1bmN0aW9uIGNyZWF0ZVJlbW90ZUltcG9ydE1hcChyZW1vdGVJbmZvLCByZW1vdGVOYW1lLCBiYXNlVXJsKSB7CiAgY29uc3QgaW1wb3J0cyA9IHByb2Nlc3NFeHBvc2VkKHJlbW90ZUluZm8sIHJlbW90ZU5hbWUsIGJhc2VVcmwpOwogIGNvbnN0IHNjb3BlcyA9IHByb2Nlc3NSZW1vdGVJbXBvcnRzKHJlbW90ZUluZm8sIGJhc2VVcmwpOwogIHJldHVybiB7IGltcG9ydHMsIHNjb3BlcyB9Owp9CmFzeW5jIGZ1bmN0aW9uIGxvYWRGZWRlcmF0aW9uSW5mbyh1cmwyKSB7CiAgY29uc3QgaW5mbyA9IGF3YWl0IGZldGNoKHVybDIpLnRoZW4oKHIpID0+IHIuanNvbigpKTsKICByZXR1cm4gaW5mbzsKfQpmdW5jdGlvbiBwcm9jZXNzUmVtb3RlSW1wb3J0cyhyZW1vdGVJbmZvLCBiYXNlVXJsKSB7CiAgY29uc3Qgc2NvcGVzID0ge307CiAgY29uc3Qgc2NvcGVkSW1wb3J0cyA9IHt9OwogIGZvciAoY29uc3Qgc2hhcmVkIG9mIHJlbW90ZUluZm8uc2hhcmVkKSB7CiAgICBjb25zdCBvdXRGaWxlTmFtZSA9IGdldEV4dGVybmFsVXJsKHNoYXJlZCkgPz8gam9pblBhdGhzKGJhc2VVcmwsIHNoYXJlZC5vdXRGaWxlTmFtZSk7CiAgICBzZXRFeHRlcm5hbFVybChzaGFyZWQsIG91dEZpbGVOYW1lKTsKICAgIHNjb3BlZEltcG9ydHNbc2hhcmVkLnBhY2thZ2VOYW1lXSA9IG91dEZpbGVOYW1lOwogIH0KICBzY29wZXNbYmFzZVVybCArICIvIl0gPSBzY29wZWRJbXBvcnRzOwogIHJldHVybiBzY29wZXM7Cn0KZnVuY3Rpb24gcHJvY2Vzc0V4cG9zZWQocmVtb3RlSW5mbywgcmVtb3RlTmFtZSwgYmFzZVVybCkgewogIGNvbnN0IGltcG9ydHMgPSB7fTsKICBmb3IgKGNvbnN0IGV4cG9zZWQgb2YgcmVtb3RlSW5mby5leHBvc2VzKSB7CiAgICBjb25zdCBrZXkgPSBqb2luUGF0aHMocmVtb3RlTmFtZSwgZXhwb3NlZC5rZXkpOwogICAgY29uc3QgdmFsdWUgPSBqb2luUGF0aHMoYmFzZVVybCwgZXhwb3NlZC5vdXRGaWxlTmFtZSk7CiAgICBpbXBvcnRzW2tleV0gPSB2YWx1ZTsKICB9CiAgcmV0dXJuIGltcG9ydHM7Cn0KYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc0hvc3RJbmZvKGhvc3RJbmZvLCByZWxCdW5kbGVzUGF0aCA9ICIuLyIpIHsKICBjb25zdCBpbXBvcnRzID0gaG9zdEluZm8uc2hhcmVkLnJlZHVjZSgKICAgIChhY2MsIGN1cikgPT4gKHsKICAgICAgLi4uYWNjLAogICAgICBbY3VyLnBhY2thZ2VOYW1lXTogcmVsQnVuZGxlc1BhdGggKyBjdXIub3V0RmlsZU5hbWUKICAgIH0pLAogICAge30KICApOwogIGZvciAoY29uc3Qgc2hhcmVkIG9mIGhvc3RJbmZvLnNoYXJlZCkgewogICAgc2V0RXh0ZXJuYWxVcmwoc2hhcmVkLCByZWxCdW5kbGVzUGF0aCArIHNoYXJlZC5vdXRGaWxlTmFtZSk7CiAgfQogIHJldHVybiB7IGltcG9ydHMsIHNjb3Blczoge30gfTsKfQoKLy8gbGlicy9uYXRpdmUtZmVkZXJhdGlvbi1ub2RlL3NyYy9saWIvdXRpbHMvaW1wb3J0LW1hcC1sb2FkZXIuanMKaW1wb3J0IHBhdGggZnJvbSAicGF0aCI7CmltcG9ydCB1cmwgZnJvbSAidXJsIjsKaW1wb3J0IHsgcHJvbWlzZXMgYXMgZnMgfSBmcm9tICJmcyI7CnZhciBJTVBPUlRfTUFQX0ZJTEVfTkFNRSA9ICJub2RlLmltcG9ydG1hcCI7CnZhciBiYXNlVVJMID0gdXJsLnBhdGhUb0ZpbGVVUkwocHJvY2Vzcy5jd2QoKSkgKyBwYXRoLnNlcDsKZnVuY3Rpb24gcmVzb2x2ZUFuZENvbXBvc2VJbXBvcnRNYXAocGFyc2VkKSB7CiAgaWYgKCFpc1BsYWluT2JqZWN0KHBhcnNlZCkpIHsKICAgIHRocm93IEVycm9yKGBJbnZhbGlkIGltcG9ydCBtYXAgLSB0b3AgbGV2ZWwgbXVzdCBiZSBhbiBvYmplY3RgKTsKICB9CiAgbGV0IHNvcnRlZEFuZE5vcm1hbGl6ZWRJbXBvcnRzID0ge307CiAgaWYgKHBhcnNlZC5oYXNPd25Qcm9wZXJ0eSgiaW1wb3J0cyIpKSB7CiAgICBpZiAoIWlzUGxhaW5PYmplY3QocGFyc2VkLmltcG9ydHMpKSB7CiAgICAgIHRocm93IEVycm9yKGBJbnZhbGlkIGltcG9ydCBtYXAgLSAiaW1wb3J0cyIgcHJvcGVydHkgbXVzdCBiZSBhbiBvYmplY3RgKTsKICAgIH0KICAgIHNvcnRlZEFuZE5vcm1hbGl6ZWRJbXBvcnRzID0gc29ydEFuZE5vcm1hbGl6ZVNwZWNpZmllck1hcCgKICAgICAgcGFyc2VkLmltcG9ydHMsCiAgICAgIGJhc2VVUkwKICAgICk7CiAgfQogIGxldCBzb3J0ZWRBbmROb3JtYWxpemVkU2NvcGVzID0ge307CiAgaWYgKHBhcnNlZC5oYXNPd25Qcm9wZXJ0eSgic2NvcGVzIikpIHsKICAgIGlmICghaXNQbGFpbk9iamVjdChwYXJzZWQuc2NvcGVzKSkgewogICAgICB0aHJvdyBFcnJvcihgSW52YWxpZCBpbXBvcnQgbWFwIC0gInNjb3BlcyIgcHJvcGVydHkgbXVzdCBiZSBhbiBvYmplY3RgKTsKICAgIH0KICAgIHNvcnRlZEFuZE5vcm1hbGl6ZWRTY29wZXMgPSBzb3J0QW5kTm9ybWFsaXplU2NvcGVzKHBhcnNlZC5zY29wZXMsIGJhc2VVUkwpOwogIH0KICBjb25zdCBpbnZhbGlkS2V5cyA9IE9iamVjdC5rZXlzKHBhcnNlZCkuZmlsdGVyKAogICAgKGtleSkgPT4ga2V5ICE9PSAiaW1wb3J0cyIgJiYga2V5ICE9PSAic2NvcGVzIgogICk7CiAgaWYgKGludmFsaWRLZXlzLmxlbmd0aCA+IDApIHsKICAgIGNvbnNvbGUud2FybigKICAgICAgYEludmFsaWQgdG9wLWxldmVsIGtleSR7aW52YWxpZEtleXMubGVuZ3RoID4gMCA/ICJzIiA6ICIifSBpbiBpbXBvcnQgbWFwIC0gJHtpbnZhbGlkS2V5cy5qb2luKCIsICIpfWAKICAgICk7CiAgfQogIHJldHVybiB7CiAgICBpbXBvcnRzOiBzb3J0ZWRBbmROb3JtYWxpemVkSW1wb3J0cywKICAgIHNjb3Blczogc29ydGVkQW5kTm9ybWFsaXplZFNjb3BlcwogIH07Cn0KZnVuY3Rpb24gc29ydEFuZE5vcm1hbGl6ZVNwZWNpZmllck1hcChtYXAsIGJhc2VVUkwyKSB7CiAgY29uc3Qgbm9ybWFsaXplZCA9IHt9OwogIGZvciAobGV0IHNwZWNpZmllcktleSBpbiBtYXApIHsKICAgIGNvbnN0IHZhbHVlID0gbWFwW3NwZWNpZmllcktleV07CiAgICBjb25zdCBub3JtYWxpemVkU3BlY2lmaWVyS2V5ID0gbm9ybWFsaXplU3BlY2lmaWVyS2V5KHNwZWNpZmllcktleSwgYmFzZVVSTDIpOwogICAgaWYgKG5vcm1hbGl6ZWRTcGVjaWZpZXJLZXkgPT09IG51bGwpIHsKICAgICAgY29udGludWU7CiAgICB9CiAgICBsZXQgYWRkcmVzc1VSTCA9IHBhcnNlVVJMTGlrZVNwZWNpZmllcih2YWx1ZSwgYmFzZVVSTDIpOwogICAgaWYgKGFkZHJlc3NVUkwgPT09IG51bGwpIHsKICAgICAgY29uc29sZS53YXJuKAogICAgICAgIGBJbnZhbGlkIFVSTCBhZGRyZXNzIGZvciBpbXBvcnQgbWFwIHNwZWNpZmllciAnJHtzcGVjaWZpZXJLZXl9J2AKICAgICAgKTsKICAgICAgbm9ybWFsaXplZFtub3JtYWxpemVkU3BlY2lmaWVyS2V5XSA9IG51bGw7CiAgICAgIGNvbnRpbnVlOwogICAgfQogICAgaWYgKHNwZWNpZmllcktleS5lbmRzV2l0aCgiLyIpICYmICFhZGRyZXNzVVJMLmVuZHNXaXRoKCIvIikpIHsKICAgICAgY29uc29sZS53YXJuKAogICAgICAgIGBJbnZhbGlkIFVSTCBhZGRyZXNzIGZvciBpbXBvcnQgbWFwIHNwZWNpZmllciAnJHtzcGVjaWZpZXJLZXl9JyAtIHNpbmNlIHRoZSBzcGVjaWZpZXIgZW5kcyBpbiBzbGFzaCwgc28gbXVzdCB0aGUgYWRkcmVzc2AKICAgICAgKTsKICAgICAgbm9ybWFsaXplZFtub3JtYWxpemVkU3BlY2lmaWVyS2V5XSA9IG51bGw7CiAgICAgIGNvbnRpbnVlOwogICAgfQogICAgbm9ybWFsaXplZFtub3JtYWxpemVkU3BlY2lmaWVyS2V5XSA9IGFkZHJlc3NVUkw7CiAgfQogIHJldHVybiBub3JtYWxpemVkOwp9CmZ1bmN0aW9uIG5vcm1hbGl6ZVNwZWNpZmllcktleShrZXkpIHsKICBpZiAoa2V5ID09PSAiIikgewogICAgY29uc29sZS53YXJuKGBTcGVjaWZpZXIga2V5cyBpbiBpbXBvcnQgbWFwcyBtYXkgbm90IGJlIHRoZSBlbXB0eSBzdHJpbmdgKTsKICAgIHJldHVybiBudWxsOwogIH0KICByZXR1cm4gcGFyc2VVUkxMaWtlU3BlY2lmaWVyKGtleSwgYmFzZVVSTCkgfHwga2V5Owp9CmZ1bmN0aW9uIHBhcnNlVVJMTGlrZVNwZWNpZmllcihzcGVjaWZpZXIsIGJhc2VVUkwyKSB7CiAgY29uc3QgdXNlQmFzZVVybEFzUGFyZW50ID0gc3BlY2lmaWVyLnN0YXJ0c1dpdGgoIi8iKSB8fCBzcGVjaWZpZXIuc3RhcnRzV2l0aCgiLi8iKSB8fCBzcGVjaWZpZXIuc3RhcnRzV2l0aCgiLi4vIik7CiAgdHJ5IHsKICAgIHJldHVybiBuZXcgVVJMKHNwZWNpZmllciwgdXNlQmFzZVVybEFzUGFyZW50ID8gYmFzZVVSTDIgOiB2b2lkIDApLmhyZWY7CiAgfSBjYXRjaCB7CiAgICByZXR1cm4gbnVsbDsKICB9Cn0KZnVuY3Rpb24gc29ydEFuZE5vcm1hbGl6ZVNjb3BlcyhtYXAsIGJhc2VVUkwyKSB7CiAgbGV0IG5vcm1hbGl6ZWQgPSB7fTsKICBmb3IgKGxldCBzY29wZVByZWZpeCBpbiBtYXApIHsKICAgIGNvbnN0IHBvdGVudGlhbFNwZWNpZmllck1hcCA9IG1hcFtzY29wZVByZWZpeF07CiAgICBpZiAoIWlzUGxhaW5PYmplY3QocG90ZW50aWFsU3BlY2lmaWVyTWFwKSkgewogICAgICB0aHJvdyBUeXBlRXJyb3IoCiAgICAgICAgYFRoZSB2YWx1ZSBvZiBzY29wZSAke3Njb3BlUHJlZml4fSBtdXN0IGJlIGEgSlNPTiBvYmplY3RgCiAgICAgICk7CiAgICB9CiAgICBsZXQgc2NvcGVQcmVmaXhVUkw7CiAgICB0cnkgewogICAgICBzY29wZVByZWZpeFVSTCA9IG5ldyBVUkwoc2NvcGVQcmVmaXgsIGJhc2VVUkwyKS5ocmVmOwogICAgfSBjYXRjaCB7CiAgICAgIGNvbnNvbGUud2FybigKICAgICAgICBgU2NvcGUgcHJlZml4IFVSTCAnJHtzY29wZVByZWZpeH0nIHdhcyBub3QgcGFyc2VhYmxlIGluIGltcG9ydCBtYXBgCiAgICAgICk7CiAgICAgIGNvbnRpbnVlOwogICAgfQogICAgbm9ybWFsaXplZFtzY29wZVByZWZpeFVSTF0gPSBzb3J0QW5kTm9ybWFsaXplU3BlY2lmaWVyTWFwKAogICAgICBwb3RlbnRpYWxTcGVjaWZpZXJNYXAsCiAgICAgIGJhc2VVUkwyCiAgICApOwogIH0KICByZXR1cm4gbm9ybWFsaXplZDsKfQpmdW5jdGlvbiBpc1BsYWluT2JqZWN0KG9iaikgewogIHJldHVybiBvYmogPT09IE9iamVjdChvYmopICYmICFBcnJheS5pc0FycmF5KG9iaik7Cn0KdmFyIGltcG9ydE1hcFByb21pc2UgPSBnZXRJbXBvcnRNYXBQcm9taXNlKCk7CmFzeW5jIGZ1bmN0aW9uIGdldEltcG9ydE1hcFByb21pc2UoKSB7CiAgY29uc3QgcmVsYXRpdmVQYXRoID0gcHJvY2Vzcy5lbnYuSU1QT1JUX01BUF9QQVRIIHx8IElNUE9SVF9NQVBfRklMRV9OQU1FOwogIGNvbnN0IGltcG9ydE1hcFBhdGggPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgcmVsYXRpdmVQYXRoKTsKICBsZXQgc3RyOwogIHRyeSB7CiAgICBzdHIgPSBhd2FpdCBmcy5yZWFkRmlsZShpbXBvcnRNYXBQYXRoKTsKICB9IGNhdGNoIChlcnIpIHsKICAgIHJldHVybiBlbXB0eU1hcCgpOwogIH0KICBsZXQganNvbjsKICB0cnkgewogICAganNvbiA9IGF3YWl0IEpTT04ucGFyc2Uoc3RyKTsKICB9IGNhdGNoIChlcnIpIHsKICAgIHRocm93IEVycm9yKAogICAgICBgSW1wb3J0IG1hcCBhdCAke2ltcG9ydE1hcFBhdGh9IGNvbnRhaW5zIGludmFsaWQganNvbjogJHtlcnIubWVzc2FnZX1gCiAgICApOwogIH0KICByZXR1cm4gcmVzb2x2ZUFuZENvbXBvc2VJbXBvcnRNYXAoanNvbik7Cn0KZ2xvYmFsLm5vZGVMb2FkZXIgPSBnbG9iYWwubm9kZUxvYWRlciB8fCB7fTsKZ2xvYmFsLm5vZGVMb2FkZXIuc2V0SW1wb3J0TWFwUHJvbWlzZSA9IGZ1bmN0aW9uIHNldEltcG9ydE1hcFByb21pc2UocHJvbWlzZSkgewogIGltcG9ydE1hcFByb21pc2UgPSBwcm9taXNlLnRoZW4oKG1hcCkgPT4gewogICAgcmV0dXJuIHJlc29sdmVBbmRDb21wb3NlSW1wb3J0TWFwKG1hcCk7CiAgfSk7Cn07CmZ1bmN0aW9uIGVtcHR5TWFwKCkgewogIHJldHVybiB7IGltcG9ydHM6IHt9LCBzY29wZXM6IHt9IH07Cn0KCi8vIGxpYnMvbmF0aXZlLWZlZGVyYXRpb24tbm9kZS9zcmMvbGliL3V0aWxzL2xvYWRlci1hcy1kYXRhLXVybC5qcwp2YXIgcmVzb2x2ZXIgPSAiYVcxd2IzSjBJSEJoZEdnZ1puSnZiU0FuY0dGMGFDYzdDbWx0Y0c5eWRDQjFjbXdnWm5KdmJTQW5kWEpzSnpzS2FXMXdiM0owSUhzZ2NISnZiV2x6WlhNZ1lYTWdabk1nZlNCbWNtOXRJQ2RtY3ljN0NncGxlSEJ2Y25RZ1kyOXVjM1FnU1UxUVQxSlVYMDFCVUY5R1NVeEZYMDVCVFVVZ1BTQW5ibTlrWlM1cGJYQnZjblJ0WVhBbk93b0tZMjl1YzNRZ1ltRnpaVlZTVENBOUlIVnliQzV3WVhSb1ZHOUdhV3hsVlZKTUtIQnliMk5sYzNNdVkzZGtLQ2twSUNzZ2NHRjBhQzV6WlhBN0Nnb3ZMeUJvZEhSd2N6b3ZMM2RwWTJjdVoybDBhSFZpTG1sdkwybHRjRzl5ZEMxdFlYQnpMeU51WlhjdGNtVnpiMngyWlMxaGJHZHZjbWwwYUcwS1pYaHdiM0owSUdaMWJtTjBhVzl1SUhKbGMyOXNkbVZUY0dWamFXWnBaWElvYVcxd2IzSjBUV0Z3TENCemNHVmphV1pwWlhJc0lIQmhjbVZ1ZEZWU1RDa2dld29nSUd4bGRDQmpkWEp5Wlc1MFFtRnpaVlZTVERzS0lDQnBaaUFvY0dGeVpXNTBWVkpNS1NCN0NpQWdJQ0JqYjI1emRDQnNZWE4wVTJ4aGMyaEpibVJsZUNBOUlIQmhjbVZ1ZEZWU1RDNXNZWE4wU1c1a1pYaFBaaWh3WVhSb0xuTmxjQ2s3Q2lBZ0lDQmpkWEp5Wlc1MFFtRnpaVlZTVENBOUlIQmhjbVZ1ZEZWU1RDNXpiR2xqWlNnd0xDQnNZWE4wVTJ4aGMyaEpibVJsZUNBcklERXBPd29nSUgwZ1pXeHpaU0I3Q2lBZ0lDQmpkWEp5Wlc1MFFtRnpaVlZTVENBOUlHSmhjMlZWVWt3N0NpQWdmUW9nSUdOdmJuTjBJRzV2Y20xaGJHbDZaV1JUY0dWamFXWnBaWElnUFFvZ0lDQWdjR0Z5YzJWVlVreE1hV3RsVTNCbFkybG1hV1Z5S0hOd1pXTnBabWxsY2l3Z1kzVnljbVZ1ZEVKaGMyVlZVa3dwSUh4OElITndaV05wWm1sbGNqc0tJQ0JtYjNJZ0tHeGxkQ0J6WTI5d1pWQnlaV1pwZUNCcGJpQnBiWEJ2Y25STllYQXVjMk52Y0dWektTQjdDaUFnSUNCcFppQW9DaUFnSUNBZ0lITmpiM0JsVUhKbFptbDRJRDA5UFNCamRYSnlaVzUwUW1GelpWVlNUQ0I4ZkFvZ0lDQWdJQ0FvYzJOdmNHVlFjbVZtYVhndVpXNWtjMWRwZEdnb0p5OG5LU0FtSmlCamRYSnlaVzUwUW1GelpWVlNUQzV6ZEdGeWRITlhhWFJvS0hOamIzQmxVSEpsWm1sNEtTa0tJQ0FnSUNrZ2V3b2dJQ0FnSUNCamIyNXpkQ0J6WTI5d1pVbHRjRzl5ZEhOTllYUmphQ0E5SUhKbGMyOXNkbVZKYlhCdmNuUnpUV0YwWTJnb0NpQWdJQ0FnSUNBZ2JtOXliV0ZzYVhwbFpGTndaV05wWm1sbGNpd0tJQ0FnSUNBZ0lDQnBiWEJ2Y25STllYQXVjMk52Y0dWelczTmpiM0JsVUhKbFptbDRYUW9nSUNBZ0lDQXBPd29nSUNBZ0lDQnBaaUFvYzJOdmNHVkpiWEJ2Y25SelRXRjBZMmdwSUhzS0lDQWdJQ0FnSUNCeVpYUjFjbTRnYzJOdmNHVkpiWEJ2Y25SelRXRjBZMmc3Q2lBZ0lDQWdJSDBLSUNBZ0lIMGdaV3h6WlNCN0NpQWdJQ0FnSUdOdmJuTjBJSFJ2Y0V4bGRtVnNTVzF3YjNKMGMwMWhkR05vSUQwZ2NtVnpiMngyWlVsdGNHOXlkSE5OWVhSamFDZ0tJQ0FnSUNBZ0lDQnViM0p0WVd4cGVtVmtVM0JsWTJsbWFXVnlMQW9nSUNBZ0lDQWdJR2x0Y0c5eWRFMWhjQzVwYlhCdmNuUnpDaUFnSUNBZ0lDazdDaUFnSUNBZ0lHbG1JQ2gwYjNCTVpYWmxiRWx0Y0c5eWRITk5ZWFJqYUNrZ2V3b2dJQ0FnSUNBZ0lISmxkSFZ5YmlCMGIzQk1aWFpsYkVsdGNHOXlkSE5OWVhSamFEc0tJQ0FnSUNBZ2ZRb2dJQ0FnZlFvZ0lIMEtDaUFnY21WMGRYSnVJSEpsYzI5c2RtVkpiWEJ2Y25SelRXRjBZMmdvYm05eWJXRnNhWHBsWkZOd1pXTnBabWxsY2l3Z2FXMXdiM0owVFdGd0xtbHRjRzl5ZEhNcE93cDlDZ292THlCb2RIUndjem92TDNkcFkyY3VaMmwwYUhWaUxtbHZMMmx0Y0c5eWRDMXRZWEJ6THlOeVpYTnZiSFpsTFdGdUxXbHRjRzl5ZEhNdGJXRjBZMmdLWm5WdVkzUnBiMjRnY21WemIyeDJaVWx0Y0c5eWRITk5ZWFJqYUNodWIzSnRZV3hwZW1Wa1UzQmxZMmxtYVdWeUxDQnpjR1ZqYVdacFpYSk5ZWEFwSUhzS0lDQm1iM0lnS0d4bGRDQnpjR1ZqYVdacFpYSkxaWGtnYVc0Z2MzQmxZMmxtYVdWeVRXRndLU0I3Q2lBZ0lDQmpiMjV6ZENCeVpYTnZiSFYwYVc5dVVtVnpkV3gwSUQwZ2MzQmxZMmxtYVdWeVRXRndXM053WldOcFptbGxja3RsZVYwN0Nnb2dJQ0FnYVdZZ0tITndaV05wWm1sbGNrdGxlU0E5UFQwZ2JtOXliV0ZzYVhwbFpGTndaV05wWm1sbGNpa2dld29nSUNBZ0lDQnBaaUFvY21WemIyeDFkR2x2YmxKbGMzVnNkQ0E5UFQwZ2JuVnNiQ2tnZXdvZ0lDQWdJQ0FnSUhSb2NtOTNJRlI1Y0dWRmNuSnZjaWdLSUNBZ0lDQWdJQ0FnSUdCVWFHVWdhVzF3YjNKMElHMWhjQ0J5WlhOdmJIVjBhVzl1SUc5bUlDUjdjM0JsWTJsbWFXVnlTMlY1ZlNCbVlXbHNaV1FnWkhWbElIUnZJR0VnYm5Wc2JDQmxiblJ5ZVdBS0lDQWdJQ0FnSUNBcE93b2dJQ0FnSUNCOUNpQWdJQ0FnSUhKbGRIVnliaUJ5WlhOdmJIVjBhVzl1VW1WemRXeDBPd29nSUNBZ2ZTQmxiSE5sSUdsbUlDZ0tJQ0FnSUNBZ2MzQmxZMmxtYVdWeVMyVjVMbVZ1WkhOWGFYUm9LQ2N2SnlrZ0ppWUtJQ0FnSUNBZ2JtOXliV0ZzYVhwbFpGTndaV05wWm1sbGNpNXpkR0Z5ZEhOWGFYUm9LSE53WldOcFptbGxja3RsZVNrS0lDQWdJQ2tnZXdvZ0lDQWdJQ0JwWmlBb2NtVnpiMngxZEdsdmJsSmxjM1ZzZENBOVBUMGdiblZzYkNrZ2V3b2dJQ0FnSUNBZ0lIUm9jbTkzSUZSNWNHVkZjbkp2Y2lnS0lDQWdJQ0FnSUNBZ0lHQlVhR1VnYVcxd2IzSjBJRzFoY0NCeVpYTnZiSFYwYVc5dUlHOW1JQ1I3YzNCbFkybG1hV1Z5UzJWNWZTQm1ZV2xzWldRZ1pIVmxJSFJ2SUdFZ2JuVnNiQ0JsYm5SeWVXQUtJQ0FnSUNBZ0lDQXBPd29nSUNBZ0lDQjlDaUFnSUNBZ0lHTnZibk4wSUdGbWRHVnlVSEpsWm1sNElEMGdibTl5YldGc2FYcGxaRk53WldOcFptbGxjaTV6YkdsalpTaHpjR1ZqYVdacFpYSkxaWGt1YkdWdVozUm9LVHNLSUNBZ0lDQWdkSEo1SUhzS0lDQWdJQ0FnSUNCeVpYUjFjbTRnYm1WM0lGVlNUQ2hoWm5SbGNsQnlaV1pwZUN3Z2NtVnpiMngxZEdsdmJsSmxjM1ZzZENrdWFISmxaanNLSUNBZ0lDQWdmU0JqWVhSamFDQjdDaUFnSUNBZ0lDQWdkR2h5YjNjZ1ZIbHdaVVZ5Y205eUtBb2dJQ0FnSUNBZ0lDQWdZRlJvWlNCcGJYQnZjblFnYldGd0lISmxjMjlzZFhScGIyNGdiMllnSkh0emNHVmphV1pwWlhKTFpYbDlJR1poYVd4bFpDQmtkV1VnZEc4Z1ZWSk1JSEJoY25ObElHWmhhV3gxY21WZ0NpQWdJQ0FnSUNBZ0tUc0tJQ0FnSUNBZ2ZRb2dJQ0FnZlFvZ0lIMEtDaUFnY21WMGRYSnVJRzUxYkd3N0NuMEtDaTh2SUdoMGRIQnpPaTh2ZDJsalp5NW5hWFJvZFdJdWFXOHZhVzF3YjNKMExXMWhjSE12STNCaGNuTnBibWNLWlhod2IzSjBJR1oxYm1OMGFXOXVJSEpsYzI5c2RtVkJibVJEYjIxd2IzTmxTVzF3YjNKMFRXRndLSEJoY25ObFpDa2dld29nSUM4dklGTjBaWEFnTWdvZ0lHbG1JQ2doYVhOUWJHRnBiazlpYW1WamRDaHdZWEp6WldRcEtTQjdDaUFnSUNCMGFISnZkeUJGY25KdmNpaGdTVzUyWVd4cFpDQnBiWEJ2Y25RZ2JXRndJQzBnZEc5d0lHeGxkbVZzSUcxMWMzUWdZbVVnWVc0Z2IySnFaV04wWUNrN0NpQWdmUW9LSUNBdkx5QlRkR1Z3SURNS0lDQnNaWFFnYzI5eWRHVmtRVzVrVG05eWJXRnNhWHBsWkVsdGNHOXlkSE1nUFNCN2ZUc0tDaUFnTHk4Z1UzUmxjQ0EwQ2lBZ2FXWWdLSEJoY25ObFpDNW9ZWE5QZDI1UWNtOXdaWEowZVNnbmFXMXdiM0owY3ljcEtTQjdDaUFnSUNBdkx5QlRkR1Z3SURRdU1Rb2dJQ0FnYVdZZ0tDRnBjMUJzWVdsdVQySnFaV04wS0hCaGNuTmxaQzVwYlhCdmNuUnpLU2tnZXdvZ0lDQWdJQ0IwYUhKdmR5QkZjbkp2Y2loZ1NXNTJZV3hwWkNCcGJYQnZjblFnYldGd0lDMGdJbWx0Y0c5eWRITWlJSEJ5YjNCbGNuUjVJRzExYzNRZ1ltVWdZVzRnYjJKcVpXTjBZQ2s3Q2lBZ0lDQjlDZ29nSUNBZ0x5OGdVM1JsY0NBMExqSUtJQ0FnSUhOdmNuUmxaRUZ1WkU1dmNtMWhiR2w2WldSSmJYQnZjblJ6SUQwZ2MyOXlkRUZ1WkU1dmNtMWhiR2w2WlZOd1pXTnBabWxsY2sxaGNDZ0tJQ0FnSUNBZ2NHRnljMlZrTG1sdGNHOXlkSE1zQ2lBZ0lDQWdJR0poYzJWVlVrd0tJQ0FnSUNrN0NpQWdmUW9LSUNBdkx5QlRkR1Z3SURVS0lDQnNaWFFnYzI5eWRHVmtRVzVrVG05eWJXRnNhWHBsWkZOamIzQmxjeUE5SUh0OU93b0tJQ0F2THlCVGRHVndJRFlLSUNCcFppQW9jR0Z5YzJWa0xtaGhjMDkzYmxCeWIzQmxjblI1S0NkelkyOXdaWE1uS1NrZ2V3b2dJQ0FnTHk4Z1UzUmxjQ0EyTGpFS0lDQWdJR2xtSUNnaGFYTlFiR0ZwYms5aWFtVmpkQ2h3WVhKelpXUXVjMk52Y0dWektTa2dld29nSUNBZ0lDQjBhSEp2ZHlCRmNuSnZjaWhnU1c1MllXeHBaQ0JwYlhCdmNuUWdiV0Z3SUMwZ0luTmpiM0JsY3lJZ2NISnZjR1Z5ZEhrZ2JYVnpkQ0JpWlNCaGJpQnZZbXBsWTNSZ0tUc0tJQ0FnSUgwS0NpQWdJQ0F2THlCVGRHVndJRFl1TWdvZ0lDQWdjMjl5ZEdWa1FXNWtUbTl5YldGc2FYcGxaRk5qYjNCbGN5QTlJSE52Y25SQmJtUk9iM0p0WVd4cGVtVlRZMjl3WlhNb2NHRnljMlZrTG5OamIzQmxjeXdnWW1GelpWVlNUQ2s3Q2lBZ2ZRb0tJQ0F2THlCVGRHVndJRGNLSUNCamIyNXpkQ0JwYm5aaGJHbGtTMlY1Y3lBOUlFOWlhbVZqZEM1clpYbHpLSEJoY25ObFpDa3VabWxzZEdWeUtBb2dJQ0FnS0d0bGVTa2dQVDRnYTJWNUlDRTlQU0FuYVcxd2IzSjBjeWNnSmlZZ2EyVjVJQ0U5UFNBbmMyTnZjR1Z6SndvZ0lDazdDaUFnYVdZZ0tHbHVkbUZzYVdSTFpYbHpMbXhsYm1kMGFDQStJREFwSUhzS0lDQWdJR052Ym5OdmJHVXVkMkZ5YmlnS0lDQWdJQ0FnWUVsdWRtRnNhV1FnZEc5d0xXeGxkbVZzSUd0bGVTUjdDaUFnSUNBZ0lDQWdhVzUyWVd4cFpFdGxlWE11YkdWdVozUm9JRDRnTUNBL0lDZHpKeUE2SUNjbkNpQWdJQ0FnSUgwZ2FXNGdhVzF3YjNKMElHMWhjQ0F0SUNSN2FXNTJZV3hwWkV0bGVYTXVhbTlwYmlnbkxDQW5LWDFnQ2lBZ0lDQXBPd29nSUgwS0NpQWdMeThnVTNSbGNDQTRDaUFnY21WMGRYSnVJSHNLSUNBZ0lHbHRjRzl5ZEhNNklITnZjblJsWkVGdVpFNXZjbTFoYkdsNlpXUkpiWEJ2Y25SekxBb2dJQ0FnYzJOdmNHVnpPaUJ6YjNKMFpXUkJibVJPYjNKdFlXeHBlbVZrVTJOdmNHVnpMQW9nSUgwN0NuMEtDaTh2SUdoMGRIQnpPaTh2ZDJsalp5NW5hWFJvZFdJdWFXOHZhVzF3YjNKMExXMWhjSE12STNOdmNuUXRZVzVrTFc1dmNtMWhiR2w2WlMxaExYTndaV05wWm1sbGNpMXRZWEFLWm5WdVkzUnBiMjRnYzI5eWRFRnVaRTV2Y20xaGJHbDZaVk53WldOcFptbGxjazFoY0NodFlYQXNJR0poYzJWVlVrd3BJSHNLSUNCamIyNXpkQ0J1YjNKdFlXeHBlbVZrSUQwZ2UzMDdDZ29nSUdadmNpQW9iR1YwSUhOd1pXTnBabWxsY2t0bGVTQnBiaUJ0WVhBcElIc0tJQ0FnSUdOdmJuTjBJSFpoYkhWbElEMGdiV0Z3VzNOd1pXTnBabWxsY2t0bGVWMDdDZ29nSUNBZ1kyOXVjM1FnYm05eWJXRnNhWHBsWkZOd1pXTnBabWxsY2t0bGVTQTlJRzV2Y20xaGJHbDZaVk53WldOcFptbGxja3RsZVNoemNHVmphV1pwWlhKTFpYa3NJR0poYzJWVlVrd3BPd29nSUNBZ2FXWWdLRzV2Y20xaGJHbDZaV1JUY0dWamFXWnBaWEpMWlhrZ1BUMDlJRzUxYkd3cElIc0tJQ0FnSUNBZ1kyOXVkR2x1ZFdVN0NpQWdJQ0I5Q2dvZ0lDQWdiR1YwSUdGa1pISmxjM05WVWt3Z1BTQndZWEp6WlZWU1RFeHBhMlZUY0dWamFXWnBaWElvZG1Gc2RXVXNJR0poYzJWVlVrd3BPd29nSUNBZ2FXWWdLR0ZrWkhKbGMzTlZVa3dnUFQwOUlHNTFiR3dwSUhzS0lDQWdJQ0FnWTI5dWMyOXNaUzUzWVhKdUtBb2dJQ0FnSUNBZ0lHQkpiblpoYkdsa0lGVlNUQ0JoWkdSeVpYTnpJR1p2Y2lCcGJYQnZjblFnYldGd0lITndaV05wWm1sbGNpQW5KSHR6Y0dWamFXWnBaWEpMWlhsOUoyQUtJQ0FnSUNBZ0tUc0tJQ0FnSUNBZ2JtOXliV0ZzYVhwbFpGdHViM0p0WVd4cGVtVmtVM0JsWTJsbWFXVnlTMlY1WFNBOUlHNTFiR3c3Q2lBZ0lDQWdJR052Ym5ScGJuVmxPd29nSUNBZ2ZRb0tJQ0FnSUdsbUlDaHpjR1ZqYVdacFpYSkxaWGt1Wlc1a2MxZHBkR2dvSnk4bktTQW1KaUFoWVdSa2NtVnpjMVZTVEM1bGJtUnpWMmwwYUNnbkx5Y3BLU0I3Q2lBZ0lDQWdJR052Ym5OdmJHVXVkMkZ5YmlnS0lDQWdJQ0FnSUNCZ1NXNTJZV3hwWkNCVlVrd2dZV1JrY21WemN5Qm1iM0lnYVcxd2IzSjBJRzFoY0NCemNHVmphV1pwWlhJZ0p5UjdjM0JsWTJsbWFXVnlTMlY1ZlNjZ0xTQnphVzVqWlNCMGFHVWdjM0JsWTJsbWFXVnlJR1Z1WkhNZ2FXNGdjMnhoYzJnc0lITnZJRzExYzNRZ2RHaGxJR0ZrWkhKbGMzTmdDaUFnSUNBZ0lDazdDaUFnSUNBZ0lHNXZjbTFoYkdsNlpXUmJibTl5YldGc2FYcGxaRk53WldOcFptbGxja3RsZVYwZ1BTQnVkV3hzT3dvZ0lDQWdJQ0JqYjI1MGFXNTFaVHNLSUNBZ0lIMEtDaUFnSUNCdWIzSnRZV3hwZW1Wa1cyNXZjbTFoYkdsNlpXUlRjR1ZqYVdacFpYSkxaWGxkSUQwZ1lXUmtjbVZ6YzFWU1REc0tJQ0I5Q2dvZ0lISmxkSFZ5YmlCdWIzSnRZV3hwZW1Wa093cDlDZ292THlCb2RIUndjem92TDNkcFkyY3VaMmwwYUhWaUxtbHZMMmx0Y0c5eWRDMXRZWEJ6THlOdWIzSnRZV3hwZW1VdFlTMXpjR1ZqYVdacFpYSXRhMlY1Q21aMWJtTjBhVzl1SUc1dmNtMWhiR2w2WlZOd1pXTnBabWxsY2t0bGVTaHJaWGtwSUhzS0lDQnBaaUFvYTJWNUlEMDlQU0FuSnlrZ2V3b2dJQ0FnWTI5dWMyOXNaUzUzWVhKdUtHQlRjR1ZqYVdacFpYSWdhMlY1Y3lCcGJpQnBiWEJ2Y25RZ2JXRndjeUJ0WVhrZ2JtOTBJR0psSUhSb1pTQmxiWEIwZVNCemRISnBibWRnS1RzS0lDQWdJSEpsZEhWeWJpQnVkV3hzT3dvZ0lIMEtDaUFnY21WMGRYSnVJSEJoY25ObFZWSk1UR2xyWlZOd1pXTnBabWxsY2loclpYa3NJR0poYzJWVlVrd3BJSHg4SUd0bGVUc0tmUW9LTHk4Z2FIUjBjSE02THk5M2FXTm5MbWRwZEdoMVlpNXBieTlwYlhCdmNuUXRiV0Z3Y3k4amNHRnljMlV0WVMxMWNtd3RiR2xyWlMxcGJYQnZjblF0YzNCbFkybG1hV1Z5Q21aMWJtTjBhVzl1SUhCaGNuTmxWVkpNVEdsclpWTndaV05wWm1sbGNpaHpjR1ZqYVdacFpYSXNJR0poYzJWVlVrd3BJSHNLSUNCamIyNXpkQ0IxYzJWQ1lYTmxWWEpzUVhOUVlYSmxiblFnUFFvZ0lDQWdjM0JsWTJsbWFXVnlMbk4wWVhKMGMxZHBkR2dvSnk4bktTQjhmQW9nSUNBZ2MzQmxZMmxtYVdWeUxuTjBZWEowYzFkcGRHZ29KeTR2SnlrZ2ZId0tJQ0FnSUhOd1pXTnBabWxsY2k1emRHRnlkSE5YYVhSb0tDY3VMaThuS1RzS0NpQWdkSEo1SUhzS0lDQWdJSEpsZEhWeWJpQnVaWGNnVlZKTUtITndaV05wWm1sbGNpd2dkWE5sUW1GelpWVnliRUZ6VUdGeVpXNTBJRDhnWW1GelpWVlNUQ0E2SUhWdVpHVm1hVzVsWkNrdWFISmxaanNLSUNCOUlHTmhkR05vSUhzS0lDQWdJSEpsZEhWeWJpQnVkV3hzT3dvZ0lIMEtmUW9LTHk4Z2FIUjBjSE02THk5M2FXTm5MbWRwZEdoMVlpNXBieTlwYlhCdmNuUXRiV0Z3Y3k4amMyOXlkQzFoYm1RdGJtOXliV0ZzYVhwbExYTmpiM0JsY3dwbWRXNWpkR2x2YmlCemIzSjBRVzVrVG05eWJXRnNhWHBsVTJOdmNHVnpLRzFoY0N3Z1ltRnpaVlZTVENrZ2V3b2dJR3hsZENCdWIzSnRZV3hwZW1Wa0lEMGdlMzA3Q2dvZ0lHWnZjaUFvYkdWMElITmpiM0JsVUhKbFptbDRJR2x1SUcxaGNDa2dld29nSUNBZ1kyOXVjM1FnY0c5MFpXNTBhV0ZzVTNCbFkybG1hV1Z5VFdGd0lEMGdiV0Z3VzNOamIzQmxVSEpsWm1sNFhUc0tJQ0FnSUdsbUlDZ2hhWE5RYkdGcGJrOWlhbVZqZENod2IzUmxiblJwWVd4VGNHVmphV1pwWlhKTllYQXBLU0I3Q2lBZ0lDQWdJSFJvY205M0lGUjVjR1ZGY25KdmNpZ0tJQ0FnSUNBZ0lDQmdWR2hsSUhaaGJIVmxJRzltSUhOamIzQmxJQ1I3YzJOdmNHVlFjbVZtYVhoOUlHMTFjM1FnWW1VZ1lTQktVMDlPSUc5aWFtVmpkR0FLSUNBZ0lDQWdLVHNLSUNBZ0lIMEtDaUFnSUNCc1pYUWdjMk52Y0dWUWNtVm1hWGhWVWt3N0NpQWdJQ0IwY25rZ2V3b2dJQ0FnSUNCelkyOXdaVkJ5WldacGVGVlNUQ0E5SUc1bGR5QlZVa3dvYzJOdmNHVlFjbVZtYVhnc0lHSmhjMlZWVWt3cExtaHlaV1k3Q2lBZ0lDQjlJR05oZEdOb0lIc0tJQ0FnSUNBZ1kyOXVjMjlzWlM1M1lYSnVLQW9nSUNBZ0lDQWdJR0JUWTI5d1pTQndjbVZtYVhnZ1ZWSk1JQ2NrZTNOamIzQmxVSEpsWm1sNGZTY2dkMkZ6SUc1dmRDQndZWEp6WldGaWJHVWdhVzRnYVcxd2IzSjBJRzFoY0dBS0lDQWdJQ0FnS1RzS0lDQWdJQ0FnWTI5dWRHbHVkV1U3Q2lBZ0lDQjlDZ29nSUNBZ2JtOXliV0ZzYVhwbFpGdHpZMjl3WlZCeVpXWnBlRlZTVEYwZ1BTQnpiM0owUVc1a1RtOXliV0ZzYVhwbFUzQmxZMmxtYVdWeVRXRndLQW9nSUNBZ0lDQndiM1JsYm5ScFlXeFRjR1ZqYVdacFpYSk5ZWEFzQ2lBZ0lDQWdJR0poYzJWVlVrd0tJQ0FnSUNrN0NpQWdmUW9LSUNCeVpYUjFjbTRnYm05eWJXRnNhWHBsWkRzS2ZRb0tablZ1WTNScGIyNGdhWE5RYkdGcGJrOWlhbVZqZENodlltb3BJSHNLSUNCeVpYUjFjbTRnYjJKcUlEMDlQU0JQWW1wbFkzUW9iMkpxS1NBbUppQWhRWEp5WVhrdWFYTkJjbkpoZVNodlltb3BPd3A5Q2dvdkx5QXRMUzBLQ214bGRDQnBiWEJ2Y25STllYQlFjbTl0YVhObElEMGdaMlYwU1cxd2IzSjBUV0Z3VUhKdmJXbHpaU2dwT3dvS1pYaHdiM0owSUdGemVXNWpJR1oxYm1OMGFXOXVJSEpsYzI5c2RtVW9jM0JsWTJsbWFXVnlMQ0JqYjI1MFpYaDBMQ0JrWldaaGRXeDBVbVZ6YjJ4MlpTa2dld29nSUdOdmJuTjBJSHNnY0dGeVpXNTBWVkpNSUQwZ2JuVnNiQ0I5SUQwZ1kyOXVkR1Y0ZERzS0lDQmpiMjV6ZENCcGJYQnZjblJOWVhBZ1BTQmhkMkZwZENCcGJYQnZjblJOWVhCUWNtOXRhWE5sT3dvZ0lHTnZibk4wSUdsdGNHOXlkRTFoY0ZWeWJDQTlJSEpsYzI5c2RtVlRjR1ZqYVdacFpYSW9hVzF3YjNKMFRXRndMQ0J6Y0dWamFXWnBaWElzSUhCaGNtVnVkRlZTVENrN0Nnb2dJSEpsZEhWeWJpQmtaV1poZFd4MFVtVnpiMngyWlNocGJYQnZjblJOWVhCVmNtd2dQejhnYzNCbFkybG1hV1Z5TENCamIyNTBaWGgwTENCa1pXWmhkV3gwVW1WemIyeDJaU2s3Q24wS0NtVjRjRzl5ZENCaGMzbHVZeUJtZFc1amRHbHZiaUJzYjJGa0tIVnliQ3dnWTI5dWRHVjRkQ3dnWkdWbVlYVnNkRXh2WVdRcElIc0tJQ0JwWmlBb2RYSnNMbk4wWVhKMGMxZHBkR2dvSjJoMGRIQTZMeThuS1NCOGZDQjFjbXd1YzNSaGNuUnpWMmwwYUNnbmFIUjBjSE02THk4bktTa2dld29nSUNBZ1kyOXVjM1FnY21WeklEMGdZWGRoYVhRZ1ptVjBZMmdvZFhKc0tUc0tJQ0FnSUdsbUlDZ2hjbVZ6TG05cktTQjdDaUFnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2loZ1JtRnBiR1ZrSUhSdklHWmxkR05vSUcxdlpIVnNaU0JtY205dElDUjdkWEpzZldBcE93b2dJQ0FnZlFvZ0lDQWdZMjl1YzNRZ2MyOTFjbU5sSUQwZ1lYZGhhWFFnY21WekxuUmxlSFFvS1RzS0lDQWdJSEpsZEhWeWJpQjdDaUFnSUNBZ0lITm9iM0owUTJseVkzVnBkRG9nZEhKMVpTd0tJQ0FnSUNBZ1ptOXliV0YwT2lBbmJXOWtkV3hsSnl3Z0NpQWdJQ0FnSUhOdmRYSmpaU3dLSUNBZ0lIMDdDaUFnZlFvS0lDQnBaaUFvSVhWeWJDNXpkR0Z5ZEhOWGFYUm9LQ2R1YjJSbE9pY3BLU0I3Q2lBZ0lDQmpiMjUwWlhoMExtWnZjbTFoZENBOUlDZHRiMlIxYkdVbk93b2dJSDBLSUNBS0lDQnlaWFIxY200Z1pHVm1ZWFZzZEV4dllXUW9kWEpzTENCamIyNTBaWGgwTENCa1pXWmhkV3gwVEc5aFpDazdDbjBLQ21GemVXNWpJR1oxYm1OMGFXOXVJR2RsZEVsdGNHOXlkRTFoY0ZCeWIyMXBjMlVvS1NCN0NpQWdZMjl1YzNRZ2NtVnNZWFJwZG1WUVlYUm9JRDBnY0hKdlkyVnpjeTVsYm5ZdVNVMVFUMUpVWDAxQlVGOVFRVlJJSUh4OElFbE5VRTlTVkY5TlFWQmZSa2xNUlY5T1FVMUZPd29nSUdOdmJuTjBJR2x0Y0c5eWRFMWhjRkJoZEdnZ1BTQndZWFJvTG5KbGMyOXNkbVVvY0hKdlkyVnpjeTVqZDJRb0tTd2djbVZzWVhScGRtVlFZWFJvS1RzS0NpQWdiR1YwSUhOMGNqc0tJQ0IwY25rZ2V3b2dJQ0FnYzNSeUlEMGdZWGRoYVhRZ1puTXVjbVZoWkVacGJHVW9hVzF3YjNKMFRXRndVR0YwYUNrN0NpQWdmU0JqWVhSamFDQW9aWEp5S1NCN0NpQWdJQ0J5WlhSMWNtNGdaVzF3ZEhsTllYQW9LVHNLSUNCOUNnb2dJR3hsZENCcWMyOXVPd29nSUhSeWVTQjdDaUFnSUNCcWMyOXVJRDBnWVhkaGFYUWdTbE5QVGk1d1lYSnpaU2h6ZEhJcE93b2dJSDBnWTJGMFkyZ2dLR1Z5Y2lrZ2V3b2dJQ0FnZEdoeWIzY2dSWEp5YjNJb0NpQWdJQ0FnSUdCSmJYQnZjblFnYldGd0lHRjBJQ1I3YVcxd2IzSjBUV0Z3VUdGMGFIMGdZMjl1ZEdGcGJuTWdhVzUyWVd4cFpDQnFjMjl1T2lBa2UyVnljaTV0WlhOellXZGxmV0FLSUNBZ0lDazdDaUFnZlFvS0lDQnlaWFIxY200Z2NtVnpiMngyWlVGdVpFTnZiWEJ2YzJWSmJYQnZjblJOWVhBb2FuTnZiaWs3Q24wS0NtZHNiMkpoYkM1dWIyUmxURzloWkdWeUlEMGdaMnh2WW1Gc0xtNXZaR1ZNYjJGa1pYSWdmSHdnZTMwN0NncG5iRzlpWVd3dWJtOWtaVXh2WVdSbGNpNXpaWFJKYlhCdmNuUk5ZWEJRY205dGFYTmxJRDBnWm5WdVkzUnBiMjRnYzJWMFNXMXdiM0owVFdGd1VISnZiV2x6WlNod2NtOXRhWE5sS1NCN0NpQWdhVzF3YjNKMFRXRndVSEp2YldselpTQTlJSEJ5YjIxcGMyVXVkR2hsYmlnb2JXRndLU0E5UGlCN0NpQWdJQ0J5WlhSMWNtNGdjbVZ6YjJ4MlpVRnVaRU52YlhCdmMyVkpiWEJ2Y25STllYQW9iV0Z3S1RzS0lDQjlLVHNLZlRzS0NtWjFibU4wYVc5dUlHVnRjSFI1VFdGd0tDa2dld29nSUhKbGRIVnliaUI3SUdsdGNHOXlkSE02SUh0OUxDQnpZMjl3WlhNNklIdDlJSDA3Q24wSyI7CgovLyBsaWJzL25hdGl2ZS1mZWRlcmF0aW9uLW5vZGUvc3JjL2xpYi9ub2RlL2luaXQtbm9kZS1mZWRlcmF0aW9uLnRzCnZhciBkZWZhdWx0T3B0aW9ucyA9IHsKICByZW1vdGVzT3JNYW5pZmVzdFVybDoge30sCiAgcmVsQnVuZGxlUGF0aDogIi4uL2Jyb3dzZXIiLAogIHRocm93SWZSZW1vdGVOb3RGb3VuZDogZmFsc2UKfTsKYXN5bmMgZnVuY3Rpb24gaW5pdE5vZGVGZWRlcmF0aW9uKG9wdGlvbnMpIHsKICBjb25zdCBtZXJnZWRPcHRpb25zID0geyAuLi5kZWZhdWx0T3B0aW9ucywgLi4ub3B0aW9ucyB9OwogIGNvbnN0IGltcG9ydE1hcCA9IGF3YWl0IGNyZWF0ZU5vZGVJbXBvcnRNYXAobWVyZ2VkT3B0aW9ucyk7CiAgYXdhaXQgd3JpdGVJbXBvcnRNYXAoaW1wb3J0TWFwKTsKICBhd2FpdCB3cml0ZVJlc29sdmVyKCk7CiAgcmVnaXN0ZXIocGF0aFRvRmlsZVVSTCgiLi9mZWRlcmF0aW9uLXJlc29sdmVyLm1qcyIpLmhyZWYpOwp9CmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZU5vZGVJbXBvcnRNYXAob3B0aW9ucykgewogIGNvbnN0IHsgcmVtb3Rlc09yTWFuaWZlc3RVcmwsIHJlbEJ1bmRsZVBhdGggfSA9IG9wdGlvbnM7CiAgY29uc3QgcmVtb3RlcyA9IHR5cGVvZiByZW1vdGVzT3JNYW5pZmVzdFVybCA9PT0gIm9iamVjdCIgPyByZW1vdGVzT3JNYW5pZmVzdFVybCA6IGF3YWl0IGxvYWRGc01hbmlmZXN0KHJlbW90ZXNPck1hbmlmZXN0VXJsKTsKICBjb25zdCBob3N0SW5mbyA9IGF3YWl0IGxvYWRGc0ZlZGVyYXRpb25JbmZvKHJlbEJ1bmRsZVBhdGgpOwogIGNvbnN0IGhvc3RJbXBvcnRNYXAgPSBhd2FpdCBwcm9jZXNzSG9zdEluZm8oaG9zdEluZm8sICIuLyIgKyByZWxCdW5kbGVQYXRoKTsKICBjb25zdCByZW1vdGVzSW1wb3J0TWFwID0gYXdhaXQgcHJvY2Vzc1JlbW90ZUluZm9zKHJlbW90ZXMsIHsKICAgIHRocm93SWZSZW1vdGVOb3RGb3VuZDogb3B0aW9ucy50aHJvd0lmUmVtb3RlTm90Rm91bmQsCiAgICBjYWNoZVRhZzogb3B0aW9ucy5jYWNoZVRhZwogIH0pOwogIGNvbnN0IGltcG9ydE1hcCA9IG1lcmdlSW1wb3J0TWFwcyhob3N0SW1wb3J0TWFwLCByZW1vdGVzSW1wb3J0TWFwKTsKICByZXR1cm4gaW1wb3J0TWFwOwp9CmFzeW5jIGZ1bmN0aW9uIGxvYWRGc01hbmlmZXN0KG1hbmlmZXN0VXJsKSB7CiAgY29uc3QgY29udGVudCA9IGF3YWl0IGZzMi5yZWFkRmlsZShtYW5pZmVzdFVybCwgInV0Zi04Iik7CiAgY29uc3QgbWFuaWZlc3QgPSBKU09OLnBhcnNlKGNvbnRlbnQpOwogIHJldHVybiBtYW5pZmVzdDsKfQphc3luYyBmdW5jdGlvbiBsb2FkRnNGZWRlcmF0aW9uSW5mbyhyZWxCdW5kbGVQYXRoKSB7CiAgY29uc3QgbWFuaWZlc3RQYXRoID0gcGF0aDIuam9pbihyZWxCdW5kbGVQYXRoLCAicmVtb3RlRW50cnkuanNvbiIpOwogIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBmczIucmVhZEZpbGUobWFuaWZlc3RQYXRoLCAidXRmLTgiKTsKICBjb25zdCBtYW5pZmVzdCA9IEpTT04ucGFyc2UoY29udGVudCk7CiAgcmV0dXJuIG1hbmlmZXN0Owp9CmFzeW5jIGZ1bmN0aW9uIHdyaXRlSW1wb3J0TWFwKG1hcCkgewogIGF3YWl0IGZzMi53cml0ZUZpbGUoCiAgICBJTVBPUlRfTUFQX0ZJTEVfTkFNRSwKICAgIEpTT04uc3RyaW5naWZ5KG1hcCwgbnVsbCwgMiksCiAgICAidXRmLTgiCiAgKTsKfQphc3luYyBmdW5jdGlvbiB3cml0ZVJlc29sdmVyKCkgewogIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHJlc29sdmVyLCAiYmFzZTY0Iik7CiAgYXdhaXQgZnMyLndyaXRlRmlsZSgiZmVkZXJhdGlvbi1yZXNvbHZlci5tanMiLCBidWZmZXIsICJ1dGYtOCIpOwp9CgovLyBsaWJzL25hdGl2ZS1mZWRlcmF0aW9uLW5vZGUvc3JjL2xpYi91dGlscy9mc3RhcnQtYXJncy1wYXJzZXIudHMKaW1wb3J0ICogYXMgZnMzIGZyb20gIm5vZGU6ZnMiOwp2YXIgZGVmYXVsdEFyZ3MgPSB7CiAgZW50cnk6ICIuL3NlcnZlci5tanMiLAogIHJlbW90ZXNPck1hbmlmZXN0VXJsOiAiLi4vYnJvd3Nlci9mZWRlcmF0aW9uLm1hbmlmZXN0Lmpzb24iLAogIHJlbEJ1bmRsZVBhdGg6ICIuLi9icm93c2VyLyIKfTsKZnVuY3Rpb24gcGFyc2VGU3RhcnRBcmdzKCkgewogIGNvbnN0IGFyZ3MyID0gewogICAgZW50cnk6ICIiLAogICAgcmVtb3Rlc09yTWFuaWZlc3RVcmw6ICIiLAogICAgcmVsQnVuZGxlUGF0aDogIiIKICB9OwogIGxldCBrZXkgPSAiIjsKICBmb3IgKGxldCBpID0gMjsgaSA8IHByb2Nlc3MuYXJndi5sZW5ndGg7IGkrKykgewogICAgY29uc3QgY2FuZCA9IHByb2Nlc3MuYXJndltpXTsKICAgIGlmIChjYW5kLnN0YXJ0c1dpdGgoIi0tIikpIHsKICAgICAgY29uc3QgY2FuZEtleSA9IGNhbmQuc3Vic3RyaW5nKDIpOwogICAgICBpZiAoZGVmYXVsdEFyZ3NbY2FuZEtleV0pIHsKICAgICAgICBrZXkgPSBjYW5kS2V5OwogICAgICB9IGVsc2UgewogICAgICAgIGNvbnNvbGUuZXJyb3IoYHN3aXRjaCAke2NhbmR9IG5vdCBzdXBwb3J0ZWQhYCk7CiAgICAgICAgZXhpdFdpdGhVc2FnZShkZWZhdWx0QXJncyk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoa2V5KSB7CiAgICAgIGFyZ3MyW2tleV0gPSBjYW5kOwogICAgICBrZXkgPSAiIjsKICAgIH0gZWxzZSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoYHVucmVsYWRlZCB2YWx1ZSAke2NhbmR9IWApOwogICAgICBleGl0V2l0aFVzYWdlKGRlZmF1bHRBcmdzKTsKICAgIH0KICB9CiAgYXBwbHlEZWZhdWx0QXJncyhhcmdzMik7CiAgcmV0dXJuIGFyZ3MyOwp9CmZ1bmN0aW9uIGFwcGx5RGVmYXVsdEFyZ3MoYXJnczIpIHsKICBpZiAoYXJnczIucmVsQnVuZGxlUGF0aCAmJiAhYXJnczIucmVtb3Rlc09yTWFuaWZlc3RVcmwpIHsKICAgIGNvbnN0IGNhbmQgPSBkZWZhdWx0QXJncy5yZWxCdW5kbGVQYXRoICsgImZlZGVyYXRpb24ubWFuaWZlc3QuanNvbiI7CiAgICBpZiAoZnMzLmV4aXN0c1N5bmMoY2FuZCkpIHsKICAgICAgYXJnczIucmVtb3Rlc09yTWFuaWZlc3RVcmwgPSBjYW5kOwogICAgfQogIH0KICBhcmdzMi5lbnRyeSA9IGFyZ3MyLmVudHJ5IHx8IGRlZmF1bHRBcmdzLmVudHJ5OwogIGFyZ3MyLnJlbEJ1bmRsZVBhdGggPSBhcmdzMi5yZWxCdW5kbGVQYXRoIHx8IGRlZmF1bHRBcmdzLnJlbEJ1bmRsZVBhdGg7CiAgYXJnczIucmVtb3Rlc09yTWFuaWZlc3RVcmwgPSBhcmdzMi5yZW1vdGVzT3JNYW5pZmVzdFVybCB8fCBkZWZhdWx0QXJncy5yZW1vdGVzT3JNYW5pZmVzdFVybDsKICBpZiAoIWZzMy5leGlzdHNTeW5jKGFyZ3MyLnJlbW90ZXNPck1hbmlmZXN0VXJsKSkgewogICAgYXJnczIucmVtb3Rlc09yTWFuaWZlc3RVcmwgPSB2b2lkIDA7CiAgfQp9CmZ1bmN0aW9uIGV4aXRXaXRoVXNhZ2UoZGVmYXVsdEFyZ3MyKSB7CiAgbGV0IGFyZ3MyID0gIiI7CiAgZm9yIChjb25zdCBrZXkgaW4gZGVmYXVsdEFyZ3MyKSB7CiAgICBhcmdzMiArPSBgWy0tJHtrZXl9ICR7ZGVmYXVsdEFyZ3MyW2tleV19XSBgOwogIH0KICBjb25zb2xlLmxvZygidXNhZ2U6IG5mc3RhcnQgIiArIGFyZ3MyKTsKICBwcm9jZXNzLmV4aXQoMSk7Cn0KCi8vIGxpYnMvbmF0aXZlLWZlZGVyYXRpb24tbm9kZS9zcmMvbGliL3V0aWxzL2ZzdGFydC50cwp2YXIgYXJncyA9IHBhcnNlRlN0YXJ0QXJncygpOwooYXN5bmMgKCkgPT4gewogIGF3YWl0IGluaXROb2RlRmVkZXJhdGlvbih7CiAgICAuLi5hcmdzLnJlbW90ZXNPck1hbmlmZXN0VXJsID8geyByZW1vdGVzT3JNYW5pZmVzdFVybDogYXJncy5yZW1vdGVzT3JNYW5pZmVzdFVybCB9IDoge30sCiAgICByZWxCdW5kbGVQYXRoOiBhcmdzLnJlbEJ1bmRsZVBhdGgKICB9KTsKICBhd2FpdCBpbXBvcnQoYXJncy5lbnRyeSk7Cn0pKCk7Cg==";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.fstart = void 0;
|
|
4
|
-
exports.fstart = "Ly8gbGlicy9uYXRpdmUtZmVkZXJhdGlvbi1ub2RlL3NyYy9saWIvbm9kZS9pbml0LW5vZGUtZmVkZXJhdGlvbi50cwppbXBvcnQgeyByZWdpc3RlciB9IGZyb20gIm5vZGU6bW9kdWxlIjsKaW1wb3J0IHsgcGF0aFRvRmlsZVVSTCB9IGZyb20gIm5vZGU6dXJsIjsKaW1wb3J0ICogYXMgZnMyIGZyb20gIm5vZGU6ZnMvcHJvbWlzZXMiOwppbXBvcnQgKiBhcyBwYXRoMiBmcm9tICJub2RlOnBhdGgiOwoKLy8gbGlicy9uYXRpdmUtZmVkZXJhdGlvbi1ydW50aW1lL3NyYy9saWIvbW9kZWwvaW1wb3J0LW1hcC50cwpmdW5jdGlvbiBtZXJnZUltcG9ydE1hcHMobWFwMSwgbWFwMikgewogIHJldHVybiB7CiAgICBpbXBvcnRzOiB7IC4uLm1hcDEuaW1wb3J0cywgLi4ubWFwMi5pbXBvcnRzIH0sCiAgICBzY29wZXM6IHsgLi4ubWFwMS5zY29wZXMsIC4uLm1hcDIuc2NvcGVzIH0KICB9Owp9CgovLyBsaWJzL25hdGl2ZS1mZWRlcmF0aW9uLXJ1bnRpbWUvc3JjL2xpYi9tb2RlbC9nbG9iYWwtY2FjaGUudHMKdmFyIG5mTmFtZXNwYWNlID0gIl9fTkFUSVZFX0ZFREVSQVRJT05fXyI7CnZhciBnbG9iYWwyID0gZ2xvYmFsVGhpczsKZ2xvYmFsMltuZk5hbWVzcGFjZV0gPz89IHsKICBleHRlcm5hbHM6IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCksCiAgcmVtb3RlTmFtZXNUb1JlbW90ZTogLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSwKICBiYXNlVXJsVG9SZW1vdGVOYW1lczogLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKQp9Owp2YXIgZ2xvYmFsQ2FjaGUgPSBnbG9iYWwyW25mTmFtZXNwYWNlXTsKCi8vIGxpYnMvbmF0aXZlLWZlZGVyYXRpb24tcnVudGltZS9zcmMvbGliL21vZGVsL2V4dGVybmFscy50cwp2YXIgZXh0ZXJuYWxzID0gZ2xvYmFsQ2FjaGUuZXh0ZXJuYWxzOwpmdW5jdGlvbiBnZXRFeHRlcm5hbEtleShzaGFyZWQpIHsKICByZXR1cm4gYCR7c2hhcmVkLnBhY2thZ2VOYW1lfUAke3NoYXJlZC52ZXJzaW9ufWA7Cn0KZnVuY3Rpb24gZ2V0RXh0ZXJuYWxVcmwoc2hhcmVkKSB7CiAgY29uc3QgcGFja2FnZUtleSA9IGdldEV4dGVybmFsS2V5KHNoYXJlZCk7CiAgcmV0dXJuIGV4dGVybmFscy5nZXQocGFja2FnZUtleSk7Cn0KZnVuY3Rpb24gc2V0RXh0ZXJuYWxVcmwoc2hhcmVkLCB1cmwyKSB7CiAgY29uc3QgcGFja2FnZUtleSA9IGdldEV4dGVybmFsS2V5KHNoYXJlZCk7CiAgZXh0ZXJuYWxzLnNldChwYWNrYWdlS2V5LCB1cmwyKTsKfQoKLy8gbGlicy9uYXRpdmUtZmVkZXJhdGlvbi1ydW50aW1lL3NyYy9saWIvdXRpbHMvcGF0aC11dGlscy50cwpmdW5jdGlvbiBnZXREaXJlY3RvcnkodXJsMikgewogIGNvbnN0IHBhcnRzID0gdXJsMi5zcGxpdCgiLyIpOwogIHBhcnRzLnBvcCgpOwogIHJldHVybiBwYXJ0cy5qb2luKCIvIik7Cn0KZnVuY3Rpb24gam9pblBhdGhzKHBhdGgxLCBwYXRoMjIpIHsKICB3aGlsZSAocGF0aDEuZW5kc1dpdGgoIi8iKSkgewogICAgcGF0aDEgPSBwYXRoMS5zdWJzdHJpbmcoMCwgcGF0aDEubGVuZ3RoIC0gMSk7CiAgfQogIGlmIChwYXRoMjIuc3RhcnRzV2l0aCgiLi8iKSkgewogICAgcGF0aDIyID0gcGF0aDIyLnN1YnN0cmluZygyLCBwYXRoMjIubGVuZ3RoKTsKICB9CiAgcmV0dXJuIGAke3BhdGgxfS8ke3BhdGgyMn1gOwp9CgovLyBsaWJzL25hdGl2ZS1mZWRlcmF0aW9uLXJ1bnRpbWUvc3JjL2xpYi9tb2RlbC9yZW1vdGVzLnRzCnZhciByZW1vdGVOYW1lc1RvUmVtb3RlID0gZ2xvYmFsQ2FjaGUucmVtb3RlTmFtZXNUb1JlbW90ZTsKdmFyIGJhc2VVcmxUb1JlbW90ZU5hbWVzID0gZ2xvYmFsQ2FjaGUuYmFzZVVybFRvUmVtb3RlTmFtZXM7CmZ1bmN0aW9uIGFkZFJlbW90ZShyZW1vdGVOYW1lLCByZW1vdGUpIHsKICByZW1vdGVOYW1lc1RvUmVtb3RlLnNldChyZW1vdGVOYW1lLCByZW1vdGUpOwogIGJhc2VVcmxUb1JlbW90ZU5hbWVzLnNldChyZW1vdGUuYmFzZVVybCwgcmVtb3RlTmFtZSk7Cn0KCi8vIGxpYnMvbmF0aXZlLWZlZGVyYXRpb24tcnVudGltZS9zcmMvbGliL2luaXQtZmVkZXJhdGlvbi50cwphc3luYyBmdW5jdGlvbiBwcm9jZXNzUmVtb3RlSW5mb3MocmVtb3Rlcywgb3B0aW9ucyA9IHsgdGhyb3dJZlJlbW90ZU5vdEZvdW5kOiBmYWxzZSB9KSB7CiAgY29uc3QgcHJvY2Vzc1JlbW90ZUluZm9Qcm9taXNlcyA9IE9iamVjdC5rZXlzKHJlbW90ZXMpLm1hcCgKICAgIGFzeW5jIChyZW1vdGVOYW1lKSA9PiB7CiAgICAgIHRyeSB7CiAgICAgICAgbGV0IHVybDIgPSByZW1vdGVzW3JlbW90ZU5hbWVdOwogICAgICAgIGlmIChvcHRpb25zLmNhY2hlVGFnKSB7CiAgICAgICAgICBjb25zdCBhZGRBcHBlbmQgPSByZW1vdGVzW3JlbW90ZU5hbWVdLmluY2x1ZGVzKCI/IikgPyAiJiIgOiAiPyI7CiAgICAgICAgICB1cmwyICs9IGAke2FkZEFwcGVuZH10PSR7b3B0aW9ucy5jYWNoZVRhZ31gOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYXdhaXQgcHJvY2Vzc1JlbW90ZUluZm8odXJsMiwgcmVtb3RlTmFtZSk7CiAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICBjb25zdCBlcnJvciA9IGBFcnJvciBsb2FkaW5nIHJlbW90ZSBlbnRyeSBmb3IgJHtyZW1vdGVOYW1lfSBmcm9tIGZpbGUgJHtyZW1vdGVzW3JlbW90ZU5hbWVdfWA7CiAgICAgICAgaWYgKG9wdGlvbnMudGhyb3dJZlJlbW90ZU5vdEZvdW5kKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3IpOwogICAgICAgIH0KICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgfQogICk7CiAgY29uc3QgcmVtb3RlSW1wb3J0TWFwcyA9IGF3YWl0IFByb21pc2UuYWxsKHByb2Nlc3NSZW1vdGVJbmZvUHJvbWlzZXMpOwogIGNvbnN0IGltcG9ydE1hcCA9IHJlbW90ZUltcG9ydE1hcHMucmVkdWNlKAogICAgKGFjYywgcmVtb3RlSW1wb3J0TWFwKSA9PiByZW1vdGVJbXBvcnRNYXAgPyBtZXJnZUltcG9ydE1hcHMoYWNjLCByZW1vdGVJbXBvcnRNYXApIDogYWNjLAogICAgeyBpbXBvcnRzOiB7fSwgc2NvcGVzOiB7fSB9CiAgKTsKICByZXR1cm4gaW1wb3J0TWFwOwp9CmFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NSZW1vdGVJbmZvKGZlZGVyYXRpb25JbmZvVXJsLCByZW1vdGVOYW1lKSB7CiAgY29uc3QgYmFzZVVybCA9IGdldERpcmVjdG9yeShmZWRlcmF0aW9uSW5mb1VybCk7CiAgY29uc3QgcmVtb3RlSW5mbyA9IGF3YWl0IGxvYWRGZWRlcmF0aW9uSW5mbyhmZWRlcmF0aW9uSW5mb1VybCk7CiAgaWYgKCFyZW1vdGVOYW1lKSB7CiAgICByZW1vdGVOYW1lID0gcmVtb3RlSW5mby5uYW1lOwogIH0KICBjb25zdCBpbXBvcnRNYXAgPSBjcmVhdGVSZW1vdGVJbXBvcnRNYXAocmVtb3RlSW5mbywgcmVtb3RlTmFtZSwgYmFzZVVybCk7CiAgYWRkUmVtb3RlKHJlbW90ZU5hbWUsIHsgLi4ucmVtb3RlSW5mbywgYmFzZVVybCB9KTsKICByZXR1cm4gaW1wb3J0TWFwOwp9CmZ1bmN0aW9uIGNyZWF0ZVJlbW90ZUltcG9ydE1hcChyZW1vdGVJbmZvLCByZW1vdGVOYW1lLCBiYXNlVXJsKSB7CiAgY29uc3QgaW1wb3J0cyA9IHByb2Nlc3NFeHBvc2VkKHJlbW90ZUluZm8sIHJlbW90ZU5hbWUsIGJhc2VVcmwpOwogIGNvbnN0IHNjb3BlcyA9IHByb2Nlc3NSZW1vdGVJbXBvcnRzKHJlbW90ZUluZm8sIGJhc2VVcmwpOwogIHJldHVybiB7IGltcG9ydHMsIHNjb3BlcyB9Owp9CmFzeW5jIGZ1bmN0aW9uIGxvYWRGZWRlcmF0aW9uSW5mbyh1cmwyKSB7CiAgY29uc3QgaW5mbyA9IGF3YWl0IGZldGNoKHVybDIpLnRoZW4oKHIpID0+IHIuanNvbigpKTsKICByZXR1cm4gaW5mbzsKfQpmdW5jdGlvbiBwcm9jZXNzUmVtb3RlSW1wb3J0cyhyZW1vdGVJbmZvLCBiYXNlVXJsKSB7CiAgY29uc3Qgc2NvcGVzID0ge307CiAgY29uc3Qgc2NvcGVkSW1wb3J0cyA9IHt9OwogIGZvciAoY29uc3Qgc2hhcmVkIG9mIHJlbW90ZUluZm8uc2hhcmVkKSB7CiAgICBjb25zdCBvdXRGaWxlTmFtZSA9IGdldEV4dGVybmFsVXJsKHNoYXJlZCkgPz8gam9pblBhdGhzKGJhc2VVcmwsIHNoYXJlZC5vdXRGaWxlTmFtZSk7CiAgICBzZXRFeHRlcm5hbFVybChzaGFyZWQsIG91dEZpbGVOYW1lKTsKICAgIHNjb3BlZEltcG9ydHNbc2hhcmVkLnBhY2thZ2VOYW1lXSA9IG91dEZpbGVOYW1lOwogIH0KICBzY29wZXNbYmFzZVVybCArICIvIl0gPSBzY29wZWRJbXBvcnRzOwogIHJldHVybiBzY29wZXM7Cn0KZnVuY3Rpb24gcHJvY2Vzc0V4cG9zZWQocmVtb3RlSW5mbywgcmVtb3RlTmFtZSwgYmFzZVVybCkgewogIGNvbnN0IGltcG9ydHMgPSB7fTsKICBmb3IgKGNvbnN0IGV4cG9zZWQgb2YgcmVtb3RlSW5mby5leHBvc2VzKSB7CiAgICBjb25zdCBrZXkgPSBqb2luUGF0aHMocmVtb3RlTmFtZSwgZXhwb3NlZC5rZXkpOwogICAgY29uc3QgdmFsdWUgPSBqb2luUGF0aHMoYmFzZVVybCwgZXhwb3NlZC5vdXRGaWxlTmFtZSk7CiAgICBpbXBvcnRzW2tleV0gPSB2YWx1ZTsKICB9CiAgcmV0dXJuIGltcG9ydHM7Cn0KYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc0hvc3RJbmZvKGhvc3RJbmZvLCByZWxCdW5kbGVzUGF0aCA9ICIuLyIpIHsKICBjb25zdCBpbXBvcnRzID0gaG9zdEluZm8uc2hhcmVkLnJlZHVjZSgKICAgIChhY2MsIGN1cikgPT4gKHsKICAgICAgLi4uYWNjLAogICAgICBbY3VyLnBhY2thZ2VOYW1lXTogcmVsQnVuZGxlc1BhdGggKyBjdXIub3V0RmlsZU5hbWUKICAgIH0pLAogICAge30KICApOwogIGZvciAoY29uc3Qgc2hhcmVkIG9mIGhvc3RJbmZvLnNoYXJlZCkgewogICAgc2V0RXh0ZXJuYWxVcmwoc2hhcmVkLCByZWxCdW5kbGVzUGF0aCArIHNoYXJlZC5vdXRGaWxlTmFtZSk7CiAgfQogIHJldHVybiB7IGltcG9ydHMsIHNjb3Blczoge30gfTsKfQoKLy8gbGlicy9uYXRpdmUtZmVkZXJhdGlvbi1ub2RlL3NyYy9saWIvdXRpbHMvaW1wb3J0LW1hcC1sb2FkZXIuanMKaW1wb3J0IHBhdGggZnJvbSAicGF0aCI7CmltcG9ydCB1cmwgZnJvbSAidXJsIjsKaW1wb3J0IHsgcHJvbWlzZXMgYXMgZnMgfSBmcm9tICJmcyI7CnZhciBJTVBPUlRfTUFQX0ZJTEVfTkFNRSA9ICJub2RlLmltcG9ydG1hcCI7CnZhciBiYXNlVVJMID0gdXJsLnBhdGhUb0ZpbGVVUkwocHJvY2Vzcy5jd2QoKSkgKyBwYXRoLnNlcDsKZnVuY3Rpb24gcmVzb2x2ZUFuZENvbXBvc2VJbXBvcnRNYXAocGFyc2VkKSB7CiAgaWYgKCFpc1BsYWluT2JqZWN0KHBhcnNlZCkpIHsKICAgIHRocm93IEVycm9yKGBJbnZhbGlkIGltcG9ydCBtYXAgLSB0b3AgbGV2ZWwgbXVzdCBiZSBhbiBvYmplY3RgKTsKICB9CiAgbGV0IHNvcnRlZEFuZE5vcm1hbGl6ZWRJbXBvcnRzID0ge307CiAgaWYgKHBhcnNlZC5oYXNPd25Qcm9wZXJ0eSgiaW1wb3J0cyIpKSB7CiAgICBpZiAoIWlzUGxhaW5PYmplY3QocGFyc2VkLmltcG9ydHMpKSB7CiAgICAgIHRocm93IEVycm9yKGBJbnZhbGlkIGltcG9ydCBtYXAgLSAiaW1wb3J0cyIgcHJvcGVydHkgbXVzdCBiZSBhbiBvYmplY3RgKTsKICAgIH0KICAgIHNvcnRlZEFuZE5vcm1hbGl6ZWRJbXBvcnRzID0gc29ydEFuZE5vcm1hbGl6ZVNwZWNpZmllck1hcCgKICAgICAgcGFyc2VkLmltcG9ydHMsCiAgICAgIGJhc2VVUkwKICAgICk7CiAgfQogIGxldCBzb3J0ZWRBbmROb3JtYWxpemVkU2NvcGVzID0ge307CiAgaWYgKHBhcnNlZC5oYXNPd25Qcm9wZXJ0eSgic2NvcGVzIikpIHsKICAgIGlmICghaXNQbGFpbk9iamVjdChwYXJzZWQuc2NvcGVzKSkgewogICAgICB0aHJvdyBFcnJvcihgSW52YWxpZCBpbXBvcnQgbWFwIC0gInNjb3BlcyIgcHJvcGVydHkgbXVzdCBiZSBhbiBvYmplY3RgKTsKICAgIH0KICAgIHNvcnRlZEFuZE5vcm1hbGl6ZWRTY29wZXMgPSBzb3J0QW5kTm9ybWFsaXplU2NvcGVzKHBhcnNlZC5zY29wZXMsIGJhc2VVUkwpOwogIH0KICBjb25zdCBpbnZhbGlkS2V5cyA9IE9iamVjdC5rZXlzKHBhcnNlZCkuZmlsdGVyKAogICAgKGtleSkgPT4ga2V5ICE9PSAiaW1wb3J0cyIgJiYga2V5ICE9PSAic2NvcGVzIgogICk7CiAgaWYgKGludmFsaWRLZXlzLmxlbmd0aCA+IDApIHsKICAgIGNvbnNvbGUud2FybigKICAgICAgYEludmFsaWQgdG9wLWxldmVsIGtleSR7aW52YWxpZEtleXMubGVuZ3RoID4gMCA/ICJzIiA6ICIifSBpbiBpbXBvcnQgbWFwIC0gJHtpbnZhbGlkS2V5cy5qb2luKCIsICIpfWAKICAgICk7CiAgfQogIHJldHVybiB7CiAgICBpbXBvcnRzOiBzb3J0ZWRBbmROb3JtYWxpemVkSW1wb3J0cywKICAgIHNjb3Blczogc29ydGVkQW5kTm9ybWFsaXplZFNjb3BlcwogIH07Cn0KZnVuY3Rpb24gc29ydEFuZE5vcm1hbGl6ZVNwZWNpZmllck1hcChtYXAsIGJhc2VVUkwyKSB7CiAgY29uc3Qgbm9ybWFsaXplZCA9IHt9OwogIGZvciAobGV0IHNwZWNpZmllcktleSBpbiBtYXApIHsKICAgIGNvbnN0IHZhbHVlID0gbWFwW3NwZWNpZmllcktleV07CiAgICBjb25zdCBub3JtYWxpemVkU3BlY2lmaWVyS2V5ID0gbm9ybWFsaXplU3BlY2lmaWVyS2V5KHNwZWNpZmllcktleSwgYmFzZVVSTDIpOwogICAgaWYgKG5vcm1hbGl6ZWRTcGVjaWZpZXJLZXkgPT09IG51bGwpIHsKICAgICAgY29udGludWU7CiAgICB9CiAgICBsZXQgYWRkcmVzc1VSTCA9IHBhcnNlVVJMTGlrZVNwZWNpZmllcih2YWx1ZSwgYmFzZVVSTDIpOwogICAgaWYgKGFkZHJlc3NVUkwgPT09IG51bGwpIHsKICAgICAgY29uc29sZS53YXJuKAogICAgICAgIGBJbnZhbGlkIFVSTCBhZGRyZXNzIGZvciBpbXBvcnQgbWFwIHNwZWNpZmllciAnJHtzcGVjaWZpZXJLZXl9J2AKICAgICAgKTsKICAgICAgbm9ybWFsaXplZFtub3JtYWxpemVkU3BlY2lmaWVyS2V5XSA9IG51bGw7CiAgICAgIGNvbnRpbnVlOwogICAgfQogICAgaWYgKHNwZWNpZmllcktleS5lbmRzV2l0aCgiLyIpICYmICFhZGRyZXNzVVJMLmVuZHNXaXRoKCIvIikpIHsKICAgICAgY29uc29sZS53YXJuKAogICAgICAgIGBJbnZhbGlkIFVSTCBhZGRyZXNzIGZvciBpbXBvcnQgbWFwIHNwZWNpZmllciAnJHtzcGVjaWZpZXJLZXl9JyAtIHNpbmNlIHRoZSBzcGVjaWZpZXIgZW5kcyBpbiBzbGFzaCwgc28gbXVzdCB0aGUgYWRkcmVzc2AKICAgICAgKTsKICAgICAgbm9ybWFsaXplZFtub3JtYWxpemVkU3BlY2lmaWVyS2V5XSA9IG51bGw7CiAgICAgIGNvbnRpbnVlOwogICAgfQogICAgbm9ybWFsaXplZFtub3JtYWxpemVkU3BlY2lmaWVyS2V5XSA9IGFkZHJlc3NVUkw7CiAgfQogIHJldHVybiBub3JtYWxpemVkOwp9CmZ1bmN0aW9uIG5vcm1hbGl6ZVNwZWNpZmllcktleShrZXkpIHsKICBpZiAoa2V5ID09PSAiIikgewogICAgY29uc29sZS53YXJuKGBTcGVjaWZpZXIga2V5cyBpbiBpbXBvcnQgbWFwcyBtYXkgbm90IGJlIHRoZSBlbXB0eSBzdHJpbmdgKTsKICAgIHJldHVybiBudWxsOwogIH0KICByZXR1cm4gcGFyc2VVUkxMaWtlU3BlY2lmaWVyKGtleSwgYmFzZVVSTCkgfHwga2V5Owp9CmZ1bmN0aW9uIHBhcnNlVVJMTGlrZVNwZWNpZmllcihzcGVjaWZpZXIsIGJhc2VVUkwyKSB7CiAgY29uc3QgdXNlQmFzZVVybEFzUGFyZW50ID0gc3BlY2lmaWVyLnN0YXJ0c1dpdGgoIi8iKSB8fCBzcGVjaWZpZXIuc3RhcnRzV2l0aCgiLi8iKSB8fCBzcGVjaWZpZXIuc3RhcnRzV2l0aCgiLi4vIik7CiAgdHJ5IHsKICAgIHJldHVybiBuZXcgVVJMKHNwZWNpZmllciwgdXNlQmFzZVVybEFzUGFyZW50ID8gYmFzZVVSTDIgOiB2b2lkIDApLmhyZWY7CiAgfSBjYXRjaCB7CiAgICByZXR1cm4gbnVsbDsKICB9Cn0KZnVuY3Rpb24gc29ydEFuZE5vcm1hbGl6ZVNjb3BlcyhtYXAsIGJhc2VVUkwyKSB7CiAgbGV0IG5vcm1hbGl6ZWQgPSB7fTsKICBmb3IgKGxldCBzY29wZVByZWZpeCBpbiBtYXApIHsKICAgIGNvbnN0IHBvdGVudGlhbFNwZWNpZmllck1hcCA9IG1hcFtzY29wZVByZWZpeF07CiAgICBpZiAoIWlzUGxhaW5PYmplY3QocG90ZW50aWFsU3BlY2lmaWVyTWFwKSkgewogICAgICB0aHJvdyBUeXBlRXJyb3IoCiAgICAgICAgYFRoZSB2YWx1ZSBvZiBzY29wZSAke3Njb3BlUHJlZml4fSBtdXN0IGJlIGEgSlNPTiBvYmplY3RgCiAgICAgICk7CiAgICB9CiAgICBsZXQgc2NvcGVQcmVmaXhVUkw7CiAgICB0cnkgewogICAgICBzY29wZVByZWZpeFVSTCA9IG5ldyBVUkwoc2NvcGVQcmVmaXgsIGJhc2VVUkwyKS5ocmVmOwogICAgfSBjYXRjaCB7CiAgICAgIGNvbnNvbGUud2FybigKICAgICAgICBgU2NvcGUgcHJlZml4IFVSTCAnJHtzY29wZVByZWZpeH0nIHdhcyBub3QgcGFyc2VhYmxlIGluIGltcG9ydCBtYXBgCiAgICAgICk7CiAgICAgIGNvbnRpbnVlOwogICAgfQogICAgbm9ybWFsaXplZFtzY29wZVByZWZpeFVSTF0gPSBzb3J0QW5kTm9ybWFsaXplU3BlY2lmaWVyTWFwKAogICAgICBwb3RlbnRpYWxTcGVjaWZpZXJNYXAsCiAgICAgIGJhc2VVUkwyCiAgICApOwogIH0KICByZXR1cm4gbm9ybWFsaXplZDsKfQpmdW5jdGlvbiBpc1BsYWluT2JqZWN0KG9iaikgewogIHJldHVybiBvYmogPT09IE9iamVjdChvYmopICYmICFBcnJheS5pc0FycmF5KG9iaik7Cn0KdmFyIGltcG9ydE1hcFByb21pc2UgPSBnZXRJbXBvcnRNYXBQcm9taXNlKCk7CmFzeW5jIGZ1bmN0aW9uIGdldEltcG9ydE1hcFByb21pc2UoKSB7CiAgY29uc3QgcmVsYXRpdmVQYXRoID0gcHJvY2Vzcy5lbnYuSU1QT1JUX01BUF9QQVRIIHx8IElNUE9SVF9NQVBfRklMRV9OQU1FOwogIGNvbnN0IGltcG9ydE1hcFBhdGggPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgcmVsYXRpdmVQYXRoKTsKICBsZXQgc3RyOwogIHRyeSB7CiAgICBzdHIgPSBhd2FpdCBmcy5yZWFkRmlsZShpbXBvcnRNYXBQYXRoKTsKICB9IGNhdGNoIChlcnIpIHsKICAgIHJldHVybiBlbXB0eU1hcCgpOwogIH0KICBsZXQganNvbjsKICB0cnkgewogICAganNvbiA9IGF3YWl0IEpTT04ucGFyc2Uoc3RyKTsKICB9IGNhdGNoIChlcnIpIHsKICAgIHRocm93IEVycm9yKAogICAgICBgSW1wb3J0IG1hcCBhdCAke2ltcG9ydE1hcFBhdGh9IGNvbnRhaW5zIGludmFsaWQganNvbjogJHtlcnIubWVzc2FnZX1gCiAgICApOwogIH0KICByZXR1cm4gcmVzb2x2ZUFuZENvbXBvc2VJbXBvcnRNYXAoanNvbik7Cn0KZ2xvYmFsLm5vZGVMb2FkZXIgPSBnbG9iYWwubm9kZUxvYWRlciB8fCB7fTsKZ2xvYmFsLm5vZGVMb2FkZXIuc2V0SW1wb3J0TWFwUHJvbWlzZSA9IGZ1bmN0aW9uIHNldEltcG9ydE1hcFByb21pc2UocHJvbWlzZSkgewogIGltcG9ydE1hcFByb21pc2UgPSBwcm9taXNlLnRoZW4oKG1hcCkgPT4gewogICAgcmV0dXJuIHJlc29sdmVBbmRDb21wb3NlSW1wb3J0TWFwKG1hcCk7CiAgfSk7Cn07CmZ1bmN0aW9uIGVtcHR5TWFwKCkgewogIHJldHVybiB7IGltcG9ydHM6IHt9LCBzY29wZXM6IHt9IH07Cn0KCi8vIGxpYnMvbmF0aXZlLWZlZGVyYXRpb24tbm9kZS9zcmMvbGliL3V0aWxzL2xvYWRlci1hcy1kYXRhLXVybC5qcwp2YXIgcmVzb2x2ZXIgPSAiYVcxd2IzSjBJSEJoZEdnZ1puSnZiU0FuY0dGMGFDYzdDbWx0Y0c5eWRDQjFjbXdnWm5KdmJTQW5kWEpzSnpzS2FXMXdiM0owSUhzZ2NISnZiV2x6WlhNZ1lYTWdabk1nZlNCbWNtOXRJQ2RtY3ljN0NncGxlSEJ2Y25RZ1kyOXVjM1FnU1UxUVQxSlVYMDFCVUY5R1NVeEZYMDVCVFVVZ1BTQW5ibTlrWlM1cGJYQnZjblJ0WVhBbk93b0tZMjl1YzNRZ1ltRnpaVlZTVENBOUlIVnliQzV3WVhSb1ZHOUdhV3hsVlZKTUtIQnliMk5sYzNNdVkzZGtLQ2twSUNzZ2NHRjBhQzV6WlhBN0Nnb3ZMeUJvZEhSd2N6b3ZMM2RwWTJjdVoybDBhSFZpTG1sdkwybHRjRzl5ZEMxdFlYQnpMeU51WlhjdGNtVnpiMngyWlMxaGJHZHZjbWwwYUcwS1pYaHdiM0owSUdaMWJtTjBhVzl1SUhKbGMyOXNkbVZUY0dWamFXWnBaWElvYVcxd2IzSjBUV0Z3TENCemNHVmphV1pwWlhJc0lIQmhjbVZ1ZEZWU1RDa2dld29nSUd4bGRDQmpkWEp5Wlc1MFFtRnpaVlZTVERzS0lDQnBaaUFvY0dGeVpXNTBWVkpNS1NCN0NpQWdJQ0JqYjI1emRDQnNZWE4wVTJ4aGMyaEpibVJsZUNBOUlIQmhjbVZ1ZEZWU1RDNXNZWE4wU1c1a1pYaFBaaWh3WVhSb0xuTmxjQ2s3Q2lBZ0lDQmpkWEp5Wlc1MFFtRnpaVlZTVENBOUlIQmhjbVZ1ZEZWU1RDNXpiR2xqWlNnd0xDQnNZWE4wVTJ4aGMyaEpibVJsZUNBcklERXBPd29nSUgwZ1pXeHpaU0I3Q2lBZ0lDQmpkWEp5Wlc1MFFtRnpaVlZTVENBOUlHSmhjMlZWVWt3N0NpQWdmUW9nSUdOdmJuTjBJRzV2Y20xaGJHbDZaV1JUY0dWamFXWnBaWElnUFFvZ0lDQWdjR0Z5YzJWVlVreE1hV3RsVTNCbFkybG1hV1Z5S0hOd1pXTnBabWxsY2l3Z1kzVnljbVZ1ZEVKaGMyVlZVa3dwSUh4OElITndaV05wWm1sbGNqc0tJQ0JtYjNJZ0tHeGxkQ0J6WTI5d1pWQnlaV1pwZUNCcGJpQnBiWEJ2Y25STllYQXVjMk52Y0dWektTQjdDaUFnSUNCcFppQW9DaUFnSUNBZ0lITmpiM0JsVUhKbFptbDRJRDA5UFNCamRYSnlaVzUwUW1GelpWVlNUQ0I4ZkFvZ0lDQWdJQ0FvYzJOdmNHVlFjbVZtYVhndVpXNWtjMWRwZEdnb0p5OG5LU0FtSmlCamRYSnlaVzUwUW1GelpWVlNUQzV6ZEdGeWRITlhhWFJvS0hOamIzQmxVSEpsWm1sNEtTa0tJQ0FnSUNrZ2V3b2dJQ0FnSUNCamIyNXpkQ0J6WTI5d1pVbHRjRzl5ZEhOTllYUmphQ0E5SUhKbGMyOXNkbVZKYlhCdmNuUnpUV0YwWTJnb0NpQWdJQ0FnSUNBZ2JtOXliV0ZzYVhwbFpGTndaV05wWm1sbGNpd0tJQ0FnSUNBZ0lDQnBiWEJ2Y25STllYQXVjMk52Y0dWelczTmpiM0JsVUhKbFptbDRYUW9nSUNBZ0lDQXBPd29nSUNBZ0lDQnBaaUFvYzJOdmNHVkpiWEJ2Y25SelRXRjBZMmdwSUhzS0lDQWdJQ0FnSUNCeVpYUjFjbTRnYzJOdmNHVkpiWEJ2Y25SelRXRjBZMmc3Q2lBZ0lDQWdJSDBLSUNBZ0lIMGdaV3h6WlNCN0NpQWdJQ0FnSUdOdmJuTjBJSFJ2Y0V4bGRtVnNTVzF3YjNKMGMwMWhkR05vSUQwZ2NtVnpiMngyWlVsdGNHOXlkSE5OWVhSamFDZ0tJQ0FnSUNBZ0lDQnViM0p0WVd4cGVtVmtVM0JsWTJsbWFXVnlMQW9nSUNBZ0lDQWdJR2x0Y0c5eWRFMWhjQzVwYlhCdmNuUnpDaUFnSUNBZ0lDazdDaUFnSUNBZ0lHbG1JQ2gwYjNCTVpYWmxiRWx0Y0c5eWRITk5ZWFJqYUNrZ2V3b2dJQ0FnSUNBZ0lISmxkSFZ5YmlCMGIzQk1aWFpsYkVsdGNHOXlkSE5OWVhSamFEc0tJQ0FnSUNBZ2ZRb2dJQ0FnZlFvZ0lIMEtDaUFnY21WMGRYSnVJSEpsYzI5c2RtVkpiWEJ2Y25SelRXRjBZMmdvYm05eWJXRnNhWHBsWkZOd1pXTnBabWxsY2l3Z2FXMXdiM0owVFdGd0xtbHRjRzl5ZEhNcE93cDlDZ292THlCb2RIUndjem92TDNkcFkyY3VaMmwwYUhWaUxtbHZMMmx0Y0c5eWRDMXRZWEJ6THlOeVpYTnZiSFpsTFdGdUxXbHRjRzl5ZEhNdGJXRjBZMmdLWm5WdVkzUnBiMjRnY21WemIyeDJaVWx0Y0c5eWRITk5ZWFJqYUNodWIzSnRZV3hwZW1Wa1UzQmxZMmxtYVdWeUxDQnpjR1ZqYVdacFpYSk5ZWEFwSUhzS0lDQm1iM0lnS0d4bGRDQnpjR1ZqYVdacFpYSkxaWGtnYVc0Z2MzQmxZMmxtYVdWeVRXRndLU0I3Q2lBZ0lDQmpiMjV6ZENCeVpYTnZiSFYwYVc5dVVtVnpkV3gwSUQwZ2MzQmxZMmxtYVdWeVRXRndXM053WldOcFptbGxja3RsZVYwN0Nnb2dJQ0FnYVdZZ0tITndaV05wWm1sbGNrdGxlU0E5UFQwZ2JtOXliV0ZzYVhwbFpGTndaV05wWm1sbGNpa2dld29nSUNBZ0lDQnBaaUFvY21WemIyeDFkR2x2YmxKbGMzVnNkQ0E5UFQwZ2JuVnNiQ2tnZXdvZ0lDQWdJQ0FnSUhSb2NtOTNJRlI1Y0dWRmNuSnZjaWdLSUNBZ0lDQWdJQ0FnSUdCVWFHVWdhVzF3YjNKMElHMWhjQ0J5WlhOdmJIVjBhVzl1SUc5bUlDUjdjM0JsWTJsbWFXVnlTMlY1ZlNCbVlXbHNaV1FnWkhWbElIUnZJR0VnYm5Wc2JDQmxiblJ5ZVdBS0lDQWdJQ0FnSUNBcE93b2dJQ0FnSUNCOUNpQWdJQ0FnSUhKbGRIVnliaUJ5WlhOdmJIVjBhVzl1VW1WemRXeDBPd29nSUNBZ2ZTQmxiSE5sSUdsbUlDZ0tJQ0FnSUNBZ2MzQmxZMmxtYVdWeVMyVjVMbVZ1WkhOWGFYUm9LQ2N2SnlrZ0ppWUtJQ0FnSUNBZ2JtOXliV0ZzYVhwbFpGTndaV05wWm1sbGNpNXpkR0Z5ZEhOWGFYUm9LSE53WldOcFptbGxja3RsZVNrS0lDQWdJQ2tnZXdvZ0lDQWdJQ0JwWmlBb2NtVnpiMngxZEdsdmJsSmxjM1ZzZENBOVBUMGdiblZzYkNrZ2V3b2dJQ0FnSUNBZ0lIUm9jbTkzSUZSNWNHVkZjbkp2Y2lnS0lDQWdJQ0FnSUNBZ0lHQlVhR1VnYVcxd2IzSjBJRzFoY0NCeVpYTnZiSFYwYVc5dUlHOW1JQ1I3YzNCbFkybG1hV1Z5UzJWNWZTQm1ZV2xzWldRZ1pIVmxJSFJ2SUdFZ2JuVnNiQ0JsYm5SeWVXQUtJQ0FnSUNBZ0lDQXBPd29nSUNBZ0lDQjlDaUFnSUNBZ0lHTnZibk4wSUdGbWRHVnlVSEpsWm1sNElEMGdibTl5YldGc2FYcGxaRk53WldOcFptbGxjaTV6YkdsalpTaHpjR1ZqYVdacFpYSkxaWGt1YkdWdVozUm9LVHNLSUNBZ0lDQWdkSEo1SUhzS0lDQWdJQ0FnSUNCeVpYUjFjbTRnYm1WM0lGVlNUQ2hoWm5SbGNsQnlaV1pwZUN3Z2NtVnpiMngxZEdsdmJsSmxjM1ZzZENrdWFISmxaanNLSUNBZ0lDQWdmU0JqWVhSamFDQjdDaUFnSUNBZ0lDQWdkR2h5YjNjZ1ZIbHdaVVZ5Y205eUtBb2dJQ0FnSUNBZ0lDQWdZRlJvWlNCcGJYQnZjblFnYldGd0lISmxjMjlzZFhScGIyNGdiMllnSkh0emNHVmphV1pwWlhKTFpYbDlJR1poYVd4bFpDQmtkV1VnZEc4Z1ZWSk1JSEJoY25ObElHWmhhV3gxY21WZ0NpQWdJQ0FnSUNBZ0tUc0tJQ0FnSUNBZ2ZRb2dJQ0FnZlFvZ0lIMEtDaUFnY21WMGRYSnVJRzUxYkd3N0NuMEtDaTh2SUdoMGRIQnpPaTh2ZDJsalp5NW5hWFJvZFdJdWFXOHZhVzF3YjNKMExXMWhjSE12STNCaGNuTnBibWNLWlhod2IzSjBJR1oxYm1OMGFXOXVJSEpsYzI5c2RtVkJibVJEYjIxd2IzTmxTVzF3YjNKMFRXRndLSEJoY25ObFpDa2dld29nSUM4dklGTjBaWEFnTWdvZ0lHbG1JQ2doYVhOUWJHRnBiazlpYW1WamRDaHdZWEp6WldRcEtTQjdDaUFnSUNCMGFISnZkeUJGY25KdmNpaGdTVzUyWVd4cFpDQnBiWEJ2Y25RZ2JXRndJQzBnZEc5d0lHeGxkbVZzSUcxMWMzUWdZbVVnWVc0Z2IySnFaV04wWUNrN0NpQWdmUW9LSUNBdkx5QlRkR1Z3SURNS0lDQnNaWFFnYzI5eWRHVmtRVzVrVG05eWJXRnNhWHBsWkVsdGNHOXlkSE1nUFNCN2ZUc0tDaUFnTHk4Z1UzUmxjQ0EwQ2lBZ2FXWWdLSEJoY25ObFpDNW9ZWE5QZDI1UWNtOXdaWEowZVNnbmFXMXdiM0owY3ljcEtTQjdDaUFnSUNBdkx5QlRkR1Z3SURRdU1Rb2dJQ0FnYVdZZ0tDRnBjMUJzWVdsdVQySnFaV04wS0hCaGNuTmxaQzVwYlhCdmNuUnpLU2tnZXdvZ0lDQWdJQ0IwYUhKdmR5QkZjbkp2Y2loZ1NXNTJZV3hwWkNCcGJYQnZjblFnYldGd0lDMGdJbWx0Y0c5eWRITWlJSEJ5YjNCbGNuUjVJRzExYzNRZ1ltVWdZVzRnYjJKcVpXTjBZQ2s3Q2lBZ0lDQjlDZ29nSUNBZ0x5OGdVM1JsY0NBMExqSUtJQ0FnSUhOdmNuUmxaRUZ1WkU1dmNtMWhiR2w2WldSSmJYQnZjblJ6SUQwZ2MyOXlkRUZ1WkU1dmNtMWhiR2w2WlZOd1pXTnBabWxsY2sxaGNDZ0tJQ0FnSUNBZ2NHRnljMlZrTG1sdGNHOXlkSE1zQ2lBZ0lDQWdJR0poYzJWVlVrd0tJQ0FnSUNrN0NpQWdmUW9LSUNBdkx5QlRkR1Z3SURVS0lDQnNaWFFnYzI5eWRHVmtRVzVrVG05eWJXRnNhWHBsWkZOamIzQmxjeUE5SUh0OU93b0tJQ0F2THlCVGRHVndJRFlLSUNCcFppQW9jR0Z5YzJWa0xtaGhjMDkzYmxCeWIzQmxjblI1S0NkelkyOXdaWE1uS1NrZ2V3b2dJQ0FnTHk4Z1UzUmxjQ0EyTGpFS0lDQWdJR2xtSUNnaGFYTlFiR0ZwYms5aWFtVmpkQ2h3WVhKelpXUXVjMk52Y0dWektTa2dld29nSUNBZ0lDQjBhSEp2ZHlCRmNuSnZjaWhnU1c1MllXeHBaQ0JwYlhCdmNuUWdiV0Z3SUMwZ0luTmpiM0JsY3lJZ2NISnZjR1Z5ZEhrZ2JYVnpkQ0JpWlNCaGJpQnZZbXBsWTNSZ0tUc0tJQ0FnSUgwS0NpQWdJQ0F2THlCVGRHVndJRFl1TWdvZ0lDQWdjMjl5ZEdWa1FXNWtUbTl5YldGc2FYcGxaRk5qYjNCbGN5QTlJSE52Y25SQmJtUk9iM0p0WVd4cGVtVlRZMjl3WlhNb2NHRnljMlZrTG5OamIzQmxjeXdnWW1GelpWVlNUQ2s3Q2lBZ2ZRb0tJQ0F2THlCVGRHVndJRGNLSUNCamIyNXpkQ0JwYm5aaGJHbGtTMlY1Y3lBOUlFOWlhbVZqZEM1clpYbHpLSEJoY25ObFpDa3VabWxzZEdWeUtBb2dJQ0FnS0d0bGVTa2dQVDRnYTJWNUlDRTlQU0FuYVcxd2IzSjBjeWNnSmlZZ2EyVjVJQ0U5UFNBbmMyTnZjR1Z6SndvZ0lDazdDaUFnYVdZZ0tHbHVkbUZzYVdSTFpYbHpMbXhsYm1kMGFDQStJREFwSUhzS0lDQWdJR052Ym5OdmJHVXVkMkZ5YmlnS0lDQWdJQ0FnWUVsdWRtRnNhV1FnZEc5d0xXeGxkbVZzSUd0bGVTUjdDaUFnSUNBZ0lDQWdhVzUyWVd4cFpFdGxlWE11YkdWdVozUm9JRDRnTUNBL0lDZHpKeUE2SUNjbkNpQWdJQ0FnSUgwZ2FXNGdhVzF3YjNKMElHMWhjQ0F0SUNSN2FXNTJZV3hwWkV0bGVYTXVhbTlwYmlnbkxDQW5LWDFnQ2lBZ0lDQXBPd29nSUgwS0NpQWdMeThnVTNSbGNDQTRDaUFnY21WMGRYSnVJSHNLSUNBZ0lHbHRjRzl5ZEhNNklITnZjblJsWkVGdVpFNXZjbTFoYkdsNlpXUkpiWEJ2Y25SekxBb2dJQ0FnYzJOdmNHVnpPaUJ6YjNKMFpXUkJibVJPYjNKdFlXeHBlbVZrVTJOdmNHVnpMQW9nSUgwN0NuMEtDaTh2SUdoMGRIQnpPaTh2ZDJsalp5NW5hWFJvZFdJdWFXOHZhVzF3YjNKMExXMWhjSE12STNOdmNuUXRZVzVrTFc1dmNtMWhiR2w2WlMxaExYTndaV05wWm1sbGNpMXRZWEFLWm5WdVkzUnBiMjRnYzI5eWRFRnVaRTV2Y20xaGJHbDZaVk53WldOcFptbGxjazFoY0NodFlYQXNJR0poYzJWVlVrd3BJSHNLSUNCamIyNXpkQ0J1YjNKdFlXeHBlbVZrSUQwZ2UzMDdDZ29nSUdadmNpQW9iR1YwSUhOd1pXTnBabWxsY2t0bGVTQnBiaUJ0WVhBcElIc0tJQ0FnSUdOdmJuTjBJSFpoYkhWbElEMGdiV0Z3VzNOd1pXTnBabWxsY2t0bGVWMDdDZ29nSUNBZ1kyOXVjM1FnYm05eWJXRnNhWHBsWkZOd1pXTnBabWxsY2t0bGVTQTlJRzV2Y20xaGJHbDZaVk53WldOcFptbGxja3RsZVNoemNHVmphV1pwWlhKTFpYa3NJR0poYzJWVlVrd3BPd29nSUNBZ2FXWWdLRzV2Y20xaGJHbDZaV1JUY0dWamFXWnBaWEpMWlhrZ1BUMDlJRzUxYkd3cElIc0tJQ0FnSUNBZ1kyOXVkR2x1ZFdVN0NpQWdJQ0I5Q2dvZ0lDQWdiR1YwSUdGa1pISmxjM05WVWt3Z1BTQndZWEp6WlZWU1RFeHBhMlZUY0dWamFXWnBaWElvZG1Gc2RXVXNJR0poYzJWVlVrd3BPd29nSUNBZ2FXWWdLR0ZrWkhKbGMzTlZVa3dnUFQwOUlHNTFiR3dwSUhzS0lDQWdJQ0FnWTI5dWMyOXNaUzUzWVhKdUtBb2dJQ0FnSUNBZ0lHQkpiblpoYkdsa0lGVlNUQ0JoWkdSeVpYTnpJR1p2Y2lCcGJYQnZjblFnYldGd0lITndaV05wWm1sbGNpQW5KSHR6Y0dWamFXWnBaWEpMWlhsOUoyQUtJQ0FnSUNBZ0tUc0tJQ0FnSUNBZ2JtOXliV0ZzYVhwbFpGdHViM0p0WVd4cGVtVmtVM0JsWTJsbWFXVnlTMlY1WFNBOUlHNTFiR3c3Q2lBZ0lDQWdJR052Ym5ScGJuVmxPd29nSUNBZ2ZRb0tJQ0FnSUdsbUlDaHpjR1ZqYVdacFpYSkxaWGt1Wlc1a2MxZHBkR2dvSnk4bktTQW1KaUFoWVdSa2NtVnpjMVZTVEM1bGJtUnpWMmwwYUNnbkx5Y3BLU0I3Q2lBZ0lDQWdJR052Ym5OdmJHVXVkMkZ5YmlnS0lDQWdJQ0FnSUNCZ1NXNTJZV3hwWkNCVlVrd2dZV1JrY21WemN5Qm1iM0lnYVcxd2IzSjBJRzFoY0NCemNHVmphV1pwWlhJZ0p5UjdjM0JsWTJsbWFXVnlTMlY1ZlNjZ0xTQnphVzVqWlNCMGFHVWdjM0JsWTJsbWFXVnlJR1Z1WkhNZ2FXNGdjMnhoYzJnc0lITnZJRzExYzNRZ2RHaGxJR0ZrWkhKbGMzTmdDaUFnSUNBZ0lDazdDaUFnSUNBZ0lHNXZjbTFoYkdsNlpXUmJibTl5YldGc2FYcGxaRk53WldOcFptbGxja3RsZVYwZ1BTQnVkV3hzT3dvZ0lDQWdJQ0JqYjI1MGFXNTFaVHNLSUNBZ0lIMEtDaUFnSUNCdWIzSnRZV3hwZW1Wa1cyNXZjbTFoYkdsNlpXUlRjR1ZqYVdacFpYSkxaWGxkSUQwZ1lXUmtjbVZ6YzFWU1REc0tJQ0I5Q2dvZ0lISmxkSFZ5YmlCdWIzSnRZV3hwZW1Wa093cDlDZ292THlCb2RIUndjem92TDNkcFkyY3VaMmwwYUhWaUxtbHZMMmx0Y0c5eWRDMXRZWEJ6THlOdWIzSnRZV3hwZW1VdFlTMXpjR1ZqYVdacFpYSXRhMlY1Q21aMWJtTjBhVzl1SUc1dmNtMWhiR2w2WlZOd1pXTnBabWxsY2t0bGVTaHJaWGtwSUhzS0lDQnBaaUFvYTJWNUlEMDlQU0FuSnlrZ2V3b2dJQ0FnWTI5dWMyOXNaUzUzWVhKdUtHQlRjR1ZqYVdacFpYSWdhMlY1Y3lCcGJpQnBiWEJ2Y25RZ2JXRndjeUJ0WVhrZ2JtOTBJR0psSUhSb1pTQmxiWEIwZVNCemRISnBibWRnS1RzS0lDQWdJSEpsZEhWeWJpQnVkV3hzT3dvZ0lIMEtDaUFnY21WMGRYSnVJSEJoY25ObFZWSk1UR2xyWlZOd1pXTnBabWxsY2loclpYa3NJR0poYzJWVlVrd3BJSHg4SUd0bGVUc0tmUW9LTHk4Z2FIUjBjSE02THk5M2FXTm5MbWRwZEdoMVlpNXBieTlwYlhCdmNuUXRiV0Z3Y3k4amNHRnljMlV0WVMxMWNtd3RiR2xyWlMxcGJYQnZjblF0YzNCbFkybG1hV1Z5Q21aMWJtTjBhVzl1SUhCaGNuTmxWVkpNVEdsclpWTndaV05wWm1sbGNpaHpjR1ZqYVdacFpYSXNJR0poYzJWVlVrd3BJSHNLSUNCamIyNXpkQ0IxYzJWQ1lYTmxWWEpzUVhOUVlYSmxiblFnUFFvZ0lDQWdjM0JsWTJsbWFXVnlMbk4wWVhKMGMxZHBkR2dvSnk4bktTQjhmQW9nSUNBZ2MzQmxZMmxtYVdWeUxuTjBZWEowYzFkcGRHZ29KeTR2SnlrZ2ZId0tJQ0FnSUhOd1pXTnBabWxsY2k1emRHRnlkSE5YYVhSb0tDY3VMaThuS1RzS0NpQWdkSEo1SUhzS0lDQWdJSEpsZEhWeWJpQnVaWGNnVlZKTUtITndaV05wWm1sbGNpd2dkWE5sUW1GelpWVnliRUZ6VUdGeVpXNTBJRDhnWW1GelpWVlNUQ0E2SUhWdVpHVm1hVzVsWkNrdWFISmxaanNLSUNCOUlHTmhkR05vSUhzS0lDQWdJSEpsZEhWeWJpQnVkV3hzT3dvZ0lIMEtmUW9LTHk4Z2FIUjBjSE02THk5M2FXTm5MbWRwZEdoMVlpNXBieTlwYlhCdmNuUXRiV0Z3Y3k4amMyOXlkQzFoYm1RdGJtOXliV0ZzYVhwbExYTmpiM0JsY3dwbWRXNWpkR2x2YmlCemIzSjBRVzVrVG05eWJXRnNhWHBsVTJOdmNHVnpLRzFoY0N3Z1ltRnpaVlZTVENrZ2V3b2dJR3hsZENCdWIzSnRZV3hwZW1Wa0lEMGdlMzA3Q2dvZ0lHWnZjaUFvYkdWMElITmpiM0JsVUhKbFptbDRJR2x1SUcxaGNDa2dld29nSUNBZ1kyOXVjM1FnY0c5MFpXNTBhV0ZzVTNCbFkybG1hV1Z5VFdGd0lEMGdiV0Z3VzNOamIzQmxVSEpsWm1sNFhUc0tJQ0FnSUdsbUlDZ2hhWE5RYkdGcGJrOWlhbVZqZENod2IzUmxiblJwWVd4VGNHVmphV1pwWlhKTllYQXBLU0I3Q2lBZ0lDQWdJSFJvY205M0lGUjVjR1ZGY25KdmNpZ0tJQ0FnSUNBZ0lDQmdWR2hsSUhaaGJIVmxJRzltSUhOamIzQmxJQ1I3YzJOdmNHVlFjbVZtYVhoOUlHMTFjM1FnWW1VZ1lTQktVMDlPSUc5aWFtVmpkR0FLSUNBZ0lDQWdLVHNLSUNBZ0lIMEtDaUFnSUNCc1pYUWdjMk52Y0dWUWNtVm1hWGhWVWt3N0NpQWdJQ0IwY25rZ2V3b2dJQ0FnSUNCelkyOXdaVkJ5WldacGVGVlNUQ0E5SUc1bGR5QlZVa3dvYzJOdmNHVlFjbVZtYVhnc0lHSmhjMlZWVWt3cExtaHlaV1k3Q2lBZ0lDQjlJR05oZEdOb0lIc0tJQ0FnSUNBZ1kyOXVjMjlzWlM1M1lYSnVLQW9nSUNBZ0lDQWdJR0JUWTI5d1pTQndjbVZtYVhnZ1ZWSk1JQ2NrZTNOamIzQmxVSEpsWm1sNGZTY2dkMkZ6SUc1dmRDQndZWEp6WldGaWJHVWdhVzRnYVcxd2IzSjBJRzFoY0dBS0lDQWdJQ0FnS1RzS0lDQWdJQ0FnWTI5dWRHbHVkV1U3Q2lBZ0lDQjlDZ29nSUNBZ2JtOXliV0ZzYVhwbFpGdHpZMjl3WlZCeVpXWnBlRlZTVEYwZ1BTQnpiM0owUVc1a1RtOXliV0ZzYVhwbFUzQmxZMmxtYVdWeVRXRndLQW9nSUNBZ0lDQndiM1JsYm5ScFlXeFRjR1ZqYVdacFpYSk5ZWEFzQ2lBZ0lDQWdJR0poYzJWVlVrd0tJQ0FnSUNrN0NpQWdmUW9LSUNCeVpYUjFjbTRnYm05eWJXRnNhWHBsWkRzS2ZRb0tablZ1WTNScGIyNGdhWE5RYkdGcGJrOWlhbVZqZENodlltb3BJSHNLSUNCeVpYUjFjbTRnYjJKcUlEMDlQU0JQWW1wbFkzUW9iMkpxS1NBbUppQWhRWEp5WVhrdWFYTkJjbkpoZVNodlltb3BPd3A5Q2dvdkx5QXRMUzBLQ214bGRDQnBiWEJ2Y25STllYQlFjbTl0YVhObElEMGdaMlYwU1cxd2IzSjBUV0Z3VUhKdmJXbHpaU2dwT3dvS1pYaHdiM0owSUdGemVXNWpJR1oxYm1OMGFXOXVJSEpsYzI5c2RtVW9jM0JsWTJsbWFXVnlMQ0JqYjI1MFpYaDBMQ0JrWldaaGRXeDBVbVZ6YjJ4MlpTa2dld29nSUdOdmJuTjBJSHNnY0dGeVpXNTBWVkpNSUQwZ2JuVnNiQ0I5SUQwZ1kyOXVkR1Y0ZERzS0lDQmpiMjV6ZENCcGJYQnZjblJOWVhBZ1BTQmhkMkZwZENCcGJYQnZjblJOWVhCUWNtOXRhWE5sT3dvZ0lHTnZibk4wSUdsdGNHOXlkRTFoY0ZWeWJDQTlJSEpsYzI5c2RtVlRjR1ZqYVdacFpYSW9hVzF3YjNKMFRXRndMQ0J6Y0dWamFXWnBaWElzSUhCaGNtVnVkRlZTVENrN0Nnb2dJSEpsZEhWeWJpQmtaV1poZFd4MFVtVnpiMngyWlNocGJYQnZjblJOWVhCVmNtd2dQejhnYzNCbFkybG1hV1Z5TENCamIyNTBaWGgwTENCa1pXWmhkV3gwVW1WemIyeDJaU2s3Q24wS0NtVjRjRzl5ZENCaGMzbHVZeUJtZFc1amRHbHZiaUJzYjJGa0tIVnliQ3dnWTI5dWRHVjRkQ3dnWkdWbVlYVnNkRXh2WVdRcElIc0tJQ0JwWmlBb2RYSnNMbk4wWVhKMGMxZHBkR2dvSjJoMGRIQTZMeThuS1NCOGZDQjFjbXd1YzNSaGNuUnpWMmwwYUNnbmFIUjBjSE02THk4bktTa2dld29nSUNBZ1kyOXVjM1FnY21WeklEMGdZWGRoYVhRZ1ptVjBZMmdvZFhKc0tUc0tJQ0FnSUdsbUlDZ2hjbVZ6TG05cktTQjdDaUFnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2loZ1JtRnBiR1ZrSUhSdklHWmxkR05vSUcxdlpIVnNaU0JtY205dElDUjdkWEpzZldBcE93b2dJQ0FnZlFvZ0lDQWdZMjl1YzNRZ2MyOTFjbU5sSUQwZ1lYZGhhWFFnY21WekxuUmxlSFFvS1RzS0lDQWdJSEpsZEhWeWJpQjdDaUFnSUNBZ0lITm9iM0owUTJseVkzVnBkRG9nZEhKMVpTd0tJQ0FnSUNBZ1ptOXliV0YwT2lBbmJXOWtkV3hsSnl3Z0NpQWdJQ0FnSUhOdmRYSmpaU3dLSUNBZ0lIMDdDaUFnZlFvS0lDQnBaaUFvSVhWeWJDNXpkR0Z5ZEhOWGFYUm9LQ2R1YjJSbE9pY3BLU0I3Q2lBZ0lDQmpiMjUwWlhoMExtWnZjbTFoZENBOUlDZHRiMlIxYkdVbk93b2dJSDBLSUNBS0lDQnlaWFIxY200Z1pHVm1ZWFZzZEV4dllXUW9kWEpzTENCamIyNTBaWGgwTENCa1pXWmhkV3gwVEc5aFpDazdDbjBLQ21GemVXNWpJR1oxYm1OMGFXOXVJR2RsZEVsdGNHOXlkRTFoY0ZCeWIyMXBjMlVvS1NCN0NpQWdZMjl1YzNRZ2NtVnNZWFJwZG1WUVlYUm9JRDBnY0hKdlkyVnpjeTVsYm5ZdVNVMVFUMUpVWDAxQlVGOVFRVlJJSUh4OElFbE5VRTlTVkY5TlFWQmZSa2xNUlY5T1FVMUZPd29nSUdOdmJuTjBJR2x0Y0c5eWRFMWhjRkJoZEdnZ1BTQndZWFJvTG5KbGMyOXNkbVVvY0hKdlkyVnpjeTVqZDJRb0tTd2djbVZzWVhScGRtVlFZWFJvS1RzS0NpQWdiR1YwSUhOMGNqc0tJQ0IwY25rZ2V3b2dJQ0FnYzNSeUlEMGdZWGRoYVhRZ1puTXVjbVZoWkVacGJHVW9hVzF3YjNKMFRXRndVR0YwYUNrN0NpQWdmU0JqWVhSamFDQW9aWEp5S1NCN0NpQWdJQ0J5WlhSMWNtNGdaVzF3ZEhsTllYQW9LVHNLSUNCOUNnb2dJR3hsZENCcWMyOXVPd29nSUhSeWVTQjdDaUFnSUNCcWMyOXVJRDBnWVhkaGFYUWdTbE5QVGk1d1lYSnpaU2h6ZEhJcE93b2dJSDBnWTJGMFkyZ2dLR1Z5Y2lrZ2V3b2dJQ0FnZEdoeWIzY2dSWEp5YjNJb0NpQWdJQ0FnSUdCSmJYQnZjblFnYldGd0lHRjBJQ1I3YVcxd2IzSjBUV0Z3VUdGMGFIMGdZMjl1ZEdGcGJuTWdhVzUyWVd4cFpDQnFjMjl1T2lBa2UyVnljaTV0WlhOellXZGxmV0FLSUNBZ0lDazdDaUFnZlFvS0lDQnlaWFIxY200Z2NtVnpiMngyWlVGdVpFTnZiWEJ2YzJWSmJYQnZjblJOWVhBb2FuTnZiaWs3Q24wS0NtZHNiMkpoYkM1dWIyUmxURzloWkdWeUlEMGdaMnh2WW1Gc0xtNXZaR1ZNYjJGa1pYSWdmSHdnZTMwN0NncG5iRzlpWVd3dWJtOWtaVXh2WVdSbGNpNXpaWFJKYlhCdmNuUk5ZWEJRY205dGFYTmxJRDBnWm5WdVkzUnBiMjRnYzJWMFNXMXdiM0owVFdGd1VISnZiV2x6WlNod2NtOXRhWE5sS1NCN0NpQWdhVzF3YjNKMFRXRndVSEp2YldselpTQTlJSEJ5YjIxcGMyVXVkR2hsYmlnb2JXRndLU0E5UGlCN0NpQWdJQ0J5WlhSMWNtNGdjbVZ6YjJ4MlpVRnVaRU52YlhCdmMyVkpiWEJ2Y25STllYQW9iV0Z3S1RzS0lDQjlLVHNLZlRzS0NtWjFibU4wYVc5dUlHVnRjSFI1VFdGd0tDa2dld29nSUhKbGRIVnliaUI3SUdsdGNHOXlkSE02SUh0OUxDQnpZMjl3WlhNNklIdDlJSDA3Q24wSyI7CgovLyBsaWJzL25hdGl2ZS1mZWRlcmF0aW9uLW5vZGUvc3JjL2xpYi9ub2RlL2luaXQtbm9kZS1mZWRlcmF0aW9uLnRzCnZhciBkZWZhdWx0T3B0aW9ucyA9IHsKICByZW1vdGVzT3JNYW5pZmVzdFVybDoge30sCiAgcmVsQnVuZGxlUGF0aDogIi4uL2Jyb3dzZXIiLAogIHRocm93SWZSZW1vdGVOb3RGb3VuZDogZmFsc2UKfTsKYXN5bmMgZnVuY3Rpb24gaW5pdE5vZGVGZWRlcmF0aW9uKG9wdGlvbnMpIHsKICBjb25zdCBtZXJnZWRPcHRpb25zID0geyAuLi5kZWZhdWx0T3B0aW9ucywgLi4ub3B0aW9ucyB9OwogIGNvbnN0IGltcG9ydE1hcCA9IGF3YWl0IGNyZWF0ZU5vZGVJbXBvcnRNYXAobWVyZ2VkT3B0aW9ucyk7CiAgYXdhaXQgd3JpdGVJbXBvcnRNYXAoaW1wb3J0TWFwKTsKICBhd2FpdCB3cml0ZVJlc29sdmVyKCk7CiAgcmVnaXN0ZXIocGF0aFRvRmlsZVVSTCgiLi9mZWRlcmF0aW9uLXJlc29sdmVyLm1qcyIpLmhyZWYpOwp9CmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZU5vZGVJbXBvcnRNYXAob3B0aW9ucykgewogIGNvbnN0IHsgcmVtb3Rlc09yTWFuaWZlc3RVcmwsIHJlbEJ1bmRsZVBhdGggfSA9IG9wdGlvbnM7CiAgY29uc3QgcmVtb3RlcyA9IHR5cGVvZiByZW1vdGVzT3JNYW5pZmVzdFVybCA9PT0gIm9iamVjdCIgPyByZW1vdGVzT3JNYW5pZmVzdFVybCA6IGF3YWl0IGxvYWRGc01hbmlmZXN0KHJlbW90ZXNPck1hbmlmZXN0VXJsKTsKICBjb25zdCBob3N0SW5mbyA9IGF3YWl0IGxvYWRGc0ZlZGVyYXRpb25JbmZvKHJlbEJ1bmRsZVBhdGgpOwogIGNvbnN0IGhvc3RJbXBvcnRNYXAgPSBhd2FpdCBwcm9jZXNzSG9zdEluZm8oaG9zdEluZm8sICIuLyIgKyByZWxCdW5kbGVQYXRoKTsKICBjb25zdCByZW1vdGVzSW1wb3J0TWFwID0gYXdhaXQgcHJvY2Vzc1JlbW90ZUluZm9zKHJlbW90ZXMsIHsKICAgIHRocm93SWZSZW1vdGVOb3RGb3VuZDogb3B0aW9ucy50aHJvd0lmUmVtb3RlTm90Rm91bmQsCiAgICBjYWNoZVRhZzogb3B0aW9ucy5jYWNoZVRhZwogIH0pOwogIGNvbnN0IGltcG9ydE1hcCA9IG1lcmdlSW1wb3J0TWFwcyhob3N0SW1wb3J0TWFwLCByZW1vdGVzSW1wb3J0TWFwKTsKICByZXR1cm4gaW1wb3J0TWFwOwp9CmFzeW5jIGZ1bmN0aW9uIGxvYWRGc01hbmlmZXN0KG1hbmlmZXN0VXJsKSB7CiAgY29uc3QgY29udGVudCA9IGF3YWl0IGZzMi5yZWFkRmlsZShtYW5pZmVzdFVybCwgInV0Zi04Iik7CiAgY29uc3QgbWFuaWZlc3QgPSBKU09OLnBhcnNlKGNvbnRlbnQpOwogIHJldHVybiBtYW5pZmVzdDsKfQphc3luYyBmdW5jdGlvbiBsb2FkRnNGZWRlcmF0aW9uSW5mbyhyZWxCdW5kbGVQYXRoKSB7CiAgY29uc3QgbWFuaWZlc3RQYXRoID0gcGF0aDIuam9pbihyZWxCdW5kbGVQYXRoLCAicmVtb3RlRW50cnkuanNvbiIpOwogIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBmczIucmVhZEZpbGUobWFuaWZlc3RQYXRoLCAidXRmLTgiKTsKICBjb25zdCBtYW5pZmVzdCA9IEpTT04ucGFyc2UoY29udGVudCk7CiAgcmV0dXJuIG1hbmlmZXN0Owp9CmFzeW5jIGZ1bmN0aW9uIHdyaXRlSW1wb3J0TWFwKG1hcCkgewogIGF3YWl0IGZzMi53cml0ZUZpbGUoCiAgICBJTVBPUlRfTUFQX0ZJTEVfTkFNRSwKICAgIEpTT04uc3RyaW5naWZ5KG1hcCwgbnVsbCwgMiksCiAgICAidXRmLTgiCiAgKTsKfQphc3luYyBmdW5jdGlvbiB3cml0ZVJlc29sdmVyKCkgewogIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHJlc29sdmVyLCAiYmFzZTY0Iik7CiAgYXdhaXQgZnMyLndyaXRlRmlsZSgiZmVkZXJhdGlvbi1yZXNvbHZlci5tanMiLCBidWZmZXIsICJ1dGYtOCIpOwp9CgovLyBsaWJzL25hdGl2ZS1mZWRlcmF0aW9uLW5vZGUvc3JjL2xpYi91dGlscy9mc3RhcnQtYXJncy1wYXJzZXIudHMKaW1wb3J0ICogYXMgZnMzIGZyb20gIm5vZGU6ZnMiOwp2YXIgZGVmYXVsdEFyZ3MgPSB7CiAgZW50cnk6ICIuL3NlcnZlci5tanMiLAogIHJlbW90ZXNPck1hbmlmZXN0VXJsOiAiLi4vYnJvd3Nlci9mZWRlcmF0aW9uLm1hbmlmZXN0Lmpzb24iLAogIHJlbEJ1bmRsZVBhdGg6ICIuLi9icm93c2VyLyIKfTsKZnVuY3Rpb24gcGFyc2VGU3RhcnRBcmdzKCkgewogIGNvbnN0IGFyZ3MyID0gewogICAgZW50cnk6ICIiLAogICAgcmVtb3Rlc09yTWFuaWZlc3RVcmw6ICIiLAogICAgcmVsQnVuZGxlUGF0aDogIiIKICB9OwogIGxldCBrZXkgPSAiIjsKICBmb3IgKGxldCBpID0gMjsgaSA8IHByb2Nlc3MuYXJndi5sZW5ndGg7IGkrKykgewogICAgY29uc3QgY2FuZCA9IHByb2Nlc3MuYXJndltpXTsKICAgIGlmIChjYW5kLnN0YXJ0c1dpdGgoIi0tIikpIHsKICAgICAgY29uc3QgY2FuZEtleSA9IGNhbmQuc3Vic3RyaW5nKDIpOwogICAgICBpZiAoZGVmYXVsdEFyZ3NbY2FuZEtleV0pIHsKICAgICAgICBrZXkgPSBjYW5kS2V5OwogICAgICB9IGVsc2UgewogICAgICAgIGNvbnNvbGUuZXJyb3IoYHN3aXRjaCAke2NhbmR9IG5vdCBzdXBwb3J0ZWQhYCk7CiAgICAgICAgZXhpdFdpdGhVc2FnZShkZWZhdWx0QXJncyk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoa2V5KSB7CiAgICAgIGFyZ3MyW2tleV0gPSBjYW5kOwogICAgICBrZXkgPSAiIjsKICAgIH0gZWxzZSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoYHVucmVsYWRlZCB2YWx1ZSAke2NhbmR9IWApOwogICAgICBleGl0V2l0aFVzYWdlKGRlZmF1bHRBcmdzKTsKICAgIH0KICB9CiAgYXBwbHlEZWZhdWx0QXJncyhhcmdzMik7CiAgcmV0dXJuIGFyZ3MyOwp9CmZ1bmN0aW9uIGFwcGx5RGVmYXVsdEFyZ3MoYXJnczIpIHsKICBpZiAoYXJnczIucmVsQnVuZGxlUGF0aCAmJiAhYXJnczIucmVtb3Rlc09yTWFuaWZlc3RVcmwpIHsKICAgIGNvbnN0IGNhbmQgPSBkZWZhdWx0QXJncy5yZWxCdW5kbGVQYXRoICsgImZlZGVyYXRpb24ubWFuaWZlc3QuanNvbiI7CiAgICBpZiAoZnMzLmV4aXN0c1N5bmMoY2FuZCkpIHsKICAgICAgYXJnczIucmVtb3Rlc09yTWFuaWZlc3RVcmwgPSBjYW5kOwogICAgfQogIH0KICBhcmdzMi5lbnRyeSA9IGFyZ3MyLmVudHJ5IHx8IGRlZmF1bHRBcmdzLmVudHJ5OwogIGFyZ3MyLnJlbEJ1bmRsZVBhdGggPSBhcmdzMi5yZWxCdW5kbGVQYXRoIHx8IGRlZmF1bHRBcmdzLnJlbEJ1bmRsZVBhdGg7CiAgYXJnczIucmVtb3Rlc09yTWFuaWZlc3RVcmwgPSBhcmdzMi5yZW1vdGVzT3JNYW5pZmVzdFVybCB8fCBkZWZhdWx0QXJncy5yZW1vdGVzT3JNYW5pZmVzdFVybDsKICBpZiAoIWZzMy5leGlzdHNTeW5jKGFyZ3MyLnJlbW90ZXNPck1hbmlmZXN0VXJsKSkgewogICAgYXJnczIucmVtb3Rlc09yTWFuaWZlc3RVcmwgPSB2b2lkIDA7CiAgfQp9CmZ1bmN0aW9uIGV4aXRXaXRoVXNhZ2UoZGVmYXVsdEFyZ3MyKSB7CiAgbGV0IGFyZ3MyID0gIiI7CiAgZm9yIChjb25zdCBrZXkgaW4gZGVmYXVsdEFyZ3MyKSB7CiAgICBhcmdzMiArPSBgWy0tJHtrZXl9ICR7ZGVmYXVsdEFyZ3MyW2tleV19XSBgOwogIH0KICBjb25zb2xlLmxvZygidXNhZ2U6IG5mc3RhcnQgIiArIGFyZ3MyKTsKICBwcm9jZXNzLmV4aXQoMSk7Cn0KCi8vIGxpYnMvbmF0aXZlLWZlZGVyYXRpb24tbm9kZS9zcmMvbGliL3V0aWxzL2ZzdGFydC50cwp2YXIgYXJncyA9IHBhcnNlRlN0YXJ0QXJncygpOwooYXN5bmMgKCkgPT4gewogIGF3YWl0IGluaXROb2RlRmVkZXJhdGlvbih7CiAgICAuLi5hcmdzLnJlbW90ZXNPck1hbmlmZXN0VXJsID8geyByZW1vdGVzT3JNYW5pZmVzdFVybDogYXJncy5yZW1vdGVzT3JNYW5pZmVzdFVybCB9IDoge30sCiAgICByZWxCdW5kbGVQYXRoOiBhcmdzLnJlbEJ1bmRsZVBhdGgKICB9KTsKICBhd2FpdCBpbXBvcnQoYXJncy5lbnRyeSk7Cn0pKCk7Cg==";
|
|
4
|
+
exports.fstart = "Ly8gbGlicy9uYXRpdmUtZmVkZXJhdGlvbi1ub2RlL3NyYy9saWIvbm9kZS9pbml0LW5vZGUtZmVkZXJhdGlvbi50cwppbXBvcnQgeyByZWdpc3RlciB9IGZyb20gIm5vZGU6bW9kdWxlIjsKaW1wb3J0IHsgcGF0aFRvRmlsZVVSTCB9IGZyb20gIm5vZGU6dXJsIjsKaW1wb3J0ICogYXMgZnMyIGZyb20gIm5vZGU6ZnMvcHJvbWlzZXMiOwppbXBvcnQgKiBhcyBwYXRoMiBmcm9tICJub2RlOnBhdGgiOwoKLy8gbGlicy9uYXRpdmUtZmVkZXJhdGlvbi1ydW50aW1lL3NyYy9saWIvbW9kZWwvZ2xvYmFsLWNhY2hlLnRzCnZhciBuZk5hbWVzcGFjZSA9ICJfX05BVElWRV9GRURFUkFUSU9OX18iOwp2YXIgZ2xvYmFsMiA9IGdsb2JhbFRoaXM7Cmdsb2JhbDJbbmZOYW1lc3BhY2VdID8/PSB7CiAgZXh0ZXJuYWxzOiAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpLAogIHJlbW90ZU5hbWVzVG9SZW1vdGU6IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCksCiAgYmFzZVVybFRvUmVtb3RlTmFtZXM6IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCkKfTsKdmFyIGdsb2JhbENhY2hlID0gZ2xvYmFsMltuZk5hbWVzcGFjZV07CgovLyBsaWJzL25hdGl2ZS1mZWRlcmF0aW9uLXJ1bnRpbWUvc3JjL2xpYi9tb2RlbC9leHRlcm5hbHMudHMKdmFyIGV4dGVybmFscyA9IGdsb2JhbENhY2hlLmV4dGVybmFsczsKZnVuY3Rpb24gZ2V0RXh0ZXJuYWxLZXkoc2hhcmVkKSB7CiAgcmV0dXJuIGAke3NoYXJlZC5wYWNrYWdlTmFtZX1AJHtzaGFyZWQudmVyc2lvbn1gOwp9CmZ1bmN0aW9uIGdldEV4dGVybmFsVXJsKHNoYXJlZCkgewogIGNvbnN0IHBhY2thZ2VLZXkgPSBnZXRFeHRlcm5hbEtleShzaGFyZWQpOwogIHJldHVybiBleHRlcm5hbHMuZ2V0KHBhY2thZ2VLZXkpOwp9CmZ1bmN0aW9uIHNldEV4dGVybmFsVXJsKHNoYXJlZCwgdXJsMikgewogIGNvbnN0IHBhY2thZ2VLZXkgPSBnZXRFeHRlcm5hbEtleShzaGFyZWQpOwogIGV4dGVybmFscy5zZXQocGFja2FnZUtleSwgdXJsMik7Cn0KCi8vIGxpYnMvbmF0aXZlLWZlZGVyYXRpb24tcnVudGltZS9zcmMvbGliL21vZGVsL2ltcG9ydC1tYXAudHMKZnVuY3Rpb24gbWVyZ2VJbXBvcnRNYXBzKG1hcDEsIG1hcDIpIHsKICByZXR1cm4gewogICAgaW1wb3J0czogeyAuLi5tYXAxLmltcG9ydHMsIC4uLm1hcDIuaW1wb3J0cyB9LAogICAgc2NvcGVzOiB7IC4uLm1hcDEuc2NvcGVzLCAuLi5tYXAyLnNjb3BlcyB9CiAgfTsKfQoKLy8gbGlicy9uYXRpdmUtZmVkZXJhdGlvbi1ydW50aW1lL3NyYy9saWIvbW9kZWwvcmVtb3Rlcy50cwp2YXIgcmVtb3RlTmFtZXNUb1JlbW90ZSA9IGdsb2JhbENhY2hlLnJlbW90ZU5hbWVzVG9SZW1vdGU7CnZhciBiYXNlVXJsVG9SZW1vdGVOYW1lcyA9IGdsb2JhbENhY2hlLmJhc2VVcmxUb1JlbW90ZU5hbWVzOwpmdW5jdGlvbiBhZGRSZW1vdGUocmVtb3RlTmFtZSwgcmVtb3RlKSB7CiAgcmVtb3RlTmFtZXNUb1JlbW90ZS5zZXQocmVtb3RlTmFtZSwgcmVtb3RlKTsKICBiYXNlVXJsVG9SZW1vdGVOYW1lcy5zZXQocmVtb3RlLmJhc2VVcmwsIHJlbW90ZU5hbWUpOwp9CgovLyBsaWJzL25hdGl2ZS1mZWRlcmF0aW9uLXJ1bnRpbWUvc3JjL2xpYi91dGlscy9wYXRoLXV0aWxzLnRzCmZ1bmN0aW9uIGdldERpcmVjdG9yeSh1cmwyKSB7CiAgY29uc3QgcGFydHMgPSB1cmwyLnNwbGl0KCIvIik7CiAgcGFydHMucG9wKCk7CiAgcmV0dXJuIHBhcnRzLmpvaW4oIi8iKTsKfQpmdW5jdGlvbiBqb2luUGF0aHMocGF0aDEsIHBhdGgyMikgewogIHdoaWxlIChwYXRoMS5lbmRzV2l0aCgiLyIpKSB7CiAgICBwYXRoMSA9IHBhdGgxLnN1YnN0cmluZygwLCBwYXRoMS5sZW5ndGggLSAxKTsKICB9CiAgaWYgKHBhdGgyMi5zdGFydHNXaXRoKCIuLyIpKSB7CiAgICBwYXRoMjIgPSBwYXRoMjIuc3Vic3RyaW5nKDIsIHBhdGgyMi5sZW5ndGgpOwogIH0KICByZXR1cm4gYCR7cGF0aDF9LyR7cGF0aDIyfWA7Cn0KCi8vIGxpYnMvbmF0aXZlLWZlZGVyYXRpb24tcnVudGltZS9zcmMvbGliL3dhdGNoLWZlZGVyYXRpb24tYnVpbGQudHMKZnVuY3Rpb24gd2F0Y2hGZWRlcmF0aW9uQnVpbGRDb21wbGV0aW9uKGVuZHBvaW50KSB7CiAgY29uc3QgZXZlbnRTb3VyY2UgPSBuZXcgRXZlbnRTb3VyY2UoZW5kcG9pbnQpOwogIGV2ZW50U291cmNlLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2ZW50KSB7CiAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShldmVudC5kYXRhKTsKICAgIGlmIChkYXRhLnR5cGUgPT09ICJmZWRlcmF0aW9uLXJlYnVpbGQtY29tcGxldGUiIC8qIENPTVBMRVRFRCAqLykgewogICAgICBjb25zb2xlLmxvZygiW0ZlZGVyYXRpb25dIFJlYnVpbGQgY29tcGxldGVkLCByZWxvYWRpbmcuLi4iKTsKICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpOwogICAgfQogIH07CiAgZXZlbnRTb3VyY2Uub25lcnJvciA9IGZ1bmN0aW9uKGV2ZW50KSB7CiAgICBjb25zb2xlLndhcm4oIltGZWRlcmF0aW9uXSBTU0UgY29ubmVjdGlvbiBlcnJvcjoiLCBldmVudCk7CiAgfTsKfQoKLy8gbGlicy9uYXRpdmUtZmVkZXJhdGlvbi1ydW50aW1lL3NyYy9saWIvaW5pdC1mZWRlcmF0aW9uLnRzCmFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NSZW1vdGVJbmZvcyhyZW1vdGVzLCBvcHRpb25zID0geyB0aHJvd0lmUmVtb3RlTm90Rm91bmQ6IGZhbHNlIH0pIHsKICBjb25zdCBwcm9jZXNzUmVtb3RlSW5mb1Byb21pc2VzID0gT2JqZWN0LmtleXMocmVtb3RlcykubWFwKAogICAgYXN5bmMgKHJlbW90ZU5hbWUpID0+IHsKICAgICAgdHJ5IHsKICAgICAgICBsZXQgdXJsMiA9IHJlbW90ZXNbcmVtb3RlTmFtZV07CiAgICAgICAgaWYgKG9wdGlvbnMuY2FjaGVUYWcpIHsKICAgICAgICAgIGNvbnN0IGFkZEFwcGVuZCA9IHJlbW90ZXNbcmVtb3RlTmFtZV0uaW5jbHVkZXMoIj8iKSA/ICImIiA6ICI/IjsKICAgICAgICAgIHVybDIgKz0gYCR7YWRkQXBwZW5kfXQ9JHtvcHRpb25zLmNhY2hlVGFnfWA7CiAgICAgICAgfQogICAgICAgIHJldHVybiBhd2FpdCBwcm9jZXNzUmVtb3RlSW5mbyh1cmwyLCByZW1vdGVOYW1lKTsKICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgIGNvbnN0IGVycm9yID0gYEVycm9yIGxvYWRpbmcgcmVtb3RlIGVudHJ5IGZvciAke3JlbW90ZU5hbWV9IGZyb20gZmlsZSAke3JlbW90ZXNbcmVtb3RlTmFtZV19YDsKICAgICAgICBpZiAob3B0aW9ucy50aHJvd0lmUmVtb3RlTm90Rm91bmQpIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvcik7CiAgICAgICAgfQogICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICB9CiAgKTsKICBjb25zdCByZW1vdGVJbXBvcnRNYXBzID0gYXdhaXQgUHJvbWlzZS5hbGwocHJvY2Vzc1JlbW90ZUluZm9Qcm9taXNlcyk7CiAgY29uc3QgaW1wb3J0TWFwID0gcmVtb3RlSW1wb3J0TWFwcy5yZWR1Y2UoCiAgICAoYWNjLCByZW1vdGVJbXBvcnRNYXApID0+IHJlbW90ZUltcG9ydE1hcCA/IG1lcmdlSW1wb3J0TWFwcyhhY2MsIHJlbW90ZUltcG9ydE1hcCkgOiBhY2MsCiAgICB7IGltcG9ydHM6IHt9LCBzY29wZXM6IHt9IH0KICApOwogIHJldHVybiBpbXBvcnRNYXA7Cn0KYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1JlbW90ZUluZm8oZmVkZXJhdGlvbkluZm9VcmwsIHJlbW90ZU5hbWUpIHsKICBjb25zdCBiYXNlVXJsID0gZ2V0RGlyZWN0b3J5KGZlZGVyYXRpb25JbmZvVXJsKTsKICBjb25zdCByZW1vdGVJbmZvID0gYXdhaXQgbG9hZEZlZGVyYXRpb25JbmZvKGZlZGVyYXRpb25JbmZvVXJsKTsKICBpZiAoIXJlbW90ZU5hbWUpIHsKICAgIHJlbW90ZU5hbWUgPSByZW1vdGVJbmZvLm5hbWU7CiAgfQogIGlmIChyZW1vdGVJbmZvLmJ1aWxkTm90aWZpY2F0aW9uc0VuZHBvaW50KSB7CiAgICB3YXRjaEZlZGVyYXRpb25CdWlsZENvbXBsZXRpb24oCiAgICAgIGJhc2VVcmwgKyByZW1vdGVJbmZvLmJ1aWxkTm90aWZpY2F0aW9uc0VuZHBvaW50CiAgICApOwogIH0KICBjb25zdCBpbXBvcnRNYXAgPSBjcmVhdGVSZW1vdGVJbXBvcnRNYXAocmVtb3RlSW5mbywgcmVtb3RlTmFtZSwgYmFzZVVybCk7CiAgYWRkUmVtb3RlKHJlbW90ZU5hbWUsIHsgLi4ucmVtb3RlSW5mbywgYmFzZVVybCB9KTsKICByZXR1cm4gaW1wb3J0TWFwOwp9CmZ1bmN0aW9uIGNyZWF0ZVJlbW90ZUltcG9ydE1hcChyZW1vdGVJbmZvLCByZW1vdGVOYW1lLCBiYXNlVXJsKSB7CiAgY29uc3QgaW1wb3J0cyA9IHByb2Nlc3NFeHBvc2VkKHJlbW90ZUluZm8sIHJlbW90ZU5hbWUsIGJhc2VVcmwpOwogIGNvbnN0IHNjb3BlcyA9IHByb2Nlc3NSZW1vdGVJbXBvcnRzKHJlbW90ZUluZm8sIGJhc2VVcmwpOwogIHJldHVybiB7IGltcG9ydHMsIHNjb3BlcyB9Owp9CmFzeW5jIGZ1bmN0aW9uIGxvYWRGZWRlcmF0aW9uSW5mbyh1cmwyKSB7CiAgY29uc3QgaW5mbyA9IGF3YWl0IGZldGNoKHVybDIpLnRoZW4oKHIpID0+IHIuanNvbigpKTsKICByZXR1cm4gaW5mbzsKfQpmdW5jdGlvbiBwcm9jZXNzUmVtb3RlSW1wb3J0cyhyZW1vdGVJbmZvLCBiYXNlVXJsKSB7CiAgY29uc3Qgc2NvcGVzID0ge307CiAgY29uc3Qgc2NvcGVkSW1wb3J0cyA9IHt9OwogIGZvciAoY29uc3Qgc2hhcmVkIG9mIHJlbW90ZUluZm8uc2hhcmVkKSB7CiAgICBjb25zdCBvdXRGaWxlTmFtZSA9IGdldEV4dGVybmFsVXJsKHNoYXJlZCkgPz8gam9pblBhdGhzKGJhc2VVcmwsIHNoYXJlZC5vdXRGaWxlTmFtZSk7CiAgICBzZXRFeHRlcm5hbFVybChzaGFyZWQsIG91dEZpbGVOYW1lKTsKICAgIHNjb3BlZEltcG9ydHNbc2hhcmVkLnBhY2thZ2VOYW1lXSA9IG91dEZpbGVOYW1lOwogIH0KICBzY29wZXNbYmFzZVVybCArICIvIl0gPSBzY29wZWRJbXBvcnRzOwogIHJldHVybiBzY29wZXM7Cn0KZnVuY3Rpb24gcHJvY2Vzc0V4cG9zZWQocmVtb3RlSW5mbywgcmVtb3RlTmFtZSwgYmFzZVVybCkgewogIGNvbnN0IGltcG9ydHMgPSB7fTsKICBmb3IgKGNvbnN0IGV4cG9zZWQgb2YgcmVtb3RlSW5mby5leHBvc2VzKSB7CiAgICBjb25zdCBrZXkgPSBqb2luUGF0aHMocmVtb3RlTmFtZSwgZXhwb3NlZC5rZXkpOwogICAgY29uc3QgdmFsdWUgPSBqb2luUGF0aHMoYmFzZVVybCwgZXhwb3NlZC5vdXRGaWxlTmFtZSk7CiAgICBpbXBvcnRzW2tleV0gPSB2YWx1ZTsKICB9CiAgcmV0dXJuIGltcG9ydHM7Cn0KYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc0hvc3RJbmZvKGhvc3RJbmZvLCByZWxCdW5kbGVzUGF0aCA9ICIuLyIpIHsKICBjb25zdCBpbXBvcnRzID0gaG9zdEluZm8uc2hhcmVkLnJlZHVjZSgKICAgIChhY2MsIGN1cikgPT4gKHsKICAgICAgLi4uYWNjLAogICAgICBbY3VyLnBhY2thZ2VOYW1lXTogcmVsQnVuZGxlc1BhdGggKyBjdXIub3V0RmlsZU5hbWUKICAgIH0pLAogICAge30KICApOwogIGZvciAoY29uc3Qgc2hhcmVkIG9mIGhvc3RJbmZvLnNoYXJlZCkgewogICAgc2V0RXh0ZXJuYWxVcmwoc2hhcmVkLCByZWxCdW5kbGVzUGF0aCArIHNoYXJlZC5vdXRGaWxlTmFtZSk7CiAgfQogIHJldHVybiB7IGltcG9ydHMsIHNjb3Blczoge30gfTsKfQoKLy8gbGlicy9uYXRpdmUtZmVkZXJhdGlvbi1ub2RlL3NyYy9saWIvdXRpbHMvaW1wb3J0LW1hcC1sb2FkZXIuanMKaW1wb3J0IHBhdGggZnJvbSAicGF0aCI7CmltcG9ydCB1cmwgZnJvbSAidXJsIjsKaW1wb3J0IHsgcHJvbWlzZXMgYXMgZnMgfSBmcm9tICJmcyI7CnZhciBJTVBPUlRfTUFQX0ZJTEVfTkFNRSA9ICJub2RlLmltcG9ydG1hcCI7CnZhciBiYXNlVVJMID0gdXJsLnBhdGhUb0ZpbGVVUkwocHJvY2Vzcy5jd2QoKSkgKyBwYXRoLnNlcDsKZnVuY3Rpb24gcmVzb2x2ZUFuZENvbXBvc2VJbXBvcnRNYXAocGFyc2VkKSB7CiAgaWYgKCFpc1BsYWluT2JqZWN0KHBhcnNlZCkpIHsKICAgIHRocm93IEVycm9yKGBJbnZhbGlkIGltcG9ydCBtYXAgLSB0b3AgbGV2ZWwgbXVzdCBiZSBhbiBvYmplY3RgKTsKICB9CiAgbGV0IHNvcnRlZEFuZE5vcm1hbGl6ZWRJbXBvcnRzID0ge307CiAgaWYgKHBhcnNlZC5oYXNPd25Qcm9wZXJ0eSgiaW1wb3J0cyIpKSB7CiAgICBpZiAoIWlzUGxhaW5PYmplY3QocGFyc2VkLmltcG9ydHMpKSB7CiAgICAgIHRocm93IEVycm9yKGBJbnZhbGlkIGltcG9ydCBtYXAgLSAiaW1wb3J0cyIgcHJvcGVydHkgbXVzdCBiZSBhbiBvYmplY3RgKTsKICAgIH0KICAgIHNvcnRlZEFuZE5vcm1hbGl6ZWRJbXBvcnRzID0gc29ydEFuZE5vcm1hbGl6ZVNwZWNpZmllck1hcCgKICAgICAgcGFyc2VkLmltcG9ydHMsCiAgICAgIGJhc2VVUkwKICAgICk7CiAgfQogIGxldCBzb3J0ZWRBbmROb3JtYWxpemVkU2NvcGVzID0ge307CiAgaWYgKHBhcnNlZC5oYXNPd25Qcm9wZXJ0eSgic2NvcGVzIikpIHsKICAgIGlmICghaXNQbGFpbk9iamVjdChwYXJzZWQuc2NvcGVzKSkgewogICAgICB0aHJvdyBFcnJvcihgSW52YWxpZCBpbXBvcnQgbWFwIC0gInNjb3BlcyIgcHJvcGVydHkgbXVzdCBiZSBhbiBvYmplY3RgKTsKICAgIH0KICAgIHNvcnRlZEFuZE5vcm1hbGl6ZWRTY29wZXMgPSBzb3J0QW5kTm9ybWFsaXplU2NvcGVzKHBhcnNlZC5zY29wZXMsIGJhc2VVUkwpOwogIH0KICBjb25zdCBpbnZhbGlkS2V5cyA9IE9iamVjdC5rZXlzKHBhcnNlZCkuZmlsdGVyKAogICAgKGtleSkgPT4ga2V5ICE9PSAiaW1wb3J0cyIgJiYga2V5ICE9PSAic2NvcGVzIgogICk7CiAgaWYgKGludmFsaWRLZXlzLmxlbmd0aCA+IDApIHsKICAgIGNvbnNvbGUud2FybigKICAgICAgYEludmFsaWQgdG9wLWxldmVsIGtleSR7aW52YWxpZEtleXMubGVuZ3RoID4gMCA/ICJzIiA6ICIifSBpbiBpbXBvcnQgbWFwIC0gJHtpbnZhbGlkS2V5cy5qb2luKCIsICIpfWAKICAgICk7CiAgfQogIHJldHVybiB7CiAgICBpbXBvcnRzOiBzb3J0ZWRBbmROb3JtYWxpemVkSW1wb3J0cywKICAgIHNjb3Blczogc29ydGVkQW5kTm9ybWFsaXplZFNjb3BlcwogIH07Cn0KZnVuY3Rpb24gc29ydEFuZE5vcm1hbGl6ZVNwZWNpZmllck1hcChtYXAsIGJhc2VVUkwyKSB7CiAgY29uc3Qgbm9ybWFsaXplZCA9IHt9OwogIGZvciAobGV0IHNwZWNpZmllcktleSBpbiBtYXApIHsKICAgIGNvbnN0IHZhbHVlID0gbWFwW3NwZWNpZmllcktleV07CiAgICBjb25zdCBub3JtYWxpemVkU3BlY2lmaWVyS2V5ID0gbm9ybWFsaXplU3BlY2lmaWVyS2V5KHNwZWNpZmllcktleSwgYmFzZVVSTDIpOwogICAgaWYgKG5vcm1hbGl6ZWRTcGVjaWZpZXJLZXkgPT09IG51bGwpIHsKICAgICAgY29udGludWU7CiAgICB9CiAgICBsZXQgYWRkcmVzc1VSTCA9IHBhcnNlVVJMTGlrZVNwZWNpZmllcih2YWx1ZSwgYmFzZVVSTDIpOwogICAgaWYgKGFkZHJlc3NVUkwgPT09IG51bGwpIHsKICAgICAgY29uc29sZS53YXJuKAogICAgICAgIGBJbnZhbGlkIFVSTCBhZGRyZXNzIGZvciBpbXBvcnQgbWFwIHNwZWNpZmllciAnJHtzcGVjaWZpZXJLZXl9J2AKICAgICAgKTsKICAgICAgbm9ybWFsaXplZFtub3JtYWxpemVkU3BlY2lmaWVyS2V5XSA9IG51bGw7CiAgICAgIGNvbnRpbnVlOwogICAgfQogICAgaWYgKHNwZWNpZmllcktleS5lbmRzV2l0aCgiLyIpICYmICFhZGRyZXNzVVJMLmVuZHNXaXRoKCIvIikpIHsKICAgICAgY29uc29sZS53YXJuKAogICAgICAgIGBJbnZhbGlkIFVSTCBhZGRyZXNzIGZvciBpbXBvcnQgbWFwIHNwZWNpZmllciAnJHtzcGVjaWZpZXJLZXl9JyAtIHNpbmNlIHRoZSBzcGVjaWZpZXIgZW5kcyBpbiBzbGFzaCwgc28gbXVzdCB0aGUgYWRkcmVzc2AKICAgICAgKTsKICAgICAgbm9ybWFsaXplZFtub3JtYWxpemVkU3BlY2lmaWVyS2V5XSA9IG51bGw7CiAgICAgIGNvbnRpbnVlOwogICAgfQogICAgbm9ybWFsaXplZFtub3JtYWxpemVkU3BlY2lmaWVyS2V5XSA9IGFkZHJlc3NVUkw7CiAgfQogIHJldHVybiBub3JtYWxpemVkOwp9CmZ1bmN0aW9uIG5vcm1hbGl6ZVNwZWNpZmllcktleShrZXkpIHsKICBpZiAoa2V5ID09PSAiIikgewogICAgY29uc29sZS53YXJuKGBTcGVjaWZpZXIga2V5cyBpbiBpbXBvcnQgbWFwcyBtYXkgbm90IGJlIHRoZSBlbXB0eSBzdHJpbmdgKTsKICAgIHJldHVybiBudWxsOwogIH0KICByZXR1cm4gcGFyc2VVUkxMaWtlU3BlY2lmaWVyKGtleSwgYmFzZVVSTCkgfHwga2V5Owp9CmZ1bmN0aW9uIHBhcnNlVVJMTGlrZVNwZWNpZmllcihzcGVjaWZpZXIsIGJhc2VVUkwyKSB7CiAgY29uc3QgdXNlQmFzZVVybEFzUGFyZW50ID0gc3BlY2lmaWVyLnN0YXJ0c1dpdGgoIi8iKSB8fCBzcGVjaWZpZXIuc3RhcnRzV2l0aCgiLi8iKSB8fCBzcGVjaWZpZXIuc3RhcnRzV2l0aCgiLi4vIik7CiAgdHJ5IHsKICAgIHJldHVybiBuZXcgVVJMKHNwZWNpZmllciwgdXNlQmFzZVVybEFzUGFyZW50ID8gYmFzZVVSTDIgOiB2b2lkIDApLmhyZWY7CiAgfSBjYXRjaCB7CiAgICByZXR1cm4gbnVsbDsKICB9Cn0KZnVuY3Rpb24gc29ydEFuZE5vcm1hbGl6ZVNjb3BlcyhtYXAsIGJhc2VVUkwyKSB7CiAgbGV0IG5vcm1hbGl6ZWQgPSB7fTsKICBmb3IgKGxldCBzY29wZVByZWZpeCBpbiBtYXApIHsKICAgIGNvbnN0IHBvdGVudGlhbFNwZWNpZmllck1hcCA9IG1hcFtzY29wZVByZWZpeF07CiAgICBpZiAoIWlzUGxhaW5PYmplY3QocG90ZW50aWFsU3BlY2lmaWVyTWFwKSkgewogICAgICB0aHJvdyBUeXBlRXJyb3IoCiAgICAgICAgYFRoZSB2YWx1ZSBvZiBzY29wZSAke3Njb3BlUHJlZml4fSBtdXN0IGJlIGEgSlNPTiBvYmplY3RgCiAgICAgICk7CiAgICB9CiAgICBsZXQgc2NvcGVQcmVmaXhVUkw7CiAgICB0cnkgewogICAgICBzY29wZVByZWZpeFVSTCA9IG5ldyBVUkwoc2NvcGVQcmVmaXgsIGJhc2VVUkwyKS5ocmVmOwogICAgfSBjYXRjaCB7CiAgICAgIGNvbnNvbGUud2FybigKICAgICAgICBgU2NvcGUgcHJlZml4IFVSTCAnJHtzY29wZVByZWZpeH0nIHdhcyBub3QgcGFyc2VhYmxlIGluIGltcG9ydCBtYXBgCiAgICAgICk7CiAgICAgIGNvbnRpbnVlOwogICAgfQogICAgbm9ybWFsaXplZFtzY29wZVByZWZpeFVSTF0gPSBzb3J0QW5kTm9ybWFsaXplU3BlY2lmaWVyTWFwKAogICAgICBwb3RlbnRpYWxTcGVjaWZpZXJNYXAsCiAgICAgIGJhc2VVUkwyCiAgICApOwogIH0KICByZXR1cm4gbm9ybWFsaXplZDsKfQpmdW5jdGlvbiBpc1BsYWluT2JqZWN0KG9iaikgewogIHJldHVybiBvYmogPT09IE9iamVjdChvYmopICYmICFBcnJheS5pc0FycmF5KG9iaik7Cn0KdmFyIGltcG9ydE1hcFByb21pc2UgPSBnZXRJbXBvcnRNYXBQcm9taXNlKCk7CmFzeW5jIGZ1bmN0aW9uIGdldEltcG9ydE1hcFByb21pc2UoKSB7CiAgY29uc3QgcmVsYXRpdmVQYXRoID0gcHJvY2Vzcy5lbnYuSU1QT1JUX01BUF9QQVRIIHx8IElNUE9SVF9NQVBfRklMRV9OQU1FOwogIGNvbnN0IGltcG9ydE1hcFBhdGggPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgcmVsYXRpdmVQYXRoKTsKICBsZXQgc3RyOwogIHRyeSB7CiAgICBzdHIgPSBhd2FpdCBmcy5yZWFkRmlsZShpbXBvcnRNYXBQYXRoKTsKICB9IGNhdGNoIChlcnIpIHsKICAgIHJldHVybiBlbXB0eU1hcCgpOwogIH0KICBsZXQganNvbjsKICB0cnkgewogICAganNvbiA9IGF3YWl0IEpTT04ucGFyc2Uoc3RyKTsKICB9IGNhdGNoIChlcnIpIHsKICAgIHRocm93IEVycm9yKAogICAgICBgSW1wb3J0IG1hcCBhdCAke2ltcG9ydE1hcFBhdGh9IGNvbnRhaW5zIGludmFsaWQganNvbjogJHtlcnIubWVzc2FnZX1gCiAgICApOwogIH0KICByZXR1cm4gcmVzb2x2ZUFuZENvbXBvc2VJbXBvcnRNYXAoanNvbik7Cn0KZ2xvYmFsLm5vZGVMb2FkZXIgPSBnbG9iYWwubm9kZUxvYWRlciB8fCB7fTsKZ2xvYmFsLm5vZGVMb2FkZXIuc2V0SW1wb3J0TWFwUHJvbWlzZSA9IGZ1bmN0aW9uIHNldEltcG9ydE1hcFByb21pc2UocHJvbWlzZSkgewogIGltcG9ydE1hcFByb21pc2UgPSBwcm9taXNlLnRoZW4oKG1hcCkgPT4gewogICAgcmV0dXJuIHJlc29sdmVBbmRDb21wb3NlSW1wb3J0TWFwKG1hcCk7CiAgfSk7Cn07CmZ1bmN0aW9uIGVtcHR5TWFwKCkgewogIHJldHVybiB7IGltcG9ydHM6IHt9LCBzY29wZXM6IHt9IH07Cn0KCi8vIGxpYnMvbmF0aXZlLWZlZGVyYXRpb24tbm9kZS9zcmMvbGliL3V0aWxzL2xvYWRlci1hcy1kYXRhLXVybC5qcwp2YXIgcmVzb2x2ZXIgPSAiYVcxd2IzSjBJSEJoZEdnZ1puSnZiU0FuY0dGMGFDYzdDbWx0Y0c5eWRDQjFjbXdnWm5KdmJTQW5kWEpzSnpzS2FXMXdiM0owSUhzZ2NISnZiV2x6WlhNZ1lYTWdabk1nZlNCbWNtOXRJQ2RtY3ljN0NncGxlSEJ2Y25RZ1kyOXVjM1FnU1UxUVQxSlVYMDFCVUY5R1NVeEZYMDVCVFVVZ1BTQW5ibTlrWlM1cGJYQnZjblJ0WVhBbk93b0tZMjl1YzNRZ1ltRnpaVlZTVENBOUlIVnliQzV3WVhSb1ZHOUdhV3hsVlZKTUtIQnliMk5sYzNNdVkzZGtLQ2twSUNzZ2NHRjBhQzV6WlhBN0Nnb3ZMeUJvZEhSd2N6b3ZMM2RwWTJjdVoybDBhSFZpTG1sdkwybHRjRzl5ZEMxdFlYQnpMeU51WlhjdGNtVnpiMngyWlMxaGJHZHZjbWwwYUcwS1pYaHdiM0owSUdaMWJtTjBhVzl1SUhKbGMyOXNkbVZUY0dWamFXWnBaWElvYVcxd2IzSjBUV0Z3TENCemNHVmphV1pwWlhJc0lIQmhjbVZ1ZEZWU1RDa2dld29nSUd4bGRDQmpkWEp5Wlc1MFFtRnpaVlZTVERzS0lDQnBaaUFvY0dGeVpXNTBWVkpNS1NCN0NpQWdJQ0JqYjI1emRDQnNZWE4wVTJ4aGMyaEpibVJsZUNBOUlIQmhjbVZ1ZEZWU1RDNXNZWE4wU1c1a1pYaFBaaWh3WVhSb0xuTmxjQ2s3Q2lBZ0lDQmpkWEp5Wlc1MFFtRnpaVlZTVENBOUlIQmhjbVZ1ZEZWU1RDNXpiR2xqWlNnd0xDQnNZWE4wVTJ4aGMyaEpibVJsZUNBcklERXBPd29nSUgwZ1pXeHpaU0I3Q2lBZ0lDQmpkWEp5Wlc1MFFtRnpaVlZTVENBOUlHSmhjMlZWVWt3N0NpQWdmUW9nSUdOdmJuTjBJRzV2Y20xaGJHbDZaV1JUY0dWamFXWnBaWElnUFFvZ0lDQWdjR0Z5YzJWVlVreE1hV3RsVTNCbFkybG1hV1Z5S0hOd1pXTnBabWxsY2l3Z1kzVnljbVZ1ZEVKaGMyVlZVa3dwSUh4OElITndaV05wWm1sbGNqc0tJQ0JtYjNJZ0tHeGxkQ0J6WTI5d1pWQnlaV1pwZUNCcGJpQnBiWEJ2Y25STllYQXVjMk52Y0dWektTQjdDaUFnSUNCcFppQW9DaUFnSUNBZ0lITmpiM0JsVUhKbFptbDRJRDA5UFNCamRYSnlaVzUwUW1GelpWVlNUQ0I4ZkFvZ0lDQWdJQ0FvYzJOdmNHVlFjbVZtYVhndVpXNWtjMWRwZEdnb0p5OG5LU0FtSmlCamRYSnlaVzUwUW1GelpWVlNUQzV6ZEdGeWRITlhhWFJvS0hOamIzQmxVSEpsWm1sNEtTa0tJQ0FnSUNrZ2V3b2dJQ0FnSUNCamIyNXpkQ0J6WTI5d1pVbHRjRzl5ZEhOTllYUmphQ0E5SUhKbGMyOXNkbVZKYlhCdmNuUnpUV0YwWTJnb0NpQWdJQ0FnSUNBZ2JtOXliV0ZzYVhwbFpGTndaV05wWm1sbGNpd0tJQ0FnSUNBZ0lDQnBiWEJ2Y25STllYQXVjMk52Y0dWelczTmpiM0JsVUhKbFptbDRYUW9nSUNBZ0lDQXBPd29nSUNBZ0lDQnBaaUFvYzJOdmNHVkpiWEJ2Y25SelRXRjBZMmdwSUhzS0lDQWdJQ0FnSUNCeVpYUjFjbTRnYzJOdmNHVkpiWEJ2Y25SelRXRjBZMmc3Q2lBZ0lDQWdJSDBLSUNBZ0lIMGdaV3h6WlNCN0NpQWdJQ0FnSUdOdmJuTjBJSFJ2Y0V4bGRtVnNTVzF3YjNKMGMwMWhkR05vSUQwZ2NtVnpiMngyWlVsdGNHOXlkSE5OWVhSamFDZ0tJQ0FnSUNBZ0lDQnViM0p0WVd4cGVtVmtVM0JsWTJsbWFXVnlMQW9nSUNBZ0lDQWdJR2x0Y0c5eWRFMWhjQzVwYlhCdmNuUnpDaUFnSUNBZ0lDazdDaUFnSUNBZ0lHbG1JQ2gwYjNCTVpYWmxiRWx0Y0c5eWRITk5ZWFJqYUNrZ2V3b2dJQ0FnSUNBZ0lISmxkSFZ5YmlCMGIzQk1aWFpsYkVsdGNHOXlkSE5OWVhSamFEc0tJQ0FnSUNBZ2ZRb2dJQ0FnZlFvZ0lIMEtDaUFnY21WMGRYSnVJSEpsYzI5c2RtVkpiWEJ2Y25SelRXRjBZMmdvYm05eWJXRnNhWHBsWkZOd1pXTnBabWxsY2l3Z2FXMXdiM0owVFdGd0xtbHRjRzl5ZEhNcE93cDlDZ292THlCb2RIUndjem92TDNkcFkyY3VaMmwwYUhWaUxtbHZMMmx0Y0c5eWRDMXRZWEJ6THlOeVpYTnZiSFpsTFdGdUxXbHRjRzl5ZEhNdGJXRjBZMmdLWm5WdVkzUnBiMjRnY21WemIyeDJaVWx0Y0c5eWRITk5ZWFJqYUNodWIzSnRZV3hwZW1Wa1UzQmxZMmxtYVdWeUxDQnpjR1ZqYVdacFpYSk5ZWEFwSUhzS0lDQm1iM0lnS0d4bGRDQnpjR1ZqYVdacFpYSkxaWGtnYVc0Z2MzQmxZMmxtYVdWeVRXRndLU0I3Q2lBZ0lDQmpiMjV6ZENCeVpYTnZiSFYwYVc5dVVtVnpkV3gwSUQwZ2MzQmxZMmxtYVdWeVRXRndXM053WldOcFptbGxja3RsZVYwN0Nnb2dJQ0FnYVdZZ0tITndaV05wWm1sbGNrdGxlU0E5UFQwZ2JtOXliV0ZzYVhwbFpGTndaV05wWm1sbGNpa2dld29nSUNBZ0lDQnBaaUFvY21WemIyeDFkR2x2YmxKbGMzVnNkQ0E5UFQwZ2JuVnNiQ2tnZXdvZ0lDQWdJQ0FnSUhSb2NtOTNJRlI1Y0dWRmNuSnZjaWdLSUNBZ0lDQWdJQ0FnSUdCVWFHVWdhVzF3YjNKMElHMWhjQ0J5WlhOdmJIVjBhVzl1SUc5bUlDUjdjM0JsWTJsbWFXVnlTMlY1ZlNCbVlXbHNaV1FnWkhWbElIUnZJR0VnYm5Wc2JDQmxiblJ5ZVdBS0lDQWdJQ0FnSUNBcE93b2dJQ0FnSUNCOUNpQWdJQ0FnSUhKbGRIVnliaUJ5WlhOdmJIVjBhVzl1VW1WemRXeDBPd29nSUNBZ2ZTQmxiSE5sSUdsbUlDZ0tJQ0FnSUNBZ2MzQmxZMmxtYVdWeVMyVjVMbVZ1WkhOWGFYUm9LQ2N2SnlrZ0ppWUtJQ0FnSUNBZ2JtOXliV0ZzYVhwbFpGTndaV05wWm1sbGNpNXpkR0Z5ZEhOWGFYUm9LSE53WldOcFptbGxja3RsZVNrS0lDQWdJQ2tnZXdvZ0lDQWdJQ0JwWmlBb2NtVnpiMngxZEdsdmJsSmxjM1ZzZENBOVBUMGdiblZzYkNrZ2V3b2dJQ0FnSUNBZ0lIUm9jbTkzSUZSNWNHVkZjbkp2Y2lnS0lDQWdJQ0FnSUNBZ0lHQlVhR1VnYVcxd2IzSjBJRzFoY0NCeVpYTnZiSFYwYVc5dUlHOW1JQ1I3YzNCbFkybG1hV1Z5UzJWNWZTQm1ZV2xzWldRZ1pIVmxJSFJ2SUdFZ2JuVnNiQ0JsYm5SeWVXQUtJQ0FnSUNBZ0lDQXBPd29nSUNBZ0lDQjlDaUFnSUNBZ0lHTnZibk4wSUdGbWRHVnlVSEpsWm1sNElEMGdibTl5YldGc2FYcGxaRk53WldOcFptbGxjaTV6YkdsalpTaHpjR1ZqYVdacFpYSkxaWGt1YkdWdVozUm9LVHNLSUNBZ0lDQWdkSEo1SUhzS0lDQWdJQ0FnSUNCeVpYUjFjbTRnYm1WM0lGVlNUQ2hoWm5SbGNsQnlaV1pwZUN3Z2NtVnpiMngxZEdsdmJsSmxjM1ZzZENrdWFISmxaanNLSUNBZ0lDQWdmU0JqWVhSamFDQjdDaUFnSUNBZ0lDQWdkR2h5YjNjZ1ZIbHdaVVZ5Y205eUtBb2dJQ0FnSUNBZ0lDQWdZRlJvWlNCcGJYQnZjblFnYldGd0lISmxjMjlzZFhScGIyNGdiMllnSkh0emNHVmphV1pwWlhKTFpYbDlJR1poYVd4bFpDQmtkV1VnZEc4Z1ZWSk1JSEJoY25ObElHWmhhV3gxY21WZ0NpQWdJQ0FnSUNBZ0tUc0tJQ0FnSUNBZ2ZRb2dJQ0FnZlFvZ0lIMEtDaUFnY21WMGRYSnVJRzUxYkd3N0NuMEtDaTh2SUdoMGRIQnpPaTh2ZDJsalp5NW5hWFJvZFdJdWFXOHZhVzF3YjNKMExXMWhjSE12STNCaGNuTnBibWNLWlhod2IzSjBJR1oxYm1OMGFXOXVJSEpsYzI5c2RtVkJibVJEYjIxd2IzTmxTVzF3YjNKMFRXRndLSEJoY25ObFpDa2dld29nSUM4dklGTjBaWEFnTWdvZ0lHbG1JQ2doYVhOUWJHRnBiazlpYW1WamRDaHdZWEp6WldRcEtTQjdDaUFnSUNCMGFISnZkeUJGY25KdmNpaGdTVzUyWVd4cFpDQnBiWEJ2Y25RZ2JXRndJQzBnZEc5d0lHeGxkbVZzSUcxMWMzUWdZbVVnWVc0Z2IySnFaV04wWUNrN0NpQWdmUW9LSUNBdkx5QlRkR1Z3SURNS0lDQnNaWFFnYzI5eWRHVmtRVzVrVG05eWJXRnNhWHBsWkVsdGNHOXlkSE1nUFNCN2ZUc0tDaUFnTHk4Z1UzUmxjQ0EwQ2lBZ2FXWWdLSEJoY25ObFpDNW9ZWE5QZDI1UWNtOXdaWEowZVNnbmFXMXdiM0owY3ljcEtTQjdDaUFnSUNBdkx5QlRkR1Z3SURRdU1Rb2dJQ0FnYVdZZ0tDRnBjMUJzWVdsdVQySnFaV04wS0hCaGNuTmxaQzVwYlhCdmNuUnpLU2tnZXdvZ0lDQWdJQ0IwYUhKdmR5QkZjbkp2Y2loZ1NXNTJZV3hwWkNCcGJYQnZjblFnYldGd0lDMGdJbWx0Y0c5eWRITWlJSEJ5YjNCbGNuUjVJRzExYzNRZ1ltVWdZVzRnYjJKcVpXTjBZQ2s3Q2lBZ0lDQjlDZ29nSUNBZ0x5OGdVM1JsY0NBMExqSUtJQ0FnSUhOdmNuUmxaRUZ1WkU1dmNtMWhiR2w2WldSSmJYQnZjblJ6SUQwZ2MyOXlkRUZ1WkU1dmNtMWhiR2w2WlZOd1pXTnBabWxsY2sxaGNDZ0tJQ0FnSUNBZ2NHRnljMlZrTG1sdGNHOXlkSE1zQ2lBZ0lDQWdJR0poYzJWVlVrd0tJQ0FnSUNrN0NpQWdmUW9LSUNBdkx5QlRkR1Z3SURVS0lDQnNaWFFnYzI5eWRHVmtRVzVrVG05eWJXRnNhWHBsWkZOamIzQmxjeUE5SUh0OU93b0tJQ0F2THlCVGRHVndJRFlLSUNCcFppQW9jR0Z5YzJWa0xtaGhjMDkzYmxCeWIzQmxjblI1S0NkelkyOXdaWE1uS1NrZ2V3b2dJQ0FnTHk4Z1UzUmxjQ0EyTGpFS0lDQWdJR2xtSUNnaGFYTlFiR0ZwYms5aWFtVmpkQ2h3WVhKelpXUXVjMk52Y0dWektTa2dld29nSUNBZ0lDQjBhSEp2ZHlCRmNuSnZjaWhnU1c1MllXeHBaQ0JwYlhCdmNuUWdiV0Z3SUMwZ0luTmpiM0JsY3lJZ2NISnZjR1Z5ZEhrZ2JYVnpkQ0JpWlNCaGJpQnZZbXBsWTNSZ0tUc0tJQ0FnSUgwS0NpQWdJQ0F2THlCVGRHVndJRFl1TWdvZ0lDQWdjMjl5ZEdWa1FXNWtUbTl5YldGc2FYcGxaRk5qYjNCbGN5QTlJSE52Y25SQmJtUk9iM0p0WVd4cGVtVlRZMjl3WlhNb2NHRnljMlZrTG5OamIzQmxjeXdnWW1GelpWVlNUQ2s3Q2lBZ2ZRb0tJQ0F2THlCVGRHVndJRGNLSUNCamIyNXpkQ0JwYm5aaGJHbGtTMlY1Y3lBOUlFOWlhbVZqZEM1clpYbHpLSEJoY25ObFpDa3VabWxzZEdWeUtBb2dJQ0FnS0d0bGVTa2dQVDRnYTJWNUlDRTlQU0FuYVcxd2IzSjBjeWNnSmlZZ2EyVjVJQ0U5UFNBbmMyTnZjR1Z6SndvZ0lDazdDaUFnYVdZZ0tHbHVkbUZzYVdSTFpYbHpMbXhsYm1kMGFDQStJREFwSUhzS0lDQWdJR052Ym5OdmJHVXVkMkZ5YmlnS0lDQWdJQ0FnWUVsdWRtRnNhV1FnZEc5d0xXeGxkbVZzSUd0bGVTUjdDaUFnSUNBZ0lDQWdhVzUyWVd4cFpFdGxlWE11YkdWdVozUm9JRDRnTUNBL0lDZHpKeUE2SUNjbkNpQWdJQ0FnSUgwZ2FXNGdhVzF3YjNKMElHMWhjQ0F0SUNSN2FXNTJZV3hwWkV0bGVYTXVhbTlwYmlnbkxDQW5LWDFnQ2lBZ0lDQXBPd29nSUgwS0NpQWdMeThnVTNSbGNDQTRDaUFnY21WMGRYSnVJSHNLSUNBZ0lHbHRjRzl5ZEhNNklITnZjblJsWkVGdVpFNXZjbTFoYkdsNlpXUkpiWEJ2Y25SekxBb2dJQ0FnYzJOdmNHVnpPaUJ6YjNKMFpXUkJibVJPYjNKdFlXeHBlbVZrVTJOdmNHVnpMQW9nSUgwN0NuMEtDaTh2SUdoMGRIQnpPaTh2ZDJsalp5NW5hWFJvZFdJdWFXOHZhVzF3YjNKMExXMWhjSE12STNOdmNuUXRZVzVrTFc1dmNtMWhiR2w2WlMxaExYTndaV05wWm1sbGNpMXRZWEFLWm5WdVkzUnBiMjRnYzI5eWRFRnVaRTV2Y20xaGJHbDZaVk53WldOcFptbGxjazFoY0NodFlYQXNJR0poYzJWVlVrd3BJSHNLSUNCamIyNXpkQ0J1YjNKdFlXeHBlbVZrSUQwZ2UzMDdDZ29nSUdadmNpQW9iR1YwSUhOd1pXTnBabWxsY2t0bGVTQnBiaUJ0WVhBcElIc0tJQ0FnSUdOdmJuTjBJSFpoYkhWbElEMGdiV0Z3VzNOd1pXTnBabWxsY2t0bGVWMDdDZ29nSUNBZ1kyOXVjM1FnYm05eWJXRnNhWHBsWkZOd1pXTnBabWxsY2t0bGVTQTlJRzV2Y20xaGJHbDZaVk53WldOcFptbGxja3RsZVNoemNHVmphV1pwWlhKTFpYa3NJR0poYzJWVlVrd3BPd29nSUNBZ2FXWWdLRzV2Y20xaGJHbDZaV1JUY0dWamFXWnBaWEpMWlhrZ1BUMDlJRzUxYkd3cElIc0tJQ0FnSUNBZ1kyOXVkR2x1ZFdVN0NpQWdJQ0I5Q2dvZ0lDQWdiR1YwSUdGa1pISmxjM05WVWt3Z1BTQndZWEp6WlZWU1RFeHBhMlZUY0dWamFXWnBaWElvZG1Gc2RXVXNJR0poYzJWVlVrd3BPd29nSUNBZ2FXWWdLR0ZrWkhKbGMzTlZVa3dnUFQwOUlHNTFiR3dwSUhzS0lDQWdJQ0FnWTI5dWMyOXNaUzUzWVhKdUtBb2dJQ0FnSUNBZ0lHQkpiblpoYkdsa0lGVlNUQ0JoWkdSeVpYTnpJR1p2Y2lCcGJYQnZjblFnYldGd0lITndaV05wWm1sbGNpQW5KSHR6Y0dWamFXWnBaWEpMWlhsOUoyQUtJQ0FnSUNBZ0tUc0tJQ0FnSUNBZ2JtOXliV0ZzYVhwbFpGdHViM0p0WVd4cGVtVmtVM0JsWTJsbWFXVnlTMlY1WFNBOUlHNTFiR3c3Q2lBZ0lDQWdJR052Ym5ScGJuVmxPd29nSUNBZ2ZRb0tJQ0FnSUdsbUlDaHpjR1ZqYVdacFpYSkxaWGt1Wlc1a2MxZHBkR2dvSnk4bktTQW1KaUFoWVdSa2NtVnpjMVZTVEM1bGJtUnpWMmwwYUNnbkx5Y3BLU0I3Q2lBZ0lDQWdJR052Ym5OdmJHVXVkMkZ5YmlnS0lDQWdJQ0FnSUNCZ1NXNTJZV3hwWkNCVlVrd2dZV1JrY21WemN5Qm1iM0lnYVcxd2IzSjBJRzFoY0NCemNHVmphV1pwWlhJZ0p5UjdjM0JsWTJsbWFXVnlTMlY1ZlNjZ0xTQnphVzVqWlNCMGFHVWdjM0JsWTJsbWFXVnlJR1Z1WkhNZ2FXNGdjMnhoYzJnc0lITnZJRzExYzNRZ2RHaGxJR0ZrWkhKbGMzTmdDaUFnSUNBZ0lDazdDaUFnSUNBZ0lHNXZjbTFoYkdsNlpXUmJibTl5YldGc2FYcGxaRk53WldOcFptbGxja3RsZVYwZ1BTQnVkV3hzT3dvZ0lDQWdJQ0JqYjI1MGFXNTFaVHNLSUNBZ0lIMEtDaUFnSUNCdWIzSnRZV3hwZW1Wa1cyNXZjbTFoYkdsNlpXUlRjR1ZqYVdacFpYSkxaWGxkSUQwZ1lXUmtjbVZ6YzFWU1REc0tJQ0I5Q2dvZ0lISmxkSFZ5YmlCdWIzSnRZV3hwZW1Wa093cDlDZ292THlCb2RIUndjem92TDNkcFkyY3VaMmwwYUhWaUxtbHZMMmx0Y0c5eWRDMXRZWEJ6THlOdWIzSnRZV3hwZW1VdFlTMXpjR1ZqYVdacFpYSXRhMlY1Q21aMWJtTjBhVzl1SUc1dmNtMWhiR2w2WlZOd1pXTnBabWxsY2t0bGVTaHJaWGtwSUhzS0lDQnBaaUFvYTJWNUlEMDlQU0FuSnlrZ2V3b2dJQ0FnWTI5dWMyOXNaUzUzWVhKdUtHQlRjR1ZqYVdacFpYSWdhMlY1Y3lCcGJpQnBiWEJ2Y25RZ2JXRndjeUJ0WVhrZ2JtOTBJR0psSUhSb1pTQmxiWEIwZVNCemRISnBibWRnS1RzS0lDQWdJSEpsZEhWeWJpQnVkV3hzT3dvZ0lIMEtDaUFnY21WMGRYSnVJSEJoY25ObFZWSk1UR2xyWlZOd1pXTnBabWxsY2loclpYa3NJR0poYzJWVlVrd3BJSHg4SUd0bGVUc0tmUW9LTHk4Z2FIUjBjSE02THk5M2FXTm5MbWRwZEdoMVlpNXBieTlwYlhCdmNuUXRiV0Z3Y3k4amNHRnljMlV0WVMxMWNtd3RiR2xyWlMxcGJYQnZjblF0YzNCbFkybG1hV1Z5Q21aMWJtTjBhVzl1SUhCaGNuTmxWVkpNVEdsclpWTndaV05wWm1sbGNpaHpjR1ZqYVdacFpYSXNJR0poYzJWVlVrd3BJSHNLSUNCamIyNXpkQ0IxYzJWQ1lYTmxWWEpzUVhOUVlYSmxiblFnUFFvZ0lDQWdjM0JsWTJsbWFXVnlMbk4wWVhKMGMxZHBkR2dvSnk4bktTQjhmQW9nSUNBZ2MzQmxZMmxtYVdWeUxuTjBZWEowYzFkcGRHZ29KeTR2SnlrZ2ZId0tJQ0FnSUhOd1pXTnBabWxsY2k1emRHRnlkSE5YYVhSb0tDY3VMaThuS1RzS0NpQWdkSEo1SUhzS0lDQWdJSEpsZEhWeWJpQnVaWGNnVlZKTUtITndaV05wWm1sbGNpd2dkWE5sUW1GelpWVnliRUZ6VUdGeVpXNTBJRDhnWW1GelpWVlNUQ0E2SUhWdVpHVm1hVzVsWkNrdWFISmxaanNLSUNCOUlHTmhkR05vSUhzS0lDQWdJSEpsZEhWeWJpQnVkV3hzT3dvZ0lIMEtmUW9LTHk4Z2FIUjBjSE02THk5M2FXTm5MbWRwZEdoMVlpNXBieTlwYlhCdmNuUXRiV0Z3Y3k4amMyOXlkQzFoYm1RdGJtOXliV0ZzYVhwbExYTmpiM0JsY3dwbWRXNWpkR2x2YmlCemIzSjBRVzVrVG05eWJXRnNhWHBsVTJOdmNHVnpLRzFoY0N3Z1ltRnpaVlZTVENrZ2V3b2dJR3hsZENCdWIzSnRZV3hwZW1Wa0lEMGdlMzA3Q2dvZ0lHWnZjaUFvYkdWMElITmpiM0JsVUhKbFptbDRJR2x1SUcxaGNDa2dld29nSUNBZ1kyOXVjM1FnY0c5MFpXNTBhV0ZzVTNCbFkybG1hV1Z5VFdGd0lEMGdiV0Z3VzNOamIzQmxVSEpsWm1sNFhUc0tJQ0FnSUdsbUlDZ2hhWE5RYkdGcGJrOWlhbVZqZENod2IzUmxiblJwWVd4VGNHVmphV1pwWlhKTllYQXBLU0I3Q2lBZ0lDQWdJSFJvY205M0lGUjVjR1ZGY25KdmNpZ0tJQ0FnSUNBZ0lDQmdWR2hsSUhaaGJIVmxJRzltSUhOamIzQmxJQ1I3YzJOdmNHVlFjbVZtYVhoOUlHMTFjM1FnWW1VZ1lTQktVMDlPSUc5aWFtVmpkR0FLSUNBZ0lDQWdLVHNLSUNBZ0lIMEtDaUFnSUNCc1pYUWdjMk52Y0dWUWNtVm1hWGhWVWt3N0NpQWdJQ0IwY25rZ2V3b2dJQ0FnSUNCelkyOXdaVkJ5WldacGVGVlNUQ0E5SUc1bGR5QlZVa3dvYzJOdmNHVlFjbVZtYVhnc0lHSmhjMlZWVWt3cExtaHlaV1k3Q2lBZ0lDQjlJR05oZEdOb0lIc0tJQ0FnSUNBZ1kyOXVjMjlzWlM1M1lYSnVLQW9nSUNBZ0lDQWdJR0JUWTI5d1pTQndjbVZtYVhnZ1ZWSk1JQ2NrZTNOamIzQmxVSEpsWm1sNGZTY2dkMkZ6SUc1dmRDQndZWEp6WldGaWJHVWdhVzRnYVcxd2IzSjBJRzFoY0dBS0lDQWdJQ0FnS1RzS0lDQWdJQ0FnWTI5dWRHbHVkV1U3Q2lBZ0lDQjlDZ29nSUNBZ2JtOXliV0ZzYVhwbFpGdHpZMjl3WlZCeVpXWnBlRlZTVEYwZ1BTQnpiM0owUVc1a1RtOXliV0ZzYVhwbFUzQmxZMmxtYVdWeVRXRndLQW9nSUNBZ0lDQndiM1JsYm5ScFlXeFRjR1ZqYVdacFpYSk5ZWEFzQ2lBZ0lDQWdJR0poYzJWVlVrd0tJQ0FnSUNrN0NpQWdmUW9LSUNCeVpYUjFjbTRnYm05eWJXRnNhWHBsWkRzS2ZRb0tablZ1WTNScGIyNGdhWE5RYkdGcGJrOWlhbVZqZENodlltb3BJSHNLSUNCeVpYUjFjbTRnYjJKcUlEMDlQU0JQWW1wbFkzUW9iMkpxS1NBbUppQWhRWEp5WVhrdWFYTkJjbkpoZVNodlltb3BPd3A5Q2dvdkx5QXRMUzBLQ214bGRDQnBiWEJ2Y25STllYQlFjbTl0YVhObElEMGdaMlYwU1cxd2IzSjBUV0Z3VUhKdmJXbHpaU2dwT3dvS1pYaHdiM0owSUdGemVXNWpJR1oxYm1OMGFXOXVJSEpsYzI5c2RtVW9jM0JsWTJsbWFXVnlMQ0JqYjI1MFpYaDBMQ0JrWldaaGRXeDBVbVZ6YjJ4MlpTa2dld29nSUdOdmJuTjBJSHNnY0dGeVpXNTBWVkpNSUQwZ2JuVnNiQ0I5SUQwZ1kyOXVkR1Y0ZERzS0lDQmpiMjV6ZENCcGJYQnZjblJOWVhBZ1BTQmhkMkZwZENCcGJYQnZjblJOWVhCUWNtOXRhWE5sT3dvZ0lHTnZibk4wSUdsdGNHOXlkRTFoY0ZWeWJDQTlJSEpsYzI5c2RtVlRjR1ZqYVdacFpYSW9hVzF3YjNKMFRXRndMQ0J6Y0dWamFXWnBaWElzSUhCaGNtVnVkRlZTVENrN0Nnb2dJSEpsZEhWeWJpQmtaV1poZFd4MFVtVnpiMngyWlNocGJYQnZjblJOWVhCVmNtd2dQejhnYzNCbFkybG1hV1Z5TENCamIyNTBaWGgwTENCa1pXWmhkV3gwVW1WemIyeDJaU2s3Q24wS0NtVjRjRzl5ZENCaGMzbHVZeUJtZFc1amRHbHZiaUJzYjJGa0tIVnliQ3dnWTI5dWRHVjRkQ3dnWkdWbVlYVnNkRXh2WVdRcElIc0tJQ0JwWmlBb2RYSnNMbk4wWVhKMGMxZHBkR2dvSjJoMGRIQTZMeThuS1NCOGZDQjFjbXd1YzNSaGNuUnpWMmwwYUNnbmFIUjBjSE02THk4bktTa2dld29nSUNBZ1kyOXVjM1FnY21WeklEMGdZWGRoYVhRZ1ptVjBZMmdvZFhKc0tUc0tJQ0FnSUdsbUlDZ2hjbVZ6TG05cktTQjdDaUFnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2loZ1JtRnBiR1ZrSUhSdklHWmxkR05vSUcxdlpIVnNaU0JtY205dElDUjdkWEpzZldBcE93b2dJQ0FnZlFvZ0lDQWdZMjl1YzNRZ2MyOTFjbU5sSUQwZ1lYZGhhWFFnY21WekxuUmxlSFFvS1RzS0lDQWdJSEpsZEhWeWJpQjdDaUFnSUNBZ0lITm9iM0owUTJseVkzVnBkRG9nZEhKMVpTd0tJQ0FnSUNBZ1ptOXliV0YwT2lBbmJXOWtkV3hsSnl3Z0NpQWdJQ0FnSUhOdmRYSmpaU3dLSUNBZ0lIMDdDaUFnZlFvS0lDQnBaaUFvSVhWeWJDNXpkR0Z5ZEhOWGFYUm9LQ2R1YjJSbE9pY3BLU0I3Q2lBZ0lDQmpiMjUwWlhoMExtWnZjbTFoZENBOUlDZHRiMlIxYkdVbk93b2dJSDBLSUNBS0lDQnlaWFIxY200Z1pHVm1ZWFZzZEV4dllXUW9kWEpzTENCamIyNTBaWGgwTENCa1pXWmhkV3gwVEc5aFpDazdDbjBLQ21GemVXNWpJR1oxYm1OMGFXOXVJR2RsZEVsdGNHOXlkRTFoY0ZCeWIyMXBjMlVvS1NCN0NpQWdZMjl1YzNRZ2NtVnNZWFJwZG1WUVlYUm9JRDBnY0hKdlkyVnpjeTVsYm5ZdVNVMVFUMUpVWDAxQlVGOVFRVlJJSUh4OElFbE5VRTlTVkY5TlFWQmZSa2xNUlY5T1FVMUZPd29nSUdOdmJuTjBJR2x0Y0c5eWRFMWhjRkJoZEdnZ1BTQndZWFJvTG5KbGMyOXNkbVVvY0hKdlkyVnpjeTVqZDJRb0tTd2djbVZzWVhScGRtVlFZWFJvS1RzS0NpQWdiR1YwSUhOMGNqc0tJQ0IwY25rZ2V3b2dJQ0FnYzNSeUlEMGdZWGRoYVhRZ1puTXVjbVZoWkVacGJHVW9hVzF3YjNKMFRXRndVR0YwYUNrN0NpQWdmU0JqWVhSamFDQW9aWEp5S1NCN0NpQWdJQ0J5WlhSMWNtNGdaVzF3ZEhsTllYQW9LVHNLSUNCOUNnb2dJR3hsZENCcWMyOXVPd29nSUhSeWVTQjdDaUFnSUNCcWMyOXVJRDBnWVhkaGFYUWdTbE5QVGk1d1lYSnpaU2h6ZEhJcE93b2dJSDBnWTJGMFkyZ2dLR1Z5Y2lrZ2V3b2dJQ0FnZEdoeWIzY2dSWEp5YjNJb0NpQWdJQ0FnSUdCSmJYQnZjblFnYldGd0lHRjBJQ1I3YVcxd2IzSjBUV0Z3VUdGMGFIMGdZMjl1ZEdGcGJuTWdhVzUyWVd4cFpDQnFjMjl1T2lBa2UyVnljaTV0WlhOellXZGxmV0FLSUNBZ0lDazdDaUFnZlFvS0lDQnlaWFIxY200Z2NtVnpiMngyWlVGdVpFTnZiWEJ2YzJWSmJYQnZjblJOWVhBb2FuTnZiaWs3Q24wS0NtZHNiMkpoYkM1dWIyUmxURzloWkdWeUlEMGdaMnh2WW1Gc0xtNXZaR1ZNYjJGa1pYSWdmSHdnZTMwN0NncG5iRzlpWVd3dWJtOWtaVXh2WVdSbGNpNXpaWFJKYlhCdmNuUk5ZWEJRY205dGFYTmxJRDBnWm5WdVkzUnBiMjRnYzJWMFNXMXdiM0owVFdGd1VISnZiV2x6WlNod2NtOXRhWE5sS1NCN0NpQWdhVzF3YjNKMFRXRndVSEp2YldselpTQTlJSEJ5YjIxcGMyVXVkR2hsYmlnb2JXRndLU0E5UGlCN0NpQWdJQ0J5WlhSMWNtNGdjbVZ6YjJ4MlpVRnVaRU52YlhCdmMyVkpiWEJ2Y25STllYQW9iV0Z3S1RzS0lDQjlLVHNLZlRzS0NtWjFibU4wYVc5dUlHVnRjSFI1VFdGd0tDa2dld29nSUhKbGRIVnliaUI3SUdsdGNHOXlkSE02SUh0OUxDQnpZMjl3WlhNNklIdDlJSDA3Q24wSyI7CgovLyBsaWJzL25hdGl2ZS1mZWRlcmF0aW9uLW5vZGUvc3JjL2xpYi9ub2RlL2luaXQtbm9kZS1mZWRlcmF0aW9uLnRzCnZhciBkZWZhdWx0T3B0aW9ucyA9IHsKICByZW1vdGVzT3JNYW5pZmVzdFVybDoge30sCiAgcmVsQnVuZGxlUGF0aDogIi4uL2Jyb3dzZXIiLAogIHRocm93SWZSZW1vdGVOb3RGb3VuZDogZmFsc2UKfTsKYXN5bmMgZnVuY3Rpb24gaW5pdE5vZGVGZWRlcmF0aW9uKG9wdGlvbnMpIHsKICBjb25zdCBtZXJnZWRPcHRpb25zID0geyAuLi5kZWZhdWx0T3B0aW9ucywgLi4ub3B0aW9ucyB9OwogIGNvbnN0IGltcG9ydE1hcCA9IGF3YWl0IGNyZWF0ZU5vZGVJbXBvcnRNYXAobWVyZ2VkT3B0aW9ucyk7CiAgYXdhaXQgd3JpdGVJbXBvcnRNYXAoaW1wb3J0TWFwKTsKICBhd2FpdCB3cml0ZVJlc29sdmVyKCk7CiAgcmVnaXN0ZXIocGF0aFRvRmlsZVVSTCgiLi9mZWRlcmF0aW9uLXJlc29sdmVyLm1qcyIpLmhyZWYpOwp9CmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZU5vZGVJbXBvcnRNYXAob3B0aW9ucykgewogIGNvbnN0IHsgcmVtb3Rlc09yTWFuaWZlc3RVcmwsIHJlbEJ1bmRsZVBhdGggfSA9IG9wdGlvbnM7CiAgY29uc3QgcmVtb3RlcyA9IHR5cGVvZiByZW1vdGVzT3JNYW5pZmVzdFVybCA9PT0gIm9iamVjdCIgPyByZW1vdGVzT3JNYW5pZmVzdFVybCA6IGF3YWl0IGxvYWRGc01hbmlmZXN0KHJlbW90ZXNPck1hbmlmZXN0VXJsKTsKICBjb25zdCBob3N0SW5mbyA9IGF3YWl0IGxvYWRGc0ZlZGVyYXRpb25JbmZvKHJlbEJ1bmRsZVBhdGgpOwogIGNvbnN0IGhvc3RJbXBvcnRNYXAgPSBhd2FpdCBwcm9jZXNzSG9zdEluZm8oaG9zdEluZm8sICIuLyIgKyByZWxCdW5kbGVQYXRoKTsKICBjb25zdCByZW1vdGVzSW1wb3J0TWFwID0gYXdhaXQgcHJvY2Vzc1JlbW90ZUluZm9zKHJlbW90ZXMsIHsKICAgIHRocm93SWZSZW1vdGVOb3RGb3VuZDogb3B0aW9ucy50aHJvd0lmUmVtb3RlTm90Rm91bmQsCiAgICBjYWNoZVRhZzogb3B0aW9ucy5jYWNoZVRhZwogIH0pOwogIGNvbnN0IGltcG9ydE1hcCA9IG1lcmdlSW1wb3J0TWFwcyhob3N0SW1wb3J0TWFwLCByZW1vdGVzSW1wb3J0TWFwKTsKICByZXR1cm4gaW1wb3J0TWFwOwp9CmFzeW5jIGZ1bmN0aW9uIGxvYWRGc01hbmlmZXN0KG1hbmlmZXN0VXJsKSB7CiAgY29uc3QgY29udGVudCA9IGF3YWl0IGZzMi5yZWFkRmlsZShtYW5pZmVzdFVybCwgInV0Zi04Iik7CiAgY29uc3QgbWFuaWZlc3QgPSBKU09OLnBhcnNlKGNvbnRlbnQpOwogIHJldHVybiBtYW5pZmVzdDsKfQphc3luYyBmdW5jdGlvbiBsb2FkRnNGZWRlcmF0aW9uSW5mbyhyZWxCdW5kbGVQYXRoKSB7CiAgY29uc3QgbWFuaWZlc3RQYXRoID0gcGF0aDIuam9pbihyZWxCdW5kbGVQYXRoLCAicmVtb3RlRW50cnkuanNvbiIpOwogIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBmczIucmVhZEZpbGUobWFuaWZlc3RQYXRoLCAidXRmLTgiKTsKICBjb25zdCBtYW5pZmVzdCA9IEpTT04ucGFyc2UoY29udGVudCk7CiAgcmV0dXJuIG1hbmlmZXN0Owp9CmFzeW5jIGZ1bmN0aW9uIHdyaXRlSW1wb3J0TWFwKG1hcCkgewogIGF3YWl0IGZzMi53cml0ZUZpbGUoCiAgICBJTVBPUlRfTUFQX0ZJTEVfTkFNRSwKICAgIEpTT04uc3RyaW5naWZ5KG1hcCwgbnVsbCwgMiksCiAgICAidXRmLTgiCiAgKTsKfQphc3luYyBmdW5jdGlvbiB3cml0ZVJlc29sdmVyKCkgewogIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHJlc29sdmVyLCAiYmFzZTY0Iik7CiAgYXdhaXQgZnMyLndyaXRlRmlsZSgiZmVkZXJhdGlvbi1yZXNvbHZlci5tanMiLCBidWZmZXIsICJ1dGYtOCIpOwp9CgovLyBsaWJzL25hdGl2ZS1mZWRlcmF0aW9uLW5vZGUvc3JjL2xpYi91dGlscy9mc3RhcnQtYXJncy1wYXJzZXIudHMKaW1wb3J0ICogYXMgZnMzIGZyb20gIm5vZGU6ZnMiOwp2YXIgZGVmYXVsdEFyZ3MgPSB7CiAgZW50cnk6ICIuL3NlcnZlci5tanMiLAogIHJlbW90ZXNPck1hbmlmZXN0VXJsOiAiLi4vYnJvd3Nlci9mZWRlcmF0aW9uLm1hbmlmZXN0Lmpzb24iLAogIHJlbEJ1bmRsZVBhdGg6ICIuLi9icm93c2VyLyIKfTsKZnVuY3Rpb24gcGFyc2VGU3RhcnRBcmdzKCkgewogIGNvbnN0IGFyZ3MyID0gewogICAgZW50cnk6ICIiLAogICAgcmVtb3Rlc09yTWFuaWZlc3RVcmw6ICIiLAogICAgcmVsQnVuZGxlUGF0aDogIiIKICB9OwogIGxldCBrZXkgPSAiIjsKICBmb3IgKGxldCBpID0gMjsgaSA8IHByb2Nlc3MuYXJndi5sZW5ndGg7IGkrKykgewogICAgY29uc3QgY2FuZCA9IHByb2Nlc3MuYXJndltpXTsKICAgIGlmIChjYW5kLnN0YXJ0c1dpdGgoIi0tIikpIHsKICAgICAgY29uc3QgY2FuZEtleSA9IGNhbmQuc3Vic3RyaW5nKDIpOwogICAgICBpZiAoZGVmYXVsdEFyZ3NbY2FuZEtleV0pIHsKICAgICAgICBrZXkgPSBjYW5kS2V5OwogICAgICB9IGVsc2UgewogICAgICAgIGNvbnNvbGUuZXJyb3IoYHN3aXRjaCAke2NhbmR9IG5vdCBzdXBwb3J0ZWQhYCk7CiAgICAgICAgZXhpdFdpdGhVc2FnZShkZWZhdWx0QXJncyk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoa2V5KSB7CiAgICAgIGFyZ3MyW2tleV0gPSBjYW5kOwogICAgICBrZXkgPSAiIjsKICAgIH0gZWxzZSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoYHVucmVsYWRlZCB2YWx1ZSAke2NhbmR9IWApOwogICAgICBleGl0V2l0aFVzYWdlKGRlZmF1bHRBcmdzKTsKICAgIH0KICB9CiAgYXBwbHlEZWZhdWx0QXJncyhhcmdzMik7CiAgcmV0dXJuIGFyZ3MyOwp9CmZ1bmN0aW9uIGFwcGx5RGVmYXVsdEFyZ3MoYXJnczIpIHsKICBpZiAoYXJnczIucmVsQnVuZGxlUGF0aCAmJiAhYXJnczIucmVtb3Rlc09yTWFuaWZlc3RVcmwpIHsKICAgIGNvbnN0IGNhbmQgPSBkZWZhdWx0QXJncy5yZWxCdW5kbGVQYXRoICsgImZlZGVyYXRpb24ubWFuaWZlc3QuanNvbiI7CiAgICBpZiAoZnMzLmV4aXN0c1N5bmMoY2FuZCkpIHsKICAgICAgYXJnczIucmVtb3Rlc09yTWFuaWZlc3RVcmwgPSBjYW5kOwogICAgfQogIH0KICBhcmdzMi5lbnRyeSA9IGFyZ3MyLmVudHJ5IHx8IGRlZmF1bHRBcmdzLmVudHJ5OwogIGFyZ3MyLnJlbEJ1bmRsZVBhdGggPSBhcmdzMi5yZWxCdW5kbGVQYXRoIHx8IGRlZmF1bHRBcmdzLnJlbEJ1bmRsZVBhdGg7CiAgYXJnczIucmVtb3Rlc09yTWFuaWZlc3RVcmwgPSBhcmdzMi5yZW1vdGVzT3JNYW5pZmVzdFVybCB8fCBkZWZhdWx0QXJncy5yZW1vdGVzT3JNYW5pZmVzdFVybDsKICBpZiAoIWZzMy5leGlzdHNTeW5jKGFyZ3MyLnJlbW90ZXNPck1hbmlmZXN0VXJsKSkgewogICAgYXJnczIucmVtb3Rlc09yTWFuaWZlc3RVcmwgPSB2b2lkIDA7CiAgfQp9CmZ1bmN0aW9uIGV4aXRXaXRoVXNhZ2UoZGVmYXVsdEFyZ3MyKSB7CiAgbGV0IGFyZ3MyID0gIiI7CiAgZm9yIChjb25zdCBrZXkgaW4gZGVmYXVsdEFyZ3MyKSB7CiAgICBhcmdzMiArPSBgWy0tJHtrZXl9ICR7ZGVmYXVsdEFyZ3MyW2tleV19XSBgOwogIH0KICBjb25zb2xlLmxvZygidXNhZ2U6IG5mc3RhcnQgIiArIGFyZ3MyKTsKICBwcm9jZXNzLmV4aXQoMSk7Cn0KCi8vIGxpYnMvbmF0aXZlLWZlZGVyYXRpb24tbm9kZS9zcmMvbGliL3V0aWxzL2ZzdGFydC50cwp2YXIgYXJncyA9IHBhcnNlRlN0YXJ0QXJncygpOwooYXN5bmMgKCkgPT4gewogIGF3YWl0IGluaXROb2RlRmVkZXJhdGlvbih7CiAgICAuLi5hcmdzLnJlbW90ZXNPck1hbmlmZXN0VXJsID8geyByZW1vdGVzT3JNYW5pZmVzdFVybDogYXJncy5yZW1vdGVzT3JNYW5pZmVzdFVybCB9IDoge30sCiAgICByZWxCdW5kbGVQYXRoOiBhcmdzLnJlbEJ1bmRsZVBhdGgKICB9KTsKICBhd2FpdCBpbXBvcnQoYXJncy5lbnRyeSk7Cn0pKCk7Cg==";
|
|
5
5
|
//# sourceMappingURL=fstart-as-data-url.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fstart-as-data-url.js","sourceRoot":"","sources":["../../../../../libs/native-federation/src/tools/fstart-as-data-url.ts"],"names":[],"mappings":";;;AAAa,QAAA,MAAM,GAAG,
|
|
1
|
+
{"version":3,"file":"fstart-as-data-url.js","sourceRoot":"","sources":["../../../../../libs/native-federation/src/tools/fstart-as-data-url.ts"],"names":[],"mappings":";;;AAAa,QAAA,MAAM,GAAG,8x/BAA8x/B,CAAC"}
|