@colijnit/homedecorator 255.1.4 → 255.1.6
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/enum/message-type.enum.d.ts +3 -1
- package/app/core/interface/message-with-payload.interface.d.ts +6 -0
- package/app/core/model/homedecorator-settings-options.d.ts +2 -0
- package/app/core/service/homedecorator-app-event.service.d.ts +1 -0
- package/app/core/service/homedecorator-connector-adapter.service.d.ts +2 -0
- package/app/core/service/homedecorator-connector.service.d.ts +5 -4
- package/app/core/service/homedecorator-settings.service.d.ts +2 -1
- package/app/core/service/presets.service.d.ts +3 -1
- package/app/homedecorator.component.d.ts +3 -1
- package/app/homedecorator.module.d.ts +2 -1
- package/app/plugins/core3d/service/floor-pattern.service.d.ts +1 -1
- package/app/plugins/core3d/service/floor-tile-intersection.service.d.ts +2 -1
- package/app/plugins/core3d/service/floor.service.d.ts +3 -1
- package/app/plugins/core3d/service/post-processing.service.d.ts +21 -7
- package/app/plugins/core3d/service/scene.service.d.ts +1 -1
- package/app/plugins/core3d/service/ssr.service.d.ts +0 -1
- package/app/plugins/model-uploader/model-previewer/model-preview.component.d.ts +11 -2
- package/app/plugins/model-uploader/model-previewer/model-preview.component.scss +185 -15
- package/app/plugins/model-uploader/model-uploader.module.d.ts +5 -1
- package/app/plugins/render/render-dialog/render-dialog.component.d.ts +4 -1
- package/app/plugins/render/render-dialog/render-dialog.component.scss +5 -5
- package/app/plugins/room-planner/components/floorplanner/floorplanner.component.d.ts +3 -1
- package/app/plugins/room-planner/components/floorplanner/service/room.service.d.ts +1 -0
- package/app/plugins/room-planner/components/settings/settings.component.d.ts +5 -1
- package/app/plugins/room-planner/components/texture-editor/texture-editor.component.d.ts +4 -1
- package/app/plugins/room-planner/room-planner/room-planner.component.scss +1 -0
- package/app/plugins/threedselector/threedselector/service/build-furniture.service.d.ts +1 -3
- package/app/plugins/toolbar/draw-dialog/draw-dialog.component.d.ts +2 -0
- package/app/plugins/toolbar/draw-dialog/draw-dialog.component.scss +1 -1
- package/app/plugins/toolbar/toolbar/toolbar.component.d.ts +2 -0
- package/assets/icons/dash-button.svg +7 -0
- package/assets/icons/pen-ruler.svg +1 -0
- package/assets/icons/retry-button.svg +7 -0
- package/bundles/colijnit-homedecorator.umd.js +822 -601
- package/bundles/colijnit-homedecorator.umd.js.map +1 -1
- package/esm2015/app/app.version.js +3 -3
- package/esm2015/app/core/enum/message-type.enum.js +3 -1
- package/esm2015/app/core/interface/message-with-payload.interface.js +1 -1
- package/esm2015/app/core/model/homedecorator-settings-options.js +3 -1
- package/esm2015/app/core/service/3dm-api.js +4 -4
- package/esm2015/app/core/service/homedecorator-app-event.service.js +2 -1
- package/esm2015/app/core/service/homedecorator-connector-adapter.service.js +25 -2
- package/esm2015/app/core/service/homedecorator-connector.service.js +25 -22
- package/esm2015/app/core/service/homedecorator-settings.service.js +3 -2
- package/esm2015/app/core/service/presets.service.js +13 -5
- package/esm2015/app/core/utils/material.utils.js +3 -3
- package/esm2015/app/homedecorator.component.js +26 -19
- package/esm2015/app/homedecorator.module.js +8 -4
- package/esm2015/app/plugins/core3d/core3d/components/scenecontrol/scene-control.component.js +5 -5
- package/esm2015/app/plugins/core3d/items/custom-cylinder-floor-item.js +2 -2
- package/esm2015/app/plugins/core3d/items/custom-cylinder-wall-item.js +2 -2
- package/esm2015/app/plugins/core3d/items/custom-shape-floor-item.js +2 -2
- package/esm2015/app/plugins/core3d/items/custom-shape-wall-item.js +2 -2
- package/esm2015/app/plugins/core3d/items/factory.js +3 -2
- package/esm2015/app/plugins/core3d/service/ar.service.js +2 -1
- package/esm2015/app/plugins/core3d/service/floor-pattern.service.js +24 -18
- package/esm2015/app/plugins/core3d/service/floor-tile-intersection.service.js +13 -8
- package/esm2015/app/plugins/core3d/service/floor.service.js +9 -4
- package/esm2015/app/plugins/core3d/service/light-presets.service.js +10 -8
- package/esm2015/app/plugins/core3d/service/lights.service.js +8 -1
- package/esm2015/app/plugins/core3d/service/outline.service.js +4 -6
- package/esm2015/app/plugins/core3d/service/post-processing.service.js +148 -51
- package/esm2015/app/plugins/core3d/service/scene-event.service.js +14 -7
- package/esm2015/app/plugins/core3d/service/scene.service.js +84 -74
- package/esm2015/app/plugins/core3d/service/ssr.service.js +2 -53
- package/esm2015/app/plugins/lite-selector/lite-selector/component/answers-slideout/answers-slideout.component.js +10 -5
- package/esm2015/app/plugins/lite-selector/lite-selector/lite-selector.component.js +2 -2
- package/esm2015/app/plugins/model-uploader/model-previewer/model-preview.component.js +281 -166
- package/esm2015/app/plugins/model-uploader/model-uploader.module.js +22 -3
- package/esm2015/app/plugins/render/render-controls/render-controls.component.js +3 -2
- package/esm2015/app/plugins/render/render-dialog/render-dialog.component.js +19 -14
- package/esm2015/app/plugins/render/service/new-render.service.js +4 -2
- package/esm2015/app/plugins/room-planner/components/custom-cylinder-creator/custom-cylinder-creator.component.js +4 -2
- package/esm2015/app/plugins/room-planner/components/custome-shape-creator/custom-shape-creator.component.js +2 -2
- package/esm2015/app/plugins/room-planner/components/floorplanner/floorplanner.component.js +29 -15
- package/esm2015/app/plugins/room-planner/components/floorplanner/service/room.service.js +5 -2
- package/esm2015/app/plugins/room-planner/components/settings/settings.component.js +12 -5
- package/esm2015/app/plugins/room-planner/components/texture-editor/texture-editor.component.js +31 -15
- package/esm2015/app/plugins/room-planner/room-planner/room-planner.component.js +691 -683
- package/esm2015/app/plugins/threedselector/threedselector/service/build-furniture.service.js +43 -41
- package/esm2015/app/plugins/threedselector/threedselector/threedselector.component.js +1 -1
- package/esm2015/app/plugins/toolbar/draw-dialog/draw-dialog.component.js +26 -20
- package/esm2015/app/plugins/toolbar/save-dialog/save-dialog.component.js +2 -2
- package/esm2015/app/plugins/toolbar/toolbar/toolbar.component.js +15 -8
- package/esm2015/app/shared/loading-overlay/loading-overlay.component.js +4 -2
- package/esm2015/app/shared/model-dialog/model-dialog-furniture-list.component.js +3 -3
- package/fesm2015/colijnit-homedecorator.js +1656 -1322
- package/fesm2015/colijnit-homedecorator.js.map +1 -1
- package/package.json +1 -1
package/esm2015/app/plugins/threedselector/threedselector/service/build-furniture.service.js
CHANGED
|
@@ -110,7 +110,6 @@ export class BuildFurnitureService {
|
|
|
110
110
|
this.arPlacementUpdate = new Subject();
|
|
111
111
|
this.showElementToolbar = false;
|
|
112
112
|
this.isMouseOverObject = false;
|
|
113
|
-
this.activeAnswers = [];
|
|
114
113
|
this.standAloneFirstBuildReady = false;
|
|
115
114
|
this._useNodeIdToLink = true;
|
|
116
115
|
this._standAlone = false;
|
|
@@ -326,21 +325,13 @@ export class BuildFurnitureService {
|
|
|
326
325
|
}
|
|
327
326
|
result.instanceId = result.metaData.itemId;
|
|
328
327
|
this.startPosition = result.metaData.position ? result.metaData.position.clone() : new Vector3();
|
|
329
|
-
|
|
330
|
-
if (
|
|
331
|
-
this._iOne.handleAnswersReceived(questionAndAnswers.answers);
|
|
332
|
-
}
|
|
333
|
-
this._appEventService.answerCountReceived.next(questionAndAnswers.answers.length);
|
|
334
|
-
if (questionAndAnswers.answers.length === 0) {
|
|
335
|
-
this.activeAnswers = [];
|
|
336
|
-
this.activeQuestion = undefined;
|
|
328
|
+
yield this._iOne.getQuestionAndAnswersAsync(); // see if there is user input needed
|
|
329
|
+
if (this._iOne.activeAnswers.length === 0) {
|
|
337
330
|
yield this._prepareSelectionsAndDecos(result)
|
|
338
331
|
.catch((e) => Promise.reject(e));
|
|
339
332
|
return this.build(result);
|
|
340
333
|
}
|
|
341
334
|
else {
|
|
342
|
-
this.activeQuestion = questionAndAnswers.question;
|
|
343
|
-
this.activeAnswers = questionAndAnswers.answers;
|
|
344
335
|
if (firstBuild) {
|
|
345
336
|
yield this._prepareSelectionsAndDecos(result)
|
|
346
337
|
.catch((e) => Promise.reject(e));
|
|
@@ -478,42 +469,47 @@ export class BuildFurnitureService {
|
|
|
478
469
|
const floorSize = floor.size;
|
|
479
470
|
const plankSize = new Vector3();
|
|
480
471
|
meshLeft.geometry.boundingBox.getSize(plankSize);
|
|
481
|
-
const items = this._floorPatternService.generatePattern(floorPatternInfo.floorPattern, plankSize, floorSize, floorPatternInfo.floorPatternDirection);
|
|
482
|
-
const itemAmount = (meshRight === null) ? items.length : items.length / 2;
|
|
472
|
+
const items = this._floorPatternService.generatePattern(floorPatternInfo.floorPattern, plankSize, floorSize, floorPatternInfo.floorPatternDirection, floorPatternInfo.heartLine);
|
|
483
473
|
const material = floor.getMaterial();
|
|
484
|
-
|
|
474
|
+
this._floorTileIntersectionService.toggleDebug();
|
|
475
|
+
const floorCountResult = this._floorTileIntersectionService.countTiles(floor.floorMesh, items, meshLeft.geometry, (meshRight) ? meshRight.geometry : null, true);
|
|
476
|
+
floor.metadata.floorCountResult = floorCountResult;
|
|
477
|
+
const leftItems = new Array();
|
|
478
|
+
const rightItems = new Array();
|
|
479
|
+
for (const item of floorCountResult.filtered) {
|
|
480
|
+
if (item.isLeft) {
|
|
481
|
+
leftItems.push(item);
|
|
482
|
+
}
|
|
483
|
+
else {
|
|
484
|
+
rightItems.push(item);
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
const planksLeft = this._instancedMeshFromFloorPatternTransform(meshLeft.geometry, leftItems, material);
|
|
485
488
|
let planksRight;
|
|
486
489
|
if (meshRight) {
|
|
487
|
-
planksRight =
|
|
490
|
+
planksRight = this._instancedMeshFromFloorPatternTransform(meshRight.geometry, rightItems, material);
|
|
488
491
|
}
|
|
489
|
-
|
|
492
|
+
const customFloorWrapper = new Object3D();
|
|
493
|
+
customFloorWrapper.add(planksLeft);
|
|
494
|
+
if (planksRight)
|
|
495
|
+
customFloorWrapper.add(planksRight);
|
|
496
|
+
floor.floorObject = customFloorWrapper;
|
|
497
|
+
}
|
|
498
|
+
_instancedMeshFromFloorPatternTransform(geom, pattern, material) {
|
|
499
|
+
if (pattern.length <= 0)
|
|
500
|
+
return null;
|
|
501
|
+
const targetPlankMesh = new InstancedMesh(geom, material, pattern.length);
|
|
490
502
|
const dummy = new Object3D();
|
|
491
|
-
let
|
|
492
|
-
|
|
493
|
-
const item = items[i];
|
|
494
|
-
const targetPlankMesh = (item.isLeft) ? planksLeft : planksRight;
|
|
503
|
+
for (let i = 0; i < pattern.length; i++) {
|
|
504
|
+
const item = pattern[i];
|
|
495
505
|
const position = item.position;
|
|
496
506
|
const rotation = item.rotation;
|
|
497
507
|
dummy.position.set(position.x, position.y, position.z);
|
|
498
508
|
dummy.rotation.set(rotation.x, rotation.y, rotation.z);
|
|
499
509
|
dummy.updateMatrix();
|
|
500
|
-
targetPlankMesh.setMatrixAt(
|
|
501
|
-
if (planksRight) {
|
|
502
|
-
if (i !== 0 && (i % 2 !== 0)) {
|
|
503
|
-
matrixIndex++;
|
|
504
|
-
}
|
|
505
|
-
}
|
|
506
|
-
else {
|
|
507
|
-
matrixIndex++;
|
|
508
|
-
}
|
|
510
|
+
targetPlankMesh.setMatrixAt(i, dummy.matrix);
|
|
509
511
|
}
|
|
510
|
-
|
|
511
|
-
customFloorWrapper.add(planksLeft);
|
|
512
|
-
if (planksRight)
|
|
513
|
-
customFloorWrapper.add(planksRight);
|
|
514
|
-
floor.floorObject = customFloorWrapper;
|
|
515
|
-
// this._floorTileIntersectionService.toggleDebug();
|
|
516
|
-
floor.metadata.floorCountResult = this._floorTileIntersectionService.countTiles(floor.floorMesh, items, meshLeft.geometry);
|
|
512
|
+
return targetPlankMesh;
|
|
517
513
|
}
|
|
518
514
|
_generateFloorPatternInfo(item) {
|
|
519
515
|
this._generateSelectedInMetadata(item);
|
|
@@ -521,7 +517,8 @@ export class BuildFurnitureService {
|
|
|
521
517
|
meshIdLeft: null,
|
|
522
518
|
meshIdRight: null,
|
|
523
519
|
floorPattern: FloorPattern.NORMAL,
|
|
524
|
-
floorPatternDirection: FloorPatternDirection.LYING
|
|
520
|
+
floorPatternDirection: FloorPatternDirection.LYING,
|
|
521
|
+
heartLine: 0
|
|
525
522
|
};
|
|
526
523
|
const selected = item.metadata.selections;
|
|
527
524
|
const afmeting = selected.find(s => s.question.toLowerCase() === 'plank afmeting');
|
|
@@ -529,6 +526,13 @@ export class BuildFurnitureService {
|
|
|
529
526
|
afmetingString = afmetingString.substr(afmetingString.lastIndexOf(' ') + 1);
|
|
530
527
|
const legPatroonAnswer = selected.find(s => s.question.toLowerCase() === 'leg patroon').answer.toLowerCase();
|
|
531
528
|
let legPatroonString = '';
|
|
529
|
+
const hartlineType = selected.find(s => s.question.toLowerCase() === 'hartlijn');
|
|
530
|
+
if (hartlineType && hartlineType.answer.toLowerCase() === 'aangepast') {
|
|
531
|
+
const hartlineValue = selected.find(s => s.question.toLowerCase() === 'hartlijn_aangepast');
|
|
532
|
+
if (hartlineValue && hartlineValue.userInputValue !== undefined) {
|
|
533
|
+
info.heartLine = Number(hartlineValue.userInputValue);
|
|
534
|
+
}
|
|
535
|
+
}
|
|
532
536
|
switch (true) {
|
|
533
537
|
case legPatroonAnswer.indexOf('recht') !== -1:
|
|
534
538
|
legPatroonString = '90';
|
|
@@ -922,9 +926,7 @@ export class BuildFurnitureService {
|
|
|
922
926
|
this._startToBuildFromConfigurator(metadata);
|
|
923
927
|
}
|
|
924
928
|
else if (getAnswers) { // if not rebuild then check if we need to get answers
|
|
925
|
-
|
|
926
|
-
this._iOne.handleAnswersReceived(questionAndAnswers.answers);
|
|
927
|
-
this._appEventService.answerCountReceived.next(questionAndAnswers.answers.length);
|
|
929
|
+
yield this._iOne.getQuestionAndAnswersAsync(); // see if there is user input needed
|
|
928
930
|
}
|
|
929
931
|
});
|
|
930
932
|
}
|
|
@@ -1470,4 +1472,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
|
|
|
1470
1472
|
providedIn: 'root'
|
|
1471
1473
|
}]
|
|
1472
1474
|
}], ctorParameters: function () { return [{ type: i1.MatDialog }, { type: i2.HomedecoratorConnectorService }, { type: i3.ThreedselectorService }, { type: i4.CollisionManagerService }, { type: i5.MessageBusService }, { type: i6.HomedecoratorDictionaryService }, { type: i7.HudService }, { type: i8.SceneService }, { type: i9.CameraService }, { type: i10.SceneEventService }, { type: i11.HomedecoratorAppEventService }, { type: i12.PresetsService }, { type: i13.ItemService }, { type: i14.ElementService }, { type: i15.PermanentStoreService }, { type: i16.GoogleTagManagerService }, { type: i17.HomedecoratorSettingsService }, { type: i18.UtilsService }, { type: i19.VariationService }, { type: i20.AppStateService }, { type: i21.ErrorService }, { type: i22.ItemGroupService }, { type: i23.VariationCacheService }, { type: i24.ResizeService }, { type: i25.ViewModeService }, { type: i26.FloorService }, { type: i27.FloorPatternService }, { type: i28.FloorTileIntersectionService }]; } });
|
|
1473
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQtZnVybml0dXJlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2xpZW50L2FwcC9wbHVnaW5zL3RocmVlZHNlbGVjdG9yL3RocmVlZHNlbGVjdG9yL3NlcnZpY2UvYnVpbGQtZnVybml0dXJlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGlEQUFpRCxDQUFDO0FBQ3pFLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSwwREFBMEQsQ0FBQztBQUN0RixPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sMERBQTBELENBQUM7QUFFdEYsT0FBTyxFQUFDLFVBQVUsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUNwRCxPQUFPLEVBQUMsT0FBTyxFQUFlLE1BQU0sTUFBTSxDQUFDO0FBRTNDLE9BQU8sRUFBQyxLQUFLLEVBQUUsYUFBYSxFQUFRLFFBQVEsRUFBUyxPQUFPLEVBQUMsTUFBTSxPQUFPLENBQUM7QUFFM0UsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLHFEQUFxRCxDQUFDO0FBQzdFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDZEQUE2RCxDQUFDO0FBRzdGLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSx5Q0FBeUMsQ0FBQztBQUNwRSxPQUFPLEtBQUssS0FBSyxNQUFNLG1CQUFtQixDQUFDO0FBQzNDLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUN0RCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0seUNBQXlDLENBQUM7QUFDeEUsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQ2hELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUV6RCxPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSxpREFBaUQsQ0FBQztBQUN2RixPQUFP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TSxLQUFLLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO3dCQUNoRix3QkFBd0IsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO3FCQUMzRDtpQkFDRjthQUNGO1NBQ0Y7SUFDSCxDQUFDOzttSEE1L0NVLHFCQUFxQjt1SEFBckIscUJBQXFCLGNBRnBCLE1BQU07NEZBRVAscUJBQXFCO2tCQUhqQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGVjb05vZGV9IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvbW9kZWwvZGVjby1ub2RlJztcclxuaW1wb3J0IHtEZWNvTm9kZVR5cGV9IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvZW51bS9kZWNvLW5vZGUtdHlwZS5lbnVtJztcclxuaW1wb3J0IHtEZWNvTm9kZUtpbmR9IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvZW51bS9kZWNvLW5vZGUta2luZC5lbnVtJztcclxuaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvbW9kZWwvc2VsZWN0aW9uJztcclxuaW1wb3J0IHtJbmplY3RhYmxlLCBPbkRlc3Ryb3l9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1N1YmplY3QsIFN1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7QW5zd2VyfSBmcm9tICdAY29saWpuaXQvY29uZmlndXJhdG9yYXBpL2J1aWxkL21vZGVsL2Fuc3dlcic7XHJcbmltcG9ydCB7RXVsZXIsIEluc3RhbmNlZE1lc2gsIE1lc2gsIE9iamVjdDNELCBTY2VuZSwgVmVjdG9yM30gZnJvbSAndGhyZWUnO1xyXG5pbXBvcnQge01hdERpYWxvZ30gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHtOb2RlVHlwZX0gZnJvbSAnQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9lbnVtL25vZGUtdHlwZS5lbnVtJztcclxuaW1wb3J0IHtIZGVjb1Bvc2l0aW9uaW5nfSBmcm9tICdAY29saWpuaXQvY29uZmlndXJhdG9yYXBpL2J1aWxkL2VudW0vaGRlY28tcG9zaXRpb25pbmcuZW51bSc7XHJcbmltcG9ydCB7UXVlc3Rpb25BbmRBbnN3ZXJzfSBmcm9tICdAY29saWpuaXQvY29uZmlndXJhdG9yYXBpL2J1aWxkL21vZGVsL3F1ZXN0aW9uLWFuZC1hbnN3ZXJzJztcclxuaW1wb3J0IHtRdWVzdGlvbn0gZnJvbSAnQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9tb2RlbC9xdWVzdGlvbic7XHJcbmltcG9ydCB7ZW52aXJvbm1lbnR9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudCc7XHJcbmltcG9ydCAqIGFzIFRXRUVOIGZyb20gJ0B0d2VlbmpzL3R3ZWVuLmpzJztcclxuaW1wb3J0IHtGYWN0b3J5fSBmcm9tICcuLi8uLi8uLi9jb3JlM2QvaXRlbXMvZmFjdG9yeSc7XHJcbmltcG9ydCB7Q3VzdG9tRmxvb3JJdGVtfSBmcm9tICcuLi8uLi8uLi9jb3JlM2QvaXRlbXMvY3VzdG9tLWZsb29yLWl0ZW0nO1xyXG5pbXBvcnQge0l0ZW19IGZyb20gJy4uLy4uLy4uL2NvcmUzZC9pdGVtcy9pdGVtJztcclxuaW1wb3J0IHtJdGVtVHlwZX0gZnJvbSAnLi4vLi4vLi4vY29yZTNkL2l0ZW1zL2l0ZW0tdHlwZSc7XHJcbmltcG9ydCB7TWV0YWRhdGF9IGZyb20gJy4uLy4uLy4uL2NvcmUzZC9pdGVtcy9tZXRhZGF0YSc7XHJcbmltcG9ydCB7Q3VzdG9tRmxvb3JHcm91cFJlc3VsdH0gZnJvbSAnLi4vLi4vLi4vY29yZTNkL21vZGVsL2N1c3RvbS1mbG9vci1ncm91cC1yZXN1bHQnO1xyXG5pbXBvcnQge0Z1cm5pdHVyZUludGVncmF0aW9ufSBmcm9tICcuLi9tb2RlbC9mdXJuaXR1cmUtaW50ZWdyYXRpb24nO1xyXG5pbXBvcnQge1RocmVlZHNlbGVjdG9yU2VydmljZX0gZnJvbSAnLi90aHJlZWRzZWxlY3Rvci5zZXJ2aWNlJztcclxuaW1wb3J0IHtDb2xsaXNpb25NYW5hZ2VyU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZTNkL2NvbGxpc2lvbi1tYW5hZ2VyL2NvbGxpc2lvbi1tYW5hZ2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQge01lc3NhZ2VCdXNTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3NlcnZpY2UvbWVzc2FnZS1idXMuc2VydmljZSc7XHJcbmltcG9ydCB7SHVkU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZTNkL3NlcnZpY2UvaHVkLnNlcnZpY2UnO1xyXG5pbXBvcnQge1NjZW5lU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZTNkL3NlcnZpY2Uvc2NlbmUuc2VydmljZSc7XHJcbmltcG9ydCB7Q2FtZXJhU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZTNkL3NlcnZpY2UvY2FtZXJhLnNlcnZpY2UnO1xyXG5pbXBvcnQge1NjZW5lRXZlbnRTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlM2Qvc2VydmljZS9zY2VuZS1ldmVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHtQcmVzZXRzU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9zZXJ2aWNlL3ByZXNldHMuc2VydmljZSc7XHJcbmltcG9ydCB7SXRlbVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUzZC9zZXJ2aWNlL2l0ZW0uc2VydmljZSc7XHJcbmltcG9ydCB7RWxlbWVudFNlcnZpY2V9IGZyb20gJy4vZWxlbWVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHtQZXJtYW5lbnRTdG9yZVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvc2VydmljZS9wZXJtYW5lbnQtc3RvcmUuc2VydmljZSc7XHJcbmltcG9ydCB7R29vZ2xlVGFnTWFuYWdlclNlcnZpY2V9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2UvZ29vZ2xlLXRhZy1tYW5hZ2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQge1V0aWxzU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9zZXJ2aWNlL3V0aWxzLnNlcnZpY2UnO1xyXG5pbXBvcnQge1ZhcmlhdGlvblNlcnZpY2V9IGZyb20gJy4vdmFyaWF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQge0FwcFN0YXRlU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2FwcC1zdGF0ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtFcnJvclNlcnZpY2V9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvc2VydmljZS9lcnJvci5zZXJ2aWNlJztcclxuaW1wb3J0IHtJdGVtR3JvdXBTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlM2Qvc2VydmljZS9pdGVtLWdyb3VwLnNlcnZpY2UnO1xyXG5pbXBvcnQge1ZhcmlhdGlvbkNhY2hlU2VydmljZX0gZnJvbSAnLi92YXJpYXRpb24tY2FjaGUuc2VydmljZSc7XHJcbmltcG9ydCB7UmVzaXplU2VydmljZX0gZnJvbSAnLi9yZXNpemUuc2VydmljZSc7XHJcbmltcG9ydCB7Vmlld01vZGVTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3NlcnZpY2Uvdmlldy1tb2RlLnNlcnZpY2UnO1xyXG5pbXBvcnQge01lc3NhZ2VUeXBlfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL2VudW0vbWVzc2FnZS10eXBlLmVudW0nO1xyXG5pbXBvcnQge1NjZW5lM0RVdGlsfSBmcm9tICcuLi91dGlscy9zY2VuZS0zZC51dGlscyc7XHJcbmltcG9ydCB7RXJyb3JNZXNzYWdlfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL21vZGVsL2Vycm9yLW1lc3NhZ2UnO1xyXG5pbXBvcnQge1ZpZXdNb2RlfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL2VudW0vdmlldy1tb2RlLmVudW0nO1xyXG5pbXBvcnQge1Jlc3VsdFR5cGV9IGZyb20gJy4uLy4uLy4uL2NvcmUzZC9lbnVtL3Jlc3VsdC10eXBlLmVudW0nO1xyXG5pbXBvcnQge2lzTmlsbH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS91dGlscy9mdW5jdGlvbi9pcy1uaWxsLmZ1bmN0aW9uJztcclxuaW1wb3J0IHtVdGlsc30gZnJvbSAnLi4vLi4vLi4vY29yZTNkL2NvcmUvdXRpbHMnO1xyXG5pbXBvcnQge01hdGVyaWFsVXRpbHN9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvdXRpbHMvbWF0ZXJpYWwudXRpbHMnO1xyXG5pbXBvcnQge0Zsb29yUGlufSBmcm9tICcuLi8uLi8uLi9jb3JlM2QvaXRlbXMvZmxvb3ItcGluJztcclxuaW1wb3J0IHtXYWxsUGlufSBmcm9tICcuLi8uLi8uLi9jb3JlM2QvaXRlbXMvd2FsbC1waW4nO1xyXG5pbXBvcnQge0Z1cm5pdHVyZVBhcnRJbnRlZ3JhdGlvbn0gZnJvbSAnLi4vbW9kZWwvZnVybml0dXJlLXBhcnQtaW50ZWdyYXRpb24nO1xyXG5pbXBvcnQge0N1c3RvbU1lc2gsIEN1c3RvbU9iamVjdDNEfSBmcm9tICcuLi8uLi8uLi9jb3JlM2QvaXRlbXMvY3VzdG9tLW9iamVjdHMnO1xyXG5pbXBvcnQge0Z1cm5pdHVyZVBhcnRWYXJpYXRpb259IGZyb20gJy4uL21vZGVsL2Z1cm5pdHVyZS1wYXJ0LXZhcmlhdGlvbic7XHJcbmltcG9ydCB7RnVybml0dXJlQ29ubmVjdGVkUGFydEludGVncmF0aW9ufSBmcm9tICcuLi9tb2RlbC9mdXJuaXR1cmUtY29ubmVjdGVkLXBhcnQtaW50ZWdyYXRpb24nO1xyXG5pbXBvcnQge0dvb2dsZVRhZ01hbmFnZXJFdmVudH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9lbnVtL2dvb2dsZS10YWctbWFuYWdlci1ldmVudC5lbnVtJztcclxuaW1wb3J0IHtDaGFuZ2VzSW50ZXJmYWNlfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL2ludGVyZmFjZS9jaGFuZ2VzLmludGVyZmFjZSc7XHJcbmltcG9ydCB7Q3VzdG9tV2FsbEZsb29ySXRlbX0gZnJvbSAnLi4vLi4vLi4vY29yZTNkL2l0ZW1zL2N1c3RvbS13YWxsLWZsb29yLWl0ZW0nO1xyXG5pbXBvcnQge09iamVjdFV0aWxzfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3V0aWxzL29iamVjdC51dGlscyc7XHJcbmltcG9ydCB7SW5mb0RpYWxvZ0NvbXBvbmVudH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL2luZm8tZGlhbG9nL2luZm8tZGlhbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7SW5mb0RpYWxvZ0RhdGF9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvaW50ZXJmYWNlL2luZm8tZGlhbG9nLWRhdGEuaW50ZXJmYWNlJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9yQ29ubmVjdG9yU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2hvbWVkZWNvcmF0b3ItY29ubmVjdG9yLnNlcnZpY2UnO1xyXG5pbXBvcnQge0hvbWVkZWNvcmF0b3JEaWN0aW9uYXJ5U2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2hvbWVkZWNvcmF0b3ItZGljdGlvbmFyeS5zZXJ2aWNlJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9yQXBwRXZlbnRTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3NlcnZpY2UvaG9tZWRlY29yYXRvci1hcHAtZXZlbnQuc2VydmljZSc7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvclNldHRpbmdzU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2hvbWVkZWNvcmF0b3Itc2V0dGluZ3Muc2VydmljZSc7XHJcbmltcG9ydCB7Rmxvb3JTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlM2Qvc2VydmljZS9mbG9vci5zZXJ2aWNlJztcclxuaW1wb3J0IHtGbG9vclBsYW5lSXRlbX0gZnJvbSAnLi4vLi4vLi4vY29yZTNkL2l0ZW1zL2Zsb29yLXBsYW5lLWl0ZW0nO1xyXG5pbXBvcnQge0Zsb29yUGF0dGVybiwgRmxvb3JQYXR0ZXJuRGlyZWN0aW9uLCBGbG9vclBhdHRlcm5TZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlM2Qvc2VydmljZS9mbG9vci1wYXR0ZXJuLnNlcnZpY2UnO1xyXG5pbXBvcnQge0Zsb29yVGlsZUludGVyc2VjdGlvblNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUzZC9zZXJ2aWNlL2Zsb29yLXRpbGUtaW50ZXJzZWN0aW9uLnNlcnZpY2UnO1xyXG5cclxuY29uc3QgZGVmYXVsdFBvc2l0aW9uID0gbmV3IFZlY3RvcjMoNCwgMCwgMSk7XHJcbmNvbnN0IGRlZmF1bHRSb3RhdGlvbiA9IG5ldyBFdWxlcigwLCBNYXRoLlBJLCAwKTtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29uZmlndXJpbmdNb2RlQ2hhbmdlSW50ZXJmYWNlIHtcclxuICBtZXRhZGF0YTogTWV0YWRhdGE7XHJcbiAgY29uZmlndXJpbmc6IGJvb2xlYW47XHJcbn1cclxuXHJcbmludGVyZmFjZSBGbG9vclBhdHRlcm5JbmZvIHtcclxuICBtZXNoSWRMZWZ0OiBzdHJpbmc7XHJcbiAgbWVzaElkUmlnaHQ6IHN0cmluZztcclxuICBmbG9vclBhdHRlcm46IEZsb29yUGF0dGVybjtcclxuICBmbG9vclBhdHRlcm5EaXJlY3Rpb246IEZsb29yUGF0dGVybkRpcmVjdGlvbjtcclxufVxyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQnVpbGRGdXJuaXR1cmVTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuICAvLyBwdWJsaWMgZ2V0IGRlY29zKCk6IE1hcDxzdHJpbmcsIERlY29Ob2RlPiB7XHJcbiAgLy8gICByZXR1cm4gdGhpcy5fZ2V0RGVjb3NGcm9tSW5zdGFuY2UoKTtcclxuICAvLyB9XHJcbiAgcHVibGljIGJhc2VFbGVtZW50Tm9kZUlkOiBudW1iZXI7XHJcblxyXG4gIHB1YmxpYyBhcnRpY2xlQXNzZXRQYXRoOiBzdHJpbmc7XHJcblxyXG4gIHB1YmxpYyB0b2dnbGVTZWxlY3RlZEVsZW1lbnQ6IFN1YmplY3Q8TWVzaD4gPSBuZXcgU3ViamVjdDxNZXNoPigpO1xyXG4gIHB1YmxpYyBjb25maWd1cmVNb2RlQ2hhbmdlZDogU3ViamVjdDxDb25maWd1cmluZ01vZGVDaGFuZ2VJbnRlcmZhY2U+ID0gbmV3IFN1YmplY3Q8eyBtZXRhZGF0YToge30sIGNvbmZpZ3VyaW5nOiBmYWxzZSB9PigpO1xyXG4gIHB1YmxpYyBidWlsZEZpbmlzaGVkOiBTdWJqZWN0PEN1c3RvbUZsb29yR3JvdXBSZXN1bHQ+ID0gbmV3IFN1YmplY3Q8Q3VzdG9tRmxvb3JHcm91cFJlc3VsdD4oKTtcclxuICBwdWJsaWMgYW5zd2VyU2VsZWN0ZWQ6IFN1YmplY3Q8Q3VzdG9tRmxvb3JHcm91cFJlc3VsdD4gPSBuZXcgU3ViamVjdDxDdXN0b21GbG9vckdyb3VwUmVzdWx0PigpO1xyXG4gIHB1YmxpYyBhclBsYWNlbWVudFVwZGF0ZTogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XHJcbiAgcHVibGljIHNob3dFbGVtZW50VG9vbGJhcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwdWJsaWMgc3RhcnRQb3NpdGlvbjogVmVjdG9yMztcclxuICBwdWJsaWMgZnVsbDNET2JqZWN0VG9Vc2U6IE9iamVjdDNEO1xyXG5cclxuICBwdWJsaWMgaXNNb3VzZU92ZXJPYmplY3Q6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLy8gdXNlZCBmb3IgZWxlbWVudHMsIHRvIHBsYWNlIG9iamVjdHMgb25cclxuICBwdWJsaWMgYWN0aXZlQ29ubmVjdG9yOiBhbnk7XHJcblxyXG4gIHB1YmxpYyBnZXQgdXNlTm9kZUlkVG9MaW5rKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3VzZU5vZGVJZFRvTGluaztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY3VycmVudEN1c3RvbUZsb29yR3JvdXAoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEN1c3RvbUZsb29yR3JvdXA7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYWN0aXZlUXVlc3Rpb246IFF1ZXN0aW9uO1xyXG4gIHB1YmxpYyBhY3RpdmVBbnN3ZXJzOiBBbnN3ZXJbXSA9IFtdO1xyXG5cclxuICBwdWJsaWMgZ2V0IHN0YW5kQWxvbmUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3RhbmRBbG9uZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgc3RhbmRBbG9uZSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fc3RhbmRBbG9uZSA9IHZhbHVlO1xyXG4gICAgaWYgKHRoaXMuX3N0YW5kQWxvbmUpIHtcclxuICAgICAgdGhpcy5fcHJlcGFyZVN0YW5kQWxvbmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgc2VsZWN0aW9ucygpOiBTZWxlY3Rpb25bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5faU9uZS5zZWxlY3Rpb25zO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YW5kQWxvbmVGaXJzdEJ1aWxkUmVhZHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBnZXQgc2NlbmUoKTogU2NlbmUge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NjZW5lU2VydmljZS5nZXRTY2VuZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdXNlTm9kZUlkVG9MaW5rOiBib29sZWFuID0gdHJ1ZTtcclxuICBwcml2YXRlIF9zdGFuZEFsb25lOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHByaXZhdGUgX2FjdGl2ZUNoaWxkRWxlbWVudDogTWVzaDtcclxuXHJcbiAgcHJpdmF0ZSBfb3JpZ2luYWxFbGVtZW50UG9zaXRpb246IFZlY3RvcjMgPSBuZXcgVmVjdG9yMygpO1xyXG4gIHByaXZhdGUgX2ludGVncmF0aW9uRW5hYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX3BsYWNlZEFkanVzdGFibGVzOiBhbnlbXSA9IFtdO1xyXG4gIHByaXZhdGUgX3BsYWNlZEFkZGFibGVzOiBhbnlbXSA9IFtdO1xyXG4gIHByaXZhdGUgX2FkanVzdGFibGVzOiBhbnlbXSA9IFtdO1xyXG4gIHByaXZhdGUgX2FkZGFibGVzOiBhbnlbXSA9IFtdO1xyXG4gIHByaXZhdGUgX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwOiBJdGVtO1xyXG4gIHByaXZhdGUgX2dlbmVyaWNTZWxlY3Rpb24gPSBmYWxzZTtcclxuICBwcml2YXRlIF9zdWJzOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG4gIHByaXZhdGUgX2Fuc3dlclNlbGVjdGVkOiBBbnN3ZXJbXSA9IFtdO1xyXG4gIHByaXZhdGUgX2Z1cm5pdHVyZUNvbmZpZ3VyYXRpb25zOiBGdXJuaXR1cmVJbnRlZ3JhdGlvbltdID0gW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBfZGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICBwcml2YXRlIF9pT25lOiBIb21lZGVjb3JhdG9yQ29ubmVjdG9yU2VydmljZSxcclxuICAgIHByaXZhdGUgX3RocmVlZFNlbGVjdG9yU2VydmljZTogVGhyZWVkc2VsZWN0b3JTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfY29sbGlzaW9uTWFuYWdlcjogQ29sbGlzaW9uTWFuYWdlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9tZXNzYWdlQnVzOiBNZXNzYWdlQnVzU2VydmljZSxcclxuICAgIHByaXZhdGUgX2RpY3Rpb25hcnlTZXJ2aWNlOiBIb21lZGVjb3JhdG9yRGljdGlvbmFyeVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9odWRTZXJ2aWNlOiBIdWRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfc2NlbmVTZXJ2aWNlOiBTY2VuZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9jYW1lcmFTZXJ2aWNlOiBDYW1lcmFTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfc2NlbmVFdmVudFNlcnZpY2U6IFNjZW5lRXZlbnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfYXBwRXZlbnRTZXJ2aWNlOiBIb21lZGVjb3JhdG9yQXBwRXZlbnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfcHJlc2V0U2VydmljZTogUHJlc2V0c1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9pdGVtU2VydmljZTogSXRlbVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9lbGVtZW50U2VydmljZTogRWxlbWVudFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9wZXJtYW5lbnRTdG9yZVNlcnZpY2U6IFBlcm1hbmVudFN0b3JlU2VydmljZSxcclxuICAgIHByaXZhdGUgX2dvb2dsZVRhZ01hbmFnZXI6IEdvb2dsZVRhZ01hbmFnZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfc2V0dGluZ3NTZXJ2aWNlOiBIb21lZGVjb3JhdG9yU2V0dGluZ3NTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfdXRpbHNTZXJ2aWNlOiBVdGlsc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF92YXJpYXRpb25TZXJ2aWNlOiBWYXJpYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfYXBwU3RhdGVTZXJ2aWNlOiBBcHBTdGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9lcnJvclNlcnZpY2U6IEVycm9yU2VydmljZSxcclxuICAgIHByaXZhdGUgX2l0ZW1Hcm91cFNlcnZpY2U6IEl0ZW1Hcm91cFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF92YXJpYXRpb25DYWNoZVNlcnZpY2U6IFZhcmlhdGlvbkNhY2hlU2VydmljZSxcclxuICAgIHByaXZhdGUgX3Jlc2l6ZVNlcnZpY2U6IFJlc2l6ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF92aWV3TW9kZVNlcnZpY2U6IFZpZXdNb2RlU2VydmljZSxcclxuICAgIHByaXZhdGUgX2Zsb29yU2VydmljZTogRmxvb3JTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZmxvb3JQYXR0ZXJuU2VydmljZTogRmxvb3JQYXR0ZXJuU2VydmljZSxcclxuICAgIHByaXZhdGUgX2Zsb29yVGlsZUludGVyc2VjdGlvblNlcnZpY2U6IEZsb29yVGlsZUludGVyc2VjdGlvblNlcnZpY2VcclxuICApIHtcclxuICAgIHRoaXMuX3N1YnMucHVzaChcclxuICAgICAgdGhpcy5faU9uZS5jb25uZWN0aW9uUmVzZXQuc3Vic2NyaWJlKCgpID0+IHRoaXMuX2hhbmRsZUNvbm5lY3Rpb25SZXNldCgpKSxcclxuICAgICAgdGhpcy5fbWVzc2FnZUJ1cy5zdWJzY3JpYmUoTWVzc2FnZVR5cGUuSXRlbVJlbW92ZWQsIChyZXN1bHQ6IHsgaXRlbTogYW55LCBhZGRlZFRvR3JvdXA6IGJvb2xlYW4gfSkgPT5cclxuICAgICAgICB0aGlzLl9oYW5kbGVJdGVtUmVtb3ZlZEZyb21TY2VuZShyZXN1bHQpKSxcclxuICAgICAgdGhpcy5fbWVzc2FnZUJ1cy5zdWJzY3JpYmUoTWVzc2FnZVR5cGUuVW5kbywgKCkgPT4gdGhpcy5fc3RhcnRXaXRoTmV3KGZhbHNlKSksXHJcbiAgICAgIHRoaXMuX21lc3NhZ2VCdXMuc3Vic2NyaWJlKE1lc3NhZ2VUeXBlLlJlZG8sICgpID0+IHRoaXMuX3N0YXJ0V2l0aE5ldyhmYWxzZSkpLFxyXG4gICAgICB0aGlzLl9tZXNzYWdlQnVzLnN1YnNjcmliZShNZXNzYWdlVHlwZS5TdGFydFdpdGhFbXB0eVJvb20sICgpID0+IHRoaXMuX3N0YXJ0V2l0aE5ldygpKSxcclxuICAgICAgdGhpcy5fbWVzc2FnZUJ1cy5zdWJzY3JpYmUoTWVzc2FnZVR5cGUuU3RhcnRXaXRoUHJlc2V0LCAoKSA9PiB0aGlzLl9zdGFydFdpdGhOZXcoKSksXHJcbiAgICAgIHRoaXMuX21lc3NhZ2VCdXMuc3Vic2NyaWJlKE1lc3NhZ2VUeXBlLkxvYWRSb29tRnJvbVByZXNldCwgKCkgPT4gdGhpcy5fc3RhcnRXaXRoTmV3KCkpLFxyXG4gICAgICB0aGlzLl9tZXNzYWdlQnVzLnN1YnNjcmliZShNZXNzYWdlVHlwZS5Mb2FkUm9vbUZyb21DbG91ZCwgKCkgPT4gdGhpcy5fc3RhcnRXaXRoTmV3KCkpLFxyXG4gICAgICB0aGlzLl9tZXNzYWdlQnVzLnN1YnNjcmliZShNZXNzYWdlVHlwZS5OZXdSb29tLCAoKSA9PiB0aGlzLl9zdGFydFdpdGhOZXcoKSksXHJcbiAgICAgIHRoaXMuX21lc3NhZ2VCdXMuc3Vic2NyaWJlKE1lc3NhZ2VUeXBlLlJlc2V0Um9vbXBsYW4sICgpID0+IHRoaXMuX3N0YXJ0V2l0aE5ldygpKSxcclxuICAgICAgdGhpcy5fbWVzc2FnZUJ1cy5zdWJzY3JpYmUoTWVzc2FnZVR5cGUuTG9hZFNjYWxlZERpYWdyYW0sICgpID0+IHRoaXMuX3N0YXJ0V2l0aE5ldygpKSxcclxuICAgICAgdGhpcy5fYXBwRXZlbnRTZXJ2aWNlLmVuYWJsZUludGVncmF0aW9uLnN1YnNjcmliZSgoZW5hYmxlZDogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgIGlmIChlbmFibGVkKSB7XHJcbiAgICAgICAgICB0aGlzLl9lbmFibGVJbnRlZ3JhdGlvbigpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICAgIHRoaXMuX3ByZXNldFNlcnZpY2UuYmVmb3JlTG9hZC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuX2NsZWFudXBCZWZvcmVQcmVzZXRMb2FkKCk7XHJcbiAgICAgICAgdGhpcy5fc3RhcnRXaXRoTmV3KCk7XHJcbiAgICAgIH0pLFxyXG4gICAgICB0aGlzLl9wcmVzZXRTZXJ2aWNlLmFmdGVyTG9hZC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5faGFuZGxlQWZ0ZXJQcmVzZXRMb2FkKCkpLFxyXG4gICAgICB0aGlzLl9wZXJtYW5lbnRTdG9yZVNlcnZpY2UuY29kZVNldC5zdWJzY3JpYmUoKGNvZGU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGlmIChjb2RlKSB7XHJcbiAgICAgICAgICB0aGlzLl9zZXRDb2RlT25GdXJuaXR1cmVDb25maWd1cmF0aW9uKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc3Vicy5mb3JFYWNoKHMgPT4gcy51bnN1YnNjcmliZSgpKTtcclxuICAgIHRoaXMuX2NsZWFudXAoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBidWlsZChyZXN1bHQ6IEN1c3RvbUZsb29yR3JvdXBSZXN1bHQpOiBQcm9taXNlPEN1c3RvbUZsb29yR3JvdXBSZXN1bHQ+IHtcclxuICAgIHRoaXMuX2VsZW1lbnRTZXJ2aWNlLnJlbW92ZUVsZW1lbnQocmVzdWx0Lmluc3RhbmNlSWQpO1xyXG4gICAgaWYgKHJlc3VsdCAmJiByZXN1bHQubWV0YURhdGEgJiYgcmVzdWx0Lm1ldGFEYXRhLml0ZW1UeXBlID09PSBJdGVtVHlwZS5GbG9vckRlY29yYXRpb24pIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2J1aWxkRmxvb3IocmVzdWx0KTtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5mdWxsM0RPYmplY3RUb1VzZSkgeyAvLyB0aGVyZSdzIG5vIDNkIG1vZGVsIHNvIGdldCBvdXRcclxuICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIGNvbnN0IGFkanVzdGFibGVzOiBTZWxlY3Rpb25bXSA9IHRoaXMuX2dldEFkanVzdGFibGVzKCk7XHJcbiAgICBpZiAoYWRqdXN0YWJsZXMgJiYgYWRqdXN0YWJsZXMubGVuZ3RoID09PSAwKSB7IC8vIGNoZWNrIGlmIGFydGljbGUgaGFzIGEgZ2FtZU9iamVjdFxyXG4gICAgICBpZiAodGhpcy5zZWxlY3Rpb25zWzBdLm5vZGVUeXBlID09PSBOb2RlVHlwZS5BcnRpY2xlICYmIHRoaXMuc2VsZWN0aW9uc1swXS5nYW1lT2JqZWN0KSB7XHJcbiAgICAgICAgYWRqdXN0YWJsZXMucHVzaCh0aGlzLnNlbGVjdGlvbnNbMF0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyB0aGlzLl9jdXJyZW50Q3VzdG9tRmxvb3JHcm91cCA9IHRoaXMuX2NyZWF0ZUNvbmZpZ3VyYWJsZUl0ZW0ocmVzdWx0Lmluc3RhbmNlSWQsIHJlc3VsdC5tZXRhRGF0YSk7XHJcbiAgICBjb25zdCBpdGVtOiBJdGVtID0gdGhpcy5fY3JlYXRlQ29uZmlndXJhYmxlSXRlbShyZXN1bHQuaW5zdGFuY2VJZCwgcmVzdWx0Lm1ldGFEYXRhKTtcclxuICAgIGlmIChhZGp1c3RhYmxlcyAmJiBhZGp1c3RhYmxlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGxldCBjb25uZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbjogbnVtYmVyID0gYWRqdXN0YWJsZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICBjb25zdCBhZGp1c3RhYmxlOiBPYmplY3QzRCA9IHRoaXMuX2NyZWF0ZUFkanVzdGFibGUoaXRlbSwgYWRqdXN0YWJsZXNbaV0pO1xyXG4gICAgICAgIGlmIChhZGp1c3RhYmxlKSB7XHJcbiAgICAgICAgICBmb3IgKGxldCBpaSA9IHRoaXMuX3BsYWNlZEFkanVzdGFibGVzLmxlbmd0aCAtIDE7IGlpID49IDA7IGlpLS0pIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2lzTW92ZWFibGVPYmplY3QoYWRqdXN0YWJsZSkpIHsgLy8gdnJpamUgdmVycGxhYXRzaW5nIG1vZ2VsaWprLCBjb25uZWN0ZW4gYWFuIG9wZ2VzbGFnZW4gY29ubmVjdG9yXHJcbiAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uOiBTZWxlY3Rpb24gPSBhZGp1c3RhYmxlLnVzZXJEYXRhLnNlbGVjdGlvbjtcclxuICAgICAgICAgICAgICB0aGlzLl9hZGRFbGVtZW50T25Db25uZWN0b3IoXHJcbiAgICAgICAgICAgICAgICBpdGVtLCBhZGp1c3RhYmxlLCBzZWxlY3Rpb24uZGVjb0Nvbm5lY3Rpb24gPyBzZWxlY3Rpb24uZGVjb0Nvbm5lY3Rpb24gOiB0aGlzLmFjdGl2ZUNvbm5lY3RvciwgdGhpcy5iYXNlRWxlbWVudE5vZGVJZCk7XHJcbiAgICAgICAgICAgICAgYWRqdXN0YWJsZS52aXNpYmxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICBjb25uZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGlmIChTY2VuZTNEVXRpbC5UcnlTZWxlY3RvckNvbm5lY3Rpb24odGhpcy5zY2VuZSxcclxuICAgICAgICAgICAgICAgIGl0ZW0sIHRoaXMuX3BsYWNlZEFkanVzdGFibGVzW2lpXSwgYWRqdXN0YWJsZSwgaSA9PT0gMSkpIHtcclxuICAgICAgICAgICAgICAgIGFkanVzdGFibGUudmlzaWJsZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBjb25uZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbm5lY3RlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWNvbm5lY3RlZCAmJiB0aGlzLl9wbGFjZWRBZGp1c3RhYmxlcy5sZW5ndGggPiAxICYmICFlbnZpcm9ubWVudC5wcm9kdWN0aW9uKSB7XHJcbiAgICAgICAgICByZXN1bHQuZXJyb3JNZXNzYWdlcy5wdXNoKG5ldyBFcnJvck1lc3NhZ2UoXHJcbiAgICAgICAgICAgIGBObyBjb25uZWN0aW9uIGZvdW5kIGZvcjogJHthZGp1c3RhYmxlID8gYWRqdXN0YWJsZS5uYW1lIDogYWRqdXN0YWJsZXNbaV0uZGVjb05vZGUuZ2FtZU9iamVjdE5hbWV9YCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9wbGFjZUFkZGFibGVzKGl0ZW0pO1xyXG4gICAgICBhd2FpdCB0aGlzLl9sb2FkVmFyaWF0aW9ucyhpdGVtLCByZXN1bHQubWV0YURhdGEuaXRlbUlkKTtcclxuICAgICAgdGhpcy5fY3VycmVudEN1c3RvbUZsb29yR3JvdXAgPSBhd2FpdCB0aGlzLl9yZXBsYWNlQ3VycmVudEl0ZW0oaXRlbSwgcmVzdWx0Lm1ldGFEYXRhLCB0cnVlKTtcclxuICAgICAgaWYgKHRoaXMuX3ZpZXdNb2RlU2VydmljZS52aWV3TW9kZSAhPT0gVmlld01vZGUuSW5QaG90b1ZpZXcpIHtcclxuICAgICAgICB0aGlzLl9jdXJyZW50Q3VzdG9tRmxvb3JHcm91cC51cGRhdGVQaXZvdCgpO1xyXG4gICAgICB9XHJcbiAgICAgIHJlc3VsdC5mdXJuaXR1cmUgPSB0aGlzLl9jdXJyZW50Q3VzdG9tRmxvb3JHcm91cDtcclxuICAgICAgcmVzdWx0Lmluc3RhbmNlSWQgPSByZXN1bHQubWV0YURhdGEuaXRlbUlkO1xyXG4gICAgICB0aGlzLmFyUGxhY2VtZW50VXBkYXRlLm5leHQodHJ1ZSk7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUludGVncmF0aW9uKHJlc3VsdC5tZXRhRGF0YS5pdGVtSWQsIHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50Q3VzdG9tRmxvb3JHcm91cC5pdGVtR3JvdXApIHtcclxuICAgICAgICB0aGlzLl9pdGVtR3JvdXBTZXJ2aWNlLnJlYXR0YWNoVG9JdGVtR3JvdXAoXHJcbiAgICAgICAgICB0aGlzLl9jdXJyZW50Q3VzdG9tRmxvb3JHcm91cCxcclxuICAgICAgICAgIHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwLml0ZW1Hcm91cCxcclxuICAgICAgICAgIHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwLnBvc2l0aW9uKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9hbnN3ZXJTZWxlY3RlZC5sZW5ndGggPSAwO1xyXG5cclxuICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwLmNoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHJlc3VsdC5yZXN1bHRUeXBlID0gUmVzdWx0VHlwZS5HYW1lb2JqZWN0TmFtZU1pc21hdGNoSW5Tb3VyY2U7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlc3VsdCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5faHVkU2VydmljZS51cGRhdGVTZWxlY3RlZEl0ZW1IdWQoKTtcclxuICAgICAgdGhpcy5idWlsZEZpbmlzaGVkLm5leHQocmVzdWx0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJlc3VsdC5lcnJvck1lc3NhZ2VzLnB1c2gobmV3IEVycm9yTWVzc2FnZSgnTk9fQURKVVNUQUJMRVMnLCAnTk9fQURKVVNUQUJMRVNfSU5GTycpKTtcclxuICAgICAgcmVzdWx0LnJlc3VsdFR5cGUgPSBSZXN1bHRUeXBlLk5vQWRqdXN0YWJsZXM7XHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZXN1bHQpO1xyXG4gICAgfVxyXG4gICAgaWYgKHJlc3VsdC5yZXN1bHRUeXBlID09PSBSZXN1bHRUeXBlLk5vU2VsZWN0aW9ucykge1xyXG4gICAgICByZXN1bHQucmVzdWx0VHlwZSA9IFJlc3VsdFR5cGUuQ29uZmlndXJhdGlvbkZpeGVkO1xyXG4gICAgfSBlbHNlIGlmIChyZXN1bHQucmVzdWx0VHlwZSAhPT0gUmVzdWx0VHlwZS5PYnNvbGV0ZSAmJiByZXN1bHQucmVzdWx0VHlwZSAhPT0gUmVzdWx0VHlwZS5Db25maWd1cmF0aW9uRml4ZWQpIHsgLy8gZG9uJ3Qgb3ZlcnJpZGUgdGhlc2VcclxuICAgICAgcmVzdWx0LnJlc3VsdFR5cGUgPSBSZXN1bHRUeXBlLkxvYWRlZDtcclxuICAgIH1cclxuICAgIHRoaXMuX2FwcEV2ZW50U2VydmljZS5yZWFkeVRvUmVuZGVyLm5leHQodGhpcy5zdGFuZEFsb25lRmlyc3RCdWlsZFJlYWR5KTtcclxuICAgIHRoaXMuX3NjZW5lU2VydmljZS51cGRhdGVQYXRoVHJhY2VyKCk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHN0YXJ0VG9CdWlsZChcclxuICAgIHJlc3VsdD86IEN1c3RvbUZsb29yR3JvdXBSZXN1bHQsXHJcbiAgICBtZXRhZGF0YT86IE1ldGFkYXRhLFxyXG4gICAgc2hvdWxkQ29weUluc3RhbmNlOiBib29sZWFuID0gZmFsc2UsXHJcbiAgICBsb29zZU9yaWdpbmFsQ29uZmlndXJhdGlvbjogYm9vbGVhbiA9IHRydWUsXHJcbiAgICBzdGFuZEFsb25lPzogYm9vbGVhbixcclxuICAgIGZpcnN0QnVpbGQ6IGJvb2xlYW4gPSBmYWxzZVxyXG4gICk6IFByb21pc2U8Q3VzdG9tRmxvb3JHcm91cFJlc3VsdD4ge1xyXG4gICAgaWYgKCFpc05pbGwoc3RhbmRBbG9uZSkpIHtcclxuICAgICAgdGhpcy5zdGFuZEFsb25lID0gc3RhbmRBbG9uZTtcclxuICAgIH1cclxuICAgIGlmIChpc05pbGwocmVzdWx0KSkge1xyXG4gICAgICByZXN1bHQgPSBuZXcgQ3VzdG9tRmxvb3JHcm91cFJlc3VsdChcclxuICAgICAgICBtZXRhZGF0YSA/IG1ldGFkYXRhLml0ZW1JZGVudGlmaWVyIDogJycsXHJcbiAgICAgICAgbWV0YWRhdGEgPyBtZXRhZGF0YS5pdGVtTmFtZSA6ICd1bmtub3duJyk7XHJcbiAgICAgIHJlc3VsdC5tZXRhRGF0YSA9IG1ldGFkYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChzaG91bGRDb3B5SW5zdGFuY2UpIHtcclxuICAgICAgY29uc3Qgb3JpZ2luYWxJbnN0YW5jZUlkOiBzdHJpbmcgPSByZXN1bHQubWV0YURhdGEuaXRlbUlkO1xyXG4gICAgICBpZiAobG9vc2VPcmlnaW5hbENvbmZpZ3VyYXRpb24pIHtcclxuICAgICAgICByZXN1bHQubWV0YURhdGEuaXRlbUlkID0gYXdhaXQgdGhpcy5faU9uZS5jb3B5SW5zdGFuY2VBbmRMb3NlT3JpZ2luYWxDb25maWd1cmF0aW9uKG9yaWdpbmFsSW5zdGFuY2VJZCwgcmVzdWx0KVxyXG4gICAgICAgICAgLmNhdGNoKChlKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbEluc3RhbmNlSWQ7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXN1bHQubWV0YURhdGEuaXRlbUlkID0gYXdhaXQgdGhpcy5faU9uZS5jb3B5SW5zdGFuY2VBbmRTYXZlT3JpZ2luYWxDb25maWd1cmF0aW9uKG9yaWdpbmFsSW5zdGFuY2VJZCwgcmVzdWx0KVxyXG4gICAgICAgICAgLmNhdGNoKChlKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbEluc3RhbmNlSWQ7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChyZXN1bHQucmVzdWx0VHlwZSAhPT0gUmVzdWx0VHlwZS5BcnRpY2xlTm90Rm91bmQpIHtcclxuICAgICAgYXdhaXQgdGhpcy5fc2V0SW5zdGFuY2VUb0NvbmZpZ3VyZShyZXN1bHQpXHJcbiAgICAgICAgLmNhdGNoKChlKSA9PiBQcm9taXNlLnJlamVjdChyZXN1bHQpKTtcclxuICAgIH1cclxuICAgIHJlc3VsdC5pbnN0YW5jZUlkID0gcmVzdWx0Lm1ldGFEYXRhLml0ZW1JZDtcclxuICAgIHRoaXMuc3RhcnRQb3NpdGlvbiA9IHJlc3VsdC5tZXRhRGF0YS5wb3NpdGlvbiA/IHJlc3VsdC5tZXRhRGF0YS5wb3NpdGlvbi5jbG9uZSgpIDogbmV3IFZlY3RvcjMoKTtcclxuXHJcbiAgICBjb25zdCBxdWVzdGlvbkFuZEFuc3dlcnM6IFF1ZXN0aW9uQW5kQW5zd2VycyA9IGF3YWl0IHRoaXMuX2lPbmUuZ2V0UXVlc3Rpb25BbmRBbnN3ZXJzQXN5bmMoKTsgLy8gc2VlIGlmIHRoZXJlIGlzIHVzZXIgaW5wdXQgbmVlZGVkXHJcbiAgICBpZiAocXVlc3Rpb25BbmRBbnN3ZXJzLnF1ZXN0aW9uICYmICFxdWVzdGlvbkFuZEFuc3dlcnMucXVlc3Rpb24uZ3JvdXBlZCkge1xyXG4gICAgICB0aGlzLl9pT25lLmhhbmRsZUFuc3dlcnNSZWNlaXZlZChxdWVzdGlvbkFuZEFuc3dlcnMuYW5zd2Vycyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9hcHBFdmVudFNlcnZpY2UuYW5zd2VyQ291bnRSZWNlaXZlZC5uZXh0KHF1ZXN0aW9uQW5kQW5zd2Vycy5hbnN3ZXJzLmxlbmd0aCk7XHJcbiAgICBpZiAocXVlc3Rpb25BbmRBbnN3ZXJzLmFuc3dlcnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHRoaXMuYWN0aXZlQW5zd2VycyA9IFtdO1xyXG4gICAgICB0aGlzLmFjdGl2ZVF1ZXN0aW9uID0gdW5kZWZpbmVkO1xyXG4gICAgICBhd2FpdCB0aGlzLl9wcmVwYXJlU2VsZWN0aW9uc0FuZERlY29zKHJlc3VsdClcclxuICAgICAgICAuY2F0Y2goKGUpID0+IFByb21pc2UucmVqZWN0KGUpKTtcclxuICAgICAgcmV0dXJuIHRoaXMuYnVpbGQocmVzdWx0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYWN0aXZlUXVlc3Rpb24gPSBxdWVzdGlvbkFuZEFuc3dlcnMucXVlc3Rpb247XHJcbiAgICAgIHRoaXMuYWN0aXZlQW5zd2VycyA9IHF1ZXN0aW9uQW5kQW5zd2Vycy5hbnN3ZXJzO1xyXG4gICAgICBpZiAoZmlyc3RCdWlsZCkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX3ByZXBhcmVTZWxlY3Rpb25zQW5kRGVjb3MocmVzdWx0KVxyXG4gICAgICAgICAgLmNhdGNoKChlKSA9PiBQcm9taXNlLnJlamVjdChlKSk7XHJcbiAgICAgICAgaWYgKHRoaXMuX2lPbmUuc2VsZWN0aW9ucy5sZW5ndGggPCAxKSB7XHJcbiAgICAgICAgICByZXN1bHQucmVzdWx0VHlwZSA9IFJlc3VsdFR5cGUuTmVlZHNVc2VySW5wdXQ7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9pT25lLnNlbGVjdGlvbnMubGVuZ3RoIDwgMikge1xyXG4gICAgICAgICAgcmVzdWx0LnJlc3VsdFR5cGUgPSBSZXN1bHRUeXBlLkJ1aWxkRnJvbVNjcmF0Y2g7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9pT25lLnNlbGVjdGlvbnMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgcmVzdWx0LnJlc3VsdFR5cGUgPSBSZXN1bHRUeXBlLk5lZWRzVXNlcklucHV0O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0T3B0aW9uc0Zyb21TZWxlY3Rpb24oYmFzZVNlbGVjdGlvbjogU2VsZWN0aW9uKTogU2VsZWN0aW9uW10ge1xyXG4gICAgY29uc3Qgc2VsZWN0aW9uczogU2VsZWN0aW9uW10gPSBbXTtcclxuICAgIGxldCBub2RlTGV2ZWwgPSAtMTtcclxuICAgIGNvbnN0IGxlbjogbnVtYmVyID0gdGhpcy5zZWxlY3Rpb25zLmxlbmd0aDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgY29uc3Qgc2VsZWN0aW9uOiBTZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGlvbnNbaV07XHJcbiAgICAgIGNvbnN0IGxldmVsOiBudW1iZXIgPSBzZWxlY3Rpb24ucHJlc2VudGF0aW9uTGV2ZWw7XHJcbiAgICAgIGlmIChub2RlTGV2ZWwgIT09IC0xKSB7XHJcbiAgICAgICAgaWYgKG5vZGVMZXZlbCA8IGxldmVsICYmIHRoaXMuX2NhbkNvbm5lY3RTZWxlY3Rpb25zKGJhc2VTZWxlY3Rpb24sIHNlbGVjdGlvbikgJiYgdGhpcy5fc2VsZWN0aW9uUHVibGlzaGVkKHNlbGVjdGlvbikpIHtcclxuICAgICAgICAgIHNlbGVjdGlvbnMucHVzaChzZWxlY3Rpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobm9kZUxldmVsID49IGxldmVsKSB7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHNlbGVjdGlvbi5pZCA9PT0gYmFzZVNlbGVjdGlvbi5pZCAmJiBzZWxlY3Rpb24ubm9kZSA9PT0gYmFzZVNlbGVjdGlvbi5ub2RlKSB7XHJcbiAgICAgICAgbm9kZUxldmVsID0gbGV2ZWw7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBzZWxlY3Rpb25zO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGRvd25sb2FkQ3VycmVudEN1c3RvbUZsb29yZ3JvdXAoKTogdm9pZCB7XHJcbiAgICBjb25zdCBvYmplY3RUb0V4cG9ydDogT2JqZWN0M0QgPSB0aGlzLl9jdXJyZW50Q3VzdG9tRmxvb3JHcm91cCA/IHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwIDogdGhpcy5faXRlbVNlcnZpY2UuaXRlbXNbMF07XHJcbiAgICB0aGlzLl91dGlsc1NlcnZpY2Uuc2hvd0V4cG9ydERpYWxvZyhvYmplY3RUb0V4cG9ydCk7XHJcbiAgfVxyXG4gIHB1YmxpYyBkb3dubG9hZFVEU1pmb3JBUklPUygpOiB2b2lkIHtcclxuICAgIGNvbnN0IG9iamVjdFRvRXhwb3J0OiBPYmplY3QzRCA9IHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwID8gdGhpcy5fY3VycmVudEN1c3RvbUZsb29yR3JvdXAgOiB0aGlzLl9pdGVtU2VydmljZS5pdGVtc1swXTtcclxuICAgIHRoaXMuX3V0aWxzU2VydmljZS5kb3dubG9hZFVTRFpmb3JBUklPUyhvYmplY3RUb0V4cG9ydCk7XHJcbiAgfVxyXG4gIHB1YmxpYyBkb3dubG9hZFNjZW5lKCk6IHZvaWQge1xyXG4gICAgY29uc3QgYXNzZXRQYXRoOiBzdHJpbmcgPSB0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MuYXNzZXRQYXRoO1xyXG4gICAgLy8gVGhlIGdyb3VuZCBwbGFuZSBsb29rcyBvZGQgaW4gcmVuZGVycy5cclxuICAgIC8vIFRoZSBodWQtcmluZyBhbmQgaHVkLWNpcmNsZSBhcmUgdGhlIHdhbGt0aHJvdWdoIG1vZGUgbWFya2VyLFxyXG4gICAgLy8gd2hpY2ggaXMgbm90IHN1cHBvc2VkIHRvIGJlIHJlbmRlcmVkLlxyXG4gICAgY29uc3QgZWxlbWVudHNUb1JlbW92ZSA9IFsnZ3JvdW5kLXBsYW5lJywgJ2h1ZC1yaW5nJywgJ2h1ZC1jaXJjbGUnXTtcclxuXHJcbiAgICBsZXQgc2NlbmU6IFNjZW5lO1xyXG4gICAgc2NlbmUgPSB0aGlzLl9zY2VuZVNlcnZpY2Uuc2NlbmUuY2xvbmUoKTtcclxuXHJcbiAgICBlbGVtZW50c1RvUmVtb3ZlLmZvckVhY2goZWxlbWVudE5hbWUgPT4ge1xyXG4gICAgICBjb25zdCBzZWxlY3RlZE9iamVjdDogT2JqZWN0M0QgPSBzY2VuZS5nZXRPYmplY3RCeU5hbWUoZWxlbWVudE5hbWUpO1xyXG4gICAgICBzY2VuZS5yZW1vdmUoc2VsZWN0ZWRPYmplY3QpO1xyXG4gICAgfSk7XHJcbiAgICBzY2VuZS5hZGQodGhpcy5fY2FtZXJhU2VydmljZS5jYW1lcmEuY2xvbmUoKSk7XHJcblxyXG4gICAgdGhpcy5fdXRpbHNTZXJ2aWNlLnNob3dFeHBvcnREaWFsb2coc2NlbmUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNyZWF0ZVNpbXBsZTNETW9kZWwocmVzdWx0OiBDdXN0b21GbG9vckdyb3VwUmVzdWx0LCBzdGFuZEFsb25lPzogYm9vbGVhbik6IEN1c3RvbUZsb29yR3JvdXBSZXN1bHQge1xyXG4gICAgaWYgKCFpc05pbGwoc3RhbmRBbG9uZSkpIHtcclxuICAgICAgdGhpcy5zdGFuZEFsb25lID0gc3RhbmRBbG9uZTtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5mdWxsM0RPYmplY3RUb1VzZSkgeyAvLyB0aGVyZSdzIG5vIDNkIG1vZGVsIHNvIGdldCBvdXRcclxuICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIC8vIHRoZXJlIGFyZSBubyBzZWxlY3Rpb25zIG9yIGRlY29zIGZvciBzaW1wbGUgYXJ0aWNsZXMsIHNvIGVtcHR5IGxpc3RzIGZvciBpbnRlZ3JhdGlvbiBwdXJwb3Nlc1xyXG4gICAgdGhpcy5faU9uZS5lbXB0eVNlbGVjdGlvbnMoKTtcclxuICAgIHRoaXMuZnVsbDNET2JqZWN0VG9Vc2UuY2hpbGRyZW4uZm9yRWFjaChjID0+IGMudmlzaWJsZSA9IHRydWUpO1xyXG4gICAgaWYgKCFyZXN1bHQubWV0YURhdGEucG9zaXRpb24pIHtcclxuICAgICAgcmVzdWx0Lm1ldGFEYXRhLnBvc2l0aW9uID0gdGhpcy5zdGFydFBvc2l0aW9uIHx8IGRlZmF1bHRQb3NpdGlvbjtcclxuICAgIH1cclxuICAgIGlmICghcmVzdWx0Lm1ldGFEYXRhLnJvdGF0aW9uKSB7XHJcbiAgICAgIHJlc3VsdC5tZXRhRGF0YS5yb3RhdGlvbiA9IHJlc3VsdC5tZXRhRGF0YS5kZWZhdWx0MTgwID8gZGVmYXVsdFJvdGF0aW9uIDogbmV3IEV1bGVyKCk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBpdGVtQ29uc3RydWN0b3IgPSBGYWN0b3J5LmdldENsYXNzKHRoaXMuc3RhbmRBbG9uZSA/IEl0ZW1UeXBlLkZsb29yR3JvdXAgOiByZXN1bHQubWV0YURhdGEuaXRlbVR5cGUpO1xyXG4gICAgY29uc3QgaXRlbSA9IG5ldyBpdGVtQ29uc3RydWN0b3IoXHJcbiAgICAgIHJlc3VsdC5tZXRhRGF0YSxcclxuICAgICAgdGhpcy5mdWxsM0RPYmplY3RUb1VzZVxyXG4gICAgKTtcclxuICAgIHJlc3VsdC5tZXRhRGF0YS5vYmplY3RVVUlEID0gaXRlbS51dWlkO1xyXG4gICAgaXRlbS5hbGxvd1JvdGF0ZSA9ICF0aGlzLnN0YW5kQWxvbmU7XHJcbiAgICBpdGVtLmhpZ2hMaWdodERpc2FibGVkID0gIXRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5vcHRpb25zLnVzZVN0YW5kYWxvbmVIaWdoTGlnaHQ7XHJcblxyXG4gICAgdGhpcy5faXRlbVNlcnZpY2UuYWRkSXRlbShpdGVtKTtcclxuICAgIGlmIChpdGVtLml0ZW1Hcm91cCkge1xyXG4gICAgICB0aGlzLl9pdGVtR3JvdXBTZXJ2aWNlLnJlYXR0YWNoVG9JdGVtR3JvdXAoaXRlbSwgaXRlbS5pdGVtR3JvdXAsIGl0ZW0ucG9zaXRpb24pO1xyXG4gICAgfVxyXG4gICAgLy8gRm9yIHNpbXBsZSBhcnRpY2xlcyB3ZSB1c2Ugb2JqZWN0IHV1aWQsIGJlY2F1c2UgdGhleSBkb24ndCBoYXZlIGFuIGluc3RhbmNlSWRcclxuICAgIHRoaXMuX3Vwc2VydEZ1cm5pdHVyZShpdGVtLnV1aWQsIHtCcmFuZElkZW50aWZpZXI6IHJlc3VsdC5tZXRhRGF0YS5pdGVtSWRlbnRpZmllcn0sIGl0ZW0pO1xyXG4gICAgdGhpcy5faGFuZGxlSW50ZWdyYXRpb24oaXRlbS51dWlkLCBpdGVtKTtcclxuXHJcbiAgICByZXN1bHQuZnVybml0dXJlID0gaXRlbTtcclxuICAgIHRoaXMuX3NjZW5lU2VydmljZS51cGRhdGVQYXRoVHJhY2VyKCk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfYnVpbGRGbG9vcihyZXN1bHQ6IEN1c3RvbUZsb29yR3JvdXBSZXN1bHQpOiBQcm9taXNlPEN1c3RvbUZsb29yR3JvdXBSZXN1bHQ+IHtcclxuICAgIGNvbnN0IGl0ZW06IEZsb29yUGxhbmVJdGVtID0gdGhpcy5fZmxvb3JTZXJ2aWNlLmZsb29yVG9Db25maWd1cmU7XHJcbiAgICBpdGVtLm1ldGFkYXRhID0gcmVzdWx0Lm1ldGFEYXRhO1xyXG4gICAgaXRlbS5jaGlsZHJlblswXS51c2VyRGF0YS5zZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGlvbnNbMF07XHJcbiAgICBpdGVtLmNvbmZpZ3VyaW5nQ2hhbmdlSGFuZGxlciA9IHRoaXMuY2hhbmdlQ29uZmlndXJlTW9kZTtcclxuICAgIGl0ZW0uc2VsZWN0ZWRIYW5kbGVyID0gdGhpcy5zZWxlY3RJdGVtO1xyXG4gICAgaXRlbS51bnNlbGVjdGVkSGFuZGxlciA9IHRoaXMudW5TZWxlY3RJdGVtO1xyXG4gICAgYXdhaXQgdGhpcy5fbG9hZFZhcmlhdGlvbnMoaXRlbSwgcmVzdWx0Lm1ldGFEYXRhLml0ZW1JZCk7XHJcbiAgICB0aGlzLl9mbG9vclNlcnZpY2UudW5IaWdoTGlnaHRGbG9vcnMoKTtcclxuICAgIHRoaXMuX3NjZW5lU2VydmljZS5uZWVkc1JlbmRlciA9IHRydWU7XHJcbiAgICB0aGlzLl9jdXJyZW50Q3VzdG9tRmxvb3JHcm91cCA9IGl0ZW07XHJcbiAgICByZXN1bHQuZnVybml0dXJlID0gdGhpcy5fY3VycmVudEN1c3RvbUZsb29yR3JvdXA7XHJcbiAgICByZXN1bHQuaW5zdGFuY2VJZCA9IHJlc3VsdC5tZXRhRGF0YS5pdGVtSWQ7XHJcbiAgICB0aGlzLl9oYW5kbGVJbnRlZ3JhdGlvbihyZXN1bHQubWV0YURhdGEuaXRlbUlkLCB0aGlzLl9jdXJyZW50Q3VzdG9tRmxvb3JHcm91cCk7XHJcbiAgICBpZiAodGhpcy5fY3VycmVudEN1c3RvbUZsb29yR3JvdXAuaXRlbUdyb3VwKSB7XHJcbiAgICAgIHRoaXMuX2l0ZW1Hcm91cFNlcnZpY2UucmVhdHRhY2hUb0l0ZW1Hcm91cChcclxuICAgICAgICAgIHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwLFxyXG4gICAgICAgICAgdGhpcy5fY3VycmVudEN1c3RvbUZsb29yR3JvdXAuaXRlbUdyb3VwLFxyXG4gICAgICAgICAgdGhpcy5fY3VycmVudEN1c3RvbUZsb29yR3JvdXAucG9zaXRpb24pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fYW5zd2VyU2VsZWN0ZWQubGVuZ3RoID0gMDtcclxuICAgIHRoaXMuX2h1ZFNlcnZpY2UudXBkYXRlU2VsZWN0ZWRJdGVtSHVkKCk7XHJcbiAgICB0aGlzLl9nZW5lcmF0ZUxheWluZ1BhdHRlcm4oaXRlbSk7XHJcbiAgICB0aGlzLmJ1aWxkRmluaXNoZWQubmV4dChyZXN1bHQpO1xyXG4gICAgaWYgKHJlc3VsdC5yZXN1bHRUeXBlID09PSBSZXN1bHRUeXBlLk5vU2VsZWN0aW9ucykge1xyXG4gICAgICByZXN1bHQucmVzdWx0VHlwZSA9IFJlc3VsdFR5cGUuQ29uZmlndXJhdGlvbkZpeGVkO1xyXG4gICAgfSBlbHNlIGlmIChyZXN1bHQucmVzdWx0VHlwZSAhPT0gUmVzdWx0VHlwZS5PYnNvbGV0ZSAmJiByZXN1bHQucmVzdWx0VHlwZSAhPT0gUmVzdWx0VHlwZS5Db25maWd1cmF0aW9uRml4ZWQpIHsgLy8gZG9uJ3Qgb3ZlcnJpZGUgdGhlc2VcclxuICAgICAgcmVzdWx0LnJlc3VsdFR5cGUgPSBSZXN1bHRUeXBlLkxvYWRlZDtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZW5lcmF0ZUxheWluZ1BhdHRlcm4oZmxvb3I6IEZsb29yUGxhbmVJdGVtKTogdm9pZCB7XHJcbiAgICBjb25zdCBmbG9vclBhdHRlcm5JbmZvID0gdGhpcy5fZ2VuZXJhdGVGbG9vclBhdHRlcm5JbmZvKGZsb29yKTtcclxuXHJcbiAgICBmbG9vci5yZXN0b3JlRmxvb3JPYmplY3QoKTtcclxuXHJcbiAgICBjb25zdCBtZXNoTGVmdCA9IHRoaXMuZnVsbDNET2JqZWN0VG9Vc2UuY2hpbGRyZW4uZmluZChtID0+IG0ubmFtZSA9PT0gZmxvb3JQYXR0ZXJuSW5mby5tZXNoSWRMZWZ0KSBhcyBNZXNoO1xyXG4gICAgdGhpcy5fbm9ybWFsaXplTWVzaChtZXNoTGVmdCk7XHJcbiAgICBsZXQgbWVzaFJpZ2h0OiBNZXNoID0gbnVsbDtcclxuXHJcbiAgICBpZiAoZmxvb3JQYXR0ZXJuSW5mby5tZXNoSWRSaWdodCAhPT0gbnVsbCkge1xyXG4gICAgICBtZXNoUmlnaHQgPSB0aGlzLmZ1bGwzRE9iamVjdFRvVXNlLmNoaWxkcmVuLmZpbmQobSA9PiBtLm5hbWUgPT09IGZsb29yUGF0dGVybkluZm8ubWVzaElkUmlnaHQpIGFzIE1lc2g7XHJcbiAgICAgIHRoaXMuX25vcm1hbGl6ZU1lc2gobWVzaFJpZ2h0KTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBmbG9vclNpemUgPSBmbG9vci5zaXplO1xyXG4gICAgY29uc3QgcGxhbmtTaXplID0gbmV3IFZlY3RvcjMoKTtcclxuXHJcbiAgICBtZXNoTGVmdC5nZW9tZXRyeS5ib3VuZGluZ0JveC5nZXRTaXplKHBsYW5rU2l6ZSk7XHJcblxyXG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLl9mbG9vclBhdHRlcm5TZXJ2aWNlLmdlbmVyYXRlUGF0dGVybihcclxuICAgICAgZmxvb3JQYXR0ZXJuSW5mby5mbG9vclBhdHRlcm4sXHJcbiAgICAgIHBsYW5rU2l6ZSxcclxuICAgICAgZmxvb3JTaXplLFxyXG4gICAgICBmbG9vclBhdHRlcm5JbmZvLmZsb29yUGF0dGVybkRpcmVjdGlvblxyXG4gICAgKTtcclxuICAgIGNvbnN0IGl0ZW1BbW91bnQgPSAgKG1lc2hSaWdodCA9PT0gbnVsbCkgPyBpdGVtcy5sZW5ndGggOiBpdGVtcy5sZW5ndGggLyAyO1xyXG4gICAgY29uc3QgbWF0ZXJpYWwgPSBmbG9vci5nZXRNYXRlcmlhbCgpO1xyXG4gICAgY29uc3QgcGxhbmtzTGVmdCA9IG5ldyBJbnN0YW5jZWRNZXNoKG1lc2hMZWZ0Lmdlb21ldHJ5LCBtYXRlcmlhbCwgaXRlbUFtb3VudCk7XHJcbiAgICBsZXQgcGxhbmtzUmlnaHQ6IEluc3RhbmNlZE1lc2g7XHJcblxyXG4gICAgaWYgKG1lc2hSaWdodCkge1xyXG4gICAgICBwbGFua3NSaWdodCA9IG5ldyBJbnN0YW5jZWRNZXNoKG1lc2hSaWdodC5nZW9tZXRyeSwgbWF0ZXJpYWwsIGl0ZW1BbW91bnQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGFzc2lnbiB0cmFuc2Zvcm0gdG8gZWFjaCBpdGVtIGluIGluc3RhbmNlZCBtZXNoXHJcblxyXG4gICAgY29uc3QgZHVtbXkgPSBuZXcgT2JqZWN0M0QoKTtcclxuICAgIGxldCBtYXRyaXhJbmRleCA9IDA7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSArKykge1xyXG4gICAgICBjb25zdCBpdGVtID0gaXRlbXNbaV07XHJcbiAgICAgIGNvbnN0IHRhcmdldFBsYW5rTWVzaCA9IChpdGVtLmlzTGVmdCkgPyBwbGFua3NMZWZ0IDogcGxhbmtzUmlnaHQ7XHJcblxyXG4gICAgICBjb25zdCBwb3NpdGlvbjogVmVjdG9yMyA9IGl0ZW0ucG9zaXRpb247XHJcbiAgICAgIGNvbnN0IHJvdGF0aW9uOiBWZWN0b3IzID0gaXRlbS5yb3RhdGlvbjtcclxuICAgICAgZHVtbXkucG9zaXRpb24uc2V0KHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHBvc2l0aW9uLnopO1xyXG4gICAgICBkdW1teS5yb3RhdGlvbi5zZXQocm90YXRpb24ueCwgcm90YXRpb24ueSwgcm90YXRpb24ueik7XHJcbiAgICAgIGR1bW15LnVwZGF0ZU1hdHJpeCgpO1xyXG4gICAgICB0YXJnZXRQbGFua01lc2guc2V0TWF0cml4QXQobWF0cml4SW5kZXgsIGR1bW15Lm1hdHJpeCk7XHJcblxyXG4gICAgICBpZiAocGxhbmtzUmlnaHQpIHtcclxuICAgICAgICBpZiAoaSAhPT0gMCAmJiAoaSAlIDIgIT09IDApKSB7IG1hdHJpeEluZGV4Kys7IH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBtYXRyaXhJbmRleCsrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGNvbnN0IGN1c3RvbUZsb29yV3JhcHBlciA9IG5ldyBPYmplY3QzRCgpO1xyXG4gICAgY3VzdG9tRmxvb3JXcmFwcGVyLmFkZChwbGFua3NMZWZ0KTtcclxuICAgIGlmIChwbGFua3NSaWdodCkgY3VzdG9tRmxvb3JXcmFwcGVyLmFkZChwbGFua3NSaWdodCk7XHJcbiAgICBmbG9vci5mbG9vck9iamVjdCA9IGN1c3RvbUZsb29yV3JhcHBlcjtcclxuXHJcbiAgICAvLyB0aGlzLl9mbG9vclRpbGVJbnRlcnNlY3Rpb25TZXJ2aWNlLnRvZ2dsZURlYnVnKCk7XHJcblxyXG4gICAgZmxvb3IubWV0YWRhdGEuZmxvb3JDb3VudFJlc3VsdCA9IHRoaXMuX2Zsb29yVGlsZUludGVyc2VjdGlvblNlcnZpY2UuY291bnRUaWxlcyhcclxuICAgICAgZmxvb3IuZmxvb3JNZXNoLFxyXG4gICAgICBpdGVtcyxcclxuICAgICAgbWVzaExlZnQuZ2VvbWV0cnlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZW5lcmF0ZUZsb29yUGF0dGVybkluZm8oaXRlbTogSXRlbSk6IEZsb29yUGF0dGVybkluZm8ge1xyXG4gICAgdGhpcy5fZ2VuZXJhdGVTZWxlY3RlZEluTWV0YWRhdGEoaXRlbSk7XHJcbiAgICBjb25zdCBpbmZvOiBGbG9vclBhdHRlcm5JbmZvID0ge1xyXG4gICAgICBtZXNoSWRMZWZ0OiBudWxsLFxyXG4gICAgICBtZXNoSWRSaWdodDogbnVsbCxcclxuICAgICAgZmxvb3JQYXR0ZXJuOiBGbG9vclBhdHRlcm4uTk9STUFMLFxyXG4gICAgICBmbG9vclBhdHRlcm5EaXJlY3Rpb246IEZsb29yUGF0dGVybkRpcmVjdGlvbi5MWUlOR1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBzZWxlY3RlZCA9IGl0ZW0ubWV0YWRhdGEuc2VsZWN0aW9ucztcclxuXHJcbiAgICBjb25zdCBhZm1ldGluZyA9IHNlbGVjdGVkLmZpbmQocyA9PiBzLnF1ZXN0aW9uLnRvTG93ZXJDYXNlKCkgPT09ICdwbGFuayBhZm1ldGluZycpO1xyXG4gICAgbGV0IGFmbWV0aW5nU3RyaW5nOiBzdHJpbmcgPSBhZm1ldGluZy5hbnN3ZXIudG9Mb3dlckNhc2UoKTtcclxuICAgIGFmbWV0aW5nU3RyaW5nID0gYWZtZXRpbmdTdHJpbmcuc3Vic3RyKGFmbWV0aW5nU3RyaW5nLmxhc3RJbmRleE9mKCcgJykgKyAxKTtcclxuICAgIGNvbnN0IGxlZ1BhdHJvb25BbnN3ZXIgPSBzZWxlY3RlZC5maW5kKHMgPT4gcy5xdWVzdGlvbi50b0xvd2VyQ2FzZSgpID09PSAnbGVnIHBhdHJvb24nKS5hbnN3ZXIudG9Mb3dlckNhc2UoKTtcclxuICAgIGxldCBsZWdQYXRyb29uU3RyaW5nID0gJyc7XHJcblxyXG4gICAgc3dpdGNoICh0cnVlKSB7XHJcbiAgICAgIGNhc2UgbGVnUGF0cm9vbkFuc3dlci5pbmRleE9mKCdyZWNodCcpICE9PSAtMTpcclxuICAgICAgICBsZWdQYXRyb29uU3RyaW5nID0gJzkwJztcclxuICAgICAgICBpbmZvLmZsb29yUGF0dGVybiA9IEZsb29yUGF0dGVybi5OT1JNQUw7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgbGVnUGF0cm9vbkFuc3dlci5pbmRleE9mKCdncmFhdCcpICE9PSAtMTpcclxuICAgICAgICBsZWdQYXRyb29uU3RyaW5nID0gJzkwJztcclxuICAgICAgICBpbmZvLmZsb29yUGF0dGVybiA9IEZsb29yUGF0dGVybi5IRVJSSU5HQk9ORTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBsZWdQYXRyb29uQW5zd2VyLmluZGV4T2YoJzYwJykgIT09IC0xOlxyXG4gICAgICAgIGxlZ1BhdHJvb25TdHJpbmcgPSAnNjAnO1xyXG4gICAgICAgIGluZm8uZmxvb3JQYXR0ZXJuID0gRmxvb3JQYXR0ZXJuLkhPTjYwO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIGxlZ1BhdHJvb25BbnN3ZXIuaW5kZXhPZignNDUnKSAhPT0gLTE6XHJcbiAgICAgICAgbGVnUGF0cm9vblN0cmluZyA9ICc0NSc7XHJcbiAgICAgICAgaW5mby5mbG9vclBhdHRlcm4gPSBGbG9vclBhdHRlcm4uSE9ONDU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgaW5mby5tZXNoSWRMZWZ0ID0gYCR7YWZtZXRpbmdTdHJpbmd9XyR7bGVnUGF0cm9vblN0cmluZ31gO1xyXG4gICAgaWYgKCBpbmZvLmZsb29yUGF0dGVybiA9PT0gRmxvb3JQYXR0ZXJuLkhPTjQ1IHx8IGluZm8uZmxvb3JQYXR0ZXJuID09PSBGbG9vclBhdHRlcm4uSE9ONjApIHtcclxuICAgICAgaW5mby5tZXNoSWRSaWdodCA9IGByXyR7YWZtZXRpbmdTdHJpbmd9XyR7bGVnUGF0cm9vblN0cmluZ31gO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpbmZvLmZsb29yUGF0dGVybiA9PT0gRmxvb3JQYXR0ZXJuLkhFUlJJTkdCT05FKSB7XHJcbiAgICAgIGluZm8ubWVzaElkUmlnaHQgPSBpbmZvLm1lc2hJZExlZnQ7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbGVnUmljaHRpbmdBbnN3ZXIgPSBzZWxlY3RlZC5maW5kKHMgPT4gcy5xdWVzdGlvbi50b0xvd2VyQ2FzZSgpID09PSAnbGVnIHJpY2h0aW5nJykuYW5zd2VyLnRvTG93ZXJDYXNlKCk7XHJcbiAgICBpbmZvLmZsb29yUGF0dGVybkRpcmVjdGlvbiA9IChsZWdSaWNodGluZ0Fuc3dlci5pbmRleE9mKCd2ZXJ0aWNhYWwnKSAhPT0gLTEpID8gRmxvb3JQYXR0ZXJuRGlyZWN0aW9uLlNUQU5ESU5HIDogRmxvb3JQYXR0ZXJuRGlyZWN0aW9uLkxZSU5HO1xyXG4gICAgcmV0dXJuIGluZm87XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZW5lcmF0ZVNlbGVjdGVkSW5NZXRhZGF0YShpdGVtOiBJdGVtKTogdm9pZCB7XHJcbiAgICBjb25zdCBjbG9uZVNlbGVjdGlvbnMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuc2VsZWN0aW9ucykpO1xyXG4gICAgY2xvbmVTZWxlY3Rpb25zLmZvckVhY2gocyA9PiB7XHJcbiAgICAgIHMuaW1hZ2VEYXRhID0gdW5kZWZpbmVkO1xyXG4gICAgICBzLmltYWdlRGF0YUxhc3RBbnN3ZXIgPSB1bmRlZmluZWQ7XHJcbiAgICAgIGlmIChzLmFkZGFibGVzKSB7XHJcbiAgICAgICAgcy5hZGRhYmxlcy5mb3JFYWNoKGEgPT4ge1xyXG4gICAgICAgICAgYS5pbWFnZURhdGEgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgaXRlbS5tZXRhZGF0YS5kZWNvcyA9IEFycmF5LmZyb20odGhpcy5faU9uZS5kZWNvTm9kZXMpO1xyXG4gICAgaXRlbS5tZXRhZGF0YS5zZWxlY3Rpb25zID0gY2xvbmVTZWxlY3Rpb25zO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfbm9ybWFsaXplTWVzaChtZXNoOiBNZXNoKSB7XHJcbiAgICBjb25zdCBtZXNoU2l6ZSA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICBtZXNoLmdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ0JveCgpO1xyXG4gICAgbWVzaC5nZW9tZXRyeS5ib3VuZGluZ0JveC5nZXRTaXplKG1lc2hTaXplKTtcclxuICAgIGlmIChtZXNoU2l6ZS56ID4gbWVzaFNpemUueCkge1xyXG4gICAgICBtZXNoLmdlb21ldHJ5LnJvdGF0ZVkoTWF0aC5QSSAvIDIpO1xyXG4gICAgfVxyXG4gICAgbWVzaC5nZW9tZXRyeS5jZW50ZXIoKTtcclxuICAgIG1lc2guZ2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nQm94KCk7XHJcbiAgICBjb25zdCBjZW50ZXIgPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgbWVzaC5nZW9tZXRyeS5ib3VuZGluZ0JveC5nZXRDZW50ZXIoY2VudGVyKTtcclxuICAgIG1lc2gucG9zaXRpb24uY29weShjZW50ZXIpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc3RhcnRUb0J1aWxkRnJvbUNvbmZpZ3VyYXRvcihtZXRhZGF0YTogTWV0YWRhdGEpOiBQcm9taXNlPEN1c3RvbUZsb29yR3JvdXBSZXN1bHQ+IHtcclxuICAgIHJldHVybiB0aGlzLnN0YXJ0VG9CdWlsZChudWxsLCBtZXRhZGF0YSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9zZXRJbnN0YW5jZVRvQ29uZmlndXJlKHJlc3VsdDogQ3VzdG9tRmxvb3JHcm91cFJlc3VsdCk6IFByb21pc2U8Q3VzdG9tRmxvb3JHcm91cFJlc3VsdD4ge1xyXG4gICAgaWYgKHJlc3VsdC5yZXN1bHRUeXBlICE9PSBSZXN1bHRUeXBlLlRpbWVvdXQpIHtcclxuICAgICAgaWYgKHJlc3VsdC5tZXRhRGF0YS5pdGVtSWQpIHtcclxuICAgICAgICBhd2FpdCB0aGlzLl9pT25lLnNldEluc3RhbmNlKHJlc3VsdC5tZXRhRGF0YS5pdGVtSWQpXHJcbiAgICAgICAgICAuY2F0Y2goKGUpID0+IHtcclxuICAgICAgICAgICAgcmVzdWx0LmVycm9yTWVzc2FnZXMucHVzaChuZXcgRXJyb3JNZXNzYWdlKGUpKTtcclxuICAgICAgICAgICAgUHJvbWlzZS5yZWplY3QocmVzdWx0KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5faU9uZS5pbml0Tm9kZUluc3RhbmNlKHJlc3VsdC5tZXRhRGF0YS5pdGVtSWRlbnRpZmllcilcclxuICAgICAgICAgIC5jYXRjaCgoZSkgPT4ge1xyXG4gICAgICAgICAgICByZXN1bHQuZXJyb3JNZXNzYWdlcy5wdXNoKG5ldyBFcnJvck1lc3NhZ2UoZSkpO1xyXG4gICAgICAgICAgICBQcm9taXNlLnJlamVjdChyZXN1bHQpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgICAgICByZXN1bHQubWV0YURhdGEuaXRlbUlkID0gcmVzcG9uc2UucmVzdWx0T2JqZWN0O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBQcm9taXNlLnJlamVjdChyZXN1bHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhd2FpdCB0aGlzLl9pT25lLnNldEluc3RhbmNlKHJlc3VsdC5tZXRhRGF0YS5pdGVtSWQpXHJcbiAgICAgICAgICAuY2F0Y2goKGUpID0+IHtcclxuICAgICAgICAgICAgcmVzdWx0LmVycm9yTWVzc2FnZXMucHVzaChuZXcgRXJyb3JNZXNzYWdlKGUpKTtcclxuICAgICAgICAgICAgUHJvbWlzZS5yZWplY3QocmVzdWx0KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX3ByZXBhcmVTZWxlY3Rpb25zQW5kRGVjb3MocmVzdWx0OiBDdXN0b21GbG9vckdyb3VwUmVzdWx0KTogUHJvbWlzZTxDdXN0b21GbG9vckdyb3VwUmVzdWx0PiB7XHJcbiAgICB0aGlzLl9yZXNldCgpO1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3Qgc2VsZWN0aW9uc0FuZERlY29Qcm9taXNlOiBQcm9taXNlPGFueT5bXSA9IFtdO1xyXG4gICAgICBzZWxlY3Rpb25zQW5kRGVjb1Byb21pc2UucHVzaCh0aGlzLl9pT25lLmdldFNlbGVjdGlvbnNBc3luYygpLCB0aGlzLl9pT25lLmdldERlY29zQXN5bmMoKSk7XHJcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKHNlbGVjdGlvbnNBbmREZWNvUHJvbWlzZSk7XHJcbiAgICAgIHRoaXMuX3ByZWxvYWRNYXRlcmlhbHMocmVzdWx0Lm1ldGFEYXRhLnNjaGVtYSk7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5faU9uZS5zZWxlY3Rpb25zLmxlbmd0aCA8IDIpIHsgLy8gbm8gc2VsZWN0aW9ucywgb25seSBzZWxlY3Rpb24gb2YgdHlwZSAnQVJUJ1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGlmIChyZXN1bHQucmVzdWx0VHlwZSAhPT0gUmVzdWx0VHlwZS5BcnRpY2xlTm90Rm91bmQgJiYgIXJlc3VsdC5tZXRhRGF0YS5vcmlnaW5hbEl0ZW1JZCkgeyAvLyBhcnRpY2xlIGZvdW5kLCBzbyBpbml0IHRoYXQgZmlyc3RcclxuICAgICAgICAgIHJlc3VsdC5tZXRhRGF0YS5vcmlnaW5hbEl0ZW1JZCA9IHJlc3VsdC5tZXRhRGF0YS5pdGVtSWQ7XHJcbiAgICAgICAgICByZXN1bHQubWV0YURhdGEuaXRlbUlkID0gbnVsbDtcclxuICAgICAgICAgIGF3YWl0IHRoaXMuX3NldEluc3RhbmNlVG9Db25maWd1cmUocmVzdWx0KTtcclxuICAgICAgICAgIHJlc3VsdC5yZXN1bHRUeXBlID0gUmVzdWx0VHlwZS5Ob1NlbGVjdGlvbnM7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5zdGFydFRvQnVpbGQocmVzdWx0KTsgLy8gJ3Jlc3RhcnQnIHRoZSBidWlsZFxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9nZXRTZWxlY3Rpb25zQW5kRGVjb3NGcm9tTWV0YWRhdGEocmVzdWx0KTtcclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5faU9uZS5zZWxlY3Rpb25zLmZvckVhY2gocyA9PiB7XHJcbiAgICAgIHMuc2NoZW1hID0gcmVzdWx0Lm1ldGFEYXRhLnNjaGVtYTtcclxuICAgICAgcy5pbnN0YW5jZUlkID0gcmVzdWx0Lm1ldGFEYXRhLml0ZW1JZDtcclxuICAgIH0pOyAvLyBhZGQgc2NoZW1hIGZvciBtYXRlcmlhbCBjcmVhdGlvblxyXG4gICAgdGhpcy5faGFuZGxlU2VsZWN0aW9uc1JlY2VpdmVkKHJlc3VsdC5tZXRhRGF0YSk7XHJcbiAgICB0aGlzLl9saW5rU2VsZWN0aW9uc0FuZERlY29zKCk7XHJcbiAgICB0aGlzLl9wcmVwYXJlVGhlU2VsZWN0aW9ucyhyZXN1bHQubWV0YURhdGEuaXRlbUlkKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3ByZWxvYWRNYXRlcmlhbHMoc2NoZW1hOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuX3ZhcmlhdGlvbkNhY2hlU2VydmljZS5wcmVsb2FkVmFyaWF0aW9ucyhzY2hlbWEsIHRoaXMuX2lPbmUuZGVjb05vZGVzLm1hcChkID0+IGQuZ2FtZU9iamVjdE5hbWUpLCB0aGlzLmFydGljbGVBc3NldFBhdGgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2V0U2VsZWN0aW9uc0FuZERlY29zRnJvbU1ldGFkYXRhKHJlc3VsdDogQ3VzdG9tRmxvb3JHcm91cFJlc3VsdCk6IHZvaWQge1xyXG4gICAgaWYgKHJlc3VsdC5tZXRhRGF0YS5zZWxlY3Rpb25zICYmIHJlc3VsdC5tZXRhRGF0YS5kZWNvcykge1xyXG4gICAgICB0aGlzLl9pT25lLnNldFNlbGVjdGlvbnMocmVzdWx0Lm1ldGFEYXRhLnNlbGVjdGlvbnMpO1xyXG4gICAgICB0aGlzLl9pT25lLnNldERlY29Ob2RlcyhBcnJheS5mcm9tKHJlc3VsdC5tZXRhRGF0YS5kZWNvcy52YWx1ZXMoKSkpO1xyXG4gICAgICByZXN1bHQubWV0YURhdGEub2Jzb2xldGUgPSB0cnVlO1xyXG4gICAgICBpZiAocmVzdWx0LnJlc3VsdFR5cGUgIT09IFJlc3VsdFR5cGUuQ29uZmlndXJhdGlvbk5vdEZpeGVkKSB7XHJcbiAgICAgICAgcmVzdWx0LnJlc3VsdFR5cGUgPSBSZXN1bHRUeXBlLk9ic29sZXRlO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5faU9uZS5zZWxlY3Rpb25zLmxlbmd0aCA8IDIgfHwgdGhpcy5faU9uZS5kZWNvTm9kZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgcmVzdWx0LmVycm9yTWVzc2FnZXMucHVzaChuZXcgRXJyb3JNZXNzYWdlKCdOT19TRUxFQ1RJT05TX09SX0RFQ09TJywgJ05PX1NFTEVDVElPTlNfT1JfREVDT1NfSU5GTycpKTtcclxuICAgICAgfVxyXG4gICAgICB0aHJvdyByZXN1bHQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zZWxlY3Rpb25QdWJsaXNoZWQoc2VsZWN0aW9uOiBTZWxlY3Rpb24pOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoKHNlbGVjdGlvbi5oaWVyYXJjaGljYWxQdWJsaWNhdGlvbkNvZGUgPT09IG51bGwpIHx8ICgoc2VsZWN0aW9uLmhpZXJhcmNoaWNhbFB1YmxpY2F0aW9uQ29kZSAmIDIpID4gMCkpICYmXHJcbiAgICAgIChcclxuICAgICAgICAoc2VsZWN0aW9uLm5vZGVUeXBlID09PSBOb2RlVHlwZS5RdWVzdGlvbiAmJlxyXG4gICAgICAgICAgKCgoc2VsZWN0aW9uLnF1ZXN0aW9uUHVibGljYXRpb25Db2RlICYgMikgPiAwKSB8fFxyXG4gICAgICAgICAgICBzZWxlY3Rpb24ucXVlc3Rpb25QdWJsaWNhdGlvbkNvZGUgPT09IG51bGwgfHwgc2VsZWN0aW9uLnF1ZXN0aW9uUHVibGljYXRpb25Db2RlID09PSB1bmRlZmluZWQpKSB8fFxyXG4gICAgICAgIChzZWxlY3Rpb24ubm9kZVR5cGUgPT09IE5vZGVUeXBlLkFuc3dlciAmJlxyXG4gICAgICAgICAgKCgoc2VsZWN0aW9uLmFuc3dlclB1YmxpY2F0aW9uQ29kZSAmIDIpID4gMCkgfHxcclxuICAgICAgICAgICAgc2VsZWN0aW9uLmFuc3dlclB1YmxpY2F0aW9uQ29kZSA9PT0gbnVsbCB8fCBzZWxlY3Rpb24uYW5zd2VyUHVibGljYXRpb25Db2RlID09PSB1bmRlZmluZWQpKVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaGFuZGxlSW50ZWdyYXRpb24oaW5zdGFuY2VJZDogc3RyaW5nLCBvYmplY3Q6IEl0ZW0pOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9pbnRlZ3JhdGlvbkVuYWJsZWQgJiYgIW9iamVjdC5tZXRhZGF0YS5vYnNvbGV0ZSkge1xyXG4gICAgICBjb25zdCBnZW5lcmljVmFyaWF0aW9uU2VsZWN0aW9uczogU2VsZWN0aW9uW10gPVxyXG4gICAgICAgIHRoaXMuX2lPbmUuc2VsZWN0aW9ucy5maWx0ZXIocyA9PiBzLmRlY29Ob2RlICYmIHMuZ2VuZXJpYyAmJlxyXG4gICAgICAgICAgKHMuZGVjb05vZGUgYXMgYW55KS52YXJpYXRpb24gJiYgKHMuZGVjb05vZGUgYXMgYW55KS52YXJpYXRpb24udHlwZSA9PT0gRGVjb05vZGVUeXBlLlZhcmlhdGlvbik7XHJcbiAgICAgIGlmIChnZW5lcmljVmFyaWF0aW9uU2VsZWN0aW9ucyAmJiBnZW5lcmljVmFyaWF0aW9uU2VsZWN0aW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy5fdXBzZXJ0RnVybml0dXJlKGluc3RhbmNlSWQsIHtcclxuICAgICAgICAgIFZhcmlhdGlvbjogKGdlbmVyaWNWYXJpYXRpb25TZWxlY3Rpb25zWzBdLmRlY29Ob2RlIGFzIGFueSkudmFyaWF0aW9uLmJyYW5kSWQsXHJcbiAgICAgICAgICBWYXJpYXRpb25EZXNjcmlwdGlvbjogKGdlbmVyaWNWYXJpYXRpb25TZWxlY3Rpb25zWzBdLmRlY29Ob2RlIGFzIGFueSkudmFyaWF0aW9uLmdhbWVPYmplY3ROYW1lLFxyXG4gICAgICAgICAgU3VwcGxpZXJBcnRpY2xlTnI6IChnZW5lcmljVmFyaWF0aW9uU2VsZWN0aW9uc1swXS5kZWNvTm9kZSBhcyBhbnkpLnZhcmlhdGlvbi5zdXBwbGllckFydGljbGVOclxyXG4gICAgICAgIH0sIG9iamVjdCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5faGFuZGxlSW50ZWdyYXRpb25Db25uZWN0aW9ucyhpbnN0YW5jZUlkLCBvYmplY3QpO1xyXG4gICAgICB0aGlzLl91cHNlcnRGdXJuaXR1cmUoaW5zdGFuY2VJZCwge1Bvc2l0aW9uOiBvYmplY3QucG9zaXRpb24sIFJvdGF0aW9uOiBvYmplY3Qucm90YXRpb259LCBvYmplY3QpO1xyXG4gICAgICB0aGlzLl9tZXNzYWdlQnVzLmVtaXQoTWVzc2FnZVR5cGUuQ29uZmlndXJhdGlvbkNoYW5nZWQsIHRoaXMuX2Z1cm5pdHVyZUNvbmZpZ3VyYXRpb25zKTtcclxuICAgICAgLy8gY29uc29sZS5sb2codGhpcy5fZnVybml0dXJlQ29uZmlndXJhdGlvbnMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc3RhcnRXaXRoTmV3KGNsZWFudXA6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XHJcbiAgICB0aGlzLl9mdXJuaXR1cmVDb25maWd1cmF0aW9ucy5sZW5ndGggPSAwO1xyXG4gICAgaWYgKGNsZWFudXApIHtcclxuICAgICAgdGhpcy5fcGxhY2VkQWRqdXN0YWJsZXMuZm9yRWFjaChhID0+IFV0aWxzLkRpc3Bvc2VPYmplY3QoYSkpO1xyXG4gICAgICB0aGlzLl9wbGFjZWRBZGRhYmxlcy5mb3JFYWNoKGEgPT4gVXRpbHMuRGlzcG9zZU9iamVjdChhKSk7XHJcbiAgICAgIHRoaXMuX2NsZWFudXAoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NsZWFudXBCZWZvcmVQcmVzZXRMb2FkKCk6IHZvaWQge1xyXG4gICAgTWF0ZXJpYWxVdGlscy5DbGVhckNhY2hlcygpO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBDbGVhciB2YXJpYWJsZXMgdG8gbGV0IG9iamVjdHMgYmVpbmcgZGlzcG9zZWQgcHJvcGVybHlcclxuICAgKi9cclxuICBwcml2YXRlIF9oYW5kbGVBZnRlclByZXNldExvYWQoKTogdm9pZCB7XHJcbiAgICAvLyBtYWtlIHN1cmUgbm90aGluZyBpcyBrZWVwaW5nIGEgbG9ja1xyXG4gICAgdGhpcy5faU9uZS5zZXRJbnN0YW5jZShudWxsKTtcclxuICAgIC8vIGNsZWFuXHJcbiAgICB0aGlzLl9jbGVhbnVwKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jbGVhbnVwKCk6IHZvaWQge1xyXG4gICAgVXRpbHMuRGlzcG9zZU9iamVjdCh0aGlzLmZ1bGwzRE9iamVjdFRvVXNlKTtcclxuICAgIHRoaXMuZnVsbDNET2JqZWN0VG9Vc2UgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLl9jdXJyZW50Q3VzdG9tRmxvb3JHcm91cCA9IHVuZGVmaW5lZDtcclxuICAgIFV0aWxzLkRpc3Bvc2VPYmplY3QodGhpcy5fYWN0aXZlQ2hpbGRFbGVtZW50KTtcclxuICAgIHRoaXMuX2FjdGl2ZUNoaWxkRWxlbWVudCA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuX3BsYWNlZEFkanVzdGFibGVzLmxlbmd0aCA9IDA7XHJcbiAgICB0aGlzLl9wbGFjZWRBZGRhYmxlcy5sZW5ndGggPSAwO1xyXG4gICAgdGhpcy5fYWRqdXN0YWJsZXMubGVuZ3RoID0gMDtcclxuICAgIHRoaXMuX2FkZGFibGVzLmxlbmd0aCA9IDA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9lbmFibGVJbnRlZ3JhdGlvbigpOiB2b2lkIHtcclxuICAgIHRoaXMuX2ludGVncmF0aW9uRW5hYmxlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9oYW5kbGVJdGVtUmVtb3ZlZEZyb21TY2VuZShyZXN1bHQ6IHsgaXRlbTogYW55LCBhZGRlZFRvR3JvdXA6IGJvb2xlYW4gfSk6IHZvaWQge1xyXG4gICAgaWYgKHJlc3VsdC5hZGRlZFRvR3JvdXApIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHJlc3VsdC5pdGVtIGluc3RhbmNlb2YgSXRlbSAmJiAhKHJlc3VsdC5pdGVtIGluc3RhbmNlb2YgRmxvb3JQaW4gfHwgcmVzdWx0Lml0ZW0gaW5zdGFuY2VvZiBXYWxsUGluKSkge1xyXG4gICAgICBpZiAodGhpcy5faW50ZWdyYXRpb25FbmFibGVkICYmIHJlc3VsdC5pdGVtLnVzZXJEYXRhKSB7XHJcbiAgICAgICAgY29uc3QgaWQ6IHN0cmluZyA9IHJlc3VsdC5pdGVtLnVzZXJEYXRhLml0ZW1JZCA/IHJlc3VsdC5pdGVtLnVzZXJEYXRhLml0ZW1JZCA6IHJlc3VsdC5pdGVtLnV1aWQ7XHJcbiAgICAgICAgdGhpcy5fZnVybml0dXJlQ29uZmlndXJhdGlvbnMuc3BsaWNlKHRoaXMuX2Z1cm5pdHVyZUNvbmZpZ3VyYXRpb25zLmZpbmRJbmRleChmID0+IGYuSWQgPT09IGlkKSwgMSk7XHJcbiAgICAgICAgdGhpcy5fbWVzc2FnZUJ1cy5lbWl0KE1lc3NhZ2VUeXBlLkNvbmZpZ3VyYXRpb25DaGFuZ2VkLCB0aGlzLl9mdXJuaXR1cmVDb25maWd1cmF0aW9ucyk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2codGhpcy5fZnVybml0dXJlQ29uZmlndXJhdGlvbnMpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuX2NsZWFyRWxlbWVudHMocmVzdWx0Lml0ZW0pO1xyXG4gICAgICB0aGlzLl9jbGVhbnVwKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jbGVhckVsZW1lbnRzKGl0ZW06IEl0ZW0pOiB2b2lkIHtcclxuICAgIGlmIChpdGVtIGluc3RhbmNlb2YgQ3VzdG9tRmxvb3JJdGVtICYmIGl0ZW0udXNlckRhdGEgJiYgaXRlbS51c2VyRGF0YS5pdGVtSWQpIHtcclxuICAgICAgdGhpcy5iYXNlRWxlbWVudE5vZGVJZCA9IHVuZGVmaW5lZDtcclxuICAgICAgdGhpcy5fb3JpZ2luYWxFbGVtZW50UG9zaXRpb24uc2V0KDAsIDAsIDApO1xyXG4gICAgICB0aGlzLl9lbGVtZW50U2VydmljZS5yZW1vdmVFbGVtZW50KGl0ZW0udXNlckRhdGEuaXRlbUlkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2hhbmRsZUludGVncmF0aW9uQ29ubmVjdGlvbnMoaWQ6IHN0cmluZywgb2JqZWN0OiBJdGVtKTogdm9pZCB7XHJcbiAgICBjb25zdCBwYXJ0czogRnVybml0dXJlUGFydEludGVncmF0aW9uW10gPSBbXTtcclxuICAgIGNvbnN0IGNoaWxkUGFydHM6IE9iamVjdDNEW10gPSBvYmplY3QuY29uZmlndXJhYmxlID8gb2JqZWN0LmNoaWxkcmVuIDogW29iamVjdF07XHJcbiAgICBjb25zdCBsZW46IG51bWJlciA9IGNoaWxkUGFydHMubGVuZ3RoO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICBjb25zdCBjaGlsZDogYW55ID0gPEN1c3RvbU9iamVjdDNEPmNoaWxkUGFydHNbaV07XHJcbiAgICAgIGNvbnN0IGNvbm5lY3Rpb246IEZ1cm5pdHVyZVBhcnRJbnRlZ3JhdGlvbiA9IG5ldyBGdXJuaXR1cmVQYXJ0SW50ZWdyYXRpb24oKTtcclxuICAgICAgY29uc3QgdmFyaWF0aW9uczogRnVybml0dXJlUGFydFZhcmlhdGlvbltdID0gW107XHJcbiAgICAgIGlmIChjaGlsZC51c2VyRGF0YSAmJiBjaGlsZC51c2VyRGF0YS5zZWxlY3Rpb24gJiYgY2hpbGQudXNlckRhdGEuc2VsZWN0aW9uLmRlY29Ob2RlKSB7XHJcbiAgICAgICAgY29ubmVjdGlvbi5JZCA9IGNoaWxkUGFydHMuZmluZEluZGV4KGMgPT4gYyA9PT0gY2hpbGQpLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgY29ubmVjdGlvbi5TdXBwbGllckFydGljbGVOciA9IGNoaWxkLnVzZXJEYXRhLnNlbGVjdGlvbi5zdXBwbGllckFydGljbGVOcjtcclxuICAgICAgICBjb25uZWN0aW9uLkJyYW5kSWRlbnRpZmllciA9IGNoaWxkLnVzZXJEYXRhLnNlbGVjdGlvbi5kZWNvTm9kZS5icmFuZElkO1xyXG4gICAgICAgIGNvbm5lY3Rpb24uQnJhbmREZXNjcmlwdGlvbiA9IGNoaWxkLnVzZXJEYXRhLnNlbGVjdGlvbi5kZWNvTm9kZS5nYW1lT2JqZWN0TmFtZTtcclxuICAgICAgICBjb25uZWN0aW9uLlBvc2l0aW9uID0gY2hpbGQucG9zaXRpb247XHJcbiAgICAgICAgY29ubmVjdGlvbi5Sb3RhdGlvbiA9IGNoaWxkLnJvdGF0aW9uO1xyXG4gICAgICAgIGlmIChjaGlsZC51c2VyRGF0YS5zZWxlY3Rpb24udmFyaWF0aW9ucykge1xyXG4gICAgICAgICAgaWYgKGNoaWxkLnVzZXJEYXRhLnNlbGVjdGlvbi52YXJpYXRpb25zLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgICBjb25zdCB2YXJpYXRpb246IGFueSA9IGNoaWxkLnVzZXJEYXRhLnNlbGVjdGlvbi52YXJpYXRpb25zWzBdO1xyXG4gICAgICAgICAgICBjb25uZWN0aW9uLlZhcmlhdGlvbiA9IHZhcmlhdGlvbi5icmFuZElkO1xyXG4gICAgICAgICAgICBjb25uZWN0aW9uLlZhcmlhdGlvbkRlc2NyaXB0aW9uID0gdmFyaWF0aW9uLmdhbWVPYmplY3ROYW1lO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjaGlsZC51c2VyRGF0YS5zZWxlY3Rpb24udmFyaWF0aW9ucy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHZhcmlhdGlvbjogYW55ID0gY2hpbGQudXNlckRhdGEuc2VsZWN0aW9uLnZhcmlhdGlvbnNbal07XHJcbiAgICAgICAgICAgICAgY29uc3QgdmFyaWF0aW9uUGFydDogRnVybml0dXJlUGFydFZhcmlhdGlvbiA9IG5ldyBGdXJuaXR1cmVQYXJ0VmFyaWF0aW9uKCk7XHJcbiAgICAgICAgICAgICAgdmFyaWF0aW9uUGFydC5WYXJpYXRpb24gPSB2YXJpYXRpb24uYnJhbmRJZDtcclxuICAgICAgICAgICAgICB2YXJpYXRpb25QYXJ0LlZhcmlhdGlvbkRlc2NyaXB0aW9uID0gdmFyaWF0aW9uLmdhbWVPYmplY3ROYW1lO1xyXG4gICAgICAgICAgICAgIHZhcmlhdGlvblBhcnQuTWF0ZXJpYWxJZCA9IHZhcmlhdGlvbi5tYXRlcmlhbElkO1xyXG4gICAgICAgICAgICAgIHZhcmlhdGlvblBhcnQuU3VwcGxpZXJBcnRpY2xlTnIgPSB2YXJpYXRpb24uc3VwcGxpZXJBcnRpY2xlTnI7XHJcbiAgICAgICAgICAgICAgdmFyaWF0aW9uUGFydC5PcHRpb24gPSB2YXJpYXRpb24ub3B0aW9uVGV4dDtcclxuICAgICAgICAgICAgICB2YXJpYXRpb25zLnB1c2godmFyaWF0aW9uUGFydCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29ubmVjdGlvbi5WYXJpYXRpb25zID0gdmFyaWF0aW9ucztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7IC8vIGEtYXJ0aWtlbFxyXG4gICAgICAgIGNvbm5lY3Rpb24uSWQgPSBjaGlsZFBhcnRzLmZpbmRJbmRleChjID0+IGMgPT09IGNoaWxkKS50b1N0cmluZygpO1xyXG4gICAgICAgIGNvbm5lY3Rpb24uQnJhbmRJZGVudGlmaWVyID0gY2hpbGQubWV0YWRhdGEuaXRlbUlkZW50aWZpZXI7XHJcbiAgICAgICAgY29ubmVjdGlvbi5CcmFuZERlc2NyaXB0aW9uID0gY2hpbGQubWV0YWRhdGEuaXRlbU5hbWU7XHJcbiAgICAgICAgY29ubmVjdGlvbi5Qb3NpdGlvbiA9IGNoaWxkLnBvc2l0aW9uO1xyXG4gICAgICAgIGNvbm5lY3Rpb24uUm90YXRpb24gPSBjaGlsZC5yb3RhdGlvbjtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBjb25uZWN0b3JzOiBGdXJuaXR1cmVDb25uZWN0ZWRQYXJ0SW50ZWdyYXRpb25bXSA9IFtdO1xyXG4gICAgICBjb25zdCBjbGVuOiBudW1iZXIgPSBjaGlsZC5jaGlsZHJlbi5sZW5ndGg7XHJcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY2xlbjsgaisrKSB7XHJcbiAgICAgICAgY29uc3QgY29ubmVjdG9yOiBhbnkgPSBjaGlsZC5jaGlsZHJlbltqXTtcclxuICAgICAgICBpZiAoKGNvbm5lY3RvciBpbnN0YW5jZW9mIEN1c3RvbU9iamVjdDNEIHx8IGNvbm5lY3RvciBpbnN0YW5jZW9mIEN1c3RvbU1lc2gpICYmIChjb25uZWN0b3IgYXMgYW55KS5jb25uZWN0ZWRUbykge1xyXG4gICAgICAgICAgY29uc3QgY29ubjogRnVybml0dXJlQ29ubmVjdGVkUGFydEludGVncmF0aW9uID0gbmV3IEZ1cm5pdHVyZUNvbm5lY3RlZFBhcnRJbnRlZ3JhdGlvbigpO1xyXG4gICAgICAgICAgY29ubi5Db25uZWN0aW9uTGFiZWwgPSBjb25uZWN0b3IubmFtZTtcclxuICAgICAgICAgIGNvbnN0IGZvcmVpZ25QYXJ0SWR4OiBudW1iZXIgPSB0aGlzLl9jdXJyZW50Q3VzdG9tRmxvb3JHcm91cC5jaGlsZHJlbi5maW5kSW5kZXgoYyA9PiBjLm5hbWUgPT09IChjb25uZWN0b3IgYXMgYW55KS5jb25uZWN0ZWRUbyk7XHJcbiAgICAgICAgICBjb25uLkZvcmVpZ25Db25uZWN0aW9uTGFiZWwgPSB0aGlzLl9jdXJyZW50Q3VzdG9tRmxvb3JHcm91cC5jaGlsZHJlbltmb3JlaWduUGFydElkeF0udXNlckRhdGEuc2VsZWN0aW9uLmRlY29Ob2RlLmdhbWVPYmplY3ROYW1lO1xyXG4gICAgICAgICAgY29ubi5Gb3JlaWduUGFydElkID0gZm9yZWlnblBhcnRJZHgudG9TdHJpbmcoKTtcclxuICAgICAgICAgIGNvbm4uUG9zaXRpb24gPSBjb25uZWN0b3IucG9zaXRpb247XHJcbiAgICAgICAgICBjb25uLlJvdGF0aW9uID0gY29ubmVjdG9yLnJvdGF0aW9uO1xyXG4gICAgICAgICAgY29ubmVjdG9ycy5wdXNoKGNvbm4pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBjb25uZWN0aW9uLkNvbm5lY3RlZFBhcnRzID0gY29ubmVjdG9ycztcclxuICAgICAgcGFydHMucHVzaChjb25uZWN0aW9uKTtcclxuICAgIH1cclxuICAgIHRoaXMuX3Vwc2VydEZ1cm5pdHVyZShpZCwge1BhcnRzOiBwYXJ0c30sIG9iamVjdCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF91cHNlcnRGdXJuaXR1cmUoaWQ6IHN0cmluZywgb2JqZWN0OiBhbnksIGl0ZW06IEl0ZW0pOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9pbnRlZ3JhdGlvbkVuYWJsZWQgJiYgIWl0ZW0ubWV0YWRhdGEub2Jzb2xldGUpIHtcclxuICAgICAgY29uc3QgaWR4OiBudW1iZXIgPSB0aGlzLl9mdXJuaXR1cmVDb25maWd1cmF0aW9ucy5maW5kSW5kZXgoZiA9PiBmLklkID09PSBpZCk7XHJcbiAgICAgIGxldCBmdXJuaXR1cmU6IEZ1cm5pdHVyZUludGVncmF0aW9uO1xyXG4gICAgICBpZiAoaWR4IDwgMCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9mdXJuaXR1cmVDb25maWd1cmF0aW9ucy5sZW5ndGggPT09IDEgJiYgIXRoaXMuX2Z1cm5pdHVyZUNvbmZpZ3VyYXRpb25zWzBdLklkKSB7IC8vIGVtcHR5IGVudHJ5IGZvciBtcnAgY29kZSwgcmUtdXNlIHRoYXQgb25lXHJcbiAgICAgICAgICBmdXJuaXR1cmUgPSB0aGlzLl9mdXJuaXR1cmVDb25maWd1cmF0aW9uc1swXTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgZnVybml0dXJlID0gbmV3IEZ1cm5pdHVyZUludGVncmF0aW9uKCk7XHJcbiAgICAgICAgICB0aGlzLl9mdXJuaXR1cmVDb25maWd1cmF0aW9ucy5wdXNoKGZ1cm5pdHVyZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZ1cm5pdHVyZS5JZCA9IGlkO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZ1cm5pdHVyZSA9IHRoaXMuX2Z1cm5pdHVyZUNvbmZpZ3VyYXRpb25zW2lkeF07XHJcbiAgICAgIH1cclxuICAgICAgZnVybml0dXJlLk1ycENvZGUgPSB0aGlzLl9wZXJtYW5lbnRTdG9yZVNlcnZpY2UuY29kZTtcclxuICAgICAgZm9yIChjb25zdCBrZXkgaW4gb2JqZWN0KSB7XHJcbiAgICAgICAgaWYgKGZ1cm5pdHVyZS5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIG9iamVjdC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgICBmdXJuaXR1cmVba2V5XSA9IG9iamVjdFtrZXldO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2V0Q29kZU9uRnVybml0dXJlQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9pbnRlZ3JhdGlvbkVuYWJsZWQpIHtcclxuICAgICAgaWYgKHRoaXMuX2Z1cm5pdHVyZUNvbmZpZ3VyYXRpb25zLmxlbmd0aCA8IDEpIHtcclxuICAgICAgICBjb25zdCBmdXJuaXR1cmU6IEZ1cm5pdHVyZUludGVncmF0aW9uID0gbmV3IEZ1cm5pdHVyZUludGVncmF0aW9uKCk7XHJcbiAgICAgICAgZnVybml0dXJlLk1ycENvZGUgPSB0aGlzLl9wZXJtYW5lbnRTdG9yZVNlcnZpY2UuY29kZTtcclxuICAgICAgICB0aGlzLl9mdXJuaXR1cmVDb25maWd1cmF0aW9ucy5wdXNoKGZ1cm5pdHVyZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fZnVybml0dXJlQ29uZmlndXJhdGlvbnMuZm9yRWFjaChmID0+IGYuTXJwQ29kZSA9IHRoaXMuX3Blcm1hbmVudFN0b3JlU2VydmljZS5jb2RlKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9tZXNzYWdlQnVzLmVtaXQoTWVzc2FnZVR5cGUuQ29uZmlndXJhdGlvbkNoYW5nZWQsIHRoaXMuX2Z1cm5pdHVyZUNvbmZpZ3VyYXRpb25zKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NhbkNvbm5lY3RTZWxlY3Rpb25zKHNlbDE6IFNlbGVjdGlvbiwgc2VsMjogU2VsZWN0aW9uKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXNlbDEuZGVjb05vZGUgfHwgIXNlbDIuZGVjb05vZGUpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgbGV0IGNhbkNvbm5lY3Q6IGJvb2xlYW4gPSBzZWwyLmRlY29Ob2RlLnR5cGUgIT09IERlY29Ob2RlVHlwZS5QYXJ0O1xyXG4gICAgaWYgKCFjYW5Db25uZWN0KSB7XHJcbiAgICAgIGNvbnN0IGxlbjogbnVtYmVyID0gc2VsMS5kZWNvTm9kZS5jb25uZWN0b3JzLmxlbmd0aDtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGxlbmk6IG51bWJlciA9IHNlbDIuZGVjb05vZGUuY29ubmVjdG9ycy5sZW5ndGg7XHJcbiAgICAgICAgZm9yIChsZXQgaWkgPSAwOyBpaSA8IGxlbmk7IGlpKyspIHtcclxuICAgICAgICAgIGNhbkNvbm5lY3QgPSBTY2VuZTNEVXRpbC5DYW5TZWxlY3RvckNvbm5lY3Qoc2VsMS5kZWNvTm9kZS5jb25uZWN0b3JzLCBzZWwxLmRlY29Ob2RlLmNvbm5lY3RvcnNbaV0sIHNlbDIuZGVjb05vZGUuY29ubmVjdG9yc1tpaV0pO1xyXG4gICAgICAgICAgaWYgKGNhbkNvbm5lY3QpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiBjYW5Db25uZWN0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaGFuZGxlU2VsZWN0aW9uc1JlY2VpdmVkKG1ldGFkYXRhOiBNZXRhZGF0YSkge1xyXG4gICAgaWYgKHRoaXMuX2Fuc3dlclNlbGVjdGVkLmxlbmd0aCA+IDApIHtcclxuICAgICAgY29uc3Qgc2VsZWN0aW9uOiBTZWxlY3Rpb24gPVxyXG4gICAgICAgIHRoaXMuc2VsZWN0aW9ucy5maW5kKHMgPT4gcy5ub2RlSWQgPT09IHRoaXMuX2Fuc3dlclNlbGVjdGVkW3RoaXMuX2Fuc3dlclNlbGVjdGVkLmxlbmd0aCAtIDFdLm5vZGVJZCk7XHJcbiAgICAgIGlmIChzZWxlY3Rpb24pIHtcclxuICAgICAgICBsZXQgaXRlbU5hbWU6IHN0cmluZyA9ICcnO1xyXG4gICAgICAgIGlmIChtZXRhZGF0YS5pdGVtTmFtZSA9PT0gJycpIHtcclxuICAgICAgICAgIGlmIChtZXRhZGF0YS5pdGVtRGVzY3JpcHRpb24gIT09ICcnKSB7XHJcbiAgICAgICAgICAgIGl0ZW1OYW1lID0gbWV0YWRhdGEuaXRlbURlc2NyaXB0aW9uO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaXRlbU5hbWUgPSBtZXRhZGF0YS5pdGVtSWRlbnRpZmllcjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaXRlbU5hbWUgPSBtZXRhZGF0YS5pdGVtTmFtZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fZ29vZ2xlVGFnTWFuYWdlci5zZW5kRXZlbnQoR29vZ2xlVGFnTWFuYWdlckV2ZW50LkFuc3dlckNob3Nlbiwge1xyXG4gICAgICAgICAgJ2FydGljbGVOcic6IG1ldGFkYXRhLml0ZW1JZGVudGlmaWVyLFxyXG4gICAgICAgICAgJ3Byb2R1Y3QnOiBpdGVtTmFtZSxcclxuICAgICAgICAgICdvcHRpb25EZXNjcmlwdGlvbic6IHNlbGVjdGlvbi5jb21tZXJjaWFsQW5zd2VyID8gc2VsZWN0aW9uLmNvbW1lcmNpYWxBbnN3ZXIgOiBzZWxlY3Rpb24uYW5zd2VyLFxyXG4gICAgICAgICAgJ29wdGlvblBhdGgnOiBzZWxlY3Rpb24uc2VsZWN0aW9uXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2hhbmRsZUNvbm5lY3Rpb25SZXNldCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9jdXJyZW50Q3VzdG9tRmxvb3JHcm91cCkge1xyXG4gICAgICB0aGlzLl9jdXJyZW50Q3VzdG9tRmxvb3JHcm91cC5zZXRVbnNlbGVjdGVkKCk7XHJcbiAgICAgIHRoaXMuX21lc3NhZ2VCdXMuZW1pdChNZXNzYWdlVHlwZS5JdGVtVW5zZWxlY3RlZCwgdW5kZWZpbmVkKTtcclxuICAgICAgdGhpcy5fc2hvd1dhcm5pbmcoe3RpdGxlOiAnV0FSTklORycsIG1lc3NhZ2U6ICdSRUZSRVNIX0RVRV9UT19JTkFDVElWSVRZJ30pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaGFuZGxlQW5zd2VyU2VsZWN0ZWQoYW5zd2VyOiBBbnN3ZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuX2Fuc3dlclNlbGVjdGVkLnB1c2goYW5zd2VyKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjYW5jZWxBbnN3ZXIobWV0YWRhdGE6IE1ldGFkYXRhLCByZWJ1aWxkOiBib29sZWFuID0gdHJ1ZSwgZ2V0QW5zd2VyczogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBhd2FpdCB0aGlzLl9pT25lLmNhbmNlbEFuc3dlcigpO1xyXG4gICAgaWYgKHJlYnVpbGQpIHtcclxuICAgICAgdGhpcy5fc3RhcnRUb0J1aWxkRnJvbUNvbmZpZ3VyYXRvcihtZXRhZGF0YSk7XHJcbiAgICB9IGVsc2UgaWYgKGdldEFuc3dlcnMpIHsgLy8gaWYgbm90IHJlYnVpbGQgdGhlbiBjaGVjayBpZiB3ZSBuZWVkIHRvIGdldCBhbnN3ZXJzXHJcbiAgICAgIGNvbnN0IHF1ZXN0aW9uQW5kQW5zd2VyczogUXVlc3Rpb25BbmRBbnN3ZXJzID0gYXdhaXQgdGhpcy5faU9uZS5nZXRRdWVzdGlvbkFuZEFuc3dlcnNBc3luYygpOyAvLyBzZWUgaWYgdGhlcmUgaXMgdXNlciBpbnB1dCBuZWVkZWRcclxuICAgICAgdGhpcy5faU9uZS5oYW5kbGVBbnN3ZXJzUmVjZWl2ZWQocXVlc3Rpb25BbmRBbnN3ZXJzLmFuc3dlcnMpO1xyXG4gICAgICB0aGlzLl9hcHBFdmVudFNlcnZpY2UuYW5zd2VyQ291bnRSZWNlaXZlZC5uZXh0KHF1ZXN0aW9uQW5kQW5zd2Vycy5hbnN3ZXJzLmxlbmd0aCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgc2VsZWN0U2VsZWN0aW9uKFxyXG4gICAgc2VsZWN0aW9uOiBTZWxlY3Rpb24sIG1ldGFkYXRhOiBNZXRhZGF0YSwgZm9yY2VCYWNrVG9Ob2RlPzogYm9vbGVhbiwgYWZ0ZXI/OiBib29sZWFuLCBjb25uZWN0b3I/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGF3YWl0IHRoaXMuX2lPbmUuc2VsZWN0U2VsZWN0aW9uKHNlbGVjdGlvbiwgZm9yY2VCYWNrVG9Ob2RlLCBhZnRlciwgY29ubmVjdG9yKTtcclxuICAgIHRoaXMuX2dlbmVyaWNTZWxlY3Rpb24gPSBzZWxlY3Rpb24uZ2VuZXJpYztcclxuICAgIHRoaXMuX3N0YXJ0VG9CdWlsZEZyb21Db25maWd1cmF0b3IobWV0YWRhdGEpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGRlbGV0ZVNlbGVjdGlvbihzZWxlY3Rpb246IFNlbGVjdGlvbiwgbWV0YWRhdGE6IE1ldGFkYXRhKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLl9lbGVtZW50U2VydmljZS5yZW1vdmVFbGVtZW50KHNlbGVjdGlvbi5pbnN0YW5jZUlkLCBzZWxlY3Rpb24ubm9kZSk7XHJcbiAgICBhd2FpdCB0aGlzLl9pT25lLmRlbGV0ZVNlbGVjdGlvbihzZWxlY3Rpb24pO1xyXG4gICAgdGhpcy5fc3RhcnRUb0J1aWxkRnJvbUNvbmZpZ3VyYXRvcihtZXRhZGF0YSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgcmVwbGFjZVNlbGVjdGlvbihzZWxlY3Rpb246IFNlbGVjdGlvbiwgbWV0YWRhdGE6IE1ldGFkYXRhKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBhd2FpdCB0aGlzLl9pT25lLnJlcGxhY2VTZWxlY3Rpb24oc2VsZWN0aW9uKTtcclxuICAgIHRoaXMuX3N0YXJ0VG9CdWlsZEZyb21Db25maWd1cmF0b3IobWV0YWRhdGEpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHNlbGVjdEFuc3dlcihhbnN3ZXI6IEFuc3dlciwgaW5wdXQ6IHN0cmluZywgbWV0YWRhdGE6IE1ldGFkYXRhKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLl9wcmVsb2FkTWF0ZXJpYWwoYW5zd2VyKTtcclxuICAgIGF3YWl0IHRoaXMuX2lPbmUuc2VsZWN0QW5zd2VyKGFuc3dlciwgaW5wdXQpO1xyXG4gICAgdGhpcy5faGFuZGxlQW5zd2VyU2VsZWN0ZWQoYW5zd2VyKTtcclxuICAgIGNvbnN0IHJlc3VsdDogQ3VzdG9tRmxvb3JHcm91cFJlc3VsdCA9IGF3YWl0IHRoaXMuX3N0YXJ0VG9CdWlsZEZyb21Db25maWd1cmF0b3IobWV0YWRhdGEpO1xyXG4gICAgdGhpcy5hbnN3ZXJTZWxlY3RlZC5uZXh0KHJlc3VsdCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZXRBY3RpdmVGdXJuaXR1cmUoaW5zdGFuY2VJZDogc3RyaW5nKTogSXRlbSB7XHJcbiAgICBjb25zdCBjb25maWd1cmFibGVzOiBhbnlbXSA9IHRoaXMuX2l0ZW1TZXJ2aWNlLmdldENvbmZpZ3VyYWJsZXMoKTtcclxuICAgIGNvbnN0IGxlbjogbnVtYmVyID0gY29uZmlndXJhYmxlcy5sZW5ndGg7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgIGlmIChjb25maWd1cmFibGVzW2ldLm1ldGFkYXRhICYmIGNvbmZpZ3VyYWJsZXNbaV0ubWV0YWRhdGEuaXRlbUlkID09PSBpbnN0YW5jZUlkICYmICFjb25maWd1cmFibGVzW2ldLnRlbXBPYmplY3QpIHtcclxuICAgICAgICByZXR1cm4gY29uZmlndXJhYmxlc1tpXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfbGlua1NlbGVjdGlvbnNBbmREZWNvcygpOiB2b2lkIHtcclxuICAgIGNvbnN0IGxlbjogbnVtYmVyID0gdGhpcy5zZWxlY3Rpb25zLmxlbmd0aDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgLy8gY29uc3QgaWQ6IHN0cmluZyA9IHRoaXMuc2VsZWN0aW9uc1tpXS5hcnROb2RlSWREZWNvO1xyXG4gICAgICBsZXQgZGVjbzogYW55ID0gdGhpcy5faU9uZS5kZWNvTm9kZXMuZmluZChkID0+IGQuaWQgPT09IHRoaXMuc2VsZWN0aW9uc1tpXS5hcnROb2RlSWREZWNvKTtcclxuICAgICAgaWYgKCFkZWNvKSB7XHJcbiAgICAgICAgZGVjbyA9IG5ldyBEZWNvTm9kZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChkZWNvLnR5cGUgIT09IERlY29Ob2RlVHlwZS5WYXJpYXRpb24pIHtcclxuICAgICAgICBjb25zdCB2YXJpYXRpb246IGFueSA9IHRoaXMuX2dldFZhcmlhdGlvbnMoKS5maW5kKHYgPT4gdi5wYXJlbnRJZCA9PT0gdGhpcy5zZWxlY3Rpb25zW2ldLmFydE5vZGVJZERlY28pO1xyXG4gICAgICAgIGlmICh2YXJpYXRpb24pIHtcclxuICAgICAgICAgIGRlY28udmFyaWF0aW9uID0gdmFyaWF0aW9uO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNlbGVjdGlvbnNbaV0uZGVjb05vZGUgPSBkZWNvO1xyXG4gICAgfVxyXG4gICAgdGhpcy5faU9uZS5zZWxlY3Rpb25zQW5kRGVjb3NMaW5rZWQubmV4dCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY3JlYXRlQ29uZmlndXJhYmxlSXRlbShpbnN0YW5jZUlkOiBzdHJpbmcsIG1ldGFkYXRhOiBNZXRhZGF0YSk6IEl0ZW0ge1xyXG4gICAgLy8gY29uc3QgZnVybml0dXJlOiBJdGVtID0gdGhpcy5fZ2V0QWN0aXZlRnVybml0dXJlKGluc3RhbmNlSWQpO1xyXG4gICAgLy8gY29uc3QgY2xvbmVTZWxlY3Rpb25zID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnNlbGVjdGlvbnMpKTtcclxuICAgIC8vIGNsb25lU2VsZWN0aW9ucy5mb3JFYWNoKHMgPT4ge1xyXG4gICAgLy8gICBzLmltYWdlRGF0YSA9IHVuZGVmaW5lZDtcclxuICAgIC8vICAgcy5pbWFnZURhdGFMYXN0QW5zd2VyID0gdW5kZWZpbmVkO1xyXG4gICAgLy8gfSk7XHJcbiAgICAvLyBpZiAoZnVybml0dXJlKSB7XHJcbiAgICAvLyAgIGZ1cm5pdHVyZS5tZXRhZGF0YS5kZWNvcyA9IEFycmF5LmZyb20odGhpcy5faU9uZS5kZWNvTm9kZXMpO1xyXG4gICAgLy8gICBmdXJuaXR1cmUubWV0YWRhdGEuc2VsZWN0aW9ucyA9IGNsb25lU2VsZWN0aW9ucztcclxuICAgIC8vICAgZnVybml0dXJlLm1hcmtGb3JEZWxldGlvbkNoaWxkcmVuKCk7XHJcbiAgICAvLyAgIHJldHVybiBmdXJuaXR1cmU7XHJcbiAgICAvLyB9XHJcbiAgICBpZiAoIW1ldGFkYXRhLnBvc2l0aW9uKSB7XHJcbiAgICAgIG1ldGFkYXRhLnBvc2l0aW9uID0gdGhpcy5zdGFydFBvc2l0aW9uIHx8IGRlZmF1bHRQb3NpdGlvbjtcclxuICAgIH1cclxuICAgIGlmICghbWV0YWRhdGEucm90YXRpb24pIHtcclxuICAgICAgbWV0YWRhdGEucm90YXRpb24gPSBtZXRhZGF0YS5kZWZhdWx0MTgwID8gZGVmYXVsdFJvdGF0aW9uIDogbmV3IEV1bGVyKCk7XHJcbiAgICB9XHJcbiAgICAvLyBJZiBpdGVtVHlwZSBpcyBkaWZmZXJlbnQgaW4gYXJ0aWNsZSBjb21wYXJlZCB0byBzYXZlZCB2YWx1ZSBpbiB0aGUgLmpzb24sIHRoZSBpdGVtVHlwZSBpbiBhcnRpY2xlIGlzIGFwcGxpZWRcclxuICAgIC8vIG1ldGFkYXRhLml0ZW1UeXBlID0gdGhpcy5pdGVtVHlwZSAmJiB0aGlzLml0ZW1UeXBlICE9PSBtZXRhZGF0YS5pdGVtVHlwZSA/IHRoaXMuaXRlbVR5cGUgOiBtZXRhZGF0YS5pdGVtVHlwZTtcclxuICAgIGNvbnN0IGl0ZW1Db25zdHJ1Y3RvciA9IEZhY3RvcnkuZ2V0Q2xhc3ModGhpcy5zdGFuZEFsb25lID8gSXRlbVR5cGUuQ3VzdG9tRmxvb3JHcm91cCA6IG1ldGFkYXRhLml0ZW1UeXBlKTtcclxuICAgIGNvbnN0IGl0ZW0gPSBuZXcgaXRlbUNvbnN0cnVjdG9yKFxyXG4gICAgICBtZXRhZGF0YSxcclxuICAgICAgdW5kZWZpbmVkLCAvLyBiYXNlIG9uIGVtcHR5IG9iamVjdFxyXG4gICAgICB7XHJcbiAgICAgICAgbW91c2VPdmVyOiB0aGlzLm1vdXNlT3ZlcixcclxuICAgICAgICBtb3VzZU9mZjogdGhpcy5tb3VzZU9mZixcclxuICAgICAgICBpdGVtU2VsZWN0ZWQ6IHRoaXMuc2VsZWN0SXRlbSxcclxuICAgICAgICBpdGVtVW5zZWxlY3RlZDogdGhpcy51blNlbGVjdEl0ZW0sXHJcbiAgICAgICAgZWxlbWVudFNlbGVjdGVkOiB0aGlzLnNlbGVjdEVsZW1lbnQsXHJcbiAgICAgICAgZWxlbWVudFVuc2VsZWN0ZWQ6IHRoaXMudW5TZWxlY3RFbGVtZW50LFxyXG4gICAgICAgIGNvbmZpZ3VyaW5nQ2hhbmdlZDogdGhpcy5jaGFuZ2VDb25maWd1cmVNb2RlLFxyXG4gICAgICAgIGNoaWxkRWxlbWVudFBvc2l0aW9uQ2hhbmdlZEhhbmRsZXI6IHRoaXMubW92ZUNoaWxkRWxlbWVudCxcclxuICAgICAgICBjaGlsZEVsZW1lbnRQbGFjZUhhbmRsZXI6IHRoaXMucGxhY2VDaGlsZEVsZW1lbnRcclxuICAgICAgICAvKlxyXG4gICAgICAgICAgICAgICAgY2hpbGRFbGVtZW50UG9zaXRpb25DaGFuZ2VkSGFuZGxlcjogYWRqdXN0YWJsZSA/IHRoaXMubW92ZUNoaWxkRWxlbWVudCA6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgIGNoaWxkRWxlbWVudFBsYWNlSGFuZGxlcjogYWRqdXN0YWJsZSA/IHRoaXMucGxhY2VDaGlsZEVsZW1lbnQgOiB1bmRlZmluZWRcclxuICAgICAgICAqL1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gICAgaXRlbS5jYW5EZWxldGUgPSAhdGhpcy5zdGFuZEFsb25lO1xyXG4gICAgaXRlbS5jYW5Db3B5ID0gIXRoaXMuc3RhbmRBbG9uZTtcclxuICAgIGl0ZW0uYWxsd2F5c0NvbmZpZ3VyZU1vZGUgPSB0aGlzLnN0YW5kQWxvbmU7XHJcbiAgICBpdGVtLmhpZ2hMaWdodERpc2FibGVkID0gIXRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5vcHRpb25zLnVzZVN0YW5kYWxvbmVIaWdoTGlnaHQ7XHJcbiAgICBpdGVtLnRlbXBPYmplY3QgPSB0cnVlO1xyXG4gICAgaXRlbS5uYW1lID0gbWV0YWRhdGEuaXRlbU5hbWUgKyAnX2Nsb25lJztcclxuICAgIGl0ZW0udmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5faXRlbVNlcnZpY2UuYWRkSXRlbShpdGVtKTtcclxuICAgIC8vIHRoaXMuX3Vwc2VydEZ1cm5pdHVyZShtZXRhZGF0YS5pdGVtSWQsIHtCcmFuZElkZW50aWZpZXI6IG1ldGFkYXRhLml0ZW1JZGVudGlmaWVyfSwgaXRlbSk7XHJcbiAgICByZXR1cm4gaXRlbTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NyZWF0ZVBvc2l0aW9uQW5pbWF0aW9uKG9iamVjdDogT2JqZWN0M0QsIGZyb206IFZlY3RvcjMsIHRvOiBWZWN0b3IzLCBlYXNpbmc6IFRXRUVOLkVhc2luZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgdHdlZW5Gcm9tOiBWZWN0b3IzID0gbmV3IFZlY3RvcjMoKS5jb3B5KGZyb20pO1xyXG4gICAgY29uc3QgdHdlZW4gPSBuZXcgVFdFRU4uVHdlZW4odHdlZW5Gcm9tKVxyXG4gICAgICAudG8odG8sIDEwMDApXHJcbiAgICAgIC5lYXNpbmcoZWFzaW5nKVxyXG4gICAgICAub25VcGRhdGUoKCkgPT4ge1xyXG4gICAgICAgIG9iamVjdC5wb3NpdGlvbi5jb3B5KHR3ZWVuRnJvbSk7XHJcbiAgICAgICAgdGhpcy5fc2NlbmVTZXJ2aWNlLm5lZWRzUmVuZGVyID0gdHJ1ZTtcclxuICAgICAgfSk7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB0d2Vlbi5vbkNvbXBsZXRlKHJlc29sdmUuYmluZCh0aGlzLCB0d2VlbikpLm9uU3RvcChyZWplY3QpLnN0YXJ0KCkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfYW5pbWF0ZUNoYW5nZXMoZnVybml0dXJlOiBJdGVtLCBjaGFuZ2VzOiBDaGFuZ2VzSW50ZXJmYWNlW10pOiBQcm9taXNlPHZvaWRbXT4ge1xyXG4gICAgLy8gaXQncyBjaHJpc3RtYXNzc1xyXG4gICAgY29uc3QgYW5pbWF0aW9uczogUHJvbWlzZTx2b2lkPltdID0gW107XHJcbiAgICBpZiAoZnVybml0dXJlIGluc3RhbmNlb2YgQ3VzdG9tRmxvb3JJdGVtKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hhbmdlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGVhc2luZzogVFdFRU4uRWFzaW5nID0gIWNoYW5nZXNbaV0ub2xkUG9zaXRpb24gPyBUV0VFTi5FYXNpbmcuRXhwb25lbnRpYWwuT3V0IDpcclxuICAgICAgICAgICghY2hhbmdlc1tpXS5uZXdQb3NpdGlvbiA/IFRXRUVOLkVhc2luZy5FeHBvbmVudGlhbC5PdXQgOiBUV0VFTi5FYXNpbmcuRXhwb25lbnRpYWwuSW5PdXQpO1xyXG4gICAgICAgIGNvbnN0IGZyb206IFZlY3RvcjMgPVxyXG4gICAgICAgICAgY2hhbmdlc1tpXS5vbGRQb3NpdGlvbiA/IG5ldyBWZWN0b3IzKCkuY29weShjaGFuZ2VzW2ldLm9sZFBvc2l0aW9uKSA6IG5ldyBWZWN0b3IzKCkuY29weShjaGFuZ2VzW2ldLm5ld1Bvc2l0aW9uKS5zZXRZKDEwKTtcclxuICAgICAgICBjb25zdCB0bzogVmVjdG9yMyA9XHJcbiAgICAgICAgICBjaGFuZ2VzW2ldLm5ld1Bvc2l0aW9uID8gbmV3IFZlY3RvcjMoKS5jb3B5KGNoYW5nZXNbaV0ubmV3UG9zaXRpb24pIDogbmV3IFZlY3RvcjMoKS5jb3B5KGNoYW5nZXNbaV0ub2xkUG9zaXRpb24pLnNldFkoMTApO1xyXG4gICAgICAgIGNvbnN0IG9iajogT2JqZWN0M0QgPSBmdXJuaXR1cmUuZ2V0T2JqZWN0QnlOYW1lKGNoYW5nZXNbaV0ubmFtZSk7XHJcbiAgICAgICAgaWYgKCFmcm9tLmVxdWFscyh0bykpIHtcclxuICAgICAgICAgIGFuaW1hdGlvbnMucHVzaChcclxuICAgICAgICAgICAgdGhpcy5fY3JlYXRlUG9zaXRpb25BbmltYXRpb24ob2JqLCBmcm9tLCB0bywgZWFzaW5nKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBhd2FpdCBQcm9taXNlLmFsbChhbmltYXRpb25zKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX3JlcGxhY2VDdXJyZW50SXRlbShuZXdJdGVtOiBJdGVtLCBtZXRhZGF0YTogTWV0YWRhdGEsIGFuaW1hdGU6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8SXRlbT4ge1xyXG4gICAgY29uc3QgZnVybml0dXJlOiBJdGVtID0gdGhpcy5fZ2V0QWN0aXZlRnVybml0dXJlKG1ldGFkYXRhLml0ZW1JZCk7XHJcbiAgICBjb25zdCBjbG9uZVNlbGVjdGlvbnMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuc2VsZWN0aW9ucykpO1xyXG4gICAgY2xvbmVTZWxlY3Rpb25zLmZvckVhY2gocyA9PiB7XHJcbiAgICAgIHMuaW1hZ2VEYXRhID0gdW5kZWZpbmVkO1xyXG4gICAgICBzLmltYWdlRGF0YUxhc3RBbnN3ZXIgPSB1bmRlZmluZWQ7XHJcbiAgICAgIGlmIChzLmFkZGFibGVzKSB7XHJcbiAgICAgICAgcy5hZGRhYmxlcy5mb3JFYWNoKGEgPT4ge1xyXG4gICAgICAgICAgYS5pbWFnZURhdGEgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgaWYgKGZ1cm5pdHVyZSkge1xyXG4gICAgICBmdXJuaXR1cmUubWV0YWRhdGEuZGVjb3MgPSBBcnJheS5mcm9tKHRoaXMuX2lPbmUuZGVjb05vZGVzKTtcclxuICAgICAgZnVybml0dXJlLm1ldGFkYXRhLnNlbGVjdGlvbnMgPSBjbG9uZVNlbGVjdGlvbnM7XHJcbiAgICAgIGlmIChmdXJuaXR1cmUgaW5zdGFuY2VvZiBDdXN0b21XYWxsRmxvb3JJdGVtKSB7XHJcbiAgICAgICAgKG5ld0l0ZW0gYXMgQ3VzdG9tV2FsbEZsb29ySXRlbSkuY3VycmVudFdhbGwgPSBmdXJuaXR1cmUuY3VycmVudFdhbGw7XHJcbiAgICAgIH1cclxuICAgICAgbmV3SXRlbS51cGRhdGVQaXZvdCgpO1xyXG4gICAgICBjb25zdCBjaGFuZ2VzOiBDaGFuZ2VzSW50ZXJmYWNlW10gPSBmdXJuaXR1cmUgaW5zdGFuY2VvZiBDdXN0b21GbG9vckl0ZW0gPyBPYmplY3RVdGlscy5HZXRDaGFuZ2VzKGZ1cm5pdHVyZS5jaGlsZHJlbiwgbmV3SXRlbS5jaGlsZHJlbikgOiBbXTtcclxuICAgICAgLy8gYW5pbWF0ZSByZW1vdmVkIGl0ZW1zXHJcbiAgICAgIGNvbnN0IHJlbW92ZWRDaGFuZ2VzOiBDaGFuZ2VzSW50ZXJmYWNlW10gPSBjaGFuZ2VzLmZpbHRlcihjID0+ICFjLm5ld1Bvc2l0aW9uKTtcclxuICAgICAgaWYgKGFuaW1hdGUgJiYgcmVtb3ZlZENoYW5nZXMgJiYgcmVtb3ZlZENoYW5nZXMubGVuZ3RoID4gMCkgeyAvLyBhbmltYXRlIGNoYW5nZXMgdG8gdGhlIG1vZGVsXHJcbiAgICAgICAgYXdhaXQgdGhpcy5fYW5pbWF0ZUNoYW5nZXMoZnVybml0dXJlLCByZW1vdmVkQ2hhbmdlcyk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gcmVtb3ZlIGNoaWxkcmVuIGZyb20gZnVybml0dXJlXHJcbiAgICAgIGZ1cm5pdHVyZS5jbGVhckNoaWxkcmVuKCk7XHJcbiAgICAgIC8vIGFkZCBuZXcgY2hpbGRyZW4gdG8gZnVybml0dXJlXHJcbiAgICAgIG5ld0l0ZW0uY2hpbGRyZW4ubWFwKGMgPT4gZnVybml0dXJlLmFkZENoaWxkKGMpKTtcclxuICAgICAgdGhpcy5faXRlbVNlcnZpY2UucmVtb3ZlSXRlbShuZXdJdGVtLCBmYWxzZSwgZmFsc2UpO1xyXG4gICAgICAvLyBhbmltYXRlIChuZXcpIGl0ZW1zXHJcbiAgICAgIGNvbnN0IG90aGVyQ2hhbmdlczogQ2hhbmdlc0ludGVyZmFjZVtdID0gY2hhbmdlcy5maWx0ZXIoYyA9PiBjLm5ld1Bvc2l0aW9uKTtcclxuICAgICAgaWYgKGFuaW1hdGUgJiYgb3RoZXJDaGFuZ2VzICYmIG90aGVyQ2hhbmdlcy5sZW5ndGggPiAwKSB7IC8vIGFuaW1hdGUgY2hhbmdlcyB0byB0aGUgbW9kZWxcclxuICAgICAgICBhd2FpdCB0aGlzLl9hbmltYXRlQ2hhbmdlcyhmdXJuaXR1cmUsIG90aGVyQ2hhbmdlcyk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGZ1cm5pdHVyZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG5ld0l0ZW0udmlzaWJsZSA9IHRydWU7XHJcbiAgICAgIG5ld0l0ZW0udGVtcE9iamVjdCA9IGZhbHNlO1xyXG4gICAgICBuZXdJdGVtLm5hbWUgPSBtZXRhZGF0YS5pdGVtTmFtZTtcclxuICAgICAgdGhpcy5fdXBzZXJ0RnVybml0dXJlKG1ldGFkYXRhLml0ZW1JZCwge0JyYW5kSWRlbnRpZmllcjogbWV0YWRhdGEuaXRlbUlkZW50aWZpZXJ9LCBuZXdJdGVtKTtcclxuICAgICAgcmV0dXJuIG5ld0l0ZW07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbW91c2VPdmVyID0gKCkgPT4ge1xyXG4gICAgdGhpcy5pc01vdXNlT3Zlck9iamVjdCA9IHRydWU7XHJcbiAgfTtcclxuXHJcbiAgcHVibGljIG1vdXNlT2ZmID0gKCkgPT4ge1xyXG4gICAgdGhpcy5pc01vdXNlT3Zlck9iamVjdCA9IGZhbHNlO1xyXG4gIH07XHJcblxyXG4gIHB1YmxpYyBzZWxlY3RJdGVtID0gKG1lc2g6IE1lc2gpID0+IHtcclxuICAgIC8vIHRoaXMuYWN0aXZlSW5zdGFuY2UgPSBtZXNoLnVzZXJEYXRhLml0ZW1JZDtcclxuICB9O1xyXG5cclxuICBwdWJsaWMgdW5TZWxlY3RJdGVtID0gKCkgPT4ge1xyXG4gICAgLy8gdGhpcy5zaG93TGl0ZVNlbGVjdG9yID0gZmFsc2U7XHJcbiAgICAvLyB0aGlzLnNob3dTZWxlY3Rpb25zID0gZmFsc2U7XHJcbiAgfTtcclxuXHJcbiAgcHVibGljIHNlbGVjdEVsZW1lbnQgPSAoZWxlbWVudDogTWVzaCwgbW91c2VQb3M6IFZlY3RvcjMpID0+IHtcclxuICAgIHRoaXMuX2FjdGl2ZUNoaWxkRWxlbWVudCA9IGVsZW1lbnQ7XHJcbiAgICBpZiAoZWxlbWVudC5wYXJlbnQgaW5zdGFuY2VvZiBDdXN0b21PYmplY3QzRCkge1xyXG4gICAgICB0aGlzLl9vcmlnaW5hbEVsZW1lbnRQb3NpdGlvbi5jb3B5KGVsZW1lbnQucGFyZW50LnBvc2l0aW9uKTtcclxuICAgICAgLy8gaWYgKHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwLmFkanVzdGFibGUpIHtcclxuICAgICAgaWYgKHRoaXMuX2lzTW92ZWFibGVPYmplY3QoZWxlbWVudC5wYXJlbnQpKSB7XHJcbiAgICAgICAgY29uc3QgY29ubmVjdG9yOiBhbnkgPSBlbGVtZW50LnBhcmVudC5jaGlsZHJlbi5maW5kKGMgPT4gYy5uYW1lLnRvTG93ZXJDYXNlKCkuaW5kZXhPZignY18nKSA+IC0xKTtcclxuICAgICAgICBpZiAoY29ubmVjdG9yLmNvbm5lY3RlZFRvKSB7XHJcbiAgICAgICAgICBjb25zdCBiYXNlRWxlbWVudDogT2JqZWN0M0QgPSA8Q3VzdG9tT2JqZWN0M0Q+dGhpcy5fY3VycmVudEN1c3RvbUZsb29yR3JvdXAuZ2V0T2JqZWN0QnlOYW1lKGNvbm5lY3Rvci5jb25uZWN0ZWRUbyk7XHJcbiAgICAgICAgICB0aGlzLmJhc2VFbGVtZW50Tm9kZUlkID0gYmFzZUVsZW1lbnQudXNlckRhdGEgJiYgYmFzZUVsZW1lbnQudXNlckRhdGEuc2VsZWN0aW9uID8gYmFzZUVsZW1lbnQudXNlckRhdGEuc2VsZWN0aW9uLm5vZGVJZCA6IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLnRvZ2dsZVNlbGVjdGVkRWxlbWVudC5uZXh0KGVsZW1lbnQpO1xyXG4gIH07XHJcblxyXG4gIHB1YmxpYyB1blNlbGVjdEVsZW1lbnQgPSAoKSA9PiB7XHJcbiAgICB0aGlzLl9hY3RpdmVDaGlsZEVsZW1lbnQgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLnRvZ2dsZVNlbGVjdGVkRWxlbWVudC5uZXh0KHVuZGVmaW5lZCk7XHJcbiAgfTtcclxuXHJcbiAgcHVibGljIG1vdmVDaGlsZEVsZW1lbnQgPSAoZWxlbWVudDogQ3VzdG9tT2JqZWN0M0QsIHBvczogVmVjdG9yMykgPT4ge1xyXG4gICAgY29uc3Qgd29ybGRUb0xvY2FsUG9zOiBWZWN0b3IzID0gdGhpcy5fY3VycmVudEN1c3RvbUZsb29yR3JvdXAud29ybGRUb0xvY2FsKHBvcy5jbG9uZSgpKTtcclxuICAgIHRoaXMuX21vdmVDaGlsZEVsZW1lbnRUb1Bvc2l0aW9uKGVsZW1lbnQsIHdvcmxkVG9Mb2NhbFBvcyk7XHJcbiAgfTtcclxuXHJcbiAgcHVibGljIHBsYWNlQ2hpbGRFbGVtZW50ID0gYXN5bmMgKGVsZW1lbnQ6IEN1c3RvbU9iamVjdDNEKSA9PiB7XHJcbiAgICBpZiAodGhpcy5faXNNb3ZlYWJsZU9iamVjdChlbGVtZW50KSAmJiAoZWxlbWVudCBhcyBhbnkpLm1vdmVkKSB7XHJcbiAgICAgIGNvbnN0IGJhc2VFbGVtZW50OiBPYmplY3QzRFtdID1cclxuICAgICAgICB0aGlzLl9jdXJyZW50Q3VzdG9tRmxvb3JHcm91cC5nZXRPYmplY3RzQnlVc2VyRGF0YVByb3AoJ3NlbGVjdGlvbicsICdub2RlSWQnLCB0aGlzLmJhc2VFbGVtZW50Tm9kZUlkKTtcclxuICAgICAgLy8gdXNlIGluc3RhbmNlSWQgZnJvbSBwYXJlbnRcclxuICAgICAgY29uc3QgaXRlbTogSXRlbSA9IE9iamVjdFV0aWxzLkdldFBhcmVudEl0ZW0oZWxlbWVudCk7XHJcbiAgICAgIGlmIChpdGVtKSB7XHJcbiAgICAgICAgY29uc3QgY29ubmVjdG9yOiBzdHJpbmcgPVxyXG4gICAgICAgICAgYXdhaXQgdGhpcy5fZWxlbWVudFNlcnZpY2UucGxhY2VFbGVtZW50T25Db25uZWN0b3IoXHJcbiAgICAgICAgICAgIGl0ZW0ubWV0YWRhdGEuaXRlbUlkLCBlbGVtZW50LCBiYXNlRWxlbWVudC5sZW5ndGggPiAwID8gYmFzZUVsZW1lbnRbMF0gOiBudWxsKTtcclxuICAgICAgICB0aGlzLl9zYXZlRWxlbWVudENvbm5lY3RvcihlbGVtZW50LCBjb25uZWN0b3IpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgcHVibGljIGNoYW5nZUNvbmZpZ3VyZU1vZGUgPSBhc3luYyAobWV0YWRhdGE6IE1ldGFkYXRhLCBjb25maWd1cmluZzogYm9vbGVhbikgPT4ge1xyXG4gICAgdGhpcy5jb25maWd1cmVNb2RlQ2hhbmdlZC5uZXh0KHttZXRhZGF0YTogbWV0YWRhdGEsIGNvbmZpZ3VyaW5nOiBjb25maWd1cmluZ30pO1xyXG4gIH07XHJcblxyXG4gIHB1YmxpYyBkcmFnQ29ubmVjdG9yID0gYXN5bmMgKGNvbm5lY3RvcjogQ3VzdG9tTWVzaCwgcG9zOiBWZWN0b3IzKSA9PiB7XHJcbiAgICB0aGlzLl9yZXNpemVTZXJ2aWNlLmRyYWdDb25uZWN0b3JUb05ld1Bvc2l0aW9uKGNvbm5lY3RvciwgcG9zKTtcclxuICB9O1xyXG5cclxuICBwdWJsaWMgY2FuY2VsQ29uZmlndXJpbmdDdXJyZW50SW5zdGFuY2UoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fY3VycmVudEN1c3RvbUZsb29yR3JvdXApIHtcclxuICAgICAgdGhpcy5fY3VycmVudEN1c3RvbUZsb29yR3JvdXAuY29uZmlndXJpbmcgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2lzTW92ZWFibGVPYmplY3Qob2JqOiBPYmplY3QzRCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIG9iai51c2VyRGF0YSAmJiBvYmoudXNlckRhdGEuc2VsZWN0aW9uICYmIG9iai51c2VyRGF0YS5zZWxlY3Rpb24uaGRlY29Qb3NpdGlvbmluZyA9PT0gSGRlY29Qb3NpdGlvbmluZy5WYXJpYWJsZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX2FkZEVsZW1lbnRPbkNvbm5lY3RvcihjdXJyZW50SXRlbTogSXRlbSwgZWxlbWVudDogT2JqZWN0M0QsIGNvbm5lY3Rvcjogc3RyaW5nLCBjb25uZWN0ZWROb2RlSWQ6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgLy8gY29uc3QgY29uOiBPYmplY3QzRCA9IHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwLmdldE9iamVjdEJ5TmFtZShjb25uZWN0b3IuY29ubmVjdG9yKTtcclxuICAgIC8vIGlmIChjb24pIHtlXHJcbiAgICAvLyBjb25zdCBwb3M6IFZlY3RvcjMgPSBuZXcgVmVjdG9yMygpLmNvcHkoY29uLnBvc2l0aW9uKTtcclxuICAgIC8vIGNvbi5sb2NhbFRvV29ybGQocG9zKTtcclxuICAgIGNvbnN0IGNvbm5lY3RvckZyb21FbGVtZW50ID0gY3VycmVudEl0ZW0uY29ubmVjdG9yRnJvbUVsZW1lbnQoZWxlbWVudC51c2VyRGF0YS5zZWxlY3Rpb24pO1xyXG4gICAgY29uc3QgaWRGcm9tQmFzZUVsZW1lbnQ6IG51bWJlciA9IGNvbm5lY3RlZE5vZGVJZCA/IGNvbm5lY3RlZE5vZGVJZCA6IGNvbm5lY3RvckZyb21FbGVtZW50LmNvbm5lY3RlZE5vZGVJZDtcclxuICAgIGNvbnN0IGJhc2VFbGVtZW50OiBPYmplY3QzRFtdID0gY3VycmVudEl0ZW0uZ2V0T2JqZWN0c0J5VXNlckRhdGFQcm9wKCdzZWxlY3Rpb24nLCAnbm9kZUlkJywgaWRGcm9tQmFzZUVsZW1lbnQpO1xyXG5cclxuICAgIGNvbnN0IGl0ZW06IEl0ZW0gPSBPYmplY3RVdGlscy5HZXRQYXJlbnRJdGVtKGVsZW1lbnQpO1xyXG4gICAgaWYgKGl0ZW0pIHtcclxuICAgICAgY29uc3QgY29ubjogc3RyaW5nID1cclxuICAgICAgICBhd2FpdCB0aGlzLl9lbGVtZW50U2VydmljZS5wbGFjZUVsZW1lbnRPbkNvbm5lY3RvcihcclxuICAgICAgICAgIGl0ZW0ubWV0YWRhdGEuaXRlbUlkLCBlbGVtZW50LCBiYXNlRWxlbWVudC5sZW5ndGggPiAwID8gYmFzZUVsZW1lbnRbMF0gOiBudWxsLCBmYWxzZSwgY29ubmVjdG9yLCBmYWxzZSk7XHJcbiAgICAgIHRoaXMuX3NhdmVFbGVtZW50Q29ubmVjdG9yKGVsZW1lbnQsIGNvbm4pO1xyXG4gICAgfVxyXG4gICAgLy8gfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2F2ZUVsZW1lbnRDb25uZWN0b3IoZWxlbWVudDogT2JqZWN0M0QsIGNvbm5lY3Rvcjogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50LnVzZXJEYXRhICYmIGVsZW1lbnQudXNlckRhdGEuc2VsZWN0aW9uKSB7XHJcbiAgICAgIHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwLnVwZGF0ZUVsZW1lbnRDb25uZWN0b3IoZWxlbWVudC51c2VyRGF0YS5zZWxlY3Rpb24sIGNvbm5lY3RvciwgdGhpcy5iYXNlRWxlbWVudE5vZGVJZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAcGFyYW0gZWxlbWVudCBUaGUgZWxlbWVudCB0byBtb3ZlXHJcbiAgICogQHBhcmFtIHBvcyBUaGUgbG9jYWwgcG9zaXRpb25cclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgX21vdmVDaGlsZEVsZW1lbnRUb1Bvc2l0aW9uKGVsZW1lbnQ6IE9iamVjdDNELCBwb3M6IFZlY3RvcjMpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9pc01vdmVhYmxlT2JqZWN0KGVsZW1lbnQpKSB7XHJcbiAgICAgIGNvbnN0IHdvcmxkVG9Mb2NhbFBvczogVmVjdG9yMyA9IG5ldyBWZWN0b3IzKCkuY29weShwb3MpLmFkZCh0aGlzLl9vcmlnaW5hbEVsZW1lbnRQb3NpdGlvbik7XHJcbiAgICAgIGNvbnN0IGJhc2VFbGVtZW50OiBPYmplY3QzRFtdID1cclxuICAgICAgICB0aGlzLl9jdXJyZW50Q3VzdG9tRmxvb3JHcm91cC5nZXRPYmplY3RzQnlVc2VyRGF0YVByb3AoJ3NlbGVjdGlvbicsICdub2RlSWQnLCB0aGlzLmJhc2VFbGVtZW50Tm9kZUlkKTtcclxuICAgICAgY29uc3QgaXRlbTogSXRlbSA9IE9iamVjdFV0aWxzLkdldFBhcmVudEl0ZW0oZWxlbWVudCk7XHJcbiAgICAgIGlmIChpdGVtKSB7XHJcbiAgICAgICAgdGhpcy5fZWxlbWVudFNlcnZpY2UubW92ZUVsZW1lbnRUb05ld1Bvc2l0aW9uKFxyXG4gICAgICAgICAgaXRlbS5tZXRhZGF0YS5pdGVtSWQsIGVsZW1lbnQsIHdvcmxkVG9Mb2NhbFBvcywgYmFzZUVsZW1lbnQubGVuZ3RoID4gMCA/IGJhc2VFbGVtZW50WzBdIDogbnVsbCk7XHJcbiAgICAgICAgLy8gdGhpcy5fc2F2ZUVsZW1lbnRDb25uZWN0b3IoZWxlbWVudCwgcG9zKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVzZXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9wbGFjZWRBZGp1c3RhYmxlcy5sZW5ndGggPSAwO1xyXG4gICAgdGhpcy5fcGxhY2VkQWRkYWJsZXMubGVuZ3RoID0gMDtcclxuICAgIHRoaXMuX2FkanVzdGFibGVzLmxlbmd0aCA9IDA7XHJcbiAgICB0aGlzLl9hZGRhYmxlcy5sZW5ndGggPSAwO1xyXG4gICAgLy8gdGhpcy5fcHJlcGFyZVRoZVNlbGVjdGlvbnMoKTtcclxuICAgIC8vIHRvZG86IGNoZWNrIHRoaXNcclxuICAgIC8vIHRoaXMuX2VsZW1lbnRTZXJ2aWNlLnJlbW92ZUVsZW1lbnQodGhpcy5hY3RpdmVJbnN0YW5jZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBtYXRlcmlhbElkIG9mIHRoZSBwYXJlbnQgdXAgdGhlIHRyZWUgdW50aWwgcHJlc2VudGlvbmxldmVsIDEgaXMgcmVhY2hlZFxyXG4gICAqIEBwYXJhbSBpZFxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfZ2V0TWF0ZXJpYWxJZEZyb21QYXJlbnQoaWQ6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBjb25zdCBpZHg6IG51bWJlciA9IHRoaXMuc2VsZWN0aW9ucy5maW5kSW5kZXgocyA9PiBzLm5vZGUgPT09IGlkKTtcclxuICAgIGxldCBjdXJyZW50TGV2ZWw6IG51bWJlciA9IDk5OTtcclxuICAgIGlmIChpZHggPiAtMSkge1xyXG4gICAgICBmb3IgKGxldCBpID0gaWR4OyBpID4gMDsgaS0tKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gdGhpcy5zZWxlY3Rpb25zW2ldO1xyXG4gICAgICAgIGlmIChzZWxlY3Rpb24ucHJlc2VudGF0aW9uTGV2ZWwgPj0gY3VycmVudExldmVsKSB7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgY3VycmVudExldmVsID0gc2VsZWN0aW9uLnByZXNlbnRhdGlvbkxldmVsO1xyXG4gICAgICAgIGlmIChzZWxlY3Rpb24uaGRlY29HYW1lT2JqZWN0KSB7XHJcbiAgICAgICAgICByZXR1cm4gc2VsZWN0aW9uLmhkZWNvR2FtZU9iamVjdDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9wcmVwYXJlVGhlU2VsZWN0aW9ucyhpbnN0YW5jZUlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IHNlbGVjdGlvbnMgPSB0aGlzLnNlbGVjdGlvbnMuc2xpY2UoKTtcclxuICAgIGNvbnN0IHNlbGVjdGlvbk9mQXJ0aWNsZTogU2VsZWN0aW9uID0gc2VsZWN0aW9ucy5maW5kKHMgPT4gcy5ub2RlVHlwZSA9PT0gTm9kZVR5cGUuQXJ0aWNsZSk7XHJcbiAgICBjb25zdCBhZGp1c3RhYmxlU2VsZWN0aW9uczogU2VsZWN0aW9uW10gPSBzZWxlY3Rpb25zLmZpbHRlcihzID0+IHMuYWRkQWRqdXN0ID09PSAnMicpO1xyXG4gICAgY29uc3QgaXNBcnRpY2xlV2l0aE1hdGVyaWFsOiBib29sZWFuID1cclxuICAgICAgYWRqdXN0YWJsZVNlbGVjdGlvbnMubGVuZ3RoID09PSAwICYmXHJcbiAgICAgIHNlbGVjdGlvbk9mQXJ0aWNsZS5nYW1lT2JqZWN0ICYmXHJcbiAgICAgIHNlbGVjdGlvbk9mQXJ0aWNsZS5nYW1lT2JqZWN0Lmxlbmd0aCA+IDA7XHJcbiAgICAvLyBnZXQgZ2VuZXJpYyB2YXJpYXRpb25zXHJcbiAgICBjb25zdCBnbG9iYWxWYXJpYXRpb25zOiBEZWNvTm9kZVtdID0gdGhpcy5zZWxlY3Rpb25zXHJcbiAgICAgIC5maWx0ZXIocyA9PiAocy5nZW5lcmljIHx8IGFkanVzdGFibGVTZWxlY3Rpb25zLmxlbmd0aCA9PT0gMSkgJiYgKHMuZGVjb05vZGUgYXMgYW55KS52YXJpYXRpb24gJiYgIXMuZGVjb05vZGUudHlwZSlcclxuICAgICAgLm1hcCgodmFsdWU6IFNlbGVjdGlvbiwgaW5kZXg6IG51bWJlciwgYXJyYXk6IFNlbGVjdGlvbltdKSA9PiB7XHJcbiAgICAgICAgLy8gZmluZCBzZWxlY3Rpb24gb2YgdmFyaWF0aW9uXHJcbiAgICAgICAgY29uc3Qgc2VsOiBTZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGlvbnMuZmluZChzID0+IHMuYXJ0Tm9kZUlkRGVjbyA9PT0gKHZhbHVlLmRlY29Ob2RlIGFzIGFueSkudmFyaWF0aW9uLnBhcmVudElkKTtcclxuICAgICAgICBpZiAoc2VsKSB7XHJcbiAgICAgICAgICAodmFsdWUuZGVjb05vZGUgYXMgYW55KS52YXJpYXRpb24uc3VwcGxpZXJBcnRpY2xlTnIgPSBzZWwuc3VwcGxpZXJBcnRpY2xlTnI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICh2YWx1ZS5kZWNvTm9kZSBhcyBhbnkpLnZhcmlhdGlvbi5tYXRlcmlhbElkID0gdGhpcy5fZ2V0TWF0ZXJpYWxJZEZyb21QYXJlbnQodmFsdWUubm9kZSk7XHJcbiAgICAgICAgcmV0dXJuICh2YWx1ZS5kZWNvTm9kZSBhcyBhbnkpLnZhcmlhdGlvbjtcclxuICAgICAgfSk7XHJcbiAgICAvLyBjb21tZW50ZWQgb3V0IGZvciB0aGUgbW9tZW50XHJcbiAgICAvLyBnbG9iYWxWYXJpYXRpb25zLmZvckVhY2goZyA9PiB7XHJcbiAgICAvLyAgIGNvbnN0IHBhcmVudElkeCA9IHNlbGVjdGlvbnMuZmluZEluZGV4KHMgPT4gcy5kZWNvTm9kZSAmJiBzLmRlY29Ob2RlLmlkID09PSBnLnBhcmVudElkKTtcclxuICAgIC8vICAgaWYgKHBhcmVudElkeCkgeyAvLyByZW1vdmUgcGFyZW50IHNlbGVjdGlvblxyXG4gICAgLy8gICAgIHNlbGVjdGlvbnMuc3BsaWNlKHBhcmVudElkeCwgMSk7XHJcbiAgICAvLyAgIH1cclxuICAgIC8vICAgY29uc3QgaWR4ID0gc2VsZWN0aW9ucy5maW5kSW5kZXgocyA9PiBzLmRlY29Ob2RlICYmIHMuZGVjb05vZGUuaWQgPT09IGcuaWQpO1xyXG4gICAgLy8gICBpZiAoaWR4KSB7IC8vIG1vdmUgZ2VuZXJpYyB2YXJpYXRpb25zIHRvIHRvcFxyXG4gICAgLy8gICAgIGNvbnN0IHNlbGVjdGlvbiA9IHNlbGVjdGlvbnNbaWR4XTtcclxuICAgIC8vICAgICBzZWxlY3Rpb25zLnNwbGljZShpZHgsIDEpO1xyXG4gICAgLy8gICAgIHNlbGVjdGlvbnMudW5zaGlmdChzZWxlY3Rpb24pO1xyXG4gICAgLy8gICB9XHJcbiAgICAvLyB9KTtcclxuXHJcbiAgICBjb25zdCB1c2VkVmFyaWF0aW9uczogRnVybml0dXJlUGFydFZhcmlhdGlvbltdID0gW107XHJcbiAgICBsZXQgZ2xvYmFsVmFyaWF0aW9uc1Jld3JpdGU6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgIGNvbnN0IGxlbjogbnVtYmVyID0gc2VsZWN0aW9ucy5sZW5ndGg7XHJcbiAgICBsZXQgbGFzdEFkZGVkOiBTZWxlY3Rpb247XHJcbiAgICBsZXQgbGFzdEFkanVzdGFibGU6IFNlbGVjdGlvbjtcclxuICAgIGxldCBuZXdQYXJ0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBsZXQgcHJldmlvdXNQcmVzTGV2ZWw6IG51bWJlciA9IC0xO1xyXG4gICAgbGV0IHBvc2l0aW9uaW5nOiBhbnk7XHJcbiAgICBsZXQgb3B0aW9uVGV4dDogc3RyaW5nO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICBjb25zdCBzZWxlY3Rpb246IFNlbGVjdGlvbiA9IHNlbGVjdGlvbnNbaV07XHJcbiAgICAgIGlmIChzZWxlY3Rpb24ucHJlc2VudGF0aW9uTGV2ZWwgPT09IDEpIHtcclxuICAgICAgICBwb3NpdGlvbmluZyA9IHNlbGVjdGlvbi5oZGVjb1Bvc2l0aW9uaW5nO1xyXG4gICAgICAgIG9wdGlvblRleHQgPSBzZWxlY3Rpb24ucXVlc3Rpb247XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHNlbGVjdGlvbi5wcmVzZW50YXRpb25MZXZlbCA+IHByZXZpb3VzUHJlc0xldmVsKSB7XHJcbiAgICAgICAgc2VsZWN0aW9uLmhkZWNvUG9zaXRpb25pbmcgPSBzZWxlY3Rpb24uaGRlY29Qb3NpdGlvbmluZyB8fCBwb3NpdGlvbmluZztcclxuICAgICAgfVxyXG4gICAgICBpZiAoc2VsZWN0aW9uLmRlY29Ob2RlKSB7XHJcbiAgICAgICAgaWYgKHNlbGVjdGlvbi5kZWNvTm9kZS50eXBlID09PSBEZWNvTm9kZVR5cGUuVmFyaWF0aW9uKSB7XHJcbiAgICAgICAgICBjb25zdCBkZWNvTm9kZSA9IHNlbGVjdGlvbi5kZWNvTm9kZTtcclxuICAgICAgICAgIChkZWNvTm9kZSBhcyBhbnkpLm9wdGlvblRleHQgPSBvcHRpb25UZXh0O1xyXG4gICAgICAgICAgLy8gZmluZCBzZWxlY3Rpb24gb2YgdmFyaWF0aW9uIGFuZCBzZXQgbWF0ZXJpYWxJZCBpbiBjYXNlIG9mIG11bHRpbWF0ZXJpYWxcclxuICAgICAgICAgIChkZWNvTm9kZSBhcyBhbnkpLm1hdGVyaWFsSWQgPSB0aGlzLl9nZXRNYXRlcmlhbElkRnJvbVBhcmVudChkZWNvTm9kZS5ub2RlSWQpO1xyXG4gICAgICAgICAgaWYgKGxhc3RBZGRlZCkge1xyXG4gICAgICAgICAgICBpZiAobmV3UGFydCkge1xyXG4gICAgICAgICAgICAgIGlmICgoZGVjb05vZGUgYXMgYW55KS5tYXRlcmlhbElkKSB7XHJcbiAgICAgICAgICAgICAgICBsYXN0QWRkZWQudmFyaWF0aW9ucy5wdXNoKGRlY29Ob2RlKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbGFzdEFkZGVkLnZhcmlhdGlvbnMgPSBbZGVjb05vZGVdO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBsYXN0QWRkZWQudmFyaWF0aW9ucy5wdXNoKGRlY29Ob2RlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBuZXdQYXJ0ID0gZmFsc2U7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoZ2xvYmFsVmFyaWF0aW9uc1Jld3JpdGUpIHtcclxuICAgICAgICAgICAgICBnbG9iYWxWYXJpYXRpb25zLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgICAgICAgZ2xvYmFsVmFyaWF0aW9uc1Jld3JpdGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBnbG9iYWxWYXJpYXRpb25zLnB1c2goZGVjb05vZGUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gY29uc3QgdmFyaWF0aW9uOiBGdXJuaXR1cmVQYXJ0VmFyaWF0aW9uID0gbmV3IEZ1cm5pdHVyZVBhcnRWYXJpYXRpb24oKTtcclxuICAgICAgICAgIC8vIHZhcmlhdGlvbi5CcmFuZElkID0gc2VsZWN0aW9uLmRlY29Ob2RlLmJyYW5kSWQ7XHJcbiAgICAgICAgICAvLyB2YXJpYXRpb24uRGVzY3JpcHRpb24gPSBzZWxlY3Rpb24uZGVjb05vZGUuZ2FtZU9iamVjdE5hbWU7XHJcbiAgICAgICAgICAvLyB2YXJpYXRpb24uTWF0ZXJpYWxJZCA9IChzZWxlY3Rpb24uZGVjb05vZGUgYXMgYW55KS5tYXRlcmlhbElkO1xyXG4gICAgICAgICAgLy8gdmFyaWF0aW9uLlN1cHBsaWVyQXJ0aWNsZU5yID0gKHNlbGVjdGlvbi5kZWNvTm9kZSBhcyBhbnkpLnN1cHBsaWVyQXJ0aWNsZU5yO1xyXG4gICAgICAgICAgLy8gdXNlZFZhcmlhdGlvbnMucHVzaCh2YXJpYXRpb24pO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoKHNlbGVjdGlvbi5kZWNvTm9kZS50eXBlID09PSBEZWNvTm9kZVR5cGUuUGFydCAmJlxyXG4gICAgICAgICAgdHlwZW9mIHNlbGVjdGlvbi5kZWNvTm9kZS5nYW1lT2JqZWN0TmFtZSA9PT0gJ3N0cmluZycgJiZcclxuICAgICAgICAgIHNlbGVjdGlvbi5kZWNvTm9kZS5nYW1lT2JqZWN0TmFtZS5sZW5ndGgpIHx8IChpc0FydGljbGVXaXRoTWF0ZXJpYWwpKSB7XHJcbiAgICAgICAgICBpZiAoc2VsZWN0aW9uLmRlY29Ob2RlLmtpbmQgPT09IERlY29Ob2RlS2luZC5BZGp1c3RhYmxlIHx8IChpc0FydGljbGVXaXRoTWF0ZXJpYWwpKSB7XHJcbiAgICAgICAgICAgIHNlbGVjdGlvbi52YXJpYXRpb25zID0gZ2xvYmFsVmFyaWF0aW9ucztcclxuICAgICAgICAgICAgdGhpcy5fYWRqdXN0YWJsZXMucHVzaChzZWxlY3Rpb24pO1xyXG4gICAgICAgICAgICBpZiAoIWxhc3RBZGRlZCB8fCAobGFzdEFkZGVkLm5vZGVJZCAhPT0gc2VsZWN0aW9uLm5vZGVJZCB8fCBsYXN0QWRkZWQubm9kZSAhPT0gc2VsZWN0aW9uLm5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgbmV3UGFydCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGFzdEFkZGVkID0gc2VsZWN0aW9uO1xyXG4gICAgICAgICAgICBsYXN0QWRqdXN0YWJsZSA9IHNlbGVjdGlvbjtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0aW9uLmRlY29Ob2RlLmtpbmQgPT09IERlY29Ob2RlS2luZC5BZGRhYmxlKSB7XHJcbiAgICAgICAgICAgIHNlbGVjdGlvbi52YXJpYXRpb25zID0gbGFzdEFkanVzdGFibGUgPyBsYXN0QWRqdXN0YWJsZS52YXJpYXRpb25zIDogZ2xvYmFsVmFyaWF0aW9ucztcclxuICAgICAgICAgICAgaWYgKGxhc3RBZGp1c3RhYmxlKSB7XHJcbiAgICAgICAgICAgICAgbGFzdEFkanVzdGFibGUuYWRkYWJsZXMucHVzaChzZWxlY3Rpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX2FkZGFibGVzLnB1c2goc2VsZWN0aW9uKTtcclxuICAgICAgICAgICAgaWYgKCFsYXN0QWRkZWQgfHwgKGxhc3RBZGRlZC5ub2RlSWQgIT09IHNlbGVjdGlvbi5ub2RlSWQgfHwgbGFzdEFkZGVkLm5vZGUgIT09IHNlbGVjdGlvbi5ub2RlKSkge1xyXG4gICAgICAgICAgICAgIG5ld1BhcnQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxhc3RBZGRlZCA9IHNlbGVjdGlvbjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcHJldmlvdXNQcmVzTGV2ZWwgPSBzZWxlY3Rpb24ucHJlc2VudGF0aW9uTGV2ZWw7XHJcbiAgICB9XHJcbiAgICAvLyB0aGlzLl91cHNlcnRGdXJuaXR1cmUodGhpcy5hY3RpdmVJbnN0YW5jZSxcclxuICAgIC8vICAge1ZhcmlhdGlvbnM6IHVzZWRWYXJpYXRpb25zfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZXRBZGp1c3RhYmxlcyhjaGVja0dhbWVPYmplY3Q6IGJvb2xlYW4gPSB0cnVlLCBjaGVja1R5cGU6IGJvb2xlYW4gPSB0cnVlKTogU2VsZWN0aW9uW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9ucy5maWx0ZXIocyA9PiB7XHJcbiAgICAgIGNvbnN0IG5vZGU6IERlY29Ob2RlID0gcy5kZWNvTm9kZTtcclxuICAgICAgcmV0dXJuIG5vZGUgJiYgKGNoZWNrR2FtZU9iamVjdCA/IG5vZGUuZ2FtZU9iamVjdE5hbWUgOiB0cnVlKSAmJiAoY2hlY2tUeXBlID8gbm9kZS50eXBlID09PSBEZWNvTm9kZVR5cGUuUGFydCA6IHRydWUpICYmIG5vZGUua2luZCA9PT0gRGVjb05vZGVLaW5kLkFkanVzdGFibGU7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dldFZhcmlhdGlvbnMoKTogYW55W10ge1xyXG4gICAgaWYgKHRoaXMuX2lPbmUuZGVjb05vZGVzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5faU9uZS5kZWNvTm9kZXMuZmlsdGVyKChkZWNvOiBEZWNvTm9kZSkgPT4ge1xyXG4gICAgICByZXR1cm4gZGVjby50eXBlID09PSBEZWNvTm9kZVR5cGUuVmFyaWF0aW9uO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jcmVhdGVBZGp1c3RhYmxlKGl0ZW06IEl0ZW0sIGFkajogU2VsZWN0aW9uKTogQ3VzdG9tT2JqZWN0M0Qge1xyXG4gICAgbGV0IG9iajogYW55ID0gdGhpcy5mdWxsM0RPYmplY3RUb1VzZSA/IHRoaXMuZnVsbDNET2JqZWN0VG9Vc2UuZ2V0T2JqZWN0QnlOYW1lKGFkai5kZWNvTm9kZS5nYW1lT2JqZWN0TmFtZSB8fCBhZGouZ2FtZU9iamVjdCkgOiBudWxsO1xyXG4gICAgaWYgKCFvYmopIHtcclxuICAgICAgLy8gaW4gY2FzZSBvZiBnbGIgZmlsZXMsIHRoZSBpbXBvcnRlciByZW1vdmVzIGRvdHMgZnJvbSBuYW1lc1xyXG4gICAgICBjb25zdCBuYW1lID0gYWRqLmRlY29Ob2RlLmdhbWVPYmplY3ROYW1lLnJlcGxhY2UoL1suXS9nLCAnJyk7XHJcbiAgICAgIG9iaiA9IHRoaXMuZnVsbDNET2JqZWN0VG9Vc2UgPyB0aGlzLmZ1bGwzRE9iamVjdFRvVXNlLmdldE9iamVjdEJ5TmFtZShuYW1lKSA6IG51bGw7XHJcbiAgICAgIGlmICghb2JqKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKGBObyBvYmplY3Qgd2l0aCBuYW1lICR7YWRqLmRlY29Ob2RlLmdhbWVPYmplY3ROYW1lfSBmb3VuZCFgKTtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGV0IGFkanVzdGFibGU6IGFueSA9IG9iai5jbG9uZSgpO1xyXG4gICAgYWRqdXN0YWJsZS5uYW1lID0gdGhpcy5fY3JlYXRlVW5pcXVlTmFtZShpdGVtLCBvYmopO1xyXG4gICAgYWRqdXN0YWJsZS51c2VyRGF0YS5zZWxlY3Rpb24gPSBhZGo7XHJcbiAgICBhZGp1c3RhYmxlLnBvc2l0aW9uLnNldCgwLCAwLCAwKTtcclxuICAgIGFkanVzdGFibGUudHJhdmVyc2UoYyA9PiB7XHJcbiAgICAgIGMudmlzaWJsZSA9ICFjLm5hbWUudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCdjXycpO1xyXG4gICAgfSk7XHJcbiAgICBpdGVtLmFkZENoaWxkKGFkanVzdGFibGUpO1xyXG4gICAgLy8gdGhlIG9iamVjdCBiZWluZyBhZGRlZCB0byB0aGUgY3VzdG9tRmxvb3JHcm91cCBpcyBiZWluZyByZWNyZWF0ZWQgc28gd2UgbG9vc2UgdGhlIHJlZmVyZW5jZVxyXG4gICAgLy8gdGhlcmVmb3Igd2UgbmVlZCB0byByZXRyaWV2ZSB0aGUgY3JlYXRlZCBvYmplY3QgYWdhaW5cclxuICAgIGFkanVzdGFibGUgPSBpdGVtLmdldE9iamVjdEJ5TmFtZShhZGp1c3RhYmxlLm5hbWUpO1xyXG4gICAgdGhpcy5fcGxhY2VkQWRqdXN0YWJsZXMucHVzaChhZGp1c3RhYmxlKTtcclxuICAgIHJldHVybiBhZGp1c3RhYmxlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY3JlYXRlQWRkYWJsZShpdGVtOiBJdGVtLCBhZGQ6IFNlbGVjdGlvbiwgcGFydDI/OiBhbnksIHBhcnQxPzogYW55KTogQ3VzdG9tT2JqZWN0M0Qge1xyXG4gICAgY29uc3Qgb2JqOiBhbnkgPSB0aGlzLmZ1bGwzRE9iamVjdFRvVXNlLmdldE9iamVjdEJ5TmFtZShhZGQuZGVjb05vZGUuZ2FtZU9iamVjdE5hbWUpO1xyXG4gICAgaWYgKCFvYmopIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICAvLyBjb25zdCBzZWxlY3Rpb246IFNlbGVjdGlvbiA9IHRoaXMuX2dldFNlbGVjdGlvbkZyb21JZChhZGouYXJ0Tm9kZUlkRGVjbyk7XHJcbiAgICBjb25zdCBhZGRhYmxlOiBhbnkgPSBvYmouY2xvbmUoKTtcclxuICAgIGFkZGFibGUubmFtZSA9IHRoaXMuX2NyZWF0ZVVuaXF1ZU5hbWUoaXRlbSwgb2JqKTtcclxuICAgIGFkZGFibGUudXNlckRhdGEuc2VsZWN0aW9uID0gYWRkO1xyXG4gICAgYWRkYWJsZS5wb3NpdGlvbi5zZXQoMCwgMCwgMCk7XHJcbiAgICBhZGRhYmxlLnZpc2libGUgPSB0cnVlO1xyXG4gICAgaWYgKHBhcnQxICYmIHBhcnQyKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9wbGFjZUFkZGFibGUoaXRlbSwgYWRkYWJsZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYWRkYWJsZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3BsYWNlQWRkYWJsZShpdGVtOiBJdGVtLCBhZGQ6IGFueSk6IEN1c3RvbU9iamVjdDNEIHtcclxuICAgIGl0ZW0uYWRkQ2hpbGQoYWRkKTtcclxuICAgIGNvbnN0IGFkZGFibGU6IEN1c3RvbU9iamVjdDNEID0gaXRlbS5nZXRPYmplY3RCeU5hbWUoYWRkLm5hbWUpIGFzIEN1c3RvbU9iamVjdDNEO1xyXG4gICAgdGhpcy5fcGxhY2VkQWRkYWJsZXMucHVzaChhZGRhYmxlKTtcclxuICAgIHJldHVybiBhZGRhYmxlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY3JlYXRlVW5pcXVlTmFtZShpdGVtOiBJdGVtLCBvYmo6IE9iamVjdDNEKTogc3RyaW5nIHtcclxuICAgIGxldCBpdGVyYXRpb24gPSAwO1xyXG4gICAgbGV0IG5hbWUgPSBgJHtpdGVtLm5hbWV9XyR7b2JqLm5hbWV9YDtcclxuICAgIGxldCBleGlzdGluZ09iaiA9IGl0ZW0uZ2V0T2JqZWN0QnlOYW1lKG5hbWUpO1xyXG4gICAgd2hpbGUgKGV4aXN0aW5nT2JqKSB7XHJcbiAgICAgIGl0ZXJhdGlvbisrO1xyXG4gICAgICBuYW1lID0gYCR7aXRlbS5uYW1lfV8ke29iai5uYW1lfWAgKyAoaXRlcmF0aW9uICE9PSAwID8gKCdfJyArIGl0ZXJhdGlvbikgOiAnJyk7XHJcbiAgICAgIGV4aXN0aW5nT2JqID0gaXRlbS5nZXRPYmplY3RCeU5hbWUobmFtZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmFtZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3BsYWNlQWRkYWJsZXMoaXRlbTogSXRlbSk6IHZvaWQge1xyXG4gICAgY29uc3QgbGVuOiBudW1iZXIgPSB0aGlzLl9wbGFjZWRBZGp1c3RhYmxlcy5sZW5ndGg7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgIGlmICh0aGlzLl9wbGFjZWRBZGp1c3RhYmxlc1tpXS51c2VyRGF0YS5oYXNPd25Qcm9wZXJ0eSgnc2VsZWN0aW9uJykgJiYgdGhpcy5fcGxhY2VkQWRqdXN0YWJsZXNbaV0udXNlckRhdGEuc2VsZWN0aW9uKSB7XHJcbiAgICAgICAgY29uc3QgYWRqdXN0YWJsZVNlbGVjdGlvbjogU2VsZWN0aW9uID0gdGhpcy5fcGxhY2VkQWRqdXN0YWJsZXNbaV0udXNlckRhdGEuc2VsZWN0aW9uO1xyXG4gICAgICAgIGlmIChhZGp1c3RhYmxlU2VsZWN0aW9uKSB7XHJcbiAgICAgICAgICBjb25zdCBsZW5hOiBudW1iZXIgPSBhZGp1c3RhYmxlU2VsZWN0aW9uLmFkZGFibGVzLmxlbmd0aDtcclxuICAgICAgICAgIGxldCBjb25BZGRhYmxlOiBhbnk7XHJcbiAgICAgICAgICBmb3IgKGxldCBpYSA9IDA7IGlhIDwgbGVuYTsgaWErKykge1xyXG4gICAgICAgICAgICBTY2VuZTNEVXRpbC5UcnlTZWxlY3RvckNvbm5lY3Rpb24odGhpcy5zY2VuZSxcclxuICAgICAgICAgICAgICBpdGVtLCB0aGlzLl9wbGFjZWRBZGp1c3RhYmxlc1tpXSwgYWRqdXN0YWJsZVNlbGVjdGlvbi5hZGRhYmxlc1tpYV0sIGZhbHNlLFxyXG4gICAgICAgICAgICAgIChhZGQsIHBhcnQyPywgcGFydDE/KSA9PiB0aGlzLl9jcmVhdGVBZGRhYmxlKGl0ZW0sIGFkZCwgcGFydDIsIHBhcnQxKSk7XHJcbiAgICAgICAgICAgIGlmIChjb25BZGRhYmxlKSB7XHJcbiAgICAgICAgICAgICAgU2NlbmUzRFV0aWwuVHJ5U2VsZWN0b3JDb25uZWN0aW9uKHRoaXMuc2NlbmUsXHJcbiAgICAgICAgICAgICAgICBpdGVtLCBjb25BZGRhYmxlLCBhZGp1c3RhYmxlU2VsZWN0aW9uLmFkZGFibGVzW2lhXSwgZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAoYWRkLCBwYXJ0Mj8sIHBhcnQxPykgPT4gdGhpcy5fY3JlYXRlQWRkYWJsZShpdGVtLCBhZGQsIHBhcnQyLCBwYXJ0MSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbkFkZGFibGUgPSB0aGlzLl9wbGFjZWRBZGRhYmxlc1t0aGlzLl9wbGFjZWRBZGRhYmxlcy5sZW5ndGggLSAxXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX2xvYWRWYXJpYXRpb25zKGl0ZW06IEl0ZW0sIGluc3RhbmNlSWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5vcHRpb25zLnVzZVZhcmlhdGlvbk9uUGFydCkge1xyXG4gICAgICBhd2FpdCB0aGlzLl92YXJpYXRpb25TZXJ2aWNlLmxvYWRQYXJ0KHRoaXMuX2FkanVzdGFibGVzLCBpbnN0YW5jZUlkLCBpdGVtLCB0cnVlKTtcclxuICAgIH1cclxuICAgIGF3YWl0IHRoaXMuX3ZhcmlhdGlvblNlcnZpY2UubG9hZFZhcmlhdGlvbih0aGlzLl9hZGp1c3RhYmxlcywgaW5zdGFuY2VJZCwgaXRlbSwgdHJ1ZSk7XHJcbiAgICBhd2FpdCB0aGlzLl92YXJpYXRpb25TZXJ2aWNlLmxvYWRWYXJpYXRpb24odGhpcy5fYWRkYWJsZXMsIGluc3RhbmNlSWQsIGl0ZW0sIHRydWUpO1xyXG4gICAgdGhpcy5fdmFyaWF0aW9uU2VydmljZS5jbGVhckNhY2hlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zaG93V2FybmluZyhkYXRhOiBJbmZvRGlhbG9nRGF0YSkge1xyXG4gICAgY29uc3QgZGlhbG9nRGF0YTogSW5mb0RpYWxvZ0RhdGEgPSB7XHJcbiAgICAgIHRpdGxlOiB0aGlzLl9kaWN0aW9uYXJ5U2VydmljZS5nZXQoZGF0YS50aXRsZSksIG1lc3NhZ2U6IHRoaXMuX2RpY3Rpb25hcnlTZXJ2aWNlLmdldChkYXRhLm1lc3NhZ2UpXHJcbiAgICB9O1xyXG4gICAgdGhpcy5fZGlhbG9nLm9wZW4oSW5mb0RpYWxvZ0NvbXBvbmVudCwge2RhdGE6IGRpYWxvZ0RhdGF9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3ByZXBhcmVTdGFuZEFsb25lKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fY29sbGlzaW9uTWFuYWdlci5jaGVja0NvbGxpc2lvbnMgPSBmYWxzZTtcclxuICAgIGlmICh0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Mub3B0aW9ucy5jYW1lcmFQb3NpdGlvbkZpeGVkKSB7XHJcbiAgICAgIHRoaXMuX2NhbWVyYVNlcnZpY2UubG9ja0NhbWVyYSgpO1xyXG4gICAgICB0aGlzLl9jYW1lcmFTZXJ2aWNlLmRpc2FibGVSb3RhdGVIb3Jpem9udGFsKCk7XHJcbiAgICAgIC8vIHRoaXMuX2NhbWVyYVNlcnZpY2UuZGlzYWJsZVJvdGF0ZVZlcnRpY2FsKCk7XHJcbiAgICAgIHRoaXMuX2NhbWVyYVNlcnZpY2UuZGlzYWJsZVBhbigpO1xyXG4gICAgICB0aGlzLl9jYW1lcmFTZXJ2aWNlLmNvbnRyb2xzLnRhcmdldCA9IG5ldyBWZWN0b3IzKDAsIDUwLCAwKTtcclxuICAgIH1cclxuICAgIHRoaXMuX3NjZW5lRXZlbnRTZXJ2aWNlLnJvdGF0ZU5vRHJhZyA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9wcmVsb2FkTWF0ZXJpYWwoYW5zd2VyOiBBbnN3ZXIpOiB2b2lkIHtcclxuICAgIGlmIChhbnN3ZXIuZWxlbWVudFR5cGUgPT09IERlY29Ob2RlVHlwZS5WYXJpYXRpb24gJiYgYW5zd2VyLmdhbWVPYmplY3QpIHtcclxuICAgICAgY29uc3QgdmFyaWF0aW9uRGVjb05vZGU6IERlY29Ob2RlID0gbmV3IERlY29Ob2RlKCk7XHJcbiAgICAgIHZhcmlhdGlvbkRlY29Ob2RlLmdhbWVPYmplY3ROYW1lID0gYW5zd2VyLmdhbWVPYmplY3Q7XHJcbiAgICAgIGNvbnN0IGFkanVzdGFibGVzQ2xvbmU6IFNlbGVjdGlvbltdID0gdGhpcy5fYWRqdXN0YWJsZXMubWFwKHMgPT4gT2JqZWN0LmFzc2lnbih7fSwgcykpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuX2dlbmVyaWNTZWxlY3Rpb24pIHtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50Q3VzdG9tRmxvb3JHcm91cCkge1xyXG4gICAgICAgICAgYWRqdXN0YWJsZXNDbG9uZS5mb3JFYWNoKChzZWxlY3Rpb246IFNlbGVjdGlvbikgPT4gc2VsZWN0aW9uLnZhcmlhdGlvbnMgPSBbdmFyaWF0aW9uRGVjb05vZGVdKTtcclxuICAgICAgICAgIHRoaXMuX3ZhcmlhdGlvbkNhY2hlU2VydmljZS5wcmVsb2FkVmFyaWF0aW9uc0FzeW5jKGFkanVzdGFibGVzQ2xvbmVbMF0uc2NoZW1hLCBbdmFyaWF0aW9uRGVjb05vZGUuZ2FtZU9iamVjdE5hbWVdLCB0aGlzLmFydGljbGVBc3NldFBhdGgpXHJcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLl92YXJpYXRpb25TZXJ2aWNlLmxvYWRWYXJpYXRpb24oYWRqdXN0YWJsZXNDbG9uZSwgJycsIHRoaXMuY3VycmVudEN1c3RvbUZsb29yR3JvdXAsIHRydWUpXHJcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB0aGlzLl9zY2VuZVNlcnZpY2UubmVlZHNSZW5kZXIgPSB0cnVlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuX2FkanVzdGFibGVzLmZvckVhY2goKHNlbGVjdGlvbjogU2VsZWN0aW9uKSA9PiBzZWxlY3Rpb24udmFyaWF0aW9ucyA9IFt2YXJpYXRpb25EZWNvTm9kZV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBjdXJyZW50U2VsZWN0aW9uOiBTZWxlY3Rpb24gPSBPYmplY3RVdGlscy5HZXRTZWxlY3Rpb25Gcm9tU2VsZWN0ZWRPYmplY3QodGhpcy5fYWN0aXZlQ2hpbGRFbGVtZW50KTtcclxuICAgICAgICBpZiAoY3VycmVudFNlbGVjdGlvbikge1xyXG4gICAgICAgICAgaWYgKHRoaXMuY3VycmVudEN1c3RvbUZsb29yR3JvdXApIHtcclxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uRnJvbUFkanVzdGFibGVzOiBTZWxlY3Rpb24gPSBhZGp1c3RhYmxlc0Nsb25lXHJcbiAgICAgICAgICAgICAgLmZpbmQoKHNlbGVjdGlvbjogU2VsZWN0aW9uKSA9PiBzZWxlY3Rpb24ubm9kZUlkID09PSBjdXJyZW50U2VsZWN0aW9uLm5vZGVJZCk7XHJcbiAgICAgICAgICAgIGlmIChzZWxlY3Rpb25Gcm9tQWRqdXN0YWJsZXMpIHtcclxuICAgICAgICAgICAgICBzZWxlY3Rpb25Gcm9tQWRqdXN0YWJsZXMudmFyaWF0aW9ucyA9IFt2YXJpYXRpb25EZWNvTm9kZV07XHJcbiAgICAgICAgICAgICAgdGhpcy5fdmFyaWF0aW9uQ2FjaGVTZXJ2aWNlLnByZWxvYWRWYXJpYXRpb25zQXN5bmMoYWRqdXN0YWJsZXNDbG9uZVswXS5zY2hlbWEsIFt2YXJpYXRpb25EZWNvTm9kZS5nYW1lT2JqZWN0TmFtZV0sIHRoaXMuYXJ0aWNsZUFzc2V0UGF0aClcclxuICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fdmFyaWF0aW9uU2VydmljZS5sb2FkVmFyaWF0aW9uKGFkanVzdGFibGVzQ2xvbmUsICcnLCB0aGlzLmN1cnJlbnRDdXN0b21GbG9vckdyb3VwLCB0cnVlKVxyXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHRoaXMuX3NjZW5lU2VydmljZS5uZWVkc1JlbmRlciA9IHRydWUpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbkZyb21BZGp1c3RhYmxlczogU2VsZWN0aW9uID0gdGhpcy5fYWRqdXN0YWJsZXNcclxuICAgICAgICAgICAgICAuZmluZCgoc2VsZWN0aW9uOiBTZWxlY3Rpb24pID0+IHNlbGVjdGlvbi5ub2RlSWQgPT09IGN1cnJlbnRTZWxlY3Rpb24ubm9kZUlkKTtcclxuICAgICAgICAgICAgc2VsZWN0aW9uRnJvbUFkanVzdGFibGVzLnZhcmlhdGlvbnMgPSBbdmFyaWF0aW9uRGVjb05vZGVdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
|
|
1475
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQtZnVybml0dXJlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2xpZW50L2FwcC9wbHVnaW5zL3RocmVlZHNlbGVjdG9yL3RocmVlZHNlbGVjdG9yL3NlcnZpY2UvYnVpbGQtZnVybml0dXJlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGlEQUFpRCxDQUFDO0FBQ3pFLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSwwREFBMEQsQ0FBQztBQUN0RixPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sMERBQTBELENBQUM7QUFFdEYsT0FBTyxFQUFDLFVBQVUsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUNwRCxPQUFPLEVBQUMsT0FBTyxFQUFlLE1BQU0sTUFBTSxDQUFDO0FBRTNDLE9BQU8sRUFBaUIsS0FBSyxFQUFFLGFBQWEsRUFBa0IsUUFBUSxFQUFTLE9BQU8sRUFBQyxNQUFNLE9BQU8sQ0FBQztBQUVyRyxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0scURBQXFELENBQUM7QUFDN0UsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sNkRBQTZELENBQUM7QUFHN0YsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHlDQUF5QyxDQUFDO0FBQ3BFLE9BQU8sS0FBSyxLQUFLLE1BQU0sbUJBQW1CLENBQUM7QUFDM0MsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQ3RELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSx5Q0FBeUMsQ0FBQztBQUN4RSxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDaEQsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBRXpELE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLGlEQUFpRCxDQUFDO0FBQ3ZGLE9B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QixHQUFjLElBQUksQ0FBQyxZQUFZOzZCQUMxRCxJQUFJLENBQUMsQ0FBQyxTQUFvQixFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxLQUFLLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO3dCQUNoRix3QkFBd0IsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO3FCQUMzRDtpQkFDRjthQUNGO1NBQ0Y7SUFDSCxDQUFDOzttSEF0Z0RVLHFCQUFxQjt1SEFBckIscUJBQXFCLGNBRnBCLE1BQU07NEZBRVAscUJBQXFCO2tCQUhqQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGVjb05vZGV9IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvbW9kZWwvZGVjby1ub2RlJztcclxuaW1wb3J0IHtEZWNvTm9kZVR5cGV9IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvZW51bS9kZWNvLW5vZGUtdHlwZS5lbnVtJztcclxuaW1wb3J0IHtEZWNvTm9kZUtpbmR9IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvZW51bS9kZWNvLW5vZGUta2luZC5lbnVtJztcclxuaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvbW9kZWwvc2VsZWN0aW9uJztcclxuaW1wb3J0IHtJbmplY3RhYmxlLCBPbkRlc3Ryb3l9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1N1YmplY3QsIFN1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7QW5zd2VyfSBmcm9tICdAY29saWpuaXQvY29uZmlndXJhdG9yYXBpL2J1aWxkL21vZGVsL2Fuc3dlcic7XHJcbmltcG9ydCB7QnVmZmVyR2VvbWV0cnksIEV1bGVyLCBJbnN0YW5jZWRNZXNoLCBNYXRlcmlhbCwgTWVzaCwgT2JqZWN0M0QsIFNjZW5lLCBWZWN0b3IzfSBmcm9tICd0aHJlZSc7XHJcbmltcG9ydCB7TWF0RGlhbG9nfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQge05vZGVUeXBlfSBmcm9tICdAY29saWpuaXQvY29uZmlndXJhdG9yYXBpL2J1aWxkL2VudW0vbm9kZS10eXBlLmVudW0nO1xyXG5pbXBvcnQge0hkZWNvUG9zaXRpb25pbmd9IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvZW51bS9oZGVjby1wb3NpdGlvbmluZy5lbnVtJztcclxuaW1wb3J0IHtRdWVzdGlvbkFuZEFuc3dlcnN9IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvbW9kZWwvcXVlc3Rpb24tYW5kLWFuc3dlcnMnO1xyXG5pbXBvcnQge1F1ZXN0aW9ufSBmcm9tICdAY29saWpuaXQvY29uZmlndXJhdG9yYXBpL2J1aWxkL21vZGVsL3F1ZXN0aW9uJztcclxuaW1wb3J0IHtlbnZpcm9ubWVudH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50JztcclxuaW1wb3J0ICogYXMgVFdFRU4gZnJvbSAnQHR3ZWVuanMvdHdlZW4uanMnO1xyXG5pbXBvcnQge0ZhY3Rvcnl9IGZyb20gJy4uLy4uLy4uL2NvcmUzZC9pdGVtcy9mYWN0b3J5JztcclxuaW1wb3J0IHtDdXN0b21GbG9vckl0ZW19IGZyb20gJy4uLy4uLy4uL2NvcmUzZC9pdGVtcy9jdXN0b20tZmxvb3ItaXRlbSc7XHJcbmltcG9ydCB7SXRlbX0gZnJvbSAnLi4vLi4vLi4vY29yZTNkL2l0ZW1zL2l0ZW0nO1xyXG5pbXBvcnQge0l0ZW1UeXBlfSBmcm9tICcuLi8uLi8uLi9jb3JlM2QvaXRlbXMvaXRlbS10eXBlJztcclxuaW1wb3J0IHtNZXRhZGF0YX0gZnJvbSAnLi4vLi4vLi4vY29yZTNkL2l0ZW1zL21ldGFkYXRhJztcclxuaW1wb3J0IHtDdXN0b21GbG9vckdyb3VwUmVzdWx0fSBmcm9tICcuLi8uLi8uLi9jb3JlM2QvbW9kZWwvY3VzdG9tLWZsb29yLWdyb3VwLXJlc3VsdCc7XHJcbmltcG9ydCB7RnVybml0dXJlSW50ZWdyYXRpb259IGZyb20gJy4uL21vZGVsL2Z1cm5pdHVyZS1pbnRlZ3JhdGlvbic7XHJcbmltcG9ydCB7VGhyZWVkc2VsZWN0b3JTZXJ2aWNlfSBmcm9tICcuL3RocmVlZHNlbGVjdG9yLnNlcnZpY2UnO1xyXG5pbXBvcnQge0NvbGxpc2lvbk1hbmFnZXJTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlM2QvY29sbGlzaW9uLW1hbmFnZXIvY29sbGlzaW9uLW1hbmFnZXIuc2VydmljZSc7XHJcbmltcG9ydCB7TWVzc2FnZUJ1c1NlcnZpY2V9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvc2VydmljZS9tZXNzYWdlLWJ1cy5zZXJ2aWNlJztcclxuaW1wb3J0IHtIdWRTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlM2Qvc2VydmljZS9odWQuc2VydmljZSc7XHJcbmltcG9ydCB7U2NlbmVTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlM2Qvc2VydmljZS9zY2VuZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtDYW1lcmFTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlM2Qvc2VydmljZS9jYW1lcmEuc2VydmljZSc7XHJcbmltcG9ydCB7U2NlbmVFdmVudFNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUzZC9zZXJ2aWNlL3NjZW5lLWV2ZW50LnNlcnZpY2UnO1xyXG5pbXBvcnQge1ByZXNldHNTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3NlcnZpY2UvcHJlc2V0cy5zZXJ2aWNlJztcclxuaW1wb3J0IHtJdGVtU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZTNkL3NlcnZpY2UvaXRlbS5zZXJ2aWNlJztcclxuaW1wb3J0IHtFbGVtZW50U2VydmljZX0gZnJvbSAnLi9lbGVtZW50LnNlcnZpY2UnO1xyXG5pbXBvcnQge1Blcm1hbmVudFN0b3JlU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9zZXJ2aWNlL3Blcm1hbmVudC1zdG9yZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtHb29nbGVUYWdNYW5hZ2VyU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZS9nb29nbGUtdGFnLW1hbmFnZXIuc2VydmljZSc7XHJcbmltcG9ydCB7VXRpbHNTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3NlcnZpY2UvdXRpbHMuc2VydmljZSc7XHJcbmltcG9ydCB7VmFyaWF0aW9uU2VydmljZX0gZnJvbSAnLi92YXJpYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7QXBwU3RhdGVTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3NlcnZpY2UvYXBwLXN0YXRlLnNlcnZpY2UnO1xyXG5pbXBvcnQge0Vycm9yU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2Vycm9yLnNlcnZpY2UnO1xyXG5pbXBvcnQge0l0ZW1Hcm91cFNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUzZC9zZXJ2aWNlL2l0ZW0tZ3JvdXAuc2VydmljZSc7XHJcbmltcG9ydCB7VmFyaWF0aW9uQ2FjaGVTZXJ2aWNlfSBmcm9tICcuL3ZhcmlhdGlvbi1jYWNoZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtSZXNpemVTZXJ2aWNlfSBmcm9tICcuL3Jlc2l6ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtWaWV3TW9kZVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvc2VydmljZS92aWV3LW1vZGUuc2VydmljZSc7XHJcbmltcG9ydCB7TWVzc2FnZVR5cGV9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvZW51bS9tZXNzYWdlLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7U2NlbmUzRFV0aWx9IGZyb20gJy4uL3V0aWxzL3NjZW5lLTNkLnV0aWxzJztcclxuaW1wb3J0IHtFcnJvck1lc3NhZ2V9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvbW9kZWwvZXJyb3ItbWVzc2FnZSc7XHJcbmltcG9ydCB7Vmlld01vZGV9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvZW51bS92aWV3LW1vZGUuZW51bSc7XHJcbmltcG9ydCB7UmVzdWx0VHlwZX0gZnJvbSAnLi4vLi4vLi4vY29yZTNkL2VudW0vcmVzdWx0LXR5cGUuZW51bSc7XHJcbmltcG9ydCB7aXNOaWxsfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3V0aWxzL2Z1bmN0aW9uL2lzLW5pbGwuZnVuY3Rpb24nO1xyXG5pbXBvcnQge1V0aWxzfSBmcm9tICcuLi8uLi8uLi9jb3JlM2QvY29yZS91dGlscyc7XHJcbmltcG9ydCB7TWF0ZXJpYWxVdGlsc30gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS91dGlscy9tYXRlcmlhbC51dGlscyc7XHJcbmltcG9ydCB7Rmxvb3JQaW59IGZyb20gJy4uLy4uLy4uL2NvcmUzZC9pdGVtcy9mbG9vci1waW4nO1xyXG5pbXBvcnQge1dhbGxQaW59IGZyb20gJy4uLy4uLy4uL2NvcmUzZC9pdGVtcy93YWxsLXBpbic7XHJcbmltcG9ydCB7RnVybml0dXJlUGFydEludGVncmF0aW9ufSBmcm9tICcuLi9tb2RlbC9mdXJuaXR1cmUtcGFydC1pbnRlZ3JhdGlvbic7XHJcbmltcG9ydCB7Q3VzdG9tTWVzaCwgQ3VzdG9tT2JqZWN0M0R9IGZyb20gJy4uLy4uLy4uL2NvcmUzZC9pdGVtcy9jdXN0b20tb2JqZWN0cyc7XHJcbmltcG9ydCB7RnVybml0dXJlUGFydFZhcmlhdGlvbn0gZnJvbSAnLi4vbW9kZWwvZnVybml0dXJlLXBhcnQtdmFyaWF0aW9uJztcclxuaW1wb3J0IHtGdXJuaXR1cmVDb25uZWN0ZWRQYXJ0SW50ZWdyYXRpb259IGZyb20gJy4uL21vZGVsL2Z1cm5pdHVyZS1jb25uZWN0ZWQtcGFydC1pbnRlZ3JhdGlvbic7XHJcbmltcG9ydCB7R29vZ2xlVGFnTWFuYWdlckV2ZW50fSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL2VudW0vZ29vZ2xlLXRhZy1tYW5hZ2VyLWV2ZW50LmVudW0nO1xyXG5pbXBvcnQge0NoYW5nZXNJbnRlcmZhY2V9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvaW50ZXJmYWNlL2NoYW5nZXMuaW50ZXJmYWNlJztcclxuaW1wb3J0IHtDdXN0b21XYWxsRmxvb3JJdGVtfSBmcm9tICcuLi8uLi8uLi9jb3JlM2QvaXRlbXMvY3VzdG9tLXdhbGwtZmxvb3ItaXRlbSc7XHJcbmltcG9ydCB7T2JqZWN0VXRpbHN9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvdXRpbHMvb2JqZWN0LnV0aWxzJztcclxuaW1wb3J0IHtJbmZvRGlhbG9nQ29tcG9uZW50fSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQvaW5mby1kaWFsb2cvaW5mby1kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHtJbmZvRGlhbG9nRGF0YX0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9pbnRlcmZhY2UvaW5mby1kaWFsb2ctZGF0YS5pbnRlcmZhY2UnO1xyXG5pbXBvcnQge0hvbWVkZWNvcmF0b3JDb25uZWN0b3JTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3NlcnZpY2UvaG9tZWRlY29yYXRvci1jb25uZWN0b3Iuc2VydmljZSc7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvckRpY3Rpb25hcnlTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3NlcnZpY2UvaG9tZWRlY29yYXRvci1kaWN0aW9uYXJ5LnNlcnZpY2UnO1xyXG5pbXBvcnQge0hvbWVkZWNvcmF0b3JBcHBFdmVudFNlcnZpY2V9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvc2VydmljZS9ob21lZGVjb3JhdG9yLWFwcC1ldmVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9yU2V0dGluZ3NTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3NlcnZpY2UvaG9tZWRlY29yYXRvci1zZXR0aW5ncy5zZXJ2aWNlJztcclxuaW1wb3J0IHtGbG9vclNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUzZC9zZXJ2aWNlL2Zsb29yLnNlcnZpY2UnO1xyXG5pbXBvcnQge0Zsb29yUGxhbmVJdGVtfSBmcm9tICcuLi8uLi8uLi9jb3JlM2QvaXRlbXMvZmxvb3ItcGxhbmUtaXRlbSc7XHJcbmltcG9ydCB7XHJcbiAgRmxvb3JQYXR0ZXJuLFxyXG4gIEZsb29yUGF0dGVybkRpcmVjdGlvbixcclxuICBGbG9vclBhdHRlcm5TZXJ2aWNlLFxyXG4gIEZsb29yUGF0dGVyblRyYW5zZm9ybVxyXG59IGZyb20gJy4uLy4uLy4uL2NvcmUzZC9zZXJ2aWNlL2Zsb29yLXBhdHRlcm4uc2VydmljZSc7XHJcbmltcG9ydCB7Rmxvb3JUaWxlSW50ZXJzZWN0aW9uU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZTNkL3NlcnZpY2UvZmxvb3ItdGlsZS1pbnRlcnNlY3Rpb24uc2VydmljZSc7XHJcblxyXG5jb25zdCBkZWZhdWx0UG9zaXRpb24gPSBuZXcgVmVjdG9yMyg0LCAwLCAxKTtcclxuY29uc3QgZGVmYXVsdFJvdGF0aW9uID0gbmV3IEV1bGVyKDAsIE1hdGguUEksIDApO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDb25maWd1cmluZ01vZGVDaGFuZ2VJbnRlcmZhY2Uge1xyXG4gIG1ldGFkYXRhOiBNZXRhZGF0YTtcclxuICBjb25maWd1cmluZzogYm9vbGVhbjtcclxufVxyXG5cclxuaW50ZXJmYWNlIEZsb29yUGF0dGVybkluZm8ge1xyXG4gIG1lc2hJZExlZnQ6IHN0cmluZztcclxuICBtZXNoSWRSaWdodDogc3RyaW5nO1xyXG4gIGZsb29yUGF0dGVybjogRmxvb3JQYXR0ZXJuO1xyXG4gIGZsb29yUGF0dGVybkRpcmVjdGlvbjogRmxvb3JQYXR0ZXJuRGlyZWN0aW9uO1xyXG4gIGhlYXJ0TGluZTogbnVtYmVyO1xyXG59XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCdWlsZEZ1cm5pdHVyZVNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG4gIC8vIHB1YmxpYyBnZXQgZGVjb3MoKTogTWFwPHN0cmluZywgRGVjb05vZGU+IHtcclxuICAvLyAgIHJldHVybiB0aGlzLl9nZXREZWNvc0Zyb21JbnN0YW5jZSgpO1xyXG4gIC8vIH1cclxuICBwdWJsaWMgYmFzZUVsZW1lbnROb2RlSWQ6IG51bWJlcjtcclxuXHJcbiAgcHVibGljIGFydGljbGVBc3NldFBhdGg6IHN0cmluZztcclxuXHJcbiAgcHVibGljIHRvZ2dsZVNlbGVjdGVkRWxlbWVudDogU3ViamVjdDxNZXNoPiA9IG5ldyBTdWJqZWN0PE1lc2g+KCk7XHJcbiAgcHVibGljIGNvbmZpZ3VyZU1vZGVDaGFuZ2VkOiBTdWJqZWN0PENvbmZpZ3VyaW5nTW9kZUNoYW5nZUludGVyZmFjZT4gPSBuZXcgU3ViamVjdDx7IG1ldGFkYXRhOiB7fSwgY29uZmlndXJpbmc6IGZhbHNlIH0+KCk7XHJcbiAgcHVibGljIGJ1aWxkRmluaXNoZWQ6IFN1YmplY3Q8Q3VzdG9tRmxvb3JHcm91cFJlc3VsdD4gPSBuZXcgU3ViamVjdDxDdXN0b21GbG9vckdyb3VwUmVzdWx0PigpO1xyXG4gIHB1YmxpYyBhbnN3ZXJTZWxlY3RlZDogU3ViamVjdDxDdXN0b21GbG9vckdyb3VwUmVzdWx0PiA9IG5ldyBTdWJqZWN0PEN1c3RvbUZsb29yR3JvdXBSZXN1bHQ+KCk7XHJcbiAgcHVibGljIGFyUGxhY2VtZW50VXBkYXRlOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuICBwdWJsaWMgc2hvd0VsZW1lbnRUb29sYmFyOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHB1YmxpYyBzdGFydFBvc2l0aW9uOiBWZWN0b3IzO1xyXG4gIHB1YmxpYyBmdWxsM0RPYmplY3RUb1VzZTogT2JqZWN0M0Q7XHJcblxyXG4gIHB1YmxpYyBpc01vdXNlT3Zlck9iamVjdDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLyB1c2VkIGZvciBlbGVtZW50cywgdG8gcGxhY2Ugb2JqZWN0cyBvblxyXG4gIHB1YmxpYyBhY3RpdmVDb25uZWN0b3I6IGFueTtcclxuXHJcbiAgcHVibGljIGdldCB1c2VOb2RlSWRUb0xpbmsoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fdXNlTm9kZUlkVG9MaW5rO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBjdXJyZW50Q3VzdG9tRmxvb3JHcm91cCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Q3VzdG9tRmxvb3JHcm91cDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgc3RhbmRBbG9uZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9zdGFuZEFsb25lO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBzdGFuZEFsb25lKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9zdGFuZEFsb25lID0gdmFsdWU7XHJcbiAgICBpZiAodGhpcy5fc3RhbmRBbG9uZSkge1xyXG4gICAgICB0aGlzLl9wcmVwYXJlU3RhbmRBbG9uZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBzZWxlY3Rpb25zKCk6IFNlbGVjdGlvbltdIHtcclxuICAgIHJldHVybiB0aGlzLl9pT25lLnNlbGVjdGlvbnM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhbmRBbG9uZUZpcnN0QnVpbGRSZWFkeTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIGdldCBzY2VuZSgpOiBTY2VuZSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2NlbmVTZXJ2aWNlLmdldFNjZW5lKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF91c2VOb2RlSWRUb0xpbms6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHByaXZhdGUgX3N0YW5kQWxvbmU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBfYWN0aXZlQ2hpbGRFbGVtZW50OiBNZXNoO1xyXG5cclxuICBwcml2YXRlIF9vcmlnaW5hbEVsZW1lbnRQb3NpdGlvbjogVmVjdG9yMyA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgcHJpdmF0ZSBfaW50ZWdyYXRpb25FbmFibGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfcGxhY2VkQWRqdXN0YWJsZXM6IGFueVtdID0gW107XHJcbiAgcHJpdmF0ZSBfcGxhY2VkQWRkYWJsZXM6IGFueVtdID0gW107XHJcbiAgcHJpdmF0ZSBfYWRqdXN0YWJsZXM6IGFueVtdID0gW107XHJcbiAgcHJpdmF0ZSBfYWRkYWJsZXM6IGFueVtdID0gW107XHJcbiAgcHJpdmF0ZSBfY3VycmVudEN1c3RvbUZsb29yR3JvdXA6IEl0ZW07XHJcbiAgcHJpdmF0ZSBfZ2VuZXJpY1NlbGVjdGlvbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX3N1YnM6IFN1YnNjcmlwdGlvbltdID0gW107XHJcbiAgcHJpdmF0ZSBfYW5zd2VyU2VsZWN0ZWQ6IEFuc3dlcltdID0gW107XHJcbiAgcHJpdmF0ZSBfZnVybml0dXJlQ29uZmlndXJhdGlvbnM6IEZ1cm5pdHVyZUludGVncmF0aW9uW10gPSBbXTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9kaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIHByaXZhdGUgX2lPbmU6IEhvbWVkZWNvcmF0b3JDb25uZWN0b3JTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfdGhyZWVkU2VsZWN0b3JTZXJ2aWNlOiBUaHJlZWRzZWxlY3RvclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9jb2xsaXNpb25NYW5hZ2VyOiBDb2xsaXNpb25NYW5hZ2VyU2VydmljZSxcclxuICAgIHByaXZhdGUgX21lc3NhZ2VCdXM6IE1lc3NhZ2VCdXNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZGljdGlvbmFyeVNlcnZpY2U6IEhvbWVkZWNvcmF0b3JEaWN0aW9uYXJ5U2VydmljZSxcclxuICAgIHByaXZhdGUgX2h1ZFNlcnZpY2U6IEh1ZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9zY2VuZVNlcnZpY2U6IFNjZW5lU2VydmljZSxcclxuICAgIHByaXZhdGUgX2NhbWVyYVNlcnZpY2U6IENhbWVyYVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9zY2VuZUV2ZW50U2VydmljZTogU2NlbmVFdmVudFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9hcHBFdmVudFNlcnZpY2U6IEhvbWVkZWNvcmF0b3JBcHBFdmVudFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9wcmVzZXRTZXJ2aWNlOiBQcmVzZXRzU2VydmljZSxcclxuICAgIHByaXZhdGUgX2l0ZW1TZXJ2aWNlOiBJdGVtU2VydmljZSxcclxuICAgIHByaXZhdGUgX2VsZW1lbnRTZXJ2aWNlOiBFbGVtZW50U2VydmljZSxcclxuICAgIHByaXZhdGUgX3Blcm1hbmVudFN0b3JlU2VydmljZTogUGVybWFuZW50U3RvcmVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZ29vZ2xlVGFnTWFuYWdlcjogR29vZ2xlVGFnTWFuYWdlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9zZXR0aW5nc1NlcnZpY2U6IEhvbWVkZWNvcmF0b3JTZXR0aW5nc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF91dGlsc1NlcnZpY2U6IFV0aWxzU2VydmljZSxcclxuICAgIHByaXZhdGUgX3ZhcmlhdGlvblNlcnZpY2U6IFZhcmlhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9hcHBTdGF0ZVNlcnZpY2U6IEFwcFN0YXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgX2Vycm9yU2VydmljZTogRXJyb3JTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfaXRlbUdyb3VwU2VydmljZTogSXRlbUdyb3VwU2VydmljZSxcclxuICAgIHByaXZhdGUgX3ZhcmlhdGlvbkNhY2hlU2VydmljZTogVmFyaWF0aW9uQ2FjaGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfcmVzaXplU2VydmljZTogUmVzaXplU2VydmljZSxcclxuICAgIHByaXZhdGUgX3ZpZXdNb2RlU2VydmljZTogVmlld01vZGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZmxvb3JTZXJ2aWNlOiBGbG9vclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9mbG9vclBhdHRlcm5TZXJ2aWNlOiBGbG9vclBhdHRlcm5TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZmxvb3JUaWxlSW50ZXJzZWN0aW9uU2VydmljZTogRmxvb3JUaWxlSW50ZXJzZWN0aW9uU2VydmljZVxyXG4gICkge1xyXG4gICAgdGhpcy5fc3Vicy5wdXNoKFxyXG4gICAgICB0aGlzLl9pT25lLmNvbm5lY3Rpb25SZXNldC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5faGFuZGxlQ29ubmVjdGlvblJlc2V0KCkpLFxyXG4gICAgICB0aGlzLl9tZXNzYWdlQnVzLnN1YnNjcmliZShNZXNzYWdlVHlwZS5JdGVtUmVtb3ZlZCwgKHJlc3VsdDogeyBpdGVtOiBhbnksIGFkZGVkVG9Hcm91cDogYm9vbGVhbiB9KSA9PlxyXG4gICAgICAgIHRoaXMuX2hhbmRsZUl0ZW1SZW1vdmVkRnJvbVNjZW5lKHJlc3VsdCkpLFxyXG4gICAgICB0aGlzLl9tZXNzYWdlQnVzLnN1YnNjcmliZShNZXNzYWdlVHlwZS5VbmRvLCAoKSA9PiB0aGlzLl9zdGFydFdpdGhOZXcoZmFsc2UpKSxcclxuICAgICAgdGhpcy5fbWVzc2FnZUJ1cy5zdWJzY3JpYmUoTWVzc2FnZVR5cGUuUmVkbywgKCkgPT4gdGhpcy5fc3RhcnRXaXRoTmV3KGZhbHNlKSksXHJcbiAgICAgIHRoaXMuX21lc3NhZ2VCdXMuc3Vic2NyaWJlKE1lc3NhZ2VUeXBlLlN0YXJ0V2l0aEVtcHR5Um9vbSwgKCkgPT4gdGhpcy5fc3RhcnRXaXRoTmV3KCkpLFxyXG4gICAgICB0aGlzLl9tZXNzYWdlQnVzLnN1YnNjcmliZShNZXNzYWdlVHlwZS5TdGFydFdpdGhQcmVzZXQsICgpID0+IHRoaXMuX3N0YXJ0V2l0aE5ldygpKSxcclxuICAgICAgdGhpcy5fbWVzc2FnZUJ1cy5zdWJzY3JpYmUoTWVzc2FnZVR5cGUuTG9hZFJvb21Gcm9tUHJlc2V0LCAoKSA9PiB0aGlzLl9zdGFydFdpdGhOZXcoKSksXHJcbiAgICAgIHRoaXMuX21lc3NhZ2VCdXMuc3Vic2NyaWJlKE1lc3NhZ2VUeXBlLkxvYWRSb29tRnJvbUNsb3VkLCAoKSA9PiB0aGlzLl9zdGFydFdpdGhOZXcoKSksXHJcbiAgICAgIHRoaXMuX21lc3NhZ2VCdXMuc3Vic2NyaWJlKE1lc3NhZ2VUeXBlLk5ld1Jvb20sICgpID0+IHRoaXMuX3N0YXJ0V2l0aE5ldygpKSxcclxuICAgICAgdGhpcy5fbWVzc2FnZUJ1cy5zdWJzY3JpYmUoTWVzc2FnZVR5cGUuUmVzZXRSb29tcGxhbiwgKCkgPT4gdGhpcy5fc3RhcnRXaXRoTmV3KCkpLFxyXG4gICAgICB0aGlzLl9tZXNzYWdlQnVzLnN1YnNjcmliZShNZXNzYWdlVHlwZS5Mb2FkU2NhbGVkRGlhZ3JhbSwgKCkgPT4gdGhpcy5fc3RhcnRXaXRoTmV3KCkpLFxyXG4gICAgICB0aGlzLl9hcHBFdmVudFNlcnZpY2UuZW5hYmxlSW50ZWdyYXRpb24uc3Vic2NyaWJlKChlbmFibGVkOiBib29sZWFuKSA9PiB7XHJcbiAgICAgICAgaWYgKGVuYWJsZWQpIHtcclxuICAgICAgICAgIHRoaXMuX2VuYWJsZUludGVncmF0aW9uKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICAgdGhpcy5fcHJlc2V0U2VydmljZS5iZWZvcmVMb2FkLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5fY2xlYW51cEJlZm9yZVByZXNldExvYWQoKTtcclxuICAgICAgICB0aGlzLl9zdGFydFdpdGhOZXcoKTtcclxuICAgICAgfSksXHJcbiAgICAgIHRoaXMuX3ByZXNldFNlcnZpY2UuYWZ0ZXJMb2FkLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9oYW5kbGVBZnRlclByZXNldExvYWQoKSksXHJcbiAgICAgIHRoaXMuX3Blcm1hbmVudFN0b3JlU2VydmljZS5jb2RlU2V0LnN1YnNjcmliZSgoY29kZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgaWYgKGNvZGUpIHtcclxuICAgICAgICAgIHRoaXMuX3NldENvZGVPbkZ1cm5pdHVyZUNvbmZpZ3VyYXRpb24oKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zdWJzLmZvckVhY2gocyA9PiBzLnVuc3Vic2NyaWJlKCkpO1xyXG4gICAgdGhpcy5fY2xlYW51cCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGJ1aWxkKHJlc3VsdDogQ3VzdG9tRmxvb3JHcm91cFJlc3VsdCk6IFByb21pc2U8Q3VzdG9tRmxvb3JHcm91cFJlc3VsdD4ge1xyXG4gICAgdGhpcy5fZWxlbWVudFNlcnZpY2UucmVtb3ZlRWxlbWVudChyZXN1bHQuaW5zdGFuY2VJZCk7XHJcbiAgICBpZiAocmVzdWx0ICYmIHJlc3VsdC5tZXRhRGF0YSAmJiByZXN1bHQubWV0YURhdGEuaXRlbVR5cGUgPT09IEl0ZW1UeXBlLkZsb29yRGVjb3JhdGlvbikge1xyXG4gICAgICByZXR1cm4gdGhpcy5fYnVpbGRGbG9vcihyZXN1bHQpO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmZ1bGwzRE9iamVjdFRvVXNlKSB7IC8vIHRoZXJlJ3Mgbm8gM2QgbW9kZWwgc28gZ2V0IG91dFxyXG4gICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgY29uc3QgYWRqdXN0YWJsZXM6IFNlbGVjdGlvbltdID0gdGhpcy5fZ2V0QWRqdXN0YWJsZXMoKTtcclxuICAgIGlmIChhZGp1c3RhYmxlcyAmJiBhZGp1c3RhYmxlcy5sZW5ndGggPT09IDApIHsgLy8gY2hlY2sgaWYgYXJ0aWNsZSBoYXMgYSBnYW1lT2JqZWN0XHJcbiAgICAgIGlmICh0aGlzLnNlbGVjdGlvbnNbMF0ubm9kZVR5cGUgPT09IE5vZGVUeXBlLkFydGljbGUgJiYgdGhpcy5zZWxlY3Rpb25zWzBdLmdhbWVPYmplY3QpIHtcclxuICAgICAgICBhZGp1c3RhYmxlcy5wdXNoKHRoaXMuc2VsZWN0aW9uc1swXSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwID0gdGhpcy5fY3JlYXRlQ29uZmlndXJhYmxlSXRlbShyZXN1bHQuaW5zdGFuY2VJZCwgcmVzdWx0Lm1ldGFEYXRhKTtcclxuICAgIGNvbnN0IGl0ZW06IEl0ZW0gPSB0aGlzLl9jcmVhdGVDb25maWd1cmFibGVJdGVtKHJlc3VsdC5pbnN0YW5jZUlkLCByZXN1bHQubWV0YURhdGEpO1xyXG4gICAgaWYgKGFkanVzdGFibGVzICYmIGFkanVzdGFibGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgbGV0IGNvbm5lY3RlZCA9IGZhbHNlO1xyXG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuOiBudW1iZXIgPSBhZGp1c3RhYmxlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGFkanVzdGFibGU6IE9iamVjdDNEID0gdGhpcy5fY3JlYXRlQWRqdXN0YWJsZShpdGVtLCBhZGp1c3RhYmxlc1tpXSk7XHJcbiAgICAgICAgaWYgKGFkanVzdGFibGUpIHtcclxuICAgICAgICAgIGZvciAobGV0IGlpID0gdGhpcy5fcGxhY2VkQWRqdXN0YWJsZXMubGVuZ3RoIC0gMTsgaWkgPj0gMDsgaWktLSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5faXNNb3ZlYWJsZU9iamVjdChhZGp1c3RhYmxlKSkgeyAvLyB2cmlqZSB2ZXJwbGFhdHNpbmcgbW9nZWxpamssIGNvbm5lY3RlbiBhYW4gb3BnZXNsYWdlbiBjb25uZWN0b3JcclxuICAgICAgICAgICAgICBjb25zdCBzZWxlY3Rpb246IFNlbGVjdGlvbiA9IGFkanVzdGFibGUudXNlckRhdGEuc2VsZWN0aW9uO1xyXG4gICAgICAgICAgICAgIHRoaXMuX2FkZEVsZW1lbnRPbkNvbm5lY3RvcihcclxuICAgICAgICAgICAgICAgIGl0ZW0sIGFkanVzdGFibGUsIHNlbGVjdGlvbi5kZWNvQ29ubmVjdGlvbiA/IHNlbGVjdGlvbi5kZWNvQ29ubmVjdGlvbiA6IHRoaXMuYWN0aXZlQ29ubmVjdG9yLCB0aGlzLmJhc2VFbGVtZW50Tm9kZUlkKTtcclxuICAgICAgICAgICAgICBhZGp1c3RhYmxlLnZpc2libGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIGNvbm5lY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgaWYgKFNjZW5lM0RVdGlsLlRyeVNlbGVjdG9yQ29ubmVjdGlvbih0aGlzLnNjZW5lLFxyXG4gICAgICAgICAgICAgICAgaXRlbSwgdGhpcy5fcGxhY2VkQWRqdXN0YWJsZXNbaWldLCBhZGp1c3RhYmxlLCBpID09PSAxKSkge1xyXG4gICAgICAgICAgICAgICAgYWRqdXN0YWJsZS52aXNpYmxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGNvbm5lY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29ubmVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghY29ubmVjdGVkICYmIHRoaXMuX3BsYWNlZEFkanVzdGFibGVzLmxlbmd0aCA+IDEgJiYgIWVudmlyb25tZW50LnByb2R1Y3Rpb24pIHtcclxuICAgICAgICAgIHJlc3VsdC5lcnJvck1lc3NhZ2VzLnB1c2gobmV3IEVycm9yTWVzc2FnZShcclxuICAgICAgICAgICAgYE5vIGNvbm5lY3Rpb24gZm91bmQgZm9yOiAke2FkanVzdGFibGUgPyBhZGp1c3RhYmxlLm5hbWUgOiBhZGp1c3RhYmxlc1tpXS5kZWNvTm9kZS5nYW1lT2JqZWN0TmFtZX1gKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuX3BsYWNlQWRkYWJsZXMoaXRlbSk7XHJcbiAgICAgIGF3YWl0IHRoaXMuX2xvYWRWYXJpYXRpb25zKGl0ZW0sIHJlc3VsdC5tZXRhRGF0YS5pdGVtSWQpO1xyXG4gICAgICB0aGlzLl9jdXJyZW50Q3VzdG9tRmxvb3JHcm91cCA9IGF3YWl0IHRoaXMuX3JlcGxhY2VDdXJyZW50SXRlbShpdGVtLCByZXN1bHQubWV0YURhdGEsIHRydWUpO1xyXG4gICAgICBpZiAodGhpcy5fdmlld01vZGVTZXJ2aWNlLnZpZXdNb2RlICE9PSBWaWV3TW9kZS5JblBob3RvVmlldykge1xyXG4gICAgICAgIHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwLnVwZGF0ZVBpdm90KCk7XHJcbiAgICAgIH1cclxuICAgICAgcmVzdWx0LmZ1cm5pdHVyZSA9IHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwO1xyXG4gICAgICByZXN1bHQuaW5zdGFuY2VJZCA9IHJlc3VsdC5tZXRhRGF0YS5pdGVtSWQ7XHJcbiAgICAgIHRoaXMuYXJQbGFjZW1lbnRVcGRhdGUubmV4dCh0cnVlKTtcclxuICAgICAgdGhpcy5faGFuZGxlSW50ZWdyYXRpb24ocmVzdWx0Lm1ldGFEYXRhLml0ZW1JZCwgdGhpcy5fY3VycmVudEN1c3RvbUZsb29yR3JvdXApO1xyXG5cclxuICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwLml0ZW1Hcm91cCkge1xyXG4gICAgICAgIHRoaXMuX2l0ZW1Hcm91cFNlcnZpY2UucmVhdHRhY2hUb0l0ZW1Hcm91cChcclxuICAgICAgICAgIHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwLFxyXG4gICAgICAgICAgdGhpcy5fY3VycmVudEN1c3RvbUZsb29yR3JvdXAuaXRlbUdyb3VwLFxyXG4gICAgICAgICAgdGhpcy5fY3VycmVudEN1c3RvbUZsb29yR3JvdXAucG9zaXRpb24pO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuX2Fuc3dlclNlbGVjdGVkLmxlbmd0aCA9IDA7XHJcblxyXG4gICAgICBpZiAodGhpcy5fY3VycmVudEN1c3RvbUZsb29yR3JvdXAuY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgcmVzdWx0LnJlc3VsdFR5cGUgPSBSZXN1bHRUeXBlLkdhbWVvYmplY3ROYW1lTWlzbWF0Y2hJblNvdXJjZTtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVzdWx0KTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9odWRTZXJ2aWNlLnVwZGF0ZVNlbGVjdGVkSXRlbUh1ZCgpO1xyXG4gICAgICB0aGlzLmJ1aWxkRmluaXNoZWQubmV4dChyZXN1bHQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmVzdWx0LmVycm9yTWVzc2FnZXMucHVzaChuZXcgRXJyb3JNZXNzYWdlKCdOT19BREpVU1RBQkxFUycsICdOT19BREpVU1RBQkxFU19JTkZPJykpO1xyXG4gICAgICByZXN1bHQucmVzdWx0VHlwZSA9IFJlc3VsdFR5cGUuTm9BZGp1c3RhYmxlcztcclxuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlc3VsdCk7XHJcbiAgICB9XHJcbiAgICBpZiAocmVzdWx0LnJlc3VsdFR5cGUgPT09IFJlc3VsdFR5cGUuTm9TZWxlY3Rpb25zKSB7XHJcbiAgICAgIHJlc3VsdC5yZXN1bHRUeXBlID0gUmVzdWx0VHlwZS5Db25maWd1cmF0aW9uRml4ZWQ7XHJcbiAgICB9IGVsc2UgaWYgKHJlc3VsdC5yZXN1bHRUeXBlICE9PSBSZXN1bHRUeXBlLk9ic29sZXRlICYmIHJlc3VsdC5yZXN1bHRUeXBlICE9PSBSZXN1bHRUeXBlLkNvbmZpZ3VyYXRpb25GaXhlZCkgeyAvLyBkb24ndCBvdmVycmlkZSB0aGVzZVxyXG4gICAgICByZXN1bHQucmVzdWx0VHlwZSA9IFJlc3VsdFR5cGUuTG9hZGVkO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fYXBwRXZlbnRTZXJ2aWNlLnJlYWR5VG9SZW5kZXIubmV4dCh0aGlzLnN0YW5kQWxvbmVGaXJzdEJ1aWxkUmVhZHkpO1xyXG4gICAgdGhpcy5fc2NlbmVTZXJ2aWNlLnVwZGF0ZVBhdGhUcmFjZXIoKTtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgc3RhcnRUb0J1aWxkKFxyXG4gICAgcmVzdWx0PzogQ3VzdG9tRmxvb3JHcm91cFJlc3VsdCxcclxuICAgIG1ldGFkYXRhPzogTWV0YWRhdGEsXHJcbiAgICBzaG91bGRDb3B5SW5zdGFuY2U6IGJvb2xlYW4gPSBmYWxzZSxcclxuICAgIGxvb3NlT3JpZ2luYWxDb25maWd1cmF0aW9uOiBib29sZWFuID0gdHJ1ZSxcclxuICAgIHN0YW5kQWxvbmU/OiBib29sZWFuLFxyXG4gICAgZmlyc3RCdWlsZDogYm9vbGVhbiA9IGZhbHNlXHJcbiAgKTogUHJvbWlzZTxDdXN0b21GbG9vckdyb3VwUmVzdWx0PiB7XHJcbiAgICBpZiAoIWlzTmlsbChzdGFuZEFsb25lKSkge1xyXG4gICAgICB0aGlzLnN0YW5kQWxvbmUgPSBzdGFuZEFsb25lO1xyXG4gICAgfVxyXG4gICAgaWYgKGlzTmlsbChyZXN1bHQpKSB7XHJcbiAgICAgIHJlc3VsdCA9IG5ldyBDdXN0b21GbG9vckdyb3VwUmVzdWx0KFxyXG4gICAgICAgIG1ldGFkYXRhID8gbWV0YWRhdGEuaXRlbUlkZW50aWZpZXIgOiAnJyxcclxuICAgICAgICBtZXRhZGF0YSA/IG1ldGFkYXRhLml0ZW1OYW1lIDogJ3Vua25vd24nKTtcclxuICAgICAgcmVzdWx0Lm1ldGFEYXRhID0gbWV0YWRhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHNob3VsZENvcHlJbnN0YW5jZSkge1xyXG4gICAgICBjb25zdCBvcmlnaW5hbEluc3RhbmNlSWQ6IHN0cmluZyA9IHJlc3VsdC5tZXRhRGF0YS5pdGVtSWQ7XHJcbiAgICAgIGlmIChsb29zZU9yaWdpbmFsQ29uZmlndXJhdGlvbikge1xyXG4gICAgICAgIHJlc3VsdC5tZXRhRGF0YS5pdGVtSWQgPSBhd2FpdCB0aGlzLl9pT25lLmNvcHlJbnN0YW5jZUFuZExvc2VPcmlnaW5hbENvbmZpZ3VyYXRpb24ob3JpZ2luYWxJbnN0YW5jZUlkLCByZXN1bHQpXHJcbiAgICAgICAgICAuY2F0Y2goKGUpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsSW5zdGFuY2VJZDtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJlc3VsdC5tZXRhRGF0YS5pdGVtSWQgPSBhd2FpdCB0aGlzLl9pT25lLmNvcHlJbnN0YW5jZUFuZFNhdmVPcmlnaW5hbENvbmZpZ3VyYXRpb24ob3JpZ2luYWxJbnN0YW5jZUlkLCByZXN1bHQpXHJcbiAgICAgICAgICAuY2F0Y2goKGUpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsSW5zdGFuY2VJZDtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHJlc3VsdC5yZXN1bHRUeXBlICE9PSBSZXN1bHRUeXBlLkFydGljbGVOb3RGb3VuZCkge1xyXG4gICAgICBhd2FpdCB0aGlzLl9zZXRJbnN0YW5jZVRvQ29uZmlndXJlKHJlc3VsdClcclxuICAgICAgICAuY2F0Y2goKGUpID0+IFByb21pc2UucmVqZWN0KHJlc3VsdCkpO1xyXG4gICAgfVxyXG4gICAgcmVzdWx0Lmluc3RhbmNlSWQgPSByZXN1bHQubWV0YURhdGEuaXRlbUlkO1xyXG4gICAgdGhpcy5zdGFydFBvc2l0aW9uID0gcmVzdWx0Lm1ldGFEYXRhLnBvc2l0aW9uID8gcmVzdWx0Lm1ldGFEYXRhLnBvc2l0aW9uLmNsb25lKCkgOiBuZXcgVmVjdG9yMygpO1xyXG5cclxuICAgIGF3YWl0IHRoaXMuX2lPbmUuZ2V0UXVlc3Rpb25BbmRBbnN3ZXJzQXN5bmMoKTsgLy8gc2VlIGlmIHRoZXJlIGlzIHVzZXIgaW5wdXQgbmVlZGVkXHJcbiAgICBpZiAodGhpcy5faU9uZS5hY3RpdmVBbnN3ZXJzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICBhd2FpdCB0aGlzLl9wcmVwYXJlU2VsZWN0aW9uc0FuZERlY29zKHJlc3VsdClcclxuICAgICAgICAuY2F0Y2goKGUpID0+IFByb21pc2UucmVqZWN0KGUpKTtcclxuICAgICAgcmV0dXJuIHRoaXMuYnVpbGQocmVzdWx0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChmaXJzdEJ1aWxkKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5fcHJlcGFyZVNlbGVjdGlvbnNBbmREZWNvcyhyZXN1bHQpXHJcbiAgICAgICAgICAuY2F0Y2goKGUpID0+IFByb21pc2UucmVqZWN0KGUpKTtcclxuICAgICAgICBpZiAodGhpcy5faU9uZS5zZWxlY3Rpb25zLmxlbmd0aCA8IDEpIHtcclxuICAgICAgICAgIHJlc3VsdC5yZXN1bHRUeXBlID0gUmVzdWx0VHlwZS5OZWVkc1VzZXJJbnB1dDtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2lPbmUuc2VsZWN0aW9ucy5sZW5ndGggPCAyKSB7XHJcbiAgICAgICAgICByZXN1bHQucmVzdWx0VHlwZSA9IFJlc3VsdFR5cGUuQnVpbGRGcm9tU2NyYXRjaDtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2lPbmUuc2VsZWN0aW9ucy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICByZXN1bHQucmVzdWx0VHlwZSA9IFJlc3VsdFR5cGUuTmVlZHNVc2VySW5wdXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRPcHRpb25zRnJvbVNlbGVjdGlvbihiYXNlU2VsZWN0aW9uOiBTZWxlY3Rpb24pOiBTZWxlY3Rpb25bXSB7XHJcbiAgICBjb25zdCBzZWxlY3Rpb25zOiBTZWxlY3Rpb25bXSA9IFtdO1xyXG4gICAgbGV0IG5vZGVMZXZlbCA9IC0xO1xyXG4gICAgY29uc3QgbGVuOiBudW1iZXIgPSB0aGlzLnNlbGVjdGlvbnMubGVuZ3RoO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICBjb25zdCBzZWxlY3Rpb246IFNlbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uc1tpXTtcclxuICAgICAgY29uc3QgbGV2ZWw6IG51bWJlciA9IHNlbGVjdGlvbi5wcmVzZW50YXRpb25MZXZlbDtcclxuICAgICAgaWYgKG5vZGVMZXZlbCAhPT0gLTEpIHtcclxuICAgICAgICBpZiAobm9kZUxldmVsIDwgbGV2ZWwgJiYgdGhpcy5fY2FuQ29ubmVjdFNlbGVjdGlvbnMoYmFzZVNlbGVjdGlvbiwgc2VsZWN0aW9uKSAmJiB0aGlzLl9zZWxlY3Rpb25QdWJsaXNoZWQoc2VsZWN0aW9uKSkge1xyXG4gICAgICAgICAgc2VsZWN0aW9ucy5wdXNoKHNlbGVjdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChub2RlTGV2ZWwgPj0gbGV2ZWwpIHtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoc2VsZWN0aW9uLmlkID09PSBiYXNlU2VsZWN0aW9uLmlkICYmIHNlbGVjdGlvbi5ub2RlID09PSBiYXNlU2VsZWN0aW9uLm5vZGUpIHtcclxuICAgICAgICBub2RlTGV2ZWwgPSBsZXZlbDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHNlbGVjdGlvbnM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZG93bmxvYWRDdXJyZW50Q3VzdG9tRmxvb3Jncm91cCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IG9iamVjdFRvRXhwb3J0OiBPYmplY3QzRCA9IHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwID8gdGhpcy5fY3VycmVudEN1c3RvbUZsb29yR3JvdXAgOiB0aGlzLl9pdGVtU2VydmljZS5pdGVtc1swXTtcclxuICAgIHRoaXMuX3V0aWxzU2VydmljZS5zaG93RXhwb3J0RGlhbG9nKG9iamVjdFRvRXhwb3J0KTtcclxuICB9XHJcbiAgcHVibGljIGRvd25sb2FkVURTWmZvckFSSU9TKCk6IHZvaWQge1xyXG4gICAgY29uc3Qgb2JqZWN0VG9FeHBvcnQ6IE9iamVjdDNEID0gdGhpcy5fY3VycmVudEN1c3RvbUZsb29yR3JvdXAgPyB0aGlzLl9jdXJyZW50Q3VzdG9tRmxvb3JHcm91cCA6IHRoaXMuX2l0ZW1TZXJ2aWNlLml0ZW1zWzBdO1xyXG4gICAgdGhpcy5fdXRpbHNTZXJ2aWNlLmRvd25sb2FkVVNEWmZvckFSSU9TKG9iamVjdFRvRXhwb3J0KTtcclxuICB9XHJcbiAgcHVibGljIGRvd25sb2FkU2NlbmUoKTogdm9pZCB7XHJcbiAgICBjb25zdCBhc3NldFBhdGg6IHN0cmluZyA9IHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5hc3NldFBhdGg7XHJcbiAgICAvLyBUaGUgZ3JvdW5kIHBsYW5lIGxvb2tzIG9kZCBpbiByZW5kZXJzLlxyXG4gICAgLy8gVGhlIGh1ZC1yaW5nIGFuZCBodWQtY2lyY2xlIGFyZSB0aGUgd2Fsa3Rocm91Z2ggbW9kZSBtYXJrZXIsXHJcbiAgICAvLyB3aGljaCBpcyBub3Qgc3VwcG9zZWQgdG8gYmUgcmVuZGVyZWQuXHJcbiAgICBjb25zdCBlbGVtZW50c1RvUmVtb3ZlID0gWydncm91bmQtcGxhbmUnLCAnaHVkLXJpbmcnLCAnaHVkLWNpcmNsZSddO1xyXG5cclxuICAgIGxldCBzY2VuZTogU2NlbmU7XHJcbiAgICBzY2VuZSA9IHRoaXMuX3NjZW5lU2VydmljZS5zY2VuZS5jbG9uZSgpO1xyXG5cclxuICAgIGVsZW1lbnRzVG9SZW1vdmUuZm9yRWFjaChlbGVtZW50TmFtZSA9PiB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkT2JqZWN0OiBPYmplY3QzRCA9IHNjZW5lLmdldE9iamVjdEJ5TmFtZShlbGVtZW50TmFtZSk7XHJcbiAgICAgIHNjZW5lLnJlbW92ZShzZWxlY3RlZE9iamVjdCk7XHJcbiAgICB9KTtcclxuICAgIHNjZW5lLmFkZCh0aGlzLl9jYW1lcmFTZXJ2aWNlLmNhbWVyYS5jbG9uZSgpKTtcclxuXHJcbiAgICB0aGlzLl91dGlsc1NlcnZpY2Uuc2hvd0V4cG9ydERpYWxvZyhzY2VuZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY3JlYXRlU2ltcGxlM0RNb2RlbChyZXN1bHQ6IEN1c3RvbUZsb29yR3JvdXBSZXN1bHQsIHN0YW5kQWxvbmU/OiBib29sZWFuKTogQ3VzdG9tRmxvb3JHcm91cFJlc3VsdCB7XHJcbiAgICBpZiAoIWlzTmlsbChzdGFuZEFsb25lKSkge1xyXG4gICAgICB0aGlzLnN0YW5kQWxvbmUgPSBzdGFuZEFsb25lO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmZ1bGwzRE9iamVjdFRvVXNlKSB7IC8vIHRoZXJlJ3Mgbm8gM2QgbW9kZWwgc28gZ2V0IG91dFxyXG4gICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgLy8gdGhlcmUgYXJlIG5vIHNlbGVjdGlvbnMgb3IgZGVjb3MgZm9yIHNpbXBsZSBhcnRpY2xlcywgc28gZW1wdHkgbGlzdHMgZm9yIGludGVncmF0aW9uIHB1cnBvc2VzXHJcbiAgICB0aGlzLl9pT25lLmVtcHR5U2VsZWN0aW9ucygpO1xyXG4gICAgdGhpcy5mdWxsM0RPYmplY3RUb1VzZS5jaGlsZHJlbi5mb3JFYWNoKGMgPT4gYy52aXNpYmxlID0gdHJ1ZSk7XHJcbiAgICBpZiAoIXJlc3VsdC5tZXRhRGF0YS5wb3NpdGlvbikge1xyXG4gICAgICByZXN1bHQubWV0YURhdGEucG9zaXRpb24gPSB0aGlzLnN0YXJ0UG9zaXRpb24gfHwgZGVmYXVsdFBvc2l0aW9uO1xyXG4gICAgfVxyXG4gICAgaWYgKCFyZXN1bHQubWV0YURhdGEucm90YXRpb24pIHtcclxuICAgICAgcmVzdWx0Lm1ldGFEYXRhLnJvdGF0aW9uID0gcmVzdWx0Lm1ldGFEYXRhLmRlZmF1bHQxODAgPyBkZWZhdWx0Um90YXRpb24gOiBuZXcgRXVsZXIoKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGl0ZW1Db25zdHJ1Y3RvciA9IEZhY3RvcnkuZ2V0Q2xhc3ModGhpcy5zdGFuZEFsb25lID8gSXRlbVR5cGUuRmxvb3JHcm91cCA6IHJlc3VsdC5tZXRhRGF0YS5pdGVtVHlwZSk7XHJcbiAgICBjb25zdCBpdGVtID0gbmV3IGl0ZW1Db25zdHJ1Y3RvcihcclxuICAgICAgcmVzdWx0Lm1ldGFEYXRhLFxyXG4gICAgICB0aGlzLmZ1bGwzRE9iamVjdFRvVXNlXHJcbiAgICApO1xyXG4gICAgcmVzdWx0Lm1ldGFEYXRhLm9iamVjdFVVSUQgPSBpdGVtLnV1aWQ7XHJcbiAgICBpdGVtLmFsbG93Um90YXRlID0gIXRoaXMuc3RhbmRBbG9uZTtcclxuICAgIGl0ZW0uaGlnaExpZ2h0RGlzYWJsZWQgPSAhdGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLm9wdGlvbnMudXNlU3RhbmRhbG9uZUhpZ2hMaWdodDtcclxuXHJcbiAgICB0aGlzLl9pdGVtU2VydmljZS5hZGRJdGVtKGl0ZW0pO1xyXG4gICAgaWYgKGl0ZW0uaXRlbUdyb3VwKSB7XHJcbiAgICAgIHRoaXMuX2l0ZW1Hcm91cFNlcnZpY2UucmVhdHRhY2hUb0l0ZW1Hcm91cChpdGVtLCBpdGVtLml0ZW1Hcm91cCwgaXRlbS5wb3NpdGlvbik7XHJcbiAgICB9XHJcbiAgICAvLyBGb3Igc2ltcGxlIGFydGljbGVzIHdlIHVzZSBvYmplY3QgdXVpZCwgYmVjYXVzZSB0aGV5IGRvbid0IGhhdmUgYW4gaW5zdGFuY2VJZFxyXG4gICAgdGhpcy5fdXBzZXJ0RnVybml0dXJlKGl0ZW0udXVpZCwge0JyYW5kSWRlbnRpZmllcjogcmVzdWx0Lm1ldGFEYXRhLml0ZW1JZGVudGlmaWVyfSwgaXRlbSk7XHJcbiAgICB0aGlzLl9oYW5kbGVJbnRlZ3JhdGlvbihpdGVtLnV1aWQsIGl0ZW0pO1xyXG5cclxuICAgIHJlc3VsdC5mdXJuaXR1cmUgPSBpdGVtO1xyXG4gICAgdGhpcy5fc2NlbmVTZXJ2aWNlLnVwZGF0ZVBhdGhUcmFjZXIoKTtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9idWlsZEZsb29yKHJlc3VsdDogQ3VzdG9tRmxvb3JHcm91cFJlc3VsdCk6IFByb21pc2U8Q3VzdG9tRmxvb3JHcm91cFJlc3VsdD4ge1xyXG4gICAgY29uc3QgaXRlbTogRmxvb3JQbGFuZUl0ZW0gPSB0aGlzLl9mbG9vclNlcnZpY2UuZmxvb3JUb0NvbmZpZ3VyZTtcclxuICAgIGl0ZW0ubWV0YWRhdGEgPSByZXN1bHQubWV0YURhdGE7XHJcbiAgICBpdGVtLmNoaWxkcmVuWzBdLnVzZXJEYXRhLnNlbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uc1swXTtcclxuICAgIGl0ZW0uY29uZmlndXJpbmdDaGFuZ2VIYW5kbGVyID0gdGhpcy5jaGFuZ2VDb25maWd1cmVNb2RlO1xyXG4gICAgaXRlbS5zZWxlY3RlZEhhbmRsZXIgPSB0aGlzLnNlbGVjdEl0ZW07XHJcbiAgICBpdGVtLnVuc2VsZWN0ZWRIYW5kbGVyID0gdGhpcy51blNlbGVjdEl0ZW07XHJcbiAgICBhd2FpdCB0aGlzLl9sb2FkVmFyaWF0aW9ucyhpdGVtLCByZXN1bHQubWV0YURhdGEuaXRlbUlkKTtcclxuICAgIHRoaXMuX2Zsb29yU2VydmljZS51bkhpZ2hMaWdodEZsb29ycygpO1xyXG4gICAgdGhpcy5fc2NlbmVTZXJ2aWNlLm5lZWRzUmVuZGVyID0gdHJ1ZTtcclxuICAgIHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwID0gaXRlbTtcclxuICAgIHJlc3VsdC5mdXJuaXR1cmUgPSB0aGlzLl9jdXJyZW50Q3VzdG9tRmxvb3JHcm91cDtcclxuICAgIHJlc3VsdC5pbnN0YW5jZUlkID0gcmVzdWx0Lm1ldGFEYXRhLml0ZW1JZDtcclxuICAgIHRoaXMuX2hhbmRsZUludGVncmF0aW9uKHJlc3VsdC5tZXRhRGF0YS5pdGVtSWQsIHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwKTtcclxuICAgIGlmICh0aGlzLl9jdXJyZW50Q3VzdG9tRmxvb3JHcm91cC5pdGVtR3JvdXApIHtcclxuICAgICAgdGhpcy5faXRlbUdyb3VwU2VydmljZS5yZWF0dGFjaFRvSXRlbUdyb3VwKFxyXG4gICAgICAgICAgdGhpcy5fY3VycmVudEN1c3RvbUZsb29yR3JvdXAsXHJcbiAgICAgICAgICB0aGlzLl9jdXJyZW50Q3VzdG9tRmxvb3JHcm91cC5pdGVtR3JvdXAsXHJcbiAgICAgICAgICB0aGlzLl9jdXJyZW50Q3VzdG9tRmxvb3JHcm91cC5wb3NpdGlvbik7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9hbnN3ZXJTZWxlY3RlZC5sZW5ndGggPSAwO1xyXG4gICAgdGhpcy5faHVkU2VydmljZS51cGRhdGVTZWxlY3RlZEl0ZW1IdWQoKTtcclxuICAgIHRoaXMuX2dlbmVyYXRlTGF5aW5nUGF0dGVybihpdGVtKTtcclxuICAgIHRoaXMuYnVpbGRGaW5pc2hlZC5uZXh0KHJlc3VsdCk7XHJcbiAgICBpZiAocmVzdWx0LnJlc3VsdFR5cGUgPT09IFJlc3VsdFR5cGUuTm9TZWxlY3Rpb25zKSB7XHJcbiAgICAgIHJlc3VsdC5yZXN1bHRUeXBlID0gUmVzdWx0VHlwZS5Db25maWd1cmF0aW9uRml4ZWQ7XHJcbiAgICB9IGVsc2UgaWYgKHJlc3VsdC5yZXN1bHRUeXBlICE9PSBSZXN1bHRUeXBlLk9ic29sZXRlICYmIHJlc3VsdC5yZXN1bHRUeXBlICE9PSBSZXN1bHRUeXBlLkNvbmZpZ3VyYXRpb25GaXhlZCkgeyAvLyBkb24ndCBvdmVycmlkZSB0aGVzZVxyXG4gICAgICByZXN1bHQucmVzdWx0VHlwZSA9IFJlc3VsdFR5cGUuTG9hZGVkO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dlbmVyYXRlTGF5aW5nUGF0dGVybihmbG9vcjogRmxvb3JQbGFuZUl0ZW0pOiB2b2lkIHtcclxuICAgIGNvbnN0IGZsb29yUGF0dGVybkluZm8gPSB0aGlzLl9nZW5lcmF0ZUZsb29yUGF0dGVybkluZm8oZmxvb3IpO1xyXG5cclxuICAgIGZsb29yLnJlc3RvcmVGbG9vck9iamVjdCgpO1xyXG5cclxuICAgIGNvbnN0IG1lc2hMZWZ0ID0gdGhpcy5mdWxsM0RPYmplY3RUb1VzZS5jaGlsZHJlbi5maW5kKG0gPT4gbS5uYW1lID09PSBmbG9vclBhdHRlcm5JbmZvLm1lc2hJZExlZnQpIGFzIE1lc2g7XHJcbiAgICB0aGlzLl9ub3JtYWxpemVNZXNoKG1lc2hMZWZ0KTtcclxuICAgIGxldCBtZXNoUmlnaHQ6IE1lc2ggPSBudWxsO1xyXG5cclxuICAgIGlmIChmbG9vclBhdHRlcm5JbmZvLm1lc2hJZFJpZ2h0ICE9PSBudWxsKSB7XHJcbiAgICAgIG1lc2hSaWdodCA9IHRoaXMuZnVsbDNET2JqZWN0VG9Vc2UuY2hpbGRyZW4uZmluZChtID0+IG0ubmFtZSA9PT0gZmxvb3JQYXR0ZXJuSW5mby5tZXNoSWRSaWdodCkgYXMgTWVzaDtcclxuICAgICAgdGhpcy5fbm9ybWFsaXplTWVzaChtZXNoUmlnaHQpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGZsb29yU2l6ZSA9IGZsb29yLnNpemU7XHJcbiAgICBjb25zdCBwbGFua1NpemUgPSBuZXcgVmVjdG9yMygpO1xyXG5cclxuICAgIG1lc2hMZWZ0Lmdlb21ldHJ5LmJvdW5kaW5nQm94LmdldFNpemUocGxhbmtTaXplKTtcclxuXHJcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuX2Zsb29yUGF0dGVyblNlcnZpY2UuZ2VuZXJhdGVQYXR0ZXJuKFxyXG4gICAgICBmbG9vclBhdHRlcm5JbmZvLmZsb29yUGF0dGVybixcclxuICAgICAgcGxhbmtTaXplLFxyXG4gICAgICBmbG9vclNpemUsXHJcbiAgICAgIGZsb29yUGF0dGVybkluZm8uZmxvb3JQYXR0ZXJuRGlyZWN0aW9uLFxyXG4gICAgICBmbG9vclBhdHRlcm5JbmZvLmhlYXJ0TGluZVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBtYXRlcmlhbCA9IGZsb29yLmdldE1hdGVyaWFsKCk7XHJcblxyXG4gICAgdGhpcy5fZmxvb3JUaWxlSW50ZXJzZWN0aW9uU2VydmljZS50b2dnbGVEZWJ1ZygpO1xyXG5cclxuICAgIGNvbnN0IGZsb29yQ291bnRSZXN1bHQgPSB0aGlzLl9mbG9vclRpbGVJbnRlcnNlY3Rpb25TZXJ2aWNlLmNvdW50VGlsZXMoXHJcbiAgICAgIGZsb29yLmZsb29yTWVzaCxcclxuICAgICAgaXRlbXMsXHJcbiAgICAgIG1lc2hMZWZ0Lmdlb21ldHJ5LFxyXG4gICAgICAobWVzaFJpZ2h0KSA/IG1lc2hSaWdodC5nZW9tZXRyeSA6IG51bGwsXHJcbiAgICAgIHRydWVcclxuICAgICk7XHJcblxyXG4gICAgZmxvb3IubWV0YWRhdGEuZmxvb3JDb3VudFJlc3VsdCA9IGZsb29yQ291bnRSZXN1bHQ7XHJcblxyXG4gICAgY29uc3QgbGVmdEl0ZW1zID0gbmV3IEFycmF5PEZsb29yUGF0dGVyblRyYW5zZm9ybT4oKTtcclxuICAgIGNvbnN0IHJpZ2h0SXRlbXMgPSBuZXcgQXJyYXk8Rmxvb3JQYXR0ZXJuVHJhbnNmb3JtPigpO1xyXG5cclxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBmbG9vckNvdW50UmVzdWx0LmZpbHRlcmVkKSB7XHJcbiAgICAgIGlmIChpdGVtLmlzTGVmdCkge1xyXG4gICAgICAgIGxlZnRJdGVtcy5wdXNoKGl0ZW0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJpZ2h0SXRlbXMucHVzaChpdGVtKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHBsYW5rc0xlZnQgPSB0aGlzLl9pbnN0YW5jZWRNZXNoRnJvbUZsb29yUGF0dGVyblRyYW5zZm9ybShtZXNoTGVmdC5nZW9tZXRyeSwgbGVmdEl0ZW1zLCBtYXRlcmlhbCk7XHJcbiAgICBsZXQgcGxhbmtzUmlnaHQ6IEluc3RhbmNlZE1lc2g7XHJcbiAgICBpZiAobWVzaFJpZ2h0KSB7XHJcbiAgICAgIHBsYW5rc1JpZ2h0ID0gdGhpcy5faW5zdGFuY2VkTWVzaEZyb21GbG9vclBhdHRlcm5UcmFuc2Zvcm0obWVzaFJpZ2h0Lmdlb21ldHJ5LCByaWdodEl0ZW1zLCBtYXRlcmlhbCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY3VzdG9tRmxvb3JXcmFwcGVyID0gbmV3IE9iamVjdDNEKCk7XHJcbiAgICBjdXN0b21GbG9vcldyYXBwZXIuYWRkKHBsYW5rc0xlZnQpO1xyXG4gICAgaWYgKHBsYW5rc1JpZ2h0KSBjdXN0b21GbG9vcldyYXBwZXIuYWRkKHBsYW5rc1JpZ2h0KTtcclxuICAgIGZsb29yLmZsb29yT2JqZWN0ID0gY3VzdG9tRmxvb3JXcmFwcGVyO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaW5zdGFuY2VkTWVzaEZyb21GbG9vclBhdHRlcm5UcmFuc2Zvcm0oZ2VvbTogQnVmZmVyR2VvbWV0cnksIHBhdHRlcm46IEFycmF5PEZsb29yUGF0dGVyblRyYW5zZm9ybT4sIG1hdGVyaWFsOiBNYXRlcmlhbCB8IE1hdGVyaWFsW10pIHtcclxuICAgIGlmIChwYXR0ZXJuLmxlbmd0aCA8PSAwKSByZXR1cm4gbnVsbDtcclxuICAgIGNvbnN0IHRhcmdldFBsYW5rTWVzaCA9IG5ldyBJbnN0YW5jZWRNZXNoKGdlb20sIG1hdGVyaWFsLCBwYXR0ZXJuLmxlbmd0aCk7XHJcbiAgICBjb25zdCBkdW1teSA9IG5ldyBPYmplY3QzRCgpO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXR0ZXJuLmxlbmd0aDsgaSArKykge1xyXG4gICAgICBjb25zdCBpdGVtID0gcGF0dGVybltpXTtcclxuXHJcbiAgICAgIGNvbnN0IHBvc2l0aW9uOiBWZWN0b3IzID0gaXRlbS5wb3NpdGlvbjtcclxuICAgICAgY29uc3Qgcm90YXRpb246IFZlY3RvcjMgPSBpdGVtLnJvdGF0aW9uO1xyXG4gICAgICBkdW1teS5wb3NpdGlvbi5zZXQocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgcG9zaXRpb24ueik7XHJcbiAgICAgIGR1bW15LnJvdGF0aW9uLnNldChyb3RhdGlvbi54LCByb3RhdGlvbi55LCByb3RhdGlvbi56KTtcclxuICAgICAgZHVtbXkudXBkYXRlTWF0cml4KCk7XHJcbiAgICAgIHRhcmdldFBsYW5rTWVzaC5zZXRNYXRyaXhBdChpLCBkdW1teS5tYXRyaXgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGFyZ2V0UGxhbmtNZXNoO1xyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgX2dlbmVyYXRlRmxvb3JQYXR0ZXJuSW5mbyhpdGVtOiBJdGVtKTogRmxvb3JQYXR0ZXJuSW5mbyB7XHJcbiAgICB0aGlzLl9nZW5lcmF0ZVNlbGVjdGVkSW5NZXRhZGF0YShpdGVtKTtcclxuICAgIGNvbnN0IGluZm86IEZsb29yUGF0dGVybkluZm8gPSB7XHJcbiAgICAgIG1lc2hJZExlZnQ6IG51bGwsXHJcbiAgICAgIG1lc2hJZFJpZ2h0OiBudWxsLFxyXG4gICAgICBmbG9vclBhdHRlcm46IEZsb29yUGF0dGVybi5OT1JNQUwsXHJcbiAgICAgIGZsb29yUGF0dGVybkRpcmVjdGlvbjogRmxvb3JQYXR0ZXJuRGlyZWN0aW9uLkxZSU5HLFxyXG4gICAgICBoZWFydExpbmU6IDBcclxuICAgIH07XHJcblxyXG4gICAgY29uc3Qgc2VsZWN0ZWQgPSBpdGVtLm1ldGFkYXRhLnNlbGVjdGlvbnM7XHJcblxyXG4gICAgY29uc3QgYWZtZXRpbmcgPSBzZWxlY3RlZC5maW5kKHMgPT4gcy5xdWVzdGlvbi50b0xvd2VyQ2FzZSgpID09PSAncGxhbmsgYWZtZXRpbmcnKTtcclxuICAgIGxldCBhZm1ldGluZ1N0cmluZzogc3RyaW5nID0gYWZtZXRpbmcuYW5zd2VyLnRvTG93ZXJDYXNlKCk7XHJcbiAgICBhZm1ldGluZ1N0cmluZyA9IGFmbWV0aW5nU3RyaW5nLnN1YnN0cihhZm1ldGluZ1N0cmluZy5sYXN0SW5kZXhPZignICcpICsgMSk7XHJcbiAgICBjb25zdCBsZWdQYXRyb29uQW5zd2VyID0gc2VsZWN0ZWQuZmluZChzID0+IHMucXVlc3Rpb24udG9Mb3dlckNhc2UoKSA9PT0gJ2xlZyBwYXRyb29uJykuYW5zd2VyLnRvTG93ZXJDYXNlKCk7XHJcbiAgICBsZXQgbGVnUGF0cm9vblN0cmluZyA9ICcnO1xyXG4gICAgY29uc3QgaGFydGxpbmVUeXBlID0gc2VsZWN0ZWQuZmluZChzID0+IHMucXVlc3Rpb24udG9Mb3dlckNhc2UoKSA9PT0gJ2hhcnRsaWpuJyk7XHJcblxyXG4gICAgaWYgKGhhcnRsaW5lVHlwZSAmJiBoYXJ0bGluZVR5cGUuYW5zd2VyLnRvTG93ZXJDYXNlKCkgPT09ICdhYW5nZXBhc3QnKSB7XHJcbiAgICAgIGNvbnN0IGhhcnRsaW5lVmFsdWUgPSBzZWxlY3RlZC5maW5kKHMgPT4gcy5xdWVzdGlvbi50b0xvd2VyQ2FzZSgpID09PSAnaGFydGxpam5fYWFuZ2VwYXN0Jyk7XHJcbiAgICAgIGlmIChoYXJ0bGluZVZhbHVlICYmIGhhcnRsaW5lVmFsdWUudXNlcklucHV0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGluZm8uaGVhcnRMaW5lID0gTnVtYmVyKGhhcnRsaW5lVmFsdWUudXNlcklucHV0VmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHN3aXRjaCAodHJ1ZSkge1xyXG4gICAgICBjYXNlIGxlZ1BhdHJvb25BbnN3ZXIuaW5kZXhPZigncmVjaHQnKSAhPT0gLTE6XHJcbiAgICAgICAgbGVnUGF0cm9vblN0cmluZyA9ICc5MCc7XHJcbiAgICAgICAgaW5mby5mbG9vclBhdHRlcm4gPSBGbG9vclBhdHRlcm4uTk9STUFMO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIGxlZ1BhdHJvb25BbnN3ZXIuaW5kZXhPZignZ3JhYXQnKSAhPT0gLTE6XHJcbiAgICAgICAgbGVnUGF0cm9vblN0cmluZyA9ICc5MCc7XHJcbiAgICAgICAgaW5mby5mbG9vclBhdHRlcm4gPSBGbG9vclBhdHRlcm4uSEVSUklOR0JPTkU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgbGVnUGF0cm9vbkFuc3dlci5pbmRleE9mKCc2MCcpICE9PSAtMTpcclxuICAgICAgICBsZWdQYXRyb29uU3RyaW5nID0gJzYwJztcclxuICAgICAgICBpbmZvLmZsb29yUGF0dGVybiA9IEZsb29yUGF0dGVybi5IT042MDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBsZWdQYXRyb29uQW5zd2VyLmluZGV4T2YoJzQ1JykgIT09IC0xOlxyXG4gICAgICAgIGxlZ1BhdHJvb25TdHJpbmcgPSAnNDUnO1xyXG4gICAgICAgIGluZm8uZmxvb3JQYXR0ZXJuID0gRmxvb3JQYXR0ZXJuLkhPTjQ1O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIGluZm8ubWVzaElkTGVmdCA9IGAke2FmbWV0aW5nU3RyaW5nfV8ke2xlZ1BhdHJvb25TdHJpbmd9YDtcclxuICAgIGlmICggaW5mby5mbG9vclBhdHRlcm4gPT09IEZsb29yUGF0dGVybi5IT040NSB8fCBpbmZvLmZsb29yUGF0dGVybiA9PT0gRmxvb3JQYXR0ZXJuLkhPTjYwKSB7XHJcbiAgICAgIGluZm8ubWVzaElkUmlnaHQgPSBgcl8ke2FmbWV0aW5nU3RyaW5nfV8ke2xlZ1BhdHJvb25TdHJpbmd9YDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaW5mby5mbG9vclBhdHRlcm4gPT09IEZsb29yUGF0dGVybi5IRVJSSU5HQk9ORSkge1xyXG4gICAgICBpbmZvLm1lc2hJZFJpZ2h0ID0gaW5mby5tZXNoSWRMZWZ0O1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGxlZ1JpY2h0aW5nQW5zd2VyID0gc2VsZWN0ZWQuZmluZChzID0+IHMucXVlc3Rpb24udG9Mb3dlckNhc2UoKSA9PT0gJ2xlZyByaWNodGluZycpLmFuc3dlci50b0xvd2VyQ2FzZSgpO1xyXG4gICAgaW5mby5mbG9vclBhdHRlcm5EaXJlY3Rpb24gPSAobGVnUmljaHRpbmdBbnN3ZXIuaW5kZXhPZigndmVydGljYWFsJykgIT09IC0xKSA/IEZsb29yUGF0dGVybkRpcmVjdGlvbi5TVEFORElORyA6IEZsb29yUGF0dGVybkRpcmVjdGlvbi5MWUlORztcclxuICAgIHJldHVybiBpbmZvO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2VuZXJhdGVTZWxlY3RlZEluTWV0YWRhdGEoaXRlbTogSXRlbSk6IHZvaWQge1xyXG4gICAgY29uc3QgY2xvbmVTZWxlY3Rpb25zID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnNlbGVjdGlvbnMpKTtcclxuICAgIGNsb25lU2VsZWN0aW9ucy5mb3JFYWNoKHMgPT4ge1xyXG4gICAgICBzLmltYWdlRGF0YSA9IHVuZGVmaW5lZDtcclxuICAgICAgcy5pbWFnZURhdGFMYXN0QW5zd2VyID0gdW5kZWZpbmVkO1xyXG4gICAgICBpZiAocy5hZGRhYmxlcykge1xyXG4gICAgICAgIHMuYWRkYWJsZXMuZm9yRWFjaChhID0+IHtcclxuICAgICAgICAgIGEuaW1hZ2VEYXRhID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGl0ZW0ubWV0YWRhdGEuZGVjb3MgPSBBcnJheS5mcm9tKHRoaXMuX2lPbmUuZGVjb05vZGVzKTtcclxuICAgIGl0ZW0ubWV0YWRhdGEuc2VsZWN0aW9ucyA9IGNsb25lU2VsZWN0aW9ucztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX25vcm1hbGl6ZU1lc2gobWVzaDogTWVzaCkge1xyXG4gICAgY29uc3QgbWVzaFNpemUgPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgbWVzaC5nZW9tZXRyeS5jb21wdXRlQm91bmRpbmdCb3goKTtcclxuICAgIG1lc2guZ2VvbWV0cnkuYm91bmRpbmdCb3guZ2V0U2l6ZShtZXNoU2l6ZSk7XHJcbiAgICBpZiAobWVzaFNpemUueiA+IG1lc2hTaXplLngpIHtcclxuICAgICAgbWVzaC5nZW9tZXRyeS5yb3RhdGVZKE1hdGguUEkgLyAyKTtcclxuICAgIH1cclxuICAgIG1lc2guZ2VvbWV0cnkuY2VudGVyKCk7XHJcbiAgICBtZXNoLmdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ0JveCgpO1xyXG4gICAgY29uc3QgY2VudGVyID0gbmV3IFZlY3RvcjMoKTtcclxuICAgIG1lc2guZ2VvbWV0cnkuYm91bmRpbmdCb3guZ2V0Q2VudGVyKGNlbnRlcik7XHJcbiAgICBtZXNoLnBvc2l0aW9uLmNvcHkoY2VudGVyKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3N0YXJ0VG9CdWlsZEZyb21Db25maWd1cmF0b3IobWV0YWRhdGE6IE1ldGFkYXRhKTogUHJvbWlzZTxDdXN0b21GbG9vckdyb3VwUmVzdWx0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5zdGFydFRvQnVpbGQobnVsbCwgbWV0YWRhdGEpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfc2V0SW5zdGFuY2VUb0NvbmZpZ3VyZShyZXN1bHQ6IEN1c3RvbUZsb29yR3JvdXBSZXN1bHQpOiBQcm9taXNlPEN1c3RvbUZsb29yR3JvdXBSZXN1bHQ+IHtcclxuICAgIGlmIChyZXN1bHQucmVzdWx0VHlwZSAhPT0gUmVzdWx0VHlwZS5UaW1lb3V0KSB7XHJcbiAgICAgIGlmIChyZXN1bHQubWV0YURhdGEuaXRlbUlkKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5faU9uZS5zZXRJbnN0YW5jZShyZXN1bHQubWV0YURhdGEuaXRlbUlkKVxyXG4gICAgICAgICAgLmNhdGNoKChlKSA9PiB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5lcnJvck1lc3NhZ2VzLnB1c2gobmV3IEVycm9yTWVzc2FnZShlKSk7XHJcbiAgICAgICAgICAgIFByb21pc2UucmVqZWN0KHJlc3VsdCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuX2lPbmUuaW5pdE5vZGVJbnN0YW5jZShyZXN1bHQubWV0YURhdGEuaXRlbUlkZW50aWZpZXIpXHJcbiAgICAgICAgICAuY2F0Y2goKGUpID0+IHtcclxuICAgICAgICAgICAgcmVzdWx0LmVycm9yTWVzc2FnZXMucHVzaChuZXcgRXJyb3JNZXNzYWdlKGUpKTtcclxuICAgICAgICAgICAgUHJvbWlzZS5yZWplY3QocmVzdWx0KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICAgICAgcmVzdWx0Lm1ldGFEYXRhLml0ZW1JZCA9IHJlc3BvbnNlLnJlc3VsdE9iamVjdDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgUHJvbWlzZS5yZWplY3QocmVzdWx0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYXdhaXQgdGhpcy5faU9uZS5zZXRJbnN0YW5jZShyZXN1bHQubWV0YURhdGEuaXRlbUlkKVxyXG4gICAgICAgICAgLmNhdGNoKChlKSA9PiB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5lcnJvck1lc3NhZ2VzLnB1c2gobmV3IEVycm9yTWVzc2FnZShlKSk7XHJcbiAgICAgICAgICAgIFByb21pc2UucmVqZWN0KHJlc3VsdCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9wcmVwYXJlU2VsZWN0aW9uc0FuZERlY29zKHJlc3VsdDogQ3VzdG9tRmxvb3JHcm91cFJlc3VsdCk6IFByb21pc2U8Q3VzdG9tRmxvb3JHcm91cFJlc3VsdD4ge1xyXG4gICAgdGhpcy5fcmVzZXQoKTtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGlvbnNBbmREZWNvUHJvbWlzZTogUHJvbWlzZTxhbnk+W10gPSBbXTtcclxuICAgICAgc2VsZWN0aW9uc0FuZERlY29Qcm9taXNlLnB1c2godGhpcy5faU9uZS5nZXRTZWxlY3Rpb25zQXN5bmMoKSwgdGhpcy5faU9uZS5nZXREZWNvc0FzeW5jKCkpO1xyXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChzZWxlY3Rpb25zQW5kRGVjb1Byb21pc2UpO1xyXG4gICAgICB0aGlzLl9wcmVsb2FkTWF0ZXJpYWxzKHJlc3VsdC5tZXRhRGF0YS5zY2hlbWEpO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuX2lPbmUuc2VsZWN0aW9ucy5sZW5ndGggPCAyKSB7IC8vIG5vIHNlbGVjdGlvbnMsIG9ubHkgc2VsZWN0aW9uIG9mIHR5cGUgJ0FSVCdcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBpZiAocmVzdWx0LnJlc3VsdFR5cGUgIT09IFJlc3VsdFR5cGUuQXJ0aWNsZU5vdEZvdW5kICYmICFyZXN1bHQubWV0YURhdGEub3JpZ2luYWxJdGVtSWQpIHsgLy8gYXJ0aWNsZSBmb3VuZCwgc28gaW5pdCB0aGF0IGZpcnN0XHJcbiAgICAgICAgICByZXN1bHQubWV0YURhdGEub3JpZ2luYWxJdGVtSWQgPSByZXN1bHQubWV0YURhdGEuaXRlbUlkO1xyXG4gICAgICAgICAgcmVzdWx0Lm1ldGFEYXRhLml0ZW1JZCA9IG51bGw7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLl9zZXRJbnN0YW5jZVRvQ29uZmlndXJlKHJlc3VsdCk7XHJcbiAgICAgICAgICByZXN1bHQucmVzdWx0VHlwZSA9IFJlc3VsdFR5cGUuTm9TZWxlY3Rpb25zO1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnRUb0J1aWxkKHJlc3VsdCk7IC8vICdyZXN0YXJ0JyB0aGUgYnVpbGRcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fZ2V0U2VsZWN0aW9uc0FuZERlY29zRnJvbU1ldGFkYXRhKHJlc3VsdCk7XHJcbiAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuX2lPbmUuc2VsZWN0aW9ucy5mb3JFYWNoKHMgPT4ge1xyXG4gICAgICBzLnNjaGVtYSA9IHJlc3VsdC5tZXRhRGF0YS5zY2hlbWE7XHJcbiAgICAgIHMuaW5zdGFuY2VJZCA9IHJlc3VsdC5tZXRhRGF0YS5pdGVtSWQ7XHJcbiAgICB9KTsgLy8gYWRkIHNjaGVtYSBmb3IgbWF0ZXJpYWwgY3JlYXRpb25cclxuICAgIHRoaXMuX2hhbmRsZVNlbGVjdGlvbnNSZWNlaXZlZChyZXN1bHQubWV0YURhdGEpO1xyXG4gICAgdGhpcy5fbGlua1NlbGVjdGlvbnNBbmREZWNvcygpO1xyXG4gICAgdGhpcy5fcHJlcGFyZVRoZVNlbGVjdGlvbnMocmVzdWx0Lm1ldGFEYXRhLml0ZW1JZCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9wcmVsb2FkTWF0ZXJpYWxzKHNjaGVtYTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLl92YXJpYXRpb25DYWNoZVNlcnZpY2UucHJlbG9hZFZhcmlhdGlvbnMoc2NoZW1hLCB0aGlzLl9pT25lLmRlY29Ob2Rlcy5tYXAoZCA9PiBkLmdhbWVPYmplY3ROYW1lKSwgdGhpcy5hcnRpY2xlQXNzZXRQYXRoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dldFNlbGVjdGlvbnNBbmREZWNvc0Zyb21NZXRhZGF0YShyZXN1bHQ6IEN1c3RvbUZsb29yR3JvdXBSZXN1bHQpOiB2b2lkIHtcclxuICAgIGlmIChyZXN1bHQubWV0YURhdGEuc2VsZWN0aW9ucyAmJiByZXN1bHQubWV0YURhdGEuZGVjb3MpIHtcclxuICAgICAgdGhpcy5faU9uZS5zZXRTZWxlY3Rpb25zKHJlc3VsdC5tZXRhRGF0YS5zZWxlY3Rpb25zKTtcclxuICAgICAgdGhpcy5faU9uZS5zZXREZWNvTm9kZXMoQXJyYXkuZnJvbShyZXN1bHQubWV0YURhdGEuZGVjb3MudmFsdWVzKCkpKTtcclxuICAgICAgcmVzdWx0Lm1ldGFEYXRhLm9ic29sZXRlID0gdHJ1ZTtcclxuICAgICAgaWYgKHJlc3VsdC5yZXN1bHRUeXBlICE9PSBSZXN1bHRUeXBlLkNvbmZpZ3VyYXRpb25Ob3RGaXhlZCkge1xyXG4gICAgICAgIHJlc3VsdC5yZXN1bHRUeXBlID0gUmVzdWx0VHlwZS5PYnNvbGV0ZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuX2lPbmUuc2VsZWN0aW9ucy5sZW5ndGggPCAyIHx8IHRoaXMuX2lPbmUuZGVjb05vZGVzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHJlc3VsdC5lcnJvck1lc3NhZ2VzLnB1c2gobmV3IEVycm9yTWVzc2FnZSgnTk9fU0VMRUNUSU9OU19PUl9ERUNPUycsICdOT19TRUxFQ1RJT05TX09SX0RFQ09TX0lORk8nKSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhyb3cgcmVzdWx0O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2VsZWN0aW9uUHVibGlzaGVkKHNlbGVjdGlvbjogU2VsZWN0aW9uKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKChzZWxlY3Rpb24uaGllcmFyY2hpY2FsUHVibGljYXRpb25Db2RlID09PSBudWxsKSB8fCAoKHNlbGVjdGlvbi5oaWVyYXJjaGljYWxQdWJsaWNhdGlvbkNvZGUgJiAyKSA+IDApKSAmJlxyXG4gICAgICAoXHJcbiAgICAgICAgKHNlbGVjdGlvbi5ub2RlVHlwZSA9PT0gTm9kZVR5cGUuUXVlc3Rpb24gJiZcclxuICAgICAgICAgICgoKHNlbGVjdGlvbi5xdWVzdGlvblB1YmxpY2F0aW9uQ29kZSAmIDIpID4gMCkgfHxcclxuICAgICAgICAgICAgc2VsZWN0aW9uLnF1ZXN0aW9uUHVibGljYXRpb25Db2RlID09PSBudWxsIHx8IHNlbGVjdGlvbi5xdWVzdGlvblB1YmxpY2F0aW9uQ29kZSA9PT0gdW5kZWZpbmVkKSkgfHxcclxuICAgICAgICAoc2VsZWN0aW9uLm5vZGVUeXBlID09PSBOb2RlVHlwZS5BbnN3ZXIgJiZcclxuICAgICAgICAgICgoKHNlbGVjdGlvbi5hbnN3ZXJQdWJsaWNhdGlvbkNvZGUgJiAyKSA+IDApIHx8XHJcbiAgICAgICAgICAgIHNlbGVjdGlvbi5hbnN3ZXJQdWJsaWNhdGlvbkNvZGUgPT09IG51bGwgfHwgc2VsZWN0aW9uLmFuc3dlclB1YmxpY2F0aW9uQ29kZSA9PT0gdW5kZWZpbmVkKSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2hhbmRsZUludGVncmF0aW9uKGluc3RhbmNlSWQ6IHN0cmluZywgb2JqZWN0OiBJdGVtKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5faW50ZWdyYXRpb25FbmFibGVkICYmICFvYmplY3QubWV0YWRhdGEub2Jzb2xldGUpIHtcclxuICAgICAgY29uc3QgZ2VuZXJpY1ZhcmlhdGlvblNlbGVjdGlvbnM6IFNlbGVjdGlvbltdID1cclxuICAgICAgICB0aGlzLl9pT25lLnNlbGVjdGlvbnMuZmlsdGVyKHMgPT4gcy5kZWNvTm9kZSAmJiBzLmdlbmVyaWMgJiZcclxuICAgICAgICAgIChzLmRlY29Ob2RlIGFzIGFueSkudmFyaWF0aW9uICYmIChzLmRlY29Ob2RlIGFzIGFueSkudmFyaWF0aW9uLnR5cGUgPT09IERlY29Ob2RlVHlwZS5WYXJpYXRpb24pO1xyXG4gICAgICBpZiAoZ2VuZXJpY1ZhcmlhdGlvblNlbGVjdGlvbnMgJiYgZ2VuZXJpY1ZhcmlhdGlvblNlbGVjdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRoaXMuX3Vwc2VydEZ1cm5pdHVyZShpbnN0YW5jZUlkLCB7XHJcbiAgICAgICAgICBWYXJpYXRpb246IChnZW5lcmljVmFyaWF0aW9uU2VsZWN0aW9uc1swXS5kZWNvTm9kZSBhcyBhbnkpLnZhcmlhdGlvbi5icmFuZElkLFxyXG4gICAgICAgICAgVmFyaWF0aW9uRGVzY3JpcHRpb246IChnZW5lcmljVmFyaWF0aW9uU2VsZWN0aW9uc1swXS5kZWNvTm9kZSBhcyBhbnkpLnZhcmlhdGlvbi5nYW1lT2JqZWN0TmFtZSxcclxuICAgICAgICAgIFN1cHBsaWVyQXJ0aWNsZU5yOiAoZ2VuZXJpY1ZhcmlhdGlvblNlbGVjdGlvbnNbMF0uZGVjb05vZGUgYXMgYW55KS52YXJpYXRpb24uc3VwcGxpZXJBcnRpY2xlTnJcclxuICAgICAgICB9LCBvYmplY3QpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuX2hhbmRsZUludGVncmF0aW9uQ29ubmVjdGlvbnMoaW5zdGFuY2VJZCwgb2JqZWN0KTtcclxuICAgICAgdGhpcy5fdXBzZXJ0RnVybml0dXJlKGluc3RhbmNlSWQsIHtQb3NpdGlvbjogb2JqZWN0LnBvc2l0aW9uLCBSb3RhdGlvbjogb2JqZWN0LnJvdGF0aW9ufSwgb2JqZWN0KTtcclxuICAgICAgdGhpcy5fbWVzc2FnZUJ1cy5lbWl0KE1lc3NhZ2VUeXBlLkNvbmZpZ3VyYXRpb25DaGFuZ2VkLCB0aGlzLl9mdXJuaXR1cmVDb25maWd1cmF0aW9ucyk7XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuX2Z1cm5pdHVyZUNvbmZpZ3VyYXRpb25zKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3N0YXJ0V2l0aE5ldyhjbGVhbnVwOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xyXG4gICAgdGhpcy5fZnVybml0dXJlQ29uZmlndXJhdGlvbnMubGVuZ3RoID0gMDtcclxuICAgIGlmIChjbGVhbnVwKSB7XHJcbiAgICAgIHRoaXMuX3BsYWNlZEFkanVzdGFibGVzLmZvckVhY2goYSA9PiBVdGlscy5EaXNwb3NlT2JqZWN0KGEpKTtcclxuICAgICAgdGhpcy5fcGxhY2VkQWRkYWJsZXMuZm9yRWFjaChhID0+IFV0aWxzLkRpc3Bvc2VPYmplY3QoYSkpO1xyXG4gICAgICB0aGlzLl9jbGVhbnVwKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jbGVhbnVwQmVmb3JlUHJlc2V0TG9hZCgpOiB2b2lkIHtcclxuICAgIE1hdGVyaWFsVXRpbHMuQ2xlYXJDYWNoZXMoKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogQ2xlYXIgdmFyaWFibGVzIHRvIGxldCBvYmplY3RzIGJlaW5nIGRpc3Bvc2VkIHByb3Blcmx5XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfaGFuZGxlQWZ0ZXJQcmVzZXRMb2FkKCk6IHZvaWQge1xyXG4gICAgLy8gbWFrZSBzdXJlIG5vdGhpbmcgaXMga2VlcGluZyBhIGxvY2tcclxuICAgIHRoaXMuX2lPbmUuc2V0SW5zdGFuY2UobnVsbCk7XHJcbiAgICAvLyBjbGVhblxyXG4gICAgdGhpcy5fY2xlYW51cCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY2xlYW51cCgpOiB2b2lkIHtcclxuICAgIFV0aWxzLkRpc3Bvc2VPYmplY3QodGhpcy5mdWxsM0RPYmplY3RUb1VzZSk7XHJcbiAgICB0aGlzLmZ1bGwzRE9iamVjdFRvVXNlID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5fY3VycmVudEN1c3RvbUZsb29yR3JvdXAgPSB1bmRlZmluZWQ7XHJcbiAgICBVdGlscy5EaXNwb3NlT2JqZWN0KHRoaXMuX2FjdGl2ZUNoaWxkRWxlbWVudCk7XHJcbiAgICB0aGlzLl9hY3RpdmVDaGlsZEVsZW1lbnQgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLl9wbGFjZWRBZGp1c3RhYmxlcy5sZW5ndGggPSAwO1xyXG4gICAgdGhpcy5fcGxhY2VkQWRkYWJsZXMubGVuZ3RoID0gMDtcclxuICAgIHRoaXMuX2FkanVzdGFibGVzLmxlbmd0aCA9IDA7XHJcbiAgICB0aGlzLl9hZGRhYmxlcy5sZW5ndGggPSAwO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZW5hYmxlSW50ZWdyYXRpb24oKTogdm9pZCB7XHJcbiAgICB0aGlzLl9pbnRlZ3JhdGlvbkVuYWJsZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaGFuZGxlSXRlbVJlbW92ZWRGcm9tU2NlbmUocmVzdWx0OiB7IGl0ZW06IGFueSwgYWRkZWRUb0dyb3VwOiBib29sZWFuIH0pOiB2b2lkIHtcclxuICAgIGlmIChyZXN1bHQuYWRkZWRUb0dyb3VwKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChyZXN1bHQuaXRlbSBpbnN0YW5jZW9mIEl0ZW0gJiYgIShyZXN1bHQuaXRlbSBpbnN0YW5jZW9mIEZsb29yUGluIHx8IHJlc3VsdC5pdGVtIGluc3RhbmNlb2YgV2FsbFBpbikpIHtcclxuICAgICAgaWYgKHRoaXMuX2ludGVncmF0aW9uRW5hYmxlZCAmJiByZXN1bHQuaXRlbS51c2VyRGF0YSkge1xyXG4gICAgICAgIGNvbnN0IGlkOiBzdHJpbmcgPSByZXN1bHQuaXRlbS51c2VyRGF0YS5pdGVtSWQgPyByZXN1bHQuaXRlbS51c2VyRGF0YS5pdGVtSWQgOiByZXN1bHQuaXRlbS51dWlkO1xyXG4gICAgICAgIHRoaXMuX2Z1cm5pdHVyZUNvbmZpZ3VyYXRpb25zLnNwbGljZSh0aGlzLl9mdXJuaXR1cmVDb25maWd1cmF0aW9ucy5maW5kSW5kZXgoZiA9PiBmLklkID09PSBpZCksIDEpO1xyXG4gICAgICAgIHRoaXMuX21lc3NhZ2VCdXMuZW1pdChNZXNzYWdlVHlwZS5Db25maWd1cmF0aW9uQ2hhbmdlZCwgdGhpcy5fZnVybml0dXJlQ29uZmlndXJhdGlvbnMpO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuX2Z1cm5pdHVyZUNvbmZpZ3VyYXRpb25zKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9jbGVhckVsZW1lbnRzKHJlc3VsdC5pdGVtKTtcclxuICAgICAgdGhpcy5fY2xlYW51cCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY2xlYXJFbGVtZW50cyhpdGVtOiBJdGVtKTogdm9pZCB7XHJcbiAgICBpZiAoaXRlbSBpbnN0YW5jZW9mIEN1c3RvbUZsb29ySXRlbSAmJiBpdGVtLnVzZXJEYXRhICYmIGl0ZW0udXNlckRhdGEuaXRlbUlkKSB7XHJcbiAgICAgIHRoaXMuYmFzZUVsZW1lbnROb2RlSWQgPSB1bmRlZmluZWQ7XHJcbiAgICAgIHRoaXMuX29yaWdpbmFsRWxlbWVudFBvc2l0aW9uLnNldCgwLCAwLCAwKTtcclxuICAgICAgdGhpcy5fZWxlbWVudFNlcnZpY2UucmVtb3ZlRWxlbWVudChpdGVtLnVzZXJEYXRhLml0ZW1JZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9oYW5kbGVJbnRlZ3JhdGlvbkNvbm5lY3Rpb25zKGlkOiBzdHJpbmcsIG9iamVjdDogSXRlbSk6IHZvaWQge1xyXG4gICAgY29uc3QgcGFydHM6IEZ1cm5pdHVyZVBhcnRJbnRlZ3JhdGlvbltdID0gW107XHJcbiAgICBjb25zdCBjaGlsZFBhcnRzOiBPYmplY3QzRFtdID0gb2JqZWN0LmNvbmZpZ3VyYWJsZSA/IG9iamVjdC5jaGlsZHJlbiA6IFtvYmplY3RdO1xyXG4gICAgY29uc3QgbGVuOiBudW1iZXIgPSBjaGlsZFBhcnRzLmxlbmd0aDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgY29uc3QgY2hpbGQ6IGFueSA9IDxDdXN0b21PYmplY3QzRD5jaGlsZFBhcnRzW2ldO1xyXG4gICAgICBjb25zdCBjb25uZWN0aW9uOiBGdXJuaXR1cmVQYXJ0SW50ZWdyYXRpb24gPSBuZXcgRnVybml0dXJlUGFydEludGVncmF0aW9uKCk7XHJcbiAgICAgIGNvbnN0IHZhcmlhdGlvbnM6IEZ1cm5pdHVyZVBhcnRWYXJpYXRpb25bXSA9IFtdO1xyXG4gICAgICBpZiAoY2hpbGQudXNlckRhdGEgJiYgY2hpbGQudXNlckRhdGEuc2VsZWN0aW9uICYmIGNoaWxkLnVzZXJEYXRhLnNlbGVjdGlvbi5kZWNvTm9kZSkge1xyXG4gICAgICAgIGNvbm5lY3Rpb24uSWQgPSBjaGlsZFBhcnRzLmZpbmRJbmRleChjID0+IGMgPT09IGNoaWxkKS50b1N0cmluZygpO1xyXG4gICAgICAgIGNvbm5lY3Rpb24uU3VwcGxpZXJBcnRpY2xlTnIgPSBjaGlsZC51c2VyRGF0YS5zZWxlY3Rpb24uc3VwcGxpZXJBcnRpY2xlTnI7XHJcbiAgICAgICAgY29ubmVjdGlvbi5CcmFuZElkZW50aWZpZXIgPSBjaGlsZC51c2VyRGF0YS5zZWxlY3Rpb24uZGVjb05vZGUuYnJhbmRJZDtcclxuICAgICAgICBjb25uZWN0aW9uLkJyYW5kRGVzY3JpcHRpb24gPSBjaGlsZC51c2VyRGF0YS5zZWxlY3Rpb24uZGVjb05vZGUuZ2FtZU9iamVjdE5hbWU7XHJcbiAgICAgICAgY29ubmVjdGlvbi5Qb3NpdGlvbiA9IGNoaWxkLnBvc2l0aW9uO1xyXG4gICAgICAgIGNvbm5lY3Rpb24uUm90YXRpb24gPSBjaGlsZC5yb3RhdGlvbjtcclxuICAgICAgICBpZiAoY2hpbGQudXNlckRhdGEuc2VsZWN0aW9uLnZhcmlhdGlvbnMpIHtcclxuICAgICAgICAgIGlmIChjaGlsZC51c2VyRGF0YS5zZWxlY3Rpb24udmFyaWF0aW9ucy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgICAgY29uc3QgdmFyaWF0aW9uOiBhbnkgPSBjaGlsZC51c2VyRGF0YS5zZWxlY3Rpb24udmFyaWF0aW9uc1swXTtcclxuICAgICAgICAgICAgY29ubmVjdGlvbi5WYXJpYXRpb24gPSB2YXJpYXRpb24uYnJhbmRJZDtcclxuICAgICAgICAgICAgY29ubmVjdGlvbi5WYXJpYXRpb25EZXNjcmlwdGlvbiA9IHZhcmlhdGlvbi5nYW1lT2JqZWN0TmFtZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY2hpbGQudXNlckRhdGEuc2VsZWN0aW9uLnZhcmlhdGlvbnMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICBjb25zdCB2YXJpYXRpb246IGFueSA9IGNoaWxkLnVzZXJEYXRhLnNlbGVjdGlvbi52YXJpYXRpb25zW2pdO1xyXG4gICAgICAgICAgICAgIGNvbnN0IHZhcmlhdGlvblBhcnQ6IEZ1cm5pdHVyZVBhcnRWYXJpYXRpb24gPSBuZXcgRnVybml0dXJlUGFydFZhcmlhdGlvbigpO1xyXG4gICAgICAgICAgICAgIHZhcmlhdGlvblBhcnQuVmFyaWF0aW9uID0gdmFyaWF0aW9uLmJyYW5kSWQ7XHJcbiAgICAgICAgICAgICAgdmFyaWF0aW9uUGFydC5WYXJpYXRpb25EZXNjcmlwdGlvbiA9IHZhcmlhdGlvbi5nYW1lT2JqZWN0TmFtZTtcclxuICAgICAgICAgICAgICB2YXJpYXRpb25QYXJ0Lk1hdGVyaWFsSWQgPSB2YXJpYXRpb24ubWF0ZXJpYWxJZDtcclxuICAgICAgICAgICAgICB2YXJpYXRpb25QYXJ0LlN1cHBsaWVyQXJ0aWNsZU5yID0gdmFyaWF0aW9uLnN1cHBsaWVyQXJ0aWNsZU5yO1xyXG4gICAgICAgICAgICAgIHZhcmlhdGlvblBhcnQuT3B0aW9uID0gdmFyaWF0aW9uLm9wdGlvblRleHQ7XHJcbiAgICAgICAgICAgICAgdmFyaWF0aW9ucy5wdXNoKHZhcmlhdGlvblBhcnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbm5lY3Rpb24uVmFyaWF0aW9ucyA9IHZhcmlhdGlvbnM7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgeyAvLyBhLWFydGlrZWxcclxuICAgICAgICBjb25uZWN0aW9uLklkID0gY2hpbGRQYXJ0cy5maW5kSW5kZXgoYyA9PiBjID09PSBjaGlsZCkudG9TdHJpbmcoKTtcclxuICAgICAgICBjb25uZWN0aW9uLkJyYW5kSWRlbnRpZmllciA9IGNoaWxkLm1ldGFkYXRhLml0ZW1JZGVudGlmaWVyO1xyXG4gICAgICAgIGNvbm5lY3Rpb24uQnJhbmREZXNjcmlwdGlvbiA9IGNoaWxkLm1ldGFkYXRhLml0ZW1OYW1lO1xyXG4gICAgICAgIGNvbm5lY3Rpb24uUG9zaXRpb24gPSBjaGlsZC5wb3NpdGlvbjtcclxuICAgICAgICBjb25uZWN0aW9uLlJvdGF0aW9uID0gY2hpbGQucm90YXRpb247XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgY29ubmVjdG9yczogRnVybml0dXJlQ29ubmVjdGVkUGFydEludGVncmF0aW9uW10gPSBbXTtcclxuICAgICAgY29uc3QgY2xlbjogbnVtYmVyID0gY2hpbGQuY2hpbGRyZW4ubGVuZ3RoO1xyXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNsZW47IGorKykge1xyXG4gICAgICAgIGNvbnN0IGNvbm5lY3RvcjogYW55ID0gY2hpbGQuY2hpbGRyZW5bal07XHJcbiAgICAgICAgaWYgKChjb25uZWN0b3IgaW5zdGFuY2VvZiBDdXN0b21PYmplY3QzRCB8fCBjb25uZWN0b3IgaW5zdGFuY2VvZiBDdXN0b21NZXNoKSAmJiAoY29ubmVjdG9yIGFzIGFueSkuY29ubmVjdGVkVG8pIHtcclxuICAgICAgICAgIGNvbnN0IGNvbm46IEZ1cm5pdHVyZUNvbm5lY3RlZFBhcnRJbnRlZ3JhdGlvbiA9IG5ldyBGdXJuaXR1cmVDb25uZWN0ZWRQYXJ0SW50ZWdyYXRpb24oKTtcclxuICAgICAgICAgIGNvbm4uQ29ubmVjdGlvbkxhYmVsID0gY29ubmVjdG9yLm5hbWU7XHJcbiAgICAgICAgICBjb25zdCBmb3JlaWduUGFydElkeDogbnVtYmVyID0gdGhpcy5fY3VycmVudEN1c3RvbUZsb29yR3JvdXAuY2hpbGRyZW4uZmluZEluZGV4KGMgPT4gYy5uYW1lID09PSAoY29ubmVjdG9yIGFzIGFueSkuY29ubmVjdGVkVG8pO1xyXG4gICAgICAgICAgY29ubi5Gb3JlaWduQ29ubmVjdGlvbkxhYmVsID0gdGhpcy5fY3VycmVudEN1c3RvbUZsb29yR3JvdXAuY2hpbGRyZW5bZm9yZWlnblBhcnRJZHhdLnVzZXJEYXRhLnNlbGVjdGlvbi5kZWNvTm9kZS5nYW1lT2JqZWN0TmFtZTtcclxuICAgICAgICAgIGNvbm4uRm9yZWlnblBhcnRJZCA9IGZvcmVpZ25QYXJ0SWR4LnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICBjb25uLlBvc2l0aW9uID0gY29ubmVjdG9yLnBvc2l0aW9uO1xyXG4gICAgICAgICAgY29ubi5Sb3RhdGlvbiA9IGNvbm5lY3Rvci5yb3RhdGlvbjtcclxuICAgICAgICAgIGNvbm5lY3RvcnMucHVzaChjb25uKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgY29ubmVjdGlvbi5Db25uZWN0ZWRQYXJ0cyA9IGNvbm5lY3RvcnM7XHJcbiAgICAgIHBhcnRzLnB1c2goY29ubmVjdGlvbik7XHJcbiAgICB9XHJcbiAgICB0aGlzLl91cHNlcnRGdXJuaXR1cmUoaWQsIHtQYXJ0czogcGFydHN9LCBvYmplY3QpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdXBzZXJ0RnVybml0dXJlKGlkOiBzdHJpbmcsIG9iamVjdDogYW55LCBpdGVtOiBJdGVtKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5faW50ZWdyYXRpb25FbmFibGVkICYmICFpdGVtLm1ldGFkYXRhLm9ic29sZXRlKSB7XHJcbiAgICAgIGNvbnN0IGlkeDogbnVtYmVyID0gdGhpcy5fZnVybml0dXJlQ29uZmlndXJhdGlvbnMuZmluZEluZGV4KGYgPT4gZi5JZCA9PT0gaWQpO1xyXG4gICAgICBsZXQgZnVybml0dXJlOiBGdXJuaXR1cmVJbnRlZ3JhdGlvbjtcclxuICAgICAgaWYgKGlkeCA8IDApIHtcclxuICAgICAgICBpZiAodGhpcy5fZnVybml0dXJlQ29uZmlndXJhdGlvbnMubGVuZ3RoID09PSAxICYmICF0aGlzLl9mdXJuaXR1cmVDb25maWd1cmF0aW9uc1swXS5JZCkgeyAvLyBlbXB0eSBlbnRyeSBmb3IgbXJwIGNvZGUsIHJlLXVzZSB0aGF0IG9uZVxyXG4gICAgICAgICAgZnVybml0dXJlID0gdGhpcy5fZnVybml0dXJlQ29uZmlndXJhdGlvbnNbMF07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGZ1cm5pdHVyZSA9IG5ldyBGdXJuaXR1cmVJbnRlZ3JhdGlvbigpO1xyXG4gICAgICAgICAgdGhpcy5fZnVybml0dXJlQ29uZmlndXJhdGlvbnMucHVzaChmdXJuaXR1cmUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmdXJuaXR1cmUuSWQgPSBpZDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBmdXJuaXR1cmUgPSB0aGlzLl9mdXJuaXR1cmVDb25maWd1cmF0aW9uc1tpZHhdO1xyXG4gICAgICB9XHJcbiAgICAgIGZ1cm5pdHVyZS5NcnBDb2RlID0gdGhpcy5fcGVybWFuZW50U3RvcmVTZXJ2aWNlLmNvZGU7XHJcbiAgICAgIGZvciAoY29uc3Qga2V5IGluIG9iamVjdCkge1xyXG4gICAgICAgIGlmIChmdXJuaXR1cmUuaGFzT3duUHJvcGVydHkoa2V5KSAmJiBvYmplY3QuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgICAgZnVybml0dXJlW2tleV0gPSBvYmplY3Rba2V5XTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NldENvZGVPbkZ1cm5pdHVyZUNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5faW50ZWdyYXRpb25FbmFibGVkKSB7XHJcbiAgICAgIGlmICh0aGlzLl9mdXJuaXR1cmVDb25maWd1cmF0aW9ucy5sZW5ndGggPCAxKSB7XHJcbiAgICAgICAgY29uc3QgZnVybml0dXJlOiBGdXJuaXR1cmVJbnRlZ3JhdGlvbiA9IG5ldyBGdXJuaXR1cmVJbnRlZ3JhdGlvbigpO1xyXG4gICAgICAgIGZ1cm5pdHVyZS5NcnBDb2RlID0gdGhpcy5fcGVybWFuZW50U3RvcmVTZXJ2aWNlLmNvZGU7XHJcbiAgICAgICAgdGhpcy5fZnVybml0dXJlQ29uZmlndXJhdGlvbnMucHVzaChmdXJuaXR1cmUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2Z1cm5pdHVyZUNvbmZpZ3VyYXRpb25zLmZvckVhY2goZiA9PiBmLk1ycENvZGUgPSB0aGlzLl9wZXJtYW5lbnRTdG9yZVNlcnZpY2UuY29kZSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5fbWVzc2FnZUJ1cy5lbWl0KE1lc3NhZ2VUeXBlLkNvbmZpZ3VyYXRpb25DaGFuZ2VkLCB0aGlzLl9mdXJuaXR1cmVDb25maWd1cmF0aW9ucyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jYW5Db25uZWN0U2VsZWN0aW9ucyhzZWwxOiBTZWxlY3Rpb24sIHNlbDI6IFNlbGVjdGlvbik6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCFzZWwxLmRlY29Ob2RlIHx8ICFzZWwyLmRlY29Ob2RlKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGxldCBjYW5Db25uZWN0OiBib29sZWFuID0gc2VsMi5kZWNvTm9kZS50eXBlICE9PSBEZWNvTm9kZVR5cGUuUGFydDtcclxuICAgIGlmICghY2FuQ29ubmVjdCkge1xyXG4gICAgICBjb25zdCBsZW46IG51bWJlciA9IHNlbDEuZGVjb05vZGUuY29ubmVjdG9ycy5sZW5ndGg7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICBjb25zdCBsZW5pOiBudW1iZXIgPSBzZWwyLmRlY29Ob2RlLmNvbm5lY3RvcnMubGVuZ3RoO1xyXG4gICAgICAgIGZvciAobGV0IGlpID0gMDsgaWkgPCBsZW5pOyBpaSsrKSB7XHJcbiAgICAgICAgICBjYW5Db25uZWN0ID0gU2NlbmUzRFV0aWwuQ2FuU2VsZWN0b3JDb25uZWN0KHNlbDEuZGVjb05vZGUuY29ubmVjdG9ycywgc2VsMS5kZWNvTm9kZS5jb25uZWN0b3JzW2ldLCBzZWwyLmRlY29Ob2RlLmNvbm5lY3RvcnNbaWldKTtcclxuICAgICAgICAgIGlmIChjYW5Db25uZWN0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2FuQ29ubmVjdDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2hhbmRsZVNlbGVjdGlvbnNSZWNlaXZlZChtZXRhZGF0YTogTWV0YWRhdGEpIHtcclxuICAgIGlmICh0aGlzLl9hbnN3ZXJTZWxlY3RlZC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGlvbjogU2VsZWN0aW9uID1cclxuICAgICAgICB0aGlzLnNlbGVjdGlvbnMuZmluZChzID0+IHMubm9kZUlkID09PSB0aGlzLl9hbnN3ZXJTZWxlY3RlZFt0aGlzLl9hbnN3ZXJTZWxlY3RlZC5sZW5ndGggLSAxXS5ub2RlSWQpO1xyXG4gICAgICBpZiAoc2VsZWN0aW9uKSB7XHJcbiAgICAgICAgbGV0IGl0ZW1OYW1lOiBzdHJpbmcgPSAnJztcclxuICAgICAgICBpZiAobWV0YWRhdGEuaXRlbU5hbWUgPT09ICcnKSB7XHJcbiAgICAgICAgICBpZiAobWV0YWRhdGEuaXRlbURlc2NyaXB0aW9uICE9PSAnJykge1xyXG4gICAgICAgICAgICBpdGVtTmFtZSA9IG1ldGFkYXRhLml0ZW1EZXNjcmlwdGlvbjtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGl0ZW1OYW1lID0gbWV0YWRhdGEuaXRlbUlkZW50aWZpZXI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGl0ZW1OYW1lID0gbWV0YWRhdGEuaXRlbU5hbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2dvb2dsZVRhZ01hbmFnZXIuc2VuZEV2ZW50KEdvb2dsZVRhZ01hbmFnZXJFdmVudC5BbnN3ZXJDaG9zZW4sIHtcclxuICAgICAgICAgICdhcnRpY2xlTnInOiBtZXRhZGF0YS5pdGVtSWRlbnRpZmllcixcclxuICAgICAgICAgICdwcm9kdWN0JzogaXRlbU5hbWUsXHJcbiAgICAgICAgICAnb3B0aW9uRGVzY3JpcHRpb24nOiBzZWxlY3Rpb24uY29tbWVyY2lhbEFuc3dlciA/IHNlbGVjdGlvbi5jb21tZXJjaWFsQW5zd2VyIDogc2VsZWN0aW9uLmFuc3dlcixcclxuICAgICAgICAgICdvcHRpb25QYXRoJzogc2VsZWN0aW9uLnNlbGVjdGlvblxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9oYW5kbGVDb25uZWN0aW9uUmVzZXQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fY3VycmVudEN1c3RvbUZsb29yR3JvdXApIHtcclxuICAgICAgdGhpcy5fY3VycmVudEN1c3RvbUZsb29yR3JvdXAuc2V0VW5zZWxlY3RlZCgpO1xyXG4gICAgICB0aGlzLl9tZXNzYWdlQnVzLmVtaXQoTWVzc2FnZVR5cGUuSXRlbVVuc2VsZWN0ZWQsIHVuZGVmaW5lZCk7XHJcbiAgICAgIHRoaXMuX3Nob3dXYXJuaW5nKHt0aXRsZTogJ1dBUk5JTkcnLCBtZXNzYWdlOiAnUkVGUkVTSF9EVUVfVE9fSU5BQ1RJVklUWSd9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2hhbmRsZUFuc3dlclNlbGVjdGVkKGFuc3dlcjogQW5zd2VyKTogdm9pZCB7XHJcbiAgICB0aGlzLl9hbnN3ZXJTZWxlY3RlZC5wdXNoKGFuc3dlcik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgY2FuY2VsQW5zd2VyKG1ldGFkYXRhOiBNZXRhZGF0YSwgcmVidWlsZDogYm9vbGVhbiA9IHRydWUsIGdldEFuc3dlcnM6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgYXdhaXQgdGhpcy5faU9uZS5jYW5jZWxBbnN3ZXIoKTtcclxuICAgIGlmIChyZWJ1aWxkKSB7XHJcbiAgICAgIHRoaXMuX3N0YXJ0VG9CdWlsZEZyb21Db25maWd1cmF0b3IobWV0YWRhdGEpO1xyXG4gICAgfSBlbHNlIGlmIChnZXRBbnN3ZXJzKSB7IC8vIGlmIG5vdCByZWJ1aWxkIHRoZW4gY2hlY2sgaWYgd2UgbmVlZCB0byBnZXQgYW5zd2Vyc1xyXG4gICAgICBhd2FpdCB0aGlzLl9pT25lLmdldFF1ZXN0aW9uQW5kQW5zd2Vyc0FzeW5jKCk7IC8vIHNlZSBpZiB0aGVyZSBpcyB1c2VyIGlucHV0IG5lZWRlZFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHNlbGVjdFNlbGVjdGlvbihcclxuICAgIHNlbGVjdGlvbjogU2VsZWN0aW9uLCBtZXRhZGF0YTogTWV0YWRhdGEsIGZvcmNlQmFja1RvTm9kZT86IGJvb2xlYW4sIGFmdGVyPzogYm9vbGVhbiwgY29ubmVjdG9yPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBhd2FpdCB0aGlzLl9pT25lLnNlbGVjdFNlbGVjdGlvbihzZWxlY3Rpb24sIGZvcmNlQmFja1RvTm9kZSwgYWZ0ZXIsIGNvbm5lY3Rvcik7XHJcbiAgICB0aGlzLl9nZW5lcmljU2VsZWN0aW9uID0gc2VsZWN0aW9uLmdlbmVyaWM7XHJcbiAgICB0aGlzLl9zdGFydFRvQnVpbGRGcm9tQ29uZmlndXJhdG9yKG1ldGFkYXRhKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBkZWxldGVTZWxlY3Rpb24oc2VsZWN0aW9uOiBTZWxlY3Rpb24sIG1ldGFkYXRhOiBNZXRhZGF0YSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5fZWxlbWVudFNlcnZpY2UucmVtb3ZlRWxlbWVudChzZWxlY3Rpb24uaW5zdGFuY2VJZCwgc2VsZWN0aW9uLm5vZGUpO1xyXG4gICAgYXdhaXQgdGhpcy5faU9uZS5kZWxldGVTZWxlY3Rpb24oc2VsZWN0aW9uKTtcclxuICAgIHRoaXMuX3N0YXJ0VG9CdWlsZEZyb21Db25maWd1cmF0b3IobWV0YWRhdGEpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHJlcGxhY2VTZWxlY3Rpb24oc2VsZWN0aW9uOiBTZWxlY3Rpb24sIG1ldGFkYXRhOiBNZXRhZGF0YSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgYXdhaXQgdGhpcy5faU9uZS5yZXBsYWNlU2VsZWN0aW9uKHNlbGVjdGlvbik7XHJcbiAgICB0aGlzLl9zdGFydFRvQnVpbGRGcm9tQ29uZmlndXJhdG9yKG1ldGFkYXRhKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBzZWxlY3RBbnN3ZXIoYW5zd2VyOiBBbnN3ZXIsIGlucHV0OiBzdHJpbmcsIG1ldGFkYXRhOiBNZXRhZGF0YSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5fcHJlbG9hZE1hdGVyaWFsKGFuc3dlcik7XHJcbiAgICBhd2FpdCB0aGlzLl9pT25lLnNlbGVjdEFuc3dlcihhbnN3ZXIsIGlucHV0KTtcclxuICAgIHRoaXMuX2hhbmRsZUFuc3dlclNlbGVjdGVkKGFuc3dlcik7XHJcbiAgICBjb25zdCByZXN1bHQ6IEN1c3RvbUZsb29yR3JvdXBSZXN1bHQgPSBhd2FpdCB0aGlzLl9zdGFydFRvQnVpbGRGcm9tQ29uZmlndXJhdG9yKG1ldGFkYXRhKTtcclxuICAgIHRoaXMuYW5zd2VyU2VsZWN0ZWQubmV4dChyZXN1bHQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2V0QWN0aXZlRnVybml0dXJlKGluc3RhbmNlSWQ6IHN0cmluZyk6IEl0ZW0ge1xyXG4gICAgY29uc3QgY29uZmlndXJhYmxlczogYW55W10gPSB0aGlzLl9pdGVtU2VydmljZS5nZXRDb25maWd1cmFibGVzKCk7XHJcbiAgICBjb25zdCBsZW46IG51bWJlciA9IGNvbmZpZ3VyYWJsZXMubGVuZ3RoO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICBpZiAoY29uZmlndXJhYmxlc1tpXS5tZXRhZGF0YSAmJiBjb25maWd1cmFibGVzW2ldLm1ldGFkYXRhLml0ZW1JZCA9PT0gaW5zdGFuY2VJZCAmJiAhY29uZmlndXJhYmxlc1tpXS50ZW1wT2JqZWN0KSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbmZpZ3VyYWJsZXNbaV07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2xpbmtTZWxlY3Rpb25zQW5kRGVjb3MoKTogdm9pZCB7XHJcbiAgICBjb25zdCBsZW46IG51bWJlciA9IHRoaXMuc2VsZWN0aW9ucy5sZW5ndGg7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgIC8vIGNvbnN0IGlkOiBzdHJpbmcgPSB0aGlzLnNlbGVjdGlvbnNbaV0uYXJ0Tm9kZUlkRGVjbztcclxuICAgICAgbGV0IGRlY286IGFueSA9IHRoaXMuX2lPbmUuZGVjb05vZGVzLmZpbmQoZCA9PiBkLmlkID09PSB0aGlzLnNlbGVjdGlvbnNbaV0uYXJ0Tm9kZUlkRGVjbyk7XHJcbiAgICAgIGlmICghZGVjbykge1xyXG4gICAgICAgIGRlY28gPSBuZXcgRGVjb05vZGUoKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZGVjby50eXBlICE9PSBEZWNvTm9kZVR5cGUuVmFyaWF0aW9uKSB7XHJcbiAgICAgICAgY29uc3QgdmFyaWF0aW9uOiBhbnkgPSB0aGlzLl9nZXRWYXJpYXRpb25zKCkuZmluZCh2ID0+IHYucGFyZW50SWQgPT09IHRoaXMuc2VsZWN0aW9uc1tpXS5hcnROb2RlSWREZWNvKTtcclxuICAgICAgICBpZiAodmFyaWF0aW9uKSB7XHJcbiAgICAgICAgICBkZWNvLnZhcmlhdGlvbiA9IHZhcmlhdGlvbjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zZWxlY3Rpb25zW2ldLmRlY29Ob2RlID0gZGVjbztcclxuICAgIH1cclxuICAgIHRoaXMuX2lPbmUuc2VsZWN0aW9uc0FuZERlY29zTGlua2VkLm5leHQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NyZWF0ZUNvbmZpZ3VyYWJsZUl0ZW0oaW5zdGFuY2VJZDogc3RyaW5nLCBtZXRhZGF0YTogTWV0YWRhdGEpOiBJdGVtIHtcclxuICAgIC8vIGNvbnN0IGZ1cm5pdHVyZTogSXRlbSA9IHRoaXMuX2dldEFjdGl2ZUZ1cm5pdHVyZShpbnN0YW5jZUlkKTtcclxuICAgIC8vIGNvbnN0IGNsb25lU2VsZWN0aW9ucyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5zZWxlY3Rpb25zKSk7XHJcbiAgICAvLyBjbG9uZVNlbGVjdGlvbnMuZm9yRWFjaChzID0+IHtcclxuICAgIC8vICAgcy5pbWFnZURhdGEgPSB1bmRlZmluZWQ7XHJcbiAgICAvLyAgIHMuaW1hZ2VEYXRhTGFzdEFuc3dlciA9IHVuZGVmaW5lZDtcclxuICAgIC8vIH0pO1xyXG4gICAgLy8gaWYgKGZ1cm5pdHVyZSkge1xyXG4gICAgLy8gICBmdXJuaXR1cmUubWV0YWRhdGEuZGVjb3MgPSBBcnJheS5mcm9tKHRoaXMuX2lPbmUuZGVjb05vZGVzKTtcclxuICAgIC8vICAgZnVybml0dXJlLm1ldGFkYXRhLnNlbGVjdGlvbnMgPSBjbG9uZVNlbGVjdGlvbnM7XHJcbiAgICAvLyAgIGZ1cm5pdHVyZS5tYXJrRm9yRGVsZXRpb25DaGlsZHJlbigpO1xyXG4gICAgLy8gICByZXR1cm4gZnVybml0dXJlO1xyXG4gICAgLy8gfVxyXG4gICAgaWYgKCFtZXRhZGF0YS5wb3NpdGlvbikge1xyXG4gICAgICBtZXRhZGF0YS5wb3NpdGlvbiA9IHRoaXMuc3RhcnRQb3NpdGlvbiB8fCBkZWZhdWx0UG9zaXRpb247XHJcbiAgICB9XHJcbiAgICBpZiAoIW1ldGFkYXRhLnJvdGF0aW9uKSB7XHJcbiAgICAgIG1ldGFkYXRhLnJvdGF0aW9uID0gbWV0YWRhdGEuZGVmYXVsdDE4MCA/IGRlZmF1bHRSb3RhdGlvbiA6IG5ldyBFdWxlcigpO1xyXG4gICAgfVxyXG4gICAgLy8gSWYgaXRlbVR5cGUgaXMgZGlmZmVyZW50IGluIGFydGljbGUgY29tcGFyZWQgdG8gc2F2ZWQgdmFsdWUgaW4gdGhlIC5qc29uLCB0aGUgaXRlbVR5cGUgaW4gYXJ0aWNsZSBpcyBhcHBsaWVkXHJcbiAgICAvLyBtZXRhZGF0YS5pdGVtVHlwZSA9IHRoaXMuaXRlbVR5cGUgJiYgdGhpcy5pdGVtVHlwZSAhPT0gbWV0YWRhdGEuaXRlbVR5cGUgPyB0aGlzLml0ZW1UeXBlIDogbWV0YWRhdGEuaXRlbVR5cGU7XHJcbiAgICBjb25zdCBpdGVtQ29uc3RydWN0b3IgPSBGYWN0b3J5LmdldENsYXNzKHRoaXMuc3RhbmRBbG9uZSA/IEl0ZW1UeXBlLkN1c3RvbUZsb29yR3JvdXAgOiBtZXRhZGF0YS5pdGVtVHlwZSk7XHJcbiAgICBjb25zdCBpdGVtID0gbmV3IGl0ZW1Db25zdHJ1Y3RvcihcclxuICAgICAgbWV0YWRhdGEsXHJcbiAgICAgIHVuZGVmaW5lZCwgLy8gYmFzZSBvbiBlbXB0eSBvYmplY3RcclxuICAgICAge1xyXG4gICAgICAgIG1vdXNlT3ZlcjogdGhpcy5tb3VzZU92ZXIsXHJcbiAgICAgICAgbW91c2VPZmY6IHRoaXMubW91c2VPZmYsXHJcbiAgICAgICAgaXRlbVNlbGVjdGVkOiB0aGlzLnNlbGVjdEl0ZW0sXHJcbiAgICAgICAgaXRlbVVuc2VsZWN0ZWQ6IHRoaXMudW5TZWxlY3RJdGVtLFxyXG4gICAgICAgIGVsZW1lbnRTZWxlY3RlZDogdGhpcy5zZWxlY3RFbGVtZW50LFxyXG4gICAgICAgIGVsZW1lbnRVbnNlbGVjdGVkOiB0aGlzLnVuU2VsZWN0RWxlbWVudCxcclxuICAgICAgICBjb25maWd1cmluZ0NoYW5nZWQ6IHRoaXMuY2hhbmdlQ29uZmlndXJlTW9kZSxcclxuICAgICAgICBjaGlsZEVsZW1lbnRQb3NpdGlvbkNoYW5nZWRIYW5kbGVyOiB0aGlzLm1vdmVDaGlsZEVsZW1lbnQsXHJcbiAgICAgICAgY2hpbGRFbGVtZW50UGxhY2VIYW5kbGVyOiB0aGlzLnBsYWNlQ2hpbGRFbGVtZW50XHJcbiAgICAgICAgLypcclxuICAgICAgICAgICAgICAgIGNoaWxkRWxlbWVudFBvc2l0aW9uQ2hhbmdlZEhhbmRsZXI6IGFkanVzdGFibGUgPyB0aGlzLm1vdmVDaGlsZEVsZW1lbnQgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICBjaGlsZEVsZW1lbnRQbGFjZUhhbmRsZXI6IGFkanVzdGFibGUgPyB0aGlzLnBsYWNlQ2hpbGRFbGVtZW50IDogdW5kZWZpbmVkXHJcbiAgICAgICAgKi9cclxuICAgICAgfVxyXG4gICAgKTtcclxuICAgIGl0ZW0uY2FuRGVsZXRlID0gIXRoaXMuc3RhbmRBbG9uZTtcclxuICAgIGl0ZW0uY2FuQ29weSA9ICF0aGlzLnN0YW5kQWxvbmU7XHJcbiAgICBpdGVtLmFsbHdheXNDb25maWd1cmVNb2RlID0gdGhpcy5zdGFuZEFsb25lO1xyXG4gICAgaXRlbS5oaWdoTGlnaHREaXNhYmxlZCA9ICF0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Mub3B0aW9ucy51c2VTdGFuZGFsb25lSGlnaExpZ2h0O1xyXG4gICAgaXRlbS50ZW1wT2JqZWN0ID0gdHJ1ZTtcclxuICAgIGl0ZW0ubmFtZSA9IG1ldGFkYXRhLml0ZW1OYW1lICsgJ19jbG9uZSc7XHJcbiAgICBpdGVtLnZpc2libGUgPSBmYWxzZTtcclxuICAgIHRoaXMuX2l0ZW1TZXJ2aWNlLmFkZEl0ZW0oaXRlbSk7XHJcbiAgICAvLyB0aGlzLl91cHNlcnRGdXJuaXR1cmUobWV0YWRhdGEuaXRlbUlkLCB7QnJhbmRJZGVudGlmaWVyOiBtZXRhZGF0YS5pdGVtSWRlbnRpZmllcn0sIGl0ZW0pO1xyXG4gICAgcmV0dXJuIGl0ZW07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jcmVhdGVQb3NpdGlvbkFuaW1hdGlvbihvYmplY3Q6IE9iamVjdDNELCBmcm9tOiBWZWN0b3IzLCB0bzogVmVjdG9yMywgZWFzaW5nOiBUV0VFTi5FYXNpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IHR3ZWVuRnJvbTogVmVjdG9yMyA9IG5ldyBWZWN0b3IzKCkuY29weShmcm9tKTtcclxuICAgIGNvbnN0IHR3ZWVuID0gbmV3IFRXRUVOLlR3ZWVuKHR3ZWVuRnJvbSlcclxuICAgICAgLnRvKHRvLCAxMDAwKVxyXG4gICAgICAuZWFzaW5nKGVhc2luZylcclxuICAgICAgLm9uVXBkYXRlKCgpID0+IHtcclxuICAgICAgICBvYmplY3QucG9zaXRpb24uY29weSh0d2VlbkZyb20pO1xyXG4gICAgICAgIHRoaXMuX3NjZW5lU2VydmljZS5uZWVkc1JlbmRlciA9IHRydWU7XHJcbiAgICAgIH0pO1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbikgPT4gdHdlZW4ub25Db21wbGV0ZShyZXNvbHZlLmJpbmQodGhpcywgdHdlZW4pKS5vblN0b3AocmVqZWN0KS5zdGFydCgpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX2FuaW1hdGVDaGFuZ2VzKGZ1cm5pdHVyZTogSXRlbSwgY2hhbmdlczogQ2hhbmdlc0ludGVyZmFjZVtdKTogUHJvbWlzZTx2b2lkW10+IHtcclxuICAgIC8vIGl0J3MgY2hyaXN0bWFzc3NcclxuICAgIGNvbnN0IGFuaW1hdGlvbnM6IFByb21pc2U8dm9pZD5bXSA9IFtdO1xyXG4gICAgaWYgKGZ1cm5pdHVyZSBpbnN0YW5jZW9mIEN1c3RvbUZsb29ySXRlbSkge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoYW5nZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBlYXNpbmc6IFRXRUVOLkVhc2luZyA9ICFjaGFuZ2VzW2ldLm9sZFBvc2l0aW9uID8gVFdFRU4uRWFzaW5nLkV4cG9uZW50aWFsLk91dCA6XHJcbiAgICAgICAgICAoIWNoYW5nZXNbaV0ubmV3UG9zaXRpb24gPyBUV0VFTi5FYXNpbmcuRXhwb25lbnRpYWwuT3V0IDogVFdFRU4uRWFzaW5nLkV4cG9uZW50aWFsLkluT3V0KTtcclxuICAgICAgICBjb25zdCBmcm9tOiBWZWN0b3IzID1cclxuICAgICAgICAgIGNoYW5nZXNbaV0ub2xkUG9zaXRpb24gPyBuZXcgVmVjdG9yMygpLmNvcHkoY2hhbmdlc1tpXS5vbGRQb3NpdGlvbikgOiBuZXcgVmVjdG9yMygpLmNvcHkoY2hhbmdlc1tpXS5uZXdQb3NpdGlvbikuc2V0WSgxMCk7XHJcbiAgICAgICAgY29uc3QgdG86IFZlY3RvcjMgPVxyXG4gICAgICAgICAgY2hhbmdlc1tpXS5uZXdQb3NpdGlvbiA/IG5ldyBWZWN0b3IzKCkuY29weShjaGFuZ2VzW2ldLm5ld1Bvc2l0aW9uKSA6IG5ldyBWZWN0b3IzKCkuY29weShjaGFuZ2VzW2ldLm9sZFBvc2l0aW9uKS5zZXRZKDEwKTtcclxuICAgICAgICBjb25zdCBvYmo6IE9iamVjdDNEID0gZnVybml0dXJlLmdldE9iamVjdEJ5TmFtZShjaGFuZ2VzW2ldLm5hbWUpO1xyXG4gICAgICAgIGlmICghZnJvbS5lcXVhbHModG8pKSB7XHJcbiAgICAgICAgICBhbmltYXRpb25zLnB1c2goXHJcbiAgICAgICAgICAgIHRoaXMuX2NyZWF0ZVBvc2l0aW9uQW5pbWF0aW9uKG9iaiwgZnJvbSwgdG8sIGVhc2luZylcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXdhaXQgUHJvbWlzZS5hbGwoYW5pbWF0aW9ucyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9yZXBsYWNlQ3VycmVudEl0ZW0obmV3SXRlbTogSXRlbSwgbWV0YWRhdGE6IE1ldGFkYXRhLCBhbmltYXRlOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPEl0ZW0+IHtcclxuICAgIGNvbnN0IGZ1cm5pdHVyZTogSXRlbSA9IHRoaXMuX2dldEFjdGl2ZUZ1cm5pdHVyZShtZXRhZGF0YS5pdGVtSWQpO1xyXG4gICAgY29uc3QgY2xvbmVTZWxlY3Rpb25zID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnNlbGVjdGlvbnMpKTtcclxuICAgIGNsb25lU2VsZWN0aW9ucy5mb3JFYWNoKHMgPT4ge1xyXG4gICAgICBzLmltYWdlRGF0YSA9IHVuZGVmaW5lZDtcclxuICAgICAgcy5pbWFnZURhdGFMYXN0QW5zd2VyID0gdW5kZWZpbmVkO1xyXG4gICAgICBpZiAocy5hZGRhYmxlcykge1xyXG4gICAgICAgIHMuYWRkYWJsZXMuZm9yRWFjaChhID0+IHtcclxuICAgICAgICAgIGEuaW1hZ2VEYXRhID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGlmIChmdXJuaXR1cmUpIHtcclxuICAgICAgZnVybml0dXJlLm1ldGFkYXRhLmRlY29zID0gQXJyYXkuZnJvbSh0aGlzLl9pT25lLmRlY29Ob2Rlcyk7XHJcbiAgICAgIGZ1cm5pdHVyZS5tZXRhZGF0YS5zZWxlY3Rpb25zID0gY2xvbmVTZWxlY3Rpb25zO1xyXG4gICAgICBpZiAoZnVybml0dXJlIGluc3RhbmNlb2YgQ3VzdG9tV2FsbEZsb29ySXRlbSkge1xyXG4gICAgICAgIChuZXdJdGVtIGFzIEN1c3RvbVdhbGxGbG9vckl0ZW0pLmN1cnJlbnRXYWxsID0gZnVybml0dXJlLmN1cnJlbnRXYWxsO1xyXG4gICAgICB9XHJcbiAgICAgIG5ld0l0ZW0udXBkYXRlUGl2b3QoKTtcclxuICAgICAgY29uc3QgY2hhbmdlczogQ2hhbmdlc0ludGVyZmFjZVtdID0gZnVybml0dXJlIGluc3RhbmNlb2YgQ3VzdG9tRmxvb3JJdGVtID8gT2JqZWN0VXRpbHMuR2V0Q2hhbmdlcyhmdXJuaXR1cmUuY2hpbGRyZW4sIG5ld0l0ZW0uY2hpbGRyZW4pIDogW107XHJcbiAgICAgIC8vIGFuaW1hdGUgcmVtb3ZlZCBpdGVtc1xyXG4gICAgICBjb25zdCByZW1vdmVkQ2hhbmdlczogQ2hhbmdlc0ludGVyZmFjZVtdID0gY2hhbmdlcy5maWx0ZXIoYyA9PiAhYy5uZXdQb3NpdGlvbik7XHJcbiAgICAgIGlmIChhbmltYXRlICYmIHJlbW92ZWRDaGFuZ2VzICYmIHJlbW92ZWRDaGFuZ2VzLmxlbmd0aCA+IDApIHsgLy8gYW5pbWF0ZSBjaGFuZ2VzIHRvIHRoZSBtb2RlbFxyXG4gICAgICAgIGF3YWl0IHRoaXMuX2FuaW1hdGVDaGFuZ2VzKGZ1cm5pdHVyZSwgcmVtb3ZlZENoYW5nZXMpO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIHJlbW92ZSBjaGlsZHJlbiBmcm9tIGZ1cm5pdHVyZVxyXG4gICAgICBmdXJuaXR1cmUuY2xlYXJDaGlsZHJlbigpO1xyXG4gICAgICAvLyBhZGQgbmV3IGNoaWxkcmVuIHRvIGZ1cm5pdHVyZVxyXG4gICAgICBuZXdJdGVtLmNoaWxkcmVuLm1hcChjID0+IGZ1cm5pdHVyZS5hZGRDaGlsZChjKSk7XHJcbiAgICAgIHRoaXMuX2l0ZW1TZXJ2aWNlLnJlbW92ZUl0ZW0obmV3SXRlbSwgZmFsc2UsIGZhbHNlKTtcclxuICAgICAgLy8gYW5pbWF0ZSAobmV3KSBpdGVtc1xyXG4gICAgICBjb25zdCBvdGhlckNoYW5nZXM6IENoYW5nZXNJbnRlcmZhY2VbXSA9IGNoYW5nZXMuZmlsdGVyKGMgPT4gYy5uZXdQb3NpdGlvbik7XHJcbiAgICAgIGlmIChhbmltYXRlICYmIG90aGVyQ2hhbmdlcyAmJiBvdGhlckNoYW5nZXMubGVuZ3RoID4gMCkgeyAvLyBhbmltYXRlIGNoYW5nZXMgdG8gdGhlIG1vZGVsXHJcbiAgICAgICAgYXdhaXQgdGhpcy5fYW5pbWF0ZUNoYW5nZXMoZnVybml0dXJlLCBvdGhlckNoYW5nZXMpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBmdXJuaXR1cmU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBuZXdJdGVtLnZpc2libGUgPSB0cnVlO1xyXG4gICAgICBuZXdJdGVtLnRlbXBPYmplY3QgPSBmYWxzZTtcclxuICAgICAgbmV3SXRlbS5uYW1lID0gbWV0YWRhdGEuaXRlbU5hbWU7XHJcbiAgICAgIHRoaXMuX3Vwc2VydEZ1cm5pdHVyZShtZXRhZGF0YS5pdGVtSWQsIHtCcmFuZElkZW50aWZpZXI6IG1ldGFkYXRhLml0ZW1JZGVudGlmaWVyfSwgbmV3SXRlbSk7XHJcbiAgICAgIHJldHVybiBuZXdJdGVtO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG1vdXNlT3ZlciA9ICgpID0+IHtcclxuICAgIHRoaXMuaXNNb3VzZU92ZXJPYmplY3QgPSB0cnVlO1xyXG4gIH07XHJcblxyXG4gIHB1YmxpYyBtb3VzZU9mZiA9ICgpID0+IHtcclxuICAgIHRoaXMuaXNNb3VzZU92ZXJPYmplY3QgPSBmYWxzZTtcclxuICB9O1xyXG5cclxuICBwdWJsaWMgc2VsZWN0SXRlbSA9IChtZXNoOiBNZXNoKSA9PiB7XHJcbiAgICAvLyB0aGlzLmFjdGl2ZUluc3RhbmNlID0gbWVzaC51c2VyRGF0YS5pdGVtSWQ7XHJcbiAgfTtcclxuXHJcbiAgcHVibGljIHVuU2VsZWN0SXRlbSA9ICgpID0+IHtcclxuICAgIC8vIHRoaXMuc2hvd0xpdGVTZWxlY3RvciA9IGZhbHNlO1xyXG4gICAgLy8gdGhpcy5zaG93U2VsZWN0aW9ucyA9IGZhbHNlO1xyXG4gIH07XHJcblxyXG4gIHB1YmxpYyBzZWxlY3RFbGVtZW50ID0gKGVsZW1lbnQ6IE1lc2gsIG1vdXNlUG9zOiBWZWN0b3IzKSA9PiB7XHJcbiAgICB0aGlzLl9hY3RpdmVDaGlsZEVsZW1lbnQgPSBlbGVtZW50O1xyXG4gICAgaWYgKGVsZW1lbnQucGFyZW50IGluc3RhbmNlb2YgQ3VzdG9tT2JqZWN0M0QpIHtcclxuICAgICAgdGhpcy5fb3JpZ2luYWxFbGVtZW50UG9zaXRpb24uY29weShlbGVtZW50LnBhcmVudC5wb3NpdGlvbik7XHJcbiAgICAgIC8vIGlmICh0aGlzLl9jdXJyZW50Q3VzdG9tRmxvb3JHcm91cC5hZGp1c3RhYmxlKSB7XHJcbiAgICAgIGlmICh0aGlzLl9pc01vdmVhYmxlT2JqZWN0KGVsZW1lbnQucGFyZW50KSkge1xyXG4gICAgICAgIGNvbnN0IGNvbm5lY3RvcjogYW55ID0gZWxlbWVudC5wYXJlbnQuY2hpbGRyZW4uZmluZChjID0+IGMubmFtZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ2NfJykgPiAtMSk7XHJcbiAgICAgICAgaWYgKGNvbm5lY3Rvci5jb25uZWN0ZWRUbykge1xyXG4gICAgICAgICAgY29uc3QgYmFzZUVsZW1lbnQ6IE9iamVjdDNEID0gPEN1c3RvbU9iamVjdDNEPnRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwLmdldE9iamVjdEJ5TmFtZShjb25uZWN0b3IuY29ubmVjdGVkVG8pO1xyXG4gICAgICAgICAgdGhpcy5iYXNlRWxlbWVudE5vZGVJZCA9IGJhc2VFbGVtZW50LnVzZXJEYXRhICYmIGJhc2VFbGVtZW50LnVzZXJEYXRhLnNlbGVjdGlvbiA/IGJhc2VFbGVtZW50LnVzZXJEYXRhLnNlbGVjdGlvbi5ub2RlSWQgOiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy50b2dnbGVTZWxlY3RlZEVsZW1lbnQubmV4dChlbGVtZW50KTtcclxuICB9O1xyXG5cclxuICBwdWJsaWMgdW5TZWxlY3RFbGVtZW50ID0gKCkgPT4ge1xyXG4gICAgdGhpcy5fYWN0aXZlQ2hpbGRFbGVtZW50ID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy50b2dnbGVTZWxlY3RlZEVsZW1lbnQubmV4dCh1bmRlZmluZWQpO1xyXG4gIH07XHJcblxyXG4gIHB1YmxpYyBtb3ZlQ2hpbGRFbGVtZW50ID0gKGVsZW1lbnQ6IEN1c3RvbU9iamVjdDNELCBwb3M6IFZlY3RvcjMpID0+IHtcclxuICAgIGNvbnN0IHdvcmxkVG9Mb2NhbFBvczogVmVjdG9yMyA9IHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwLndvcmxkVG9Mb2NhbChwb3MuY2xvbmUoKSk7XHJcbiAgICB0aGlzLl9tb3ZlQ2hpbGRFbGVtZW50VG9Qb3NpdGlvbihlbGVtZW50LCB3b3JsZFRvTG9jYWxQb3MpO1xyXG4gIH07XHJcblxyXG4gIHB1YmxpYyBwbGFjZUNoaWxkRWxlbWVudCA9IGFzeW5jIChlbGVtZW50OiBDdXN0b21PYmplY3QzRCkgPT4ge1xyXG4gICAgaWYgKHRoaXMuX2lzTW92ZWFibGVPYmplY3QoZWxlbWVudCkgJiYgKGVsZW1lbnQgYXMgYW55KS5tb3ZlZCkge1xyXG4gICAgICBjb25zdCBiYXNlRWxlbWVudDogT2JqZWN0M0RbXSA9XHJcbiAgICAgICAgdGhpcy5fY3VycmVudEN1c3RvbUZsb29yR3JvdXAuZ2V0T2JqZWN0c0J5VXNlckRhdGFQcm9wKCdzZWxlY3Rpb24nLCAnbm9kZUlkJywgdGhpcy5iYXNlRWxlbWVudE5vZGVJZCk7XHJcbiAgICAgIC8vIHVzZSBpbnN0YW5jZUlkIGZyb20gcGFyZW50XHJcbiAgICAgIGNvbnN0IGl0ZW06IEl0ZW0gPSBPYmplY3RVdGlscy5HZXRQYXJlbnRJdGVtKGVsZW1lbnQpO1xyXG4gICAgICBpZiAoaXRlbSkge1xyXG4gICAgICAgIGNvbnN0IGNvbm5lY3Rvcjogc3RyaW5nID1cclxuICAgICAgICAgIGF3YWl0IHRoaXMuX2VsZW1lbnRTZXJ2aWNlLnBsYWNlRWxlbWVudE9uQ29ubmVjdG9yKFxyXG4gICAgICAgICAgICBpdGVtLm1ldGFkYXRhLml0ZW1JZCwgZWxlbWVudCwgYmFzZUVsZW1lbnQubGVuZ3RoID4gMCA/IGJhc2VFbGVtZW50WzBdIDogbnVsbCk7XHJcbiAgICAgICAgdGhpcy5fc2F2ZUVsZW1lbnRDb25uZWN0b3IoZWxlbWVudCwgY29ubmVjdG9yKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIHB1YmxpYyBjaGFuZ2VDb25maWd1cmVNb2RlID0gYXN5bmMgKG1ldGFkYXRhOiBNZXRhZGF0YSwgY29uZmlndXJpbmc6IGJvb2xlYW4pID0+IHtcclxuICAgIHRoaXMuY29uZmlndXJlTW9kZUNoYW5nZWQubmV4dCh7bWV0YWRhdGE6IG1ldGFkYXRhLCBjb25maWd1cmluZzogY29uZmlndXJpbmd9KTtcclxuICB9O1xyXG5cclxuICBwdWJsaWMgZHJhZ0Nvbm5lY3RvciA9IGFzeW5jIChjb25uZWN0b3I6IEN1c3RvbU1lc2gsIHBvczogVmVjdG9yMykgPT4ge1xyXG4gICAgdGhpcy5fcmVzaXplU2VydmljZS5kcmFnQ29ubmVjdG9yVG9OZXdQb3NpdGlvbihjb25uZWN0b3IsIHBvcyk7XHJcbiAgfTtcclxuXHJcbiAgcHVibGljIGNhbmNlbENvbmZpZ3VyaW5nQ3VycmVudEluc3RhbmNlKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwKSB7XHJcbiAgICAgIHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwLmNvbmZpZ3VyaW5nID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pc01vdmVhYmxlT2JqZWN0KG9iajogT2JqZWN0M0QpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBvYmoudXNlckRhdGEgJiYgb2JqLnVzZXJEYXRhLnNlbGVjdGlvbiAmJiBvYmoudXNlckRhdGEuc2VsZWN0aW9uLmhkZWNvUG9zaXRpb25pbmcgPT09IEhkZWNvUG9zaXRpb25pbmcuVmFyaWFibGU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9hZGRFbGVtZW50T25Db25uZWN0b3IoY3VycmVudEl0ZW06IEl0ZW0sIGVsZW1lbnQ6IE9iamVjdDNELCBjb25uZWN0b3I6IHN0cmluZywgY29ubmVjdGVkTm9kZUlkOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIC8vIGNvbnN0IGNvbjogT2JqZWN0M0QgPSB0aGlzLl9jdXJyZW50Q3VzdG9tRmxvb3JHcm91cC5nZXRPYmplY3RCeU5hbWUoY29ubmVjdG9yLmNvbm5lY3Rvcik7XHJcbiAgICAvLyBpZiAoY29uKSB7ZVxyXG4gICAgLy8gY29uc3QgcG9zOiBWZWN0b3IzID0gbmV3IFZlY3RvcjMoKS5jb3B5KGNvbi5wb3NpdGlvbik7XHJcbiAgICAvLyBjb24ubG9jYWxUb1dvcmxkKHBvcyk7XHJcbiAgICBjb25zdCBjb25uZWN0b3JGcm9tRWxlbWVudCA9IGN1cnJlbnRJdGVtLmNvbm5lY3RvckZyb21FbGVtZW50KGVsZW1lbnQudXNlckRhdGEuc2VsZWN0aW9uKTtcclxuICAgIGNvbnN0IGlkRnJvbUJhc2VFbGVtZW50OiBudW1iZXIgPSBjb25uZWN0ZWROb2RlSWQgPyBjb25uZWN0ZWROb2RlSWQgOiBjb25uZWN0b3JGcm9tRWxlbWVudC5jb25uZWN0ZWROb2RlSWQ7XHJcbiAgICBjb25zdCBiYXNlRWxlbWVudDogT2JqZWN0M0RbXSA9IGN1cnJlbnRJdGVtLmdldE9iamVjdHNCeVVzZXJEYXRhUHJvcCgnc2VsZWN0aW9uJywgJ25vZGVJZCcsIGlkRnJvbUJhc2VFbGVtZW50KTtcclxuXHJcbiAgICBjb25zdCBpdGVtOiBJdGVtID0gT2JqZWN0VXRpbHMuR2V0UGFyZW50SXRlbShlbGVtZW50KTtcclxuICAgIGlmIChpdGVtKSB7XHJcbiAgICAgIGNvbnN0IGNvbm46IHN0cmluZyA9XHJcbiAgICAgICAgYXdhaXQgdGhpcy5fZWxlbWVudFNlcnZpY2UucGxhY2VFbGVtZW50T25Db25uZWN0b3IoXHJcbiAgICAgICAgICBpdGVtLm1ldGFkYXRhLml0ZW1JZCwgZWxlbWVudCwgYmFzZUVsZW1lbnQubGVuZ3RoID4gMCA/IGJhc2VFbGVtZW50WzBdIDogbnVsbCwgZmFsc2UsIGNvbm5lY3RvciwgZmFsc2UpO1xyXG4gICAgICB0aGlzLl9zYXZlRWxlbWVudENvbm5lY3RvcihlbGVtZW50LCBjb25uKTtcclxuICAgIH1cclxuICAgIC8vIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NhdmVFbGVtZW50Q29ubmVjdG9yKGVsZW1lbnQ6IE9iamVjdDNELCBjb25uZWN0b3I6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC51c2VyRGF0YSAmJiBlbGVtZW50LnVzZXJEYXRhLnNlbGVjdGlvbikge1xyXG4gICAgICB0aGlzLl9jdXJyZW50Q3VzdG9tRmxvb3JHcm91cC51cGRhdGVFbGVtZW50Q29ubmVjdG9yKGVsZW1lbnQudXNlckRhdGEuc2VsZWN0aW9uLCBjb25uZWN0b3IsIHRoaXMuYmFzZUVsZW1lbnROb2RlSWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQHBhcmFtIGVsZW1lbnQgVGhlIGVsZW1lbnQgdG8gbW92ZVxyXG4gICAqIEBwYXJhbSBwb3MgVGhlIGxvY2FsIHBvc2l0aW9uXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBwcml2YXRlIF9tb3ZlQ2hpbGRFbGVtZW50VG9Qb3NpdGlvbihlbGVtZW50OiBPYmplY3QzRCwgcG9zOiBWZWN0b3IzKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5faXNNb3ZlYWJsZU9iamVjdChlbGVtZW50KSkge1xyXG4gICAgICBjb25zdCB3b3JsZFRvTG9jYWxQb3M6IFZlY3RvcjMgPSBuZXcgVmVjdG9yMygpLmNvcHkocG9zKS5hZGQodGhpcy5fb3JpZ2luYWxFbGVtZW50UG9zaXRpb24pO1xyXG4gICAgICBjb25zdCBiYXNlRWxlbWVudDogT2JqZWN0M0RbXSA9XHJcbiAgICAgICAgdGhpcy5fY3VycmVudEN1c3RvbUZsb29yR3JvdXAuZ2V0T2JqZWN0c0J5VXNlckRhdGFQcm9wKCdzZWxlY3Rpb24nLCAnbm9kZUlkJywgdGhpcy5iYXNlRWxlbWVudE5vZGVJZCk7XHJcbiAgICAgIGNvbnN0IGl0ZW06IEl0ZW0gPSBPYmplY3RVdGlscy5HZXRQYXJlbnRJdGVtKGVsZW1lbnQpO1xyXG4gICAgICBpZiAoaXRlbSkge1xyXG4gICAgICAgIHRoaXMuX2VsZW1lbnRTZXJ2aWNlLm1vdmVFbGVtZW50VG9OZXdQb3NpdGlvbihcclxuICAgICAgICAgIGl0ZW0ubWV0YWRhdGEuaXRlbUlkLCBlbGVtZW50LCB3b3JsZFRvTG9jYWxQb3MsIGJhc2VFbGVtZW50Lmxlbmd0aCA+IDAgPyBiYXNlRWxlbWVudFswXSA6IG51bGwpO1xyXG4gICAgICAgIC8vIHRoaXMuX3NhdmVFbGVtZW50Q29ubmVjdG9yKGVsZW1lbnQsIHBvcyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3Jlc2V0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fcGxhY2VkQWRqdXN0YWJsZXMubGVuZ3RoID0gMDtcclxuICAgIHRoaXMuX3BsYWNlZEFkZGFibGVzLmxlbmd0aCA9IDA7XHJcbiAgICB0aGlzLl9hZGp1c3RhYmxlcy5sZW5ndGggPSAwO1xyXG4gICAgdGhpcy5fYWRkYWJsZXMubGVuZ3RoID0gMDtcclxuICAgIC8vIHRoaXMuX3ByZXBhcmVUaGVTZWxlY3Rpb25zKCk7XHJcbiAgICAvLyB0b2RvOiBjaGVjayB0aGlzXHJcbiAgICAvLyB0aGlzLl9lbGVtZW50U2VydmljZS5yZW1vdmVFbGVtZW50KHRoaXMuYWN0aXZlSW5zdGFuY2UpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgbWF0ZXJpYWxJZCBvZiB0aGUgcGFyZW50IHVwIHRoZSB0cmVlIHVudGlsIHByZXNlbnRpb25sZXZlbCAxIGlzIHJlYWNoZWRcclxuICAgKiBAcGFyYW0gaWRcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2dldE1hdGVyaWFsSWRGcm9tUGFyZW50KGlkOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgaWR4OiBudW1iZXIgPSB0aGlzLnNlbGVjdGlvbnMuZmluZEluZGV4KHMgPT4gcy5ub2RlID09PSBpZCk7XHJcbiAgICBsZXQgY3VycmVudExldmVsOiBudW1iZXIgPSA5OTk7XHJcbiAgICBpZiAoaWR4ID4gLTEpIHtcclxuICAgICAgZm9yIChsZXQgaSA9IGlkeDsgaSA+IDA7IGktLSkge1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uc1tpXTtcclxuICAgICAgICBpZiAoc2VsZWN0aW9uLnByZXNlbnRhdGlvbkxldmVsID49IGN1cnJlbnRMZXZlbCkge1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGN1cnJlbnRMZXZlbCA9IHNlbGVjdGlvbi5wcmVzZW50YXRpb25MZXZlbDtcclxuICAgICAgICBpZiAoc2VsZWN0aW9uLmhkZWNvR2FtZU9iamVjdCkge1xyXG4gICAgICAgICAgcmV0dXJuIHNlbGVjdGlvbi5oZGVjb0dhbWVPYmplY3Q7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcHJlcGFyZVRoZVNlbGVjdGlvbnMoaW5zdGFuY2VJZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCBzZWxlY3Rpb25zID0gdGhpcy5zZWxlY3Rpb25zLnNsaWNlKCk7XHJcbiAgICBjb25zdCBzZWxlY3Rpb25PZkFydGljbGU6IFNlbGVjdGlvbiA9IHNlbGVjdGlvbnMuZmluZChzID0+IHMubm9kZVR5cGUgPT09IE5vZGVUeXBlLkFydGljbGUpO1xyXG4gICAgY29uc3QgYWRqdXN0YWJsZVNlbGVjdGlvbnM6IFNlbGVjdGlvbltdID0gc2VsZWN0aW9ucy5maWx0ZXIocyA9PiBzLmFkZEFkanVzdCA9PT0gJzInKTtcclxuICAgIGNvbnN0IGlzQXJ0aWNsZVdpdGhNYXRlcmlhbDogYm9vbGVhbiA9XHJcbiAgICAgIGFkanVzdGFibGVTZWxlY3Rpb25zLmxlbmd0aCA9PT0gMCAmJlxyXG4gICAgICBzZWxlY3Rpb25PZkFydGljbGUuZ2FtZU9iamVjdCAmJlxyXG4gICAgICBzZWxlY3Rpb25PZkFydGljbGUuZ2FtZU9iamVjdC5sZW5ndGggPiAwO1xyXG4gICAgLy8gZ2V0IGdlbmVyaWMgdmFyaWF0aW9uc1xyXG4gICAgY29uc3QgZ2xvYmFsVmFyaWF0aW9uczogRGVjb05vZGVbXSA9IHRoaXMuc2VsZWN0aW9uc1xyXG4gICAgICAuZmlsdGVyKHMgPT4gKHMuZ2VuZXJpYyB8fCBhZGp1c3RhYmxlU2VsZWN0aW9ucy5sZW5ndGggPT09IDEpICYmIChzLmRlY29Ob2RlIGFzIGFueSkudmFyaWF0aW9uICYmICFzLmRlY29Ob2RlLnR5cGUpXHJcbiAgICAgIC5tYXAoKHZhbHVlOiBTZWxlY3Rpb24sIGluZGV4OiBudW1iZXIsIGFycmF5OiBTZWxlY3Rpb25bXSkgPT4ge1xyXG4gICAgICAgIC8vIGZpbmQgc2VsZWN0aW9uIG9mIHZhcmlhdGlvblxyXG4gICAgICAgIGNvbnN0IHNlbDogU2VsZWN0aW9uID0gdGhpcy5zZWxlY3Rpb25zLmZpbmQocyA9PiBzLmFydE5vZGVJZERlY28gPT09ICh2YWx1ZS5kZWNvTm9kZSBhcyBhbnkpLnZhcmlhdGlvbi5wYXJlbnRJZCk7XHJcbiAgICAgICAgaWYgKHNlbCkge1xyXG4gICAgICAgICAgKHZhbHVlLmRlY29Ob2RlIGFzIGFueSkudmFyaWF0aW9uLnN1cHBsaWVyQXJ0aWNsZU5yID0gc2VsLnN1cHBsaWVyQXJ0aWNsZU5yO1xyXG4gICAgICAgIH1cclxuICAgICAgICAodmFsdWUuZGVjb05vZGUgYXMgYW55KS52YXJpYXRpb24ubWF0ZXJpYWxJZCA9IHRoaXMuX2dldE1hdGVyaWFsSWRGcm9tUGFyZW50KHZhbHVlLm5vZGUpO1xyXG4gICAgICAgIHJldHVybiAodmFsdWUuZGVjb05vZGUgYXMgYW55KS52YXJpYXRpb247XHJcbiAgICAgIH0pO1xyXG4gICAgLy8gY29tbWVudGVkIG91dCBmb3IgdGhlIG1vbWVudFxyXG4gICAgLy8gZ2xvYmFsVmFyaWF0aW9ucy5mb3JFYWNoKGcgPT4ge1xyXG4gICAgLy8gICBjb25zdCBwYXJlbnRJZHggPSBzZWxlY3Rpb25zLmZpbmRJbmRleChzID0+IHMuZGVjb05vZGUgJiYgcy5kZWNvTm9kZS5pZCA9PT0gZy5wYXJlbnRJZCk7XHJcbiAgICAvLyAgIGlmIChwYXJlbnRJZHgpIHsgLy8gcmVtb3ZlIHBhcmVudCBzZWxlY3Rpb25cclxuICAgIC8vICAgICBzZWxlY3Rpb25zLnNwbGljZShwYXJlbnRJZHgsIDEpO1xyXG4gICAgLy8gICB9XHJcbiAgICAvLyAgIGNvbnN0IGlkeCA9IHNlbGVjdGlvbnMuZmluZEluZGV4KHMgPT4gcy5kZWNvTm9kZSAmJiBzLmRlY29Ob2RlLmlkID09PSBnLmlkKTtcclxuICAgIC8vICAgaWYgKGlkeCkgeyAvLyBtb3ZlIGdlbmVyaWMgdmFyaWF0aW9ucyB0byB0b3BcclxuICAgIC8vICAgICBjb25zdCBzZWxlY3Rpb24gPSBzZWxlY3Rpb25zW2lkeF07XHJcbiAgICAvLyAgICAgc2VsZWN0aW9ucy5zcGxpY2UoaWR4LCAxKTtcclxuICAgIC8vICAgICBzZWxlY3Rpb25zLnVuc2hpZnQoc2VsZWN0aW9uKTtcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfSk7XHJcblxyXG4gICAgY29uc3QgdXNlZFZhcmlhdGlvbnM6IEZ1cm5pdHVyZVBhcnRWYXJpYXRpb25bXSA9IFtdO1xyXG4gICAgbGV0IGdsb2JhbFZhcmlhdGlvbnNSZXdyaXRlOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICBjb25zdCBsZW46IG51bWJlciA9IHNlbGVjdGlvbnMubGVuZ3RoO1xyXG4gICAgbGV0IGxhc3RBZGRlZDogU2VsZWN0aW9uO1xyXG4gICAgbGV0IGxhc3RBZGp1c3RhYmxlOiBTZWxlY3Rpb247XHJcbiAgICBsZXQgbmV3UGFydDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgbGV0IHByZXZpb3VzUHJlc0xldmVsOiBudW1iZXIgPSAtMTtcclxuICAgIGxldCBwb3NpdGlvbmluZzogYW55O1xyXG4gICAgbGV0IG9wdGlvblRleHQ6IHN0cmluZztcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgY29uc3Qgc2VsZWN0aW9uOiBTZWxlY3Rpb24gPSBzZWxlY3Rpb25zW2ldO1xyXG4gICAgICBpZiAoc2VsZWN0aW9uLnByZXNlbnRhdGlvbkxldmVsID09PSAxKSB7XHJcbiAgICAgICAgcG9zaXRpb25pbmcgPSBzZWxlY3Rpb24uaGRlY29Qb3NpdGlvbmluZztcclxuICAgICAgICBvcHRpb25UZXh0ID0gc2VsZWN0aW9uLnF1ZXN0aW9uO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChzZWxlY3Rpb24ucHJlc2VudGF0aW9uTGV2ZWwgPiBwcmV2aW91c1ByZXNMZXZlbCkge1xyXG4gICAgICAgIHNlbGVjdGlvbi5oZGVjb1Bvc2l0aW9uaW5nID0gc2VsZWN0aW9uLmhkZWNvUG9zaXRpb25pbmcgfHwgcG9zaXRpb25pbmc7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHNlbGVjdGlvbi5kZWNvTm9kZSkge1xyXG4gICAgICAgIGlmIChzZWxlY3Rpb24uZGVjb05vZGUudHlwZSA9PT0gRGVjb05vZGVUeXBlLlZhcmlhdGlvbikge1xyXG4gICAgICAgICAgY29uc3QgZGVjb05vZGUgPSBzZWxlY3Rpb24uZGVjb05vZGU7XHJcbiAgICAgICAgICAoZGVjb05vZGUgYXMgYW55KS5vcHRpb25UZXh0ID0gb3B0aW9uVGV4dDtcclxuICAgICAgICAgIC8vIGZpbmQgc2VsZWN0aW9uIG9mIHZhcmlhdGlvbiBhbmQgc2V0IG1hdGVyaWFsSWQgaW4gY2FzZSBvZiBtdWx0aW1hdGVyaWFsXHJcbiAgICAgICAgICAoZGVjb05vZGUgYXMgYW55KS5tYXRlcmlhbElkID0gdGhpcy5fZ2V0TWF0ZXJpYWxJZEZyb21QYXJlbnQoZGVjb05vZGUubm9kZUlkKTtcclxuICAgICAgICAgIGlmIChsYXN0QWRkZWQpIHtcclxuICAgICAgICAgICAgaWYgKG5ld1BhcnQpIHtcclxuICAgICAgICAgICAgICBpZiAoKGRlY29Ob2RlIGFzIGFueSkubWF0ZXJpYWxJZCkge1xyXG4gICAgICAgICAgICAgICAgbGFzdEFkZGVkLnZhcmlhdGlvbnMucHVzaChkZWNvTm9kZSk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGxhc3RBZGRlZC52YXJpYXRpb25zID0gW2RlY29Ob2RlXTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgbGFzdEFkZGVkLnZhcmlhdGlvbnMucHVzaChkZWNvTm9kZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbmV3UGFydCA9IGZhbHNlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGdsb2JhbFZhcmlhdGlvbnNSZXdyaXRlKSB7XHJcbiAgICAgICAgICAgICAgZ2xvYmFsVmFyaWF0aW9ucy5sZW5ndGggPSAwO1xyXG4gICAgICAgICAgICAgIGdsb2JhbFZhcmlhdGlvbnNSZXdyaXRlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZ2xvYmFsVmFyaWF0aW9ucy5wdXNoKGRlY29Ob2RlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIGNvbnN0IHZhcmlhdGlvbjogRnVybml0dXJlUGFydFZhcmlhdGlvbiA9IG5ldyBGdXJuaXR1cmVQYXJ0VmFyaWF0aW9uKCk7XHJcbiAgICAgICAgICAvLyB2YXJpYXRpb24uQnJhbmRJZCA9IHNlbGVjdGlvbi5kZWNvTm9kZS5icmFuZElkO1xyXG4gICAgICAgICAgLy8gdmFyaWF0aW9uLkRlc2NyaXB0aW9uID0gc2VsZWN0aW9uLmRlY29Ob2RlLmdhbWVPYmplY3ROYW1lO1xyXG4gICAgICAgICAgLy8gdmFyaWF0aW9uLk1hdGVyaWFsSWQgPSAoc2VsZWN0aW9uLmRlY29Ob2RlIGFzIGFueSkubWF0ZXJpYWxJZDtcclxuICAgICAgICAgIC8vIHZhcmlhdGlvbi5TdXBwbGllckFydGljbGVOciA9IChzZWxlY3Rpb24uZGVjb05vZGUgYXMgYW55KS5zdXBwbGllckFydGljbGVOcjtcclxuICAgICAgICAgIC8vIHVzZWRWYXJpYXRpb25zLnB1c2godmFyaWF0aW9uKTtcclxuICAgICAgICB9IGVsc2UgaWYgKChzZWxlY3Rpb24uZGVjb05vZGUudHlwZSA9PT0gRGVjb05vZGVUeXBlLlBhcnQgJiZcclxuICAgICAgICAgIHR5cGVvZiBzZWxlY3Rpb24uZGVjb05vZGUuZ2FtZU9iamVjdE5hbWUgPT09ICdzdHJpbmcnICYmXHJcbiAgICAgICAgICBzZWxlY3Rpb24uZGVjb05vZGUuZ2FtZU9iamVjdE5hbWUubGVuZ3RoKSB8fCAoaXNBcnRpY2xlV2l0aE1hdGVyaWFsKSkge1xyXG4gICAgICAgICAgaWYgKHNlbGVjdGlvbi5kZWNvTm9kZS5raW5kID09PSBEZWNvTm9kZUtpbmQuQWRqdXN0YWJsZSB8fCAoaXNBcnRpY2xlV2l0aE1hdGVyaWFsKSkge1xyXG4gICAgICAgICAgICBzZWxlY3Rpb24udmFyaWF0aW9ucyA9IGdsb2JhbFZhcmlhdGlvbnM7XHJcbiAgICAgICAgICAgIHRoaXMuX2FkanVzdGFibGVzLnB1c2goc2VsZWN0aW9uKTtcclxuICAgICAgICAgICAgaWYgKCFsYXN0QWRkZWQgfHwgKGxhc3RBZGRlZC5ub2RlSWQgIT09IHNlbGVjdGlvbi5ub2RlSWQgfHwgbGFzdEFkZGVkLm5vZGUgIT09IHNlbGVjdGlvbi5ub2RlKSkge1xyXG4gICAgICAgICAgICAgIG5ld1BhcnQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxhc3RBZGRlZCA9IHNlbGVjdGlvbjtcclxuICAgICAgICAgICAgbGFzdEFkanVzdGFibGUgPSBzZWxlY3Rpb247XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGlvbi5kZWNvTm9kZS5raW5kID09PSBEZWNvTm9kZUtpbmQuQWRkYWJsZSkge1xyXG4gICAgICAgICAgICBzZWxlY3Rpb24udmFyaWF0aW9ucyA9IGxhc3RBZGp1c3RhYmxlID8gbGFzdEFkanVzdGFibGUudmFyaWF0aW9ucyA6IGdsb2JhbFZhcmlhdGlvbnM7XHJcbiAgICAgICAgICAgIGlmIChsYXN0QWRqdXN0YWJsZSkge1xyXG4gICAgICAgICAgICAgIGxhc3RBZGp1c3RhYmxlLmFkZGFibGVzLnB1c2goc2VsZWN0aW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9hZGRhYmxlcy5wdXNoKHNlbGVjdGlvbik7XHJcbiAgICAgICAgICAgIGlmICghbGFzdEFkZGVkIHx8IChsYXN0QWRkZWQubm9kZUlkICE9PSBzZWxlY3Rpb24ubm9kZUlkIHx8IGxhc3RBZGRlZC5ub2RlICE9PSBzZWxlY3Rpb24ubm9kZSkpIHtcclxuICAgICAgICAgICAgICBuZXdQYXJ0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsYXN0QWRkZWQgPSBzZWxlY3Rpb247XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHByZXZpb3VzUHJlc0xldmVsID0gc2VsZWN0aW9uLnByZXNlbnRhdGlvbkxldmVsO1xyXG4gICAgfVxyXG4gICAgLy8gdGhpcy5fdXBzZXJ0RnVybml0dXJlKHRoaXMuYWN0aXZlSW5zdGFuY2UsXHJcbiAgICAvLyAgIHtWYXJpYXRpb25zOiB1c2VkVmFyaWF0aW9uc30pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2V0QWRqdXN0YWJsZXMoY2hlY2tHYW1lT2JqZWN0OiBib29sZWFuID0gdHJ1ZSwgY2hlY2tUeXBlOiBib29sZWFuID0gdHJ1ZSk6IFNlbGVjdGlvbltdIHtcclxuICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbnMuZmlsdGVyKHMgPT4ge1xyXG4gICAgICBjb25zdCBub2RlOiBEZWNvTm9kZSA9IHMuZGVjb05vZGU7XHJcbiAgICAgIHJldHVybiBub2RlICYmIChjaGVja0dhbWVPYmplY3QgPyBub2RlLmdhbWVPYmplY3ROYW1lIDogdHJ1ZSkgJiYgKGNoZWNrVHlwZSA/IG5vZGUudHlwZSA9PT0gRGVjb05vZGVUeXBlLlBhcnQgOiB0cnVlKSAmJiBub2RlLmtpbmQgPT09IERlY29Ob2RlS2luZC5BZGp1c3RhYmxlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZXRWYXJpYXRpb25zKCk6IGFueVtdIHtcclxuICAgIGlmICh0aGlzLl9pT25lLmRlY29Ob2Rlcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuX2lPbmUuZGVjb05vZGVzLmZpbHRlcigoZGVjbzogRGVjb05vZGUpID0+IHtcclxuICAgICAgcmV0dXJuIGRlY28udHlwZSA9PT0gRGVjb05vZGVUeXBlLlZhcmlhdGlvbjtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY3JlYXRlQWRqdXN0YWJsZShpdGVtOiBJdGVtLCBhZGo6IFNlbGVjdGlvbik6IEN1c3RvbU9iamVjdDNEIHtcclxuICAgIGxldCBvYmo6IGFueSA9IHRoaXMuZnVsbDNET2JqZWN0VG9Vc2UgPyB0aGlzLmZ1bGwzRE9iamVjdFRvVXNlLmdldE9iamVjdEJ5TmFtZShhZGouZGVjb05vZGUuZ2FtZU9iamVjdE5hbWUgfHwgYWRqLmdhbWVPYmplY3QpIDogbnVsbDtcclxuICAgIGlmICghb2JqKSB7XHJcbiAgICAgIC8vIGluIGNhc2Ugb2YgZ2xiIGZpbGVzLCB0aGUgaW1wb3J0ZXIgcmVtb3ZlcyBkb3RzIGZyb20gbmFtZXNcclxuICAgICAgY29uc3QgbmFtZSA9IGFkai5kZWNvTm9kZS5nYW1lT2JqZWN0TmFtZS5yZXBsYWNlKC9bLl0vZywgJycpO1xyXG4gICAgICBvYmogPSB0aGlzLmZ1bGwzRE9iamVjdFRvVXNlID8gdGhpcy5mdWxsM0RPYmplY3RUb1VzZS5nZXRPYmplY3RCeU5hbWUobmFtZSkgOiBudWxsO1xyXG4gICAgICBpZiAoIW9iaikge1xyXG4gICAgICAgIGNvbnNvbGUud2FybihgTm8gb2JqZWN0IHdpdGggbmFtZSAke2Fkai5kZWNvTm9kZS5nYW1lT2JqZWN0TmFtZX0gZm91bmQhYCk7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGxldCBhZGp1c3RhYmxlOiBhbnkgPSBvYmouY2xvbmUoKTtcclxuICAgIGFkanVzdGFibGUubmFtZSA9IHRoaXMuX2NyZWF0ZVVuaXF1ZU5hbWUoaXRlbSwgb2JqKTtcclxuICAgIGFkanVzdGFibGUudXNlckRhdGEuc2VsZWN0aW9uID0gYWRqO1xyXG4gICAgYWRqdXN0YWJsZS5wb3NpdGlvbi5zZXQoMCwgMCwgMCk7XHJcbiAgICBhZGp1c3RhYmxlLnRyYXZlcnNlKGMgPT4ge1xyXG4gICAgICBjLnZpc2libGUgPSAhYy5uYW1lLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgnY18nKTtcclxuICAgIH0pO1xyXG4gICAgaXRlbS5hZGRDaGlsZChhZGp1c3RhYmxlKTtcclxuICAgIC8vIHRoZSBvYmplY3QgYmVpbmcgYWRkZWQgdG8gdGhlIGN1c3RvbUZsb29yR3JvdXAgaXMgYmVpbmcgcmVjcmVhdGVkIHNvIHdlIGxvb3NlIHRoZSByZWZlcmVuY2VcclxuICAgIC8vIHRoZXJlZm9yIHdlIG5lZWQgdG8gcmV0cmlldmUgdGhlIGNyZWF0ZWQgb2JqZWN0IGFnYWluXHJcbiAgICBhZGp1c3RhYmxlID0gaXRlbS5nZXRPYmplY3RCeU5hbWUoYWRqdXN0YWJsZS5uYW1lKTtcclxuICAgIHRoaXMuX3BsYWNlZEFkanVzdGFibGVzLnB1c2goYWRqdXN0YWJsZSk7XHJcbiAgICByZXR1cm4gYWRqdXN0YWJsZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NyZWF0ZUFkZGFibGUoaXRlbTogSXRlbSwgYWRkOiBTZWxlY3Rpb24sIHBhcnQyPzogYW55LCBwYXJ0MT86IGFueSk6IEN1c3RvbU9iamVjdDNEIHtcclxuICAgIGNvbnN0IG9iajogYW55ID0gdGhpcy5mdWxsM0RPYmplY3RUb1VzZS5nZXRPYmplY3RCeU5hbWUoYWRkLmRlY29Ob2RlLmdhbWVPYmplY3ROYW1lKTtcclxuICAgIGlmICghb2JqKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgLy8gY29uc3Qgc2VsZWN0aW9uOiBTZWxlY3Rpb24gPSB0aGlzLl9nZXRTZWxlY3Rpb25Gcm9tSWQoYWRqLmFydE5vZGVJZERlY28pO1xyXG4gICAgY29uc3QgYWRkYWJsZTogYW55ID0gb2JqLmNsb25lKCk7XHJcbiAgICBhZGRhYmxlLm5hbWUgPSB0aGlzLl9jcmVhdGVVbmlxdWVOYW1lKGl0ZW0sIG9iaik7XHJcbiAgICBhZGRhYmxlLnVzZXJEYXRhLnNlbGVjdGlvbiA9IGFkZDtcclxuICAgIGFkZGFibGUucG9zaXRpb24uc2V0KDAsIDAsIDApO1xyXG4gICAgYWRkYWJsZS52aXNpYmxlID0gdHJ1ZTtcclxuICAgIGlmIChwYXJ0MSAmJiBwYXJ0Mikge1xyXG4gICAgICByZXR1cm4gdGhpcy5fcGxhY2VBZGRhYmxlKGl0ZW0sIGFkZGFibGUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFkZGFibGU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9wbGFjZUFkZGFibGUoaXRlbTogSXRlbSwgYWRkOiBhbnkpOiBDdXN0b21PYmplY3QzRCB7XHJcbiAgICBpdGVtLmFkZENoaWxkKGFkZCk7XHJcbiAgICBjb25zdCBhZGRhYmxlOiBDdXN0b21PYmplY3QzRCA9IGl0ZW0uZ2V0T2JqZWN0QnlOYW1lKGFkZC5uYW1lKSBhcyBDdXN0b21PYmplY3QzRDtcclxuICAgIHRoaXMuX3BsYWNlZEFkZGFibGVzLnB1c2goYWRkYWJsZSk7XHJcbiAgICByZXR1cm4gYWRkYWJsZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NyZWF0ZVVuaXF1ZU5hbWUoaXRlbTogSXRlbSwgb2JqOiBPYmplY3QzRCk6IHN0cmluZyB7XHJcbiAgICBsZXQgaXRlcmF0aW9uID0gMDtcclxuICAgIGxldCBuYW1lID0gYCR7aXRlbS5uYW1lfV8ke29iai5uYW1lfWA7XHJcbiAgICBsZXQgZXhpc3RpbmdPYmogPSBpdGVtLmdldE9iamVjdEJ5TmFtZShuYW1lKTtcclxuICAgIHdoaWxlIChleGlzdGluZ09iaikge1xyXG4gICAgICBpdGVyYXRpb24rKztcclxuICAgICAgbmFtZSA9IGAke2l0ZW0ubmFtZX1fJHtvYmoubmFtZX1gICsgKGl0ZXJhdGlvbiAhPT0gMCA/ICgnXycgKyBpdGVyYXRpb24pIDogJycpO1xyXG4gICAgICBleGlzdGluZ09iaiA9IGl0ZW0uZ2V0T2JqZWN0QnlOYW1lKG5hbWUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5hbWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9wbGFjZUFkZGFibGVzKGl0ZW06IEl0ZW0pOiB2b2lkIHtcclxuICAgIGNvbnN0IGxlbjogbnVtYmVyID0gdGhpcy5fcGxhY2VkQWRqdXN0YWJsZXMubGVuZ3RoO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICBpZiAodGhpcy5fcGxhY2VkQWRqdXN0YWJsZXNbaV0udXNlckRhdGEuaGFzT3duUHJvcGVydHkoJ3NlbGVjdGlvbicpICYmIHRoaXMuX3BsYWNlZEFkanVzdGFibGVzW2ldLnVzZXJEYXRhLnNlbGVjdGlvbikge1xyXG4gICAgICAgIGNvbnN0IGFkanVzdGFibGVTZWxlY3Rpb246IFNlbGVjdGlvbiA9IHRoaXMuX3BsYWNlZEFkanVzdGFibGVzW2ldLnVzZXJEYXRhLnNlbGVjdGlvbjtcclxuICAgICAgICBpZiAoYWRqdXN0YWJsZVNlbGVjdGlvbikge1xyXG4gICAgICAgICAgY29uc3QgbGVuYTogbnVtYmVyID0gYWRqdXN0YWJsZVNlbGVjdGlvbi5hZGRhYmxlcy5sZW5ndGg7XHJcbiAgICAgICAgICBsZXQgY29uQWRkYWJsZTogYW55O1xyXG4gICAgICAgICAgZm9yIChsZXQgaWEgPSAwOyBpYSA8IGxlbmE7IGlhKyspIHtcclxuICAgICAgICAgICAgU2NlbmUzRFV0aWwuVHJ5U2VsZWN0b3JDb25uZWN0aW9uKHRoaXMuc2NlbmUsXHJcbiAgICAgICAgICAgICAgaXRlbSwgdGhpcy5fcGxhY2VkQWRqdXN0YWJsZXNbaV0sIGFkanVzdGFibGVTZWxlY3Rpb24uYWRkYWJsZXNbaWFdLCBmYWxzZSxcclxuICAgICAgICAgICAgICAoYWRkLCBwYXJ0Mj8sIHBhcnQxPykgPT4gdGhpcy5fY3JlYXRlQWRkYWJsZShpdGVtLCBhZGQsIHBhcnQyLCBwYXJ0MSkpO1xyXG4gICAgICAgICAgICBpZiAoY29uQWRkYWJsZSkge1xyXG4gICAgICAgICAgICAgIFNjZW5lM0RVdGlsLlRyeVNlbGVjdG9yQ29ubmVjdGlvbih0aGlzLnNjZW5lLFxyXG4gICAgICAgICAgICAgICAgaXRlbSwgY29uQWRkYWJsZSwgYWRqdXN0YWJsZVNlbGVjdGlvbi5hZGRhYmxlc1tpYV0sIGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgKGFkZCwgcGFydDI/LCBwYXJ0MT8pID0+IHRoaXMuX2NyZWF0ZUFkZGFibGUoaXRlbSwgYWRkLCBwYXJ0MiwgcGFydDEpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25BZGRhYmxlID0gdGhpcy5fcGxhY2VkQWRkYWJsZXNbdGhpcy5fcGxhY2VkQWRkYWJsZXMubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9sb2FkVmFyaWF0aW9ucyhpdGVtOiBJdGVtLCBpbnN0YW5jZUlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICh0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Mub3B0aW9ucy51c2VWYXJpYXRpb25PblBhcnQpIHtcclxuICAgICAgYXdhaXQgdGhpcy5fdmFyaWF0aW9uU2VydmljZS5sb2FkUGFydCh0aGlzLl9hZGp1c3RhYmxlcywgaW5zdGFuY2VJZCwgaXRlbSwgdHJ1ZSk7XHJcbiAgICB9XHJcbiAgICBhd2FpdCB0aGlzLl92YXJpYXRpb25TZXJ2aWNlLmxvYWRWYXJpYXRpb24odGhpcy5fYWRqdXN0YWJsZXMsIGluc3RhbmNlSWQsIGl0ZW0sIHRydWUpO1xyXG4gICAgYXdhaXQgdGhpcy5fdmFyaWF0aW9uU2VydmljZS5sb2FkVmFyaWF0aW9uKHRoaXMuX2FkZGFibGVzLCBpbnN0YW5jZUlkLCBpdGVtLCB0cnVlKTtcclxuICAgIHRoaXMuX3ZhcmlhdGlvblNlcnZpY2UuY2xlYXJDYWNoZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2hvd1dhcm5pbmcoZGF0YTogSW5mb0RpYWxvZ0RhdGEpIHtcclxuICAgIGNvbnN0IGRpYWxvZ0RhdGE6IEluZm9EaWFsb2dEYXRhID0ge1xyXG4gICAgICB0aXRsZTogdGhpcy5fZGljdGlvbmFyeVNlcnZpY2UuZ2V0KGRhdGEudGl0bGUpLCBtZXNzYWdlOiB0aGlzLl9kaWN0aW9uYXJ5U2VydmljZS5nZXQoZGF0YS5tZXNzYWdlKVxyXG4gICAgfTtcclxuICAgIHRoaXMuX2RpYWxvZy5vcGVuKEluZm9EaWFsb2dDb21wb25lbnQsIHtkYXRhOiBkaWFsb2dEYXRhfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9wcmVwYXJlU3RhbmRBbG9uZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2NvbGxpc2lvbk1hbmFnZXIuY2hlY2tDb2xsaXNpb25zID0gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLm9wdGlvbnMuY2FtZXJhUG9zaXRpb25GaXhlZCkge1xyXG4gICAgICB0aGlzLl9jYW1lcmFTZXJ2aWNlLmxvY2tDYW1lcmEoKTtcclxuICAgICAgdGhpcy5fY2FtZXJhU2VydmljZS5kaXNhYmxlUm90YXRlSG9yaXpvbnRhbCgpO1xyXG4gICAgICAvLyB0aGlzLl9jYW1lcmFTZXJ2aWNlLmRpc2FibGVSb3RhdGVWZXJ0aWNhbCgpO1xyXG4gICAgICB0aGlzLl9jYW1lcmFTZXJ2aWNlLmRpc2FibGVQYW4oKTtcclxuICAgICAgdGhpcy5fY2FtZXJhU2VydmljZS5jb250cm9scy50YXJnZXQgPSBuZXcgVmVjdG9yMygwLCA1MCwgMCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9zY2VuZUV2ZW50U2VydmljZS5yb3RhdGVOb0RyYWcgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcHJlbG9hZE1hdGVyaWFsKGFuc3dlcjogQW5zd2VyKTogdm9pZCB7XHJcbiAgICBpZiAoYW5zd2VyLmVsZW1lbnRUeXBlID09PSBEZWNvTm9kZVR5cGUuVmFyaWF0aW9uICYmIGFuc3dlci5nYW1lT2JqZWN0KSB7XHJcbiAgICAgIGNvbnN0IHZhcmlhdGlvbkRlY29Ob2RlOiBEZWNvTm9kZSA9IG5ldyBEZWNvTm9kZSgpO1xyXG4gICAgICB2YXJpYXRpb25EZWNvTm9kZS5nYW1lT2JqZWN0TmFtZSA9IGFuc3dlci5nYW1lT2JqZWN0O1xyXG4gICAgICBjb25zdCBhZGp1c3RhYmxlc0Nsb25lOiBTZWxlY3Rpb25bXSA9IHRoaXMuX2FkanVzdGFibGVzLm1hcChzID0+IE9iamVjdC5hc3NpZ24oe30sIHMpKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLl9nZW5lcmljU2VsZWN0aW9uKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudEN1c3RvbUZsb29yR3JvdXApIHtcclxuICAgICAgICAgIGFkanVzdGFibGVzQ2xvbmUuZm9yRWFjaCgoc2VsZWN0aW9uOiBTZWxlY3Rpb24pID0+IHNlbGVjdGlvbi52YXJpYXRpb25zID0gW3ZhcmlhdGlvbkRlY29Ob2RlXSk7XHJcbiAgICAgICAgICB0aGlzLl92YXJpYXRpb25DYWNoZVNlcnZpY2UucHJlbG9hZFZhcmlhdGlvbnNBc3luYyhhZGp1c3RhYmxlc0Nsb25lWzBdLnNjaGVtYSwgW3ZhcmlhdGlvbkRlY29Ob2RlLmdhbWVPYmplY3ROYW1lXSwgdGhpcy5hcnRpY2xlQXNzZXRQYXRoKVxyXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fdmFyaWF0aW9uU2VydmljZS5sb2FkVmFyaWF0aW9uKGFkanVzdGFibGVzQ2xvbmUsICcnLCB0aGlzLmN1cnJlbnRDdXN0b21GbG9vckdyb3VwLCB0cnVlKVxyXG4gICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5fc2NlbmVTZXJ2aWNlLm5lZWRzUmVuZGVyID0gdHJ1ZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLl9hZGp1c3RhYmxlcy5mb3JFYWNoKChzZWxlY3Rpb246IFNlbGVjdGlvbikgPT4gc2VsZWN0aW9uLnZhcmlhdGlvbnMgPSBbdmFyaWF0aW9uRGVjb05vZGVdKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgY3VycmVudFNlbGVjdGlvbjogU2VsZWN0aW9uID0gT2JqZWN0VXRpbHMuR2V0U2VsZWN0aW9uRnJvbVNlbGVjdGVkT2JqZWN0KHRoaXMuX2FjdGl2ZUNoaWxkRWxlbWVudCk7XHJcbiAgICAgICAgaWYgKGN1cnJlbnRTZWxlY3Rpb24pIHtcclxuICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRDdXN0b21GbG9vckdyb3VwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbkZyb21BZGp1c3RhYmxlczogU2VsZWN0aW9uID0gYWRqdXN0YWJsZXNDbG9uZVxyXG4gICAgICAgICAgICAgIC5maW5kKChzZWxlY3Rpb246IFNlbGVjdGlvbikgPT4gc2VsZWN0aW9uLm5vZGVJZCA9PT0gY3VycmVudFNlbGVjdGlvbi5ub2RlSWQpO1xyXG4gICAgICAgICAgICBpZiAoc2VsZWN0aW9uRnJvbUFkanVzdGFibGVzKSB7XHJcbiAgICAgICAgICAgICAgc2VsZWN0aW9uRnJvbUFkanVzdGFibGVzLnZhcmlhdGlvbnMgPSBbdmFyaWF0aW9uRGVjb05vZGVdO1xyXG4gICAgICAgICAgICAgIHRoaXMuX3ZhcmlhdGlvbkNhY2hlU2VydmljZS5wcmVsb2FkVmFyaWF0aW9uc0FzeW5jKGFkanVzdGFibGVzQ2xvbmVbMF0uc2NoZW1hLCBbdmFyaWF0aW9uRGVjb05vZGUuZ2FtZU9iamVjdE5hbWVdLCB0aGlzLmFydGljbGVBc3NldFBhdGgpXHJcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3ZhcmlhdGlvblNlcnZpY2UubG9hZFZhcmlhdGlvbihhZGp1c3RhYmxlc0Nsb25lLCAnJywgdGhpcy5jdXJyZW50Q3VzdG9tRmxvb3JHcm91cCwgdHJ1ZSlcclxuICAgICAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB0aGlzLl9zY2VuZVNlcnZpY2UubmVlZHNSZW5kZXIgPSB0cnVlKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3Rpb25Gcm9tQWRqdXN0YWJsZXM6IFNlbGVjdGlvbiA9IHRoaXMuX2FkanVzdGFibGVzXHJcbiAgICAgICAgICAgICAgLmZpbmQoKHNlbGVjdGlvbjogU2VsZWN0aW9uKSA9PiBzZWxlY3Rpb24ubm9kZUlkID09PSBjdXJyZW50U2VsZWN0aW9uLm5vZGVJZCk7XHJcbiAgICAgICAgICAgIHNlbGVjdGlvbkZyb21BZGp1c3RhYmxlcy52YXJpYXRpb25zID0gW3ZhcmlhdGlvbkRlY29Ob2RlXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
|