@colijnit/homedecorator 256.1.0 → 256.1.3
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/app/core/model/homedecorator-settings.d.ts +1 -0
- package/app/homedecorator.module.d.ts +2 -1
- package/app/plugins/help/help-dialog/help-dialog.component.scss +10 -1
- package/app/plugins/model-uploader/model-previewer/model-preview.component.d.ts +5 -11
- package/app/plugins/product-catalog/product-catalog/product-catalog.component.d.ts +1 -0
- package/app/plugins/render/service/new-render.service.d.ts +0 -2
- package/app/plugins/render/service/render.service.d.ts +1 -2
- package/assets/hdri/std_env_v2_A.hdr +0 -0
- package/assets/hdri/std_env_v2_B.hdr +0 -0
- package/assets/hdri/std_env_v2_C.hdr +0 -0
- package/assets/hdri/std_env_v2_D.hdr +0 -0
- package/assets/hdri/std_env_v2_E.hdr +46 -0
- package/bundles/colijnit-homedecorator.umd.js +106 -253
- package/bundles/colijnit-homedecorator.umd.js.map +1 -1
- package/esm2015/app/core/model/homedecorator-settings.js +1 -1
- package/esm2015/app/core/service/homedecorator-settings.service.js +4 -1
- package/esm2015/app/homedecorator.module.js +8 -4
- package/esm2015/app/plugins/core3d/service/lights.service.js +6 -5
- package/esm2015/app/plugins/core3d/service/scene.service.js +20 -20
- package/esm2015/app/plugins/help/help-dialog/help-dialog.component.js +1 -1
- package/esm2015/app/plugins/model-uploader/model-previewer/model-preview.component.js +50 -75
- package/esm2015/app/plugins/product-catalog/product-catalog/product-catalog.component.js +23 -15
- package/esm2015/app/plugins/render/render-controls/render-controls.component.js +3 -3
- package/esm2015/app/plugins/render/service/new-render.service.js +1 -1
- package/esm2015/app/plugins/render/service/render.service.js +88 -77
- package/esm2015/app/plugins/room-planner/components/floorplanner/service/floorplan.service.js +2 -2
- package/esm2015/app/plugins/room-planner/components/floorplanner/service/room.service.js +2 -2
- package/esm2015/app/plugins/room-planner/components/texture-picker/texture-picker.component.js +1 -1
- package/esm2015/app/plugins/toolbar/toolbar/toolbar.component.js +7 -7
- package/esm2015/app/shared/category-library/category-library.component.js +1 -1
- package/fesm2015/colijnit-homedecorator.js +206 -202
- package/fesm2015/colijnit-homedecorator.js.map +1 -1
- package/homedecorator-globals.scss +3 -0
- package/package.json +1 -1
|
@@ -8,7 +8,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
8
|
});
|
|
9
9
|
};
|
|
10
10
|
import { Injectable } from '@angular/core';
|
|
11
|
-
import { Command, Service } from '@migenius/realityserver-client';
|
|
12
11
|
import { BehaviorSubject, Subject } from 'rxjs';
|
|
13
12
|
import { Box3, DirectionalLight, Material, Mesh, MeshPhongMaterial, SpotLight, Vector3 } from 'three';
|
|
14
13
|
import { GLTFExporter } from 'three/examples/jsm/exporters/GLTFExporter';
|
|
@@ -110,7 +109,6 @@ export class RenderService {
|
|
|
110
109
|
this.currentQueueRenderItem = new RenderQueueItem();
|
|
111
110
|
this.currentProductHash = '';
|
|
112
111
|
this._subs = [];
|
|
113
|
-
this.service = new Service();
|
|
114
112
|
this.sceneData = {};
|
|
115
113
|
this._subs.push(this._settingsService.settingsLoaded.subscribe((loaded) => {
|
|
116
114
|
if (loaded) {
|
|
@@ -132,37 +130,41 @@ export class RenderService {
|
|
|
132
130
|
return material;
|
|
133
131
|
}
|
|
134
132
|
ngOnDestroy() {
|
|
135
|
-
this.service.close();
|
|
136
133
|
this._subs.forEach(s => s.unsubscribe());
|
|
137
134
|
}
|
|
138
135
|
checkConnection() {
|
|
139
136
|
return __awaiter(this, void 0, void 0, function* () {
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
137
|
+
//
|
|
138
|
+
// if (this.service.validate() === false) {
|
|
139
|
+
//
|
|
140
|
+
// try {
|
|
141
|
+
//
|
|
142
|
+
// const url = `${(this.serverData.secure ? 'wss' : 'ws')}://${this.serverData.host}:${this.serverData.port}/service/`;
|
|
143
|
+
// await this.service.connect(url).then(() => {
|
|
144
|
+
// this.serverData.setup = true;
|
|
145
|
+
// }).catch((rej) => {
|
|
146
|
+
// });
|
|
147
|
+
//
|
|
148
|
+
// this.service.on('error', async (object) => {
|
|
149
|
+
// this.serverData.setup = false;
|
|
150
|
+
// if (this.connectionStatus !== ConnectionStatus.TryingToConnect) {
|
|
151
|
+
// this.connectionStatus = ConnectionStatus.IsDisConnected;
|
|
152
|
+
// }
|
|
153
|
+
// await this._onRenderError();
|
|
154
|
+
// });
|
|
155
|
+
// this.service.on('close', async (object) => {
|
|
156
|
+
// this.serverData.setup = false;
|
|
157
|
+
// if (this.connectionStatus !== ConnectionStatus.TryingToConnect) {
|
|
158
|
+
// this.connectionStatus = ConnectionStatus.IsDisConnected;
|
|
159
|
+
// }
|
|
160
|
+
// await this._onRenderClose();
|
|
161
|
+
// });
|
|
162
|
+
//
|
|
163
|
+
// } catch (err) {
|
|
164
|
+
//
|
|
165
|
+
// this.serverData.setup = false;
|
|
166
|
+
// }
|
|
167
|
+
// }
|
|
166
168
|
});
|
|
167
169
|
}
|
|
168
170
|
_renderServiceHeartBeat() {
|
|
@@ -420,57 +422,66 @@ export class RenderService {
|
|
|
420
422
|
}
|
|
421
423
|
_quitRenderLoop() {
|
|
422
424
|
return __awaiter(this, void 0, void 0, function* () {
|
|
423
|
-
if (this.sceneData.loop_name !== undefined && this.service.validate() !== false) {
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
}
|
|
425
|
+
// if (this.sceneData.loop_name !== undefined && this.service.validate() !== false) {
|
|
426
|
+
// const [] = await this.service.queue_commands()
|
|
427
|
+
// .queue(new Command('render_loop_quit', {
|
|
428
|
+
// render_loop_name: this.sceneData.loop_name
|
|
429
|
+
// }))
|
|
430
|
+
// .execute();
|
|
431
|
+
// this.service.remove_stream(this.sceneData.loop_name);
|
|
432
|
+
// }
|
|
431
433
|
});
|
|
432
434
|
}
|
|
433
435
|
_startRenderStream() {
|
|
434
436
|
return __awaiter(this, void 0, void 0, function* () {
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
437
|
+
//
|
|
438
|
+
// try {
|
|
439
|
+
//
|
|
440
|
+
// this.streaming.stream = this.service.create_stream();
|
|
441
|
+
// await this.streaming.stream.start({render_loop_name: this.sceneData.loop_name, image_format: 'jpg', quality: '100'});
|
|
442
|
+
//
|
|
443
|
+
// this.streaming.stream.on('image', async (object) => {
|
|
444
|
+
// this._htmlImageDisplay(object, null);
|
|
445
|
+
// const [progress] = await this.service.queue_commands()
|
|
446
|
+
// .queue(new Command('render_loop_get_render_progress', {
|
|
447
|
+
// render_loop_name: this.sceneData.loop_name
|
|
448
|
+
// }), true)
|
|
449
|
+
// .execute();
|
|
450
|
+
//
|
|
451
|
+
// if (progress.progression !== undefined) {
|
|
452
|
+
// this._setRenderProgress(RenderStatus.IsRunning, Math.ceil((progress.progression * 100)), progress.iteration);
|
|
453
|
+
// }
|
|
454
|
+
//
|
|
455
|
+
// if (object.result === 1) {
|
|
456
|
+
//
|
|
457
|
+
// await this.service.queue_commands()
|
|
458
|
+
// .queue(new Command('render_loop_save_to_disk', {
|
|
459
|
+
// render_loop_name: this.sceneData.loop_name,
|
|
460
|
+
// format: 'jpg',
|
|
461
|
+
// quality: 90,
|
|
462
|
+
// path: this.sceneData.image_info.url
|
|
463
|
+
// }), true)
|
|
464
|
+
// .execute();
|
|
465
|
+
//
|
|
466
|
+
// if (this.streaming.stream !== undefined) {
|
|
467
|
+
// this.streaming.stream.stop();
|
|
468
|
+
// }
|
|
469
|
+
// await this._quitRenderLoop();
|
|
470
|
+
// this._afterRendering();
|
|
471
|
+
// return;
|
|
472
|
+
//
|
|
473
|
+
// } else if (object.result < 0) {
|
|
474
|
+
//
|
|
475
|
+
// await this._onRenderError();
|
|
476
|
+
// return;
|
|
477
|
+
// }
|
|
478
|
+
// });
|
|
479
|
+
//
|
|
480
|
+
// } catch (err) {
|
|
481
|
+
//
|
|
482
|
+
// await this._onRenderError();
|
|
483
|
+
// return;
|
|
484
|
+
// }
|
|
474
485
|
});
|
|
475
486
|
}
|
|
476
487
|
_setRenderProgress(status, progress, iterations) {
|
|
@@ -647,4 +658,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
|
|
|
647
658
|
providedIn: 'root',
|
|
648
659
|
}]
|
|
649
660
|
}], ctorParameters: function () { return [{ type: i1.HomedecoratorSettingsService }, { type: i2.BuildFurnitureService }, { type: i3.ExportService }, { type: i4.CameraService }, { type: i5.SceneService }, { type: i6.HomedecoratorConnectorService }, { type: i7.HomedecoratorConnectorAdapterService }, { type: i8.ThreedselectorService }, { type: i9.ToastService }, { type: i10.MessageBusService }, { type: i11.GoogleTagManagerService }, { type: i12.RoomService }, { type: i13.FloorService }, { type: i14.LoadFurnitureService }]; } });
|
|
650
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2xpZW50L2FwcC9wbHVnaW5zL3JlbmRlci9zZXJ2aWNlL3JlbmRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxFQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNoRSxPQUFPLEVBQUMsZUFBZSxFQUFFLE9BQU8sRUFBZSxNQUFNLE1BQU0sQ0FBQztBQUM1RCxPQUFPLEVBQUMsSUFBSSxFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQVksU0FBUyxFQUFFLE9BQU8sRUFBQyxNQUFNLE9BQU8sQ0FBQztBQUM5RyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sMkNBQTJDLENBQUM7QUFFdkUsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ2pELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBTTNELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQWdCM0QsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQ2hELE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN6RCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sc0NBQXNDLENBQUM7QUFDakUsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ2hELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFDekQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQ25ELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxzQ0FBc0MsQ0FBQztBQUVyRSxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFFeEQsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sa0RBQWtELENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUFLdkYsTUFBTSxPQUFPLGFBQWE7SUFzRnhCLFlBQ1UsZ0JBQThDLEVBQzlDLHNCQUE2QyxFQUM3QyxjQUE2QixFQUM3QixjQUE2QixFQUM3QixhQUEyQixFQUMzQixLQUFvQyxFQUNwQyxxQkFBMkQsRUFDM0Qsc0JBQTZDLEVBQzdDLGFBQTJCLEVBQzNCLGtCQUFxQyxFQUNyQyxpQkFBMEMsRUFDMUMsWUFBeUIsRUFDekIsYUFBMkIsRUFDM0IscUJBQTJDO1FBYjNDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBOEI7UUFDOUMsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF1QjtRQUM3QyxtQkFBYyxHQUFkLGNBQWMsQ0FBZTtRQUM3QixtQkFBYyxHQUFkLGNBQWMsQ0FBZTtRQUM3QixrQkFBYSxHQUFiLGFBQWEsQ0FBYztRQUMzQixVQUFLLEdBQUwsS0FBSyxDQUErQjtRQUNwQywwQkFBcUIsR0FBckIscUJBQXFCLENBQXNDO1FBQzNELDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBdUI7UUFDN0Msa0JBQWEsR0FBYixhQUFhLENBQWM7UUFDM0IsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFtQjtRQUNyQyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQXlCO1FBQzFDLGlCQUFZLEdBQVosWUFBWSxDQUFhO1FBQ3pCLGtCQUFhLEdBQWIsYUFBYSxDQUFjO1FBQzNCLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBc0I7UUFsR3JDLGdCQUFXLEdBQUcsV0FBVyxDQUFDO1FBUW5DLGNBQVMsR0FBUSxFQUFFLENBQUM7UUFFcEIsdUJBQWtCLEdBQWEsRUFBRSxDQUFDO1FBRWxDLHFCQUFnQixHQUFxQixnQkFBZ0IsQ0FBQyxXQUFXLENBQUM7UUFFbEUsWUFBTyxHQUFhLEVBQUUsQ0FBQztRQUN2QixvQkFBZSxHQUFxQixFQUFFLENBQUM7UUFDdkMsZUFBVSxHQUFnQjtZQUMvQixFQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUM7WUFDL0MsRUFBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFDO1lBQzlDLEVBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBQztZQUNuRCxFQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUM7U0FDL0MsQ0FBQztRQUVLLGVBQVUsR0FBZ0I7WUFDL0IsRUFBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBQztZQUNwQyxFQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFDO1lBQ3JDLEVBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUM7U0FDcEMsQ0FBQztRQUVLLHVCQUFrQixHQUF3QjtZQUMvQyxFQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUM7WUFDbEQsRUFBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUM7WUFDNUUsRUFBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUM7WUFDMUUsRUFBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxtQkFBbUIsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBQztZQUNoRixFQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLDBCQUEwQixFQUFFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFDO1lBQzNGLEVBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFDO1lBQzNFLEVBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFDO1lBQzdFLEVBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFDO1lBQzFFLEVBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFDO1lBQ3BFLEVBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUscUJBQXFCLEVBQUUsT0FBTyxFQUFFLDhCQUE4QixFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUM7WUFDOUYsRUFBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUM7WUFDdEUsRUFBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUM7WUFDM0UsRUFBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSw0QkFBNEIsRUFBRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBQztZQUMvRixFQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFDO1NBQ3RGLENBQUM7UUFFSyxpQkFBWSxHQUFRO1lBQ3pCLEVBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsd0JBQXdCLEVBQUUsWUFBWSxFQUFFLHdCQUF3QixFQUFDO1lBQy9FLEVBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsdUJBQXVCLEVBQUUsWUFBWSxFQUFFLHVCQUF1QixFQUFDO1lBQzdFLEVBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsc0JBQXNCLEVBQUUsWUFBWSxFQUFFLHNCQUFzQixFQUFDO1lBQzNFLEVBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUseUJBQXlCLEVBQUUsWUFBWSxFQUFFLHlCQUF5QixFQUFDO1lBQ2pGLEVBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUseUJBQXlCLEVBQUUsWUFBWSxFQUFFLHlCQUF5QixFQUFDO1NBQ2xGLENBQUM7UUFHTSx3QkFBbUIsR0FBVyxHQUFHLENBQUM7UUFFbkMsc0JBQWlCLEdBQVcsQ0FBQyxDQUFDO1FBQzlCLHdCQUFtQixHQUFXLENBQUMsQ0FBQztRQUNoQyx3QkFBbUIsR0FBVyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztRQUVoRSx5QkFBb0IsR0FBWSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLG9CQUFvQixDQUFDO1FBRXBGLGNBQVMsR0FBVyxDQUFDLENBQUM7UUFDdEIsU0FBSSxHQUFZLEtBQUssQ0FBQztRQUV0QiwyQkFBc0IsR0FBNEIsSUFBSSxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDMUUscUJBQWdCLEdBQWtCLElBQUksT0FBTyxFQUFFLENBQUM7UUFDaEQsdUJBQWtCLEdBQTRCLElBQUksZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXRFLGdCQUFXLEdBQVUsRUFBRSxDQUFDO1FBQ3hCLDJCQUFzQixHQUFvQixJQUFJLGVBQWUsRUFBRSxDQUFDO1FBQ2hFLHVCQUFrQixHQUFXLEVBQUUsQ0FBQztRQUcvQixVQUFLLEdBQW1CLEVBQUUsQ0FBQztRQXlCakMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBRXBCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUNiLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBZSxFQUFFLEVBQUU7WUFDakUsSUFBSSxNQUFNLEVBQUU7Z0JBQ1YsOERBQThEO2dCQUM5RCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUM7Z0JBQ2xFLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtvQkFDbkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO29CQUM5QixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7b0JBQ3ZCLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO2lCQUNoQztnQkFDRCxJQUFJO2FBQ0w7UUFDSCxDQUFDLENBQUMsRUFDRixJQUFJLENBQUMsc0JBQXNCLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FDakQsQ0FBQyxNQUE4QixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQzFHLENBQ0YsQ0FBQztJQUNKLENBQUM7SUEzQ00sTUFBTSxDQUFDLDZCQUE2QixDQUFDLFFBQWtCO1FBQzVELHlCQUF5QjtRQUN6QixRQUFRLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUM1QixRQUFRLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNuRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBd0NELFdBQVc7UUFDVCxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVZLGVBQWU7O1lBRTFCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsS0FBSyxLQUFLLEVBQUU7Z0JBRXJDLElBQUk7b0JBRUYsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxXQUFXLENBQUM7b0JBQ3BILE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTt3QkFDeEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO29CQUMvQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtvQkFDakIsQ0FBQyxDQUFDLENBQUM7b0JBRUgsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQU8sTUFBTSxFQUFFLEVBQUU7d0JBQ3hDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQzt3QkFDOUIsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEtBQUssZ0JBQWdCLENBQUMsZUFBZSxFQUFFOzRCQUM5RCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUMsY0FBYyxDQUFDO3lCQUN6RDt3QkFDRCxNQUFNLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztvQkFDOUIsQ0FBQyxDQUFBLENBQUMsQ0FBQztvQkFDSCxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBTyxNQUFNLEVBQUUsRUFBRTt3QkFDeEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO3dCQUM5QixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxnQkFBZ0IsQ0FBQyxlQUFlLEVBQUU7NEJBQzlELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUM7eUJBQ3pEO3dCQUNELE1BQU0sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO29CQUM5QixDQUFDLENBQUEsQ0FBQyxDQUFDO2lCQUVKO2dCQUFDLE9BQU8sR0FBRyxFQUFFO29CQUVaLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztpQkFDL0I7YUFDRjtRQUNILENBQUM7S0FBQTtJQUVPLHVCQUF1QjtRQUU3QixXQUFXLENBQUMsR0FBRyxFQUFFO1lBQ2YsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEtBQUssZ0JBQWdCLENBQUMsY0FBYyxFQUFFO2dCQUM3RCxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLHdCQUF3QixFQUFFO29CQUNuRSxNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO29CQUMxQixLQUFLLENBQUMsT0FBTyxHQUFHLHFDQUFxQyxDQUFDO29CQUN0RCxLQUFLLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUM7b0JBQzdCLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUNyQztnQkFDRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUMsZUFBZSxDQUFDO2dCQUN6RCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7YUFDeEI7aUJBQU0sSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEtBQUssZ0JBQWdCLENBQUMsZUFBZSxFQUFFO2dCQUNyRSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxLQUFLLEtBQUssRUFBRTtvQkFDbkMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMseUJBQXlCLENBQUMsQ0FBQztvQkFDcEUsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO2lCQUN4QjtxQkFBTTtvQkFDTCxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLHdCQUF3QixFQUFFO3dCQUNuRSxNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO3dCQUMxQixLQUFLLENBQUMsT0FBTyxHQUFHLGtDQUFrQyxDQUFDO3dCQUNuRCxLQUFLLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUM7d0JBQy9CLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO3FCQUNyQztvQkFDRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUMsV0FBVyxDQUFDO2lCQUN0RDthQUNGO2lCQUFNLElBQUksSUFBSSxDQUFDLGdCQUFnQixLQUFLLGdCQUFnQixDQUFDLFdBQVcsRUFBRTtnQkFDakUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsc0JBQXNCLENBQUMsQ0FBQzthQUNsRTtRQUNILENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFTSxtQkFBbUIsQ0FBQyxJQUFpQjtRQUUxQyxNQUFNLE1BQU0sR0FBZSxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBRTVDLElBQUksSUFBSSxLQUFLLFdBQVcsQ0FBQyxVQUFVLEVBQUU7WUFDbkMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDdkUsTUFBTSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbkQsTUFBTSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDdEQ7UUFFRCxNQUFNLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO1FBQzNELE1BQU0sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDO1FBQ2xELE1BQU0sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBRW5CLElBQUksSUFBSSxLQUFLLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFO1lBQ3hDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1lBRXRCLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFO2dCQUMxRSxNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDO2FBQzVFO1NBQ0Y7YUFBTSxJQUFJLElBQUksS0FBSyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRTtZQUMvQyxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUNsRixNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7WUFDdkMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxjQUFjLEdBQUcsaUJBQWlCLENBQUMsT0FBTyxDQUFDO1lBQzNELE1BQU0sQ0FBQyxRQUFRLENBQUMsb0JBQW9CLEdBQUcsaUJBQWlCLENBQUMsU0FBUyxDQUFDO1lBRW5FLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckQsTUFBTSxjQUFjLEdBQUcsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN4SCxNQUFNLEVBQUUsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUNwRCxNQUFNLE1BQU0sR0FBWSxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ3RDLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbkIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEdBQUc7Z0JBQzVCO29CQUNFLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsbUJBQW1CO29CQUN2QyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLG1CQUFtQjtvQkFDdkMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxtQkFBbUI7b0JBQ3ZDLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsbUJBQW1CO29CQUN2QyxNQUFNLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHO2lCQUM1RDthQUNGLENBQUM7U0FDSDtRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCw0REFBNEQ7SUFDNUQsdURBQXVEO0lBQy9DLFNBQVMsQ0FBQyxPQUFxQztRQUNyRCxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUM7UUFDaEMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3hDLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDOUIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM5QixPQUFPLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVPLHFCQUFxQixDQUFDLE9BQWlCO1FBQzdDLElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxtQkFBbUIsRUFBRTtZQUN4QyxPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUU7WUFDakIsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDMUMsd0RBQXdEO1FBQ3hELCtCQUErQjtRQUMvQixJQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDM0IsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsdUJBQXVCLENBQUMsRUFBRTtZQUNwRCxPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRWEsWUFBWTs7WUFDeEIsTUFBTSxTQUFTLEdBQVcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7WUFDbkUseUNBQXlDO1lBQ3pDLCtEQUErRDtZQUMvRCx3Q0FBd0M7WUFDeEMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLGNBQWMsRUFBRSxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFFcEUsSUFBSSxLQUFZLENBQUM7WUFDakIsSUFBSTtnQkFDRixLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBRXpDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRTtvQkFDckMsTUFBTSxjQUFjLEdBQWEsS0FBSyxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsQ0FBQztvQkFDcEUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDL0IsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsMkVBQTJFO2dCQUMzRSxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUM7Z0JBQ25CLEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUU7b0JBQ3ZCLElBQUksT0FBTyxZQUFZLGdCQUFnQixJQUFJLE9BQU8sWUFBWSxTQUFTLEVBQUU7d0JBQ3ZFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7cUJBQ3pCO29CQUVELElBQUksT0FBTyxDQUFDLE9BQU8sS0FBSyxLQUFLLEVBQUU7d0JBQzdCLGlGQUFpRjt3QkFDakYsT0FBTyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7cUJBQ3hCO29CQUVELElBQUksT0FBTyxZQUFZLElBQUksSUFBSSxPQUFPLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGtCQUFrQixDQUFDLEVBQUU7d0JBQzFGLElBQUksZ0JBQWdCLEdBQVksS0FBSyxDQUFDO3dCQUV0QyxJQUFJLE9BQU8sQ0FBQyxRQUFRLFlBQVksUUFBUSxFQUFFOzRCQUV4QyxJQUFJLE9BQU8sQ0FBQyxRQUFRLFlBQVksaUJBQWlCLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUU7Z0NBQ3pFLGdCQUFnQixHQUFHLElBQUksQ0FBQzs2QkFDekI7NEJBQ0QsT0FBTyxDQUFDLFFBQVEsR0FBRyxhQUFhLENBQUMsNkJBQTZCLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO3lCQUVsRjs2QkFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFOzRCQUUxQyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxVQUFVLFFBQWtCLEVBQUUsS0FBSztnQ0FDMUQsSUFBSSxRQUFRLFlBQVksaUJBQWlCLElBQUksUUFBUSxDQUFDLEdBQUcsRUFBRTtvQ0FDekQsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO2lDQUN6QjtnQ0FDRCxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLGFBQWEsQ0FBQyw2QkFBNkIsQ0FBQyxRQUFRLENBQUMsQ0FBQzs0QkFDbEYsQ0FBQyxDQUFDLENBQUM7eUJBQ0o7d0JBRUQsSUFBSSxDQUFDLGdCQUFnQixFQUFFOzRCQUNyQixPQUFPLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQzt5QkFDeEI7cUJBQ0Y7b0JBRUQsSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLEVBQUU7d0JBQ3ZDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO3FCQUM5QjtnQkFDSCxDQUFDLENBQUMsQ0FBQztnQkFDSCxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO29CQUN2QixLQUFLLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO3dCQUNwRCxJQUFJLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7NEJBQ2xELE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3lCQUNuQztxQkFDRjtnQkFDSCxDQUFDLENBQUMsQ0FBQztnQkFDSCxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7Z0JBRTlDLE1BQU0sT0FBTyxHQUFHO29CQUNkLEdBQUcsRUFBRSxLQUFLO29CQUNWLFdBQVcsRUFBRSxLQUFLO29CQUNsQixpQkFBaUIsRUFBRSxJQUFJO29CQUN2QixNQUFNLEVBQUUsSUFBSTtvQkFDWixZQUFZLEVBQUUsS0FBSztvQkFDbkIsdUJBQXVCLEVBQUUsS0FBSztvQkFDOUIsdUJBQXVCO29CQUN2QixXQUFXLEVBQUUsSUFBSTtpQkFDbEIsQ0FBQztnQkFFRixNQUFNLFFBQVEsR0FBaUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztnQkFDbEQsSUFBSSxRQUFRLEdBQVcsRUFBRSxDQUFDO2dCQUUxQixPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBaUIsRUFBRSxNQUFnQixFQUFFLEVBQUU7b0JBQ3pELFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQU8sYUFBMEIsRUFBRSxFQUFFO3dCQUN6RCxNQUFNLElBQUksR0FBUyxJQUFJLElBQUksQ0FBQyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUMsSUFBSSxFQUFFLDBCQUEwQixFQUFDLENBQUMsQ0FBQzt3QkFDakYsTUFBTSxNQUFNLEdBQVEsTUFBTSxTQUFTLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQzt3QkFDakUsSUFBSSxNQUFNLEtBQUssS0FBSyxFQUFFOzRCQUNwQixRQUFRLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQzt5QkFDeEI7d0JBQ0QsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUNwQixDQUFDLENBQUEsRUFBRSxHQUFHLEVBQUU7b0JBQ1IsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUNkLENBQUMsQ0FBQyxDQUFDO2FBQ0o7WUFBQyxPQUFPLENBQUMsRUFBRTtnQkFDVixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDWDtRQUNILENBQUM7S0FBQTtJQUVZLGNBQWM7O1lBRXpCLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUUvQixNQUFNLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFFN0IsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLEtBQUssU0FBUyxFQUFFO29CQUNoRyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDO29CQUMxRCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDbEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFFekIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxFQUFFO3lCQUNuRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTt3QkFDWCxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzNCLENBQUMsQ0FBQyxDQUFDO29CQUNMLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7aUJBQy9CO2FBQ0Y7UUFDSCxDQUFDO0tBQUE7SUFFYSxrQkFBa0IsQ0FBQyxNQUFXOztZQUUxQyxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO2dCQUNyQyxNQUFNLGFBQWEsR0FBRyxDQUFDO3dCQUNyQixFQUFFLEVBQUUsQ0FBQzt3QkFDTCxPQUFPLEVBQUUsS0FBSzt3QkFDZCxNQUFNLEVBQUUsOEJBQThCO3dCQUN0QyxNQUFNLEVBQUUsTUFBTTtxQkFDZixDQUFDLENBQUM7Z0JBQ0gsTUFBTSxHQUFHLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztnQkFDakMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUMsQ0FBQztnQkFDOUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLGNBQWMsRUFBRSxtQ0FBbUMsQ0FBQyxDQUFDO2dCQUMxRSxHQUFHLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRTtvQkFDaEIsSUFBSSxHQUFHLENBQUMsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRTt3QkFDekMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7cUJBQ3ZDO3lCQUFNO3dCQUNMLE1BQU0sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7cUJBQ3hCO2dCQUNILENBQUMsQ0FBQztnQkFDRixHQUFHLENBQUMsT0FBTyxHQUFHLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQzNDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1lBQzFDLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztLQUFBO0lBRWEsZ0JBQWdCOztZQUU1QiwySEFBMkg7WUFDM0gsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMvRSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUVuQjs7OztjQUlFO1lBRUYsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztZQUN0RSxJQUFJLENBQUMsc0JBQXNCLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7WUFDbEQsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztZQUMzRSxJQUFJLENBQUMsc0JBQXNCLENBQUMsYUFBYSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7WUFDdkQsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLFVBQVUsR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7WUFFL0ksSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBRXRELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFO2dCQUMzQyxPQUFPO2FBQ1I7WUFDRCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLFlBQVksS0FBSyxJQUFJLEVBQUU7Z0JBQ2hGLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO2dCQUM1QyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2FBQ2pDO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQzthQUN4QjtRQUNILENBQUM7S0FBQTtJQUVhLGVBQWU7O1lBRTNCLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEtBQUssS0FBSyxFQUFFO2dCQUMvRSxNQUFNLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFO3FCQUMzQyxLQUFLLENBQUMsSUFBSSxPQUFPLENBQUMsa0JBQWtCLEVBQUU7b0JBQ3JDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUztpQkFDM0MsQ0FBQyxDQUFDO3FCQUNGLE9BQU8sRUFBRSxDQUFDO2dCQUNiLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDdEQ7UUFDSCxDQUFDO0tBQUE7SUFFYSxrQkFBa0I7O1lBRTlCLElBQUk7Z0JBRUYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDckQsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDO2dCQUVySCxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQU8sTUFBTSxFQUFFLEVBQUU7b0JBQ2pELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQ3JDLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFO3lCQUNuRCxLQUFLLENBQUMsSUFBSSxPQUFPLENBQUMsaUNBQWlDLEVBQUU7d0JBQ3BELGdCQUFnQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUztxQkFDM0MsQ0FBQyxFQUFFLElBQUksQ0FBQzt5QkFDUixPQUFPLEVBQUUsQ0FBQztvQkFFYixJQUFJLFFBQVEsQ0FBQyxXQUFXLEtBQUssU0FBUyxFQUFFO3dCQUN0QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztxQkFDOUc7b0JBRUQsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTt3QkFFdkIsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRTs2QkFDaEMsS0FBSyxDQUFDLElBQUksT0FBTyxDQUFDLDBCQUEwQixFQUFFOzRCQUM3QyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVM7NEJBQzFDLE1BQU0sRUFBRSxLQUFLOzRCQUNiLE9BQU8sRUFBRSxFQUFFOzRCQUNYLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxHQUFHO3lCQUNwQyxDQUFDLEVBQUUsSUFBSSxDQUFDOzZCQUNSLE9BQU8sRUFBRSxDQUFDO3dCQUViLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFOzRCQUN2QyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQzt5QkFDOUI7d0JBQ0QsTUFBTSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7d0JBQzdCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQzt3QkFDdkIsT0FBTztxQkFFUjt5QkFBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO3dCQUU1QixNQUFNLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQzt3QkFDNUIsT0FBTztxQkFDUjtnQkFDSCxDQUFDLENBQUEsQ0FBQyxDQUFDO2FBRUo7WUFBQyxPQUFPLEdBQUcsRUFBRTtnQkFFWixNQUFNLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDNUIsT0FBTzthQUNSO1FBQ0gsQ0FBQztLQUFBO0lBRU8sa0JBQWtCLENBQUMsTUFBb0IsRUFBRSxRQUFnQixFQUFFLFVBQWtCO1FBQ25GLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ3BCLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxXQUFXLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNyRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQztRQUNsRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsY0FBYyxHQUFHLFFBQVEsQ0FBQztRQUN0RCxJQUFJLFVBQVUsR0FBRyxDQUFDLEVBQUU7WUFDbEIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGdCQUFnQixHQUFHLFVBQVUsQ0FBQztTQUMzRDtRQUVELElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEtBQUssV0FBVyxDQUFDLFVBQVUsRUFBRTtZQUN6RCxNQUFNLE1BQU0sR0FBVyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3hGLE1BQU0sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1lBQ3ZCLE1BQU0sQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1NBQzVCO0lBQ0gsQ0FBQztJQUVhLGNBQWM7O1lBRTFCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN0RCxNQUFNLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUMvQixDQUFDO0tBQUE7SUFFYSxjQUFjOztZQUUxQixJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDeEQsQ0FBQztLQUFBO0lBRU8sZUFBZTtRQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNwQixPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFeEQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUM7UUFDcEgsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsS0FBSyxXQUFXLENBQUMsVUFBVSxFQUFFO1lBQ3pELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDM0M7UUFFRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXZDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEtBQUssV0FBVyxDQUFDLFVBQVUsRUFBRTtZQUN6RCxNQUFNLE1BQU0sR0FBVyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3hGLE1BQU0sQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFDO1NBQ3ZCO1FBRUQsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUM7UUFDekUsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEtBQUssV0FBVyxDQUFDLFVBQVUsQ0FBQztRQUMzRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLHFCQUFxQixDQUFDLE1BQU0sRUFBRTtZQUM3RCxXQUFXLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxZQUFZO1lBQzdELFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFlBQVk7WUFDNUQsWUFBWSxFQUFFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTO1NBQ3BELENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRU8sb0JBQW9CO1FBRTFCLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDNUcsQ0FBQztJQUVNLGdCQUFnQjtRQUNyQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsaUNBQWlDLEVBQUUsQ0FBQztRQUM1RCxJQUFJLFVBQVUsS0FBSyxJQUFJLEVBQUU7WUFDdkIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztTQUM3QztJQUNILENBQUM7SUFFYSxvQkFBb0IsQ0FBQyxTQUFlLEVBQUUsY0FBdUIsS0FBSzs7WUFDOUUsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQ3BCLE9BQU87YUFDUjtZQUVELElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQ2QsT0FBTzthQUNSO1lBRUQsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsS0FBSyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRTtnQkFDOUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxtQ0FBbUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDbEYsSUFBSSxDQUFDLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQzthQUNwRDtpQkFBTSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxLQUFLLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFO2dCQUNyRSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLG1DQUFtQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUVsRixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLFdBQVcsQ0FBQyxFQUFFO29CQUM5RSxPQUFPO2lCQUNSO2dCQUVELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDN0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUM7Z0JBQ3ZCLE1BQU0sU0FBUyxHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7Z0JBQ3hDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ3pFLFNBQVMsQ0FBQyxNQUFNLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQztnQkFDdkYsU0FBUyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO2dCQUMzQyxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztnQkFDdEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ2pDLE1BQU0sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO2FBQzdCO1FBQ0gsQ0FBQztLQUFBO0lBRU8saUJBQWlCLENBQUMsS0FBSyxFQUFFLFVBQVU7UUFFekMsSUFBSTtZQUNGLFVBQVUsR0FBRyxVQUFVLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSyxNQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQzdGO1FBQUMsT0FBTyxDQUFDLEVBQUU7U0FFWDtRQUVELE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUMsQ0FBQyxDQUFDO1FBQzlELE1BQU0sR0FBRyxHQUFHLFVBQVUsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFN0MsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRU0sYUFBYSxDQUFDLEVBQVU7UUFDN0IsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBUyxFQUFFLEVBQUU7WUFDakMsSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDZixZQUFZLEdBQUcsQ0FBQyxDQUFDO2FBQ2xCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0lBRU0sZ0JBQWdCLENBQUMsRUFBVTtRQUNoQyxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFZLEVBQUUsRUFBRTtZQUN2QyxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUNmLFVBQVUsR0FBRyxDQUFDLENBQUM7YUFDaEI7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFFTSx3QkFBd0IsQ0FBQyxFQUFVO1FBQ3hDLElBQUksaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1FBQzdCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxpQkFBb0MsRUFBRSxFQUFFO1lBQ3ZFLElBQUksaUJBQWlCLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDL0IsaUJBQWlCLEdBQUcsaUJBQWlCLENBQUM7Z0JBQ3RDLE9BQU87YUFDUjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxpQkFBaUIsQ0FBQztJQUMzQixDQUFDO0lBRU0sZ0JBQWdCLENBQUMsRUFBVTtRQUNoQyxJQUFJLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFDM0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFZLEVBQUUsRUFBRTtZQUN2QyxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUNmLGVBQWUsR0FBRyxDQUFDLENBQUM7YUFDckI7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sZUFBZSxDQUFDO0lBQ3pCLENBQUM7SUFHRCw0R0FBNEc7SUFFcEcsaUNBQWlDO1FBRXZDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztRQUVuRCxJQUFJLFFBQVEsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO1lBQ3hCLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN4QyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsWUFBWSxlQUFlLEVBQUU7Z0JBQzFDLE9BQXdCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNyQztZQUNELElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxZQUFZLFNBQVMsRUFBRTtnQkFDcEMsTUFBTSxTQUFTLEdBQWMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN6QyxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtvQkFDOUIsU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTt3QkFDcEMsSUFBSSxJQUFJLFlBQVksZUFBZSxFQUFFOzRCQUNuQyxPQUFPLElBQUksQ0FBQzt5QkFDYjtvQkFDSCxDQUFDLENBQUMsQ0FBQztpQkFDSjthQUNGO1NBQ0Y7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTywyQkFBMkI7UUFFakMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGlDQUFpQyxFQUFFLENBQUM7UUFFNUQsSUFBSSxVQUFVLEtBQUssSUFBSSxFQUFFO1lBQ3ZCLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsbUNBQW1DLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDN0UsQ0FBQzs7MkdBN3JCVSxhQUFhOytHQUFiLGFBQWEsY0FGWixNQUFNOzRGQUVQLGFBQWE7a0JBSHpCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlLCBPbkRlc3Ryb3l9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0NvbW1hbmQsIFNlcnZpY2V9IGZyb20gJ0BtaWdlbml1cy9yZWFsaXR5c2VydmVyLWNsaWVudCc7XHJcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBTdWJqZWN0LCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge0JveDMsIERpcmVjdGlvbmFsTGlnaHQsIE1hdGVyaWFsLCBNZXNoLCBNZXNoUGhvbmdNYXRlcmlhbCwgT2JqZWN0M0QsIFNwb3RMaWdodCwgVmVjdG9yM30gZnJvbSAndGhyZWUnO1xyXG5pbXBvcnQge0dMVEZFeHBvcnRlcn0gZnJvbSAndGhyZWUvZXhhbXBsZXMvanNtL2V4cG9ydGVycy9HTFRGRXhwb3J0ZXInO1xyXG5pbXBvcnQge1NjZW5lfSBmcm9tICd0aHJlZS9zcmMvc2NlbmVzL1NjZW5lJztcclxuaW1wb3J0IHtSZW5kZXJNb2Rlc30gZnJvbSAnLi4vZW51bS9yZW5kZXItbW9kZXMnO1xyXG5pbXBvcnQge0Nvbm5lY3Rpb25TdGF0dXN9IGZyb20gJy4uL2VudW0vY29ubmVjdGlvbi1zdGF0dXMnO1xyXG5pbXBvcnQge1JlbmRlcn0gZnJvbSAnLi4vbW9kZWwvcmVuZGVyJztcclxuaW1wb3J0IHtDYW1lcmFQb3NpdGlvbn0gZnJvbSAnLi4vbW9kZWwvY2FtZXJhLXBvc2l0aW9uJztcclxuaW1wb3J0IHtJbWFnZVNpemV9IGZyb20gJy4uL21vZGVsL2ltYWdlLXNpemUnO1xyXG5pbXBvcnQge0xpZ2h0bmluZ30gZnJvbSAnLi4vbW9kZWwvbGlnaHRuaW5nJztcclxuaW1wb3J0IHtSZW5kZXJFbnZpcm9ubWVudH0gZnJvbSAnLi4vbW9kZWwvcmVuZGVyLWVudmlyb25tZW50JztcclxuaW1wb3J0IHtSZW5kZXJRdWV1ZUl0ZW19IGZyb20gJy4uL21vZGVsL3JlbmRlci1xdWV1ZS1pdGVtJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9yU2V0dGluZ3NTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvaG9tZWRlY29yYXRvci1zZXR0aW5ncy5zZXJ2aWNlJztcclxuaW1wb3J0IHtCdWlsZEZ1cm5pdHVyZVNlcnZpY2V9IGZyb20gJy4uLy4uL3RocmVlZHNlbGVjdG9yL3RocmVlZHNlbGVjdG9yL3NlcnZpY2UvYnVpbGQtZnVybml0dXJlLnNlcnZpY2UnO1xyXG5pbXBvcnQge0V4cG9ydFNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS9leHBvcnQuc2VydmljZSc7XHJcbmltcG9ydCB7Q2FtZXJhU2VydmljZX0gZnJvbSAnLi4vLi4vY29yZTNkL3NlcnZpY2UvY2FtZXJhLnNlcnZpY2UnO1xyXG5pbXBvcnQge1NjZW5lU2VydmljZX0gZnJvbSAnLi4vLi4vY29yZTNkL3NlcnZpY2Uvc2NlbmUuc2VydmljZSc7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvckNvbm5lY3RvclNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS9ob21lZGVjb3JhdG9yLWNvbm5lY3Rvci5zZXJ2aWNlJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9yQ29ubmVjdG9yQWRhcHRlclNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS9ob21lZGVjb3JhdG9yLWNvbm5lY3Rvci1hZGFwdGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQge1RocmVlZHNlbGVjdG9yU2VydmljZX0gZnJvbSAnLi4vLi4vdGhyZWVkc2VsZWN0b3IvdGhyZWVkc2VsZWN0b3Ivc2VydmljZS90aHJlZWRzZWxlY3Rvci5zZXJ2aWNlJztcclxuaW1wb3J0IHtUb2FzdFNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS90b2FzdC5zZXJ2aWNlJztcclxuaW1wb3J0IHtNZXNzYWdlQnVzU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL21lc3NhZ2UtYnVzLnNlcnZpY2UnO1xyXG5pbXBvcnQge0dvb2dsZVRhZ01hbmFnZXJTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlL2dvb2dsZS10YWctbWFuYWdlci5zZXJ2aWNlJztcclxuaW1wb3J0IHtSb29tU2VydmljZX0gZnJvbSAnLi4vLi4vcm9vbS1wbGFubmVyL2NvbXBvbmVudHMvZmxvb3JwbGFubmVyL3NlcnZpY2Uvcm9vbS5zZXJ2aWNlJztcclxuaW1wb3J0IHtGbG9vclNlcnZpY2V9IGZyb20gJy4uLy4uL2NvcmUzZC9zZXJ2aWNlL2Zsb29yLnNlcnZpY2UnO1xyXG5pbXBvcnQge0xvYWRGdXJuaXR1cmVTZXJ2aWNlfSBmcm9tICcuLi8uLi90aHJlZWRzZWxlY3Rvci90aHJlZWRzZWxlY3Rvci9zZXJ2aWNlL2xvYWQtZnVybml0dXJlLnNlcnZpY2UnO1xyXG5pbXBvcnQge0N1c3RvbUZsb29yR3JvdXBSZXN1bHR9IGZyb20gJy4uLy4uL2NvcmUzZC9tb2RlbC9jdXN0b20tZmxvb3ItZ3JvdXAtcmVzdWx0JztcclxuaW1wb3J0IHtUb2FzdH0gZnJvbSAnLi4vLi4vLi4vY29yZS9tb2RlbC90b2FzdCc7XHJcbmltcG9ydCB7VG9hc3RUeXBlfSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVsL3RvYXN0LXR5cGUnO1xyXG5pbXBvcnQge01lc3NhZ2VUeXBlfSBmcm9tICcuLi8uLi8uLi9jb3JlL2VudW0vbWVzc2FnZS10eXBlLmVudW0nO1xyXG5pbXBvcnQge1JlbmRlckRhdGF9IGZyb20gJy4uL21vZGVsL3JlbmRlci1kYXRhJztcclxuaW1wb3J0IHtSZW5kZXJTZXR0aW5nc30gZnJvbSAnLi4vbW9kZWwvcmVuZGVyLXNldHRpbmdzJztcclxuaW1wb3J0IHtGaWxlVXRpbHN9IGZyb20gJy4uLy4uLy4uL2NvcmUvdXRpbHMvZmlsZS51dGlscyc7XHJcbmltcG9ydCB7UmVuZGVyU3RhdHVzfSBmcm9tICcuLi9lbnVtL3JlbmRlci1zdGF0dXMnO1xyXG5pbXBvcnQge0N1c3RvbUZsb29ySXRlbX0gZnJvbSAnLi4vLi4vY29yZTNkL2l0ZW1zL2N1c3RvbS1mbG9vci1pdGVtJztcclxuaW1wb3J0IHtJdGVtfSBmcm9tICcuLi8uLi9jb3JlM2QvaXRlbXMvaXRlbSc7XHJcbmltcG9ydCB7SXRlbUdyb3VwfSBmcm9tICcuLi8uLi9jb3JlM2QvaXRlbXMvaXRlbS1ncm91cCc7XHJcbmltcG9ydCB7RXhwb3J0T2JqZWN0fSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVsL2V4cG9ydC1vYmplY3QnO1xyXG5pbXBvcnQge0dvb2dsZVRhZ01hbmFnZXJFdmVudH0gZnJvbSAnLi4vLi4vLi4vY29yZS9lbnVtL2dvb2dsZS10YWctbWFuYWdlci1ldmVudC5lbnVtJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZW5kZXJTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuXHJcbiAgcHVibGljIHJlYWRvbmx5IHJlbmRlck1vZGVzID0gUmVuZGVyTW9kZXM7XHJcblxyXG4gIHB1YmxpYyBzZXJ2aWNlOiBTZXJ2aWNlO1xyXG5cclxuICBwdWJsaWMgc2VydmVyRGF0YTogYW55O1xyXG4gIHB1YmxpYyBzY2VuZURhdGE6IGFueTtcclxuICBwdWJsaWMgcHJldkl0ZW06IGFueTtcclxuXHJcbiAgcHVibGljIHN0cmVhbWluZzogYW55ID0ge307XHJcblxyXG4gIHB1YmxpYyByZW5kZXJlZFJvb21JbWFnZXM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gIHB1YmxpYyBjb25uZWN0aW9uU3RhdHVzOiBDb25uZWN0aW9uU3RhdHVzID0gQ29ubmVjdGlvblN0YXR1cy5Jc1VuZGVmaW5lZDtcclxuXHJcbiAgcHVibGljIHJlbmRlcnM6IFJlbmRlcltdID0gW107XHJcbiAgcHVibGljIGNhbWVyYVBvc2l0aW9uczogQ2FtZXJhUG9zaXRpb25bXSA9IFtdO1xyXG4gIHB1YmxpYyBpbWFnZVNpemVzOiBJbWFnZVNpemVbXSA9IFtcclxuICAgIHtpZDogMSwgbmFtZTogJ1NtYWxsJywgd2lkdGg6IDQwMCwgaGVpZ2h0OiAzMDB9LFxyXG4gICAge2lkOiAyLCBuYW1lOiAnU2hvcCcsIHdpZHRoOiA4MDAsIGhlaWdodDogODAwfSxcclxuICAgIHtpZDogMywgbmFtZTogJ0Z1bGwgSEQnLCB3aWR0aDogMTkyMCwgaGVpZ2h0OiAxMDgwfSxcclxuICAgIHtpZDogNCwgbmFtZTogJzRLJywgd2lkdGg6IDQwOTYsIGhlaWdodDogMjE2MH1cclxuICBdO1xyXG5cclxuICBwdWJsaWMgbGlnaHRuaW5nczogTGlnaHRuaW5nW10gPSBbXHJcbiAgICB7aWQ6IDEsIG5hbWU6ICdMaWdodCcsIHNldHRpbmdzOiBbXX0sXHJcbiAgICB7aWQ6IDIsIG5hbWU6ICdNZWRpdW0nLCBzZXR0aW5nczogW119LFxyXG4gICAge2lkOiAzLCBuYW1lOiAnSGVheScsIHNldHRpbmdzOiBbXX1cclxuICBdO1xyXG5cclxuICBwdWJsaWMgcmVuZGVyRW52aXJvbm1lbnRzOiBSZW5kZXJFbnZpcm9ubWVudFtdID0gW1xyXG4gICAge2lkOiAxLCBuYW1lOiAnTm9uZScsIGhkckZpbGU6ICcnLCBpbnRlbnNpdHk6IDEuMH0sXHJcbiAgICB7aWQ6IDIsIG5hbWU6ICdNb2Rlcm4gY2l0eScsIGhkckZpbGU6ICdjYW5hcnlfd2hhcmZfMmsuaGRyJywgaW50ZW5zaXR5OiAyLjV9LFxyXG4gICAge2lkOiAzLCBuYW1lOiAnQ2l0eSBwYXJrJywgaGRyRmlsZTogJ2RyZXNkZW5fbW9hdF8yay5oZHInLCBpbnRlbnNpdHk6IDIuNX0sXHJcbiAgICB7aWQ6IDQsIG5hbWU6ICdOaWdodCBpbiB0aGUgY2l0eScsIGhkckZpbGU6ICdoYW5zYXBsYXR6XzJrLmhkcicsIGludGVuc2l0eTogMS4wfSxcclxuICAgIHtpZDogNSwgbmFtZTogJ05pZ2h0IGluIHRoZSBjb3VudHJ5c2lkZScsIGhkckZpbGU6ICdrbG9wcGVuaGVpbV8wMl8yay5oZHInLCBpbnRlbnNpdHk6IDEuMH0sXHJcbiAgICB7aWQ6IDYsIG5hbWU6ICdGb3Jlc3QnLCBoZHJGaWxlOiAnbmFnb3lhX3dhbGxfcGF0aF8yay5oZHInLCBpbnRlbnNpdHk6IDEuMH0sXHJcbiAgICB7aWQ6IDcsIG5hbWU6ICdTbm93JywgaGRyRmlsZTogJ3Nub3d5X2ZvcmVzdF9wYXRoXzAxXzJrLmhkcicsIGludGVuc2l0eTogMS4wfSxcclxuICAgIHtpZDogOCwgbmFtZTogJ1Bhc3R1cmUnLCBoZHJGaWxlOiAnc3BydWl0X3N1bnJpc2VfMmsuaGRyJywgaW50ZW5zaXR5OiAxLjB9LFxyXG4gICAge2lkOiA5LCBuYW1lOiAnRmllbGQnLCBoZHJGaWxlOiAnc3VuZmxvd2Vyc18yay5oZHInLCBpbnRlbnNpdHk6IDEuMH0sXHJcbiAgICB7aWQ6IDEwLCBuYW1lOiAnT2xkIGNpdHkgYW5kIGNhbmFscycsIGhkckZpbGU6ICd0ZWFyc19vZl9zdGVlbF9icmlkZ2VfMmsuaGRyJywgaW50ZW5zaXR5OiAxLjB9LFxyXG4gICAge2lkOiAxMSwgbmFtZTogJ0VzdGF0ZScsIGhkckZpbGU6ICd0aWVyZ2FydGVuXzJrLmhkcicsIGludGVuc2l0eTogMS4wfSxcclxuICAgIHtpZDogMTIsIG5hbWU6ICdCZWFjaCcsIGhkckZpbGU6ICd1bWhsYW5nYV9zdW5yaXNlXzJrLmhkcicsIGludGVuc2l0eTogMi41fSxcclxuICAgIHtpZDogMTMsIG5hbWU6ICdSZXNpZGVudGlhbCBhcmVhIHdpdGggcGFyaycsIGhkckZpbGU6ICd1cmJhbl9zdHJlZXRfMDFfMmsuaGRyJywgaW50ZW5zaXR5OiAxLjB9LFxyXG4gICAge2lkOiAxNCwgbmFtZTogJ1Jlc2lkZW50aWFsIGFyZWEnLCBoZHJGaWxlOiAndXJiYW5fc3RyZWV0XzAzXzJrLmhkcicsIGludGVuc2l0eTogMS4wfSxcclxuICBdO1xyXG5cclxuICBwdWJsaWMgcmVuZGVyU2NlbmVzOiBhbnkgPSBbXHJcbiAgICB7aWQ6IDEsIG5hbWU6ICdzY2VuZV9ncmFzc19jeWNsZXNfTVJQJywgc2NlbmVBc3NldElkOiAnc2NlbmVfZ3Jhc3NfY3ljbGVzX01SUCd9LFxyXG4gICAge2lkOiAyLCBuYW1lOiAnc2NlbmVfbGFrZV9jeWNsZXNfTVJQJywgc2NlbmVBc3NldElkOiAnc2NlbmVfbGFrZV9jeWNsZXNfTVJQJ30sXHJcbiAgICB7aWQ6IDMsIG5hbWU6ICdzY2VuZV9za3lfY3ljbGVzX01SUCcsIHNjZW5lQXNzZXRJZDogJ3NjZW5lX3NreV9jeWNsZXNfTVJQJ30sXHJcbiAgICB7aWQ6IDQsIG5hbWU6ICdzY2VuZV9nYXJkZW5fY3ljbGVzX01SUCcsIHNjZW5lQXNzZXRJZDogJ3NjZW5lX2dhcmRlbl9jeWNsZXNfTVJQJ30sXHJcbiAgICB7aWQ6IDUsIG5hbWU6ICdzY2VuZV9uYXR1cmVfY3ljbGVzX01SUCcsIHNjZW5lQXNzZXRJZDogJ3NjZW5lX25hdHVyZV9jeWNsZXNfTVJQJ31cclxuICBdO1xyXG5cclxuXHJcbiAgcHJpdmF0ZSBfY2VpbGluZ0xpZ2h0TWFyZ2luOiBudW1iZXIgPSAwLjU7XHJcblxyXG4gIHB1YmxpYyBzZWxlY3RlZEltYWdlU2l6ZTogbnVtYmVyID0gMztcclxuICBwdWJsaWMgc2VsZWN0ZWRFbnZpcm9ubWVudDogbnVtYmVyID0gMTtcclxuICBwdWJsaWMgc2VsZWN0ZWRSZW5kZXJTY2VuZTogc3RyaW5nID0gdGhpcy5yZW5kZXJTY2VuZXNbMF0uc2NlbmVBc3NldElkO1xyXG5cclxuICBwdWJsaWMgYmxlbmRlclJlbmRlclNlcnZpY2U6IGJvb2xlYW4gPSB0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MuYmxlbmRlclJlbmRlclNlcnZpY2U7XHJcblxyXG4gIHB1YmxpYyBwb3NpdGlvbnM6IG51bWJlciA9IDE7XHJcbiAgcHVibGljIHNhdmU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcHVibGljIHJlbmRlclJvb21JbWFnZUNoYW5nZWQ6IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+ID0gbmV3IEJlaGF2aW9yU3ViamVjdCgnJyk7XHJcbiAgcHVibGljIHJlbmRlcmluZ1N0YXJ0ZWQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xyXG4gIHB1YmxpYyByZW5kZXJJbWFnZUNoYW5nZWQ6IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+ID0gbmV3IEJlaGF2aW9yU3ViamVjdCgnJyk7XHJcblxyXG4gIHB1YmxpYyByZW5kZXJRdWV1ZTogYW55W10gPSBbXTtcclxuICBwdWJsaWMgY3VycmVudFF1ZXVlUmVuZGVySXRlbTogUmVuZGVyUXVldWVJdGVtID0gbmV3IFJlbmRlclF1ZXVlSXRlbSgpO1xyXG4gIHB1YmxpYyBjdXJyZW50UHJvZHVjdEhhc2g6IHN0cmluZyA9ICcnO1xyXG4gIHB1YmxpYyBzdGFuZEFsb25lQ2FtZXJhTWF0cml4OiBudW1iZXJbXTtcclxuXHJcbiAgcHJpdmF0ZSBfc3ViczogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuXHJcbiAgcHVibGljIHN0YXRpYyBNYWtlV2luZG93TWF0ZXJpYWxUcmFuc3BhcmVudChtYXRlcmlhbDogTWF0ZXJpYWwpOiBNYXRlcmlhbCB7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhtYXRlcmlhbCk7XHJcbiAgICBtYXRlcmlhbC50cmFuc3BhcmVudCA9IHRydWU7XHJcbiAgICBtYXRlcmlhbC5vcGFjaXR5ID0gTWF0aC5taW4obWF0ZXJpYWwub3BhY2l0eSwgMC40KTtcclxuICAgIHJldHVybiBtYXRlcmlhbDtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBfc2V0dGluZ3NTZXJ2aWNlOiBIb21lZGVjb3JhdG9yU2V0dGluZ3NTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfYnVpbGRGdXJuaXR1cmVTZXJ2aWNlOiBCdWlsZEZ1cm5pdHVyZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9leHBvcnRTZXJ2aWNlOiBFeHBvcnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfY2FtZXJhU2VydmljZTogQ2FtZXJhU2VydmljZSxcclxuICAgIHByaXZhdGUgX3NjZW5lU2VydmljZTogU2NlbmVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfaW9uZTogSG9tZWRlY29yYXRvckNvbm5lY3RvclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9pb25lQ29ubmVjdG9yQWRhcHRlcjogSG9tZWRlY29yYXRvckNvbm5lY3RvckFkYXB0ZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfdGhyZWVkU2VsZWN0b3JTZXJ2aWNlOiBUaHJlZWRzZWxlY3RvclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF90b2FzdFNlcnZpY2U6IFRvYXN0U2VydmljZSxcclxuICAgIHByaXZhdGUgX21lc3NhZ2VCdXNTZXJ2aWNlOiBNZXNzYWdlQnVzU2VydmljZSxcclxuICAgIHByaXZhdGUgX2dvb2dsZVRhZ01hbmFnZXI6IEdvb2dsZVRhZ01hbmFnZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfcm9vbVNlcnZpY2U6IFJvb21TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZmxvb3JTZXJ2aWNlOiBGbG9vclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9sb2FkRnVybml0dXJlU2VydmljZTogTG9hZEZ1cm5pdHVyZVNlcnZpY2VcclxuICApIHtcclxuICAgIHRoaXMuc2VydmljZSA9IG5ldyBTZXJ2aWNlKCk7XHJcbiAgICB0aGlzLnNjZW5lRGF0YSA9IHt9O1xyXG5cclxuICAgIHRoaXMuX3N1YnMucHVzaChcclxuICAgICAgdGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzTG9hZGVkLnN1YnNjcmliZSgobG9hZGVkOiBib29sZWFuKSA9PiB7XHJcbiAgICAgICAgaWYgKGxvYWRlZCkge1xyXG4gICAgICAgICAgLy8gaWYgKCF0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Mub3B0aW9ucy51c2VOZXdSZW5kZXIpIHtcclxuICAgICAgICAgIHRoaXMuc2VydmVyRGF0YSA9IHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5yZW5kZXJQYXJhbWV0ZXJzO1xyXG4gICAgICAgICAgaWYgKHRoaXMuc2VydmVyRGF0YSkge1xyXG4gICAgICAgICAgICB0aGlzLnNlcnZlckRhdGEuc2V0dXAgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5jaGVja0Nvbm5lY3Rpb24oKTtcclxuICAgICAgICAgICAgdGhpcy5fcmVuZGVyU2VydmljZUhlYXJ0QmVhdCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gfVxyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICAgIHRoaXMuX2J1aWxkRnVybml0dXJlU2VydmljZS5idWlsZEZpbmlzaGVkLnN1YnNjcmliZShcclxuICAgICAgICAocmVzdWx0OiBDdXN0b21GbG9vckdyb3VwUmVzdWx0KSA9PiB0aGlzLl9jaGVja1Zpc2libGVVcGRhdGVzKHJlc3VsdC5mdXJuaXR1cmUgPyByZXN1bHQuZnVybml0dXJlIDogbnVsbClcclxuICAgICAgKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZXJ2aWNlLmNsb3NlKCk7XHJcbiAgICB0aGlzLl9zdWJzLmZvckVhY2gocyA9PiBzLnVuc3Vic2NyaWJlKCkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGNoZWNrQ29ubmVjdGlvbigpOiBQcm9taXNlPHZvaWQ+IHtcclxuXHJcbiAgICBpZiAodGhpcy5zZXJ2aWNlLnZhbGlkYXRlKCkgPT09IGZhbHNlKSB7XHJcblxyXG4gICAgICB0cnkge1xyXG5cclxuICAgICAgICBjb25zdCB1cmwgPSBgJHsodGhpcy5zZXJ2ZXJEYXRhLnNlY3VyZSA/ICd3c3MnIDogJ3dzJyl9Oi8vJHt0aGlzLnNlcnZlckRhdGEuaG9zdH06JHt0aGlzLnNlcnZlckRhdGEucG9ydH0vc2VydmljZS9gO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuc2VydmljZS5jb25uZWN0KHVybCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNlcnZlckRhdGEuc2V0dXAgPSB0cnVlO1xyXG4gICAgICAgIH0pLmNhdGNoKChyZWopID0+IHtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlLm9uKCdlcnJvcicsIGFzeW5jIChvYmplY3QpID0+IHtcclxuICAgICAgICAgIHRoaXMuc2VydmVyRGF0YS5zZXR1cCA9IGZhbHNlO1xyXG4gICAgICAgICAgaWYgKHRoaXMuY29ubmVjdGlvblN0YXR1cyAhPT0gQ29ubmVjdGlvblN0YXR1cy5UcnlpbmdUb0Nvbm5lY3QpIHtcclxuICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uU3RhdHVzID0gQ29ubmVjdGlvblN0YXR1cy5Jc0Rpc0Nvbm5lY3RlZDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGF3YWl0IHRoaXMuX29uUmVuZGVyRXJyb3IoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnNlcnZpY2Uub24oJ2Nsb3NlJywgYXN5bmMgKG9iamVjdCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zZXJ2ZXJEYXRhLnNldHVwID0gZmFsc2U7XHJcbiAgICAgICAgICBpZiAodGhpcy5jb25uZWN0aW9uU3RhdHVzICE9PSBDb25uZWN0aW9uU3RhdHVzLlRyeWluZ1RvQ29ubmVjdCkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb25TdGF0dXMgPSBDb25uZWN0aW9uU3RhdHVzLklzRGlzQ29ubmVjdGVkO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYXdhaXQgdGhpcy5fb25SZW5kZXJDbG9zZSgpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcblxyXG4gICAgICAgIHRoaXMuc2VydmVyRGF0YS5zZXR1cCA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZW5kZXJTZXJ2aWNlSGVhcnRCZWF0KCk6IHZvaWQge1xyXG5cclxuICAgIHNldEludGVydmFsKCgpID0+IHtcclxuICAgICAgaWYgKHRoaXMuY29ubmVjdGlvblN0YXR1cyA9PT0gQ29ubmVjdGlvblN0YXR1cy5Jc0Rpc0Nvbm5lY3RlZCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Mub3B0aW9ucy5zaG93UmVuZGVyQ29ubmVjdGlvbkluZm8pIHtcclxuICAgICAgICAgIGNvbnN0IHRvYXN0ID0gbmV3IFRvYXN0KCk7XHJcbiAgICAgICAgICB0b2FzdC5tZXNzYWdlID0gJ0NPTk5FQ1RJT05fV0lUSF9SRU5ERVJfU0VSVklDRV9MT1NUJztcclxuICAgICAgICAgIHRvYXN0LnR5cGUgPSBUb2FzdFR5cGUuRXJyb3I7XHJcbiAgICAgICAgICB0aGlzLl90b2FzdFNlcnZpY2Uuc2hvd1RvYXN0KHRvYXN0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jb25uZWN0aW9uU3RhdHVzID0gQ29ubmVjdGlvblN0YXR1cy5UcnlpbmdUb0Nvbm5lY3Q7XHJcbiAgICAgICAgdGhpcy5jaGVja0Nvbm5lY3Rpb24oKTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbm5lY3Rpb25TdGF0dXMgPT09IENvbm5lY3Rpb25TdGF0dXMuVHJ5aW5nVG9Db25uZWN0KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VydmVyRGF0YS5zZXR1cCA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgIHRoaXMuX21lc3NhZ2VCdXNTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuUmVuZGVyU2VydmljZVRyeVRvQ29ubmVjdCk7XHJcbiAgICAgICAgICB0aGlzLmNoZWNrQ29ubmVjdGlvbigpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLm9wdGlvbnMuc2hvd1JlbmRlckNvbm5lY3Rpb25JbmZvKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRvYXN0ID0gbmV3IFRvYXN0KCk7XHJcbiAgICAgICAgICAgIHRvYXN0Lm1lc3NhZ2UgPSAnUkVfQ09OTkVDVEVEX1dJVEhfUkVOREVSX1NFUlZJQ0UnO1xyXG4gICAgICAgICAgICB0b2FzdC50eXBlID0gVG9hc3RUeXBlLlN1Y2Nlc3M7XHJcbiAgICAgICAgICAgIHRoaXMuX3RvYXN0U2VydmljZS5zaG93VG9hc3QodG9hc3QpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5jb25uZWN0aW9uU3RhdHVzID0gQ29ubmVjdGlvblN0YXR1cy5Jc0Nvbm5lY3RlZDtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jb25uZWN0aW9uU3RhdHVzID09PSBDb25uZWN0aW9uU3RhdHVzLklzQ29ubmVjdGVkKSB7XHJcbiAgICAgICAgdGhpcy5fbWVzc2FnZUJ1c1NlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5SZW5kZXJTZXJ2aWNlQ29ubmVjdGVkKTtcclxuICAgICAgfVxyXG4gICAgfSwgMjAwMCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0UmVuZGVyUGFyYW1ldGVycyh0eXBlOiBSZW5kZXJNb2Rlcyk6IFJlbmRlckRhdGEge1xyXG5cclxuICAgIGNvbnN0IHBhcmFtczogUmVuZGVyRGF0YSA9IG5ldyBSZW5kZXJEYXRhKCk7XHJcblxyXG4gICAgaWYgKHR5cGUgIT09IFJlbmRlck1vZGVzLlJlbmRlcklvbmUpIHtcclxuICAgICAgY29uc3QgY3VycmVudEltYWdlU2l6ZSA9IHRoaXMuZ2V0SW1hZ2VTaXplT25JZCh0aGlzLnNlbGVjdGVkSW1hZ2VTaXplKTtcclxuICAgICAgcGFyYW1zLmltYWdlV2lkdGggPSBOdW1iZXIoY3VycmVudEltYWdlU2l6ZS53aWR0aCk7XHJcbiAgICAgIHBhcmFtcy5pbWFnZUhlaWdodCA9IE51bWJlcihjdXJyZW50SW1hZ2VTaXplLmhlaWdodCk7XHJcbiAgICB9XHJcblxyXG4gICAgcGFyYW1zLmNvbmZpZ3VyZWRJdGVtID0gdGhpcy5fZ2V0Q29uZmlndXJlZEZ1cm5pdHVyZUl0ZW0oKTtcclxuICAgIHBhcmFtcy5jYW1lcmFGT1YgPSB0aGlzLl9jYW1lcmFTZXJ2aWNlLmNhbWVyYS5mb3Y7XHJcbiAgICBwYXJhbXMudHlwZSA9IHR5cGU7XHJcblxyXG4gICAgaWYgKHR5cGUgPT09IHRoaXMucmVuZGVyTW9kZXMuUmVuZGVyU2hvcCkge1xyXG4gICAgICBwYXJhbXMuY2FtZXJhRk9WID0gMzA7XHJcblxyXG4gICAgICBpZiAodGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLnJlbmRlclBhcmFtZXRlcnMuc2V0dGluZ3MgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHBhcmFtcy5zZXR0aW5ncyA9IHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5yZW5kZXJQYXJhbWV0ZXJzLnNldHRpbmdzO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IHRoaXMucmVuZGVyTW9kZXMuUmVuZGVyUm9vbSkge1xyXG4gICAgICBjb25zdCByZW5kZXJFbnZpcm9ubWVudCA9IHRoaXMuZ2V0UmVuZGVyRW52aXJvbm1lbnRPbklkKHRoaXMuc2VsZWN0ZWRFbnZpcm9ubWVudCk7XHJcbiAgICAgIHBhcmFtcy5zZXR0aW5ncyA9IG5ldyBSZW5kZXJTZXR0aW5ncygpO1xyXG4gICAgICBwYXJhbXMuc2V0dGluZ3MuZW52aXJvbm1lbnRIZHIgPSByZW5kZXJFbnZpcm9ubWVudC5oZHJGaWxlO1xyXG4gICAgICBwYXJhbXMuc2V0dGluZ3MuZW52aXJvbm1lbnRJbnRlbnNpdHkgPSByZW5kZXJFbnZpcm9ubWVudC5pbnRlbnNpdHk7XHJcblxyXG4gICAgICBjb25zdCBmbG9vclBsYW5IYXNSb29tcyA9IHRoaXMuX3Jvb21TZXJ2aWNlLnJvb21zWzBdO1xyXG4gICAgICBjb25zdCBjZWlsaW5nT3JGbG9vciA9IGZsb29yUGxhbkhhc1Jvb21zID8gdGhpcy5fcm9vbVNlcnZpY2Uucm9vbXNbMF0uY2VpbGluZ1BsYW5lIDogdGhpcy5fZmxvb3JTZXJ2aWNlLmdldEZsb29yUGxhbmUoKTtcclxuICAgICAgY29uc3QgYmIgPSBuZXcgQm94MygpLnNldEZyb21PYmplY3QoY2VpbGluZ09yRmxvb3IpO1xyXG4gICAgICBjb25zdCBiYlNpemU6IFZlY3RvcjMgPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgICBiYi5nZXRTaXplKGJiU2l6ZSk7XHJcbiAgICAgIHBhcmFtcy5zZXR0aW5ncy5leHRyYUxpZ2h0cyA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICB4MTogYmIubWluLnggKyB0aGlzLl9jZWlsaW5nTGlnaHRNYXJnaW4sXHJcbiAgICAgICAgICB6MTogYmIubWluLnogKyB0aGlzLl9jZWlsaW5nTGlnaHRNYXJnaW4sXHJcbiAgICAgICAgICB4MjogYmIubWF4LnggLSB0aGlzLl9jZWlsaW5nTGlnaHRNYXJnaW4sXHJcbiAgICAgICAgICB6MjogYmIubWF4LnogLSB0aGlzLl9jZWlsaW5nTGlnaHRNYXJnaW4sXHJcbiAgICAgICAgICBoZWlnaHQ6IGZsb29yUGxhbkhhc1Jvb21zID8gY2VpbGluZ09yRmxvb3IucG9zaXRpb24ueSA6IDIuNixcclxuICAgICAgICB9XHJcbiAgICAgIF07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHBhcmFtcztcclxuICB9XHJcblxyXG4gIC8vIFRoZSBHTFRGRXhwb3J0ZXIgbmVlZHMgbGlnaHRzIHRvIGJlIGNvbmZpZ3VyZWQgbGlrZSB0aGlzLFxyXG4gIC8vIG90aGVyd2lzZSB0aGV5IHdpbGwgYWxsIHBvaW50IGluIHRoZSBzYW1lIGRpcmVjdGlvbi5cclxuICBwcml2YXRlIF9maXhMaWdodChlbGVtZW50OiBEaXJlY3Rpb25hbExpZ2h0IHwgU3BvdExpZ2h0KTogdm9pZCB7XHJcbiAgICBlbGVtZW50LnRhcmdldC5wYXJlbnQgPSBlbGVtZW50O1xyXG4gICAgZWxlbWVudC5sb29rQXQoZWxlbWVudC50YXJnZXQucG9zaXRpb24pO1xyXG4gICAgZWxlbWVudC50YXJnZXQucG9zaXRpb24ueCA9IDA7XHJcbiAgICBlbGVtZW50LnRhcmdldC5wb3NpdGlvbi55ID0gMDtcclxuICAgIGVsZW1lbnQudGFyZ2V0LnBvc2l0aW9uLnogPSAtMTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2VsZW1lbnRNdXN0QmVSZW1vdmVkKGVsZW1lbnQ6IE9iamVjdDNEKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoZWxlbWVudC50eXBlID09PSAnUGVyc3BlY3RpdmVDYW1lcmEnKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgaWYgKCFlbGVtZW50Lm5hbWUpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGxjTmFtZSA9IGVsZW1lbnQubmFtZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgLy8gZWxlbWVudHMgd2l0aCBhIG5hbWUgc3RhcnRpbmcgd2l0aCBjXyBhcmUgY29ubmVjdG9ycyxcclxuICAgIC8vIHdoaWNoIHNob3VsZCBub3QgYmUgdmlzaWJsZS5cclxuICAgIGlmIChsY05hbWUuc3RhcnRzV2l0aCgnY18nKSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZWxlbWVudC5uYW1lLnN0YXJ0c1dpdGgoJ3NuYXBwaW5nLXByZXZpZXctbWVzaCcpKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX2V4cG9ydFRvR2xiKCk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICBjb25zdCBhc3NldFBhdGg6IHN0cmluZyA9IHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5hc3NldFBhdGg7XHJcbiAgICAvLyBUaGUgZ3JvdW5kIHBsYW5lIGxvb2tzIG9kZCBpbiByZW5kZXJzLlxyXG4gICAgLy8gVGhlIGh1ZC1yaW5nIGFuZCBodWQtY2lyY2xlIGFyZSB0aGUgd2Fsa3Rocm91Z2ggbW9kZSBtYXJrZXIsXHJcbiAgICAvLyB3aGljaCBpcyBub3Qgc3VwcG9zZWQgdG8gYmUgcmVuZGVyZWQuXHJcbiAgICBjb25zdCBlbGVtZW50c1RvUmVtb3ZlID0gWydncm91bmQtcGxhbmUnLCAnaHVkLXJpbmcnLCAnaHVkLWNpcmNsZSddO1xyXG5cclxuICAgIGxldCBzY2VuZTogU2NlbmU7XHJcbiAgICB0cnkge1xyXG4gICAgICBzY2VuZSA9IHRoaXMuX3NjZW5lU2VydmljZS5zY2VuZS5jbG9uZSgpO1xyXG5cclxuICAgICAgZWxlbWVudHNUb1JlbW92ZS5mb3JFYWNoKGVsZW1lbnROYW1lID0+IHtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZE9iamVjdDogT2JqZWN0M0QgPSBzY2VuZS5nZXRPYmplY3RCeU5hbWUoZWxlbWVudE5hbWUpO1xyXG4gICAgICAgIHNjZW5lLnJlbW92ZShzZWxlY3RlZE9iamVjdCk7XHJcbiAgICAgIH0pO1xyXG4gICAgICAvLyBVc2luZyB0aGUgcGFyZW50cywgYmVjYXVzZSBzY2VuZS5yZW1vdmUgZG9lcyBub3Qgc2VlbSB0byB3b3JrIGNvcnJlY3RseS5cclxuICAgICAgY29uc3QgcGFyZW50cyA9IFtdO1xyXG4gICAgICBzY2VuZS50cmF2ZXJzZShlbGVtZW50ID0+IHtcclxuICAgICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIERpcmVjdGlvbmFsTGlnaHQgfHwgZWxlbWVudCBpbnN0YW5jZW9mIFNwb3RMaWdodCkge1xyXG4gICAgICAgICAgdGhpcy5fZml4TGlnaHQoZWxlbWVudCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZWxlbWVudC52aXNpYmxlID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgLy8gY29uc29sZS5sb2coXCJFbGVtZW50IFwiICsgZWxlbWVudC5uYW1lICsgXCIgd2FzIGludmlzaWJsZSwgbWFraW5nIGl0IHZpc2libGUuXCIpO1xyXG4gICAgICAgICAgZWxlbWVudC52aXNpYmxlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgTWVzaCAmJiBlbGVtZW50Lm5hbWUgJiYgZWxlbWVudC5uYW1lLnN0YXJ0c1dpdGgoJ2N1c3RvbU1lc2hXaW5kb3cnKSkge1xyXG4gICAgICAgICAgbGV0IGhhc0N1c3RvbVRleHR1cmU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5tYXRlcmlhbCBpbnN0YW5jZW9mIE1hdGVyaWFsKSB7XHJcblxyXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5tYXRlcmlhbCBpbnN0YW5jZW9mIE1lc2hQaG9uZ01hdGVyaWFsICYmIGVsZW1lbnQubWF0ZXJpYWwubWFwKSB7XHJcbiAgICAgICAgICAgICAgaGFzQ3VzdG9tVGV4dHVyZSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxlbWVudC5tYXRlcmlhbCA9IFJlbmRlclNlcnZpY2UuTWFrZVdpbmRvd01hdGVyaWFsVHJhbnNwYXJlbnQoZWxlbWVudC5tYXRlcmlhbCk7XHJcblxyXG4gICAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGVsZW1lbnQubWF0ZXJpYWwpKSB7XHJcblxyXG4gICAgICAgICAgICBlbGVtZW50Lm1hdGVyaWFsLmZvckVhY2goZnVuY3Rpb24gKG1hdGVyaWFsOiBNYXRlcmlhbCwgaW5kZXgpIHtcclxuICAgICAgICAgICAgICBpZiAobWF0ZXJpYWwgaW5zdGFuY2VvZiBNZXNoUGhvbmdNYXRlcmlhbCAmJiBtYXRlcmlhbC5tYXApIHtcclxuICAgICAgICAgICAgICAgIGhhc0N1c3RvbVRleHR1cmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbGVtZW50Lm1hdGVyaWFsW2luZGV4XSA9IFJlbmRlclNlcnZpY2UuTWFrZVdpbmRvd01hdGVyaWFsVHJhbnNwYXJlbnQobWF0ZXJpYWwpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoIWhhc0N1c3RvbVRleHR1cmUpIHtcclxuICAgICAgICAgICAgZWxlbWVudC5uYW1lID0gJ2dsYXNzJztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9lbGVtZW50TXVzdEJlUmVtb3ZlZChlbGVtZW50KSkge1xyXG4gICAgICAgICAgcGFyZW50cy5wdXNoKGVsZW1lbnQucGFyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICBwYXJlbnRzLmZvckVhY2gocGFyZW50ID0+IHtcclxuICAgICAgICBmb3IgKGxldCBpID0gcGFyZW50LmNoaWxkcmVuLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5fZWxlbWVudE11c3RCZVJlbW92ZWQocGFyZW50LmNoaWxkcmVuW2ldKSkge1xyXG4gICAgICAgICAgICBwYXJlbnQucmVtb3ZlKHBhcmVudC5jaGlsZHJlbltpXSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgc2NlbmUuYWRkKHRoaXMuX2NhbWVyYVNlcnZpY2UuY2FtZXJhLmNsb25lKCkpO1xyXG5cclxuICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgICB0cnM6IGZhbHNlLFxyXG4gICAgICAgIG9ubHlWaXNpYmxlOiBmYWxzZSxcclxuICAgICAgICB0cnVuY2F0ZURyYXdSYW5nZTogdHJ1ZSxcclxuICAgICAgICBiaW5hcnk6IHRydWUsXHJcbiAgICAgICAgZm9yY2VJbmRpY2VzOiBmYWxzZSxcclxuICAgICAgICBmb3JjZVBvd2VyT2ZUd29UZXh0dXJlczogZmFsc2UsXHJcbiAgICAgICAgLy8gbWF4VGV4dHVyZVNpemU6IDUwMCxcclxuICAgICAgICBlbWJlZEltYWdlczogdHJ1ZSxcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGNvbnN0IGV4cG9ydGVyOiBHTFRGRXhwb3J0ZXIgPSBuZXcgR0xURkV4cG9ydGVyKCk7XHJcbiAgICAgIGxldCBmaWxlbmFtZTogc3RyaW5nID0gJyc7XHJcblxyXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XHJcbiAgICAgICAgZXhwb3J0ZXIucGFyc2Uoc2NlbmUsIGFzeW5jIChleHBvcnRlZFNjZW5lOiBBcnJheUJ1ZmZlcikgPT4ge1xyXG4gICAgICAgICAgY29uc3QgYmxvYjogQmxvYiA9IG5ldyBCbG9iKFtleHBvcnRlZFNjZW5lXSwge3R5cGU6ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nfSk7XHJcbiAgICAgICAgICBjb25zdCByZXN1bHQ6IGFueSA9IGF3YWl0IEZpbGVVdGlscy5TYXZlR0xCRmlsZShibG9iLCBhc3NldFBhdGgpO1xyXG4gICAgICAgICAgaWYgKHJlc3VsdCAhPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgZmlsZW5hbWUgPSByZXN1bHQucGF0aDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJlc29sdmUoZmlsZW5hbWUpO1xyXG4gICAgICAgIH0sICgpID0+IHtcclxuICAgICAgICB9LCBvcHRpb25zKTtcclxuICAgICAgfSk7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIHRocm93IChlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBzdGFydFJlbmRlcmluZygpOiBQcm9taXNlPHZvaWQ+IHtcclxuXHJcbiAgICBpZiAodGhpcy5yZW5kZXJRdWV1ZS5sZW5ndGggPiAwKSB7XHJcblxyXG4gICAgICBhd2FpdCB0aGlzLmNoZWNrQ29ubmVjdGlvbigpO1xyXG5cclxuICAgICAgaWYgKHRoaXMucmVuZGVyUXVldWVbMF0ucmVuZGVyUHJvZ3Jlc3MgPT09IDAgfHwgdGhpcy5yZW5kZXJRdWV1ZVswXS5yZW5kZXJQcm9ncmVzcyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJRdWV1ZVswXS5yZW5kZXJTdGF0dXMgPSBSZW5kZXJTdGF0dXMuSXNSdW5uaW5nO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFF1ZXVlUmVuZGVySXRlbSA9IHRoaXMucmVuZGVyUXVldWVbMF07XHJcbiAgICAgICAgdGhpcy5yZW5kZXJRdWV1ZS5zaGlmdCgpO1xyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnRRdWV1ZVJlbmRlckl0ZW0ucGFyYW1zLmdsYlBhdGggPSBhd2FpdCB0aGlzLl9leHBvcnRUb0dsYigpXHJcbiAgICAgICAgICAuY2F0Y2goKGUpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGUpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5fc3RhcnRSZW5kZXJMb29wKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX2NvbGlqblJlbmRlclNjZW5lKHBhcmFtczogYW55KTogUHJvbWlzZTxhbnk+IHtcclxuXHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBjb25zdCByZXF1ZXN0UGFyYW1zID0gW3tcclxuICAgICAgICBpZDogMSxcclxuICAgICAgICBqc29ucnBjOiAnMi4wJyxcclxuICAgICAgICBtZXRob2Q6ICdjb2xpam5fcmVuZGVyX3NjZW5lX2Zyb21fZ2xiJyxcclxuICAgICAgICBwYXJhbXM6IHBhcmFtc1xyXG4gICAgICB9XTtcclxuICAgICAgY29uc3QgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XHJcbiAgICAgIHhoci5vcGVuKCdQT1NUJywgdGhpcy5fZ2V0UmVuZGVyU2VydmljZVVybCgpKTtcclxuICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnKTtcclxuICAgICAgeGhyLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICBpZiAoeGhyLnN0YXR1cyA+PSAyMDAgJiYgeGhyLnN0YXR1cyA8IDMwMCkge1xyXG4gICAgICAgICAgcmVzb2x2ZShKU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmVqZWN0KHhoci5zdGF0dXNUZXh0KTtcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcbiAgICAgIHhoci5vbmVycm9yID0gKCkgPT4gcmVqZWN0KHhoci5zdGF0dXNUZXh0KTtcclxuICAgICAgeGhyLnNlbmQoSlNPTi5zdHJpbmdpZnkocmVxdWVzdFBhcmFtcykpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9zdGFydFJlbmRlckxvb3AoKTogUHJvbWlzZTx2b2lkPiB7XHJcblxyXG4gICAgLy8gdGVtcG9yYXJ5IHNvbHV0aW9uIGJlY2F1c2UgbGFyZ2UgcmVxdWVzdCBvdmVyIHdlYnNvY2tldHMgYXJlIG5vdCB3b3JraW5nIGJlY2F1c2Ugb2YgYW4gZXJyb3IgaW4gdGhlIHNvZnR3YXJlIG9mIG1pZ2VuaXVzXHJcbiAgICBsZXQgW2luZm9dID0gYXdhaXQgdGhpcy5fY29saWpuUmVuZGVyU2NlbmUodGhpcy5jdXJyZW50UXVldWVSZW5kZXJJdGVtLnBhcmFtcyk7XHJcbiAgICBpbmZvID0gaW5mby5yZXN1bHQ7XHJcblxyXG4gICAgLypcclxuICAgIGNvbnN0IFsgaW5mbyBdID0gYXdhaXQgdGhpcy5zZXJ2aWNlLnF1ZXVlX2NvbW1hbmRzKClcclxuICAgICAgLnF1ZXVlKG5ldyBDb21tYW5kKCdjb2xpam5fcmVuZGVyX3NjZW5lJywgdGhpcy5jdXJyZW50UXVldWVSZW5kZXJJdGVtLnBhcmFtcyksIHRydWUpXHJcbiAgICAgIC5leGVjdXRlKCk7XHJcbiAgICAqL1xyXG5cclxuICAgIHRoaXMuY3VycmVudFF1ZXVlUmVuZGVySXRlbS5ob3N0ID0gdGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLnVybDtcclxuICAgIHRoaXMuY3VycmVudFF1ZXVlUmVuZGVySXRlbS5rZXkgPSBpbmZvLnNjZW5lX25hbWU7XHJcbiAgICB0aGlzLmN1cnJlbnRRdWV1ZVJlbmRlckl0ZW0udHlwZSA9IHRoaXMuY3VycmVudFF1ZXVlUmVuZGVySXRlbS5wYXJhbXMudHlwZTtcclxuICAgIHRoaXMuY3VycmVudFF1ZXVlUmVuZGVySXRlbS5zdGFydERhdGVUaW1lID0gbmV3IERhdGUoKTtcclxuICAgIHRoaXMuY3VycmVudFF1ZXVlUmVuZGVySXRlbS5pbWFnZVNpemUgPSB0aGlzLmN1cnJlbnRRdWV1ZVJlbmRlckl0ZW0ucGFyYW1zLmltYWdlV2lkdGggKyAnIHggJyArIHRoaXMuY3VycmVudFF1ZXVlUmVuZGVySXRlbS5wYXJhbXMuaW1hZ2VIZWlnaHQ7XHJcblxyXG4gICAgdGhpcy5fc2V0UmVuZGVyUHJvZ3Jlc3MoUmVuZGVyU3RhdHVzLklzUnVubmluZywgMCwgMCk7XHJcblxyXG4gICAgdGhpcy5zY2VuZURhdGEgPSBpbmZvO1xyXG4gICAgaWYgKCF0aGlzLnNjZW5lRGF0YSB8fCB0aGlzLnNjZW5lRGF0YS5lcnJvcikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zY2VuZURhdGEuaW1hZ2VfaW5mbyAmJiB0aGlzLnNjZW5lRGF0YS5pbWFnZV9pbmZvLm5lZWRzX3JlbmRlciA9PT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLmN1cnJlbnRRdWV1ZVJlbmRlckl0ZW0ucmVuZGVyZWQgPSB0cnVlO1xyXG4gICAgICBhd2FpdCB0aGlzLl9zdGFydFJlbmRlclN0cmVhbSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fYWZ0ZXJSZW5kZXJpbmcoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX3F1aXRSZW5kZXJMb29wKCkge1xyXG5cclxuICAgIGlmICh0aGlzLnNjZW5lRGF0YS5sb29wX25hbWUgIT09IHVuZGVmaW5lZCAmJiB0aGlzLnNlcnZpY2UudmFsaWRhdGUoKSAhPT0gZmFsc2UpIHtcclxuICAgICAgY29uc3QgW10gPSBhd2FpdCB0aGlzLnNlcnZpY2UucXVldWVfY29tbWFuZHMoKVxyXG4gICAgICAgIC5xdWV1ZShuZXcgQ29tbWFuZCgncmVuZGVyX2xvb3BfcXVpdCcsIHtcclxuICAgICAgICAgIHJlbmRlcl9sb29wX25hbWU6IHRoaXMuc2NlbmVEYXRhLmxvb3BfbmFtZVxyXG4gICAgICAgIH0pKVxyXG4gICAgICAgIC5leGVjdXRlKCk7XHJcbiAgICAgIHRoaXMuc2VydmljZS5yZW1vdmVfc3RyZWFtKHRoaXMuc2NlbmVEYXRhLmxvb3BfbmFtZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9zdGFydFJlbmRlclN0cmVhbSgpIHtcclxuXHJcbiAgICB0cnkge1xyXG5cclxuICAgICAgdGhpcy5zdHJlYW1pbmcuc3RyZWFtID0gdGhpcy5zZXJ2aWNlLmNyZWF0ZV9zdHJlYW0oKTtcclxuICAgICAgYXdhaXQgdGhpcy5zdHJlYW1pbmcuc3RyZWFtLnN0YXJ0KHtyZW5kZXJfbG9vcF9uYW1lOiB0aGlzLnNjZW5lRGF0YS5sb29wX25hbWUsIGltYWdlX2Zvcm1hdDogJ2pwZycsIHF1YWxpdHk6ICcxMDAnfSk7XHJcblxyXG4gICAgICB0aGlzLnN0cmVhbWluZy5zdHJlYW0ub24oJ2ltYWdlJywgYXN5bmMgKG9iamVjdCkgPT4ge1xyXG4gICAgICAgIHRoaXMuX2h0bWxJbWFnZURpc3BsYXkob2JqZWN0LCBudWxsKTtcclxuICAgICAgICBjb25zdCBbcHJvZ3Jlc3NdID0gYXdhaXQgdGhpcy5zZXJ2aWNlLnF1ZXVlX2NvbW1hbmRzKClcclxuICAgICAgICAgIC5xdWV1ZShuZXcgQ29tbWFuZCgncmVuZGVyX2xvb3BfZ2V0X3JlbmRlcl9wcm9ncmVzcycsIHtcclxuICAgICAgICAgICAgcmVuZGVyX2xvb3BfbmFtZTogdGhpcy5zY2VuZURhdGEubG9vcF9uYW1lXHJcbiAgICAgICAgICB9KSwgdHJ1ZSlcclxuICAgICAgICAgIC5leGVjdXRlKCk7XHJcblxyXG4gICAgICAgIGlmIChwcm9ncmVzcy5wcm9ncmVzc2lvbiAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICB0aGlzLl9zZXRSZW5kZXJQcm9ncmVzcyhSZW5kZXJTdGF0dXMuSXNSdW5uaW5nLCBNYXRoLmNlaWwoKHByb2dyZXNzLnByb2dyZXNzaW9uICogMTAwKSksIHByb2dyZXNzLml0ZXJhdGlvbik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAob2JqZWN0LnJlc3VsdCA9PT0gMSkge1xyXG5cclxuICAgICAgICAgIGF3YWl0IHRoaXMuc2VydmljZS5xdWV1ZV9jb21tYW5kcygpXHJcbiAgICAgICAgICAgIC5xdWV1ZShuZXcgQ29tbWFuZCgncmVuZGVyX2xvb3Bfc2F2ZV90b19kaXNrJywge1xyXG4gICAgICAgICAgICAgIHJlbmRlcl9sb29wX25hbWU6IHRoaXMuc2NlbmVEYXRhLmxvb3BfbmFtZSxcclxuICAgICAgICAgICAgICBmb3JtYXQ6ICdqcGcnLFxyXG4gICAgICAgICAgICAgIHF1YWxpdHk6IDkwLFxyXG4gICAgICAgICAgICAgIHBhdGg6IHRoaXMuc2NlbmVEYXRhLmltYWdlX2luZm8udXJsXHJcbiAgICAgICAgICAgIH0pLCB0cnVlKVxyXG4gICAgICAgICAgICAuZXhlY3V0ZSgpO1xyXG5cclxuICAgICAgICAgIGlmICh0aGlzLnN0cmVhbWluZy5zdHJlYW0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aGlzLnN0cmVhbWluZy5zdHJlYW0uc3RvcCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYXdhaXQgdGhpcy5fcXVpdFJlbmRlckxvb3AoKTtcclxuICAgICAgICAgIHRoaXMuX2FmdGVyUmVuZGVyaW5nKCk7XHJcbiAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiAob2JqZWN0LnJlc3VsdCA8IDApIHtcclxuXHJcbiAgICAgICAgICBhd2FpdCB0aGlzLl9vblJlbmRlckVycm9yKCk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICB9IGNhdGNoIChlcnIpIHtcclxuXHJcbiAgICAgIGF3YWl0IHRoaXMuX29uUmVuZGVyRXJyb3IoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2V0UmVuZGVyUHJvZ3Jlc3Moc3RhdHVzOiBSZW5kZXJTdGF0dXMsIHByb2dyZXNzOiBudW1iZXIsIGl0ZXJhdGlvbnM6IG51bWJlcik6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLnNlcnZlckRhdGEpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jdXJyZW50UXVldWVSZW5kZXJJdGVtLmVuZERhdGVUaW1lID0gbmV3IERhdGUoKTtcclxuICAgIHRoaXMuY3VycmVudFF1ZXVlUmVuZGVySXRlbS5yZW5kZXJTdGF0dXMgPSBzdGF0dXM7XHJcbiAgICB0aGlzLmN1cnJlbnRRdWV1ZVJlbmRlckl0ZW0ucmVuZGVyUHJvZ3Jlc3MgPSBwcm9ncmVzcztcclxuICAgIGlmIChpdGVyYXRpb25zID4gMCkge1xyXG4gICAgICB0aGlzLmN1cnJlbnRRdWV1ZVJlbmRlckl0ZW0ucmVuZGVySXRlcmF0aW9ucyA9IGl0ZXJhdGlvbnM7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc2VydmVyRGF0YS5yZW5kZXJNb2RlID09PSBSZW5kZXJNb2Rlcy5SZW5kZXJJb25lKSB7XHJcbiAgICAgIGNvbnN0IHJlbmRlcjogUmVuZGVyID0gdGhpcy5nZXRSZW5kZXJPbklkKHRoaXMuY3VycmVudFF1ZXVlUmVuZGVySXRlbS5wYXJhbXMucmVuZGVyLmlkKTtcclxuICAgICAgcmVuZGVyLnN0YXR1cyA9IHN0YXR1cztcclxuICAgICAgcmVuZGVyLnByb2dyZXNzID0gcHJvZ3Jlc3M7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9vblJlbmRlckVycm9yKCk6IFByb21pc2U8dm9pZD4ge1xyXG5cclxuICAgIHRoaXMuX3NldFJlbmRlclByb2dyZXNzKFJlbmRlclN0YXR1cy5Jc1N0b3BwZWQsIDAsIDApO1xyXG4gICAgYXdhaXQgdGhpcy5fcXVpdFJlbmRlckxvb3AoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX29uUmVuZGVyQ2xvc2UoKTogUHJvbWlzZTx2b2lkPiB7XHJcblxyXG4gICAgdGhpcy5fc2V0UmVuZGVyUHJvZ3Jlc3MoUmVuZGVyU3RhdHVzLklzU3RvcHBlZCwgMCwgMCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9hZnRlclJlbmRlcmluZygpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5zZXJ2ZXJEYXRhKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9zZXRSZW5kZXJQcm9ncmVzcyhSZW5kZXJTdGF0dXMuSXNTdWNjZXNzLCAxMDAsIDApO1xyXG5cclxuICAgIGNvbnN0IGltYWdlVXJsID0gdGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLmFzc2V0UGF0aC5yZXBsYWNlKCdjb250ZW50NDMvJywgJycpICsgdGhpcy5zY2VuZURhdGEuaW1hZ2VfaW5mby51cmw7XHJcbiAgICBpZiAodGhpcy5zZXJ2ZXJEYXRhLnJlbmRlck1vZGUgPT09IFJlbmRlck1vZGVzLlJlbmRlclJvb20pIHtcclxuICAgICAgdGhpcy5yZW5kZXJlZFJvb21JbWFnZXMudW5zaGlmdChpbWFnZVVybCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yZW5kZXJJbWFnZUNoYW5nZWQubmV4dChpbWFnZVVybCk7XHJcblxyXG4gICAgaWYgKHRoaXMuc2VydmVyRGF0YS5yZW5kZXJNb2RlID09PSBSZW5kZXJNb2Rlcy5SZW5kZXJJb25lKSB7XHJcbiAgICAgIGNvbnN0IHJlbmRlcjogUmVuZGVyID0gdGhpcy5nZXRSZW5kZXJPbklkKHRoaXMuY3VycmVudFF1ZXVlUmVuZGVySXRlbS5wYXJhbXMucmVuZGVyLmlkKTtcclxuICAgICAgcmVuZGVyLnVybCA9IGltYWdlVXJsO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNvbmZpZ3VyZWRJdGVtID0gdGhpcy5jdXJyZW50UXVldWVSZW5kZXJJdGVtLnBhcmFtcy5jb25maWd1cmVkSXRlbTtcclxuICAgIGNvbnN0IGlzU2luZ2xlSXRlbSA9IHRoaXMuc2VydmVyRGF0YS5yZW5kZXJNb2RlICE9PSBSZW5kZXJNb2Rlcy5SZW5kZXJSb29tO1xyXG4gICAgdGhpcy5fZ29vZ2xlVGFnTWFuYWdlci5zZW5kRXZlbnQoR29vZ2xlVGFnTWFuYWdlckV2ZW50LlJlbmRlciwge1xyXG4gICAgICAnYXJ0aWNsZU5yJzogaXNTaW5nbGVJdGVtID8gY29uZmlndXJlZEl0ZW0uc2t1IDogJ3JlbmRlclJvb20nLFxyXG4gICAgICAncHJvZHVjdCc6IGlzU2luZ2xlSXRlbSA/IGNvbmZpZ3VyZWRJdGVtLm5hbWUgOiAncmVuZGVyUm9vbScsXHJcbiAgICAgICdkaW1lbnNpb25zJzogdGhpcy5jdXJyZW50UXVldWVSZW5kZXJJdGVtLmltYWdlU2l6ZVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5zdGFydFJlbmRlcmluZygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2V0UmVuZGVyU2VydmljZVVybCgpOiBzdHJpbmcge1xyXG5cclxuICAgIHJldHVybiBgJHsodGhpcy5zZXJ2ZXJEYXRhLnNlY3VyZSA/ICdodHRwcycgOiAnaHR0cCcpfTovLyR7dGhpcy5zZXJ2ZXJEYXRhLmhvc3R9OiR7dGhpcy5zZXJ2ZXJEYXRhLnBvcnR9YDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBmb3JjZVJlbmRlckltYWdlKCk6IHZvaWQge1xyXG4gICAgY29uc3QgZmxvb3JHcm91cCA9IHRoaXMuX2dldEZpcnN0Q3VzdG9tRmxvb3JJdGVtRnJvbVNjZW5lKCk7XHJcbiAgICBpZiAoZmxvb3JHcm91cCAhPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLl9jaGVja1Zpc2libGVVcGRhdGVzKGZsb29yR3JvdXAsIHRydWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfY2hlY2tWaXNpYmxlVXBkYXRlcyhmdXJuaXR1cmU6IEl0ZW0sIGZvcmNlUmVuZGVyOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICghdGhpcy5zZXJ2ZXJEYXRhKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWZ1cm5pdHVyZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc2VydmVyRGF0YS5yZW5kZXJNb2RlID09PSB0aGlzLnJlbmRlck1vZGVzLlJlbmRlcklvbmUpIHtcclxuICAgICAgY29uc3Qgb2JqZWN0ID0gdGhpcy5fZXhwb3J0U2VydmljZS5nZXRFeHBvcnRPYmplY3RGcm9tQ3VzdG9tRmxvb3JHcm91cChmdXJuaXR1cmUpO1xyXG4gICAgICB0aGlzLmN1cnJlbnRQcm9kdWN0SGFzaCA9IG9iamVjdC5kZWZhdWx0UmVuZGVyUGF0aDtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5zZXJ2ZXJEYXRhLnJlbmRlck1vZGUgPT09IHRoaXMucmVuZGVyTW9kZXMuUmVuZGVyU2hvcCkge1xyXG4gICAgICBjb25zdCBvYmplY3QgPSB0aGlzLl9leHBvcnRTZXJ2aWNlLmdldEV4cG9ydE9iamVjdEZyb21DdXN0b21GbG9vckdyb3VwKGZ1cm5pdHVyZSk7XHJcblxyXG4gICAgICBpZiAoIShKU09OLnN0cmluZ2lmeSh0aGlzLnByZXZJdGVtKSAhPT0gSlNPTi5zdHJpbmdpZnkob2JqZWN0KSB8fCBmb3JjZVJlbmRlcikpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMucmVuZGVyaW5nU3RhcnRlZC5uZXh0KCk7XHJcbiAgICAgIHRoaXMucHJldkl0ZW0gPSBvYmplY3Q7XHJcbiAgICAgIGNvbnN0IHF1ZXVlSXRlbSA9IG5ldyBSZW5kZXJRdWV1ZUl0ZW0oKTtcclxuICAgICAgcXVldWVJdGVtLnBhcmFtcyA9IHRoaXMuZ2V0UmVuZGVyUGFyYW1ldGVycyh0aGlzLnJlbmRlck1vZGVzLlJlbmRlclNob3ApO1xyXG4gICAgICBxdWV1ZUl0ZW0ucGFyYW1zLmNhbWVyYU1hdHJpeCA9IHRoaXMuX2NhbWVyYVNlcnZpY2UuY2FtZXJhLm1hdHJpeFdvcmxkSW52ZXJzZS5lbGVtZW50cztcclxuICAgICAgcXVldWVJdGVtLnBhcmFtcy5mb3JjZVJlbmRlciA9IGZvcmNlUmVuZGVyO1xyXG4gICAgICB0aGlzLnJlbmRlclF1ZXVlID0gW107XHJcbiAgICAgIHRoaXMucmVuZGVyUXVldWUucHVzaChxdWV1ZUl0ZW0pO1xyXG4gICAgICBhd2FpdCB0aGlzLnN0YXJ0UmVuZGVyaW5nKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9odG1sSW1hZ2VEaXNwbGF5KGltYWdlLCB1cmxDcmVhdG9yKSB7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgdXJsQ3JlYXRvciA9IHVybENyZWF0b3IgfHwgKHdpbmRvdyA/ICh3aW5kb3cuVVJMIHx8ICh3aW5kb3cgYXMgYW55KS53ZWJraXRVUkwpIDogdW5kZWZpbmVkKTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtpbWFnZS5pbWFnZV0sIHt0eXBlOiBpbWFnZS5taW1lX3R5cGV9KTtcclxuICAgIGNvbnN0IHVybCA9IHVybENyZWF0b3IuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xyXG5cclxuICAgIHRoaXMucmVuZGVyUm9vbUltYWdlQ2hhbmdlZC5uZXh0KHVybCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0UmVuZGVyT25JZChpZDogbnVtYmVyKTogYW55IHtcclxuICAgIGxldCByZXR1cm5SZW5kZXIgPSBudWxsO1xyXG4gICAgdGhpcy5yZW5kZXJzLmZvckVhY2goKHg6IFJlbmRlcikgPT4ge1xyXG4gICAgICBpZiAoeC5pZCA9PT0gaWQpIHtcclxuICAgICAgICByZXR1cm5SZW5kZXIgPSB4O1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiByZXR1cm5SZW5kZXI7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0SW1hZ2VTaXplT25JZChpZDogbnVtYmVyKTogYW55IHtcclxuICAgIGxldCByZXR1cm5TaXplID0gbnVsbDtcclxuICAgIHRoaXMuaW1hZ2VTaXplcy5mb3JFYWNoKCh4OiBJbWFnZVNpemUpID0+IHtcclxuICAgICAgaWYgKHguaWQgPT09IGlkKSB7XHJcbiAgICAgICAgcmV0dXJuU2l6ZSA9IHg7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHJldHVyblNpemU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0UmVuZGVyRW52aXJvbm1lbnRPbklkKGlkOiBudW1iZXIpOiBSZW5kZXJFbnZpcm9ubWVudCB7XHJcbiAgICBsZXQgcmV0dXJuRW52aXJvbm1lbnQgPSBudWxsO1xyXG4gICAgdGhpcy5yZW5kZXJFbnZpcm9ubWVudHMuZm9yRWFjaCgocmVuZGVyRW52aXJvbm1lbnQ6IFJlbmRlckVudmlyb25tZW50KSA9PiB7XHJcbiAgICAgIGlmIChyZW5kZXJFbnZpcm9ubWVudC5pZCA9PT0gaWQpIHtcclxuICAgICAgICByZXR1cm5FbnZpcm9ubWVudCA9IHJlbmRlckVudmlyb25tZW50O1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcmV0dXJuRW52aXJvbm1lbnQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0TGlnaHRuaW5nT25JZChpZDogbnVtYmVyKTogYW55IHtcclxuICAgIGxldCByZXR1cm5MaWdodG5pbmcgPSBudWxsO1xyXG4gICAgdGhpcy5saWdodG5pbmdzLmZvckVhY2goKHg6IExpZ2h0bmluZykgPT4ge1xyXG4gICAgICBpZiAoeC5pZCA9PT0gaWQpIHtcclxuICAgICAgICByZXR1cm5MaWdodG5pbmcgPSB4O1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiByZXR1cm5MaWdodG5pbmc7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIEV4cG9ydCBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG4gIHByaXZhdGUgX2dldEZpcnN0Q3VzdG9tRmxvb3JJdGVtRnJvbVNjZW5lKCk6IEN1c3RvbUZsb29ySXRlbSB8IG51bGwge1xyXG5cclxuICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5fc2NlbmVTZXJ2aWNlLnNjZW5lLmNoaWxkcmVuO1xyXG5cclxuICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPD0gMCkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxldCBhID0gMDsgYSA8IGNoaWxkcmVuLmxlbmd0aDsgYSsrKSB7XHJcbiAgICAgIGlmIChjaGlsZHJlblthXSBpbnN0YW5jZW9mIEN1c3RvbUZsb29ySXRlbSkge1xyXG4gICAgICAgIHJldHVybiA8Q3VzdG9tRmxvb3JJdGVtPmNoaWxkcmVuW2FdO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjaGlsZHJlblthXSBpbnN0YW5jZW9mIEl0ZW1Hcm91cCkge1xyXG4gICAgICAgIGNvbnN0IGl0ZW1Hcm91cCA9IDxJdGVtR3JvdXA+Y2hpbGRyZW5bYV07XHJcbiAgICAgICAgaWYgKGl0ZW1Hcm91cC5pdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBpdGVtR3JvdXAuaXRlbXMuZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgQ3VzdG9tRmxvb3JJdGVtKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2V0Q29uZmlndXJlZEZ1cm5pdHVyZUl0ZW0oKTogRXhwb3J0T2JqZWN0IHwgbnVsbCB7XHJcblxyXG4gICAgY29uc3QgZmxvb3Jncm91cCA9IHRoaXMuX2dldEZpcnN0Q3VzdG9tRmxvb3JJdGVtRnJvbVNjZW5lKCk7XHJcblxyXG4gICAgaWYgKGZsb29yZ3JvdXAgPT09IG51bGwpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuX2V4cG9ydFNlcnZpY2UuZ2V0RXhwb3J0T2JqZWN0RnJvbUN1c3RvbUZsb29yR3JvdXAoZmxvb3Jncm91cCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
661
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2xpZW50L2FwcC9wbHVnaW5zL3JlbmRlci9zZXJ2aWNlL3JlbmRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxFQUFDLGVBQWUsRUFBRSxPQUFPLEVBQWUsTUFBTSxNQUFNLENBQUM7QUFDNUQsT0FBTyxFQUFDLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFZLFNBQVMsRUFBRSxPQUFPLEVBQUMsTUFBTSxPQUFPLENBQUM7QUFDOUcsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLDJDQUEyQyxDQUFDO0FBRXZFLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNqRCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQU0zRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFnQjNELE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUNoRCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFDekQsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHNDQUFzQyxDQUFDO0FBQ2pFLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDeEQsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBQ3pELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sc0NBQXNDLENBQUM7QUFFckUs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LENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDckM7WUFDRCxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsWUFBWSxTQUFTLEVBQUU7Z0JBQ3BDLE1BQU0sU0FBUyxHQUFjLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDekMsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7b0JBQzlCLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUU7d0JBQ3BDLElBQUksSUFBSSxZQUFZLGVBQWUsRUFBRTs0QkFDbkMsT0FBTyxJQUFJLENBQUM7eUJBQ2I7b0JBQ0gsQ0FBQyxDQUFDLENBQUM7aUJBQ0o7YUFDRjtTQUNGO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU8sMkJBQTJCO1FBRWpDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxpQ0FBaUMsRUFBRSxDQUFDO1FBRTVELElBQUksVUFBVSxLQUFLLElBQUksRUFBRTtZQUN2QixPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLG1DQUFtQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzdFLENBQUM7OzJHQTNyQlUsYUFBYTsrR0FBYixhQUFhLGNBRlosTUFBTTs0RkFFUCxhQUFhO2tCQUh6QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZSwgT25EZXN0cm95fSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIFN1YmplY3QsIFN1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7Qm94MywgRGlyZWN0aW9uYWxMaWdodCwgTWF0ZXJpYWwsIE1lc2gsIE1lc2hQaG9uZ01hdGVyaWFsLCBPYmplY3QzRCwgU3BvdExpZ2h0LCBWZWN0b3IzfSBmcm9tICd0aHJlZSc7XHJcbmltcG9ydCB7R0xURkV4cG9ydGVyfSBmcm9tICd0aHJlZS9leGFtcGxlcy9qc20vZXhwb3J0ZXJzL0dMVEZFeHBvcnRlcic7XHJcbmltcG9ydCB7U2NlbmV9IGZyb20gJ3RocmVlL3NyYy9zY2VuZXMvU2NlbmUnO1xyXG5pbXBvcnQge1JlbmRlck1vZGVzfSBmcm9tICcuLi9lbnVtL3JlbmRlci1tb2Rlcyc7XHJcbmltcG9ydCB7Q29ubmVjdGlvblN0YXR1c30gZnJvbSAnLi4vZW51bS9jb25uZWN0aW9uLXN0YXR1cyc7XHJcbmltcG9ydCB7UmVuZGVyfSBmcm9tICcuLi9tb2RlbC9yZW5kZXInO1xyXG5pbXBvcnQge0NhbWVyYVBvc2l0aW9ufSBmcm9tICcuLi9tb2RlbC9jYW1lcmEtcG9zaXRpb24nO1xyXG5pbXBvcnQge0ltYWdlU2l6ZX0gZnJvbSAnLi4vbW9kZWwvaW1hZ2Utc2l6ZSc7XHJcbmltcG9ydCB7TGlnaHRuaW5nfSBmcm9tICcuLi9tb2RlbC9saWdodG5pbmcnO1xyXG5pbXBvcnQge1JlbmRlckVudmlyb25tZW50fSBmcm9tICcuLi9tb2RlbC9yZW5kZXItZW52aXJvbm1lbnQnO1xyXG5pbXBvcnQge1JlbmRlclF1ZXVlSXRlbX0gZnJvbSAnLi4vbW9kZWwvcmVuZGVyLXF1ZXVlLWl0ZW0nO1xyXG5pbXBvcnQge0hvbWVkZWNvcmF0b3JTZXR0aW5nc1NlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS9ob21lZGVjb3JhdG9yLXNldHRpbmdzLnNlcnZpY2UnO1xyXG5pbXBvcnQge0J1aWxkRnVybml0dXJlU2VydmljZX0gZnJvbSAnLi4vLi4vdGhyZWVkc2VsZWN0b3IvdGhyZWVkc2VsZWN0b3Ivc2VydmljZS9idWlsZC1mdXJuaXR1cmUuc2VydmljZSc7XHJcbmltcG9ydCB7RXhwb3J0U2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2V4cG9ydC5zZXJ2aWNlJztcclxuaW1wb3J0IHtDYW1lcmFTZXJ2aWNlfSBmcm9tICcuLi8uLi9jb3JlM2Qvc2VydmljZS9jYW1lcmEuc2VydmljZSc7XHJcbmltcG9ydCB7U2NlbmVTZXJ2aWNlfSBmcm9tICcuLi8uLi9jb3JlM2Qvc2VydmljZS9zY2VuZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9yQ29ubmVjdG9yU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2hvbWVkZWNvcmF0b3ItY29ubmVjdG9yLnNlcnZpY2UnO1xyXG5pbXBvcnQge0hvbWVkZWNvcmF0b3JDb25uZWN0b3JBZGFwdGVyU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2hvbWVkZWNvcmF0b3ItY29ubmVjdG9yLWFkYXB0ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7VGhyZWVkc2VsZWN0b3JTZXJ2aWNlfSBmcm9tICcuLi8uLi90aHJlZWRzZWxlY3Rvci90aHJlZWRzZWxlY3Rvci9zZXJ2aWNlL3RocmVlZHNlbGVjdG9yLnNlcnZpY2UnO1xyXG5pbXBvcnQge1RvYXN0U2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL3RvYXN0LnNlcnZpY2UnO1xyXG5pbXBvcnQge01lc3NhZ2VCdXNTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvbWVzc2FnZS1idXMuc2VydmljZSc7XHJcbmltcG9ydCB7R29vZ2xlVGFnTWFuYWdlclNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2UvZ29vZ2xlLXRhZy1tYW5hZ2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQge1Jvb21TZXJ2aWNlfSBmcm9tICcuLi8uLi9yb29tLXBsYW5uZXIvY29tcG9uZW50cy9mbG9vcnBsYW5uZXIvc2VydmljZS9yb29tLnNlcnZpY2UnO1xyXG5pbXBvcnQge0Zsb29yU2VydmljZX0gZnJvbSAnLi4vLi4vY29yZTNkL3NlcnZpY2UvZmxvb3Iuc2VydmljZSc7XHJcbmltcG9ydCB7TG9hZEZ1cm5pdHVyZVNlcnZpY2V9IGZyb20gJy4uLy4uL3RocmVlZHNlbGVjdG9yL3RocmVlZHNlbGVjdG9yL3NlcnZpY2UvbG9hZC1mdXJuaXR1cmUuc2VydmljZSc7XHJcbmltcG9ydCB7Q3VzdG9tRmxvb3JHcm91cFJlc3VsdH0gZnJvbSAnLi4vLi4vY29yZTNkL21vZGVsL2N1c3RvbS1mbG9vci1ncm91cC1yZXN1bHQnO1xyXG5pbXBvcnQge1RvYXN0fSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVsL3RvYXN0JztcclxuaW1wb3J0IHtUb2FzdFR5cGV9IGZyb20gJy4uLy4uLy4uL2NvcmUvbW9kZWwvdG9hc3QtdHlwZSc7XHJcbmltcG9ydCB7TWVzc2FnZVR5cGV9IGZyb20gJy4uLy4uLy4uL2NvcmUvZW51bS9tZXNzYWdlLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7UmVuZGVyRGF0YX0gZnJvbSAnLi4vbW9kZWwvcmVuZGVyLWRhdGEnO1xyXG5pbXBvcnQge1JlbmRlclNldHRpbmdzfSBmcm9tICcuLi9tb2RlbC9yZW5kZXItc2V0dGluZ3MnO1xyXG5pbXBvcnQge0ZpbGVVdGlsc30gZnJvbSAnLi4vLi4vLi4vY29yZS91dGlscy9maWxlLnV0aWxzJztcclxuaW1wb3J0IHtSZW5kZXJTdGF0dXN9IGZyb20gJy4uL2VudW0vcmVuZGVyLXN0YXR1cyc7XHJcbmltcG9ydCB7Q3VzdG9tRmxvb3JJdGVtfSBmcm9tICcuLi8uLi9jb3JlM2QvaXRlbXMvY3VzdG9tLWZsb29yLWl0ZW0nO1xyXG5pbXBvcnQge0l0ZW19IGZyb20gJy4uLy4uL2NvcmUzZC9pdGVtcy9pdGVtJztcclxuaW1wb3J0IHtJdGVtR3JvdXB9IGZyb20gJy4uLy4uL2NvcmUzZC9pdGVtcy9pdGVtLWdyb3VwJztcclxuaW1wb3J0IHtFeHBvcnRPYmplY3R9IGZyb20gJy4uLy4uLy4uL2NvcmUvbW9kZWwvZXhwb3J0LW9iamVjdCc7XHJcbmltcG9ydCB7R29vZ2xlVGFnTWFuYWdlckV2ZW50fSBmcm9tICcuLi8uLi8uLi9jb3JlL2VudW0vZ29vZ2xlLXRhZy1tYW5hZ2VyLWV2ZW50LmVudW0nO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFJlbmRlclNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG5cclxuICBwdWJsaWMgcmVhZG9ubHkgcmVuZGVyTW9kZXMgPSBSZW5kZXJNb2RlcztcclxuXHJcbiAgcHVibGljIHNlcnZpY2U6IGFueTtcclxuXHJcbiAgcHVibGljIHNlcnZlckRhdGE6IGFueTtcclxuICBwdWJsaWMgc2NlbmVEYXRhOiBhbnk7XHJcbiAgcHVibGljIHByZXZJdGVtOiBhbnk7XHJcblxyXG4gIHB1YmxpYyBzdHJlYW1pbmc6IGFueSA9IHt9O1xyXG5cclxuICBwdWJsaWMgcmVuZGVyZWRSb29tSW1hZ2VzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICBwdWJsaWMgY29ubmVjdGlvblN0YXR1czogQ29ubmVjdGlvblN0YXR1cyA9IENvbm5lY3Rpb25TdGF0dXMuSXNVbmRlZmluZWQ7XHJcblxyXG4gIHB1YmxpYyByZW5kZXJzOiBSZW5kZXJbXSA9IFtdO1xyXG4gIHB1YmxpYyBjYW1lcmFQb3NpdGlvbnM6IENhbWVyYVBvc2l0aW9uW10gPSBbXTtcclxuICBwdWJsaWMgaW1hZ2VTaXplczogSW1hZ2VTaXplW10gPSBbXHJcbiAgICB7aWQ6IDEsIG5hbWU6ICdTbWFsbCcsIHdpZHRoOiA0MDAsIGhlaWdodDogMzAwfSxcclxuICAgIHtpZDogMiwgbmFtZTogJ1Nob3AnLCB3aWR0aDogODAwLCBoZWlnaHQ6IDgwMH0sXHJcbiAgICB7aWQ6IDMsIG5hbWU6ICdGdWxsIEhEJywgd2lkdGg6IDE5MjAsIGhlaWdodDogMTA4MH0sXHJcbiAgICB7aWQ6IDQsIG5hbWU6ICc0SycsIHdpZHRoOiA0MDk2LCBoZWlnaHQ6IDIxNjB9XHJcbiAgXTtcclxuXHJcbiAgcHVibGljIGxpZ2h0bmluZ3M6IExpZ2h0bmluZ1tdID0gW1xyXG4gICAge2lkOiAxLCBuYW1lOiAnTGlnaHQnLCBzZXR0aW5nczogW119LFxyXG4gICAge2lkOiAyLCBuYW1lOiAnTWVkaXVtJywgc2V0dGluZ3M6IFtdfSxcclxuICAgIHtpZDogMywgbmFtZTogJ0hlYXknLCBzZXR0aW5nczogW119XHJcbiAgXTtcclxuXHJcbiAgcHVibGljIHJlbmRlckVudmlyb25tZW50czogUmVuZGVyRW52aXJvbm1lbnRbXSA9IFtcclxuICAgIHtpZDogMSwgbmFtZTogJ05vbmUnLCBoZHJGaWxlOiAnJywgaW50ZW5zaXR5OiAxLjB9LFxyXG4gICAge2lkOiAyLCBuYW1lOiAnTW9kZXJuIGNpdHknLCBoZHJGaWxlOiAnY2FuYXJ5X3doYXJmXzJrLmhkcicsIGludGVuc2l0eTogMi41fSxcclxuICAgIHtpZDogMywgbmFtZTogJ0NpdHkgcGFyaycsIGhkckZpbGU6ICdkcmVzZGVuX21vYXRfMmsuaGRyJywgaW50ZW5zaXR5OiAyLjV9LFxyXG4gICAge2lkOiA0LCBuYW1lOiAnTmlnaHQgaW4gdGhlIGNpdHknLCBoZHJGaWxlOiAnaGFuc2FwbGF0el8yay5oZHInLCBpbnRlbnNpdHk6IDEuMH0sXHJcbiAgICB7aWQ6IDUsIG5hbWU6ICdOaWdodCBpbiB0aGUgY291bnRyeXNpZGUnLCBoZHJGaWxlOiAna2xvcHBlbmhlaW1fMDJfMmsuaGRyJywgaW50ZW5zaXR5OiAxLjB9LFxyXG4gICAge2lkOiA2LCBuYW1lOiAnRm9yZXN0JywgaGRyRmlsZTogJ25hZ295YV93YWxsX3BhdGhfMmsuaGRyJywgaW50ZW5zaXR5OiAxLjB9LFxyXG4gICAge2lkOiA3LCBuYW1lOiAnU25vdycsIGhkckZpbGU6ICdzbm93eV9mb3Jlc3RfcGF0aF8wMV8yay5oZHInLCBpbnRlbnNpdHk6IDEuMH0sXHJcbiAgICB7aWQ6IDgsIG5hbWU6ICdQYXN0dXJlJywgaGRyRmlsZTogJ3NwcnVpdF9zdW5yaXNlXzJrLmhkcicsIGludGVuc2l0eTogMS4wfSxcclxuICAgIHtpZDogOSwgbmFtZTogJ0ZpZWxkJywgaGRyRmlsZTogJ3N1bmZsb3dlcnNfMmsuaGRyJywgaW50ZW5zaXR5OiAxLjB9LFxyXG4gICAge2lkOiAxMCwgbmFtZTogJ09sZCBjaXR5IGFuZCBjYW5hbHMnLCBoZHJGaWxlOiAndGVhcnNfb2Zfc3RlZWxfYnJpZGdlXzJrLmhkcicsIGludGVuc2l0eTogMS4wfSxcclxuICAgIHtpZDogMTEsIG5hbWU6ICdFc3RhdGUnLCBoZHJGaWxlOiAndGllcmdhcnRlbl8yay5oZHInLCBpbnRlbnNpdHk6IDEuMH0sXHJcbiAgICB7aWQ6IDEyLCBuYW1lOiAnQmVhY2gnLCBoZHJGaWxlOiAndW1obGFuZ2Ffc3VucmlzZV8yay5oZHInLCBpbnRlbnNpdHk6IDIuNX0sXHJcbiAgICB7aWQ6IDEzLCBuYW1lOiAnUmVzaWRlbnRpYWwgYXJlYSB3aXRoIHBhcmsnLCBoZHJGaWxlOiAndXJiYW5fc3RyZWV0XzAxXzJrLmhkcicsIGludGVuc2l0eTogMS4wfSxcclxuICAgIHtpZDogMTQsIG5hbWU6ICdSZXNpZGVudGlhbCBhcmVhJywgaGRyRmlsZTogJ3VyYmFuX3N0cmVldF8wM18yay5oZHInLCBpbnRlbnNpdHk6IDEuMH0sXHJcbiAgXTtcclxuXHJcbiAgcHVibGljIHJlbmRlclNjZW5lczogYW55ID0gW1xyXG4gICAge2lkOiAxLCBuYW1lOiAnc2NlbmVfZ3Jhc3NfY3ljbGVzX01SUCcsIHNjZW5lQXNzZXRJZDogJ3NjZW5lX2dyYXNzX2N5Y2xlc19NUlAnfSxcclxuICAgIHtpZDogMiwgbmFtZTogJ3NjZW5lX2xha2VfY3ljbGVzX01SUCcsIHNjZW5lQXNzZXRJZDogJ3NjZW5lX2xha2VfY3ljbGVzX01SUCd9LFxyXG4gICAge2lkOiAzLCBuYW1lOiAnc2NlbmVfc2t5X2N5Y2xlc19NUlAnLCBzY2VuZUFzc2V0SWQ6ICdzY2VuZV9za3lfY3ljbGVzX01SUCd9LFxyXG4gICAge2lkOiA0LCBuYW1lOiAnc2NlbmVfZ2FyZGVuX2N5Y2xlc19NUlAnLCBzY2VuZUFzc2V0SWQ6ICdzY2VuZV9nYXJkZW5fY3ljbGVzX01SUCd9LFxyXG4gICAge2lkOiA1LCBuYW1lOiAnc2NlbmVfbmF0dXJlX2N5Y2xlc19NUlAnLCBzY2VuZUFzc2V0SWQ6ICdzY2VuZV9uYXR1cmVfY3ljbGVzX01SUCd9XHJcbiAgXTtcclxuXHJcblxyXG4gIHByaXZhdGUgX2NlaWxpbmdMaWdodE1hcmdpbjogbnVtYmVyID0gMC41O1xyXG5cclxuICBwdWJsaWMgc2VsZWN0ZWRJbWFnZVNpemU6IG51bWJlciA9IDM7XHJcbiAgcHVibGljIHNlbGVjdGVkRW52aXJvbm1lbnQ6IG51bWJlciA9IDE7XHJcbiAgcHVibGljIHNlbGVjdGVkUmVuZGVyU2NlbmU6IHN0cmluZyA9IHRoaXMucmVuZGVyU2NlbmVzWzBdLnNjZW5lQXNzZXRJZDtcclxuXHJcbiAgcHVibGljIGJsZW5kZXJSZW5kZXJTZXJ2aWNlOiBib29sZWFuID0gdGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLmJsZW5kZXJSZW5kZXJTZXJ2aWNlO1xyXG5cclxuICBwdWJsaWMgcG9zaXRpb25zOiBudW1iZXIgPSAxO1xyXG4gIHB1YmxpYyBzYXZlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHB1YmxpYyByZW5kZXJSb29tSW1hZ2VDaGFuZ2VkOiBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoJycpO1xyXG4gIHB1YmxpYyByZW5kZXJpbmdTdGFydGVkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcclxuICBwdWJsaWMgcmVuZGVySW1hZ2VDaGFuZ2VkOiBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoJycpO1xyXG5cclxuICBwdWJsaWMgcmVuZGVyUXVldWU6IGFueVtdID0gW107XHJcbiAgcHVibGljIGN1cnJlbnRRdWV1ZVJlbmRlckl0ZW06IFJlbmRlclF1ZXVlSXRlbSA9IG5ldyBSZW5kZXJRdWV1ZUl0ZW0oKTtcclxuICBwdWJsaWMgY3VycmVudFByb2R1Y3RIYXNoOiBzdHJpbmcgPSAnJztcclxuICBwdWJsaWMgc3RhbmRBbG9uZUNhbWVyYU1hdHJpeDogbnVtYmVyW107XHJcblxyXG4gIHByaXZhdGUgX3N1YnM6IFN1YnNjcmlwdGlvbltdID0gW107XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgTWFrZVdpbmRvd01hdGVyaWFsVHJhbnNwYXJlbnQobWF0ZXJpYWw6IE1hdGVyaWFsKTogTWF0ZXJpYWwge1xyXG4gICAgLy8gY29uc29sZS5sb2cobWF0ZXJpYWwpO1xyXG4gICAgbWF0ZXJpYWwudHJhbnNwYXJlbnQgPSB0cnVlO1xyXG4gICAgbWF0ZXJpYWwub3BhY2l0eSA9IE1hdGgubWluKG1hdGVyaWFsLm9wYWNpdHksIDAuNCk7XHJcbiAgICByZXR1cm4gbWF0ZXJpYWw7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgX3NldHRpbmdzU2VydmljZTogSG9tZWRlY29yYXRvclNldHRpbmdzU2VydmljZSxcclxuICAgIHByaXZhdGUgX2J1aWxkRnVybml0dXJlU2VydmljZTogQnVpbGRGdXJuaXR1cmVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZXhwb3J0U2VydmljZTogRXhwb3J0U2VydmljZSxcclxuICAgIHByaXZhdGUgX2NhbWVyYVNlcnZpY2U6IENhbWVyYVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9zY2VuZVNlcnZpY2U6IFNjZW5lU2VydmljZSxcclxuICAgIHByaXZhdGUgX2lvbmU6IEhvbWVkZWNvcmF0b3JDb25uZWN0b3JTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfaW9uZUNvbm5lY3RvckFkYXB0ZXI6IEhvbWVkZWNvcmF0b3JDb25uZWN0b3JBZGFwdGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgX3RocmVlZFNlbGVjdG9yU2VydmljZTogVGhyZWVkc2VsZWN0b3JTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfdG9hc3RTZXJ2aWNlOiBUb2FzdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9tZXNzYWdlQnVzU2VydmljZTogTWVzc2FnZUJ1c1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9nb29nbGVUYWdNYW5hZ2VyOiBHb29nbGVUYWdNYW5hZ2VyU2VydmljZSxcclxuICAgIHByaXZhdGUgX3Jvb21TZXJ2aWNlOiBSb29tU2VydmljZSxcclxuICAgIHByaXZhdGUgX2Zsb29yU2VydmljZTogRmxvb3JTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfbG9hZEZ1cm5pdHVyZVNlcnZpY2U6IExvYWRGdXJuaXR1cmVTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICB0aGlzLnNjZW5lRGF0YSA9IHt9O1xyXG5cclxuICAgIHRoaXMuX3N1YnMucHVzaChcclxuICAgICAgdGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzTG9hZGVkLnN1YnNjcmliZSgobG9hZGVkOiBib29sZWFuKSA9PiB7XHJcbiAgICAgICAgaWYgKGxvYWRlZCkge1xyXG4gICAgICAgICAgLy8gaWYgKCF0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Mub3B0aW9ucy51c2VOZXdSZW5kZXIpIHtcclxuICAgICAgICAgIHRoaXMuc2VydmVyRGF0YSA9IHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5yZW5kZXJQYXJhbWV0ZXJzO1xyXG4gICAgICAgICAgaWYgKHRoaXMuc2VydmVyRGF0YSkge1xyXG4gICAgICAgICAgICB0aGlzLnNlcnZlckRhdGEuc2V0dXAgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5jaGVja0Nvbm5lY3Rpb24oKTtcclxuICAgICAgICAgICAgdGhpcy5fcmVuZGVyU2VydmljZUhlYXJ0QmVhdCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gfVxyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICAgIHRoaXMuX2J1aWxkRnVybml0dXJlU2VydmljZS5idWlsZEZpbmlzaGVkLnN1YnNjcmliZShcclxuICAgICAgICAocmVzdWx0OiBDdXN0b21GbG9vckdyb3VwUmVzdWx0KSA9PiB0aGlzLl9jaGVja1Zpc2libGVVcGRhdGVzKHJlc3VsdC5mdXJuaXR1cmUgPyByZXN1bHQuZnVybml0dXJlIDogbnVsbClcclxuICAgICAgKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc3Vicy5mb3JFYWNoKHMgPT4gcy51bnN1YnNjcmliZSgpKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjaGVja0Nvbm5lY3Rpb24oKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAvL1xyXG4gICAgLy8gaWYgKHRoaXMuc2VydmljZS52YWxpZGF0ZSgpID09PSBmYWxzZSkge1xyXG4gICAgLy9cclxuICAgIC8vICAgdHJ5IHtcclxuICAgIC8vXHJcbiAgICAvLyAgICAgY29uc3QgdXJsID0gYCR7KHRoaXMuc2VydmVyRGF0YS5zZWN1cmUgPyAnd3NzJyA6ICd3cycpfTovLyR7dGhpcy5zZXJ2ZXJEYXRhLmhvc3R9OiR7dGhpcy5zZXJ2ZXJEYXRhLnBvcnR9L3NlcnZpY2UvYDtcclxuICAgIC8vICAgICBhd2FpdCB0aGlzLnNlcnZpY2UuY29ubmVjdCh1cmwpLnRoZW4oKCkgPT4ge1xyXG4gICAgLy8gICAgICAgdGhpcy5zZXJ2ZXJEYXRhLnNldHVwID0gdHJ1ZTtcclxuICAgIC8vICAgICB9KS5jYXRjaCgocmVqKSA9PiB7XHJcbiAgICAvLyAgICAgfSk7XHJcbiAgICAvL1xyXG4gICAgLy8gICAgIHRoaXMuc2VydmljZS5vbignZXJyb3InLCBhc3luYyAob2JqZWN0KSA9PiB7XHJcbiAgICAvLyAgICAgICB0aGlzLnNlcnZlckRhdGEuc2V0dXAgPSBmYWxzZTtcclxuICAgIC8vICAgICAgIGlmICh0aGlzLmNvbm5lY3Rpb25TdGF0dXMgIT09IENvbm5lY3Rpb25TdGF0dXMuVHJ5aW5nVG9Db25uZWN0KSB7XHJcbiAgICAvLyAgICAgICAgIHRoaXMuY29ubmVjdGlvblN0YXR1cyA9IENvbm5lY3Rpb25TdGF0dXMuSXNEaXNDb25uZWN0ZWQ7XHJcbiAgICAvLyAgICAgICB9XHJcbiAgICAvLyAgICAgICBhd2FpdCB0aGlzLl9vblJlbmRlckVycm9yKCk7XHJcbiAgICAvLyAgICAgfSk7XHJcbiAgICAvLyAgICAgdGhpcy5zZXJ2aWNlLm9uKCdjbG9zZScsIGFzeW5jIChvYmplY3QpID0+IHtcclxuICAgIC8vICAgICAgIHRoaXMuc2VydmVyRGF0YS5zZXR1cCA9IGZhbHNlO1xyXG4gICAgLy8gICAgICAgaWYgKHRoaXMuY29ubmVjdGlvblN0YXR1cyAhPT0gQ29ubmVjdGlvblN0YXR1cy5UcnlpbmdUb0Nvbm5lY3QpIHtcclxuICAgIC8vICAgICAgICAgdGhpcy5jb25uZWN0aW9uU3RhdHVzID0gQ29ubmVjdGlvblN0YXR1cy5Jc0Rpc0Nvbm5lY3RlZDtcclxuICAgIC8vICAgICAgIH1cclxuICAgIC8vICAgICAgIGF3YWl0IHRoaXMuX29uUmVuZGVyQ2xvc2UoKTtcclxuICAgIC8vICAgICB9KTtcclxuICAgIC8vXHJcbiAgICAvLyAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgLy9cclxuICAgIC8vICAgICB0aGlzLnNlcnZlckRhdGEuc2V0dXAgPSBmYWxzZTtcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVuZGVyU2VydmljZUhlYXJ0QmVhdCgpOiB2b2lkIHtcclxuXHJcbiAgICBzZXRJbnRlcnZhbCgoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmNvbm5lY3Rpb25TdGF0dXMgPT09IENvbm5lY3Rpb25TdGF0dXMuSXNEaXNDb25uZWN0ZWQpIHtcclxuICAgICAgICBpZiAodGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLm9wdGlvbnMuc2hvd1JlbmRlckNvbm5lY3Rpb25JbmZvKSB7XHJcbiAgICAgICAgICBjb25zdCB0b2FzdCA9IG5ldyBUb2FzdCgpO1xyXG4gICAgICAgICAgdG9hc3QubWVzc2FnZSA9ICdDT05ORUNUSU9OX1dJVEhfUkVOREVSX1NFUlZJQ0VfTE9TVCc7XHJcbiAgICAgICAgICB0b2FzdC50eXBlID0gVG9hc3RUeXBlLkVycm9yO1xyXG4gICAgICAgICAgdGhpcy5fdG9hc3RTZXJ2aWNlLnNob3dUb2FzdCh0b2FzdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY29ubmVjdGlvblN0YXR1cyA9IENvbm5lY3Rpb25TdGF0dXMuVHJ5aW5nVG9Db25uZWN0O1xyXG4gICAgICAgIHRoaXMuY2hlY2tDb25uZWN0aW9uKCk7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jb25uZWN0aW9uU3RhdHVzID09PSBDb25uZWN0aW9uU3RhdHVzLlRyeWluZ1RvQ29ubmVjdCkge1xyXG4gICAgICAgIGlmICh0aGlzLnNlcnZlckRhdGEuc2V0dXAgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICB0aGlzLl9tZXNzYWdlQnVzU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlJlbmRlclNlcnZpY2VUcnlUb0Nvbm5lY3QpO1xyXG4gICAgICAgICAgdGhpcy5jaGVja0Nvbm5lY3Rpb24oKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5vcHRpb25zLnNob3dSZW5kZXJDb25uZWN0aW9uSW5mbykge1xyXG4gICAgICAgICAgICBjb25zdCB0b2FzdCA9IG5ldyBUb2FzdCgpO1xyXG4gICAgICAgICAgICB0b2FzdC5tZXNzYWdlID0gJ1JFX0NPTk5FQ1RFRF9XSVRIX1JFTkRFUl9TRVJWSUNFJztcclxuICAgICAgICAgICAgdG9hc3QudHlwZSA9IFRvYXN0VHlwZS5TdWNjZXNzO1xyXG4gICAgICAgICAgICB0aGlzLl90b2FzdFNlcnZpY2Uuc2hvd1RvYXN0KHRvYXN0KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuY29ubmVjdGlvblN0YXR1cyA9IENvbm5lY3Rpb25TdGF0dXMuSXNDb25uZWN0ZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY29ubmVjdGlvblN0YXR1cyA9PT0gQ29ubmVjdGlvblN0YXR1cy5Jc0Nvbm5lY3RlZCkge1xyXG4gICAgICAgIHRoaXMuX21lc3NhZ2VCdXNTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuUmVuZGVyU2VydmljZUNvbm5lY3RlZCk7XHJcbiAgICAgIH1cclxuICAgIH0sIDIwMDApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFJlbmRlclBhcmFtZXRlcnModHlwZTogUmVuZGVyTW9kZXMpOiBSZW5kZXJEYXRhIHtcclxuXHJcbiAgICBjb25zdCBwYXJhbXM6IFJlbmRlckRhdGEgPSBuZXcgUmVuZGVyRGF0YSgpO1xyXG5cclxuICAgIGlmICh0eXBlICE9PSBSZW5kZXJNb2Rlcy5SZW5kZXJJb25lKSB7XHJcbiAgICAgIGNvbnN0IGN1cnJlbnRJbWFnZVNpemUgPSB0aGlzLmdldEltYWdlU2l6ZU9uSWQodGhpcy5zZWxlY3RlZEltYWdlU2l6ZSk7XHJcbiAgICAgIHBhcmFtcy5pbWFnZVdpZHRoID0gTnVtYmVyKGN1cnJlbnRJbWFnZVNpemUud2lkdGgpO1xyXG4gICAgICBwYXJhbXMuaW1hZ2VIZWlnaHQgPSBOdW1iZXIoY3VycmVudEltYWdlU2l6ZS5oZWlnaHQpO1xyXG4gICAgfVxyXG5cclxuICAgIHBhcmFtcy5jb25maWd1cmVkSXRlbSA9IHRoaXMuX2dldENvbmZpZ3VyZWRGdXJuaXR1cmVJdGVtKCk7XHJcbiAgICBwYXJhbXMuY2FtZXJhRk9WID0gdGhpcy5fY2FtZXJhU2VydmljZS5jYW1lcmEuZm92O1xyXG4gICAgcGFyYW1zLnR5cGUgPSB0eXBlO1xyXG5cclxuICAgIGlmICh0eXBlID09PSB0aGlzLnJlbmRlck1vZGVzLlJlbmRlclNob3ApIHtcclxuICAgICAgcGFyYW1zLmNhbWVyYUZPViA9IDMwO1xyXG5cclxuICAgICAgaWYgKHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5yZW5kZXJQYXJhbWV0ZXJzLnNldHRpbmdzICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBwYXJhbXMuc2V0dGluZ3MgPSB0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MucmVuZGVyUGFyYW1ldGVycy5zZXR0aW5ncztcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSB0aGlzLnJlbmRlck1vZGVzLlJlbmRlclJvb20pIHtcclxuICAgICAgY29uc3QgcmVuZGVyRW52aXJvbm1lbnQgPSB0aGlzLmdldFJlbmRlckVudmlyb25tZW50T25JZCh0aGlzLnNlbGVjdGVkRW52aXJvbm1lbnQpO1xyXG4gICAgICBwYXJhbXMuc2V0dGluZ3MgPSBuZXcgUmVuZGVyU2V0dGluZ3MoKTtcclxuICAgICAgcGFyYW1zLnNldHRpbmdzLmVudmlyb25tZW50SGRyID0gcmVuZGVyRW52aXJvbm1lbnQuaGRyRmlsZTtcclxuICAgICAgcGFyYW1zLnNldHRpbmdzLmVudmlyb25tZW50SW50ZW5zaXR5ID0gcmVuZGVyRW52aXJvbm1lbnQuaW50ZW5zaXR5O1xyXG5cclxuICAgICAgY29uc3QgZmxvb3JQbGFuSGFzUm9vbXMgPSB0aGlzLl9yb29tU2VydmljZS5yb29tc1swXTtcclxuICAgICAgY29uc3QgY2VpbGluZ09yRmxvb3IgPSBmbG9vclBsYW5IYXNSb29tcyA/IHRoaXMuX3Jvb21TZXJ2aWNlLnJvb21zWzBdLmNlaWxpbmdQbGFuZSA6IHRoaXMuX2Zsb29yU2VydmljZS5nZXRGbG9vclBsYW5lKCk7XHJcbiAgICAgIGNvbnN0IGJiID0gbmV3IEJveDMoKS5zZXRGcm9tT2JqZWN0KGNlaWxpbmdPckZsb29yKTtcclxuICAgICAgY29uc3QgYmJTaXplOiBWZWN0b3IzID0gbmV3IFZlY3RvcjMoKTtcclxuICAgICAgYmIuZ2V0U2l6ZShiYlNpemUpO1xyXG4gICAgICBwYXJhbXMuc2V0dGluZ3MuZXh0cmFMaWdodHMgPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgeDE6IGJiLm1pbi54ICsgdGhpcy5fY2VpbGluZ0xpZ2h0TWFyZ2luLFxyXG4gICAgICAgICAgejE6IGJiLm1pbi56ICsgdGhpcy5fY2VpbGluZ0xpZ2h0TWFyZ2luLFxyXG4gICAgICAgICAgeDI6IGJiLm1heC54IC0gdGhpcy5fY2VpbGluZ0xpZ2h0TWFyZ2luLFxyXG4gICAgICAgICAgejI6IGJiLm1heC56IC0gdGhpcy5fY2VpbGluZ0xpZ2h0TWFyZ2luLFxyXG4gICAgICAgICAgaGVpZ2h0OiBmbG9vclBsYW5IYXNSb29tcyA/IGNlaWxpbmdPckZsb29yLnBvc2l0aW9uLnkgOiAyLjYsXHJcbiAgICAgICAgfVxyXG4gICAgICBdO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBwYXJhbXM7XHJcbiAgfVxyXG5cclxuICAvLyBUaGUgR0xURkV4cG9ydGVyIG5lZWRzIGxpZ2h0cyB0byBiZSBjb25maWd1cmVkIGxpa2UgdGhpcyxcclxuICAvLyBvdGhlcndpc2UgdGhleSB3aWxsIGFsbCBwb2ludCBpbiB0aGUgc2FtZSBkaXJlY3Rpb24uXHJcbiAgcHJpdmF0ZSBfZml4TGlnaHQoZWxlbWVudDogRGlyZWN0aW9uYWxMaWdodCB8IFNwb3RMaWdodCk6IHZvaWQge1xyXG4gICAgZWxlbWVudC50YXJnZXQucGFyZW50ID0gZWxlbWVudDtcclxuICAgIGVsZW1lbnQubG9va0F0KGVsZW1lbnQudGFyZ2V0LnBvc2l0aW9uKTtcclxuICAgIGVsZW1lbnQudGFyZ2V0LnBvc2l0aW9uLnggPSAwO1xyXG4gICAgZWxlbWVudC50YXJnZXQucG9zaXRpb24ueSA9IDA7XHJcbiAgICBlbGVtZW50LnRhcmdldC5wb3NpdGlvbi56ID0gLTE7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9lbGVtZW50TXVzdEJlUmVtb3ZlZChlbGVtZW50OiBPYmplY3QzRCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKGVsZW1lbnQudHlwZSA9PT0gJ1BlcnNwZWN0aXZlQ2FtZXJhJykge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlmICghZWxlbWVudC5uYW1lKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBsY05hbWUgPSBlbGVtZW50Lm5hbWUudG9Mb3dlckNhc2UoKTtcclxuICAgIC8vIGVsZW1lbnRzIHdpdGggYSBuYW1lIHN0YXJ0aW5nIHdpdGggY18gYXJlIGNvbm5lY3RvcnMsXHJcbiAgICAvLyB3aGljaCBzaG91bGQgbm90IGJlIHZpc2libGUuXHJcbiAgICBpZiAobGNOYW1lLnN0YXJ0c1dpdGgoJ2NfJykpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGVsZW1lbnQubmFtZS5zdGFydHNXaXRoKCdzbmFwcGluZy1wcmV2aWV3LW1lc2gnKSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9leHBvcnRUb0dsYigpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgY29uc3QgYXNzZXRQYXRoOiBzdHJpbmcgPSB0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MuYXNzZXRQYXRoO1xyXG4gICAgLy8gVGhlIGdyb3VuZCBwbGFuZSBsb29rcyBvZGQgaW4gcmVuZGVycy5cclxuICAgIC8vIFRoZSBodWQtcmluZyBhbmQgaHVkLWNpcmNsZSBhcmUgdGhlIHdhbGt0aHJvdWdoIG1vZGUgbWFya2VyLFxyXG4gICAgLy8gd2hpY2ggaXMgbm90IHN1cHBvc2VkIHRvIGJlIHJlbmRlcmVkLlxyXG4gICAgY29uc3QgZWxlbWVudHNUb1JlbW92ZSA9IFsnZ3JvdW5kLXBsYW5lJywgJ2h1ZC1yaW5nJywgJ2h1ZC1jaXJjbGUnXTtcclxuXHJcbiAgICBsZXQgc2NlbmU6IFNjZW5lO1xyXG4gICAgdHJ5IHtcclxuICAgICAgc2NlbmUgPSB0aGlzLl9zY2VuZVNlcnZpY2Uuc2NlbmUuY2xvbmUoKTtcclxuXHJcbiAgICAgIGVsZW1lbnRzVG9SZW1vdmUuZm9yRWFjaChlbGVtZW50TmFtZSA9PiB7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRPYmplY3Q6IE9iamVjdDNEID0gc2NlbmUuZ2V0T2JqZWN0QnlOYW1lKGVsZW1lbnROYW1lKTtcclxuICAgICAgICBzY2VuZS5yZW1vdmUoc2VsZWN0ZWRPYmplY3QpO1xyXG4gICAgICB9KTtcclxuICAgICAgLy8gVXNpbmcgdGhlIHBhcmVudHMsIGJlY2F1c2Ugc2NlbmUucmVtb3ZlIGRvZXMgbm90IHNlZW0gdG8gd29yayBjb3JyZWN0bHkuXHJcbiAgICAgIGNvbnN0IHBhcmVudHMgPSBbXTtcclxuICAgICAgc2NlbmUudHJhdmVyc2UoZWxlbWVudCA9PiB7XHJcbiAgICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBEaXJlY3Rpb25hbExpZ2h0IHx8IGVsZW1lbnQgaW5zdGFuY2VvZiBTcG90TGlnaHQpIHtcclxuICAgICAgICAgIHRoaXMuX2ZpeExpZ2h0KGVsZW1lbnQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGVsZW1lbnQudmlzaWJsZSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiRWxlbWVudCBcIiArIGVsZW1lbnQubmFtZSArIFwiIHdhcyBpbnZpc2libGUsIG1ha2luZyBpdCB2aXNpYmxlLlwiKTtcclxuICAgICAgICAgIGVsZW1lbnQudmlzaWJsZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIE1lc2ggJiYgZWxlbWVudC5uYW1lICYmIGVsZW1lbnQubmFtZS5zdGFydHNXaXRoKCdjdXN0b21NZXNoV2luZG93JykpIHtcclxuICAgICAgICAgIGxldCBoYXNDdXN0b21UZXh0dXJlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgaWYgKGVsZW1lbnQubWF0ZXJpYWwgaW5zdGFuY2VvZiBNYXRlcmlhbCkge1xyXG5cclxuICAgICAgICAgICAgaWYgKGVsZW1lbnQubWF0ZXJpYWwgaW5zdGFuY2VvZiBNZXNoUGhvbmdNYXRlcmlhbCAmJiBlbGVtZW50Lm1hdGVyaWFsLm1hcCkge1xyXG4gICAgICAgICAgICAgIGhhc0N1c3RvbVRleHR1cmUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsZW1lbnQubWF0ZXJpYWwgPSBSZW5kZXJTZXJ2aWNlLk1ha2VXaW5kb3dNYXRlcmlhbFRyYW5zcGFyZW50KGVsZW1lbnQubWF0ZXJpYWwpO1xyXG5cclxuICAgICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShlbGVtZW50Lm1hdGVyaWFsKSkge1xyXG5cclxuICAgICAgICAgICAgZWxlbWVudC5tYXRlcmlhbC5mb3JFYWNoKGZ1bmN0aW9uIChtYXRlcmlhbDogTWF0ZXJpYWwsIGluZGV4KSB7XHJcbiAgICAgICAgICAgICAgaWYgKG1hdGVyaWFsIGluc3RhbmNlb2YgTWVzaFBob25nTWF0ZXJpYWwgJiYgbWF0ZXJpYWwubWFwKSB7XHJcbiAgICAgICAgICAgICAgICBoYXNDdXN0b21UZXh0dXJlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxlbWVudC5tYXRlcmlhbFtpbmRleF0gPSBSZW5kZXJTZXJ2aWNlLk1ha2VXaW5kb3dNYXRlcmlhbFRyYW5zcGFyZW50KG1hdGVyaWFsKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKCFoYXNDdXN0b21UZXh0dXJlKSB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQubmFtZSA9ICdnbGFzcyc7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5fZWxlbWVudE11c3RCZVJlbW92ZWQoZWxlbWVudCkpIHtcclxuICAgICAgICAgIHBhcmVudHMucHVzaChlbGVtZW50LnBhcmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgcGFyZW50cy5mb3JFYWNoKHBhcmVudCA9PiB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IHBhcmVudC5jaGlsZHJlbi5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuX2VsZW1lbnRNdXN0QmVSZW1vdmVkKHBhcmVudC5jaGlsZHJlbltpXSkpIHtcclxuICAgICAgICAgICAgcGFyZW50LnJlbW92ZShwYXJlbnQuY2hpbGRyZW5baV0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHNjZW5lLmFkZCh0aGlzLl9jYW1lcmFTZXJ2aWNlLmNhbWVyYS5jbG9uZSgpKTtcclxuXHJcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgdHJzOiBmYWxzZSxcclxuICAgICAgICBvbmx5VmlzaWJsZTogZmFsc2UsXHJcbiAgICAgICAgdHJ1bmNhdGVEcmF3UmFuZ2U6IHRydWUsXHJcbiAgICAgICAgYmluYXJ5OiB0cnVlLFxyXG4gICAgICAgIGZvcmNlSW5kaWNlczogZmFsc2UsXHJcbiAgICAgICAgZm9yY2VQb3dlck9mVHdvVGV4dHVyZXM6IGZhbHNlLFxyXG4gICAgICAgIC8vIG1heFRleHR1cmVTaXplOiA1MDAsXHJcbiAgICAgICAgZW1iZWRJbWFnZXM6IHRydWUsXHJcbiAgICAgIH07XHJcblxyXG4gICAgICBjb25zdCBleHBvcnRlcjogR0xURkV4cG9ydGVyID0gbmV3IEdMVEZFeHBvcnRlcigpO1xyXG4gICAgICBsZXQgZmlsZW5hbWU6IHN0cmluZyA9ICcnO1xyXG5cclxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbikgPT4ge1xyXG4gICAgICAgIGV4cG9ydGVyLnBhcnNlKHNjZW5lLCBhc3luYyAoZXhwb3J0ZWRTY2VuZTogQXJyYXlCdWZmZXIpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGJsb2I6IEJsb2IgPSBuZXcgQmxvYihbZXhwb3J0ZWRTY2VuZV0sIHt0eXBlOiAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJ30pO1xyXG4gICAgICAgICAgY29uc3QgcmVzdWx0OiBhbnkgPSBhd2FpdCBGaWxlVXRpbHMuU2F2ZUdMQkZpbGUoYmxvYiwgYXNzZXRQYXRoKTtcclxuICAgICAgICAgIGlmIChyZXN1bHQgIT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIGZpbGVuYW1lID0gcmVzdWx0LnBhdGg7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXNvbHZlKGZpbGVuYW1lKTtcclxuICAgICAgICB9LCAoKSA9PiB7XHJcbiAgICAgICAgfSwgb3B0aW9ucyk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICB0aHJvdyAoZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgc3RhcnRSZW5kZXJpbmcoKTogUHJvbWlzZTx2b2lkPiB7XHJcblxyXG4gICAgaWYgKHRoaXMucmVuZGVyUXVldWUubGVuZ3RoID4gMCkge1xyXG5cclxuICAgICAgYXdhaXQgdGhpcy5jaGVja0Nvbm5lY3Rpb24oKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLnJlbmRlclF1ZXVlWzBdLnJlbmRlclByb2dyZXNzID09PSAwIHx8IHRoaXMucmVuZGVyUXVldWVbMF0ucmVuZGVyUHJvZ3Jlc3MgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMucmVuZGVyUXVldWVbMF0ucmVuZGVyU3RhdHVzID0gUmVuZGVyU3RhdHVzLklzUnVubmluZztcclxuICAgICAgICB0aGlzLmN1cnJlbnRRdWV1ZVJlbmRlckl0ZW0gPSB0aGlzLnJlbmRlclF1ZXVlWzBdO1xyXG4gICAgICAgIHRoaXMucmVuZGVyUXVldWUuc2hpZnQoKTtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJyZW50UXVldWVSZW5kZXJJdGVtLnBhcmFtcy5nbGJQYXRoID0gYXdhaXQgdGhpcy5fZXhwb3J0VG9HbGIoKVxyXG4gICAgICAgICAgLmNhdGNoKChlKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX3N0YXJ0UmVuZGVyTG9vcCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9jb2xpam5SZW5kZXJTY2VuZShwYXJhbXM6IGFueSk6IFByb21pc2U8YW55PiB7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgY29uc3QgcmVxdWVzdFBhcmFtcyA9IFt7XHJcbiAgICAgICAgaWQ6IDEsXHJcbiAgICAgICAganNvbnJwYzogJzIuMCcsXHJcbiAgICAgICAgbWV0aG9kOiAnY29saWpuX3JlbmRlcl9zY2VuZV9mcm9tX2dsYicsXHJcbiAgICAgICAgcGFyYW1zOiBwYXJhbXNcclxuICAgICAgfV07XHJcbiAgICAgIGNvbnN0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgICB4aHIub3BlbignUE9TVCcsIHRoaXMuX2dldFJlbmRlclNlcnZpY2VVcmwoKSk7XHJcbiAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyk7XHJcbiAgICAgIHhoci5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgICAgaWYgKHhoci5zdGF0dXMgPj0gMjAwICYmIHhoci5zdGF0dXMgPCAzMDApIHtcclxuICAgICAgICAgIHJlc29sdmUoSlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJlamVjdCh4aHIuc3RhdHVzVGV4dCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9O1xyXG4gICAgICB4aHIub25lcnJvciA9ICgpID0+IHJlamVjdCh4aHIuc3RhdHVzVGV4dCk7XHJcbiAgICAgIHhoci5zZW5kKEpTT04uc3RyaW5naWZ5KHJlcXVlc3RQYXJhbXMpKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfc3RhcnRSZW5kZXJMb29wKCk6IFByb21pc2U8dm9pZD4ge1xyXG5cclxuICAgIC8vIHRlbXBvcmFyeSBzb2x1dGlvbiBiZWNhdXNlIGxhcmdlIHJlcXVlc3Qgb3ZlciB3ZWJzb2NrZXRzIGFyZSBub3Qgd29ya2luZyBiZWNhdXNlIG9mIGFuIGVycm9yIGluIHRoZSBzb2Z0d2FyZSBvZiBtaWdlbml1c1xyXG4gICAgbGV0IFtpbmZvXSA9IGF3YWl0IHRoaXMuX2NvbGlqblJlbmRlclNjZW5lKHRoaXMuY3VycmVudFF1ZXVlUmVuZGVySXRlbS5wYXJhbXMpO1xyXG4gICAgaW5mbyA9IGluZm8ucmVzdWx0O1xyXG5cclxuICAgIC8qXHJcbiAgICBjb25zdCBbIGluZm8gXSA9IGF3YWl0IHRoaXMuc2VydmljZS5xdWV1ZV9jb21tYW5kcygpXHJcbiAgICAgIC5xdWV1ZShuZXcgQ29tbWFuZCgnY29saWpuX3JlbmRlcl9zY2VuZScsIHRoaXMuY3VycmVudFF1ZXVlUmVuZGVySXRlbS5wYXJhbXMpLCB0cnVlKVxyXG4gICAgICAuZXhlY3V0ZSgpO1xyXG4gICAgKi9cclxuXHJcbiAgICB0aGlzLmN1cnJlbnRRdWV1ZVJlbmRlckl0ZW0uaG9zdCA9IHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy51cmw7XHJcbiAgICB0aGlzLmN1cnJlbnRRdWV1ZVJlbmRlckl0ZW0ua2V5ID0gaW5mby5zY2VuZV9uYW1lO1xyXG4gICAgdGhpcy5jdXJyZW50UXVldWVSZW5kZXJJdGVtLnR5cGUgPSB0aGlzLmN1cnJlbnRRdWV1ZVJlbmRlckl0ZW0ucGFyYW1zLnR5cGU7XHJcbiAgICB0aGlzLmN1cnJlbnRRdWV1ZVJlbmRlckl0ZW0uc3RhcnREYXRlVGltZSA9IG5ldyBEYXRlKCk7XHJcbiAgICB0aGlzLmN1cnJlbnRRdWV1ZVJlbmRlckl0ZW0uaW1hZ2VTaXplID0gdGhpcy5jdXJyZW50UXVldWVSZW5kZXJJdGVtLnBhcmFtcy5pbWFnZVdpZHRoICsgJyB4ICcgKyB0aGlzLmN1cnJlbnRRdWV1ZVJlbmRlckl0ZW0ucGFyYW1zLmltYWdlSGVpZ2h0O1xyXG5cclxuICAgIHRoaXMuX3NldFJlbmRlclByb2dyZXNzKFJlbmRlclN0YXR1cy5Jc1J1bm5pbmcsIDAsIDApO1xyXG5cclxuICAgIHRoaXMuc2NlbmVEYXRhID0gaW5mbztcclxuICAgIGlmICghdGhpcy5zY2VuZURhdGEgfHwgdGhpcy5zY2VuZURhdGEuZXJyb3IpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc2NlbmVEYXRhLmltYWdlX2luZm8gJiYgdGhpcy5zY2VuZURhdGEuaW1hZ2VfaW5mby5uZWVkc19yZW5kZXIgPT09IHRydWUpIHtcclxuICAgICAgdGhpcy5jdXJyZW50UXVldWVSZW5kZXJJdGVtLnJlbmRlcmVkID0gdHJ1ZTtcclxuICAgICAgYXdhaXQgdGhpcy5fc3RhcnRSZW5kZXJTdHJlYW0oKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2FmdGVyUmVuZGVyaW5nKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9xdWl0UmVuZGVyTG9vcCgpIHtcclxuXHJcbiAgICAvLyBpZiAodGhpcy5zY2VuZURhdGEubG9vcF9uYW1lICE9PSB1bmRlZmluZWQgJiYgdGhpcy5zZXJ2aWNlLnZhbGlkYXRlKCkgIT09IGZhbHNlKSB7XHJcbiAgICAvLyAgIGNvbnN0IFtdID0gYXdhaXQgdGhpcy5zZXJ2aWNlLnF1ZXVlX2NvbW1hbmRzKClcclxuICAgIC8vICAgICAucXVldWUobmV3IENvbW1hbmQoJ3JlbmRlcl9sb29wX3F1aXQnLCB7XHJcbiAgICAvLyAgICAgICByZW5kZXJfbG9vcF9uYW1lOiB0aGlzLnNjZW5lRGF0YS5sb29wX25hbWVcclxuICAgIC8vICAgICB9KSlcclxuICAgIC8vICAgICAuZXhlY3V0ZSgpO1xyXG4gICAgLy8gICB0aGlzLnNlcnZpY2UucmVtb3ZlX3N0cmVhbSh0aGlzLnNjZW5lRGF0YS5sb29wX25hbWUpO1xyXG4gICAgLy8gfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfc3RhcnRSZW5kZXJTdHJlYW0oKSB7XHJcbiAgICAvL1xyXG4gICAgLy8gdHJ5IHtcclxuICAgIC8vXHJcbiAgICAvLyAgIHRoaXMuc3RyZWFtaW5nLnN0cmVhbSA9IHRoaXMuc2VydmljZS5jcmVhdGVfc3RyZWFtKCk7XHJcbiAgICAvLyAgIGF3YWl0IHRoaXMuc3RyZWFtaW5nLnN0cmVhbS5zdGFydCh7cmVuZGVyX2xvb3BfbmFtZTogdGhpcy5zY2VuZURhdGEubG9vcF9uYW1lLCBpbWFnZV9mb3JtYXQ6ICdqcGcnLCBxdWFsaXR5OiAnMTAwJ30pO1xyXG4gICAgLy9cclxuICAgIC8vICAgdGhpcy5zdHJlYW1pbmcuc3RyZWFtLm9uKCdpbWFnZScsIGFzeW5jIChvYmplY3QpID0+IHtcclxuICAgIC8vICAgICB0aGlzLl9odG1sSW1hZ2VEaXNwbGF5KG9iamVjdCwgbnVsbCk7XHJcbiAgICAvLyAgICAgY29uc3QgW3Byb2dyZXNzXSA9IGF3YWl0IHRoaXMuc2VydmljZS5xdWV1ZV9jb21tYW5kcygpXHJcbiAgICAvLyAgICAgICAucXVldWUobmV3IENvbW1hbmQoJ3JlbmRlcl9sb29wX2dldF9yZW5kZXJfcHJvZ3Jlc3MnLCB7XHJcbiAgICAvLyAgICAgICAgIHJlbmRlcl9sb29wX25hbWU6IHRoaXMuc2NlbmVEYXRhLmxvb3BfbmFtZVxyXG4gICAgLy8gICAgICAgfSksIHRydWUpXHJcbiAgICAvLyAgICAgICAuZXhlY3V0ZSgpO1xyXG4gICAgLy9cclxuICAgIC8vICAgICBpZiAocHJvZ3Jlc3MucHJvZ3Jlc3Npb24gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgLy8gICAgICAgdGhpcy5fc2V0UmVuZGVyUHJvZ3Jlc3MoUmVuZGVyU3RhdHVzLklzUnVubmluZywgTWF0aC5jZWlsKChwcm9ncmVzcy5wcm9ncmVzc2lvbiAqIDEwMCkpLCBwcm9ncmVzcy5pdGVyYXRpb24pO1xyXG4gICAgLy8gICAgIH1cclxuICAgIC8vXHJcbiAgICAvLyAgICAgaWYgKG9iamVjdC5yZXN1bHQgPT09IDEpIHtcclxuICAgIC8vXHJcbiAgICAvLyAgICAgICBhd2FpdCB0aGlzLnNlcnZpY2UucXVldWVfY29tbWFuZHMoKVxyXG4gICAgLy8gICAgICAgICAucXVldWUobmV3IENvbW1hbmQoJ3JlbmRlcl9sb29wX3NhdmVfdG9fZGlzaycsIHtcclxuICAgIC8vICAgICAgICAgICByZW5kZXJfbG9vcF9uYW1lOiB0aGlzLnNjZW5lRGF0YS5sb29wX25hbWUsXHJcbiAgICAvLyAgICAgICAgICAgZm9ybWF0OiAnanBnJyxcclxuICAgIC8vICAgICAgICAgICBxdWFsaXR5OiA5MCxcclxuICAgIC8vICAgICAgICAgICBwYXRoOiB0aGlzLnNjZW5lRGF0YS5pbWFnZV9pbmZvLnVybFxyXG4gICAgLy8gICAgICAgICB9KSwgdHJ1ZSlcclxuICAgIC8vICAgICAgICAgLmV4ZWN1dGUoKTtcclxuICAgIC8vXHJcbiAgICAvLyAgICAgICBpZiAodGhpcy5zdHJlYW1pbmcuc3RyZWFtICE9PSB1bmRlZmluZWQpIHtcclxuICAgIC8vICAgICAgICAgdGhpcy5zdHJlYW1pbmcuc3RyZWFtLnN0b3AoKTtcclxuICAgIC8vICAgICAgIH1cclxuICAgIC8vICAgICAgIGF3YWl0IHRoaXMuX3F1aXRSZW5kZXJMb29wKCk7XHJcbiAgICAvLyAgICAgICB0aGlzLl9hZnRlclJlbmRlcmluZygpO1xyXG4gICAgLy8gICAgICAgcmV0dXJuO1xyXG4gICAgLy9cclxuICAgIC8vICAgICB9IGVsc2UgaWYgKG9iamVjdC5yZXN1bHQgPCAwKSB7XHJcbiAgICAvL1xyXG4gICAgLy8gICAgICAgYXdhaXQgdGhpcy5fb25SZW5kZXJFcnJvcigpO1xyXG4gICAgLy8gICAgICAgcmV0dXJuO1xyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgfSk7XHJcbiAgICAvL1xyXG4gICAgLy8gfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAvL1xyXG4gICAgLy8gICBhd2FpdCB0aGlzLl9vblJlbmRlckVycm9yKCk7XHJcbiAgICAvLyAgIHJldHVybjtcclxuICAgIC8vIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NldFJlbmRlclByb2dyZXNzKHN0YXR1czogUmVuZGVyU3RhdHVzLCBwcm9ncmVzczogbnVtYmVyLCBpdGVyYXRpb25zOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5zZXJ2ZXJEYXRhKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuY3VycmVudFF1ZXVlUmVuZGVySXRlbS5lbmREYXRlVGltZSA9IG5ldyBEYXRlKCk7XHJcbiAgICB0aGlzLmN1cnJlbnRRdWV1ZVJlbmRlckl0ZW0ucmVuZGVyU3RhdHVzID0gc3RhdHVzO1xyXG4gICAgdGhpcy5jdXJyZW50UXVldWVSZW5kZXJJdGVtLnJlbmRlclByb2dyZXNzID0gcHJvZ3Jlc3M7XHJcbiAgICBpZiAoaXRlcmF0aW9ucyA+IDApIHtcclxuICAgICAgdGhpcy5jdXJyZW50UXVldWVSZW5kZXJJdGVtLnJlbmRlckl0ZXJhdGlvbnMgPSBpdGVyYXRpb25zO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnNlcnZlckRhdGEucmVuZGVyTW9kZSA9PT0gUmVuZGVyTW9kZXMuUmVuZGVySW9uZSkge1xyXG4gICAgICBjb25zdCByZW5kZXI6IFJlbmRlciA9IHRoaXMuZ2V0UmVuZGVyT25JZCh0aGlzLmN1cnJlbnRRdWV1ZVJlbmRlckl0ZW0ucGFyYW1zLnJlbmRlci5pZCk7XHJcbiAgICAgIHJlbmRlci5zdGF0dXMgPSBzdGF0dXM7XHJcbiAgICAgIHJlbmRlci5wcm9ncmVzcyA9IHByb2dyZXNzO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfb25SZW5kZXJFcnJvcigpOiBQcm9taXNlPHZvaWQ+IHtcclxuXHJcbiAgICB0aGlzLl9zZXRSZW5kZXJQcm9ncmVzcyhSZW5kZXJTdGF0dXMuSXNTdG9wcGVkLCAwLCAwKTtcclxuICAgIGF3YWl0IHRoaXMuX3F1aXRSZW5kZXJMb29wKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9vblJlbmRlckNsb3NlKCk6IFByb21pc2U8dm9pZD4ge1xyXG5cclxuICAgIHRoaXMuX3NldFJlbmRlclByb2dyZXNzKFJlbmRlclN0YXR1cy5Jc1N0b3BwZWQsIDAsIDApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfYWZ0ZXJSZW5kZXJpbmcoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuc2VydmVyRGF0YSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fc2V0UmVuZGVyUHJvZ3Jlc3MoUmVuZGVyU3RhdHVzLklzU3VjY2VzcywgMTAwLCAwKTtcclxuXHJcbiAgICBjb25zdCBpbWFnZVVybCA9IHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5hc3NldFBhdGgucmVwbGFjZSgnY29udGVudDQzLycsICcnKSArIHRoaXMuc2NlbmVEYXRhLmltYWdlX2luZm8udXJsO1xyXG4gICAgaWYgKHRoaXMuc2VydmVyRGF0YS5yZW5kZXJNb2RlID09PSBSZW5kZXJNb2Rlcy5SZW5kZXJSb29tKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyZWRSb29tSW1hZ2VzLnVuc2hpZnQoaW1hZ2VVcmwpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVuZGVySW1hZ2VDaGFuZ2VkLm5leHQoaW1hZ2VVcmwpO1xyXG5cclxuICAgIGlmICh0aGlzLnNlcnZlckRhdGEucmVuZGVyTW9kZSA9PT0gUmVuZGVyTW9kZXMuUmVuZGVySW9uZSkge1xyXG4gICAgICBjb25zdCByZW5kZXI6IFJlbmRlciA9IHRoaXMuZ2V0UmVuZGVyT25JZCh0aGlzLmN1cnJlbnRRdWV1ZVJlbmRlckl0ZW0ucGFyYW1zLnJlbmRlci5pZCk7XHJcbiAgICAgIHJlbmRlci51cmwgPSBpbWFnZVVybDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjb25maWd1cmVkSXRlbSA9IHRoaXMuY3VycmVudFF1ZXVlUmVuZGVySXRlbS5wYXJhbXMuY29uZmlndXJlZEl0ZW07XHJcbiAgICBjb25zdCBpc1NpbmdsZUl0ZW0gPSB0aGlzLnNlcnZlckRhdGEucmVuZGVyTW9kZSAhPT0gUmVuZGVyTW9kZXMuUmVuZGVyUm9vbTtcclxuICAgIHRoaXMuX2dvb2dsZVRhZ01hbmFnZXIuc2VuZEV2ZW50KEdvb2dsZVRhZ01hbmFnZXJFdmVudC5SZW5kZXIsIHtcclxuICAgICAgJ2FydGljbGVOcic6IGlzU2luZ2xlSXRlbSA/IGNvbmZpZ3VyZWRJdGVtLnNrdSA6ICdyZW5kZXJSb29tJyxcclxuICAgICAgJ3Byb2R1Y3QnOiBpc1NpbmdsZUl0ZW0gPyBjb25maWd1cmVkSXRlbS5uYW1lIDogJ3JlbmRlclJvb20nLFxyXG4gICAgICAnZGltZW5zaW9ucyc6IHRoaXMuY3VycmVudFF1ZXVlUmVuZGVySXRlbS5pbWFnZVNpemVcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc3RhcnRSZW5kZXJpbmcoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dldFJlbmRlclNlcnZpY2VVcmwoKTogc3RyaW5nIHtcclxuXHJcbiAgICByZXR1cm4gYCR7KHRoaXMuc2VydmVyRGF0YS5zZWN1cmUgPyAnaHR0cHMnIDogJ2h0dHAnKX06Ly8ke3RoaXMuc2VydmVyRGF0YS5ob3N0fToke3RoaXMuc2VydmVyRGF0YS5wb3J0fWA7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZm9yY2VSZW5kZXJJbWFnZSgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGZsb29yR3JvdXAgPSB0aGlzLl9nZXRGaXJzdEN1c3RvbUZsb29ySXRlbUZyb21TY2VuZSgpO1xyXG4gICAgaWYgKGZsb29yR3JvdXAgIT09IG51bGwpIHtcclxuICAgICAgdGhpcy5fY2hlY2tWaXNpYmxlVXBkYXRlcyhmbG9vckdyb3VwLCB0cnVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX2NoZWNrVmlzaWJsZVVwZGF0ZXMoZnVybml0dXJlOiBJdGVtLCBmb3JjZVJlbmRlcjogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoIXRoaXMuc2VydmVyRGF0YSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFmdXJuaXR1cmUpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnNlcnZlckRhdGEucmVuZGVyTW9kZSA9PT0gdGhpcy5yZW5kZXJNb2Rlcy5SZW5kZXJJb25lKSB7XHJcbiAgICAgIGNvbnN0IG9iamVjdCA9IHRoaXMuX2V4cG9ydFNlcnZpY2UuZ2V0RXhwb3J0T2JqZWN0RnJvbUN1c3RvbUZsb29yR3JvdXAoZnVybml0dXJlKTtcclxuICAgICAgdGhpcy5jdXJyZW50UHJvZHVjdEhhc2ggPSBvYmplY3QuZGVmYXVsdFJlbmRlclBhdGg7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VydmVyRGF0YS5yZW5kZXJNb2RlID09PSB0aGlzLnJlbmRlck1vZGVzLlJlbmRlclNob3ApIHtcclxuICAgICAgY29uc3Qgb2JqZWN0ID0gdGhpcy5fZXhwb3J0U2VydmljZS5nZXRFeHBvcnRPYmplY3RGcm9tQ3VzdG9tRmxvb3JHcm91cChmdXJuaXR1cmUpO1xyXG5cclxuICAgICAgaWYgKCEoSlNPTi5zdHJpbmdpZnkodGhpcy5wcmV2SXRlbSkgIT09IEpTT04uc3RyaW5naWZ5KG9iamVjdCkgfHwgZm9yY2VSZW5kZXIpKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnJlbmRlcmluZ1N0YXJ0ZWQubmV4dCgpO1xyXG4gICAgICB0aGlzLnByZXZJdGVtID0gb2JqZWN0O1xyXG4gICAgICBjb25zdCBxdWV1ZUl0ZW0gPSBuZXcgUmVuZGVyUXVldWVJdGVtKCk7XHJcbiAgICAgIHF1ZXVlSXRlbS5wYXJhbXMgPSB0aGlzLmdldFJlbmRlclBhcmFtZXRlcnModGhpcy5yZW5kZXJNb2Rlcy5SZW5kZXJTaG9wKTtcclxuICAgICAgcXVldWVJdGVtLnBhcmFtcy5jYW1lcmFNYXRyaXggPSB0aGlzLl9jYW1lcmFTZXJ2aWNlLmNhbWVyYS5tYXRyaXhXb3JsZEludmVyc2UuZWxlbWVudHM7XHJcbiAgICAgIHF1ZXVlSXRlbS5wYXJhbXMuZm9yY2VSZW5kZXIgPSBmb3JjZVJlbmRlcjtcclxuICAgICAgdGhpcy5yZW5kZXJRdWV1ZSA9IFtdO1xyXG4gICAgICB0aGlzLnJlbmRlclF1ZXVlLnB1c2gocXVldWVJdGVtKTtcclxuICAgICAgYXdhaXQgdGhpcy5zdGFydFJlbmRlcmluZygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaHRtbEltYWdlRGlzcGxheShpbWFnZSwgdXJsQ3JlYXRvcikge1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIHVybENyZWF0b3IgPSB1cmxDcmVhdG9yIHx8ICh3aW5kb3cgPyAod2luZG93LlVSTCB8fCAod2luZG93IGFzIGFueSkud2Via2l0VVJMKSA6IHVuZGVmaW5lZCk7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbaW1hZ2UuaW1hZ2VdLCB7dHlwZTogaW1hZ2UubWltZV90eXBlfSk7XHJcbiAgICBjb25zdCB1cmwgPSB1cmxDcmVhdG9yLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcclxuXHJcbiAgICB0aGlzLnJlbmRlclJvb21JbWFnZUNoYW5nZWQubmV4dCh1cmwpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFJlbmRlck9uSWQoaWQ6IG51bWJlcik6IGFueSB7XHJcbiAgICBsZXQgcmV0dXJuUmVuZGVyID0gbnVsbDtcclxuICAgIHRoaXMucmVuZGVycy5mb3JFYWNoKCh4OiBSZW5kZXIpID0+IHtcclxuICAgICAgaWYgKHguaWQgPT09IGlkKSB7XHJcbiAgICAgICAgcmV0dXJuUmVuZGVyID0geDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcmV0dXJuUmVuZGVyO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEltYWdlU2l6ZU9uSWQoaWQ6IG51bWJlcik6IGFueSB7XHJcbiAgICBsZXQgcmV0dXJuU2l6ZSA9IG51bGw7XHJcbiAgICB0aGlzLmltYWdlU2l6ZXMuZm9yRWFjaCgoeDogSW1hZ2VTaXplKSA9PiB7XHJcbiAgICAgIGlmICh4LmlkID09PSBpZCkge1xyXG4gICAgICAgIHJldHVyblNpemUgPSB4O1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiByZXR1cm5TaXplO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFJlbmRlckVudmlyb25tZW50T25JZChpZDogbnVtYmVyKTogUmVuZGVyRW52aXJvbm1lbnQge1xyXG4gICAgbGV0IHJldHVybkVudmlyb25tZW50ID0gbnVsbDtcclxuICAgIHRoaXMucmVuZGVyRW52aXJvbm1lbnRzLmZvckVhY2goKHJlbmRlckVudmlyb25tZW50OiBSZW5kZXJFbnZpcm9ubWVudCkgPT4ge1xyXG4gICAgICBpZiAocmVuZGVyRW52aXJvbm1lbnQuaWQgPT09IGlkKSB7XHJcbiAgICAgICAgcmV0dXJuRW52aXJvbm1lbnQgPSByZW5kZXJFbnZpcm9ubWVudDtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHJldHVybkVudmlyb25tZW50O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldExpZ2h0bmluZ09uSWQoaWQ6IG51bWJlcik6IGFueSB7XHJcbiAgICBsZXQgcmV0dXJuTGlnaHRuaW5nID0gbnVsbDtcclxuICAgIHRoaXMubGlnaHRuaW5ncy5mb3JFYWNoKCh4OiBMaWdodG5pbmcpID0+IHtcclxuICAgICAgaWYgKHguaWQgPT09IGlkKSB7XHJcbiAgICAgICAgcmV0dXJuTGlnaHRuaW5nID0geDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcmV0dXJuTGlnaHRuaW5nO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBFeHBvcnQgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuICBwcml2YXRlIF9nZXRGaXJzdEN1c3RvbUZsb29ySXRlbUZyb21TY2VuZSgpOiBDdXN0b21GbG9vckl0ZW0gfCBudWxsIHtcclxuXHJcbiAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuX3NjZW5lU2VydmljZS5zY2VuZS5jaGlsZHJlbjtcclxuXHJcbiAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoIDw9IDApIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChsZXQgYSA9IDA7IGEgPCBjaGlsZHJlbi5sZW5ndGg7IGErKykge1xyXG4gICAgICBpZiAoY2hpbGRyZW5bYV0gaW5zdGFuY2VvZiBDdXN0b21GbG9vckl0ZW0pIHtcclxuICAgICAgICByZXR1cm4gPEN1c3RvbUZsb29ySXRlbT5jaGlsZHJlblthXTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY2hpbGRyZW5bYV0gaW5zdGFuY2VvZiBJdGVtR3JvdXApIHtcclxuICAgICAgICBjb25zdCBpdGVtR3JvdXAgPSA8SXRlbUdyb3VwPmNoaWxkcmVuW2FdO1xyXG4gICAgICAgIGlmIChpdGVtR3JvdXAuaXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgaXRlbUdyb3VwLml0ZW1zLmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoaXRlbSBpbnN0YW5jZW9mIEN1c3RvbUZsb29ySXRlbSkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dldENvbmZpZ3VyZWRGdXJuaXR1cmVJdGVtKCk6IEV4cG9ydE9iamVjdCB8IG51bGwge1xyXG5cclxuICAgIGNvbnN0IGZsb29yZ3JvdXAgPSB0aGlzLl9nZXRGaXJzdEN1c3RvbUZsb29ySXRlbUZyb21TY2VuZSgpO1xyXG5cclxuICAgIGlmIChmbG9vcmdyb3VwID09PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLl9leHBvcnRTZXJ2aWNlLmdldEV4cG9ydE9iamVjdEZyb21DdXN0b21GbG9vckdyb3VwKGZsb29yZ3JvdXApO1xyXG4gIH1cclxufVxyXG4iXX0=
|