@colijnit/homedecorator 255.1.2 → 255.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/app/core/model/homedecorator-settings-options.d.ts +1 -0
  2. package/app/core/service/homedecorator-connector-adapter.service.d.ts +1 -1
  3. package/app/core/service/utils.service.d.ts +1 -0
  4. package/app/plugins/core3d/components/ar-gui/ar-gui-root/ar-gui-elements/ar-gui-buttons/ar-gui-buttons.component.scss +2 -4
  5. package/app/plugins/core3d/items/floor-plane-item.d.ts +8 -1
  6. package/app/plugins/core3d/items/metadata.d.ts +2 -0
  7. package/app/plugins/core3d/service/ar.service.d.ts +1 -0
  8. package/app/plugins/core3d/service/floor-pattern.service.d.ts +26 -0
  9. package/app/plugins/core3d/service/floor-tile-intersection.service.d.ts +25 -0
  10. package/app/plugins/core3d/service/outline.service.d.ts +1 -2
  11. package/app/plugins/core3d/service/post-processing.service.d.ts +6 -0
  12. package/app/plugins/core3d/service/scene.service.d.ts +4 -1
  13. package/app/plugins/core3d/service/ssr.service.d.ts +18 -0
  14. package/app/plugins/model-uploader/model-previewer/model-preview.component.d.ts +40 -3
  15. package/app/plugins/render/service/new-render.service.d.ts +1 -0
  16. package/app/plugins/threedselector/threedselector/service/build-furniture.service.d.ts +10 -1
  17. package/app/plugins/threedselector/threedselector/threedselector.component.d.ts +1 -0
  18. package/app/plugins/toolbar/toolbar.module.d.ts +2 -1
  19. package/app/shared/pdf-export/pdf-export.component.d.ts +20 -0
  20. package/app/shared/pdf-export/pdf-export.component.scss +19 -0
  21. package/app/shared/pdf-export/pdf-export.module.d.ts +11 -0
  22. package/assets/icons/pen-ruler.svg +1 -0
  23. package/assets/icons/xmark_regular.svg +1 -0
  24. package/bundles/colijnit-homedecorator.umd.js +1195 -174
  25. package/bundles/colijnit-homedecorator.umd.js.map +1 -1
  26. package/colijnit-homedecorator-255.1.2.tgz +0 -0
  27. package/esm2015/app/app.version.js +4 -4
  28. package/esm2015/app/core/model/homedecorator-settings-options.js +2 -1
  29. package/esm2015/app/core/model/light-preset.js +11 -7
  30. package/esm2015/app/core/service/homedecorator-connector-adapter.service.js +4 -6
  31. package/esm2015/app/core/service/homedecorator-connector.service.js +3 -1
  32. package/esm2015/app/core/service/utils.service.js +16 -1
  33. package/esm2015/app/plugins/core3d/components/ar-gui/ar-gui-root/ar-gui-elements/ar-gui-buttons/ar-gui-buttons.component.js +2 -2
  34. package/esm2015/app/plugins/core3d/items/floor-plane-item.js +25 -2
  35. package/esm2015/app/plugins/core3d/items/metadata.js +1 -1
  36. package/esm2015/app/plugins/core3d/service/ar.service.js +14 -1
  37. package/esm2015/app/plugins/core3d/service/floor-pattern.service.js +156 -0
  38. package/esm2015/app/plugins/core3d/service/floor-tile-intersection.service.js +122 -0
  39. package/esm2015/app/plugins/core3d/service/floor.service.js +5 -2
  40. package/esm2015/app/plugins/core3d/service/outline.service.js +9 -8
  41. package/esm2015/app/plugins/core3d/service/post-processing.service.js +77 -22
  42. package/esm2015/app/plugins/core3d/service/scene.service.js +30 -13
  43. package/esm2015/app/plugins/core3d/service/ssr.service.js +53 -0
  44. package/esm2015/app/plugins/lite-selector/lite-selector/component/selections-summary/selections-summary.component.js +3 -3
  45. package/esm2015/app/plugins/model-uploader/model-previewer/model-preview.component.js +335 -79
  46. package/esm2015/app/plugins/model-uploader/model-uploader/model-uploader.component.js +3 -2
  47. package/esm2015/app/plugins/product-catalog/product-catalog/product-catalog.component.js +3 -2
  48. package/esm2015/app/plugins/render/service/new-render.service.js +37 -13
  49. package/esm2015/app/plugins/threedselector/threedselector/service/build-furniture.service.js +135 -5
  50. package/esm2015/app/plugins/threedselector/threedselector/threedselector.component.js +34 -8
  51. package/esm2015/app/plugins/toolbar/toolbar/toolbar.component.js +9 -25
  52. package/esm2015/app/plugins/toolbar/toolbar.module.js +8 -4
  53. package/esm2015/app/shared/pdf-export/pdf-export.component.js +86 -0
  54. package/esm2015/app/shared/pdf-export/pdf-export.module.js +38 -0
  55. package/fesm2015/colijnit-homedecorator.js +1156 -181
  56. package/fesm2015/colijnit-homedecorator.js.map +1 -1
  57. package/package.json +2 -2
  58. package/assets/hdri/ground_MASK.jpg +0 -0
@@ -12,7 +12,7 @@ import { DecoNodeType } from '@colijnit/configuratorapi/build/enum/deco-node-typ
12
12
  import { DecoNodeKind } from '@colijnit/configuratorapi/build/enum/deco-node-kind.enum';
13
13
  import { Injectable } from '@angular/core';
14
14
  import { Subject } from 'rxjs';
15
- import { Euler, Vector3 } from 'three';
15
+ import { Euler, InstancedMesh, Object3D, Vector3 } from 'three';
16
16
  import { NodeType } from '@colijnit/configuratorapi/build/enum/node-type.enum';
17
17
  import { HdecoPositioning } from '@colijnit/configuratorapi/build/enum/hdeco-positioning.enum';
18
18
  import { environment } from '../../../../../environments/environment';
@@ -41,6 +41,7 @@ import { GoogleTagManagerEvent } from '../../../../core/enum/google-tag-manager-
41
41
  import { CustomWallFloorItem } from '../../../core3d/items/custom-wall-floor-item';
42
42
  import { ObjectUtils } from '../../../../core/utils/object.utils';
43
43
  import { InfoDialogComponent } from '../../../../shared/info-dialog/info-dialog.component';
44
+ import { FloorPattern, FloorPatternDirection } from '../../../core3d/service/floor-pattern.service';
44
45
  import * as i0 from "@angular/core";
45
46
  import * as i1 from "@angular/material/dialog";
46
47
  import * as i2 from "../../../../core/service/homedecorator-connector.service";
@@ -68,10 +69,12 @@ import * as i23 from "./variation-cache.service";
68
69
  import * as i24 from "./resize.service";
69
70
  import * as i25 from "../../../../core/service/view-mode.service";
70
71
  import * as i26 from "../../../core3d/service/floor.service";
72
+ import * as i27 from "../../../core3d/service/floor-pattern.service";
73
+ import * as i28 from "../../../core3d/service/floor-tile-intersection.service";
71
74
  const defaultPosition = new Vector3(4, 0, 1);
72
75
  const defaultRotation = new Euler(0, Math.PI, 0);
73
76
  export class BuildFurnitureService {
74
- constructor(_dialog, _iOne, _threedSelectorService, _collisionManager, _messageBus, _dictionaryService, _hudService, _sceneService, _cameraService, _sceneEventService, _appEventService, _presetService, _itemService, _elementService, _permanentStoreService, _googleTagManager, _settingsService, _utilsService, _variationService, _appStateService, _errorService, _itemGroupService, _variationCacheService, _resizeService, _viewModeService, _floorService) {
77
+ constructor(_dialog, _iOne, _threedSelectorService, _collisionManager, _messageBus, _dictionaryService, _hudService, _sceneService, _cameraService, _sceneEventService, _appEventService, _presetService, _itemService, _elementService, _permanentStoreService, _googleTagManager, _settingsService, _utilsService, _variationService, _appStateService, _errorService, _itemGroupService, _variationCacheService, _resizeService, _viewModeService, _floorService, _floorPatternService, _floorTileIntersectionService) {
75
78
  this._dialog = _dialog;
76
79
  this._iOne = _iOne;
77
80
  this._threedSelectorService = _threedSelectorService;
@@ -98,6 +101,8 @@ export class BuildFurnitureService {
98
101
  this._resizeService = _resizeService;
99
102
  this._viewModeService = _viewModeService;
100
103
  this._floorService = _floorService;
104
+ this._floorPatternService = _floorPatternService;
105
+ this._floorTileIntersectionService = _floorTileIntersectionService;
101
106
  this.toggleSelectedElement = new Subject();
102
107
  this.configureModeChanged = new Subject();
103
108
  this.buildFinished = new Subject();
@@ -378,6 +383,10 @@ export class BuildFurnitureService {
378
383
  const objectToExport = this._currentCustomFloorGroup ? this._currentCustomFloorGroup : this._itemService.items[0];
379
384
  this._utilsService.showExportDialog(objectToExport);
380
385
  }
386
+ downloadUDSZforARIOS() {
387
+ const objectToExport = this._currentCustomFloorGroup ? this._currentCustomFloorGroup : this._itemService.items[0];
388
+ this._utilsService.downloadUSDZforARIOS(objectToExport);
389
+ }
381
390
  downloadScene() {
382
391
  const assetPath = this._settingsService.settings.assetPath;
383
392
  // The ground plane looks odd in renders.
@@ -445,6 +454,7 @@ export class BuildFurnitureService {
445
454
  }
446
455
  this._answerSelected.length = 0;
447
456
  this._hudService.updateSelectedItemHud();
457
+ this._generateLayingPattern(item);
448
458
  this.buildFinished.next(result);
449
459
  if (result.resultType === ResultType.NoSelections) {
450
460
  result.resultType = ResultType.ConfigurationFixed;
@@ -455,6 +465,126 @@ export class BuildFurnitureService {
455
465
  return result;
456
466
  });
457
467
  }
468
+ _generateLayingPattern(floor) {
469
+ const floorPatternInfo = this._generateFloorPatternInfo(floor);
470
+ floor.restoreFloorObject();
471
+ const meshLeft = this.full3DObjectToUse.children.find(m => m.name === floorPatternInfo.meshIdLeft);
472
+ this._normalizeMesh(meshLeft);
473
+ let meshRight = null;
474
+ if (floorPatternInfo.meshIdRight !== null) {
475
+ meshRight = this.full3DObjectToUse.children.find(m => m.name === floorPatternInfo.meshIdRight);
476
+ this._normalizeMesh(meshRight);
477
+ }
478
+ const floorSize = floor.size;
479
+ const plankSize = new Vector3();
480
+ 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;
483
+ const material = floor.getMaterial();
484
+ const planksLeft = new InstancedMesh(meshLeft.geometry, material, itemAmount);
485
+ let planksRight;
486
+ if (meshRight) {
487
+ planksRight = new InstancedMesh(meshRight.geometry, material, itemAmount);
488
+ }
489
+ // assign transform to each item in instanced mesh
490
+ const dummy = new Object3D();
491
+ let matrixIndex = 0;
492
+ for (let i = 0; i < items.length; i++) {
493
+ const item = items[i];
494
+ const targetPlankMesh = (item.isLeft) ? planksLeft : planksRight;
495
+ const position = item.position;
496
+ const rotation = item.rotation;
497
+ dummy.position.set(position.x, position.y, position.z);
498
+ dummy.rotation.set(rotation.x, rotation.y, rotation.z);
499
+ dummy.updateMatrix();
500
+ targetPlankMesh.setMatrixAt(matrixIndex, dummy.matrix);
501
+ if (planksRight) {
502
+ if (i !== 0 && (i % 2 !== 0)) {
503
+ matrixIndex++;
504
+ }
505
+ }
506
+ else {
507
+ matrixIndex++;
508
+ }
509
+ }
510
+ const customFloorWrapper = new Object3D();
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);
517
+ }
518
+ _generateFloorPatternInfo(item) {
519
+ this._generateSelectedInMetadata(item);
520
+ const info = {
521
+ meshIdLeft: null,
522
+ meshIdRight: null,
523
+ floorPattern: FloorPattern.NORMAL,
524
+ floorPatternDirection: FloorPatternDirection.LYING
525
+ };
526
+ const selected = item.metadata.selections;
527
+ const afmeting = selected.find(s => s.question.toLowerCase() === 'plank afmeting');
528
+ let afmetingString = afmeting.answer.toLowerCase();
529
+ afmetingString = afmetingString.substr(afmetingString.lastIndexOf(' ') + 1);
530
+ const legPatroonAnswer = selected.find(s => s.question.toLowerCase() === 'leg patroon').answer.toLowerCase();
531
+ let legPatroonString = '';
532
+ switch (true) {
533
+ case legPatroonAnswer.indexOf('recht') !== -1:
534
+ legPatroonString = '90';
535
+ info.floorPattern = FloorPattern.NORMAL;
536
+ break;
537
+ case legPatroonAnswer.indexOf('graat') !== -1:
538
+ legPatroonString = '90';
539
+ info.floorPattern = FloorPattern.HERRINGBONE;
540
+ break;
541
+ case legPatroonAnswer.indexOf('60') !== -1:
542
+ legPatroonString = '60';
543
+ info.floorPattern = FloorPattern.HON60;
544
+ break;
545
+ case legPatroonAnswer.indexOf('45') !== -1:
546
+ legPatroonString = '45';
547
+ info.floorPattern = FloorPattern.HON45;
548
+ break;
549
+ }
550
+ info.meshIdLeft = `${afmetingString}_${legPatroonString}`;
551
+ if (info.floorPattern === FloorPattern.HON45 || info.floorPattern === FloorPattern.HON60) {
552
+ info.meshIdRight = `r_${afmetingString}_${legPatroonString}`;
553
+ }
554
+ if (info.floorPattern === FloorPattern.HERRINGBONE) {
555
+ info.meshIdRight = info.meshIdLeft;
556
+ }
557
+ const legRichtingAnswer = selected.find(s => s.question.toLowerCase() === 'leg richting').answer.toLowerCase();
558
+ info.floorPatternDirection = (legRichtingAnswer.indexOf('verticaal') !== -1) ? FloorPatternDirection.STANDING : FloorPatternDirection.LYING;
559
+ return info;
560
+ }
561
+ _generateSelectedInMetadata(item) {
562
+ const cloneSelections = JSON.parse(JSON.stringify(this.selections));
563
+ cloneSelections.forEach(s => {
564
+ s.imageData = undefined;
565
+ s.imageDataLastAnswer = undefined;
566
+ if (s.addables) {
567
+ s.addables.forEach(a => {
568
+ a.imageData = undefined;
569
+ });
570
+ }
571
+ });
572
+ item.metadata.decos = Array.from(this._iOne.decoNodes);
573
+ item.metadata.selections = cloneSelections;
574
+ }
575
+ _normalizeMesh(mesh) {
576
+ const meshSize = new Vector3();
577
+ mesh.geometry.computeBoundingBox();
578
+ mesh.geometry.boundingBox.getSize(meshSize);
579
+ if (meshSize.z > meshSize.x) {
580
+ mesh.geometry.rotateY(Math.PI / 2);
581
+ }
582
+ mesh.geometry.center();
583
+ mesh.geometry.computeBoundingBox();
584
+ const center = new Vector3();
585
+ mesh.geometry.boundingBox.getCenter(center);
586
+ mesh.position.copy(center);
587
+ }
458
588
  _startToBuildFromConfigurator(metadata) {
459
589
  return this.startToBuild(null, metadata);
460
590
  }
@@ -1332,12 +1462,12 @@ export class BuildFurnitureService {
1332
1462
  }
1333
1463
  }
1334
1464
  }
1335
- BuildFurnitureService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: BuildFurnitureService, deps: [{ token: i1.MatDialog }, { token: i2.HomedecoratorConnectorService }, { token: i3.ThreedselectorService }, { token: i4.CollisionManagerService }, { token: i5.MessageBusService }, { token: i6.HomedecoratorDictionaryService }, { token: i7.HudService }, { token: i8.SceneService }, { token: i9.CameraService }, { token: i10.SceneEventService }, { token: i11.HomedecoratorAppEventService }, { token: i12.PresetsService }, { token: i13.ItemService }, { token: i14.ElementService }, { token: i15.PermanentStoreService }, { token: i16.GoogleTagManagerService }, { token: i17.HomedecoratorSettingsService }, { token: i18.UtilsService }, { token: i19.VariationService }, { token: i20.AppStateService }, { token: i21.ErrorService }, { token: i22.ItemGroupService }, { token: i23.VariationCacheService }, { token: i24.ResizeService }, { token: i25.ViewModeService }, { token: i26.FloorService }], target: i0.ɵɵFactoryTarget.Injectable });
1465
+ BuildFurnitureService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: BuildFurnitureService, deps: [{ token: i1.MatDialog }, { token: i2.HomedecoratorConnectorService }, { token: i3.ThreedselectorService }, { token: i4.CollisionManagerService }, { token: i5.MessageBusService }, { token: i6.HomedecoratorDictionaryService }, { token: i7.HudService }, { token: i8.SceneService }, { token: i9.CameraService }, { token: i10.SceneEventService }, { token: i11.HomedecoratorAppEventService }, { token: i12.PresetsService }, { token: i13.ItemService }, { token: i14.ElementService }, { token: i15.PermanentStoreService }, { token: i16.GoogleTagManagerService }, { token: i17.HomedecoratorSettingsService }, { token: i18.UtilsService }, { token: i19.VariationService }, { token: i20.AppStateService }, { token: i21.ErrorService }, { token: i22.ItemGroupService }, { token: i23.VariationCacheService }, { token: i24.ResizeService }, { token: i25.ViewModeService }, { token: i26.FloorService }, { token: i27.FloorPatternService }, { token: i28.FloorTileIntersectionService }], target: i0.ɵɵFactoryTarget.Injectable });
1336
1466
  BuildFurnitureService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: BuildFurnitureService, providedIn: 'root' });
1337
1467
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: BuildFurnitureService, decorators: [{
1338
1468
  type: Injectable,
1339
1469
  args: [{
1340
1470
  providedIn: 'root'
1341
1471
  }]
1342
- }], 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 }]; } });
1343
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQtZnVybml0dXJlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2xpZW50L2FwcC9wbHVnaW5zL3RocmVlZHNlbGVjdG9yL3RocmVlZHNlbGVjdG9yL3NlcnZpY2UvYnVpbGQtZnVybml0dXJlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGlEQUFpRCxDQUFDO0FBQ3pFLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSwwREFBMEQsQ0FBQztBQUN0RixPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sMERBQTBELENBQUM7QUFFdEYsT0FBTyxFQUFDLFVBQVUsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUNwRCxPQUFPLEVBQUMsT0FBTyxFQUFlLE1BQU0sTUFBTSxDQUFDO0FBRTNDLE9BQU8sRUFBQyxLQUFLLEVBQXlCLE9BQU8sRUFBQyxNQUFNLE9BQU8sQ0FBQztBQUU1RCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0scURBQXFELENBQUM7QUFDN0UsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sNkRBQTZELENBQUM7QUFHN0YsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHlDQUF5QyxDQUFDO0FBQ3BFLE9BQU8sS0FBSyxLQUFLLE1BQU0sbUJBQW1CLENBQUM7QUFDM0MsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQ3RELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSx5Q0FBeUMsQ0FBQztBQUN4RSxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDaEQsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBRXpELE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLGlEQUFpRCxDQUFDO0FBQ3ZGLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxN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Q2hGLElBQUksd0JBQXdCLEVBQUU7NEJBQzVCLHdCQUF3QixDQUFDLFVBQVUsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUM7NEJBQzFELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxzQkFBc0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLENBQUMsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUM7aUNBQ3RJLElBQUksQ0FBQyxHQUFHLEVBQUU7Z0NBQ1QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLHVCQUF1QixFQUFFLElBQUksQ0FBQztxQ0FDM0YsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxDQUFDOzRCQUN2RCxDQUFDLENBQUMsQ0FBQzt5QkFDTjtxQkFDRjt5QkFBTTt3QkFDTCxNQUFNLHdCQUF3QixHQUFjLElBQUksQ0FBQyxZQUFZOzZCQUMxRCxJQUFJLENBQUMsQ0FBQyxTQUFvQixFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxLQUFLLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO3dCQUNoRix3QkFBd0IsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO3FCQUMzRDtpQkFDRjthQUNGO1NBQ0Y7SUFDSCxDQUFDOzttSEFoMkNVLHFCQUFxQjt1SEFBckIscUJBQXFCLGNBRnBCLE1BQU07NEZBRVAscUJBQXFCO2tCQUhqQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGVjb05vZGV9IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvbW9kZWwvZGVjby1ub2RlJztcclxuaW1wb3J0IHtEZWNvTm9kZVR5cGV9IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvZW51bS9kZWNvLW5vZGUtdHlwZS5lbnVtJztcclxuaW1wb3J0IHtEZWNvTm9kZUtpbmR9IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvZW51bS9kZWNvLW5vZGUta2luZC5lbnVtJztcclxuaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvbW9kZWwvc2VsZWN0aW9uJztcclxuaW1wb3J0IHtJbmplY3RhYmxlLCBPbkRlc3Ryb3l9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1N1YmplY3QsIFN1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7QW5zd2VyfSBmcm9tICdAY29saWpuaXQvY29uZmlndXJhdG9yYXBpL2J1aWxkL21vZGVsL2Fuc3dlcic7XHJcbmltcG9ydCB7RXVsZXIsIE1lc2gsIE9iamVjdDNELCBTY2VuZSwgVmVjdG9yM30gZnJvbSAndGhyZWUnO1xyXG5pbXBvcnQge01hdERpYWxvZ30gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHtOb2RlVHlwZX0gZnJvbSAnQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9lbnVtL25vZGUtdHlwZS5lbnVtJztcclxuaW1wb3J0IHtIZGVjb1Bvc2l0aW9uaW5nfSBmcm9tICdAY29saWpuaXQvY29uZmlndXJhdG9yYXBpL2J1aWxkL2VudW0vaGRlY28tcG9zaXRpb25pbmcuZW51bSc7XHJcbmltcG9ydCB7UXVlc3Rpb25BbmRBbnN3ZXJzfSBmcm9tICdAY29saWpuaXQvY29uZmlndXJhdG9yYXBpL2J1aWxkL21vZGVsL3F1ZXN0aW9uLWFuZC1hbnN3ZXJzJztcclxuaW1wb3J0IHtRdWVzdGlvbn0gZnJvbSAnQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9tb2RlbC9xdWVzdGlvbic7XHJcbmltcG9ydCB7ZW52aXJvbm1lbnR9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudCc7XHJcbmltcG9ydCAqIGFzIFRXRUVOIGZyb20gJ0B0d2VlbmpzL3R3ZWVuLmpzJztcclxuaW1wb3J0IHtGYWN0b3J5fSBmcm9tICcuLi8uLi8uLi9jb3JlM2QvaXRlbXMvZmFjdG9yeSc7XHJcbmltcG9ydCB7Q3VzdG9tRmxvb3JJdGVtfSBmcm9tICcuLi8uLi8uLi9jb3JlM2QvaXRlbXMvY3VzdG9tLWZsb29yLWl0ZW0nO1xyXG5pbXBvcnQge0l0ZW19IGZyb20gJy4uLy4uLy4uL2NvcmUzZC9pdGVtcy9pdGVtJztcclxuaW1wb3J0IHtJdGVtVHlwZX0gZnJvbSAnLi4vLi4vLi4vY29yZTNkL2l0ZW1zL2l0ZW0tdHlwZSc7XHJcbmltcG9ydCB7TWV0YWRhdGF9IGZyb20gJy4uLy4uLy4uL2NvcmUzZC9pdGVtcy9tZXRhZGF0YSc7XHJcbmltcG9ydCB7Q3VzdG9tRmxvb3JHcm91cFJlc3VsdH0gZnJvbSAnLi4vLi4vLi4vY29yZTNkL21vZGVsL2N1c3RvbS1mbG9vci1ncm91cC1yZXN1bHQnO1xyXG5pbXBvcnQge0Z1cm5pdHVyZUludGVncmF0aW9ufSBmcm9tICcuLi9tb2RlbC9mdXJuaXR1cmUtaW50ZWdyYXRpb24nO1xyXG5pbXBvcnQge1RocmVlZHNlbGVjdG9yU2VydmljZX0gZnJvbSAnLi90aHJlZWRzZWxlY3Rvci5zZXJ2aWNlJztcclxuaW1wb3J0IHtDb2xsaXNpb25NYW5hZ2VyU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZTNkL2NvbGxpc2lvbi1tYW5hZ2VyL2NvbGxpc2lvbi1tYW5hZ2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQge01lc3NhZ2VCdXNTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3NlcnZpY2UvbWVzc2FnZS1idXMuc2VydmljZSc7XHJcbmltcG9ydCB7SHVkU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZTNkL3NlcnZpY2UvaHVkLnNlcnZpY2UnO1xyXG5pbXBvcnQge1NjZW5lU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZTNkL3NlcnZpY2Uvc2NlbmUuc2VydmljZSc7XHJcbmltcG9ydCB7Q2FtZXJhU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZTNkL3NlcnZpY2UvY2FtZXJhLnNlcnZpY2UnO1xyXG5pbXBvcnQge1NjZW5lRXZlbnRTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlM2Qvc2VydmljZS9zY2VuZS1ldmVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHtQcmVzZXRzU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9zZXJ2aWNlL3ByZXNldHMuc2VydmljZSc7XHJcbmltcG9ydCB7SXRlbVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUzZC9zZXJ2aWNlL2l0ZW0uc2VydmljZSc7XHJcbmltcG9ydCB7RWxlbWVudFNlcnZpY2V9IGZyb20gJy4vZWxlbWVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHtQZXJtYW5lbnRTdG9yZVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvc2VydmljZS9wZXJtYW5lbnQtc3RvcmUuc2VydmljZSc7XHJcbmltcG9ydCB7R29vZ2xlVGFnTWFuYWdlclNlcnZpY2V9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2UvZ29vZ2xlLXRhZy1tYW5hZ2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQge1V0aWxzU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9zZXJ2aWNlL3V0aWxzLnNlcnZpY2UnO1xyXG5pbXBvcnQge1ZhcmlhdGlvblNlcnZpY2V9IGZyb20gJy4vdmFyaWF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQge0FwcFN0YXRlU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2FwcC1zdGF0ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtFcnJvclNlcnZpY2V9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvc2VydmljZS9lcnJvci5zZXJ2aWNlJztcclxuaW1wb3J0IHtJdGVtR3JvdXBTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlM2Qvc2VydmljZS9pdGVtLWdyb3VwLnNlcnZpY2UnO1xyXG5pbXBvcnQge1ZhcmlhdGlvbkNhY2hlU2VydmljZX0gZnJvbSAnLi92YXJpYXRpb24tY2FjaGUuc2VydmljZSc7XHJcbmltcG9ydCB7UmVzaXplU2VydmljZX0gZnJvbSAnLi9yZXNpemUuc2VydmljZSc7XHJcbmltcG9ydCB7Vmlld01vZGVTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3NlcnZpY2Uvdmlldy1tb2RlLnNlcnZpY2UnO1xyXG5pbXBvcnQge01lc3NhZ2VUeXBlfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL2VudW0vbWVzc2FnZS10eXBlLmVudW0nO1xyXG5pbXBvcnQge1NjZW5lM0RVdGlsfSBmcm9tICcuLi91dGlscy9zY2VuZS0zZC51dGlscyc7XHJcbmltcG9ydCB7RXJyb3JNZXNzYWdlfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL21vZGVsL2Vycm9yLW1lc3NhZ2UnO1xyXG5pbXBvcnQge1ZpZXdNb2RlfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL2VudW0vdmlldy1tb2RlLmVudW0nO1xyXG5pbXBvcnQge1Jlc3VsdFR5cGV9IGZyb20gJy4uLy4uLy4uL2NvcmUzZC9lbnVtL3Jlc3VsdC10eXBlLmVudW0nO1xyXG5pbXBvcnQge2lzTmlsbH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS91dGlscy9mdW5jdGlvbi9pcy1uaWxsLmZ1bmN0aW9uJztcclxuaW1wb3J0IHtVdGlsc30gZnJvbSAnLi4vLi4vLi4vY29yZTNkL2NvcmUvdXRpbHMnO1xyXG5pbXBvcnQge01hdGVyaWFsVXRpbHN9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvdXRpbHMvbWF0ZXJpYWwudXRpbHMnO1xyXG5pbXBvcnQge0Zsb29yUGlufSBmcm9tICcuLi8uLi8uLi9jb3JlM2QvaXRlbXMvZmxvb3ItcGluJztcclxuaW1wb3J0IHtXYWxsUGlufSBmcm9tICcuLi8uLi8uLi9jb3JlM2QvaXRlbXMvd2FsbC1waW4nO1xyXG5pbXBvcnQge0Z1cm5pdHVyZVBhcnRJbnRlZ3JhdGlvbn0gZnJvbSAnLi4vbW9kZWwvZnVybml0dXJlLXBhcnQtaW50ZWdyYXRpb24nO1xyXG5pbXBvcnQge0N1c3RvbU1lc2gsIEN1c3RvbU9iamVjdDNEfSBmcm9tICcuLi8uLi8uLi9jb3JlM2QvaXRlbXMvY3VzdG9tLW9iamVjdHMnO1xyXG5pbXBvcnQge0Z1cm5pdHVyZVBhcnRWYXJpYXRpb259IGZyb20gJy4uL21vZGVsL2Z1cm5pdHVyZS1wYXJ0LXZhcmlhdGlvbic7XHJcbmltcG9ydCB7RnVybml0dXJlQ29ubmVjdGVkUGFydEludGVncmF0aW9ufSBmcm9tICcuLi9tb2RlbC9mdXJuaXR1cmUtY29ubmVjdGVkLXBhcnQtaW50ZWdyYXRpb24nO1xyXG5pbXBvcnQge0dvb2dsZVRhZ01hbmFnZXJFdmVudH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9lbnVtL2dvb2dsZS10YWctbWFuYWdlci1ldmVudC5lbnVtJztcclxuaW1wb3J0IHtDaGFuZ2VzSW50ZXJmYWNlfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL2ludGVyZmFjZS9jaGFuZ2VzLmludGVyZmFjZSc7XHJcbmltcG9ydCB7Q3VzdG9tV2FsbEZsb29ySXRlbX0gZnJvbSAnLi4vLi4vLi4vY29yZTNkL2l0ZW1zL2N1c3RvbS13YWxsLWZsb29yLWl0ZW0nO1xyXG5pbXBvcnQge09iamVjdFV0aWxzfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3V0aWxzL29iamVjdC51dGlscyc7XHJcbmltcG9ydCB7SW5mb0RpYWxvZ0NvbXBvbmVudH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL2luZm8tZGlhbG9nL2luZm8tZGlhbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7SW5mb0RpYWxvZ0RhdGF9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvaW50ZXJmYWNlL2luZm8tZGlhbG9nLWRhdGEuaW50ZXJmYWNlJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9yQ29ubmVjdG9yU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2hvbWVkZWNvcmF0b3ItY29ubmVjdG9yLnNlcnZpY2UnO1xyXG5pbXBvcnQge0hvbWVkZWNvcmF0b3JEaWN0aW9uYXJ5U2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2hvbWVkZWNvcmF0b3ItZGljdGlvbmFyeS5zZXJ2aWNlJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9yQXBwRXZlbnRTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3NlcnZpY2UvaG9tZWRlY29yYXRvci1hcHAtZXZlbnQuc2VydmljZSc7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvclNldHRpbmdzU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2hvbWVkZWNvcmF0b3Itc2V0dGluZ3Muc2VydmljZSc7XHJcbmltcG9ydCB7Rmxvb3JTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlM2Qvc2VydmljZS9mbG9vci5zZXJ2aWNlJztcclxuaW1wb3J0IHtGbG9vclBsYW5lSXRlbX0gZnJvbSAnLi4vLi4vLi4vY29yZTNkL2l0ZW1zL2Zsb29yLXBsYW5lLWl0ZW0nO1xyXG5cclxuY29uc3QgZGVmYXVsdFBvc2l0aW9uID0gbmV3IFZlY3RvcjMoNCwgMCwgMSk7XHJcbmNvbnN0IGRlZmF1bHRSb3RhdGlvbiA9IG5ldyBFdWxlcigwLCBNYXRoLlBJLCAwKTtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29uZmlndXJpbmdNb2RlQ2hhbmdlSW50ZXJmYWNlIHtcclxuICBtZXRhZGF0YTogTWV0YWRhdGE7XHJcbiAgY29uZmlndXJpbmc6IGJvb2xlYW47XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEJ1aWxkRnVybml0dXJlU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcbiAgLy8gcHVibGljIGdldCBkZWNvcygpOiBNYXA8c3RyaW5nLCBEZWNvTm9kZT4ge1xyXG4gIC8vICAgcmV0dXJuIHRoaXMuX2dldERlY29zRnJvbUluc3RhbmNlKCk7XHJcbiAgLy8gfVxyXG4gIHB1YmxpYyBiYXNlRWxlbWVudE5vZGVJZDogbnVtYmVyO1xyXG5cclxuICBwdWJsaWMgYXJ0aWNsZUFzc2V0UGF0aDogc3RyaW5nO1xyXG5cclxuICBwdWJsaWMgdG9nZ2xlU2VsZWN0ZWRFbGVtZW50OiBTdWJqZWN0PE1lc2g+ID0gbmV3IFN1YmplY3Q8TWVzaD4oKTtcclxuICBwdWJsaWMgY29uZmlndXJlTW9kZUNoYW5nZWQ6IFN1YmplY3Q8Q29uZmlndXJpbmdNb2RlQ2hhbmdlSW50ZXJmYWNlPiA9IG5ldyBTdWJqZWN0PHsgbWV0YWRhdGE6IHt9LCBjb25maWd1cmluZzogZmFsc2UgfT4oKTtcclxuICBwdWJsaWMgYnVpbGRGaW5pc2hlZDogU3ViamVjdDxDdXN0b21GbG9vckdyb3VwUmVzdWx0PiA9IG5ldyBTdWJqZWN0PEN1c3RvbUZsb29yR3JvdXBSZXN1bHQ+KCk7XHJcbiAgcHVibGljIGFuc3dlclNlbGVjdGVkOiBTdWJqZWN0PEN1c3RvbUZsb29yR3JvdXBSZXN1bHQ+ID0gbmV3IFN1YmplY3Q8Q3VzdG9tRmxvb3JHcm91cFJlc3VsdD4oKTtcclxuICBwdWJsaWMgYXJQbGFjZW1lbnRVcGRhdGU6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xyXG4gIHB1YmxpYyBzaG93RWxlbWVudFRvb2xiYXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcHVibGljIHN0YXJ0UG9zaXRpb246IFZlY3RvcjM7XHJcbiAgcHVibGljIGZ1bGwzRE9iamVjdFRvVXNlOiBPYmplY3QzRDtcclxuXHJcbiAgcHVibGljIGlzTW91c2VPdmVyT2JqZWN0OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8vIHVzZWQgZm9yIGVsZW1lbnRzLCB0byBwbGFjZSBvYmplY3RzIG9uXHJcbiAgcHVibGljIGFjdGl2ZUNvbm5lY3RvcjogYW55O1xyXG5cclxuICBwdWJsaWMgZ2V0IHVzZU5vZGVJZFRvTGluaygpIHtcclxuICAgIHJldHVybiB0aGlzLl91c2VOb2RlSWRUb0xpbms7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGN1cnJlbnRDdXN0b21GbG9vckdyb3VwKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFjdGl2ZVF1ZXN0aW9uOiBRdWVzdGlvbjtcclxuICBwdWJsaWMgYWN0aXZlQW5zd2VyczogQW5zd2VyW10gPSBbXTtcclxuXHJcbiAgcHVibGljIGdldCBzdGFuZEFsb25lKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3N0YW5kQWxvbmU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IHN0YW5kQWxvbmUodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX3N0YW5kQWxvbmUgPSB2YWx1ZTtcclxuICAgIGlmICh0aGlzLl9zdGFuZEFsb25lKSB7XHJcbiAgICAgIHRoaXMuX3ByZXBhcmVTdGFuZEFsb25lKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHNlbGVjdGlvbnMoKTogU2VsZWN0aW9uW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lPbmUuc2VsZWN0aW9ucztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGFuZEFsb25lRmlyc3RCdWlsZFJlYWR5OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHByaXZhdGUgZ2V0IHNjZW5lKCk6IFNjZW5lIHtcclxuICAgIHJldHVybiB0aGlzLl9zY2VuZVNlcnZpY2UuZ2V0U2NlbmUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3VzZU5vZGVJZFRvTGluazogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHJpdmF0ZSBfc3RhbmRBbG9uZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIF9hY3RpdmVDaGlsZEVsZW1lbnQ6IE1lc2g7XHJcblxyXG4gIHByaXZhdGUgX29yaWdpbmFsRWxlbWVudFBvc2l0aW9uOiBWZWN0b3IzID0gbmV3IFZlY3RvcjMoKTtcclxuICBwcml2YXRlIF9pbnRlZ3JhdGlvbkVuYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9wbGFjZWRBZGp1c3RhYmxlczogYW55W10gPSBbXTtcclxuICBwcml2YXRlIF9wbGFjZWRBZGRhYmxlczogYW55W10gPSBbXTtcclxuICBwcml2YXRlIF9hZGp1c3RhYmxlczogYW55W10gPSBbXTtcclxuICBwcml2YXRlIF9hZGRhYmxlczogYW55W10gPSBbXTtcclxuICBwcml2YXRlIF9jdXJyZW50Q3VzdG9tRmxvb3JHcm91cDogSXRlbTtcclxuICBwcml2YXRlIF9nZW5lcmljU2VsZWN0aW9uID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfc3ViczogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuICBwcml2YXRlIF9hbnN3ZXJTZWxlY3RlZDogQW5zd2VyW10gPSBbXTtcclxuICBwcml2YXRlIF9mdXJuaXR1cmVDb25maWd1cmF0aW9uczogRnVybml0dXJlSW50ZWdyYXRpb25bXSA9IFtdO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgX2RpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgcHJpdmF0ZSBfaU9uZTogSG9tZWRlY29yYXRvckNvbm5lY3RvclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF90aHJlZWRTZWxlY3RvclNlcnZpY2U6IFRocmVlZHNlbGVjdG9yU2VydmljZSxcclxuICAgIHByaXZhdGUgX2NvbGxpc2lvbk1hbmFnZXI6IENvbGxpc2lvbk1hbmFnZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfbWVzc2FnZUJ1czogTWVzc2FnZUJ1c1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9kaWN0aW9uYXJ5U2VydmljZTogSG9tZWRlY29yYXRvckRpY3Rpb25hcnlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfaHVkU2VydmljZTogSHVkU2VydmljZSxcclxuICAgIHByaXZhdGUgX3NjZW5lU2VydmljZTogU2NlbmVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfY2FtZXJhU2VydmljZTogQ2FtZXJhU2VydmljZSxcclxuICAgIHByaXZhdGUgX3NjZW5lRXZlbnRTZXJ2aWNlOiBTY2VuZUV2ZW50U2VydmljZSxcclxuICAgIHByaXZhdGUgX2FwcEV2ZW50U2VydmljZTogSG9tZWRlY29yYXRvckFwcEV2ZW50U2VydmljZSxcclxuICAgIHByaXZhdGUgX3ByZXNldFNlcnZpY2U6IFByZXNldHNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfaXRlbVNlcnZpY2U6IEl0ZW1TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZWxlbWVudFNlcnZpY2U6IEVsZW1lbnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfcGVybWFuZW50U3RvcmVTZXJ2aWNlOiBQZXJtYW5lbnRTdG9yZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9nb29nbGVUYWdNYW5hZ2VyOiBHb29nbGVUYWdNYW5hZ2VyU2VydmljZSxcclxuICAgIHByaXZhdGUgX3NldHRpbmdzU2VydmljZTogSG9tZWRlY29yYXRvclNldHRpbmdzU2VydmljZSxcclxuICAgIHByaXZhdGUgX3V0aWxzU2VydmljZTogVXRpbHNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfdmFyaWF0aW9uU2VydmljZTogVmFyaWF0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgX2FwcFN0YXRlU2VydmljZTogQXBwU3RhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZXJyb3JTZXJ2aWNlOiBFcnJvclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9pdGVtR3JvdXBTZXJ2aWNlOiBJdGVtR3JvdXBTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfdmFyaWF0aW9uQ2FjaGVTZXJ2aWNlOiBWYXJpYXRpb25DYWNoZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9yZXNpemVTZXJ2aWNlOiBSZXNpemVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfdmlld01vZGVTZXJ2aWNlOiBWaWV3TW9kZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9mbG9vclNlcnZpY2U6IEZsb29yU2VydmljZVxyXG4gICkge1xyXG4gICAgdGhpcy5fc3Vicy5wdXNoKFxyXG4gICAgICB0aGlzLl9pT25lLmNvbm5lY3Rpb25SZXNldC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5faGFuZGxlQ29ubmVjdGlvblJlc2V0KCkpLFxyXG4gICAgICB0aGlzLl9tZXNzYWdlQnVzLnN1YnNjcmliZShNZXNzYWdlVHlwZS5JdGVtUmVtb3ZlZCwgKHJlc3VsdDogeyBpdGVtOiBhbnksIGFkZGVkVG9Hcm91cDogYm9vbGVhbiB9KSA9PlxyXG4gICAgICAgIHRoaXMuX2hhbmRsZUl0ZW1SZW1vdmVkRnJvbVNjZW5lKHJlc3VsdCkpLFxyXG4gICAgICB0aGlzLl9tZXNzYWdlQnVzLnN1YnNjcmliZShNZXNzYWdlVHlwZS5VbmRvLCAoKSA9PiB0aGlzLl9zdGFydFdpdGhOZXcoZmFsc2UpKSxcclxuICAgICAgdGhpcy5fbWVzc2FnZUJ1cy5zdWJzY3JpYmUoTWVzc2FnZVR5cGUuUmVkbywgKCkgPT4gdGhpcy5fc3RhcnRXaXRoTmV3KGZhbHNlKSksXHJcbiAgICAgIHRoaXMuX21lc3NhZ2VCdXMuc3Vic2NyaWJlKE1lc3NhZ2VUeXBlLlN0YXJ0V2l0aEVtcHR5Um9vbSwgKCkgPT4gdGhpcy5fc3RhcnRXaXRoTmV3KCkpLFxyXG4gICAgICB0aGlzLl9tZXNzYWdlQnVzLnN1YnNjcmliZShNZXNzYWdlVHlwZS5TdGFydFdpdGhQcmVzZXQsICgpID0+IHRoaXMuX3N0YXJ0V2l0aE5ldygpKSxcclxuICAgICAgdGhpcy5fbWVzc2FnZUJ1cy5zdWJzY3JpYmUoTWVzc2FnZVR5cGUuTG9hZFJvb21Gcm9tUHJlc2V0LCAoKSA9PiB0aGlzLl9zdGFydFdpdGhOZXcoKSksXHJcbiAgICAgIHRoaXMuX21lc3NhZ2VCdXMuc3Vic2NyaWJlKE1lc3NhZ2VUeXBlLkxvYWRSb29tRnJvbUNsb3VkLCAoKSA9PiB0aGlzLl9zdGFydFdpdGhOZXcoKSksXHJcbiAgICAgIHRoaXMuX21lc3NhZ2VCdXMuc3Vic2NyaWJlKE1lc3NhZ2VUeXBlLk5ld1Jvb20sICgpID0+IHRoaXMuX3N0YXJ0V2l0aE5ldygpKSxcclxuICAgICAgdGhpcy5fbWVzc2FnZUJ1cy5zdWJzY3JpYmUoTWVzc2FnZVR5cGUuUmVzZXRSb29tcGxhbiwgKCkgPT4gdGhpcy5fc3RhcnRXaXRoTmV3KCkpLFxyXG4gICAgICB0aGlzLl9tZXNzYWdlQnVzLnN1YnNjcmliZShNZXNzYWdlVHlwZS5Mb2FkU2NhbGVkRGlhZ3JhbSwgKCkgPT4gdGhpcy5fc3RhcnRXaXRoTmV3KCkpLFxyXG4gICAgICB0aGlzLl9hcHBFdmVudFNlcnZpY2UuZW5hYmxlSW50ZWdyYXRpb24uc3Vic2NyaWJlKChlbmFibGVkOiBib29sZWFuKSA9PiB7XHJcbiAgICAgICAgaWYgKGVuYWJsZWQpIHtcclxuICAgICAgICAgIHRoaXMuX2VuYWJsZUludGVncmF0aW9uKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICAgdGhpcy5fcHJlc2V0U2VydmljZS5iZWZvcmVMb2FkLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5fY2xlYW51cEJlZm9yZVByZXNldExvYWQoKTtcclxuICAgICAgICB0aGlzLl9zdGFydFdpdGhOZXcoKTtcclxuICAgICAgfSksXHJcbiAgICAgIHRoaXMuX3ByZXNldFNlcnZpY2UuYWZ0ZXJMb2FkLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9oYW5kbGVBZnRlclByZXNldExvYWQoKSksXHJcbiAgICAgIHRoaXMuX3Blcm1hbmVudFN0b3JlU2VydmljZS5jb2RlU2V0LnN1YnNjcmliZSgoY29kZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgaWYgKGNvZGUpIHtcclxuICAgICAgICAgIHRoaXMuX3NldENvZGVPbkZ1cm5pdHVyZUNvbmZpZ3VyYXRpb24oKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zdWJzLmZvckVhY2gocyA9PiBzLnVuc3Vic2NyaWJlKCkpO1xyXG4gICAgdGhpcy5fY2xlYW51cCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGJ1aWxkKHJlc3VsdDogQ3VzdG9tRmxvb3JHcm91cFJlc3VsdCk6IFByb21pc2U8Q3VzdG9tRmxvb3JHcm91cFJlc3VsdD4ge1xyXG4gICAgdGhpcy5fZWxlbWVudFNlcnZpY2UucmVtb3ZlRWxlbWVudChyZXN1bHQuaW5zdGFuY2VJZCk7XHJcbiAgICBpZiAocmVzdWx0ICYmIHJlc3VsdC5tZXRhRGF0YSAmJiByZXN1bHQubWV0YURhdGEuaXRlbVR5cGUgPT09IEl0ZW1UeXBlLkZsb29yRGVjb3JhdGlvbikge1xyXG4gICAgICByZXR1cm4gdGhpcy5fYnVpbGRGbG9vcihyZXN1bHQpO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmZ1bGwzRE9iamVjdFRvVXNlKSB7IC8vIHRoZXJlJ3Mgbm8gM2QgbW9kZWwgc28gZ2V0IG91dFxyXG4gICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgY29uc3QgYWRqdXN0YWJsZXM6IFNlbGVjdGlvbltdID0gdGhpcy5fZ2V0QWRqdXN0YWJsZXMoKTtcclxuICAgIGlmIChhZGp1c3RhYmxlcyAmJiBhZGp1c3RhYmxlcy5sZW5ndGggPT09IDApIHsgLy8gY2hlY2sgaWYgYXJ0aWNsZSBoYXMgYSBnYW1lT2JqZWN0XHJcbiAgICAgIGlmICh0aGlzLnNlbGVjdGlvbnNbMF0ubm9kZVR5cGUgPT09IE5vZGVUeXBlLkFydGljbGUgJiYgdGhpcy5zZWxlY3Rpb25zWzBdLmdhbWVPYmplY3QpIHtcclxuICAgICAgICBhZGp1c3RhYmxlcy5wdXNoKHRoaXMuc2VsZWN0aW9uc1swXSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwID0gdGhpcy5fY3JlYXRlQ29uZmlndXJhYmxlSXRlbShyZXN1bHQuaW5zdGFuY2VJZCwgcmVzdWx0Lm1ldGFEYXRhKTtcclxuICAgIGNvbnN0IGl0ZW06IEl0ZW0gPSB0aGlzLl9jcmVhdGVDb25maWd1cmFibGVJdGVtKHJlc3VsdC5pbnN0YW5jZUlkLCByZXN1bHQubWV0YURhdGEpO1xyXG4gICAgaWYgKGFkanVzdGFibGVzICYmIGFkanVzdGFibGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgbGV0IGNvbm5lY3RlZCA9IGZhbHNlO1xyXG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuOiBudW1iZXIgPSBhZGp1c3RhYmxlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGFkanVzdGFibGU6IE9iamVjdDNEID0gdGhpcy5fY3JlYXRlQWRqdXN0YWJsZShpdGVtLCBhZGp1c3RhYmxlc1tpXSk7XHJcbiAgICAgICAgaWYgKGFkanVzdGFibGUpIHtcclxuICAgICAgICAgIGZvciAobGV0IGlpID0gdGhpcy5fcGxhY2VkQWRqdXN0YWJsZXMubGVuZ3RoIC0gMTsgaWkgPj0gMDsgaWktLSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5faXNNb3ZlYWJsZU9iamVjdChhZGp1c3RhYmxlKSkgeyAvLyB2cmlqZSB2ZXJwbGFhdHNpbmcgbW9nZWxpamssIGNvbm5lY3RlbiBhYW4gb3BnZXNsYWdlbiBjb25uZWN0b3JcclxuICAgICAgICAgICAgICBjb25zdCBzZWxlY3Rpb246IFNlbGVjdGlvbiA9IGFkanVzdGFibGUudXNlckRhdGEuc2VsZWN0aW9uO1xyXG4gICAgICAgICAgICAgIHRoaXMuX2FkZEVsZW1lbnRPbkNvbm5lY3RvcihcclxuICAgICAgICAgICAgICAgIGl0ZW0sIGFkanVzdGFibGUsIHNlbGVjdGlvbi5kZWNvQ29ubmVjdGlvbiA/IHNlbGVjdGlvbi5kZWNvQ29ubmVjdGlvbiA6IHRoaXMuYWN0aXZlQ29ubmVjdG9yLCB0aGlzLmJhc2VFbGVtZW50Tm9kZUlkKTtcclxuICAgICAgICAgICAgICBhZGp1c3RhYmxlLnZpc2libGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIGNvbm5lY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgaWYgKFNjZW5lM0RVdGlsLlRyeVNlbGVjdG9yQ29ubmVjdGlvbih0aGlzLnNjZW5lLFxyXG4gICAgICAgICAgICAgICAgaXRlbSwgdGhpcy5fcGxhY2VkQWRqdXN0YWJsZXNbaWldLCBhZGp1c3RhYmxlLCBpID09PSAxKSkge1xyXG4gICAgICAgICAgICAgICAgYWRqdXN0YWJsZS52aXNpYmxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGNvbm5lY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29ubmVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghY29ubmVjdGVkICYmIHRoaXMuX3BsYWNlZEFkanVzdGFibGVzLmxlbmd0aCA+IDEgJiYgIWVudmlyb25tZW50LnByb2R1Y3Rpb24pIHtcclxuICAgICAgICAgIHJlc3VsdC5lcnJvck1lc3NhZ2VzLnB1c2gobmV3IEVycm9yTWVzc2FnZShcclxuICAgICAgICAgICAgYE5vIGNvbm5lY3Rpb24gZm91bmQgZm9yOiAke2FkanVzdGFibGUgPyBhZGp1c3RhYmxlLm5hbWUgOiBhZGp1c3RhYmxlc1tpXS5kZWNvTm9kZS5nYW1lT2JqZWN0TmFtZX1gKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuX3BsYWNlQWRkYWJsZXMoaXRlbSk7XHJcbiAgICAgIGF3YWl0IHRoaXMuX2xvYWRWYXJpYXRpb25zKGl0ZW0sIHJlc3VsdC5tZXRhRGF0YS5pdGVtSWQpO1xyXG4gICAgICB0aGlzLl9jdXJyZW50Q3VzdG9tRmxvb3JHcm91cCA9IGF3YWl0IHRoaXMuX3JlcGxhY2VDdXJyZW50SXRlbShpdGVtLCByZXN1bHQubWV0YURhdGEsIHRydWUpO1xyXG4gICAgICBpZiAodGhpcy5fdmlld01vZGVTZXJ2aWNlLnZpZXdNb2RlICE9PSBWaWV3TW9kZS5JblBob3RvVmlldykge1xyXG4gICAgICAgIHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwLnVwZGF0ZVBpdm90KCk7XHJcbiAgICAgIH1cclxuICAgICAgcmVzdWx0LmZ1cm5pdHVyZSA9IHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwO1xyXG4gICAgICByZXN1bHQuaW5zdGFuY2VJZCA9IHJlc3VsdC5tZXRhRGF0YS5pdGVtSWQ7XHJcbiAgICAgIHRoaXMuYXJQbGFjZW1lbnRVcGRhdGUubmV4dCh0cnVlKTtcclxuICAgICAgdGhpcy5faGFuZGxlSW50ZWdyYXRpb24ocmVzdWx0Lm1ldGFEYXRhLml0ZW1JZCwgdGhpcy5fY3VycmVudEN1c3RvbUZsb29yR3JvdXApO1xyXG5cclxuICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwLml0ZW1Hcm91cCkge1xyXG4gICAgICAgIHRoaXMuX2l0ZW1Hcm91cFNlcnZpY2UucmVhdHRhY2hUb0l0ZW1Hcm91cChcclxuICAgICAgICAgIHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwLFxyXG4gICAgICAgICAgdGhpcy5fY3VycmVudEN1c3RvbUZsb29yR3JvdXAuaXRlbUdyb3VwLFxyXG4gICAgICAgICAgdGhpcy5fY3VycmVudEN1c3RvbUZsb29yR3JvdXAucG9zaXRpb24pO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuX2Fuc3dlclNlbGVjdGVkLmxlbmd0aCA9IDA7XHJcblxyXG4gICAgICBpZiAodGhpcy5fY3VycmVudEN1c3RvbUZsb29yR3JvdXAuY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgcmVzdWx0LnJlc3VsdFR5cGUgPSBSZXN1bHRUeXBlLkdhbWVvYmplY3ROYW1lTWlzbWF0Y2hJblNvdXJjZTtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVzdWx0KTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9odWRTZXJ2aWNlLnVwZGF0ZVNlbGVjdGVkSXRlbUh1ZCgpO1xyXG4gICAgICB0aGlzLmJ1aWxkRmluaXNoZWQubmV4dChyZXN1bHQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmVzdWx0LmVycm9yTWVzc2FnZXMucHVzaChuZXcgRXJyb3JNZXNzYWdlKCdOT19BREpVU1RBQkxFUycsICdOT19BREpVU1RBQkxFU19JTkZPJykpO1xyXG4gICAgICByZXN1bHQucmVzdWx0VHlwZSA9IFJlc3VsdFR5cGUuTm9BZGp1c3RhYmxlcztcclxuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlc3VsdCk7XHJcbiAgICB9XHJcbiAgICBpZiAocmVzdWx0LnJlc3VsdFR5cGUgPT09IFJlc3VsdFR5cGUuTm9TZWxlY3Rpb25zKSB7XHJcbiAgICAgIHJlc3VsdC5yZXN1bHRUeXBlID0gUmVzdWx0VHlwZS5Db25maWd1cmF0aW9uRml4ZWQ7XHJcbiAgICB9IGVsc2UgaWYgKHJlc3VsdC5yZXN1bHRUeXBlICE9PSBSZXN1bHRUeXBlLk9ic29sZXRlICYmIHJlc3VsdC5yZXN1bHRUeXBlICE9PSBSZXN1bHRUeXBlLkNvbmZpZ3VyYXRpb25GaXhlZCkgeyAvLyBkb24ndCBvdmVycmlkZSB0aGVzZVxyXG4gICAgICByZXN1bHQucmVzdWx0VHlwZSA9IFJlc3VsdFR5cGUuTG9hZGVkO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fYXBwRXZlbnRTZXJ2aWNlLnJlYWR5VG9SZW5kZXIubmV4dCh0aGlzLnN0YW5kQWxvbmVGaXJzdEJ1aWxkUmVhZHkpO1xyXG4gICAgdGhpcy5fc2NlbmVTZXJ2aWNlLnVwZGF0ZVBhdGhUcmFjZXIoKTtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgc3RhcnRUb0J1aWxkKFxyXG4gICAgcmVzdWx0PzogQ3VzdG9tRmxvb3JHcm91cFJlc3VsdCxcclxuICAgIG1ldGFkYXRhPzogTWV0YWRhdGEsXHJcbiAgICBzaG91bGRDb3B5SW5zdGFuY2U6IGJvb2xlYW4gPSBmYWxzZSxcclxuICAgIGxvb3NlT3JpZ2luYWxDb25maWd1cmF0aW9uOiBib29sZWFuID0gdHJ1ZSxcclxuICAgIHN0YW5kQWxvbmU/OiBib29sZWFuLFxyXG4gICAgZmlyc3RCdWlsZDogYm9vbGVhbiA9IGZhbHNlXHJcbiAgKTogUHJvbWlzZTxDdXN0b21GbG9vckdyb3VwUmVzdWx0PiB7XHJcbiAgICBpZiAoIWlzTmlsbChzdGFuZEFsb25lKSkge1xyXG4gICAgICB0aGlzLnN0YW5kQWxvbmUgPSBzdGFuZEFsb25lO1xyXG4gICAgfVxyXG4gICAgaWYgKGlzTmlsbChyZXN1bHQpKSB7XHJcbiAgICAgIHJlc3VsdCA9IG5ldyBDdXN0b21GbG9vckdyb3VwUmVzdWx0KFxyXG4gICAgICAgIG1ldGFkYXRhID8gbWV0YWRhdGEuaXRlbUlkZW50aWZpZXIgOiAnJyxcclxuICAgICAgICBtZXRhZGF0YSA/IG1ldGFkYXRhLml0ZW1OYW1lIDogJ3Vua25vd24nKTtcclxuICAgICAgcmVzdWx0Lm1ldGFEYXRhID0gbWV0YWRhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHNob3VsZENvcHlJbnN0YW5jZSkge1xyXG4gICAgICBjb25zdCBvcmlnaW5hbEluc3RhbmNlSWQ6IHN0cmluZyA9IHJlc3VsdC5tZXRhRGF0YS5pdGVtSWQ7XHJcbiAgICAgIGlmIChsb29zZU9yaWdpbmFsQ29uZmlndXJhdGlvbikge1xyXG4gICAgICAgIHJlc3VsdC5tZXRhRGF0YS5pdGVtSWQgPSBhd2FpdCB0aGlzLl9pT25lLmNvcHlJbnN0YW5jZUFuZExvc2VPcmlnaW5hbENvbmZpZ3VyYXRpb24ob3JpZ2luYWxJbnN0YW5jZUlkLCByZXN1bHQpXHJcbiAgICAgICAgICAuY2F0Y2goKGUpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsSW5zdGFuY2VJZDtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJlc3VsdC5tZXRhRGF0YS5pdGVtSWQgPSBhd2FpdCB0aGlzLl9pT25lLmNvcHlJbnN0YW5jZUFuZFNhdmVPcmlnaW5hbENvbmZpZ3VyYXRpb24ob3JpZ2luYWxJbnN0YW5jZUlkLCByZXN1bHQpXHJcbiAgICAgICAgICAuY2F0Y2goKGUpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsSW5zdGFuY2VJZDtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHJlc3VsdC5yZXN1bHRUeXBlICE9PSBSZXN1bHRUeXBlLkFydGljbGVOb3RGb3VuZCkge1xyXG4gICAgICBhd2FpdCB0aGlzLl9zZXRJbnN0YW5jZVRvQ29uZmlndXJlKHJlc3VsdClcclxuICAgICAgICAuY2F0Y2goKGUpID0+IFByb21pc2UucmVqZWN0KHJlc3VsdCkpO1xyXG4gICAgfVxyXG4gICAgcmVzdWx0Lmluc3RhbmNlSWQgPSByZXN1bHQubWV0YURhdGEuaXRlbUlkO1xyXG4gICAgdGhpcy5zdGFydFBvc2l0aW9uID0gcmVzdWx0Lm1ldGFEYXRhLnBvc2l0aW9uID8gcmVzdWx0Lm1ldGFEYXRhLnBvc2l0aW9uLmNsb25lKCkgOiBuZXcgVmVjdG9yMygpO1xyXG5cclxuICAgIGNvbnN0IHF1ZXN0aW9uQW5kQW5zd2VyczogUXVlc3Rpb25BbmRBbnN3ZXJzID0gYXdhaXQgdGhpcy5faU9uZS5nZXRRdWVzdGlvbkFuZEFuc3dlcnNBc3luYygpOyAvLyBzZWUgaWYgdGhlcmUgaXMgdXNlciBpbnB1dCBuZWVkZWRcclxuICAgIGlmIChxdWVzdGlvbkFuZEFuc3dlcnMucXVlc3Rpb24gJiYgIXF1ZXN0aW9uQW5kQW5zd2Vycy5xdWVzdGlvbi5ncm91cGVkKSB7XHJcbiAgICAgIHRoaXMuX2lPbmUuaGFuZGxlQW5zd2Vyc1JlY2VpdmVkKHF1ZXN0aW9uQW5kQW5zd2Vycy5hbnN3ZXJzKTtcclxuICAgIH1cclxuICAgIHRoaXMuX2FwcEV2ZW50U2VydmljZS5hbnN3ZXJDb3VudFJlY2VpdmVkLm5leHQocXVlc3Rpb25BbmRBbnN3ZXJzLmFuc3dlcnMubGVuZ3RoKTtcclxuICAgIGlmIChxdWVzdGlvbkFuZEFuc3dlcnMuYW5zd2Vycy5sZW5ndGggPT09IDApIHtcclxuICAgICAgdGhpcy5hY3RpdmVBbnN3ZXJzID0gW107XHJcbiAgICAgIHRoaXMuYWN0aXZlUXVlc3Rpb24gPSB1bmRlZmluZWQ7XHJcbiAgICAgIGF3YWl0IHRoaXMuX3ByZXBhcmVTZWxlY3Rpb25zQW5kRGVjb3MocmVzdWx0KVxyXG4gICAgICAgIC5jYXRjaCgoZSkgPT4gUHJvbWlzZS5yZWplY3QoZSkpO1xyXG4gICAgICByZXR1cm4gdGhpcy5idWlsZChyZXN1bHQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5hY3RpdmVRdWVzdGlvbiA9IHF1ZXN0aW9uQW5kQW5zd2Vycy5xdWVzdGlvbjtcclxuICAgICAgdGhpcy5hY3RpdmVBbnN3ZXJzID0gcXVlc3Rpb25BbmRBbnN3ZXJzLmFuc3dlcnM7XHJcbiAgICAgIGlmIChmaXJzdEJ1aWxkKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5fcHJlcGFyZVNlbGVjdGlvbnNBbmREZWNvcyhyZXN1bHQpXHJcbiAgICAgICAgICAuY2F0Y2goKGUpID0+IFByb21pc2UucmVqZWN0KGUpKTtcclxuICAgICAgICBpZiAodGhpcy5faU9uZS5zZWxlY3Rpb25zLmxlbmd0aCA8IDEpIHtcclxuICAgICAgICAgIHJlc3VsdC5yZXN1bHRUeXBlID0gUmVzdWx0VHlwZS5OZWVkc1VzZXJJbnB1dDtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2lPbmUuc2VsZWN0aW9ucy5sZW5ndGggPCAyKSB7XHJcbiAgICAgICAgICByZXN1bHQucmVzdWx0VHlwZSA9IFJlc3VsdFR5cGUuQnVpbGRGcm9tU2NyYXRjaDtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2lPbmUuc2VsZWN0aW9ucy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICByZXN1bHQucmVzdWx0VHlwZSA9IFJlc3VsdFR5cGUuTmVlZHNVc2VySW5wdXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRPcHRpb25zRnJvbVNlbGVjdGlvbihiYXNlU2VsZWN0aW9uOiBTZWxlY3Rpb24pOiBTZWxlY3Rpb25bXSB7XHJcbiAgICBjb25zdCBzZWxlY3Rpb25zOiBTZWxlY3Rpb25bXSA9IFtdO1xyXG4gICAgbGV0IG5vZGVMZXZlbCA9IC0xO1xyXG4gICAgY29uc3QgbGVuOiBudW1iZXIgPSB0aGlzLnNlbGVjdGlvbnMubGVuZ3RoO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICBjb25zdCBzZWxlY3Rpb246IFNlbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uc1tpXTtcclxuICAgICAgY29uc3QgbGV2ZWw6IG51bWJlciA9IHNlbGVjdGlvbi5wcmVzZW50YXRpb25MZXZlbDtcclxuICAgICAgaWYgKG5vZGVMZXZlbCAhPT0gLTEpIHtcclxuICAgICAgICBpZiAobm9kZUxldmVsIDwgbGV2ZWwgJiYgdGhpcy5fY2FuQ29ubmVjdFNlbGVjdGlvbnMoYmFzZVNlbGVjdGlvbiwgc2VsZWN0aW9uKSAmJiB0aGlzLl9zZWxlY3Rpb25QdWJsaXNoZWQoc2VsZWN0aW9uKSkge1xyXG4gICAgICAgICAgc2VsZWN0aW9ucy5wdXNoKHNlbGVjdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChub2RlTGV2ZWwgPj0gbGV2ZWwpIHtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoc2VsZWN0aW9uLmlkID09PSBiYXNlU2VsZWN0aW9uLmlkICYmIHNlbGVjdGlvbi5ub2RlID09PSBiYXNlU2VsZWN0aW9uLm5vZGUpIHtcclxuICAgICAgICBub2RlTGV2ZWwgPSBsZXZlbDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHNlbGVjdGlvbnM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZG93bmxvYWRDdXJyZW50Q3VzdG9tRmxvb3Jncm91cCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IG9iamVjdFRvRXhwb3J0OiBPYmplY3QzRCA9IHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwID8gdGhpcy5fY3VycmVudEN1c3RvbUZsb29yR3JvdXAgOiB0aGlzLl9pdGVtU2VydmljZS5pdGVtc1swXTtcclxuICAgIHRoaXMuX3V0aWxzU2VydmljZS5zaG93RXhwb3J0RGlhbG9nKG9iamVjdFRvRXhwb3J0KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBkb3dubG9hZFNjZW5lKCk6IHZvaWQge1xyXG4gICAgY29uc3QgYXNzZXRQYXRoOiBzdHJpbmcgPSB0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MuYXNzZXRQYXRoO1xyXG4gICAgLy8gVGhlIGdyb3VuZCBwbGFuZSBsb29rcyBvZGQgaW4gcmVuZGVycy5cclxuICAgIC8vIFRoZSBodWQtcmluZyBhbmQgaHVkLWNpcmNsZSBhcmUgdGhlIHdhbGt0aHJvdWdoIG1vZGUgbWFya2VyLFxyXG4gICAgLy8gd2hpY2ggaXMgbm90IHN1cHBvc2VkIHRvIGJlIHJlbmRlcmVkLlxyXG4gICAgY29uc3QgZWxlbWVudHNUb1JlbW92ZSA9IFsnZ3JvdW5kLXBsYW5lJywgJ2h1ZC1yaW5nJywgJ2h1ZC1jaXJjbGUnXTtcclxuXHJcbiAgICBsZXQgc2NlbmU6IFNjZW5lO1xyXG4gICAgc2NlbmUgPSB0aGlzLl9zY2VuZVNlcnZpY2Uuc2NlbmUuY2xvbmUoKTtcclxuXHJcbiAgICBlbGVtZW50c1RvUmVtb3ZlLmZvckVhY2goZWxlbWVudE5hbWUgPT4ge1xyXG4gICAgICBjb25zdCBzZWxlY3RlZE9iamVjdDogT2JqZWN0M0QgPSBzY2VuZS5nZXRPYmplY3RCeU5hbWUoZWxlbWVudE5hbWUpO1xyXG4gICAgICBzY2VuZS5yZW1vdmUoc2VsZWN0ZWRPYmplY3QpO1xyXG4gICAgfSk7XHJcbiAgICBzY2VuZS5hZGQodGhpcy5fY2FtZXJhU2VydmljZS5jYW1lcmEuY2xvbmUoKSk7XHJcblxyXG4gICAgdGhpcy5fdXRpbHNTZXJ2aWNlLnNob3dFeHBvcnREaWFsb2coc2NlbmUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNyZWF0ZVNpbXBsZTNETW9kZWwocmVzdWx0OiBDdXN0b21GbG9vckdyb3VwUmVzdWx0LCBzdGFuZEFsb25lPzogYm9vbGVhbik6IEN1c3RvbUZsb29yR3JvdXBSZXN1bHQge1xyXG4gICAgaWYgKCFpc05pbGwoc3RhbmRBbG9uZSkpIHtcclxuICAgICAgdGhpcy5zdGFuZEFsb25lID0gc3RhbmRBbG9uZTtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5mdWxsM0RPYmplY3RUb1VzZSkgeyAvLyB0aGVyZSdzIG5vIDNkIG1vZGVsIHNvIGdldCBvdXRcclxuICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIC8vIHRoZXJlIGFyZSBubyBzZWxlY3Rpb25zIG9yIGRlY29zIGZvciBzaW1wbGUgYXJ0aWNsZXMsIHNvIGVtcHR5IGxpc3RzIGZvciBpbnRlZ3JhdGlvbiBwdXJwb3Nlc1xyXG4gICAgdGhpcy5faU9uZS5lbXB0eVNlbGVjdGlvbnMoKTtcclxuICAgIHRoaXMuZnVsbDNET2JqZWN0VG9Vc2UuY2hpbGRyZW4uZm9yRWFjaChjID0+IGMudmlzaWJsZSA9IHRydWUpO1xyXG4gICAgaWYgKCFyZXN1bHQubWV0YURhdGEucG9zaXRpb24pIHtcclxuICAgICAgcmVzdWx0Lm1ldGFEYXRhLnBvc2l0aW9uID0gdGhpcy5zdGFydFBvc2l0aW9uIHx8IGRlZmF1bHRQb3NpdGlvbjtcclxuICAgIH1cclxuICAgIGlmICghcmVzdWx0Lm1ldGFEYXRhLnJvdGF0aW9uKSB7XHJcbiAgICAgIHJlc3VsdC5tZXRhRGF0YS5yb3RhdGlvbiA9IHJlc3VsdC5tZXRhRGF0YS5kZWZhdWx0MTgwID8gZGVmYXVsdFJvdGF0aW9uIDogbmV3IEV1bGVyKCk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBpdGVtQ29uc3RydWN0b3IgPSBGYWN0b3J5LmdldENsYXNzKHRoaXMuc3RhbmRBbG9uZSA/IEl0ZW1UeXBlLkZsb29yR3JvdXAgOiByZXN1bHQubWV0YURhdGEuaXRlbVR5cGUpO1xyXG4gICAgY29uc3QgaXRlbSA9IG5ldyBpdGVtQ29uc3RydWN0b3IoXHJcbiAgICAgIHJlc3VsdC5tZXRhRGF0YSxcclxuICAgICAgdGhpcy5mdWxsM0RPYmplY3RUb1VzZVxyXG4gICAgKTtcclxuICAgIHJlc3VsdC5tZXRhRGF0YS5vYmplY3RVVUlEID0gaXRlbS51dWlkO1xyXG4gICAgaXRlbS5hbGxvd1JvdGF0ZSA9ICF0aGlzLnN0YW5kQWxvbmU7XHJcbiAgICBpdGVtLmhpZ2hMaWdodERpc2FibGVkID0gIXRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5vcHRpb25zLnVzZVN0YW5kYWxvbmVIaWdoTGlnaHQ7XHJcblxyXG4gICAgdGhpcy5faXRlbVNlcnZpY2UuYWRkSXRlbShpdGVtKTtcclxuICAgIGlmIChpdGVtLml0ZW1Hcm91cCkge1xyXG4gICAgICB0aGlzLl9pdGVtR3JvdXBTZXJ2aWNlLnJlYXR0YWNoVG9JdGVtR3JvdXAoaXRlbSwgaXRlbS5pdGVtR3JvdXAsIGl0ZW0ucG9zaXRpb24pO1xyXG4gICAgfVxyXG4gICAgLy8gRm9yIHNpbXBsZSBhcnRpY2xlcyB3ZSB1c2Ugb2JqZWN0IHV1aWQsIGJlY2F1c2UgdGhleSBkb24ndCBoYXZlIGFuIGluc3RhbmNlSWRcclxuICAgIHRoaXMuX3Vwc2VydEZ1cm5pdHVyZShpdGVtLnV1aWQsIHtCcmFuZElkZW50aWZpZXI6IHJlc3VsdC5tZXRhRGF0YS5pdGVtSWRlbnRpZmllcn0sIGl0ZW0pO1xyXG4gICAgdGhpcy5faGFuZGxlSW50ZWdyYXRpb24oaXRlbS51dWlkLCBpdGVtKTtcclxuXHJcbiAgICByZXN1bHQuZnVybml0dXJlID0gaXRlbTtcclxuICAgIHRoaXMuX3NjZW5lU2VydmljZS51cGRhdGVQYXRoVHJhY2VyKCk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfYnVpbGRGbG9vcihyZXN1bHQ6IEN1c3RvbUZsb29yR3JvdXBSZXN1bHQpOiBQcm9taXNlPEN1c3RvbUZsb29yR3JvdXBSZXN1bHQ+IHtcclxuICAgIGNvbnN0IGl0ZW06IEZsb29yUGxhbmVJdGVtID0gdGhpcy5fZmxvb3JTZXJ2aWNlLmZsb29yVG9Db25maWd1cmU7XHJcbiAgICBpdGVtLm1ldGFkYXRhID0gcmVzdWx0Lm1ldGFEYXRhO1xyXG4gICAgaXRlbS5jaGlsZHJlblswXS51c2VyRGF0YS5zZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGlvbnNbMF07XHJcbiAgICBpdGVtLmNvbmZpZ3VyaW5nQ2hhbmdlSGFuZGxlciA9IHRoaXMuY2hhbmdlQ29uZmlndXJlTW9kZTtcclxuICAgIGl0ZW0uc2VsZWN0ZWRIYW5kbGVyID0gdGhpcy5zZWxlY3RJdGVtO1xyXG4gICAgaXRlbS51bnNlbGVjdGVkSGFuZGxlciA9IHRoaXMudW5TZWxlY3RJdGVtO1xyXG4gICAgYXdhaXQgdGhpcy5fbG9hZFZhcmlhdGlvbnMoaXRlbSwgcmVzdWx0Lm1ldGFEYXRhLml0ZW1JZCk7XHJcbiAgICB0aGlzLl9mbG9vclNlcnZpY2UudW5IaWdoTGlnaHRGbG9vcnMoKTtcclxuICAgIHRoaXMuX3NjZW5lU2VydmljZS5uZWVkc1JlbmRlciA9IHRydWU7XHJcbiAgICB0aGlzLl9jdXJyZW50Q3VzdG9tRmxvb3JHcm91cCA9IGl0ZW07XHJcbiAgICByZXN1bHQuZnVybml0dXJlID0gdGhpcy5fY3VycmVudEN1c3RvbUZsb29yR3JvdXA7XHJcbiAgICByZXN1bHQuaW5zdGFuY2VJZCA9IHJlc3VsdC5tZXRhRGF0YS5pdGVtSWQ7XHJcbiAgICB0aGlzLl9oYW5kbGVJbnRlZ3JhdGlvbihyZXN1bHQubWV0YURhdGEuaXRlbUlkLCB0aGlzLl9jdXJyZW50Q3VzdG9tRmxvb3JHcm91cCk7XHJcbiAgICBpZiAodGhpcy5fY3VycmVudEN1c3RvbUZsb29yR3JvdXAuaXRlbUdyb3VwKSB7XHJcbiAgICAgIHRoaXMuX2l0ZW1Hcm91cFNlcnZpY2UucmVhdHRhY2hUb0l0ZW1Hcm91cChcclxuICAgICAgICAgIHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwLFxyXG4gICAgICAgICAgdGhpcy5fY3VycmVudEN1c3RvbUZsb29yR3JvdXAuaXRlbUdyb3VwLFxyXG4gICAgICAgICAgdGhpcy5fY3VycmVudEN1c3RvbUZsb29yR3JvdXAucG9zaXRpb24pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fYW5zd2VyU2VsZWN0ZWQubGVuZ3RoID0gMDtcclxuICAgIHRoaXMuX2h1ZFNlcnZpY2UudXBkYXRlU2VsZWN0ZWRJdGVtSHVkKCk7XHJcbiAgICB0aGlzLmJ1aWxkRmluaXNoZWQubmV4dChyZXN1bHQpO1xyXG4gICAgaWYgKHJlc3VsdC5yZXN1bHRUeXBlID09PSBSZXN1bHRUeXBlLk5vU2VsZWN0aW9ucykge1xyXG4gICAgICByZXN1bHQucmVzdWx0VHlwZSA9IFJlc3VsdFR5cGUuQ29uZmlndXJhdGlvbkZpeGVkO1xyXG4gICAgfSBlbHNlIGlmIChyZXN1bHQucmVzdWx0VHlwZSAhPT0gUmVzdWx0VHlwZS5PYnNvbGV0ZSAmJiByZXN1bHQucmVzdWx0VHlwZSAhPT0gUmVzdWx0VHlwZS5Db25maWd1cmF0aW9uRml4ZWQpIHsgLy8gZG9uJ3Qgb3ZlcnJpZGUgdGhlc2VcclxuICAgICAgcmVzdWx0LnJlc3VsdFR5cGUgPSBSZXN1bHRUeXBlLkxvYWRlZDtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zdGFydFRvQnVpbGRGcm9tQ29uZmlndXJhdG9yKG1ldGFkYXRhOiBNZXRhZGF0YSk6IFByb21pc2U8Q3VzdG9tRmxvb3JHcm91cFJlc3VsdD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc3RhcnRUb0J1aWxkKG51bGwsIG1ldGFkYXRhKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX3NldEluc3RhbmNlVG9Db25maWd1cmUocmVzdWx0OiBDdXN0b21GbG9vckdyb3VwUmVzdWx0KTogUHJvbWlzZTxDdXN0b21GbG9vckdyb3VwUmVzdWx0PiB7XHJcbiAgICBpZiAocmVzdWx0LnJlc3VsdFR5cGUgIT09IFJlc3VsdFR5cGUuVGltZW91dCkge1xyXG4gICAgICBpZiAocmVzdWx0Lm1ldGFEYXRhLml0ZW1JZCkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX2lPbmUuc2V0SW5zdGFuY2UocmVzdWx0Lm1ldGFEYXRhLml0ZW1JZClcclxuICAgICAgICAgIC5jYXRjaCgoZSkgPT4ge1xyXG4gICAgICAgICAgICByZXN1bHQuZXJyb3JNZXNzYWdlcy5wdXNoKG5ldyBFcnJvck1lc3NhZ2UoZSkpO1xyXG4gICAgICAgICAgICBQcm9taXNlLnJlamVjdChyZXN1bHQpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLl9pT25lLmluaXROb2RlSW5zdGFuY2UocmVzdWx0Lm1ldGFEYXRhLml0ZW1JZGVudGlmaWVyKVxyXG4gICAgICAgICAgLmNhdGNoKChlKSA9PiB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5lcnJvck1lc3NhZ2VzLnB1c2gobmV3IEVycm9yTWVzc2FnZShlKSk7XHJcbiAgICAgICAgICAgIFByb21pc2UucmVqZWN0KHJlc3VsdCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgICAgIHJlc3VsdC5tZXRhRGF0YS5pdGVtSWQgPSByZXNwb25zZS5yZXN1bHRPYmplY3Q7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIFByb21pc2UucmVqZWN0KHJlc3VsdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGF3YWl0IHRoaXMuX2lPbmUuc2V0SW5zdGFuY2UocmVzdWx0Lm1ldGFEYXRhLml0ZW1JZClcclxuICAgICAgICAgIC5jYXRjaCgoZSkgPT4ge1xyXG4gICAgICAgICAgICByZXN1bHQuZXJyb3JNZXNzYWdlcy5wdXNoKG5ldyBFcnJvck1lc3NhZ2UoZSkpO1xyXG4gICAgICAgICAgICBQcm9taXNlLnJlamVjdChyZXN1bHQpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfcHJlcGFyZVNlbGVjdGlvbnNBbmREZWNvcyhyZXN1bHQ6IEN1c3RvbUZsb29yR3JvdXBSZXN1bHQpOiBQcm9taXNlPEN1c3RvbUZsb29yR3JvdXBSZXN1bHQ+IHtcclxuICAgIHRoaXMuX3Jlc2V0KCk7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBzZWxlY3Rpb25zQW5kRGVjb1Byb21pc2U6IFByb21pc2U8YW55PltdID0gW107XHJcbiAgICAgIHNlbGVjdGlvbnNBbmREZWNvUHJvbWlzZS5wdXNoKHRoaXMuX2lPbmUuZ2V0U2VsZWN0aW9uc0FzeW5jKCksIHRoaXMuX2lPbmUuZ2V0RGVjb3NBc3luYygpKTtcclxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoc2VsZWN0aW9uc0FuZERlY29Qcm9taXNlKTtcclxuICAgICAgdGhpcy5fcHJlbG9hZE1hdGVyaWFscyhyZXN1bHQubWV0YURhdGEuc2NoZW1hKTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLl9pT25lLnNlbGVjdGlvbnMubGVuZ3RoIDwgMikgeyAvLyBubyBzZWxlY3Rpb25zLCBvbmx5IHNlbGVjdGlvbiBvZiB0eXBlICdBUlQnXHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgaWYgKHJlc3VsdC5yZXN1bHRUeXBlICE9PSBSZXN1bHRUeXBlLkFydGljbGVOb3RGb3VuZCAmJiAhcmVzdWx0Lm1ldGFEYXRhLm9yaWdpbmFsSXRlbUlkKSB7IC8vIGFydGljbGUgZm91bmQsIHNvIGluaXQgdGhhdCBmaXJzdFxyXG4gICAgICAgICAgcmVzdWx0Lm1ldGFEYXRhLm9yaWdpbmFsSXRlbUlkID0gcmVzdWx0Lm1ldGFEYXRhLml0ZW1JZDtcclxuICAgICAgICAgIHJlc3VsdC5tZXRhRGF0YS5pdGVtSWQgPSBudWxsO1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5fc2V0SW5zdGFuY2VUb0NvbmZpZ3VyZShyZXN1bHQpO1xyXG4gICAgICAgICAgcmVzdWx0LnJlc3VsdFR5cGUgPSBSZXN1bHRUeXBlLk5vU2VsZWN0aW9ucztcclxuICAgICAgICAgIHJldHVybiB0aGlzLnN0YXJ0VG9CdWlsZChyZXN1bHQpOyAvLyAncmVzdGFydCcgdGhlIGJ1aWxkXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2dldFNlbGVjdGlvbnNBbmREZWNvc0Zyb21NZXRhZGF0YShyZXN1bHQpO1xyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLl9pT25lLnNlbGVjdGlvbnMuZm9yRWFjaChzID0+IHtcclxuICAgICAgcy5zY2hlbWEgPSByZXN1bHQubWV0YURhdGEuc2NoZW1hO1xyXG4gICAgICBzLmluc3RhbmNlSWQgPSByZXN1bHQubWV0YURhdGEuaXRlbUlkO1xyXG4gICAgfSk7IC8vIGFkZCBzY2hlbWEgZm9yIG1hdGVyaWFsIGNyZWF0aW9uXHJcbiAgICB0aGlzLl9oYW5kbGVTZWxlY3Rpb25zUmVjZWl2ZWQocmVzdWx0Lm1ldGFEYXRhKTtcclxuICAgIHRoaXMuX2xpbmtTZWxlY3Rpb25zQW5kRGVjb3MoKTtcclxuICAgIHRoaXMuX3ByZXBhcmVUaGVTZWxlY3Rpb25zKHJlc3VsdC5tZXRhRGF0YS5pdGVtSWQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcHJlbG9hZE1hdGVyaWFscyhzY2hlbWE6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5fdmFyaWF0aW9uQ2FjaGVTZXJ2aWNlLnByZWxvYWRWYXJpYXRpb25zKHNjaGVtYSwgdGhpcy5faU9uZS5kZWNvTm9kZXMubWFwKGQgPT4gZC5nYW1lT2JqZWN0TmFtZSksIHRoaXMuYXJ0aWNsZUFzc2V0UGF0aCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZXRTZWxlY3Rpb25zQW5kRGVjb3NGcm9tTWV0YWRhdGEocmVzdWx0OiBDdXN0b21GbG9vckdyb3VwUmVzdWx0KTogdm9pZCB7XHJcbiAgICBpZiAocmVzdWx0Lm1ldGFEYXRhLnNlbGVjdGlvbnMgJiYgcmVzdWx0Lm1ldGFEYXRhLmRlY29zKSB7XHJcbiAgICAgIHRoaXMuX2lPbmUuc2V0U2VsZWN0aW9ucyhyZXN1bHQubWV0YURhdGEuc2VsZWN0aW9ucyk7XHJcbiAgICAgIHRoaXMuX2lPbmUuc2V0RGVjb05vZGVzKEFycmF5LmZyb20ocmVzdWx0Lm1ldGFEYXRhLmRlY29zLnZhbHVlcygpKSk7XHJcbiAgICAgIHJlc3VsdC5tZXRhRGF0YS5vYnNvbGV0ZSA9IHRydWU7XHJcbiAgICAgIGlmIChyZXN1bHQucmVzdWx0VHlwZSAhPT0gUmVzdWx0VHlwZS5Db25maWd1cmF0aW9uTm90Rml4ZWQpIHtcclxuICAgICAgICByZXN1bHQucmVzdWx0VHlwZSA9IFJlc3VsdFR5cGUuT2Jzb2xldGU7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLl9pT25lLnNlbGVjdGlvbnMubGVuZ3RoIDwgMiB8fCB0aGlzLl9pT25lLmRlY29Ob2Rlcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICByZXN1bHQuZXJyb3JNZXNzYWdlcy5wdXNoKG5ldyBFcnJvck1lc3NhZ2UoJ05PX1NFTEVDVElPTlNfT1JfREVDT1MnLCAnTk9fU0VMRUNUSU9OU19PUl9ERUNPU19JTkZPJykpO1xyXG4gICAgICB9XHJcbiAgICAgIHRocm93IHJlc3VsdDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NlbGVjdGlvblB1Ymxpc2hlZChzZWxlY3Rpb246IFNlbGVjdGlvbik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICgoc2VsZWN0aW9uLmhpZXJhcmNoaWNhbFB1YmxpY2F0aW9uQ29kZSA9PT0gbnVsbCkgfHwgKChzZWxlY3Rpb24uaGllcmFyY2hpY2FsUHVibGljYXRpb25Db2RlICYgMikgPiAwKSkgJiZcclxuICAgICAgKFxyXG4gICAgICAgIChzZWxlY3Rpb24ubm9kZVR5cGUgPT09IE5vZGVUeXBlLlF1ZXN0aW9uICYmXHJcbiAgICAgICAgICAoKChzZWxlY3Rpb24ucXVlc3Rpb25QdWJsaWNhdGlvbkNvZGUgJiAyKSA+IDApIHx8XHJcbiAgICAgICAgICAgIHNlbGVjdGlvbi5xdWVzdGlvblB1YmxpY2F0aW9uQ29kZSA9PT0gbnVsbCB8fCBzZWxlY3Rpb24ucXVlc3Rpb25QdWJsaWNhdGlvbkNvZGUgPT09IHVuZGVmaW5lZCkpIHx8XHJcbiAgICAgICAgKHNlbGVjdGlvbi5ub2RlVHlwZSA9PT0gTm9kZVR5cGUuQW5zd2VyICYmXHJcbiAgICAgICAgICAoKChzZWxlY3Rpb24uYW5zd2VyUHVibGljYXRpb25Db2RlICYgMikgPiAwKSB8fFxyXG4gICAgICAgICAgICBzZWxlY3Rpb24uYW5zd2VyUHVibGljYXRpb25Db2RlID09PSBudWxsIHx8IHNlbGVjdGlvbi5hbnN3ZXJQdWJsaWNhdGlvbkNvZGUgPT09IHVuZGVmaW5lZCkpXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9oYW5kbGVJbnRlZ3JhdGlvbihpbnN0YW5jZUlkOiBzdHJpbmcsIG9iamVjdDogSXRlbSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX2ludGVncmF0aW9uRW5hYmxlZCAmJiAhb2JqZWN0Lm1ldGFkYXRhLm9ic29sZXRlKSB7XHJcbiAgICAgIGNvbnN0IGdlbmVyaWNWYXJpYXRpb25TZWxlY3Rpb25zOiBTZWxlY3Rpb25bXSA9XHJcbiAgICAgICAgdGhpcy5faU9uZS5zZWxlY3Rpb25zLmZpbHRlcihzID0+IHMuZGVjb05vZGUgJiYgcy5nZW5lcmljICYmXHJcbiAgICAgICAgICAocy5kZWNvTm9kZSBhcyBhbnkpLnZhcmlhdGlvbiAmJiAocy5kZWNvTm9kZSBhcyBhbnkpLnZhcmlhdGlvbi50eXBlID09PSBEZWNvTm9kZVR5cGUuVmFyaWF0aW9uKTtcclxuICAgICAgaWYgKGdlbmVyaWNWYXJpYXRpb25TZWxlY3Rpb25zICYmIGdlbmVyaWNWYXJpYXRpb25TZWxlY3Rpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLl91cHNlcnRGdXJuaXR1cmUoaW5zdGFuY2VJZCwge1xyXG4gICAgICAgICAgVmFyaWF0aW9uOiAoZ2VuZXJpY1ZhcmlhdGlvblNlbGVjdGlvbnNbMF0uZGVjb05vZGUgYXMgYW55KS52YXJpYXRpb24uYnJhbmRJZCxcclxuICAgICAgICAgIFZhcmlhdGlvbkRlc2NyaXB0aW9uOiAoZ2VuZXJpY1ZhcmlhdGlvblNlbGVjdGlvbnNbMF0uZGVjb05vZGUgYXMgYW55KS52YXJpYXRpb24uZ2FtZU9iamVjdE5hbWUsXHJcbiAgICAgICAgICBTdXBwbGllckFydGljbGVOcjogKGdlbmVyaWNWYXJpYXRpb25TZWxlY3Rpb25zWzBdLmRlY29Ob2RlIGFzIGFueSkudmFyaWF0aW9uLnN1cHBsaWVyQXJ0aWNsZU5yXHJcbiAgICAgICAgfSwgb2JqZWN0KTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9oYW5kbGVJbnRlZ3JhdGlvbkNvbm5lY3Rpb25zKGluc3RhbmNlSWQsIG9iamVjdCk7XHJcbiAgICAgIHRoaXMuX3Vwc2VydEZ1cm5pdHVyZShpbnN0YW5jZUlkLCB7UG9zaXRpb246IG9iamVjdC5wb3NpdGlvbiwgUm90YXRpb246IG9iamVjdC5yb3RhdGlvbn0sIG9iamVjdCk7XHJcbiAgICAgIHRoaXMuX21lc3NhZ2VCdXMuZW1pdChNZXNzYWdlVHlwZS5Db25maWd1cmF0aW9uQ2hhbmdlZCwgdGhpcy5fZnVybml0dXJlQ29uZmlndXJhdGlvbnMpO1xyXG4gICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLl9mdXJuaXR1cmVDb25maWd1cmF0aW9ucyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zdGFydFdpdGhOZXcoY2xlYW51cDogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcclxuICAgIHRoaXMuX2Z1cm5pdHVyZUNvbmZpZ3VyYXRpb25zLmxlbmd0aCA9IDA7XHJcbiAgICBpZiAoY2xlYW51cCkge1xyXG4gICAgICB0aGlzLl9wbGFjZWRBZGp1c3RhYmxlcy5mb3JFYWNoKGEgPT4gVXRpbHMuRGlzcG9zZU9iamVjdChhKSk7XHJcbiAgICAgIHRoaXMuX3BsYWNlZEFkZGFibGVzLmZvckVhY2goYSA9PiBVdGlscy5EaXNwb3NlT2JqZWN0KGEpKTtcclxuICAgICAgdGhpcy5fY2xlYW51cCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY2xlYW51cEJlZm9yZVByZXNldExvYWQoKTogdm9pZCB7XHJcbiAgICBNYXRlcmlhbFV0aWxzLkNsZWFyQ2FjaGVzKCk7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAqIENsZWFyIHZhcmlhYmxlcyB0byBsZXQgb2JqZWN0cyBiZWluZyBkaXNwb3NlZCBwcm9wZXJseVxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2hhbmRsZUFmdGVyUHJlc2V0TG9hZCgpOiB2b2lkIHtcclxuICAgIC8vIG1ha2Ugc3VyZSBub3RoaW5nIGlzIGtlZXBpbmcgYSBsb2NrXHJcbiAgICB0aGlzLl9pT25lLnNldEluc3RhbmNlKG51bGwpO1xyXG4gICAgLy8gY2xlYW5cclxuICAgIHRoaXMuX2NsZWFudXAoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NsZWFudXAoKTogdm9pZCB7XHJcbiAgICBVdGlscy5EaXNwb3NlT2JqZWN0KHRoaXMuZnVsbDNET2JqZWN0VG9Vc2UpO1xyXG4gICAgdGhpcy5mdWxsM0RPYmplY3RUb1VzZSA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwID0gdW5kZWZpbmVkO1xyXG4gICAgVXRpbHMuRGlzcG9zZU9iamVjdCh0aGlzLl9hY3RpdmVDaGlsZEVsZW1lbnQpO1xyXG4gICAgdGhpcy5fYWN0aXZlQ2hpbGRFbGVtZW50ID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5fcGxhY2VkQWRqdXN0YWJsZXMubGVuZ3RoID0gMDtcclxuICAgIHRoaXMuX3BsYWNlZEFkZGFibGVzLmxlbmd0aCA9IDA7XHJcbiAgICB0aGlzLl9hZGp1c3RhYmxlcy5sZW5ndGggPSAwO1xyXG4gICAgdGhpcy5fYWRkYWJsZXMubGVuZ3RoID0gMDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2VuYWJsZUludGVncmF0aW9uKCk6IHZvaWQge1xyXG4gICAgdGhpcy5faW50ZWdyYXRpb25FbmFibGVkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2hhbmRsZUl0ZW1SZW1vdmVkRnJvbVNjZW5lKHJlc3VsdDogeyBpdGVtOiBhbnksIGFkZGVkVG9Hcm91cDogYm9vbGVhbiB9KTogdm9pZCB7XHJcbiAgICBpZiAocmVzdWx0LmFkZGVkVG9Hcm91cCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAocmVzdWx0Lml0ZW0gaW5zdGFuY2VvZiBJdGVtICYmICEocmVzdWx0Lml0ZW0gaW5zdGFuY2VvZiBGbG9vclBpbiB8fCByZXN1bHQuaXRlbSBpbnN0YW5jZW9mIFdhbGxQaW4pKSB7XHJcbiAgICAgIGlmICh0aGlzLl9pbnRlZ3JhdGlvbkVuYWJsZWQgJiYgcmVzdWx0Lml0ZW0udXNlckRhdGEpIHtcclxuICAgICAgICBjb25zdCBpZDogc3RyaW5nID0gcmVzdWx0Lml0ZW0udXNlckRhdGEuaXRlbUlkID8gcmVzdWx0Lml0ZW0udXNlckRhdGEuaXRlbUlkIDogcmVzdWx0Lml0ZW0udXVpZDtcclxuICAgICAgICB0aGlzLl9mdXJuaXR1cmVDb25maWd1cmF0aW9ucy5zcGxpY2UodGhpcy5fZnVybml0dXJlQ29uZmlndXJhdGlvbnMuZmluZEluZGV4KGYgPT4gZi5JZCA9PT0gaWQpLCAxKTtcclxuICAgICAgICB0aGlzLl9tZXNzYWdlQnVzLmVtaXQoTWVzc2FnZVR5cGUuQ29uZmlndXJhdGlvbkNoYW5nZWQsIHRoaXMuX2Z1cm5pdHVyZUNvbmZpZ3VyYXRpb25zKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLl9mdXJuaXR1cmVDb25maWd1cmF0aW9ucyk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5fY2xlYXJFbGVtZW50cyhyZXN1bHQuaXRlbSk7XHJcbiAgICAgIHRoaXMuX2NsZWFudXAoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NsZWFyRWxlbWVudHMoaXRlbTogSXRlbSk6IHZvaWQge1xyXG4gICAgaWYgKGl0ZW0gaW5zdGFuY2VvZiBDdXN0b21GbG9vckl0ZW0gJiYgaXRlbS51c2VyRGF0YSAmJiBpdGVtLnVzZXJEYXRhLml0ZW1JZCkge1xyXG4gICAgICB0aGlzLmJhc2VFbGVtZW50Tm9kZUlkID0gdW5kZWZpbmVkO1xyXG4gICAgICB0aGlzLl9vcmlnaW5hbEVsZW1lbnRQb3NpdGlvbi5zZXQoMCwgMCwgMCk7XHJcbiAgICAgIHRoaXMuX2VsZW1lbnRTZXJ2aWNlLnJlbW92ZUVsZW1lbnQoaXRlbS51c2VyRGF0YS5pdGVtSWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaGFuZGxlSW50ZWdyYXRpb25Db25uZWN0aW9ucyhpZDogc3RyaW5nLCBvYmplY3Q6IEl0ZW0pOiB2b2lkIHtcclxuICAgIGNvbnN0IHBhcnRzOiBGdXJuaXR1cmVQYXJ0SW50ZWdyYXRpb25bXSA9IFtdO1xyXG4gICAgY29uc3QgY2hpbGRQYXJ0czogT2JqZWN0M0RbXSA9IG9iamVjdC5jb25maWd1cmFibGUgPyBvYmplY3QuY2hpbGRyZW4gOiBbb2JqZWN0XTtcclxuICAgIGNvbnN0IGxlbjogbnVtYmVyID0gY2hpbGRQYXJ0cy5sZW5ndGg7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IGNoaWxkOiBhbnkgPSA8Q3VzdG9tT2JqZWN0M0Q+Y2hpbGRQYXJ0c1tpXTtcclxuICAgICAgY29uc3QgY29ubmVjdGlvbjogRnVybml0dXJlUGFydEludGVncmF0aW9uID0gbmV3IEZ1cm5pdHVyZVBhcnRJbnRlZ3JhdGlvbigpO1xyXG4gICAgICBjb25zdCB2YXJpYXRpb25zOiBGdXJuaXR1cmVQYXJ0VmFyaWF0aW9uW10gPSBbXTtcclxuICAgICAgaWYgKGNoaWxkLnVzZXJEYXRhICYmIGNoaWxkLnVzZXJEYXRhLnNlbGVjdGlvbiAmJiBjaGlsZC51c2VyRGF0YS5zZWxlY3Rpb24uZGVjb05vZGUpIHtcclxuICAgICAgICBjb25uZWN0aW9uLklkID0gY2hpbGRQYXJ0cy5maW5kSW5kZXgoYyA9PiBjID09PSBjaGlsZCkudG9TdHJpbmcoKTtcclxuICAgICAgICBjb25uZWN0aW9uLlN1cHBsaWVyQXJ0aWNsZU5yID0gY2hpbGQudXNlckRhdGEuc2VsZWN0aW9uLnN1cHBsaWVyQXJ0aWNsZU5yO1xyXG4gICAgICAgIGNvbm5lY3Rpb24uQnJhbmRJZGVudGlmaWVyID0gY2hpbGQudXNlckRhdGEuc2VsZWN0aW9uLmRlY29Ob2RlLmJyYW5kSWQ7XHJcbiAgICAgICAgY29ubmVjdGlvbi5CcmFuZERlc2NyaXB0aW9uID0gY2hpbGQudXNlckRhdGEuc2VsZWN0aW9uLmRlY29Ob2RlLmdhbWVPYmplY3ROYW1lO1xyXG4gICAgICAgIGNvbm5lY3Rpb24uUG9zaXRpb24gPSBjaGlsZC5wb3NpdGlvbjtcclxuICAgICAgICBjb25uZWN0aW9uLlJvdGF0aW9uID0gY2hpbGQucm90YXRpb247XHJcbiAgICAgICAgaWYgKGNoaWxkLnVzZXJEYXRhLnNlbGVjdGlvbi52YXJpYXRpb25zKSB7XHJcbiAgICAgICAgICBpZiAoY2hpbGQudXNlckRhdGEuc2VsZWN0aW9uLnZhcmlhdGlvbnMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhcmlhdGlvbjogYW55ID0gY2hpbGQudXNlckRhdGEuc2VsZWN0aW9uLnZhcmlhdGlvbnNbMF07XHJcbiAgICAgICAgICAgIGNvbm5lY3Rpb24uVmFyaWF0aW9uID0gdmFyaWF0aW9uLmJyYW5kSWQ7XHJcbiAgICAgICAgICAgIGNvbm5lY3Rpb24uVmFyaWF0aW9uRGVzY3JpcHRpb24gPSB2YXJpYXRpb24uZ2FtZU9iamVjdE5hbWU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNoaWxkLnVzZXJEYXRhLnNlbGVjdGlvbi52YXJpYXRpb25zLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgdmFyaWF0aW9uOiBhbnkgPSBjaGlsZC51c2VyRGF0YS5zZWxlY3Rpb24udmFyaWF0aW9uc1tqXTtcclxuICAgICAgICAgICAgICBjb25zdCB2YXJpYXRpb25QYXJ0OiBGdXJuaXR1cmVQYXJ0VmFyaWF0aW9uID0gbmV3IEZ1cm5pdHVyZVBhcnRWYXJpYXRpb24oKTtcclxuICAgICAgICAgICAgICB2YXJpYXRpb25QYXJ0LlZhcmlhdGlvbiA9IHZhcmlhdGlvbi5icmFuZElkO1xyXG4gICAgICAgICAgICAgIHZhcmlhdGlvblBhcnQuVmFyaWF0aW9uRGVzY3JpcHRpb24gPSB2YXJpYXRpb24uZ2FtZU9iamVjdE5hbWU7XHJcbiAgICAgICAgICAgICAgdmFyaWF0aW9uUGFydC5NYXRlcmlhbElkID0gdmFyaWF0aW9uLm1hdGVyaWFsSWQ7XHJcbiAgICAgICAgICAgICAgdmFyaWF0aW9uUGFydC5TdXBwbGllckFydGljbGVOciA9IHZhcmlhdGlvbi5zdXBwbGllckFydGljbGVOcjtcclxuICAgICAgICAgICAgICB2YXJpYXRpb25QYXJ0Lk9wdGlvbiA9IHZhcmlhdGlvbi5vcHRpb25UZXh0O1xyXG4gICAgICAgICAgICAgIHZhcmlhdGlvbnMucHVzaCh2YXJpYXRpb25QYXJ0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25uZWN0aW9uLlZhcmlhdGlvbnMgPSB2YXJpYXRpb25zO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHsgLy8gYS1hcnRpa2VsXHJcbiAgICAgICAgY29ubmVjdGlvbi5JZCA9IGNoaWxkUGFydHMuZmluZEluZGV4KGMgPT4gYyA9PT0gY2hpbGQpLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgY29ubmVjdGlvbi5CcmFuZElkZW50aWZpZXIgPSBjaGlsZC5tZXRhZGF0YS5pdGVtSWRlbnRpZmllcjtcclxuICAgICAgICBjb25uZWN0aW9uLkJyYW5kRGVzY3JpcHRpb24gPSBjaGlsZC5tZXRhZGF0YS5pdGVtTmFtZTtcclxuICAgICAgICBjb25uZWN0aW9uLlBvc2l0aW9uID0gY2hpbGQucG9zaXRpb247XHJcbiAgICAgICAgY29ubmVjdGlvbi5Sb3RhdGlvbiA9IGNoaWxkLnJvdGF0aW9uO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGNvbm5lY3RvcnM6IEZ1cm5pdHVyZUNvbm5lY3RlZFBhcnRJbnRlZ3JhdGlvbltdID0gW107XHJcbiAgICAgIGNvbnN0IGNsZW46IG51bWJlciA9IGNoaWxkLmNoaWxkcmVuLmxlbmd0aDtcclxuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjbGVuOyBqKyspIHtcclxuICAgICAgICBjb25zdCBjb25uZWN0b3I6IGFueSA9IGNoaWxkLmNoaWxkcmVuW2pdO1xyXG4gICAgICAgIGlmICgoY29ubmVjdG9yIGluc3RhbmNlb2YgQ3VzdG9tT2JqZWN0M0QgfHwgY29ubmVjdG9yIGluc3RhbmNlb2YgQ3VzdG9tTWVzaCkgJiYgKGNvbm5lY3RvciBhcyBhbnkpLmNvbm5lY3RlZFRvKSB7XHJcbiAgICAgICAgICBjb25zdCBjb25uOiBGdXJuaXR1cmVDb25uZWN0ZWRQYXJ0SW50ZWdyYXRpb24gPSBuZXcgRnVybml0dXJlQ29ubmVjdGVkUGFydEludGVncmF0aW9uKCk7XHJcbiAgICAgICAgICBjb25uLkNvbm5lY3Rpb25MYWJlbCA9IGNvbm5lY3Rvci5uYW1lO1xyXG4gICAgICAgICAgY29uc3QgZm9yZWlnblBhcnRJZHg6IG51bWJlciA9IHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwLmNoaWxkcmVuLmZpbmRJbmRleChjID0+IGMubmFtZSA9PT0gKGNvbm5lY3RvciBhcyBhbnkpLmNvbm5lY3RlZFRvKTtcclxuICAgICAgICAgIGNvbm4uRm9yZWlnbkNvbm5lY3Rpb25MYWJlbCA9IHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwLmNoaWxkcmVuW2ZvcmVpZ25QYXJ0SWR4XS51c2VyRGF0YS5zZWxlY3Rpb24uZGVjb05vZGUuZ2FtZU9iamVjdE5hbWU7XHJcbiAgICAgICAgICBjb25uLkZvcmVpZ25QYXJ0SWQgPSBmb3JlaWduUGFydElkeC50b1N0cmluZygpO1xyXG4gICAgICAgICAgY29ubi5Qb3NpdGlvbiA9IGNvbm5lY3Rvci5wb3NpdGlvbjtcclxuICAgICAgICAgIGNvbm4uUm90YXRpb24gPSBjb25uZWN0b3Iucm90YXRpb247XHJcbiAgICAgICAgICBjb25uZWN0b3JzLnB1c2goY29ubik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGNvbm5lY3Rpb24uQ29ubmVjdGVkUGFydHMgPSBjb25uZWN0b3JzO1xyXG4gICAgICBwYXJ0cy5wdXNoKGNvbm5lY3Rpb24pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fdXBzZXJ0RnVybml0dXJlKGlkLCB7UGFydHM6IHBhcnRzfSwgb2JqZWN0KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3Vwc2VydEZ1cm5pdHVyZShpZDogc3RyaW5nLCBvYmplY3Q6IGFueSwgaXRlbTogSXRlbSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX2ludGVncmF0aW9uRW5hYmxlZCAmJiAhaXRlbS5tZXRhZGF0YS5vYnNvbGV0ZSkge1xyXG4gICAgICBjb25zdCBpZHg6IG51bWJlciA9IHRoaXMuX2Z1cm5pdHVyZUNvbmZpZ3VyYXRpb25zLmZpbmRJbmRleChmID0+IGYuSWQgPT09IGlkKTtcclxuICAgICAgbGV0IGZ1cm5pdHVyZTogRnVybml0dXJlSW50ZWdyYXRpb247XHJcbiAgICAgIGlmIChpZHggPCAwKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2Z1cm5pdHVyZUNvbmZpZ3VyYXRpb25zLmxlbmd0aCA9PT0gMSAmJiAhdGhpcy5fZnVybml0dXJlQ29uZmlndXJhdGlvbnNbMF0uSWQpIHsgLy8gZW1wdHkgZW50cnkgZm9yIG1ycCBjb2RlLCByZS11c2UgdGhhdCBvbmVcclxuICAgICAgICAgIGZ1cm5pdHVyZSA9IHRoaXMuX2Z1cm5pdHVyZUNvbmZpZ3VyYXRpb25zWzBdO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBmdXJuaXR1cmUgPSBuZXcgRnVybml0dXJlSW50ZWdyYXRpb24oKTtcclxuICAgICAgICAgIHRoaXMuX2Z1cm5pdHVyZUNvbmZpZ3VyYXRpb25zLnB1c2goZnVybml0dXJlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZnVybml0dXJlLklkID0gaWQ7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZnVybml0dXJlID0gdGhpcy5fZnVybml0dXJlQ29uZmlndXJhdGlvbnNbaWR4XTtcclxuICAgICAgfVxyXG4gICAgICBmdXJuaXR1cmUuTXJwQ29kZSA9IHRoaXMuX3Blcm1hbmVudFN0b3JlU2VydmljZS5jb2RlO1xyXG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmplY3QpIHtcclxuICAgICAgICBpZiAoZnVybml0dXJlLmhhc093blByb3BlcnR5KGtleSkgJiYgb2JqZWN0Lmhhc093blByb3BlcnR5KGtleSkpIHtcclxuICAgICAgICAgIGZ1cm5pdHVyZVtrZXldID0gb2JqZWN0W2tleV07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zZXRDb2RlT25GdXJuaXR1cmVDb25maWd1cmF0aW9uKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX2ludGVncmF0aW9uRW5hYmxlZCkge1xyXG4gICAgICBpZiAodGhpcy5fZnVybml0dXJlQ29uZmlndXJhdGlvbnMubGVuZ3RoIDwgMSkge1xyXG4gICAgICAgIGNvbnN0IGZ1cm5pdHVyZTogRnVybml0dXJlSW50ZWdyYXRpb24gPSBuZXcgRnVybml0dXJlSW50ZWdyYXRpb24oKTtcclxuICAgICAgICBmdXJuaXR1cmUuTXJwQ29kZSA9IHRoaXMuX3Blcm1hbmVudFN0b3JlU2VydmljZS5jb2RlO1xyXG4gICAgICAgIHRoaXMuX2Z1cm5pdHVyZUNvbmZpZ3VyYXRpb25zLnB1c2goZnVybml0dXJlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLl9mdXJuaXR1cmVDb25maWd1cmF0aW9ucy5mb3JFYWNoKGYgPT4gZi5NcnBDb2RlID0gdGhpcy5fcGVybWFuZW50U3RvcmVTZXJ2aWNlLmNvZGUpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuX21lc3NhZ2VCdXMuZW1pdChNZXNzYWdlVHlwZS5Db25maWd1cmF0aW9uQ2hhbmdlZCwgdGhpcy5fZnVybml0dXJlQ29uZmlndXJhdGlvbnMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY2FuQ29ubmVjdFNlbGVjdGlvbnMoc2VsMTogU2VsZWN0aW9uLCBzZWwyOiBTZWxlY3Rpb24pOiBib29sZWFuIHtcclxuICAgIGlmICghc2VsMS5kZWNvTm9kZSB8fCAhc2VsMi5kZWNvTm9kZSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBsZXQgY2FuQ29ubmVjdDogYm9vbGVhbiA9IHNlbDIuZGVjb05vZGUudHlwZSAhPT0gRGVjb05vZGVUeXBlLlBhcnQ7XHJcbiAgICBpZiAoIWNhbkNvbm5lY3QpIHtcclxuICAgICAgY29uc3QgbGVuOiBudW1iZXIgPSBzZWwxLmRlY29Ob2RlLmNvbm5lY3RvcnMubGVuZ3RoO1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgbGVuaTogbnVtYmVyID0gc2VsMi5kZWNvTm9kZS5jb25uZWN0b3JzLmxlbmd0aDtcclxuICAgICAgICBmb3IgKGxldCBpaSA9IDA7IGlpIDwgbGVuaTsgaWkrKykge1xyXG4gICAgICAgICAgY2FuQ29ubmVjdCA9IFNjZW5lM0RVdGlsLkNhblNlbGVjdG9yQ29ubmVjdChzZWwxLmRlY29Ob2RlLmNvbm5lY3RvcnMsIHNlbDEuZGVjb05vZGUuY29ubmVjdG9yc1tpXSwgc2VsMi5kZWNvTm9kZS5jb25uZWN0b3JzW2lpXSk7XHJcbiAgICAgICAgICBpZiAoY2FuQ29ubmVjdCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNhbkNvbm5lY3Q7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9oYW5kbGVTZWxlY3Rpb25zUmVjZWl2ZWQobWV0YWRhdGE6IE1ldGFkYXRhKSB7XHJcbiAgICBpZiAodGhpcy5fYW5zd2VyU2VsZWN0ZWQubGVuZ3RoID4gMCkge1xyXG4gICAgICBjb25zdCBzZWxlY3Rpb246IFNlbGVjdGlvbiA9XHJcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25zLmZpbmQocyA9PiBzLm5vZGVJZCA9PT0gdGhpcy5fYW5zd2VyU2VsZWN0ZWRbdGhpcy5fYW5zd2VyU2VsZWN0ZWQubGVuZ3RoIC0gMV0ubm9kZUlkKTtcclxuICAgICAgaWYgKHNlbGVjdGlvbikge1xyXG4gICAgICAgIGxldCBpdGVtTmFtZTogc3RyaW5nID0gJyc7XHJcbiAgICAgICAgaWYgKG1ldGFkYXRhLml0ZW1OYW1lID09PSAnJykge1xyXG4gICAgICAgICAgaWYgKG1ldGFkYXRhLml0ZW1EZXNjcmlwdGlvbiAhPT0gJycpIHtcclxuICAgICAgICAgICAgaXRlbU5hbWUgPSBtZXRhZGF0YS5pdGVtRGVzY3JpcHRpb247XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpdGVtTmFtZSA9IG1ldGFkYXRhLml0ZW1JZGVudGlmaWVyO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpdGVtTmFtZSA9IG1ldGFkYXRhLml0ZW1OYW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9nb29nbGVUYWdNYW5hZ2VyLnNlbmRFdmVudChHb29nbGVUYWdNYW5hZ2VyRXZlbnQuQW5zd2VyQ2hvc2VuLCB7XHJcbiAgICAgICAgICAnYXJ0aWNsZU5yJzogbWV0YWRhdGEuaXRlbUlkZW50aWZpZXIsXHJcbiAgICAgICAgICAncHJvZHVjdCc6IGl0ZW1OYW1lLFxyXG4gICAgICAgICAgJ29wdGlvbkRlc2NyaXB0aW9uJzogc2VsZWN0aW9uLmNvbW1lcmNpYWxBbnN3ZXIgPyBzZWxlY3Rpb24uY29tbWVyY2lhbEFuc3dlciA6IHNlbGVjdGlvbi5hbnN3ZXIsXHJcbiAgICAgICAgICAnb3B0aW9uUGF0aCc6IHNlbGVjdGlvbi5zZWxlY3Rpb25cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaGFuZGxlQ29ubmVjdGlvblJlc2V0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwKSB7XHJcbiAgICAgIHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwLnNldFVuc2VsZWN0ZWQoKTtcclxuICAgICAgdGhpcy5fbWVzc2FnZUJ1cy5lbWl0KE1lc3NhZ2VUeXBlLkl0ZW1VbnNlbGVjdGVkLCB1bmRlZmluZWQpO1xyXG4gICAgICB0aGlzLl9zaG93V2FybmluZyh7dGl0bGU6ICdXQVJOSU5HJywgbWVzc2FnZTogJ1JFRlJFU0hfRFVFX1RPX0lOQUNUSVZJVFknfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9oYW5kbGVBbnN3ZXJTZWxlY3RlZChhbnN3ZXI6IEFuc3dlcik6IHZvaWQge1xyXG4gICAgdGhpcy5fYW5zd2VyU2VsZWN0ZWQucHVzaChhbnN3ZXIpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGNhbmNlbEFuc3dlcihtZXRhZGF0YTogTWV0YWRhdGEsIHJlYnVpbGQ6IGJvb2xlYW4gPSB0cnVlLCBnZXRBbnN3ZXJzOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGF3YWl0IHRoaXMuX2lPbmUuY2FuY2VsQW5zd2VyKCk7XHJcbiAgICBpZiAocmVidWlsZCkge1xyXG4gICAgICB0aGlzLl9zdGFydFRvQnVpbGRGcm9tQ29uZmlndXJhdG9yKG1ldGFkYXRhKTtcclxuICAgIH0gZWxzZSBpZiAoZ2V0QW5zd2VycykgeyAvLyBpZiBub3QgcmVidWlsZCB0aGVuIGNoZWNrIGlmIHdlIG5lZWQgdG8gZ2V0IGFuc3dlcnNcclxuICAgICAgY29uc3QgcXVlc3Rpb25BbmRBbnN3ZXJzOiBRdWVzdGlvbkFuZEFuc3dlcnMgPSBhd2FpdCB0aGlzLl9pT25lLmdldFF1ZXN0aW9uQW5kQW5zd2Vyc0FzeW5jKCk7IC8vIHNlZSBpZiB0aGVyZSBpcyB1c2VyIGlucHV0IG5lZWRlZFxyXG4gICAgICB0aGlzLl9pT25lLmhhbmRsZUFuc3dlcnNSZWNlaXZlZChxdWVzdGlvbkFuZEFuc3dlcnMuYW5zd2Vycyk7XHJcbiAgICAgIHRoaXMuX2FwcEV2ZW50U2VydmljZS5hbnN3ZXJDb3VudFJlY2VpdmVkLm5leHQocXVlc3Rpb25BbmRBbnN3ZXJzLmFuc3dlcnMubGVuZ3RoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBzZWxlY3RTZWxlY3Rpb24oXHJcbiAgICBzZWxlY3Rpb246IFNlbGVjdGlvbiwgbWV0YWRhdGE6IE1ldGFkYXRhLCBmb3JjZUJhY2tUb05vZGU/OiBib29sZWFuLCBhZnRlcj86IGJvb2xlYW4sIGNvbm5lY3Rvcj86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgYXdhaXQgdGhpcy5faU9uZS5zZWxlY3RTZWxlY3Rpb24oc2VsZWN0aW9uLCBmb3JjZUJhY2tUb05vZGUsIGFmdGVyLCBjb25uZWN0b3IpO1xyXG4gICAgdGhpcy5fZ2VuZXJpY1NlbGVjdGlvbiA9IHNlbGVjdGlvbi5nZW5lcmljO1xyXG4gICAgdGhpcy5fc3RhcnRUb0J1aWxkRnJvbUNvbmZpZ3VyYXRvcihtZXRhZGF0YSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZGVsZXRlU2VsZWN0aW9uKHNlbGVjdGlvbjogU2VsZWN0aW9uLCBtZXRhZGF0YTogTWV0YWRhdGEpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuX2VsZW1lbnRTZXJ2aWNlLnJlbW92ZUVsZW1lbnQoc2VsZWN0aW9uLmluc3RhbmNlSWQsIHNlbGVjdGlvbi5ub2RlKTtcclxuICAgIGF3YWl0IHRoaXMuX2lPbmUuZGVsZXRlU2VsZWN0aW9uKHNlbGVjdGlvbik7XHJcbiAgICB0aGlzLl9zdGFydFRvQnVpbGRGcm9tQ29uZmlndXJhdG9yKG1ldGFkYXRhKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyByZXBsYWNlU2VsZWN0aW9uKHNlbGVjdGlvbjogU2VsZWN0aW9uLCBtZXRhZGF0YTogTWV0YWRhdGEpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGF3YWl0IHRoaXMuX2lPbmUucmVwbGFjZVNlbGVjdGlvbihzZWxlY3Rpb24pO1xyXG4gICAgdGhpcy5fc3RhcnRUb0J1aWxkRnJvbUNvbmZpZ3VyYXRvcihtZXRhZGF0YSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgc2VsZWN0QW5zd2VyKGFuc3dlcjogQW5zd2VyLCBpbnB1dDogc3RyaW5nLCBtZXRhZGF0YTogTWV0YWRhdGEpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuX3ByZWxvYWRNYXRlcmlhbChhbnN3ZXIpO1xyXG4gICAgYXdhaXQgdGhpcy5faU9uZS5zZWxlY3RBbnN3ZXIoYW5zd2VyLCBpbnB1dCk7XHJcbiAgICB0aGlzLl9oYW5kbGVBbnN3ZXJTZWxlY3RlZChhbnN3ZXIpO1xyXG4gICAgY29uc3QgcmVzdWx0OiBDdXN0b21GbG9vckdyb3VwUmVzdWx0ID0gYXdhaXQgdGhpcy5fc3RhcnRUb0J1aWxkRnJvbUNvbmZpZ3VyYXRvcihtZXRhZGF0YSk7XHJcbiAgICB0aGlzLmFuc3dlclNlbGVjdGVkLm5leHQocmVzdWx0KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dldEFjdGl2ZUZ1cm5pdHVyZShpbnN0YW5jZUlkOiBzdHJpbmcpOiBJdGVtIHtcclxuICAgIGNvbnN0IGNvbmZpZ3VyYWJsZXM6IGFueVtdID0gdGhpcy5faXRlbVNlcnZpY2UuZ2V0Q29uZmlndXJhYmxlcygpO1xyXG4gICAgY29uc3QgbGVuOiBudW1iZXIgPSBjb25maWd1cmFibGVzLmxlbmd0aDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgaWYgKGNvbmZpZ3VyYWJsZXNbaV0ubWV0YWRhdGEgJiYgY29uZmlndXJhYmxlc1tpXS5tZXRhZGF0YS5pdGVtSWQgPT09IGluc3RhbmNlSWQgJiYgIWNvbmZpZ3VyYWJsZXNbaV0udGVtcE9iamVjdCkge1xyXG4gICAgICAgIHJldHVybiBjb25maWd1cmFibGVzW2ldO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9saW5rU2VsZWN0aW9uc0FuZERlY29zKCk6IHZvaWQge1xyXG4gICAgY29uc3QgbGVuOiBudW1iZXIgPSB0aGlzLnNlbGVjdGlvbnMubGVuZ3RoO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAvLyBjb25zdCBpZDogc3RyaW5nID0gdGhpcy5zZWxlY3Rpb25zW2ldLmFydE5vZGVJZERlY287XHJcbiAgICAgIGxldCBkZWNvOiBhbnkgPSB0aGlzLl9pT25lLmRlY29Ob2Rlcy5maW5kKGQgPT4gZC5pZCA9PT0gdGhpcy5zZWxlY3Rpb25zW2ldLmFydE5vZGVJZERlY28pO1xyXG4gICAgICBpZiAoIWRlY28pIHtcclxuICAgICAgICBkZWNvID0gbmV3IERlY29Ob2RlKCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGRlY28udHlwZSAhPT0gRGVjb05vZGVUeXBlLlZhcmlhdGlvbikge1xyXG4gICAgICAgIGNvbnN0IHZhcmlhdGlvbjogYW55ID0gdGhpcy5fZ2V0VmFyaWF0aW9ucygpLmZpbmQodiA9PiB2LnBhcmVudElkID09PSB0aGlzLnNlbGVjdGlvbnNbaV0uYXJ0Tm9kZUlkRGVjbyk7XHJcbiAgICAgICAgaWYgKHZhcmlhdGlvbikge1xyXG4gICAgICAgICAgZGVjby52YXJpYXRpb24gPSB2YXJpYXRpb247XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc2VsZWN0aW9uc1tpXS5kZWNvTm9kZSA9IGRlY287XHJcbiAgICB9XHJcbiAgICB0aGlzLl9pT25lLnNlbGVjdGlvbnNBbmREZWNvc0xpbmtlZC5uZXh0KCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jcmVhdGVDb25maWd1cmFibGVJdGVtKGluc3RhbmNlSWQ6IHN0cmluZywgbWV0YWRhdGE6IE1ldGFkYXRhKTogSXRlbSB7XHJcbiAgICAvLyBjb25zdCBmdXJuaXR1cmU6IEl0ZW0gPSB0aGlzLl9nZXRBY3RpdmVGdXJuaXR1cmUoaW5zdGFuY2VJZCk7XHJcbiAgICAvLyBjb25zdCBjbG9uZVNlbGVjdGlvbnMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuc2VsZWN0aW9ucykpO1xyXG4gICAgLy8gY2xvbmVTZWxlY3Rpb25zLmZvckVhY2gocyA9PiB7XHJcbiAgICAvLyAgIHMuaW1hZ2VEYXRhID0gdW5kZWZpbmVkO1xyXG4gICAgLy8gICBzLmltYWdlRGF0YUxhc3RBbnN3ZXIgPSB1bmRlZmluZWQ7XHJcbiAgICAvLyB9KTtcclxuICAgIC8vIGlmIChmdXJuaXR1cmUpIHtcclxuICAgIC8vICAgZnVybml0dXJlLm1ldGFkYXRhLmRlY29zID0gQXJyYXkuZnJvbSh0aGlzLl9pT25lLmRlY29Ob2Rlcyk7XHJcbiAgICAvLyAgIGZ1cm5pdHVyZS5tZXRhZGF0YS5zZWxlY3Rpb25zID0gY2xvbmVTZWxlY3Rpb25zO1xyXG4gICAgLy8gICBmdXJuaXR1cmUubWFya0ZvckRlbGV0aW9uQ2hpbGRyZW4oKTtcclxuICAgIC8vICAgcmV0dXJuIGZ1cm5pdHVyZTtcclxuICAgIC8vIH1cclxuICAgIGlmICghbWV0YWRhdGEucG9zaXRpb24pIHtcclxuICAgICAgbWV0YWRhdGEucG9zaXRpb24gPSB0aGlzLnN0YXJ0UG9zaXRpb24gfHwgZGVmYXVsdFBvc2l0aW9uO1xyXG4gICAgfVxyXG4gICAgaWYgKCFtZXRhZGF0YS5yb3RhdGlvbikge1xyXG4gICAgICBtZXRhZGF0YS5yb3RhdGlvbiA9IG1ldGFkYXRhLmRlZmF1bHQxODAgPyBkZWZhdWx0Um90YXRpb24gOiBuZXcgRXVsZXIoKTtcclxuICAgIH1cclxuICAgIC8vIElmIGl0ZW1UeXBlIGlzIGRpZmZlcmVudCBpbiBhcnRpY2xlIGNvbXBhcmVkIHRvIHNhdmVkIHZhbHVlIGluIHRoZSAuanNvbiwgdGhlIGl0ZW1UeXBlIGluIGFydGljbGUgaXMgYXBwbGllZFxyXG4gICAgLy8gbWV0YWRhdGEuaXRlbVR5cGUgPSB0aGlzLml0ZW1UeXBlICYmIHRoaXMuaXRlbVR5cGUgIT09IG1ldGFkYXRhLml0ZW1UeXBlID8gdGhpcy5pdGVtVHlwZSA6IG1ldGFkYXRhLml0ZW1UeXBlO1xyXG4gICAgY29uc3QgaXRlbUNvbnN0cnVjdG9yID0gRmFjdG9yeS5nZXRDbGFzcyh0aGlzLnN0YW5kQWxvbmUgPyBJdGVtVHlwZS5DdXN0b21GbG9vckdyb3VwIDogbWV0YWRhdGEuaXRlbVR5cGUpO1xyXG4gICAgY29uc3QgaXRlbSA9IG5ldyBpdGVtQ29uc3RydWN0b3IoXHJcbiAgICAgIG1ldGFkYXRhLFxyXG4gICAgICB1bmRlZmluZWQsIC8vIGJhc2Ugb24gZW1wdHkgb2JqZWN0XHJcbiAgICAgIHtcclxuICAgICAgICBtb3VzZU92ZXI6IHRoaXMubW91c2VPdmVyLFxyXG4gICAgICAgIG1vdXNlT2ZmOiB0aGlzLm1vdXNlT2ZmLFxyXG4gICAgICAgIGl0ZW1TZWxlY3RlZDogdGhpcy5zZWxlY3RJdGVtLFxyXG4gICAgICAgIGl0ZW1VbnNlbGVjdGVkOiB0aGlzLnVuU2VsZWN0SXRlbSxcclxuICAgICAgICBlbGVtZW50U2VsZWN0ZWQ6IHRoaXMuc2VsZWN0RWxlbWVudCxcclxuICAgICAgICBlbGVtZW50VW5zZWxlY3RlZDogdGhpcy51blNlbGVjdEVsZW1lbnQsXHJcbiAgICAgICAgY29uZmlndXJpbmdDaGFuZ2VkOiB0aGlzLmNoYW5nZUNvbmZpZ3VyZU1vZGUsXHJcbiAgICAgICAgY2hpbGRFbGVtZW50UG9zaXRpb25DaGFuZ2VkSGFuZGxlcjogdGhpcy5tb3ZlQ2hpbGRFbGVtZW50LFxyXG4gICAgICAgIGNoaWxkRWxlbWVudFBsYWNlSGFuZGxlcjogdGhpcy5wbGFjZUNoaWxkRWxlbWVudFxyXG4gICAgICAgIC8qXHJcbiAgICAgICAgICAgICAgICBjaGlsZEVsZW1lbnRQb3NpdGlvbkNoYW5nZWRIYW5kbGVyOiBhZGp1c3RhYmxlID8gdGhpcy5tb3ZlQ2hpbGRFbGVtZW50IDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgY2hpbGRFbGVtZW50UGxhY2VIYW5kbGVyOiBhZGp1c3RhYmxlID8gdGhpcy5wbGFjZUNoaWxkRWxlbWVudCA6IHVuZGVmaW5lZFxyXG4gICAgICAgICovXHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgICBpdGVtLmNhbkRlbGV0ZSA9ICF0aGlzLnN0YW5kQWxvbmU7XHJcbiAgICBpdGVtLmNhbkNvcHkgPSAhdGhpcy5zdGFuZEFsb25lO1xyXG4gICAgaXRlbS5hbGx3YXlzQ29uZmlndXJlTW9kZSA9IHRoaXMuc3RhbmRBbG9uZTtcclxuICAgIGl0ZW0uaGlnaExpZ2h0RGlzYWJsZWQgPSAhdGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLm9wdGlvbnMudXNlU3RhbmRhbG9uZUhpZ2hMaWdodDtcclxuICAgIGl0ZW0udGVtcE9iamVjdCA9IHRydWU7XHJcbiAgICBpdGVtLm5hbWUgPSBtZXRhZGF0YS5pdGVtTmFtZSArICdfY2xvbmUnO1xyXG4gICAgaXRlbS52aXNpYmxlID0gZmFsc2U7XHJcbiAgICB0aGlzLl9pdGVtU2VydmljZS5hZGRJdGVtKGl0ZW0pO1xyXG4gICAgLy8gdGhpcy5fdXBzZXJ0RnVybml0dXJlKG1ldGFkYXRhLml0ZW1JZCwge0JyYW5kSWRlbnRpZmllcjogbWV0YWRhdGEuaXRlbUlkZW50aWZpZXJ9LCBpdGVtKTtcclxuICAgIHJldHVybiBpdGVtO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY3JlYXRlUG9zaXRpb25BbmltYXRpb24ob2JqZWN0OiBPYmplY3QzRCwgZnJvbTogVmVjdG9yMywgdG86IFZlY3RvcjMsIGVhc2luZzogVFdFRU4uRWFzaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCB0d2VlbkZyb206IFZlY3RvcjMgPSBuZXcgVmVjdG9yMygpLmNvcHkoZnJvbSk7XHJcbiAgICBjb25zdCB0d2VlbiA9IG5ldyBUV0VFTi5Ud2Vlbih0d2VlbkZyb20pXHJcbiAgICAgIC50byh0bywgMTAwMClcclxuICAgICAgLmVhc2luZyhlYXNpbmcpXHJcbiAgICAgIC5vblVwZGF0ZSgoKSA9PiB7XHJcbiAgICAgICAgb2JqZWN0LnBvc2l0aW9uLmNvcHkodHdlZW5Gcm9tKTtcclxuICAgICAgICB0aGlzLl9zY2VuZVNlcnZpY2UubmVlZHNSZW5kZXIgPSB0cnVlO1xyXG4gICAgICB9KTtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHR3ZWVuLm9uQ29tcGxldGUocmVzb2x2ZS5iaW5kKHRoaXMsIHR3ZWVuKSkub25TdG9wKHJlamVjdCkuc3RhcnQoKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9hbmltYXRlQ2hhbmdlcyhmdXJuaXR1cmU6IEl0ZW0sIGNoYW5nZXM6IENoYW5nZXNJbnRlcmZhY2VbXSk6IFByb21pc2U8dm9pZFtdPiB7XHJcbiAgICAvLyBpdCdzIGNocmlzdG1hc3NzXHJcbiAgICBjb25zdCBhbmltYXRpb25zOiBQcm9taXNlPHZvaWQ+W10gPSBbXTtcclxuICAgIGlmIChmdXJuaXR1cmUgaW5zdGFuY2VvZiBDdXN0b21GbG9vckl0ZW0pIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGFuZ2VzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgZWFzaW5nOiBUV0VFTi5FYXNpbmcgPSAhY2hhbmdlc1tpXS5vbGRQb3NpdGlvbiA/IFRXRUVOLkVhc2luZy5FeHBvbmVudGlhbC5PdXQgOlxyXG4gICAgICAgICAgKCFjaGFuZ2VzW2ldLm5ld1Bvc2l0aW9uID8gVFdFRU4uRWFzaW5nLkV4cG9uZW50aWFsLk91dCA6IFRXRUVOLkVhc2luZy5FeHBvbmVudGlhbC5Jbk91dCk7XHJcbiAgICAgICAgY29uc3QgZnJvbTogVmVjdG9yMyA9XHJcbiAgICAgICAgICBjaGFuZ2VzW2ldLm9sZFBvc2l0aW9uID8gbmV3IFZlY3RvcjMoKS5jb3B5KGNoYW5nZXNbaV0ub2xkUG9zaXRpb24pIDogbmV3IFZlY3RvcjMoKS5jb3B5KGNoYW5nZXNbaV0ubmV3UG9zaXRpb24pLnNldFkoMTApO1xyXG4gICAgICAgIGNvbnN0IHRvOiBWZWN0b3IzID1cclxuICAgICAgICAgIGNoYW5nZXNbaV0ubmV3UG9zaXRpb24gPyBuZXcgVmVjdG9yMygpLmNvcHkoY2hhbmdlc1tpXS5uZXdQb3NpdGlvbikgOiBuZXcgVmVjdG9yMygpLmNvcHkoY2hhbmdlc1tpXS5vbGRQb3NpdGlvbikuc2V0WSgxMCk7XHJcbiAgICAgICAgY29uc3Qgb2JqOiBPYmplY3QzRCA9IGZ1cm5pdHVyZS5nZXRPYmplY3RCeU5hbWUoY2hhbmdlc1tpXS5uYW1lKTtcclxuICAgICAgICBpZiAoIWZyb20uZXF1YWxzKHRvKSkge1xyXG4gICAgICAgICAgYW5pbWF0aW9ucy5wdXNoKFxyXG4gICAgICAgICAgICB0aGlzLl9jcmVhdGVQb3NpdGlvbkFuaW1hdGlvbihvYmosIGZyb20sIHRvLCBlYXNpbmcpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGF3YWl0IFByb21pc2UuYWxsKGFuaW1hdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfcmVwbGFjZUN1cnJlbnRJdGVtKG5ld0l0ZW06IEl0ZW0sIG1ldGFkYXRhOiBNZXRhZGF0YSwgYW5pbWF0ZTogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTxJdGVtPiB7XHJcbiAgICBjb25zdCBmdXJuaXR1cmU6IEl0ZW0gPSB0aGlzLl9nZXRBY3RpdmVGdXJuaXR1cmUobWV0YWRhdGEuaXRlbUlkKTtcclxuICAgIGNvbnN0IGNsb25lU2VsZWN0aW9ucyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5zZWxlY3Rpb25zKSk7XHJcbiAgICBjbG9uZVNlbGVjdGlvbnMuZm9yRWFjaChzID0+IHtcclxuICAgICAgcy5pbWFnZURhdGEgPSB1bmRlZmluZWQ7XHJcbiAgICAgIHMuaW1hZ2VEYXRhTGFzdEFuc3dlciA9IHVuZGVmaW5lZDtcclxuICAgICAgaWYgKHMuYWRkYWJsZXMpIHtcclxuICAgICAgICBzLmFkZGFibGVzLmZvckVhY2goYSA9PiB7XHJcbiAgICAgICAgICBhLmltYWdlRGF0YSA9IHVuZGVmaW5lZDtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBpZiAoZnVybml0dXJlKSB7XHJcbiAgICAgIGZ1cm5pdHVyZS5tZXRhZGF0YS5kZWNvcyA9IEFycmF5LmZyb20odGhpcy5faU9uZS5kZWNvTm9kZXMpO1xyXG4gICAgICBmdXJuaXR1cmUubWV0YWRhdGEuc2VsZWN0aW9ucyA9IGNsb25lU2VsZWN0aW9ucztcclxuICAgICAgaWYgKGZ1cm5pdHVyZSBpbnN0YW5jZW9mIEN1c3RvbVdhbGxGbG9vckl0ZW0pIHtcclxuICAgICAgICAobmV3SXRlbSBhcyBDdXN0b21XYWxsRmxvb3JJdGVtKS5jdXJyZW50V2FsbCA9IGZ1cm5pdHVyZS5jdXJyZW50V2FsbDtcclxuICAgICAgfVxyXG4gICAgICBuZXdJdGVtLnVwZGF0ZVBpdm90KCk7XHJcbiAgICAgIGNvbnN0IGNoYW5nZXM6IENoYW5nZXNJbnRlcmZhY2VbXSA9IGZ1cm5pdHVyZSBpbnN0YW5jZW9mIEN1c3RvbUZsb29ySXRlbSA/IE9iamVjdFV0aWxzLkdldENoYW5nZXMoZnVybml0dXJlLmNoaWxkcmVuLCBuZXdJdGVtLmNoaWxkcmVuKSA6IFtdO1xyXG4gICAgICAvLyBhbmltYXRlIHJlbW92ZWQgaXRlbXNcclxuICAgICAgY29uc3QgcmVtb3ZlZENoYW5nZXM6IENoYW5nZXNJbnRlcmZhY2VbXSA9IGNoYW5nZXMuZmlsdGVyKGMgPT4gIWMubmV3UG9zaXRpb24pO1xyXG4gICAgICBpZiAoYW5pbWF0ZSAmJiByZW1vdmVkQ2hhbmdlcyAmJiByZW1vdmVkQ2hhbmdlcy5sZW5ndGggPiAwKSB7IC8vIGFuaW1hdGUgY2hhbmdlcyB0byB0aGUgbW9kZWxcclxuICAgICAgICBhd2FpdCB0aGlzLl9hbmltYXRlQ2hhbmdlcyhmdXJuaXR1cmUsIHJlbW92ZWRDaGFuZ2VzKTtcclxuICAgICAgfVxyXG4gICAgICAvLyByZW1vdmUgY2hpbGRyZW4gZnJvbSBmdXJuaXR1cmVcclxuICAgICAgZnVybml0dXJlLmNsZWFyQ2hpbGRyZW4oKTtcclxuICAgICAgLy8gYWRkIG5ldyBjaGlsZHJlbiB0byBmdXJuaXR1cmVcclxuICAgICAgbmV3SXRlbS5jaGlsZHJlbi5tYXAoYyA9PiBmdXJuaXR1cmUuYWRkQ2hpbGQoYykpO1xyXG4gICAgICB0aGlzLl9pdGVtU2VydmljZS5yZW1vdmVJdGVtKG5ld0l0ZW0sIGZhbHNlLCBmYWxzZSk7XHJcbiAgICAgIC8vIGFuaW1hdGUgKG5ldykgaXRlbXNcclxuICAgICAgY29uc3Qgb3RoZXJDaGFuZ2VzOiBDaGFuZ2VzSW50ZXJmYWNlW10gPSBjaGFuZ2VzLmZpbHRlcihjID0+IGMubmV3UG9zaXRpb24pO1xyXG4gICAgICBpZiAoYW5pbWF0ZSAmJiBvdGhlckNoYW5nZXMgJiYgb3RoZXJDaGFuZ2VzLmxlbmd0aCA+IDApIHsgLy8gYW5pbWF0ZSBjaGFuZ2VzIHRvIHRoZSBtb2RlbFxyXG4gICAgICAgIGF3YWl0IHRoaXMuX2FuaW1hdGVDaGFuZ2VzKGZ1cm5pdHVyZSwgb3RoZXJDaGFuZ2VzKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZnVybml0dXJlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbmV3SXRlbS52aXNpYmxlID0gdHJ1ZTtcclxuICAgICAgbmV3SXRlbS50ZW1wT2JqZWN0ID0gZmFsc2U7XHJcbiAgICAgIG5ld0l0ZW0ubmFtZSA9IG1ldGFkYXRhLml0ZW1OYW1lO1xyXG4gICAgICB0aGlzLl91cHNlcnRGdXJuaXR1cmUobWV0YWRhdGEuaXRlbUlkLCB7QnJhbmRJZGVudGlmaWVyOiBtZXRhZGF0YS5pdGVtSWRlbnRpZmllcn0sIG5ld0l0ZW0pO1xyXG4gICAgICByZXR1cm4gbmV3SXRlbTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBtb3VzZU92ZXIgPSAoKSA9PiB7XHJcbiAgICB0aGlzLmlzTW91c2VPdmVyT2JqZWN0ID0gdHJ1ZTtcclxuICB9O1xyXG5cclxuICBwdWJsaWMgbW91c2VPZmYgPSAoKSA9PiB7XHJcbiAgICB0aGlzLmlzTW91c2VPdmVyT2JqZWN0ID0gZmFsc2U7XHJcbiAgfTtcclxuXHJcbiAgcHVibGljIHNlbGVjdEl0ZW0gPSAobWVzaDogTWVzaCkgPT4ge1xyXG4gICAgLy8gdGhpcy5hY3RpdmVJbnN0YW5jZSA9IG1lc2gudXNlckRhdGEuaXRlbUlkO1xyXG4gIH07XHJcblxyXG4gIHB1YmxpYyB1blNlbGVjdEl0ZW0gPSAoKSA9PiB7XHJcbiAgICAvLyB0aGlzLnNob3dMaXRlU2VsZWN0b3IgPSBmYWxzZTtcclxuICAgIC8vIHRoaXMuc2hvd1NlbGVjdGlvbnMgPSBmYWxzZTtcclxuICB9O1xyXG5cclxuICBwdWJsaWMgc2VsZWN0RWxlbWVudCA9IChlbGVtZW50OiBNZXNoLCBtb3VzZVBvczogVmVjdG9yMykgPT4ge1xyXG4gICAgdGhpcy5fYWN0aXZlQ2hpbGRFbGVtZW50ID0gZWxlbWVudDtcclxuICAgIGlmIChlbGVtZW50LnBhcmVudCBpbnN0YW5jZW9mIEN1c3RvbU9iamVjdDNEKSB7XHJcbiAgICAgIHRoaXMuX29yaWdpbmFsRWxlbWVudFBvc2l0aW9uLmNvcHkoZWxlbWVudC5wYXJlbnQucG9zaXRpb24pO1xyXG4gICAgICAvLyBpZiAodGhpcy5fY3VycmVudEN1c3RvbUZsb29yR3JvdXAuYWRqdXN0YWJsZSkge1xyXG4gICAgICBpZiAodGhpcy5faXNNb3ZlYWJsZU9iamVjdChlbGVtZW50LnBhcmVudCkpIHtcclxuICAgICAgICBjb25zdCBjb25uZWN0b3I6IGFueSA9IGVsZW1lbnQucGFyZW50LmNoaWxkcmVuLmZpbmQoYyA9PiBjLm5hbWUudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdjXycpID4gLTEpO1xyXG4gICAgICAgIGlmIChjb25uZWN0b3IuY29ubmVjdGVkVG8pIHtcclxuICAgICAgICAgIGNvbnN0IGJhc2VFbGVtZW50OiBPYmplY3QzRCA9IDxDdXN0b21PYmplY3QzRD50aGlzLl9jdXJyZW50Q3VzdG9tRmxvb3JHcm91cC5nZXRPYmplY3RCeU5hbWUoY29ubmVjdG9yLmNvbm5lY3RlZFRvKTtcclxuICAgICAgICAgIHRoaXMuYmFzZUVsZW1lbnROb2RlSWQgPSBiYXNlRWxlbWVudC51c2VyRGF0YSAmJiBiYXNlRWxlbWVudC51c2VyRGF0YS5zZWxlY3Rpb24gPyBiYXNlRWxlbWVudC51c2VyRGF0YS5zZWxlY3Rpb24ubm9kZUlkIDogMDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMudG9nZ2xlU2VsZWN0ZWRFbGVtZW50Lm5leHQoZWxlbWVudCk7XHJcbiAgfTtcclxuXHJcbiAgcHVibGljIHVuU2VsZWN0RWxlbWVudCA9ICgpID0+IHtcclxuICAgIHRoaXMuX2FjdGl2ZUNoaWxkRWxlbWVudCA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMudG9nZ2xlU2VsZWN0ZWRFbGVtZW50Lm5leHQodW5kZWZpbmVkKTtcclxuICB9O1xyXG5cclxuICBwdWJsaWMgbW92ZUNoaWxkRWxlbWVudCA9IChlbGVtZW50OiBDdXN0b21PYmplY3QzRCwgcG9zOiBWZWN0b3IzKSA9PiB7XHJcbiAgICBjb25zdCB3b3JsZFRvTG9jYWxQb3M6IFZlY3RvcjMgPSB0aGlzLl9jdXJyZW50Q3VzdG9tRmxvb3JHcm91cC53b3JsZFRvTG9jYWwocG9zLmNsb25lKCkpO1xyXG4gICAgdGhpcy5fbW92ZUNoaWxkRWxlbWVudFRvUG9zaXRpb24oZWxlbWVudCwgd29ybGRUb0xvY2FsUG9zKTtcclxuICB9O1xyXG5cclxuICBwdWJsaWMgcGxhY2VDaGlsZEVsZW1lbnQgPSBhc3luYyAoZWxlbWVudDogQ3VzdG9tT2JqZWN0M0QpID0+IHtcclxuICAgIGlmICh0aGlzLl9pc01vdmVhYmxlT2JqZWN0KGVsZW1lbnQpICYmIChlbGVtZW50IGFzIGFueSkubW92ZWQpIHtcclxuICAgICAgY29uc3QgYmFzZUVsZW1lbnQ6IE9iamVjdDNEW10gPVxyXG4gICAgICAgIHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwLmdldE9iamVjdHNCeVVzZXJEYXRhUHJvcCgnc2VsZWN0aW9uJywgJ25vZGVJZCcsIHRoaXMuYmFzZUVsZW1lbnROb2RlSWQpO1xyXG4gICAgICAvLyB1c2UgaW5zdGFuY2VJZCBmcm9tIHBhcmVudFxyXG4gICAgICBjb25zdCBpdGVtOiBJdGVtID0gT2JqZWN0VXRpbHMuR2V0UGFyZW50SXRlbShlbGVtZW50KTtcclxuICAgICAgaWYgKGl0ZW0pIHtcclxuICAgICAgICBjb25zdCBjb25uZWN0b3I6IHN0cmluZyA9XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLl9lbGVtZW50U2VydmljZS5wbGFjZUVsZW1lbnRPbkNvbm5lY3RvcihcclxuICAgICAgICAgICAgaXRlbS5tZXRhZGF0YS5pdGVtSWQsIGVsZW1lbnQsIGJhc2VFbGVtZW50Lmxlbmd0aCA+IDAgPyBiYXNlRWxlbWVudFswXSA6IG51bGwpO1xyXG4gICAgICAgIHRoaXMuX3NhdmVFbGVtZW50Q29ubmVjdG9yKGVsZW1lbnQsIGNvbm5lY3Rvcik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9O1xyXG5cclxuICBwdWJsaWMgY2hhbmdlQ29uZmlndXJlTW9kZSA9IGFzeW5jIChtZXRhZGF0YTogTWV0YWRhdGEsIGNvbmZpZ3VyaW5nOiBib29sZWFuKSA9PiB7XHJcbiAgICB0aGlzLmNvbmZpZ3VyZU1vZGVDaGFuZ2VkLm5leHQoe21ldGFkYXRhOiBtZXRhZGF0YSwgY29uZmlndXJpbmc6IGNvbmZpZ3VyaW5nfSk7XHJcbiAgfTtcclxuXHJcbiAgcHVibGljIGRyYWdDb25uZWN0b3IgPSBhc3luYyAoY29ubmVjdG9yOiBDdXN0b21NZXNoLCBwb3M6IFZlY3RvcjMpID0+IHtcclxuICAgIHRoaXMuX3Jlc2l6ZVNlcnZpY2UuZHJhZ0Nvbm5lY3RvclRvTmV3UG9zaXRpb24oY29ubmVjdG9yLCBwb3MpO1xyXG4gIH07XHJcblxyXG4gIHB1YmxpYyBjYW5jZWxDb25maWd1cmluZ0N1cnJlbnRJbnN0YW5jZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9jdXJyZW50Q3VzdG9tRmxvb3JHcm91cCkge1xyXG4gICAgICB0aGlzLl9jdXJyZW50Q3VzdG9tRmxvb3JHcm91cC5jb25maWd1cmluZyA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaXNNb3ZlYWJsZU9iamVjdChvYmo6IE9iamVjdDNEKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gb2JqLnVzZXJEYXRhICYmIG9iai51c2VyRGF0YS5zZWxlY3Rpb24gJiYgb2JqLnVzZXJEYXRhLnNlbGVjdGlvbi5oZGVjb1Bvc2l0aW9uaW5nID09PSBIZGVjb1Bvc2l0aW9uaW5nLlZhcmlhYmxlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfYWRkRWxlbWVudE9uQ29ubmVjdG9yKGN1cnJlbnRJdGVtOiBJdGVtLCBlbGVtZW50OiBPYmplY3QzRCwgY29ubmVjdG9yOiBzdHJpbmcsIGNvbm5lY3RlZE5vZGVJZDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAvLyBjb25zdCBjb246IE9iamVjdDNEID0gdGhpcy5fY3VycmVudEN1c3RvbUZsb29yR3JvdXAuZ2V0T2JqZWN0QnlOYW1lKGNvbm5lY3Rvci5jb25uZWN0b3IpO1xyXG4gICAgLy8gaWYgKGNvbikge2VcclxuICAgIC8vIGNvbnN0IHBvczogVmVjdG9yMyA9IG5ldyBWZWN0b3IzKCkuY29weShjb24ucG9zaXRpb24pO1xyXG4gICAgLy8gY29uLmxvY2FsVG9Xb3JsZChwb3MpO1xyXG4gICAgY29uc3QgY29ubmVjdG9yRnJvbUVsZW1lbnQgPSBjdXJyZW50SXRlbS5jb25uZWN0b3JGcm9tRWxlbWVudChlbGVtZW50LnVzZXJEYXRhLnNlbGVjdGlvbik7XHJcbiAgICBjb25zdCBpZEZyb21CYXNlRWxlbWVudDogbnVtYmVyID0gY29ubmVjdGVkTm9kZUlkID8gY29ubmVjdGVkTm9kZUlkIDogY29ubmVjdG9yRnJvbUVsZW1lbnQuY29ubmVjdGVkTm9kZUlkO1xyXG4gICAgY29uc3QgYmFzZUVsZW1lbnQ6IE9iamVjdDNEW10gPSBjdXJyZW50SXRlbS5nZXRPYmplY3RzQnlVc2VyRGF0YVByb3AoJ3NlbGVjdGlvbicsICdub2RlSWQnLCBpZEZyb21CYXNlRWxlbWVudCk7XHJcblxyXG4gICAgY29uc3QgaXRlbTogSXRlbSA9IE9iamVjdFV0aWxzLkdldFBhcmVudEl0ZW0oZWxlbWVudCk7XHJcbiAgICBpZiAoaXRlbSkge1xyXG4gICAgICBjb25zdCBjb25uOiBzdHJpbmcgPVxyXG4gICAgICAgIGF3YWl0IHRoaXMuX2VsZW1lbnRTZXJ2aWNlLnBsYWNlRWxlbWVudE9uQ29ubmVjdG9yKFxyXG4gICAgICAgICAgaXRlbS5tZXRhZGF0YS5pdGVtSWQsIGVsZW1lbnQsIGJhc2VFbGVtZW50Lmxlbmd0aCA+IDAgPyBiYXNlRWxlbWVudFswXSA6IG51bGwsIGZhbHNlLCBjb25uZWN0b3IsIGZhbHNlKTtcclxuICAgICAgdGhpcy5fc2F2ZUVsZW1lbnRDb25uZWN0b3IoZWxlbWVudCwgY29ubik7XHJcbiAgICB9XHJcbiAgICAvLyB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zYXZlRWxlbWVudENvbm5lY3RvcihlbGVtZW50OiBPYmplY3QzRCwgY29ubmVjdG9yOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQudXNlckRhdGEgJiYgZWxlbWVudC51c2VyRGF0YS5zZWxlY3Rpb24pIHtcclxuICAgICAgdGhpcy5fY3VycmVudEN1c3RvbUZsb29yR3JvdXAudXBkYXRlRWxlbWVudENvbm5lY3RvcihlbGVtZW50LnVzZXJEYXRhLnNlbGVjdGlvbiwgY29ubmVjdG9yLCB0aGlzLmJhc2VFbGVtZW50Tm9kZUlkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBwYXJhbSBlbGVtZW50IFRoZSBlbGVtZW50IHRvIG1vdmVcclxuICAgKiBAcGFyYW0gcG9zIFRoZSBsb2NhbCBwb3NpdGlvblxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfbW92ZUNoaWxkRWxlbWVudFRvUG9zaXRpb24oZWxlbWVudDogT2JqZWN0M0QsIHBvczogVmVjdG9yMyk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX2lzTW92ZWFibGVPYmplY3QoZWxlbWVudCkpIHtcclxuICAgICAgY29uc3Qgd29ybGRUb0xvY2FsUG9zOiBWZWN0b3IzID0gbmV3IFZlY3RvcjMoKS5jb3B5KHBvcykuYWRkKHRoaXMuX29yaWdpbmFsRWxlbWVudFBvc2l0aW9uKTtcclxuICAgICAgY29uc3QgYmFzZUVsZW1lbnQ6IE9iamVjdDNEW10gPVxyXG4gICAgICAgIHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwLmdldE9iamVjdHNCeVVzZXJEYXRhUHJvcCgnc2VsZWN0aW9uJywgJ25vZGVJZCcsIHRoaXMuYmFzZUVsZW1lbnROb2RlSWQpO1xyXG4gICAgICBjb25zdCBpdGVtOiBJdGVtID0gT2JqZWN0VXRpbHMuR2V0UGFyZW50SXRlbShlbGVtZW50KTtcclxuICAgICAgaWYgKGl0ZW0pIHtcclxuICAgICAgICB0aGlzLl9lbGVtZW50U2VydmljZS5tb3ZlRWxlbWVudFRvTmV3UG9zaXRpb24oXHJcbiAgICAgICAgICBpdGVtLm1ldGFkYXRhLml0ZW1JZCwgZWxlbWVudCwgd29ybGRUb0xvY2FsUG9zLCBiYXNlRWxlbWVudC5sZW5ndGggPiAwID8gYmFzZUVsZW1lbnRbMF0gOiBudWxsKTtcclxuICAgICAgICAvLyB0aGlzLl9zYXZlRWxlbWVudENvbm5lY3RvcihlbGVtZW50LCBwb3MpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZXNldCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3BsYWNlZEFkanVzdGFibGVzLmxlbmd0aCA9IDA7XHJcbiAgICB0aGlzLl9wbGFjZWRBZGRhYmxlcy5sZW5ndGggPSAwO1xyXG4gICAgdGhpcy5fYWRqdXN0YWJsZXMubGVuZ3RoID0gMDtcclxuICAgIHRoaXMuX2FkZGFibGVzLmxlbmd0aCA9IDA7XHJcbiAgICAvLyB0aGlzLl9wcmVwYXJlVGhlU2VsZWN0aW9ucygpO1xyXG4gICAgLy8gdG9kbzogY2hlY2sgdGhpc1xyXG4gICAgLy8gdGhpcy5fZWxlbWVudFNlcnZpY2UucmVtb3ZlRWxlbWVudCh0aGlzLmFjdGl2ZUluc3RhbmNlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIG1hdGVyaWFsSWQgb2YgdGhlIHBhcmVudCB1cCB0aGUgdHJlZSB1bnRpbCBwcmVzZW50aW9ubGV2ZWwgMSBpcyByZWFjaGVkXHJcbiAgICogQHBhcmFtIGlkXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBwcml2YXRlIF9nZXRNYXRlcmlhbElkRnJvbVBhcmVudChpZDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGlkeDogbnVtYmVyID0gdGhpcy5zZWxlY3Rpb25zLmZpbmRJbmRleChzID0+IHMubm9kZSA9PT0gaWQpO1xyXG4gICAgbGV0IGN1cnJlbnRMZXZlbDogbnVtYmVyID0gOTk5O1xyXG4gICAgaWYgKGlkeCA+IC0xKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSBpZHg7IGkgPiAwOyBpLS0pIHtcclxuICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGlvbnNbaV07XHJcbiAgICAgICAgaWYgKHNlbGVjdGlvbi5wcmVzZW50YXRpb25MZXZlbCA+PSBjdXJyZW50TGV2ZWwpIHtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjdXJyZW50TGV2ZWwgPSBzZWxlY3Rpb24ucHJlc2VudGF0aW9uTGV2ZWw7XHJcbiAgICAgICAgaWYgKHNlbGVjdGlvbi5oZGVjb0dhbWVPYmplY3QpIHtcclxuICAgICAgICAgIHJldHVybiBzZWxlY3Rpb24uaGRlY29HYW1lT2JqZWN0O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3ByZXBhcmVUaGVTZWxlY3Rpb25zKGluc3RhbmNlSWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3Qgc2VsZWN0aW9ucyA9IHRoaXMuc2VsZWN0aW9ucy5zbGljZSgpO1xyXG4gICAgY29uc3Qgc2VsZWN0aW9uT2ZBcnRpY2xlOiBTZWxlY3Rpb24gPSBzZWxlY3Rpb25zLmZpbmQocyA9PiBzLm5vZGVUeXBlID09PSBOb2RlVHlwZS5BcnRpY2xlKTtcclxuICAgIGNvbnN0IGFkanVzdGFibGVTZWxlY3Rpb25zOiBTZWxlY3Rpb25bXSA9IHNlbGVjdGlvbnMuZmlsdGVyKHMgPT4gcy5hZGRBZGp1c3QgPT09ICcyJyk7XHJcbiAgICBjb25zdCBpc0FydGljbGVXaXRoTWF0ZXJpYWw6IGJvb2xlYW4gPVxyXG4gICAgICBhZGp1c3RhYmxlU2VsZWN0aW9ucy5sZW5ndGggPT09IDAgJiZcclxuICAgICAgc2VsZWN0aW9uT2ZBcnRpY2xlLmdhbWVPYmplY3QgJiZcclxuICAgICAgc2VsZWN0aW9uT2ZBcnRpY2xlLmdhbWVPYmplY3QubGVuZ3RoID4gMDtcclxuICAgIC8vIGdldCBnZW5lcmljIHZhcmlhdGlvbnNcclxuICAgIGNvbnN0IGdsb2JhbFZhcmlhdGlvbnM6IERlY29Ob2RlW10gPSB0aGlzLnNlbGVjdGlvbnNcclxuICAgICAgLmZpbHRlcihzID0+IChzLmdlbmVyaWMgfHwgYWRqdXN0YWJsZVNlbGVjdGlvbnMubGVuZ3RoID09PSAxKSAmJiAocy5kZWNvTm9kZSBhcyBhbnkpLnZhcmlhdGlvbiAmJiAhcy5kZWNvTm9kZS50eXBlKVxyXG4gICAgICAubWFwKCh2YWx1ZTogU2VsZWN0aW9uLCBpbmRleDogbnVtYmVyLCBhcnJheTogU2VsZWN0aW9uW10pID0+IHtcclxuICAgICAgICAvLyBmaW5kIHNlbGVjdGlvbiBvZiB2YXJpYXRpb25cclxuICAgICAgICBjb25zdCBzZWw6IFNlbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9ucy5maW5kKHMgPT4gcy5hcnROb2RlSWREZWNvID09PSAodmFsdWUuZGVjb05vZGUgYXMgYW55KS52YXJpYXRpb24ucGFyZW50SWQpO1xyXG4gICAgICAgIGlmIChzZWwpIHtcclxuICAgICAgICAgICh2YWx1ZS5kZWNvTm9kZSBhcyBhbnkpLnZhcmlhdGlvbi5zdXBwbGllckFydGljbGVOciA9IHNlbC5zdXBwbGllckFydGljbGVOcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgKHZhbHVlLmRlY29Ob2RlIGFzIGFueSkudmFyaWF0aW9uLm1hdGVyaWFsSWQgPSB0aGlzLl9nZXRNYXRlcmlhbElkRnJvbVBhcmVudCh2YWx1ZS5ub2RlKTtcclxuICAgICAgICByZXR1cm4gKHZhbHVlLmRlY29Ob2RlIGFzIGFueSkudmFyaWF0aW9uO1xyXG4gICAgICB9KTtcclxuICAgIC8vIGNvbW1lbnRlZCBvdXQgZm9yIHRoZSBtb21lbnRcclxuICAgIC8vIGdsb2JhbFZhcmlhdGlvbnMuZm9yRWFjaChnID0+IHtcclxuICAgIC8vICAgY29uc3QgcGFyZW50SWR4ID0gc2VsZWN0aW9ucy5maW5kSW5kZXgocyA9PiBzLmRlY29Ob2RlICYmIHMuZGVjb05vZGUuaWQgPT09IGcucGFyZW50SWQpO1xyXG4gICAgLy8gICBpZiAocGFyZW50SWR4KSB7IC8vIHJlbW92ZSBwYXJlbnQgc2VsZWN0aW9uXHJcbiAgICAvLyAgICAgc2VsZWN0aW9ucy5zcGxpY2UocGFyZW50SWR4LCAxKTtcclxuICAgIC8vICAgfVxyXG4gICAgLy8gICBjb25zdCBpZHggPSBzZWxlY3Rpb25zLmZpbmRJbmRleChzID0+IHMuZGVjb05vZGUgJiYgcy5kZWNvTm9kZS5pZCA9PT0gZy5pZCk7XHJcbiAgICAvLyAgIGlmIChpZHgpIHsgLy8gbW92ZSBnZW5lcmljIHZhcmlhdGlvbnMgdG8gdG9wXHJcbiAgICAvLyAgICAgY29uc3Qgc2VsZWN0aW9uID0gc2VsZWN0aW9uc1tpZHhdO1xyXG4gICAgLy8gICAgIHNlbGVjdGlvbnMuc3BsaWNlKGlkeCwgMSk7XHJcbiAgICAvLyAgICAgc2VsZWN0aW9ucy51bnNoaWZ0KHNlbGVjdGlvbik7XHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH0pO1xyXG5cclxuICAgIGNvbnN0IHVzZWRWYXJpYXRpb25zOiBGdXJuaXR1cmVQYXJ0VmFyaWF0aW9uW10gPSBbXTtcclxuICAgIGxldCBnbG9iYWxWYXJpYXRpb25zUmV3cml0ZTogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgY29uc3QgbGVuOiBudW1iZXIgPSBzZWxlY3Rpb25zLmxlbmd0aDtcclxuICAgIGxldCBsYXN0QWRkZWQ6IFNlbGVjdGlvbjtcclxuICAgIGxldCBsYXN0QWRqdXN0YWJsZTogU2VsZWN0aW9uO1xyXG4gICAgbGV0IG5ld1BhcnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGxldCBwcmV2aW91c1ByZXNMZXZlbDogbnVtYmVyID0gLTE7XHJcbiAgICBsZXQgcG9zaXRpb25pbmc6IGFueTtcclxuICAgIGxldCBvcHRpb25UZXh0OiBzdHJpbmc7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGlvbjogU2VsZWN0aW9uID0gc2VsZWN0aW9uc1tpXTtcclxuICAgICAgaWYgKHNlbGVjdGlvbi5wcmVzZW50YXRpb25MZXZlbCA9PT0gMSkge1xyXG4gICAgICAgIHBvc2l0aW9uaW5nID0gc2VsZWN0aW9uLmhkZWNvUG9zaXRpb25pbmc7XHJcbiAgICAgICAgb3B0aW9uVGV4dCA9IHNlbGVjdGlvbi5xdWVzdGlvbjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoc2VsZWN0aW9uLnByZXNlbnRhdGlvbkxldmVsID4gcHJldmlvdXNQcmVzTGV2ZWwpIHtcclxuICAgICAgICBzZWxlY3Rpb24uaGRlY29Qb3NpdGlvbmluZyA9IHNlbGVjdGlvbi5oZGVjb1Bvc2l0aW9uaW5nIHx8IHBvc2l0aW9uaW5nO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChzZWxlY3Rpb24uZGVjb05vZGUpIHtcclxuICAgICAgICBpZiAoc2VsZWN0aW9uLmRlY29Ob2RlLnR5cGUgPT09IERlY29Ob2RlVHlwZS5WYXJpYXRpb24pIHtcclxuICAgICAgICAgIGNvbnN0IGRlY29Ob2RlID0gc2VsZWN0aW9uLmRlY29Ob2RlO1xyXG4gICAgICAgICAgKGRlY29Ob2RlIGFzIGFueSkub3B0aW9uVGV4dCA9IG9wdGlvblRleHQ7XHJcbiAgICAgICAgICAvLyBmaW5kIHNlbGVjdGlvbiBvZiB2YXJpYXRpb24gYW5kIHNldCBtYXRlcmlhbElkIGluIGNhc2Ugb2YgbXVsdGltYXRlcmlhbFxyXG4gICAgICAgICAgKGRlY29Ob2RlIGFzIGFueSkubWF0ZXJpYWxJZCA9IHRoaXMuX2dldE1hdGVyaWFsSWRGcm9tUGFyZW50KGRlY29Ob2RlLm5vZGVJZCk7XHJcbiAgICAgICAgICBpZiAobGFzdEFkZGVkKSB7XHJcbiAgICAgICAgICAgIGlmIChuZXdQYXJ0KSB7XHJcbiAgICAgICAgICAgICAgaWYgKChkZWNvTm9kZSBhcyBhbnkpLm1hdGVyaWFsSWQpIHtcclxuICAgICAgICAgICAgICAgIGxhc3RBZGRlZC52YXJpYXRpb25zLnB1c2goZGVjb05vZGUpO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBsYXN0QWRkZWQudmFyaWF0aW9ucyA9IFtkZWNvTm9kZV07XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGxhc3RBZGRlZC52YXJpYXRpb25zLnB1c2goZGVjb05vZGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG5ld1BhcnQgPSBmYWxzZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChnbG9iYWxWYXJpYXRpb25zUmV3cml0ZSkge1xyXG4gICAgICAgICAgICAgIGdsb2JhbFZhcmlhdGlvbnMubGVuZ3RoID0gMDtcclxuICAgICAgICAgICAgICBnbG9iYWxWYXJpYXRpb25zUmV3cml0ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGdsb2JhbFZhcmlhdGlvbnMucHVzaChkZWNvTm9kZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyBjb25zdCB2YXJpYXRpb246IEZ1cm5pdHVyZVBhcnRWYXJpYXRpb24gPSBuZXcgRnVybml0dXJlUGFydFZhcmlhdGlvbigpO1xyXG4gICAgICAgICAgLy8gdmFyaWF0aW9uLkJyYW5kSWQgPSBzZWxlY3Rpb24uZGVjb05vZGUuYnJhbmRJZDtcclxuICAgICAgICAgIC8vIHZhcmlhdGlvbi5EZXNjcmlwdGlvbiA9IHNlbGVjdGlvbi5kZWNvTm9kZS5nYW1lT2JqZWN0TmFtZTtcclxuICAgICAgICAgIC8vIHZhcmlhdGlvbi5NYXRlcmlhbElkID0gKHNlbGVjdGlvbi5kZWNvTm9kZSBhcyBhbnkpLm1hdGVyaWFsSWQ7XHJcbiAgICAgICAgICAvLyB2YXJpYXRpb24uU3VwcGxpZXJBcnRpY2xlTnIgPSAoc2VsZWN0aW9uLmRlY29Ob2RlIGFzIGFueSkuc3VwcGxpZXJBcnRpY2xlTnI7XHJcbiAgICAgICAgICAvLyB1c2VkVmFyaWF0aW9ucy5wdXNoKHZhcmlhdGlvbik7XHJcbiAgICAgICAgfSBlbHNlIGlmICgoc2VsZWN0aW9uLmRlY29Ob2RlLnR5cGUgPT09IERlY29Ob2RlVHlwZS5QYXJ0ICYmXHJcbiAgICAgICAgICB0eXBlb2Ygc2VsZWN0aW9uLmRlY29Ob2RlLmdhbWVPYmplY3ROYW1lID09PSAnc3RyaW5nJyAmJlxyXG4gICAgICAgICAgc2VsZWN0aW9uLmRlY29Ob2RlLmdhbWVPYmplY3ROYW1lLmxlbmd0aCkgfHwgKGlzQXJ0aWNsZVdpdGhNYXRlcmlhbCkpIHtcclxuICAgICAgICAgIGlmIChzZWxlY3Rpb24uZGVjb05vZGUua2luZCA9PT0gRGVjb05vZGVLaW5kLkFkanVzdGFibGUgfHwgKGlzQXJ0aWNsZVdpdGhNYXRlcmlhbCkpIHtcclxuICAgICAgICAgICAgc2VsZWN0aW9uLnZhcmlhdGlvbnMgPSBnbG9iYWxWYXJpYXRpb25zO1xyXG4gICAgICAgICAgICB0aGlzLl9hZGp1c3RhYmxlcy5wdXNoKHNlbGVjdGlvbik7XHJcbiAgICAgICAgICAgIGlmICghbGFzdEFkZGVkIHx8IChsYXN0QWRkZWQubm9kZUlkICE9PSBzZWxlY3Rpb24ubm9kZUlkIHx8IGxhc3RBZGRlZC5ub2RlICE9PSBzZWxlY3Rpb24ubm9kZSkpIHtcclxuICAgICAgICAgICAgICBuZXdQYXJ0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsYXN0QWRkZWQgPSBzZWxlY3Rpb247XHJcbiAgICAgICAgICAgIGxhc3RBZGp1c3RhYmxlID0gc2VsZWN0aW9uO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChzZWxlY3Rpb24uZGVjb05vZGUua2luZCA9PT0gRGVjb05vZGVLaW5kLkFkZGFibGUpIHtcclxuICAgICAgICAgICAgc2VsZWN0aW9uLnZhcmlhdGlvbnMgPSBsYXN0QWRqdXN0YWJsZSA/IGxhc3RBZGp1c3RhYmxlLnZhcmlhdGlvbnMgOiBnbG9iYWxWYXJpYXRpb25zO1xyXG4gICAgICAgICAgICBpZiAobGFzdEFkanVzdGFibGUpIHtcclxuICAgICAgICAgICAgICBsYXN0QWRqdXN0YWJsZS5hZGRhYmxlcy5wdXNoKHNlbGVjdGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fYWRkYWJsZXMucHVzaChzZWxlY3Rpb24pO1xyXG4gICAgICAgICAgICBpZiAoIWxhc3RBZGRlZCB8fCAobGFzdEFkZGVkLm5vZGVJZCAhPT0gc2VsZWN0aW9uLm5vZGVJZCB8fCBsYXN0QWRkZWQubm9kZSAhPT0gc2VsZWN0aW9uLm5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgbmV3UGFydCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGFzdEFkZGVkID0gc2VsZWN0aW9uO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBwcmV2aW91c1ByZXNMZXZlbCA9IHNlbGVjdGlvbi5wcmVzZW50YXRpb25MZXZlbDtcclxuICAgIH1cclxuICAgIC8vIHRoaXMuX3Vwc2VydEZ1cm5pdHVyZSh0aGlzLmFjdGl2ZUluc3RhbmNlLFxyXG4gICAgLy8gICB7VmFyaWF0aW9uczogdXNlZFZhcmlhdGlvbnN9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dldEFkanVzdGFibGVzKGNoZWNrR2FtZU9iamVjdDogYm9vbGVhbiA9IHRydWUsIGNoZWNrVHlwZTogYm9vbGVhbiA9IHRydWUpOiBTZWxlY3Rpb25bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb25zLmZpbHRlcihzID0+IHtcclxuICAgICAgY29uc3Qgbm9kZTogRGVjb05vZGUgPSBzLmRlY29Ob2RlO1xyXG4gICAgICByZXR1cm4gbm9kZSAmJiAoY2hlY2tHYW1lT2JqZWN0ID8gbm9kZS5nYW1lT2JqZWN0TmFtZSA6IHRydWUpICYmIChjaGVja1R5cGUgPyBub2RlLnR5cGUgPT09IERlY29Ob2RlVHlwZS5QYXJ0IDogdHJ1ZSkgJiYgbm9kZS5raW5kID09PSBEZWNvTm9kZUtpbmQuQWRqdXN0YWJsZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2V0VmFyaWF0aW9ucygpOiBhbnlbXSB7XHJcbiAgICBpZiAodGhpcy5faU9uZS5kZWNvTm9kZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLl9pT25lLmRlY29Ob2Rlcy5maWx0ZXIoKGRlY286IERlY29Ob2RlKSA9PiB7XHJcbiAgICAgIHJldHVybiBkZWNvLnR5cGUgPT09IERlY29Ob2RlVHlwZS5WYXJpYXRpb247XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NyZWF0ZUFkanVzdGFibGUoaXRlbTogSXRlbSwgYWRqOiBTZWxlY3Rpb24pOiBDdXN0b21PYmplY3QzRCB7XHJcbiAgICBsZXQgb2JqOiBhbnkgPSB0aGlzLmZ1bGwzRE9iamVjdFRvVXNlID8gdGhpcy5mdWxsM0RPYmplY3RUb1VzZS5nZXRPYmplY3RCeU5hbWUoYWRqLmRlY29Ob2RlLmdhbWVPYmplY3ROYW1lIHx8IGFkai5nYW1lT2JqZWN0KSA6IG51bGw7XHJcbiAgICBpZiAoIW9iaikge1xyXG4gICAgICAvLyBpbiBjYXNlIG9mIGdsYiBmaWxlcywgdGhlIGltcG9ydGVyIHJlbW92ZXMgZG90cyBmcm9tIG5hbWVzXHJcbiAgICAgIGNvbnN0IG5hbWUgPSBhZGouZGVjb05vZGUuZ2FtZU9iamVjdE5hbWUucmVwbGFjZSgvWy5dL2csICcnKTtcclxuICAgICAgb2JqID0gdGhpcy5mdWxsM0RPYmplY3RUb1VzZSA/IHRoaXMuZnVsbDNET2JqZWN0VG9Vc2UuZ2V0T2JqZWN0QnlOYW1lKG5hbWUpIDogbnVsbDtcclxuICAgICAgaWYgKCFvYmopIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oYE5vIG9iamVjdCB3aXRoIG5hbWUgJHthZGouZGVjb05vZGUuZ2FtZU9iamVjdE5hbWV9IGZvdW5kIWApO1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBsZXQgYWRqdXN0YWJsZTogYW55ID0gb2JqLmNsb25lKCk7XHJcbiAgICBhZGp1c3RhYmxlLm5hbWUgPSB0aGlzLl9jcmVhdGVVbmlxdWVOYW1lKGl0ZW0sIG9iaik7XHJcbiAgICBhZGp1c3RhYmxlLnVzZXJEYXRhLnNlbGVjdGlvbiA9IGFkajtcclxuICAgIGFkanVzdGFibGUucG9zaXRpb24uc2V0KDAsIDAsIDApO1xyXG4gICAgYWRqdXN0YWJsZS50cmF2ZXJzZShjID0+IHtcclxuICAgICAgYy52aXNpYmxlID0gIWMubmFtZS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoJ2NfJyk7XHJcbiAgICB9KTtcclxuICAgIGl0ZW0uYWRkQ2hpbGQoYWRqdXN0YWJsZSk7XHJcbiAgICAvLyB0aGUgb2JqZWN0IGJlaW5nIGFkZGVkIHRvIHRoZSBjdXN0b21GbG9vckdyb3VwIGlzIGJlaW5nIHJlY3JlYXRlZCBzbyB3ZSBsb29zZSB0aGUgcmVmZXJlbmNlXHJcbiAgICAvLyB0aGVyZWZvciB3ZSBuZWVkIHRvIHJldHJpZXZlIHRoZSBjcmVhdGVkIG9iamVjdCBhZ2FpblxyXG4gICAgYWRqdXN0YWJsZSA9IGl0ZW0uZ2V0T2JqZWN0QnlOYW1lKGFkanVzdGFibGUubmFtZSk7XHJcbiAgICB0aGlzLl9wbGFjZWRBZGp1c3RhYmxlcy5wdXNoKGFkanVzdGFibGUpO1xyXG4gICAgcmV0dXJuIGFkanVzdGFibGU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jcmVhdGVBZGRhYmxlKGl0ZW06IEl0ZW0sIGFkZDogU2VsZWN0aW9uLCBwYXJ0Mj86IGFueSwgcGFydDE/OiBhbnkpOiBDdXN0b21PYmplY3QzRCB7XHJcbiAgICBjb25zdCBvYmo6IGFueSA9IHRoaXMuZnVsbDNET2JqZWN0VG9Vc2UuZ2V0T2JqZWN0QnlOYW1lKGFkZC5kZWNvTm9kZS5nYW1lT2JqZWN0TmFtZSk7XHJcbiAgICBpZiAoIW9iaikge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIC8vIGNvbnN0IHNlbGVjdGlvbjogU2VsZWN0aW9uID0gdGhpcy5fZ2V0U2VsZWN0aW9uRnJvbUlkKGFkai5hcnROb2RlSWREZWNvKTtcclxuICAgIGNvbnN0IGFkZGFibGU6IGFueSA9IG9iai5jbG9uZSgpO1xyXG4gICAgYWRkYWJsZS5uYW1lID0gdGhpcy5fY3JlYXRlVW5pcXVlTmFtZShpdGVtLCBvYmopO1xyXG4gICAgYWRkYWJsZS51c2VyRGF0YS5zZWxlY3Rpb24gPSBhZGQ7XHJcbiAgICBhZGRhYmxlLnBvc2l0aW9uLnNldCgwLCAwLCAwKTtcclxuICAgIGFkZGFibGUudmlzaWJsZSA9IHRydWU7XHJcbiAgICBpZiAocGFydDEgJiYgcGFydDIpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX3BsYWNlQWRkYWJsZShpdGVtLCBhZGRhYmxlKTtcclxuICAgIH1cclxuICAgIHJldHVybiBhZGRhYmxlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcGxhY2VBZGRhYmxlKGl0ZW06IEl0ZW0sIGFkZDogYW55KTogQ3VzdG9tT2JqZWN0M0Qge1xyXG4gICAgaXRlbS5hZGRDaGlsZChhZGQpO1xyXG4gICAgY29uc3QgYWRkYWJsZTogQ3VzdG9tT2JqZWN0M0QgPSBpdGVtLmdldE9iamVjdEJ5TmFtZShhZGQubmFtZSkgYXMgQ3VzdG9tT2JqZWN0M0Q7XHJcbiAgICB0aGlzLl9wbGFjZWRBZGRhYmxlcy5wdXNoKGFkZGFibGUpO1xyXG4gICAgcmV0dXJuIGFkZGFibGU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jcmVhdGVVbmlxdWVOYW1lKGl0ZW06IEl0ZW0sIG9iajogT2JqZWN0M0QpOiBzdHJpbmcge1xyXG4gICAgbGV0IGl0ZXJhdGlvbiA9IDA7XHJcbiAgICBsZXQgbmFtZSA9IGAke2l0ZW0ubmFtZX1fJHtvYmoubmFtZX1gO1xyXG4gICAgbGV0IGV4aXN0aW5nT2JqID0gaXRlbS5nZXRPYmplY3RCeU5hbWUobmFtZSk7XHJcbiAgICB3aGlsZSAoZXhpc3RpbmdPYmopIHtcclxuICAgICAgaXRlcmF0aW9uKys7XHJcbiAgICAgIG5hbWUgPSBgJHtpdGVtLm5hbWV9XyR7b2JqLm5hbWV9YCArIChpdGVyYXRpb24gIT09IDAgPyAoJ18nICsgaXRlcmF0aW9uKSA6ICcnKTtcclxuICAgICAgZXhpc3RpbmdPYmogPSBpdGVtLmdldE9iamVjdEJ5TmFtZShuYW1lKTtcclxuICAgIH1cclxuICAgIHJldHVybiBuYW1lO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcGxhY2VBZGRhYmxlcyhpdGVtOiBJdGVtKTogdm9pZCB7XHJcbiAgICBjb25zdCBsZW46IG51bWJlciA9IHRoaXMuX3BsYWNlZEFkanVzdGFibGVzLmxlbmd0aDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgaWYgKHRoaXMuX3BsYWNlZEFkanVzdGFibGVzW2ldLnVzZXJEYXRhLmhhc093blByb3BlcnR5KCdzZWxlY3Rpb24nKSAmJiB0aGlzLl9wbGFjZWRBZGp1c3RhYmxlc1tpXS51c2VyRGF0YS5zZWxlY3Rpb24pIHtcclxuICAgICAgICBjb25zdCBhZGp1c3RhYmxlU2VsZWN0aW9uOiBTZWxlY3Rpb24gPSB0aGlzLl9wbGFjZWRBZGp1c3RhYmxlc1tpXS51c2VyRGF0YS5zZWxlY3Rpb247XHJcbiAgICAgICAgaWYgKGFkanVzdGFibGVTZWxlY3Rpb24pIHtcclxuICAgICAgICAgIGNvbnN0IGxlbmE6IG51bWJlciA9IGFkanVzdGFibGVTZWxlY3Rpb24uYWRkYWJsZXMubGVuZ3RoO1xyXG4gICAgICAgICAgbGV0IGNvbkFkZGFibGU6IGFueTtcclxuICAgICAgICAgIGZvciAobGV0IGlhID0gMDsgaWEgPCBsZW5hOyBpYSsrKSB7XHJcbiAgICAgICAgICAgIFNjZW5lM0RVdGlsLlRyeVNlbGVjdG9yQ29ubmVjdGlvbih0aGlzLnNjZW5lLFxyXG4gICAgICAgICAgICAgIGl0ZW0sIHRoaXMuX3BsYWNlZEFkanVzdGFibGVzW2ldLCBhZGp1c3RhYmxlU2VsZWN0aW9uLmFkZGFibGVzW2lhXSwgZmFsc2UsXHJcbiAgICAgICAgICAgICAgKGFkZCwgcGFydDI/LCBwYXJ0MT8pID0+IHRoaXMuX2NyZWF0ZUFkZGFibGUoaXRlbSwgYWRkLCBwYXJ0MiwgcGFydDEpKTtcclxuICAgICAgICAgICAgaWYgKGNvbkFkZGFibGUpIHtcclxuICAgICAgICAgICAgICBTY2VuZTNEVXRpbC5UcnlTZWxlY3RvckNvbm5lY3Rpb24odGhpcy5zY2VuZSxcclxuICAgICAgICAgICAgICAgIGl0ZW0sIGNvbkFkZGFibGUsIGFkanVzdGFibGVTZWxlY3Rpb24uYWRkYWJsZXNbaWFdLCBmYWxzZSxcclxuICAgICAgICAgICAgICAgIChhZGQsIHBhcnQyPywgcGFydDE/KSA9PiB0aGlzLl9jcmVhdGVBZGRhYmxlKGl0ZW0sIGFkZCwgcGFydDIsIHBhcnQxKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uQWRkYWJsZSA9IHRoaXMuX3BsYWNlZEFkZGFibGVzW3RoaXMuX3BsYWNlZEFkZGFibGVzLmxlbmd0aCAtIDFdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfbG9hZFZhcmlhdGlvbnMoaXRlbTogSXRlbSwgaW5zdGFuY2VJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAodGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLm9wdGlvbnMudXNlVmFyaWF0aW9uT25QYXJ0KSB7XHJcbiAgICAgIGF3YWl0IHRoaXMuX3ZhcmlhdGlvblNlcnZpY2UubG9hZFBhcnQodGhpcy5fYWRqdXN0YWJsZXMsIGluc3RhbmNlSWQsIGl0ZW0sIHRydWUpO1xyXG4gICAgfVxyXG4gICAgYXdhaXQgdGhpcy5fdmFyaWF0aW9uU2VydmljZS5sb2FkVmFyaWF0aW9uKHRoaXMuX2FkanVzdGFibGVzLCBpbnN0YW5jZUlkLCBpdGVtLCB0cnVlKTtcclxuICAgIGF3YWl0IHRoaXMuX3ZhcmlhdGlvblNlcnZpY2UubG9hZFZhcmlhdGlvbih0aGlzLl9hZGRhYmxlcywgaW5zdGFuY2VJZCwgaXRlbSwgdHJ1ZSk7XHJcbiAgICB0aGlzLl92YXJpYXRpb25TZXJ2aWNlLmNsZWFyQ2FjaGUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3Nob3dXYXJuaW5nKGRhdGE6IEluZm9EaWFsb2dEYXRhKSB7XHJcbiAgICBjb25zdCBkaWFsb2dEYXRhOiBJbmZvRGlhbG9nRGF0YSA9IHtcclxuICAgICAgdGl0bGU6IHRoaXMuX2RpY3Rpb25hcnlTZXJ2aWNlLmdldChkYXRhLnRpdGxlKSwgbWVzc2FnZTogdGhpcy5fZGljdGlvbmFyeVNlcnZpY2UuZ2V0KGRhdGEubWVzc2FnZSlcclxuICAgIH07XHJcbiAgICB0aGlzLl9kaWFsb2cub3BlbihJbmZvRGlhbG9nQ29tcG9uZW50LCB7ZGF0YTogZGlhbG9nRGF0YX0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcHJlcGFyZVN0YW5kQWxvbmUoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9jb2xsaXNpb25NYW5hZ2VyLmNoZWNrQ29sbGlzaW9ucyA9IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5vcHRpb25zLmNhbWVyYVBvc2l0aW9uRml4ZWQpIHtcclxuICAgICAgdGhpcy5fY2FtZXJhU2VydmljZS5sb2NrQ2FtZXJhKCk7XHJcbiAgICAgIHRoaXMuX2NhbWVyYVNlcnZpY2UuZGlzYWJsZVJvdGF0ZUhvcml6b250YWwoKTtcclxuICAgICAgLy8gdGhpcy5fY2FtZXJhU2VydmljZS5kaXNhYmxlUm90YXRlVmVydGljYWwoKTtcclxuICAgICAgdGhpcy5fY2FtZXJhU2VydmljZS5kaXNhYmxlUGFuKCk7XHJcbiAgICAgIHRoaXMuX2NhbWVyYVNlcnZpY2UuY29udHJvbHMudGFyZ2V0ID0gbmV3IFZlY3RvcjMoMCwgNTAsIDApO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fc2NlbmVFdmVudFNlcnZpY2Uucm90YXRlTm9EcmFnID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3ByZWxvYWRNYXRlcmlhbChhbnN3ZXI6IEFuc3dlcik6IHZvaWQge1xyXG4gICAgaWYgKGFuc3dlci5lbGVtZW50VHlwZSA9PT0gRGVjb05vZGVUeXBlLlZhcmlhdGlvbiAmJiBhbnN3ZXIuZ2FtZU9iamVjdCkge1xyXG4gICAgICBjb25zdCB2YXJpYXRpb25EZWNvTm9kZTogRGVjb05vZGUgPSBuZXcgRGVjb05vZGUoKTtcclxuICAgICAgdmFyaWF0aW9uRGVjb05vZGUuZ2FtZU9iamVjdE5hbWUgPSBhbnN3ZXIuZ2FtZU9iamVjdDtcclxuICAgICAgY29uc3QgYWRqdXN0YWJsZXNDbG9uZTogU2VsZWN0aW9uW10gPSB0aGlzLl9hZGp1c3RhYmxlcy5tYXAocyA9PiBPYmplY3QuYXNzaWduKHt9LCBzKSk7XHJcblxyXG4gICAgICBpZiAodGhpcy5fZ2VuZXJpY1NlbGVjdGlvbikge1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRDdXN0b21GbG9vckdyb3VwKSB7XHJcbiAgICAgICAgICBhZGp1c3RhYmxlc0Nsb25lLmZvckVhY2goKHNlbGVjdGlvbjogU2VsZWN0aW9uKSA9PiBzZWxlY3Rpb24udmFyaWF0aW9ucyA9IFt2YXJpYXRpb25EZWNvTm9kZV0pO1xyXG4gICAgICAgICAgdGhpcy5fdmFyaWF0aW9uQ2FjaGVTZXJ2aWNlLnByZWxvYWRWYXJpYXRpb25zQXN5bmMoYWRqdXN0YWJsZXNDbG9uZVswXS5zY2hlbWEsIFt2YXJpYXRpb25EZWNvTm9kZS5nYW1lT2JqZWN0TmFtZV0sIHRoaXMuYXJ0aWNsZUFzc2V0UGF0aClcclxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuX3ZhcmlhdGlvblNlcnZpY2UubG9hZFZhcmlhdGlvbihhZGp1c3RhYmxlc0Nsb25lLCAnJywgdGhpcy5jdXJyZW50Q3VzdG9tRmxvb3JHcm91cCwgdHJ1ZSlcclxuICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHRoaXMuX3NjZW5lU2VydmljZS5uZWVkc1JlbmRlciA9IHRydWUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5fYWRqdXN0YWJsZXMuZm9yRWFjaCgoc2VsZWN0aW9uOiBTZWxlY3Rpb24pID0+IHNlbGVjdGlvbi52YXJpYXRpb25zID0gW3ZhcmlhdGlvbkRlY29Ob2RlXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRTZWxlY3Rpb246IFNlbGVjdGlvbiA9IE9iamVjdFV0aWxzLkdldFNlbGVjdGlvbkZyb21TZWxlY3RlZE9iamVjdCh0aGlzLl9hY3RpdmVDaGlsZEVsZW1lbnQpO1xyXG4gICAgICAgIGlmIChjdXJyZW50U2VsZWN0aW9uKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5jdXJyZW50Q3VzdG9tRmxvb3JHcm91cCkge1xyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3Rpb25Gcm9tQWRqdXN0YWJsZXM6IFNlbGVjdGlvbiA9IGFkanVzdGFibGVzQ2xvbmVcclxuICAgICAgICAgICAgICAuZmluZCgoc2VsZWN0aW9uOiBTZWxlY3Rpb24pID0+IHNlbGVjdGlvbi5ub2RlSWQgPT09IGN1cnJlbnRTZWxlY3Rpb24ubm9kZUlkKTtcclxuICAgICAgICAgICAgaWYgKHNlbGVjdGlvbkZyb21BZGp1c3RhYmxlcykge1xyXG4gICAgICAgICAgICAgIHNlbGVjdGlvbkZyb21BZGp1c3RhYmxlcy52YXJpYXRpb25zID0gW3ZhcmlhdGlvbkRlY29Ob2RlXTtcclxuICAgICAgICAgICAgICB0aGlzLl92YXJpYXRpb25DYWNoZVNlcnZpY2UucHJlbG9hZFZhcmlhdGlvbnNBc3luYyhhZGp1c3RhYmxlc0Nsb25lWzBdLnNjaGVtYSwgW3ZhcmlhdGlvbkRlY29Ob2RlLmdhbWVPYmplY3ROYW1lXSwgdGhpcy5hcnRpY2xlQXNzZXRQYXRoKVxyXG4gICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl92YXJpYXRpb25TZXJ2aWNlLmxvYWRWYXJpYXRpb24oYWRqdXN0YWJsZXNDbG9uZSwgJycsIHRoaXMuY3VycmVudEN1c3RvbUZsb29yR3JvdXAsIHRydWUpXHJcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5fc2NlbmVTZXJ2aWNlLm5lZWRzUmVuZGVyID0gdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uRnJvbUFkanVzdGFibGVzOiBTZWxlY3Rpb24gPSB0aGlzLl9hZGp1c3RhYmxlc1xyXG4gICAgICAgICAgICAgIC5maW5kKChzZWxlY3Rpb246IFNlbGVjdGlvbikgPT4gc2VsZWN0aW9uLm5vZGVJZCA9PT0gY3VycmVudFNlbGVjdGlvbi5ub2RlSWQpO1xyXG4gICAgICAgICAgICBzZWxlY3Rpb25Gcm9tQWRqdXN0YWJsZXMudmFyaWF0aW9ucyA9IFt2YXJpYXRpb25EZWNvTm9kZV07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
1472
+ }], 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=