@hestia-earth/ui-components 0.29.2 → 0.29.4

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 (73) hide show
  1. package/common/maps-utils.d.ts +4 -0
  2. package/common/navigation-menu/navigation-menu.component.d.ts +1 -0
  3. package/common/node-utils.d.ts +4 -2
  4. package/common/semver-utils.d.ts +2 -3
  5. package/common/utils.d.ts +0 -5
  6. package/cycles/cycles-nodes/cycles-nodes.component.d.ts +1 -1
  7. package/engine/engine-models-stage-deep/engine-models-stage-deep.component.d.ts +1 -1
  8. package/engine/engine-models-version-link/engine-models-version-link.component.d.ts +1 -1
  9. package/engine/engine.service.d.ts +1 -1
  10. package/esm2022/bibliographies/bibliographies-search-confirm/bibliographies-search-confirm.component.mjs +3 -3
  11. package/esm2022/chart/chart.component.mjs +3 -3
  12. package/esm2022/chart/line-chart/line-chart.component.mjs +3 -3
  13. package/esm2022/common/blank-node-state/blank-node-state.component.mjs +3 -3
  14. package/esm2022/common/clipboard/clipboard.component.mjs +3 -3
  15. package/esm2022/common/collapsible-box/collapsible-box.component.mjs +3 -3
  16. package/esm2022/common/data-table/data-table.component.mjs +3 -3
  17. package/esm2022/common/drawer-container/drawer-container.component.mjs +3 -3
  18. package/esm2022/common/link-key-value/link-key-value.component.mjs +3 -3
  19. package/esm2022/common/maps-drawing-confirm/maps-drawing-confirm.component.mjs +3 -3
  20. package/esm2022/common/maps-utils.mjs +3 -1
  21. package/esm2022/common/mobile-shell/mobile-shell.component.mjs +3 -3
  22. package/esm2022/common/navigation-menu/navigation-menu.component.mjs +7 -3
  23. package/esm2022/common/node-utils.mjs +12 -7
  24. package/esm2022/common/schema-version-link/schema-version-link.component.mjs +3 -3
  25. package/esm2022/common/search-extend/search-extend.component.mjs +3 -3
  26. package/esm2022/common/semver-utils.mjs +3 -4
  27. package/esm2022/common/shelf-dialog/shelf-dialog.component.mjs +3 -3
  28. package/esm2022/common/shell/shell.component.mjs +3 -3
  29. package/esm2022/common/sort-select/sort-select.component.mjs +3 -3
  30. package/esm2022/common/utils.mjs +1 -9
  31. package/esm2022/cycles/cycles-completeness/cycles-completeness.component.mjs +3 -3
  32. package/esm2022/cycles/cycles-nodes/cycles-nodes.component.mjs +5 -5
  33. package/esm2022/cycles/cycles-nodes-timeline/cycles-nodes-timeline.component.mjs +3 -3
  34. package/esm2022/engine/engine-models-stage-deep/engine-models-stage-deep.component.mjs +9 -8
  35. package/esm2022/engine/engine-models-version-link/engine-models-version-link.component.mjs +3 -3
  36. package/esm2022/engine/engine-requirements-form/engine-requirements-form.component.mjs +3 -3
  37. package/esm2022/engine/engine.service.mjs +3 -2
  38. package/esm2022/files/files-error-summary/files-error-summary-item/files-error-summary-item.component.mjs +3 -3
  39. package/esm2022/files/files-form.model.mjs +3 -2
  40. package/esm2022/files/files-upload-errors/files-upload-errors.component.mjs +3 -3
  41. package/esm2022/impact-assessments/impact-assessments-graph/impact-assessments-graph.component.mjs +3 -3
  42. package/esm2022/impact-assessments/impact-assessments-indicator-breakdown-chart/impact-assessments-indicator-breakdown-chart.component.mjs +3 -3
  43. package/esm2022/impact-assessments/impact-assessments-products/impact-assessments-products.component.mjs +7 -4
  44. package/esm2022/node/node-csv-export-confirm/node-csv-export-confirm.component.mjs +3 -3
  45. package/esm2022/node/node-csv-select-headers/node-csv-select-headers.component.mjs +3 -3
  46. package/esm2022/node/node-diffs/node-diffs.component.mjs +3 -3
  47. package/esm2022/node/node-link/node-link.component.mjs +3 -3
  48. package/esm2022/node/node-logs-file/node-logs-file.component.mjs +3 -3
  49. package/esm2022/node/node-logs-models/node-logs-models.component.mjs +34 -41
  50. package/esm2022/node/node-logs-models/node-logs-models.model.mjs +10 -6
  51. package/esm2022/node/node-missing-lookup-factors/node-missing-lookup-factors.component.mjs +3 -3
  52. package/esm2022/node/node-recommendations/node-recommendations.component.mjs +3 -3
  53. package/esm2022/node/node-store.service.mjs +1 -1
  54. package/esm2022/node/node-value-details/node-value-details.component.mjs +5 -3
  55. package/esm2022/schema/schema-info/schema-info.component.mjs +3 -3
  56. package/esm2022/select/select-option/select-option.component.mjs +3 -3
  57. package/esm2022/select/select-option-group/select-option-group.component.mjs +3 -3
  58. package/esm2022/select/select.component.mjs +3 -3
  59. package/esm2022/sites/sites-management-chart/sites-management-chart.component.mjs +8 -12
  60. package/esm2022/sites/sites-nodes/sites-nodes.component.mjs +6 -5
  61. package/esm2022/terms/terms-property-content/terms-property-content.component.mjs +3 -3
  62. package/esm2022/terms/terms-sub-class-of-content/terms-sub-class-of-content.component.mjs +3 -3
  63. package/esm2022/terms/terms-units-description/terms-units-description.component.mjs +3 -3
  64. package/fesm2022/hestia-earth-ui-components.mjs +172 -170
  65. package/fesm2022/hestia-earth-ui-components.mjs.map +1 -1
  66. package/impact-assessments/impact-assessments-products/impact-assessments-products.component.d.ts +2 -0
  67. package/node/node-logs-models/node-logs-models.component.d.ts +4 -4
  68. package/node/node-logs-models/node-logs-models.model.d.ts +1 -1
  69. package/node/node-store.service.d.ts +1 -1
  70. package/package.json +1 -1
  71. package/sites/sites-management-chart/sites-management-chart.component.d.ts +1 -0
  72. package/sites/sites-nodes/sites-nodes.component.d.ts +2 -1
  73. package/styles.scss +5 -34
@@ -27,10 +27,10 @@ export class FilesErrorSummaryItemComponent {
27
27
  this.maxLength.set(Math.max(minimumMaxLength, width / 3));
28
28
  }
29
29
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: FilesErrorSummaryItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
30
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.11", type: FilesErrorSummaryItemComponent, isStandalone: true, selector: "he-files-error-summary-item", inputs: { summary: { classPropertyName: "summary", publicName: "summary", isSignal: true, isRequired: true, transformFunction: null }, resolved: { classPropertyName: "resolved", publicName: "resolved", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { resolved: "resolvedChange" }, ngImport: i0, template: "<div class=\"is-flex is-justify-content-center is-align-items-center is-align-self-stretch is-gap-8 is-mb-2\">\n <div class=\"is-flex is-flex-grow-1 | errors-path border-right\">\n <span class=\"has-text-weight-bold\">{{ summary().path || '-' }}</span>\n </div>\n\n <div class=\"is-flex is-align-items-center is-gap-4 | errors-count\">\n <div\n class=\"is-flex is-justify-content-center is-align-items-center has-background-{{\n errorColor()\n }} | errors-count--number\">\n <span class=\"has-text-weight-bold has-text-white\">{{ summary().count }}</span>\n </div>\n <span class=\"has-text-{{ errorColor() }} is-capitalized\">\n {{ summary().level | pluralize: summary().count }}\n </span>\n </div>\n</div>\n\n<div class=\"py-2 w-100 border-y\">\n @if (summary().terms) {\n <p class=\"is-size-7\">\n <span class=\"is-pr-1 has-text-weight-bold\">Terms:</span>\n <span [innerHtml]=\"summary().terms\"></span>\n </p>\n }\n\n @if (hasAutoGeneratedNodes()) {\n <p class=\"is-size-7 has-text-info\">\n <span>Some nodes are auto-generated and the {{ summary().level }} might come from other nodes</span>\n </p>\n }\n\n <p class=\"is-italic has-text-weight-semilight has-text-grey-dark\" (resized)=\"onResized($event)\">\n <span [innerHTML]=\"message() | ellipsis: textMaxLength()\"></span>\n @if (showMoreButton()) {\n <a class=\"has-text-weight-semibold\" (click)=\"$event.stopPropagation(); showMore.set(!showMore())\">\n @if (showMore()) {\n less\n } @else {\n more\n }\n </a>\n }\n </p>\n</div>\n<div class=\"px-1 py-3 w-100\">\n <div class=\"is-flex is-align-items-center is-gap-8 | resolved-actions\">\n <p class=\"has-text-weight-bold is-size-7\">Resolved?</p>\n\n <a\n (click)=\"$event.stopPropagation(); resolved.set(false)\"\n class=\"resolved-actions--unresolve\"\n [class.is-resolved]=\"resolved()\">\n <fa-icon [icon]=\"faTimesCircle\" />\n </a>\n\n <a\n (click)=\"$event.stopPropagation(); resolved.set(true)\"\n class=\"resolved-actions--resolve\"\n [class.is-resolved]=\"resolved()\">\n <fa-icon [icon]=\"faCheckCircle\" />\n </a>\n </div>\n</div>\n", styles: [":host{--summary-files-border-edge: 1px solid #f5f5f5}:host .border-top{border-top:var(--summary-files-border-edge)}:host .border-bottom{border-bottom:var(--summary-files-border-edge)}:host .border-right{border-right:var(--summary-files-border-edge)}:host .border-x{border-left:var(--summary-files-border-edge);border-right:var(--summary-files-border-edge)}:host .border-y{border-bottom:var(--summary-files-border-edge);border-top:var(--summary-files-border-edge)}p,span{word-break:break-word}.summary-content{max-height:400px;overflow-y:auto}.errors-path{color:#4c7194}.errors-count{width:110px}.errors-count--number{line-height:1.3;border-radius:1px;padding:1px 5px}.resolved-actions--resolve{color:#b5b5b5}.resolved-actions--resolve.is-resolved,.resolved-actions--resolve:hover{color:#48c78e}.resolved-actions--unresolve{color:#b5b5b5}.resolved-actions--unresolve:not(.is-resolved),.resolved-actions--unresolve:hover{color:#f14668}\n"], dependencies: [{ kind: "component", type: FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }, { kind: "pipe", type: EllipsisPipe, name: "ellipsis" }, { kind: "pipe", type: PluralizePipe, name: "pluralize" }, { kind: "directive", type: ResizedDirective, selector: "[resized]", outputs: ["resized"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
30
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.11", type: FilesErrorSummaryItemComponent, isStandalone: true, selector: "he-files-error-summary-item", inputs: { summary: { classPropertyName: "summary", publicName: "summary", isSignal: true, isRequired: true, transformFunction: null }, resolved: { classPropertyName: "resolved", publicName: "resolved", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { resolved: "resolvedChange" }, ngImport: i0, template: "<div class=\"is-flex is-justify-content-center is-align-items-center is-align-self-stretch is-gap-8 is-mb-2\">\n <div class=\"is-flex is-flex-grow-1 | errors-path border-right\">\n <span class=\"has-text-weight-bold\">{{ summary().path || '-' }}</span>\n </div>\n\n <div class=\"is-flex is-align-items-center is-gap-4 | errors-count\">\n <div\n class=\"is-flex is-justify-content-center is-align-items-center has-background-{{\n errorColor()\n }} | errors-count--number\">\n <span class=\"has-text-weight-bold has-text-white\">{{ summary().count }}</span>\n </div>\n <span class=\"has-text-{{ errorColor() }} is-capitalized\">\n {{ summary().level | pluralize: summary().count }}\n </span>\n </div>\n</div>\n\n<div class=\"py-2 w-100 border-y\">\n @if (summary().terms) {\n <p class=\"is-size-7\">\n <span class=\"is-pr-1 has-text-weight-bold\">Terms:</span>\n <span [innerHtml]=\"summary().terms\"></span>\n </p>\n }\n\n @if (hasAutoGeneratedNodes()) {\n <p class=\"is-size-7 has-text-info\">\n <span>Some nodes are auto-generated and the {{ summary().level }} might come from other nodes</span>\n </p>\n }\n\n <p class=\"is-italic has-text-weight-semilight has-text-grey-dark\" (resized)=\"onResized($event)\">\n <span [innerHTML]=\"message() | ellipsis: textMaxLength()\"></span>\n @if (showMoreButton()) {\n <a class=\"has-text-weight-semibold\" (click)=\"$event.stopPropagation(); showMore.set(!showMore())\">\n @if (showMore()) {\n less\n } @else {\n more\n }\n </a>\n }\n </p>\n</div>\n<div class=\"px-1 py-3 w-100\">\n <div class=\"is-flex is-align-items-center is-gap-8 | resolved-actions\">\n <p class=\"has-text-weight-bold is-size-7\">Resolved?</p>\n\n <a\n (click)=\"$event.stopPropagation(); resolved.set(false)\"\n class=\"resolved-actions--unresolve\"\n [class.is-resolved]=\"resolved()\">\n <fa-icon [icon]=\"faTimesCircle\" />\n </a>\n\n <a\n (click)=\"$event.stopPropagation(); resolved.set(true)\"\n class=\"resolved-actions--resolve\"\n [class.is-resolved]=\"resolved()\">\n <fa-icon [icon]=\"faCheckCircle\" />\n </a>\n </div>\n</div>\n", styles: [":host{--summary-files-border-edge: 1px solid #f5f5f5}:host .border-top{border-top:var(--summary-files-border-edge)}:host .border-bottom{border-bottom:var(--summary-files-border-edge)}:host .border-right{border-right:var(--summary-files-border-edge)}:host .border-x{border-left:var(--summary-files-border-edge);border-right:var(--summary-files-border-edge)}:host .border-y{border-bottom:var(--summary-files-border-edge);border-top:var(--summary-files-border-edge)}p,span{word-break:break-word}.errors-path{color:#4c7194}.errors-count{width:110px}.errors-count--number{line-height:1.3;border-radius:1px;padding:1px 5px}.resolved-actions--resolve{color:#b5b5b5}.resolved-actions--resolve.is-resolved,.resolved-actions--resolve:hover{color:#48c78e}.resolved-actions--unresolve{color:#b5b5b5}.resolved-actions--unresolve:not(.is-resolved),.resolved-actions--unresolve:hover{color:#f14668}\n"], dependencies: [{ kind: "component", type: FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }, { kind: "pipe", type: EllipsisPipe, name: "ellipsis" }, { kind: "pipe", type: PluralizePipe, name: "pluralize" }, { kind: "directive", type: ResizedDirective, selector: "[resized]", outputs: ["resized"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
31
31
  }
32
32
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: FilesErrorSummaryItemComponent, decorators: [{
33
33
  type: Component,
34
- args: [{ selector: 'he-files-error-summary-item', standalone: true, imports: [FaIconComponent, EllipsisPipe, PluralizePipe, ResizedDirective], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"is-flex is-justify-content-center is-align-items-center is-align-self-stretch is-gap-8 is-mb-2\">\n <div class=\"is-flex is-flex-grow-1 | errors-path border-right\">\n <span class=\"has-text-weight-bold\">{{ summary().path || '-' }}</span>\n </div>\n\n <div class=\"is-flex is-align-items-center is-gap-4 | errors-count\">\n <div\n class=\"is-flex is-justify-content-center is-align-items-center has-background-{{\n errorColor()\n }} | errors-count--number\">\n <span class=\"has-text-weight-bold has-text-white\">{{ summary().count }}</span>\n </div>\n <span class=\"has-text-{{ errorColor() }} is-capitalized\">\n {{ summary().level | pluralize: summary().count }}\n </span>\n </div>\n</div>\n\n<div class=\"py-2 w-100 border-y\">\n @if (summary().terms) {\n <p class=\"is-size-7\">\n <span class=\"is-pr-1 has-text-weight-bold\">Terms:</span>\n <span [innerHtml]=\"summary().terms\"></span>\n </p>\n }\n\n @if (hasAutoGeneratedNodes()) {\n <p class=\"is-size-7 has-text-info\">\n <span>Some nodes are auto-generated and the {{ summary().level }} might come from other nodes</span>\n </p>\n }\n\n <p class=\"is-italic has-text-weight-semilight has-text-grey-dark\" (resized)=\"onResized($event)\">\n <span [innerHTML]=\"message() | ellipsis: textMaxLength()\"></span>\n @if (showMoreButton()) {\n <a class=\"has-text-weight-semibold\" (click)=\"$event.stopPropagation(); showMore.set(!showMore())\">\n @if (showMore()) {\n less\n } @else {\n more\n }\n </a>\n }\n </p>\n</div>\n<div class=\"px-1 py-3 w-100\">\n <div class=\"is-flex is-align-items-center is-gap-8 | resolved-actions\">\n <p class=\"has-text-weight-bold is-size-7\">Resolved?</p>\n\n <a\n (click)=\"$event.stopPropagation(); resolved.set(false)\"\n class=\"resolved-actions--unresolve\"\n [class.is-resolved]=\"resolved()\">\n <fa-icon [icon]=\"faTimesCircle\" />\n </a>\n\n <a\n (click)=\"$event.stopPropagation(); resolved.set(true)\"\n class=\"resolved-actions--resolve\"\n [class.is-resolved]=\"resolved()\">\n <fa-icon [icon]=\"faCheckCircle\" />\n </a>\n </div>\n</div>\n", styles: [":host{--summary-files-border-edge: 1px solid #f5f5f5}:host .border-top{border-top:var(--summary-files-border-edge)}:host .border-bottom{border-bottom:var(--summary-files-border-edge)}:host .border-right{border-right:var(--summary-files-border-edge)}:host .border-x{border-left:var(--summary-files-border-edge);border-right:var(--summary-files-border-edge)}:host .border-y{border-bottom:var(--summary-files-border-edge);border-top:var(--summary-files-border-edge)}p,span{word-break:break-word}.summary-content{max-height:400px;overflow-y:auto}.errors-path{color:#4c7194}.errors-count{width:110px}.errors-count--number{line-height:1.3;border-radius:1px;padding:1px 5px}.resolved-actions--resolve{color:#b5b5b5}.resolved-actions--resolve.is-resolved,.resolved-actions--resolve:hover{color:#48c78e}.resolved-actions--unresolve{color:#b5b5b5}.resolved-actions--unresolve:not(.is-resolved),.resolved-actions--unresolve:hover{color:#f14668}\n"] }]
34
+ args: [{ selector: 'he-files-error-summary-item', standalone: true, imports: [FaIconComponent, EllipsisPipe, PluralizePipe, ResizedDirective], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"is-flex is-justify-content-center is-align-items-center is-align-self-stretch is-gap-8 is-mb-2\">\n <div class=\"is-flex is-flex-grow-1 | errors-path border-right\">\n <span class=\"has-text-weight-bold\">{{ summary().path || '-' }}</span>\n </div>\n\n <div class=\"is-flex is-align-items-center is-gap-4 | errors-count\">\n <div\n class=\"is-flex is-justify-content-center is-align-items-center has-background-{{\n errorColor()\n }} | errors-count--number\">\n <span class=\"has-text-weight-bold has-text-white\">{{ summary().count }}</span>\n </div>\n <span class=\"has-text-{{ errorColor() }} is-capitalized\">\n {{ summary().level | pluralize: summary().count }}\n </span>\n </div>\n</div>\n\n<div class=\"py-2 w-100 border-y\">\n @if (summary().terms) {\n <p class=\"is-size-7\">\n <span class=\"is-pr-1 has-text-weight-bold\">Terms:</span>\n <span [innerHtml]=\"summary().terms\"></span>\n </p>\n }\n\n @if (hasAutoGeneratedNodes()) {\n <p class=\"is-size-7 has-text-info\">\n <span>Some nodes are auto-generated and the {{ summary().level }} might come from other nodes</span>\n </p>\n }\n\n <p class=\"is-italic has-text-weight-semilight has-text-grey-dark\" (resized)=\"onResized($event)\">\n <span [innerHTML]=\"message() | ellipsis: textMaxLength()\"></span>\n @if (showMoreButton()) {\n <a class=\"has-text-weight-semibold\" (click)=\"$event.stopPropagation(); showMore.set(!showMore())\">\n @if (showMore()) {\n less\n } @else {\n more\n }\n </a>\n }\n </p>\n</div>\n<div class=\"px-1 py-3 w-100\">\n <div class=\"is-flex is-align-items-center is-gap-8 | resolved-actions\">\n <p class=\"has-text-weight-bold is-size-7\">Resolved?</p>\n\n <a\n (click)=\"$event.stopPropagation(); resolved.set(false)\"\n class=\"resolved-actions--unresolve\"\n [class.is-resolved]=\"resolved()\">\n <fa-icon [icon]=\"faTimesCircle\" />\n </a>\n\n <a\n (click)=\"$event.stopPropagation(); resolved.set(true)\"\n class=\"resolved-actions--resolve\"\n [class.is-resolved]=\"resolved()\">\n <fa-icon [icon]=\"faCheckCircle\" />\n </a>\n </div>\n</div>\n", styles: [":host{--summary-files-border-edge: 1px solid #f5f5f5}:host .border-top{border-top:var(--summary-files-border-edge)}:host .border-bottom{border-bottom:var(--summary-files-border-edge)}:host .border-right{border-right:var(--summary-files-border-edge)}:host .border-x{border-left:var(--summary-files-border-edge);border-right:var(--summary-files-border-edge)}:host .border-y{border-bottom:var(--summary-files-border-edge);border-top:var(--summary-files-border-edge)}p,span{word-break:break-word}.errors-path{color:#4c7194}.errors-count{width:110px}.errors-count--number{line-height:1.3;border-radius:1px;padding:1px 5px}.resolved-actions--resolve{color:#b5b5b5}.resolved-actions--resolve.is-resolved,.resolved-actions--resolve:hover{color:#48c78e}.resolved-actions--unresolve{color:#b5b5b5}.resolved-actions--unresolve:not(.is-resolved),.resolved-actions--unresolve:hover{color:#f14668}\n"] }]
35
35
  }] });
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZXMtZXJyb3Itc3VtbWFyeS1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9maWxlcy9maWxlcy1lcnJvci1zdW1tYXJ5L2ZpbGVzLWVycm9yLXN1bW1hcnktaXRlbS9maWxlcy1lcnJvci1zdW1tYXJ5LWl0ZW0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vc3JjL2ZpbGVzL2ZpbGVzLWVycm9yLXN1bW1hcnkvZmlsZXMtZXJyb3Itc3VtbWFyeS1pdGVtL2ZpbGVzLWVycm9yLXN1bW1hcnktaXRlbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUVqRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQy9ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBZ0IsTUFBTSxtQ0FBbUMsQ0FBQzs7QUFHbkYsTUFBTSxnQkFBZ0IsR0FBRyxHQUFHLENBQUM7QUFVN0IsTUFBTSxPQUFPLDhCQUE4QjtJQVIzQztRQVNxQixrQkFBYSxHQUFHLGFBQWEsQ0FBQztRQUM5QixrQkFBYSxHQUFHLGFBQWEsQ0FBQztRQUVqQyxZQUFPLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBWSxDQUFDO1FBQ3JEOztXQUVHO1FBQ2EsYUFBUSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV2QixjQUFTLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDbkMsa0JBQWEsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMvRixhQUFRLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pCLG1CQUFjLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDNUYsWUFBTyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUMxRCxlQUFVLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUV6RiwwQkFBcUIsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQ3ZELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUUsSUFBWSxFQUFFLGFBQWEsQ0FBQyxDQUN2RSxDQUFDO0tBS0g7SUFIVyxTQUFTLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBZ0I7UUFDdEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RCxDQUFDOytHQXZCVSw4QkFBOEI7bUdBQTlCLDhCQUE4QiwwWUNuQjNDLDhzRUFnRUEsaStCRGxEWSxlQUFlLHVNQUFFLFlBQVksNENBQUUsYUFBYSxrREFBRSxnQkFBZ0I7OzRGQUs3RCw4QkFBOEI7a0JBUjFDLFNBQVM7K0JBQ0UsNkJBQTZCLGNBQzNCLElBQUksV0FDUCxDQUFDLGVBQWUsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixDQUFDLG1CQUN4RCx1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgY29tcHV0ZWQsIGlucHV0LCBtb2RlbCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGYUljb25Db21wb25lbnQgfSBmcm9tICdAZm9ydGF3ZXNvbWUvYW5ndWxhci1mb250YXdlc29tZSc7XG5pbXBvcnQgeyBmYUNoZWNrQ2lyY2xlLCBmYVRpbWVzQ2lyY2xlIH0gZnJvbSAnQGZvcnRhd2Vzb21lL2ZyZWUtc29saWQtc3ZnLWljb25zJztcblxuaW1wb3J0IHsgRWxsaXBzaXNQaXBlIH0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL2VsbGlwc2lzLnBpcGUnO1xuaW1wb3J0IHsgUGx1cmFsaXplUGlwZSB9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi9wbHVyYWxpemUucGlwZSc7XG5pbXBvcnQgeyBSZXNpemVkRGlyZWN0aXZlLCBSZXNpemVkRXZlbnQgfSBmcm9tICcuLi8uLi8uLi9jb21tb24vcmVzaXplZC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSVN1bW1hcnkgfSBmcm9tICcuLi9maWxlcy1lcnJvci1zdW1tYXJ5Lm1vZGVsJztcblxuY29uc3QgbWluaW11bU1heExlbmd0aCA9IDE1MDtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaGUtZmlsZXMtZXJyb3Itc3VtbWFyeS1pdGVtJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0ZhSWNvbkNvbXBvbmVudCwgRWxsaXBzaXNQaXBlLCBQbHVyYWxpemVQaXBlLCBSZXNpemVkRGlyZWN0aXZlXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHRlbXBsYXRlVXJsOiAnLi9maWxlcy1lcnJvci1zdW1tYXJ5LWl0ZW0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vZmlsZXMtZXJyb3Itc3VtbWFyeS1pdGVtLmNvbXBvbmVudC5zY3NzJ1xufSlcbmV4cG9ydCBjbGFzcyBGaWxlc0Vycm9yU3VtbWFyeUl0ZW1Db21wb25lbnQge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZmFDaGVja0NpcmNsZSA9IGZhQ2hlY2tDaXJjbGU7XG4gIHByb3RlY3RlZCByZWFkb25seSBmYVRpbWVzQ2lyY2xlID0gZmFUaW1lc0NpcmNsZTtcblxuICBwdWJsaWMgcmVhZG9ubHkgc3VtbWFyeSA9IGlucHV0LnJlcXVpcmVkPElTdW1tYXJ5PigpO1xuICAvKipcbiAgICogRXJyb3IgaXMgcmVzb2x2ZWQgYW5kIHNob3VsZCBub3QgYmUgZGlzcGxheWVkIGFueW1vcmUuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcmVzb2x2ZWQgPSBtb2RlbChmYWxzZSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBtYXhMZW5ndGggPSBzaWduYWwobWluaW11bU1heExlbmd0aCk7XG4gIHByb3RlY3RlZCByZWFkb25seSB0ZXh0TWF4TGVuZ3RoID0gY29tcHV0ZWQoKCkgPT4gKHRoaXMuc2hvd01vcmUoKSA/IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSIDogdGhpcy5tYXhMZW5ndGgoKSkpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2hvd01vcmUgPSBzaWduYWwoZmFsc2UpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2hvd01vcmVCdXR0b24gPSBjb21wdXRlZCgoKSA9PiB0aGlzLnN1bW1hcnkoKS5mb3JtYXR0ZWRNZXNzYWdlLmxlbmd0aCA+PSB0aGlzLm1heExlbmd0aCgpKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IG1lc3NhZ2UgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnN1bW1hcnkoKS5mb3JtYXR0ZWRNZXNzYWdlKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGVycm9yQ29sb3IgPSBjb21wdXRlZCgoKSA9PiAodGhpcy5zdW1tYXJ5KCkubGV2ZWwgPT09ICd3YXJuaW5nJyA/ICd3YXJuaW5nJyA6ICdkYW5nZXInKSk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGhhc0F1dG9HZW5lcmF0ZWROb2RlcyA9IGNvbXB1dGVkKCgpID0+XG4gICAgdGhpcy5zdW1tYXJ5KCkuZXJyb3JzLnNvbWUoKHsgbm9kZSB9KSA9PiAobm9kZSBhcyBhbnkpPy5hdXRvR2VuZXJhdGVkKVxuICApO1xuXG4gIHByb3RlY3RlZCBvblJlc2l6ZWQoeyBuZXdSZWN0OiB7IHdpZHRoIH0gfTogUmVzaXplZEV2ZW50KSB7XG4gICAgdGhpcy5tYXhMZW5ndGguc2V0KE1hdGgubWF4KG1pbmltdW1NYXhMZW5ndGgsIHdpZHRoIC8gMykpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiaXMtZmxleCBpcy1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGlzLWFsaWduLWl0ZW1zLWNlbnRlciBpcy1hbGlnbi1zZWxmLXN0cmV0Y2ggaXMtZ2FwLTggaXMtbWItMlwiPlxuICA8ZGl2IGNsYXNzPVwiaXMtZmxleCBpcy1mbGV4LWdyb3ctMSB8IGVycm9ycy1wYXRoIGJvcmRlci1yaWdodFwiPlxuICAgIDxzcGFuIGNsYXNzPVwiaGFzLXRleHQtd2VpZ2h0LWJvbGRcIj57eyBzdW1tYXJ5KCkucGF0aCB8fCAnLScgfX08L3NwYW4+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJpcy1mbGV4IGlzLWFsaWduLWl0ZW1zLWNlbnRlciBpcy1nYXAtNCB8IGVycm9ycy1jb3VudFwiPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiaXMtZmxleCBpcy1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGlzLWFsaWduLWl0ZW1zLWNlbnRlciBoYXMtYmFja2dyb3VuZC17e1xuICAgICAgICBlcnJvckNvbG9yKClcbiAgICAgIH19IHwgZXJyb3JzLWNvdW50LS1udW1iZXJcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiaGFzLXRleHQtd2VpZ2h0LWJvbGQgaGFzLXRleHQtd2hpdGVcIj57eyBzdW1tYXJ5KCkuY291bnQgfX08L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPHNwYW4gY2xhc3M9XCJoYXMtdGV4dC17eyBlcnJvckNvbG9yKCkgfX0gaXMtY2FwaXRhbGl6ZWRcIj5cbiAgICAgIHt7IHN1bW1hcnkoKS5sZXZlbCB8IHBsdXJhbGl6ZTogc3VtbWFyeSgpLmNvdW50IH19XG4gICAgPC9zcGFuPlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwicHktMiB3LTEwMCBib3JkZXIteVwiPlxuICBAaWYgKHN1bW1hcnkoKS50ZXJtcykge1xuICAgIDxwIGNsYXNzPVwiaXMtc2l6ZS03XCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImlzLXByLTEgaGFzLXRleHQtd2VpZ2h0LWJvbGRcIj5UZXJtczo8L3NwYW4+XG4gICAgICA8c3BhbiBbaW5uZXJIdG1sXT1cInN1bW1hcnkoKS50ZXJtc1wiPjwvc3Bhbj5cbiAgICA8L3A+XG4gIH1cblxuICBAaWYgKGhhc0F1dG9HZW5lcmF0ZWROb2RlcygpKSB7XG4gICAgPHAgY2xhc3M9XCJpcy1zaXplLTcgaGFzLXRleHQtaW5mb1wiPlxuICAgICAgPHNwYW4+U29tZSBub2RlcyBhcmUgYXV0by1nZW5lcmF0ZWQgYW5kIHRoZSB7eyBzdW1tYXJ5KCkubGV2ZWwgfX0gbWlnaHQgY29tZSBmcm9tIG90aGVyIG5vZGVzPC9zcGFuPlxuICAgIDwvcD5cbiAgfVxuXG4gIDxwIGNsYXNzPVwiaXMtaXRhbGljIGhhcy10ZXh0LXdlaWdodC1zZW1pbGlnaHQgaGFzLXRleHQtZ3JleS1kYXJrXCIgKHJlc2l6ZWQpPVwib25SZXNpemVkKCRldmVudClcIj5cbiAgICA8c3BhbiBbaW5uZXJIVE1MXT1cIm1lc3NhZ2UoKSB8IGVsbGlwc2lzOiB0ZXh0TWF4TGVuZ3RoKClcIj48L3NwYW4+XG4gICAgQGlmIChzaG93TW9yZUJ1dHRvbigpKSB7XG4gICAgICA8YSBjbGFzcz1cImhhcy10ZXh0LXdlaWdodC1zZW1pYm9sZFwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IHNob3dNb3JlLnNldCghc2hvd01vcmUoKSlcIj5cbiAgICAgICAgQGlmIChzaG93TW9yZSgpKSB7XG4gICAgICAgICAgbGVzc1xuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICBtb3JlXG4gICAgICAgIH1cbiAgICAgIDwvYT5cbiAgICB9XG4gIDwvcD5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cInB4LTEgcHktMyB3LTEwMFwiPlxuICA8ZGl2IGNsYXNzPVwiaXMtZmxleCBpcy1hbGlnbi1pdGVtcy1jZW50ZXIgaXMtZ2FwLTggfCByZXNvbHZlZC1hY3Rpb25zXCI+XG4gICAgPHAgY2xhc3M9XCJoYXMtdGV4dC13ZWlnaHQtYm9sZCBpcy1zaXplLTdcIj5SZXNvbHZlZD88L3A+XG5cbiAgICA8YVxuICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgcmVzb2x2ZWQuc2V0KGZhbHNlKVwiXG4gICAgICBjbGFzcz1cInJlc29sdmVkLWFjdGlvbnMtLXVucmVzb2x2ZVwiXG4gICAgICBbY2xhc3MuaXMtcmVzb2x2ZWRdPVwicmVzb2x2ZWQoKVwiPlxuICAgICAgPGZhLWljb24gW2ljb25dPVwiZmFUaW1lc0NpcmNsZVwiIC8+XG4gICAgPC9hPlxuXG4gICAgPGFcbiAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IHJlc29sdmVkLnNldCh0cnVlKVwiXG4gICAgICBjbGFzcz1cInJlc29sdmVkLWFjdGlvbnMtLXJlc29sdmVcIlxuICAgICAgW2NsYXNzLmlzLXJlc29sdmVkXT1cInJlc29sdmVkKClcIj5cbiAgICAgIDxmYS1pY29uIFtpY29uXT1cImZhQ2hlY2tDaXJjbGVcIiAvPlxuICAgIDwvYT5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZXMtZXJyb3Itc3VtbWFyeS1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9maWxlcy9maWxlcy1lcnJvci1zdW1tYXJ5L2ZpbGVzLWVycm9yLXN1bW1hcnktaXRlbS9maWxlcy1lcnJvci1zdW1tYXJ5LWl0ZW0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vc3JjL2ZpbGVzL2ZpbGVzLWVycm9yLXN1bW1hcnkvZmlsZXMtZXJyb3Itc3VtbWFyeS1pdGVtL2ZpbGVzLWVycm9yLXN1bW1hcnktaXRlbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUVqRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQy9ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBZ0IsTUFBTSxtQ0FBbUMsQ0FBQzs7QUFHbkYsTUFBTSxnQkFBZ0IsR0FBRyxHQUFHLENBQUM7QUFVN0IsTUFBTSxPQUFPLDhCQUE4QjtJQVIzQztRQVNxQixrQkFBYSxHQUFHLGFBQWEsQ0FBQztRQUM5QixrQkFBYSxHQUFHLGFBQWEsQ0FBQztRQUVqQyxZQUFPLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBWSxDQUFDO1FBQ3JEOztXQUVHO1FBQ2EsYUFBUSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV2QixjQUFTLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDbkMsa0JBQWEsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMvRixhQUFRLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pCLG1CQUFjLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDNUYsWUFBTyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUMxRCxlQUFVLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUV6RiwwQkFBcUIsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQ3ZELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUUsSUFBWSxFQUFFLGFBQWEsQ0FBQyxDQUN2RSxDQUFDO0tBS0g7SUFIVyxTQUFTLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBZ0I7UUFDdEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RCxDQUFDOytHQXZCVSw4QkFBOEI7bUdBQTlCLDhCQUE4QiwwWUNuQjNDLDhzRUFnRUEsKzZCRGxEWSxlQUFlLHVNQUFFLFlBQVksNENBQUUsYUFBYSxrREFBRSxnQkFBZ0I7OzRGQUs3RCw4QkFBOEI7a0JBUjFDLFNBQVM7K0JBQ0UsNkJBQTZCLGNBQzNCLElBQUksV0FDUCxDQUFDLGVBQWUsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixDQUFDLG1CQUN4RCx1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgY29tcHV0ZWQsIGlucHV0LCBtb2RlbCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGYUljb25Db21wb25lbnQgfSBmcm9tICdAZm9ydGF3ZXNvbWUvYW5ndWxhci1mb250YXdlc29tZSc7XG5pbXBvcnQgeyBmYUNoZWNrQ2lyY2xlLCBmYVRpbWVzQ2lyY2xlIH0gZnJvbSAnQGZvcnRhd2Vzb21lL2ZyZWUtc29saWQtc3ZnLWljb25zJztcblxuaW1wb3J0IHsgRWxsaXBzaXNQaXBlIH0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL2VsbGlwc2lzLnBpcGUnO1xuaW1wb3J0IHsgUGx1cmFsaXplUGlwZSB9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi9wbHVyYWxpemUucGlwZSc7XG5pbXBvcnQgeyBSZXNpemVkRGlyZWN0aXZlLCBSZXNpemVkRXZlbnQgfSBmcm9tICcuLi8uLi8uLi9jb21tb24vcmVzaXplZC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSVN1bW1hcnkgfSBmcm9tICcuLi9maWxlcy1lcnJvci1zdW1tYXJ5Lm1vZGVsJztcblxuY29uc3QgbWluaW11bU1heExlbmd0aCA9IDE1MDtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaGUtZmlsZXMtZXJyb3Itc3VtbWFyeS1pdGVtJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0ZhSWNvbkNvbXBvbmVudCwgRWxsaXBzaXNQaXBlLCBQbHVyYWxpemVQaXBlLCBSZXNpemVkRGlyZWN0aXZlXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHRlbXBsYXRlVXJsOiAnLi9maWxlcy1lcnJvci1zdW1tYXJ5LWl0ZW0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vZmlsZXMtZXJyb3Itc3VtbWFyeS1pdGVtLmNvbXBvbmVudC5zY3NzJ1xufSlcbmV4cG9ydCBjbGFzcyBGaWxlc0Vycm9yU3VtbWFyeUl0ZW1Db21wb25lbnQge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZmFDaGVja0NpcmNsZSA9IGZhQ2hlY2tDaXJjbGU7XG4gIHByb3RlY3RlZCByZWFkb25seSBmYVRpbWVzQ2lyY2xlID0gZmFUaW1lc0NpcmNsZTtcblxuICBwdWJsaWMgcmVhZG9ubHkgc3VtbWFyeSA9IGlucHV0LnJlcXVpcmVkPElTdW1tYXJ5PigpO1xuICAvKipcbiAgICogRXJyb3IgaXMgcmVzb2x2ZWQgYW5kIHNob3VsZCBub3QgYmUgZGlzcGxheWVkIGFueW1vcmUuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcmVzb2x2ZWQgPSBtb2RlbChmYWxzZSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBtYXhMZW5ndGggPSBzaWduYWwobWluaW11bU1heExlbmd0aCk7XG4gIHByb3RlY3RlZCByZWFkb25seSB0ZXh0TWF4TGVuZ3RoID0gY29tcHV0ZWQoKCkgPT4gKHRoaXMuc2hvd01vcmUoKSA/IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSIDogdGhpcy5tYXhMZW5ndGgoKSkpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2hvd01vcmUgPSBzaWduYWwoZmFsc2UpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2hvd01vcmVCdXR0b24gPSBjb21wdXRlZCgoKSA9PiB0aGlzLnN1bW1hcnkoKS5mb3JtYXR0ZWRNZXNzYWdlLmxlbmd0aCA+PSB0aGlzLm1heExlbmd0aCgpKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IG1lc3NhZ2UgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnN1bW1hcnkoKS5mb3JtYXR0ZWRNZXNzYWdlKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGVycm9yQ29sb3IgPSBjb21wdXRlZCgoKSA9PiAodGhpcy5zdW1tYXJ5KCkubGV2ZWwgPT09ICd3YXJuaW5nJyA/ICd3YXJuaW5nJyA6ICdkYW5nZXInKSk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGhhc0F1dG9HZW5lcmF0ZWROb2RlcyA9IGNvbXB1dGVkKCgpID0+XG4gICAgdGhpcy5zdW1tYXJ5KCkuZXJyb3JzLnNvbWUoKHsgbm9kZSB9KSA9PiAobm9kZSBhcyBhbnkpPy5hdXRvR2VuZXJhdGVkKVxuICApO1xuXG4gIHByb3RlY3RlZCBvblJlc2l6ZWQoeyBuZXdSZWN0OiB7IHdpZHRoIH0gfTogUmVzaXplZEV2ZW50KSB7XG4gICAgdGhpcy5tYXhMZW5ndGguc2V0KE1hdGgubWF4KG1pbmltdW1NYXhMZW5ndGgsIHdpZHRoIC8gMykpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiaXMtZmxleCBpcy1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGlzLWFsaWduLWl0ZW1zLWNlbnRlciBpcy1hbGlnbi1zZWxmLXN0cmV0Y2ggaXMtZ2FwLTggaXMtbWItMlwiPlxuICA8ZGl2IGNsYXNzPVwiaXMtZmxleCBpcy1mbGV4LWdyb3ctMSB8IGVycm9ycy1wYXRoIGJvcmRlci1yaWdodFwiPlxuICAgIDxzcGFuIGNsYXNzPVwiaGFzLXRleHQtd2VpZ2h0LWJvbGRcIj57eyBzdW1tYXJ5KCkucGF0aCB8fCAnLScgfX08L3NwYW4+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJpcy1mbGV4IGlzLWFsaWduLWl0ZW1zLWNlbnRlciBpcy1nYXAtNCB8IGVycm9ycy1jb3VudFwiPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiaXMtZmxleCBpcy1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGlzLWFsaWduLWl0ZW1zLWNlbnRlciBoYXMtYmFja2dyb3VuZC17e1xuICAgICAgICBlcnJvckNvbG9yKClcbiAgICAgIH19IHwgZXJyb3JzLWNvdW50LS1udW1iZXJcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiaGFzLXRleHQtd2VpZ2h0LWJvbGQgaGFzLXRleHQtd2hpdGVcIj57eyBzdW1tYXJ5KCkuY291bnQgfX08L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPHNwYW4gY2xhc3M9XCJoYXMtdGV4dC17eyBlcnJvckNvbG9yKCkgfX0gaXMtY2FwaXRhbGl6ZWRcIj5cbiAgICAgIHt7IHN1bW1hcnkoKS5sZXZlbCB8IHBsdXJhbGl6ZTogc3VtbWFyeSgpLmNvdW50IH19XG4gICAgPC9zcGFuPlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwicHktMiB3LTEwMCBib3JkZXIteVwiPlxuICBAaWYgKHN1bW1hcnkoKS50ZXJtcykge1xuICAgIDxwIGNsYXNzPVwiaXMtc2l6ZS03XCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImlzLXByLTEgaGFzLXRleHQtd2VpZ2h0LWJvbGRcIj5UZXJtczo8L3NwYW4+XG4gICAgICA8c3BhbiBbaW5uZXJIdG1sXT1cInN1bW1hcnkoKS50ZXJtc1wiPjwvc3Bhbj5cbiAgICA8L3A+XG4gIH1cblxuICBAaWYgKGhhc0F1dG9HZW5lcmF0ZWROb2RlcygpKSB7XG4gICAgPHAgY2xhc3M9XCJpcy1zaXplLTcgaGFzLXRleHQtaW5mb1wiPlxuICAgICAgPHNwYW4+U29tZSBub2RlcyBhcmUgYXV0by1nZW5lcmF0ZWQgYW5kIHRoZSB7eyBzdW1tYXJ5KCkubGV2ZWwgfX0gbWlnaHQgY29tZSBmcm9tIG90aGVyIG5vZGVzPC9zcGFuPlxuICAgIDwvcD5cbiAgfVxuXG4gIDxwIGNsYXNzPVwiaXMtaXRhbGljIGhhcy10ZXh0LXdlaWdodC1zZW1pbGlnaHQgaGFzLXRleHQtZ3JleS1kYXJrXCIgKHJlc2l6ZWQpPVwib25SZXNpemVkKCRldmVudClcIj5cbiAgICA8c3BhbiBbaW5uZXJIVE1MXT1cIm1lc3NhZ2UoKSB8IGVsbGlwc2lzOiB0ZXh0TWF4TGVuZ3RoKClcIj48L3NwYW4+XG4gICAgQGlmIChzaG93TW9yZUJ1dHRvbigpKSB7XG4gICAgICA8YSBjbGFzcz1cImhhcy10ZXh0LXdlaWdodC1zZW1pYm9sZFwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IHNob3dNb3JlLnNldCghc2hvd01vcmUoKSlcIj5cbiAgICAgICAgQGlmIChzaG93TW9yZSgpKSB7XG4gICAgICAgICAgbGVzc1xuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICBtb3JlXG4gICAgICAgIH1cbiAgICAgIDwvYT5cbiAgICB9XG4gIDwvcD5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cInB4LTEgcHktMyB3LTEwMFwiPlxuICA8ZGl2IGNsYXNzPVwiaXMtZmxleCBpcy1hbGlnbi1pdGVtcy1jZW50ZXIgaXMtZ2FwLTggfCByZXNvbHZlZC1hY3Rpb25zXCI+XG4gICAgPHAgY2xhc3M9XCJoYXMtdGV4dC13ZWlnaHQtYm9sZCBpcy1zaXplLTdcIj5SZXNvbHZlZD88L3A+XG5cbiAgICA8YVxuICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgcmVzb2x2ZWQuc2V0KGZhbHNlKVwiXG4gICAgICBjbGFzcz1cInJlc29sdmVkLWFjdGlvbnMtLXVucmVzb2x2ZVwiXG4gICAgICBbY2xhc3MuaXMtcmVzb2x2ZWRdPVwicmVzb2x2ZWQoKVwiPlxuICAgICAgPGZhLWljb24gW2ljb25dPVwiZmFUaW1lc0NpcmNsZVwiIC8+XG4gICAgPC9hPlxuXG4gICAgPGFcbiAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IHJlc29sdmVkLnNldCh0cnVlKVwiXG4gICAgICBjbGFzcz1cInJlc29sdmVkLWFjdGlvbnMtLXJlc29sdmVcIlxuICAgICAgW2NsYXNzLmlzLXJlc29sdmVkXT1cInJlc29sdmVkKClcIj5cbiAgICAgIDxmYS1pY29uIFtpY29uXT1cImZhQ2hlY2tDaXJjbGVcIiAvPlxuICAgIDwvYT5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -9,7 +9,8 @@ import { faMap } from '@fortawesome/free-solid-svg-icons';
9
9
  import { formatCustomErrorMessage, formatError, isMissingPropertyError, errorHasError, errorHasWarning, missingNodeErrors, isMissingOneOfError, isMigrationError, migrationErrorMessage } from './files-error.model';
10
10
  import { schemaRequiredProperties, valueTypeToDefault, definitionToSchemaType, availableProperties, nestingTypeEnabled, nestingEnabled, linkTypeEnabled, isSchemaIri } from '../schema/schema.service';
11
11
  import { matchCountry } from '../search/search.model';
12
- import { code, glossaryBaseUrl, glossaryLink, isExternal, mapsUrl, safeJSONParse, safeJSONStringify, schemaLink } from '../common/utils';
12
+ import { code, glossaryBaseUrl, glossaryLink, isExternal, safeJSONParse, safeJSONStringify, schemaLink } from '../common/utils';
13
+ import { mapsUrl } from '../common/maps-utils';
13
14
  const missingNodeErrorMessage = ({ '@type': _t, type, name }, missingIdError) => (_t || type) === 'Term'
14
15
  ? // migrated from a value to another
15
16
  isMigrationError(missingIdError)
@@ -611,4 +612,4 @@ export const calculateCycleStartDate = (properties, property) => {
611
612
  const endDate = siblingProperty(properties, property, 'endDate');
612
613
  return moment(endDate.value).locale('en-gb').subtract(cycleDuration.value, 'days').format('YYYY-MM-DD');
613
614
  };
614
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZXMtZm9ybS5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9maWxlcy9maWxlcy1mb3JtLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQixPQUFPLEdBQUcsTUFBTSxZQUFZLENBQUM7QUFDN0IsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLEVBQUUsSUFBSSxNQUFNLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMzRCxPQUFPLEVBRUwsVUFBVSxFQUNWLFFBQVEsRUFDUixVQUFVLEVBQ1YsV0FBVyxFQUNYLFlBQVksRUFHWixnQkFBZ0IsRUFDakIsTUFBTSxzQkFBc0IsQ0FBQztBQUc5QixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFHMUQsT0FBTyxFQUNMLHdCQUF3QixFQUN4QixXQUFXLEVBQ1gsc0JBQXNCLEVBQ3RCLGFBQWEsRUFDYixlQUFlLEVBQ2YsaUJBQWlCLEVBQ2pCLG1CQUFtQixFQUNuQixnQkFBZ0IsRUFDaEIscUJBQXFCLEVBQ3RCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUNMLHdCQUF3QixFQUN4QixrQkFBa0IsRUFDbEIsc0JBQXNCLEVBQ3RCLG1CQUFtQixFQUNuQixrQkFBa0IsRUFDbEIsY0FBYyxFQUNkLGVBQWUsRUFDZixXQUFXLEVBQ1osTUFBTSwwQkFBMEIsQ0FBQztBQUNsQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEQsT0FBTyxFQUNMLElBQUksRUFDSixlQUFlLEVBQ2YsWUFBWSxFQUNaLFVBQVUsRUFDVixPQUFPLEVBQ1AsYUFBYSxFQUNiLGlCQUFpQixFQUNqQixVQUFVLEVBQ1gsTUFBTSxpQkFBaUIsQ0FB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QUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDMUcsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgY29tcGxleGl0eSAqL1xuaW1wb3J0IGdldCBmcm9tICdsb2Rhc2guZ2V0JztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCAnbW9tZW50L2xvY2FsZS9lbi1nYic7XG5pbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tICd1dWlkJztcbmltcG9ydCB7IGRpZmZJbkRheXMsIGlzTnVtYmVyIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC91dGlscyc7XG5pbXBvcnQge1xuICBKU09OIGFzIEhlc3RpYUpzb24sXG4gIFNjaGVtYVR5cGUsXG4gIE5vZGVUeXBlLFxuICBpc1R5cGVOb2RlLFxuICBpc1R5cGVWYWxpZCxcbiAgaXNFeHBhbmRhYmxlLFxuICBTaXRlLFxuICBPcmdhbmlzYXRpb24sXG4gIHR5cGVUb1NjaGVtYVR5cGVcbn0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9zY2hlbWEnO1xuaW1wb3J0IHsgZGVmaW5pdGlvbnMsIGRlZmluaXRpb24sIElEZWZpbml0aW9uT2JqZWN0LCBJRGVmaW5pdGlvbkFycmF5LCBnZW5lcmljVHlwZSB9IGZyb20gJ0BoZXN0aWEtZWFydGgvanNvbi1zY2hlbWEnO1xuaW1wb3J0IHsgSWNvbkRlZmluaXRpb24gfSBmcm9tICdAZm9ydGF3ZXNvbWUvZm9udGF3ZXNvbWUtc3ZnLWNvcmUnO1xuaW1wb3J0IHsgZmFNYXAgfSBmcm9tICdAZm9ydGF3ZXNvbWUvZnJlZS1zb2xpZC1zdmctaWNvbnMnO1xuXG5pbXBvcnQgeyBJVmFsaWRhdGlvbkVycm9yLCB2YWxpZGF0aW9uRXJyb3JMZXZlbCB9IGZyb20gJy4uL3NjaGVtYS9zY2hlbWEtdmFsaWRhdGlvbi5tb2RlbCc7XG5pbXBvcnQge1xuICBmb3JtYXRDdXN0b21FcnJvck1lc3NhZ2UsXG4gIGZvcm1hdEVycm9yLFxuICBpc01pc3NpbmdQcm9wZXJ0eUVycm9yLFxuICBlcnJvckhhc0Vycm9yLFxuICBlcnJvckhhc1dhcm5pbmcsXG4gIG1pc3NpbmdOb2RlRXJyb3JzLFxuICBpc01pc3NpbmdPbmVPZkVycm9yLFxuICBpc01pZ3JhdGlvbkVycm9yLFxuICBtaWdyYXRpb25FcnJvck1lc3NhZ2Vcbn0gZnJvbSAnLi9maWxlcy1lcnJvci5tb2RlbCc7XG5pbXBvcnQge1xuICBzY2hlbWFSZXF1aXJlZFByb3BlcnRpZXMsXG4gIHZhbHVlVHlwZVRvRGVmYXVsdCxcbiAgZGVmaW5pdGlvblRvU2NoZW1hVHlwZSxcbiAgYXZhaWxhYmxlUHJvcGVydGllcyxcbiAgbmVzdGluZ1R5cGVFbmFibGVkLFxuICBuZXN0aW5nRW5hYmxlZCxcbiAgbGlua1R5cGVFbmFibGVkLFxuICBpc1NjaGVtYUlyaVxufSBmcm9tICcuLi9zY2hlbWEvc2NoZW1hLnNlcnZpY2UnO1xuaW1wb3J0IHsgbWF0Y2hDb3VudHJ5IH0gZnJvbSAnLi4vc2VhcmNoL3NlYXJjaC5tb2RlbCc7XG5pbXBvcnQge1xuICBjb2RlLFxuICBnbG9zc2FyeUJhc2VVcmwsXG4gIGdsb3NzYXJ5TGluayxcbiAgaXNFeHRlcm5hbCxcbiAgbWFwc1VybCxcbiAgc2FmZUpTT05QYXJzZSxcbiAgc2FmZUpTT05TdHJpbmdpZnksXG4gIHNjaGVtYUxpbmtcbn0gZnJvbSAnLi4vY29tbW9uL3V0aWxzJztcblxuY29uc3QgbWlzc2luZ05vZGVFcnJvck1lc3NhZ2UgPSAoeyAnQHR5cGUnOiBfdCwgdHlwZSwgbmFtZSB9OiBhbnksIG1pc3NpbmdJZEVycm9yPzogSVZhbGlkYXRpb25FcnJvcikgPT5cbiAgKF90IHx8IHR5cGUpID09PSAnVGVybSdcbiAgICA/IC8vIG1pZ3JhdGVkIGZyb20gYSB2YWx1ZSB0byBhbm90aGVyXG4gICAgICBpc01pZ3JhdGlvbkVycm9yKG1pc3NpbmdJZEVycm9yKVxuICAgICAgPyBtaWdyYXRpb25FcnJvck1lc3NhZ2UobWlzc2luZ0lkRXJyb3IpXG4gICAgICA6IGAke25hbWUgPyBgVGhlIHRlcm0gXCIke25hbWV9XCJgIDogJ1RoaXMgdGVybSd9IGRvZXNuJ3QgbWF0Y2ggYSB0ZXJtIGluIHRoZSAke2dsb3NzYXJ5TGluaygnR2xvc3Nhcnkgb2YgVGVybXMnKX0uXG4gICAgICBQbGVhc2UgY2hlY2sgdGhlICR7Z2xvc3NhcnlMaW5rKCdHbG9zc2FyeScpfSBmb3IgdGhlIGNvcnJlY3QgJHtjb2RlKCdAaWQnKX0gb3IgJHtjb2RlKCduYW1lJyl9IGFuZCBzcGVsbGluZy5gXG4gICAgOiBgVGhpcyAke3NjaGVtYUxpbmsoX3QgfHwgdHlwZSl9IGRvZXMgbm90IGV4aXN0IGluIEhlc3RpYS4gSWYgeW91IGFyZSB0cnlpbmcgdG8gbGluayB0byBhbiBleGlzdGluZ1xuICAgICR7c2NoZW1hTGluayhfdCB8fCB0eXBlKX0gaW4gSGVzdGlhLCBwbGVhc2UgY2hlY2sgdGhlICR7Y29kZSgnbmFtZScpfSBvciAke2NvZGUoJ0BpZCcpfSBpcyBjb3JyZWN0LlxuICAgIElmIHlvdSBhcmUgdHJ5aW5nIHRvIGNyZWF0ZSBhIG5ldyAke3NjaGVtYUxpbmsoX3QgfHwgdHlwZSl9LCBwbGVhc2UgaWRlbnRpZnkgaXQgd2l0aCBhbiAke2NvZGUoJ2lkJyl9IGZpZWxkLmA7XG5cbmV4cG9ydCBjb25zdCBBUlJBWV9ERUxJTUlURVIgPSAnOyc7XG5jb25zdCBpZ25vcmVLZXlzID0gWydmaWxlcGF0aCcsICdfY2FjaGUnXTtcblxuZXhwb3J0IHR5cGUgc3VnZ2VzdGlvblR5cGUgPSBOb2RlVHlwZSB8ICdzZWxlY3QnIHwgJ2RlZmF1bHQnO1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRTdWdnZXN0aW9uVHlwZTogc3VnZ2VzdGlvblR5cGUgPSAnZGVmYXVsdCc7XG5cbmludGVyZmFjZSBJTm9kZVByb3BlcnR5U3VnZ2VzdGlvbiB7XG4gIHR5cGU/OiBzdWdnZXN0aW9uVHlwZTtcbiAgcXVlcmllcz86IGFueVtdO1xuICB2YWx1ZXM/OiBzdHJpbmdbXTtcbiAgcGFyZW50TGV2ZWw/OiBudW1iZXI7XG4gIGlzTGlua05vZGU/OiBib29sZWFuO1xuICBpc1VuaXF1ZUtleT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTmV3UHJvcGVydHkge1xuICBuYW1lPzogc3RyaW5nO1xuICBwcm9wPzogZGVmaW5pdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJRXJyb3JQcm9wZXJ0eSB7XG4gIGxldmVsPzogdmFsaWRhdGlvbkVycm9yTGV2ZWw7XG4gIG1lc3NhZ2U/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSU5vZGVQcm9wZXJ0eSB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0aGlzIHByb3BlcnR5IHdhcyBhZGRlZCBieSB0aGUgdXNlclxuICAgKi9cbiAgaWQ6IHN0cmluZztcbiAgaXNBZGRlZD86IGJvb2xlYW47XG4gIHNjaGVtYVR5cGU6IFNjaGVtYVR5cGU7XG4gIGtleTogc3RyaW5nO1xuICBmdWxsS2V5OiBzdHJpbmc7XG4gIHZhbHVlOiBhbnk7XG4gIGFkZFByb3BlcnR5RW5hYmxlZDogYm9vbGVhbjtcbiAgc3VnZ2VzdGlvbnM/OiBJTm9kZVByb3BlcnR5U3VnZ2VzdGlvbjtcbiAgc2NoZW1hPzogZGVmaW5pdGlvbjtcbiAgZXJyb3I/OiBJVmFsaWRhdGlvbkVycm9yO1xuICBoYXNFcnJvcj86IGJvb2xlYW47XG4gIGhhc1dhcm5pbmc/OiBib29sZWFuO1xuICBlZGl0YWJsZT86IGJvb2xlYW47XG4gIGNsb3NlZFZpc2libGU/OiBib29sZWFuO1xuICBuZXdQcm9wZXJ0eT86IElOZXdQcm9wZXJ0eTtcbiAgbmV3RXJyb3I/OiBJRXJyb3JQcm9wZXJ0eTtcbiAgaXNSZXF1aXJlZD86IGJvb2xlYW47XG4gIGlzSGlkZGVuPzogYm9vbGVhbjtcbiAgaXNBcnJheT86IGJvb2xlYW47XG4gIGlzRXhwYW5kYWJsZT86IGJvb2xlYW47XG4gIGlzT3Blbj86IGJvb2xlYW47XG4gIHByb3BlcnRpZXM6IElOb2RlUHJvcGVydHlbXTtcbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIGV4dGVybmFsVXJsPzoge1xuICAgIHVybD86IHN0cmluZztcbiAgICB0aXRsZTogc3RyaW5nO1xuICAgIC8vIGRlZmF1bHQgaXMgZXh0ZXJuYWwtbGluay1hbHRcbiAgICBpY29uPzogSWNvbkRlZmluaXRpb247XG4gICAgdXJsUGFyYW1WYWx1ZT86IGJvb2xlYW47XG4gIH07XG4gIC8vIG1ha2luZyBjaGFuZ2VzIG9uIHRoZSBwcm9wZXJ0eVxuICBsb2FkaW5nPzogYm9vbGVhbjtcbiAgLy8gdXNlciBtYWRlIGNoYW5nZXMgdG8gdGhlIG9yaWdpbmFsIHZhbHVlXG4gIGNoYW5nZWQ/OiBib29sZWFuO1xuICBmb3JtYXR0ZXI6ICh2YWx1ZTogYW55KSA9PiBzdHJpbmc7XG59XG5cbmNvbnN0IHN0cmluZ1ZhbHVlID0gKHZhbHVlOiBhbnkpID0+ICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IHZhbHVlID09PSBudWxsID8gJycgOiB2YWx1ZSkudG9TdHJpbmcoKTtcbmNvbnN0IG5vbkV4cGFuZGFibGVBcnJheURhdGFQYXRoID0gKGtleTogc3RyaW5nKSA9PiBrZXkucmVwbGFjZSgvXFxbXFxkK1xcXSQvLCAnJyk7XG5leHBvcnQgY29uc3Qga2V5VG9EYXRhUGF0aCA9IChrZXk6IHN0cmluZykgPT4gKGtleT8ubGVuZ3RoID8gYC4ke2tleX1gIDogJycpO1xuZXhwb3J0IGNvbnN0IGRhdGFQYXRoVG9LZXkgPSAoZGF0YVBhdGggPSAnJywgdHJpbUFycmF5ID0gZmFsc2UpID0+XG4gIHRyaW1BcnJheSA/IG5vbkV4cGFuZGFibGVBcnJheURhdGFQYXRoKGRhdGFQYXRoLnN1YnN0cmluZygxKSkgOiBkYXRhUGF0aC5zdWJzdHJpbmcoMSk7XG5leHBvcnQgY29uc3QgcGFyZW50S2V5ID0gKGtleTogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IGtleXMgPSAoa2V5LnN0YXJ0c1dpdGgoJy4nKSA/IGtleS5zdWJzdHJpbmcoMSkgOiBrZXkpLnNwbGl0KCcuJyk7XG4gIGtleXMucG9wKCk7XG4gIHJldHVybiBrZXlzLmpvaW4oJy4nKTtcbn07XG5cbi8qKlxuICogU29ydCBwcm9wZXJ0aWVzIGhhdmluZyBlcnJvcnMsIHR5cGUsIGlkLCAuLi5wcm9wZXJ0aWVzIChzaW1wbGUpLCBhbmQgZmluYWxseSB0aGUgZ3JvdXBzXG4gKlxuICogQHBhcmFtIGEge0lOb2RlUHJvcGVydHl9XG4gKiBAcGFyYW0gYiB7SU5vZGVQcm9wZXJ0eX1cbiAqL1xuZXhwb3J0IGNvbnN0IHNvcnRQcm9wZXJ0aWVzID0gKGE6IElOb2RlUHJvcGVydHksIGI6IElOb2RlUHJvcGVydHkpID0+IHtcbiAgaWYgKGlzTnVtYmVyKGEua2V5KSAmJiBpc051bWJlcihiLmtleSkpIHtcbiAgICByZXR1cm4gK2Eua2V5IC0gK2Iua2V5O1xuICB9XG4gIGlmIChhLmlzRXhwYW5kYWJsZSkge1xuICAgIHJldHVybiBiLmlzRXhwYW5kYWJsZSA/IGEua2V5LmxvY2FsZUNvbXBhcmUoYi5rZXkpIDogMTtcbiAgfVxuICBpZiAoYi5pc0V4cGFuZGFibGUpIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cbiAgaWYgKCFhLmtleSkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuICBjb25zdCBhS2V5ID0gYS5rZXkucmVwbGFjZSgnQCcsICcnKTtcbiAgY29uc3QgYktleSA9IGIua2V5LnJlcGxhY2UoJ0AnLCAnJyk7XG4gIGlmIChhS2V5ID09PSAndHlwZScpIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cbiAgaWYgKGJLZXkgPT09ICd0eXBlJykge1xuICAgIHJldHVybiAxO1xuICB9XG4gIGlmIChhS2V5ID09PSAnaWQnICYmIGJLZXkgIT09ICd0eXBlJykge1xuICAgIHJldHVybiAtMTtcbiAgfVxuICBpZiAoYS5oYXNFcnJvciB8fCBhLmhhc1dhcm5pbmcpIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cbiAgcmV0dXJuIGEua2V5LmxvY2FsZUNvbXBhcmUoYi5rZXkpO1xufTtcblxuY29uc3QgZGVmYXVsdFByb3BlcnR5RXJyb3I6IHtcbiAgW2tleTogc3RyaW5nXTogKGVycm9yOiBhbnksIHByb3BlcnR5OiBJTm9kZVByb3BlcnR5KSA9PiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59ID0ge1xuICBtYXg6ICh7IG1heCB9KSA9PiBgc2hvdWxkIGJlIDw9ICR7bWF4fWAsXG4gIG1pbjogKHsgbWluIH0pID0+IGBzaG91bGQgYmUgPj0gJHttaW59YCxcbiAgcGF0dGVybjogKHsgcmVxdWlyZWRQYXR0ZXJuIH0pID0+IGBzaG91bGQgbWF0Y2ggcGF0dGVybiBcIiR7cmVxdWlyZWRQYXR0ZXJufVwiYCxcbiAgcmVxdWlyZWQ6IChfZSwgeyBzY2hlbWFUeXBlIH0pID0+IChzY2hlbWFUeXBlID8gYHNob3VsZCBiZSBzZXQgb3IgbGlua2VkIHRvIGFub3RoZXIgJHtzY2hlbWFUeXBlfWAgOiB1bmRlZmluZWQpXG59O1xuXG5leHBvcnQgY29uc3QgZm9ybWF0UHJvcGVydHlFcnJvciA9IChlcnJvcnM6IGFueSwgcHJvcGVydHk6IElOb2RlUHJvcGVydHkpID0+IHtcbiAgY29uc3Qga2V5ID0gT2JqZWN0LmtleXMoZXJyb3JzKVswXTtcbiAgcmV0dXJuIGtleSBpbiBkZWZhdWx0UHJvcGVydHlFcnJvciA/IGZvcm1hdEN1c3RvbUVycm9yTWVzc2FnZShkZWZhdWx0UHJvcGVydHlFcnJvcltrZXldKGVycm9yc1trZXldLCBwcm9wZXJ0eSkpIDogJyc7XG59O1xuXG5leHBvcnQgY29uc3QgZm9ybWF0dGVyID0gKGtleTogc3RyaW5nKSA9PiAodmFsdWU6IGFueSkgPT5cbiAgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyA/IHZhbHVlLmJpYmxpb2dyYXBoeT8udGl0bGUgfHwgdmFsdWVba2V5XSB8fCB2YWx1ZS5uYW1lIDogdmFsdWU7XG5cbmV4cG9ydCBjb25zdCBoYXNFcnJvciA9IHZhbHVlID0+IChBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLnNvbWUoaGFzRXJyb3IpIDogdmFsdWUuaGFzRXJyb3IpO1xuXG5leHBvcnQgY29uc3QgaGFzV2FybmluZyA9IHZhbHVlID0+IChBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLnNvbWUoaGFzV2FybmluZykgOiB2YWx1ZS5oYXNXYXJuaW5nKTtcblxuY29uc3QgY29tcGlsZVN1Z2dlc3Rpb25RdWVyaWVzID0gKGtleTogc3RyaW5nLCBhbGxPZjogYW55W10pID0+IHtcbiAgY29uc3QgY29uZGl0aW9ucyA9IChhbGxPZiB8fCBbXSlcbiAgICAuZmlsdGVyKHYgPT4gKHYuaWY/LnJlcXVpcmVkIHx8IFtdKS5pbmNsdWRlcyhrZXkpKVxuICAgIC5tYXAodiA9PiB2LnRoZW4/LnByb3BlcnRpZXM/LltrZXldKVxuICAgIC5tYXAodiA9PiB2Py5pdGVtcz8ucHJvcGVydGllcyB8fCB2Py5wcm9wZXJ0aWVzKVxuICAgIC5maWx0ZXIoQm9vbGVhbik7XG4gIHJldHVybiBjb25kaXRpb25zLmxlbmd0aFxuICAgID8gW1xuICAgICAgICB7XG4gICAgICAgICAgYm9vbDoge1xuICAgICAgICAgICAgc2hvdWxkOiBjb25kaXRpb25zLmZsYXRNYXAoY29uZCA9PlxuICAgICAgICAgICAgICBPYmplY3Qua2V5cyhjb25kKS5mbGF0TWFwKGsgPT5cbiAgICAgICAgICAgICAgICAoY29uZFtrXS5lbnVtIHx8IFtdKS5tYXAodiA9PiAoe1xuICAgICAgICAgICAgICAgICAgbWF0Y2g6IHsgW2tdOiB2IH1cbiAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIG1pbmltdW1fc2hvdWxkX21hdGNoOiAxXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgOiBbXTtcbn07XG5cbi8vIGRlZmF1bHQgc3VnZ2VzdCBmb3IgbGlua2luZyBub2RlcyB0b2dldGhlciB1c2luZyB0aGUgYGlkYCBmaWVsZFxuY29uc3Qgc3VnZ2VzdExpbmtOb2RlcyA9ICh0eXBlOiBOb2RlVHlwZSwgZnVsbEtleTogc3RyaW5nKTogSU5vZGVQcm9wZXJ0eVN1Z2dlc3Rpb24gfCB1bmRlZmluZWQgPT4ge1xuICBjb25zdCBrZXlzID0gZnVsbEtleS5zcGxpdCgnLicpO1xuICBjb25zdCBrZXkgPSBrZXlzLnBvcCgpO1xuICByZXR1cm4ga2V5ID09PSAnaWQnICYmIGtleXMubGVuZ3RoID49IDEgPyB7IHR5cGUsIGlzTGlua05vZGU6IHRydWUgfSA6IHVuZGVmaW5lZDtcbn07XG5cbmNvbnN0IHN1Z2dlc3RFeGlzdGluZ05vZGUgPSAodHlwZTogTm9kZVR5cGUsIGZ1bGxLZXk6IHN0cmluZyk6IElOb2RlUHJvcGVydHlTdWdnZXN0aW9uIHwgdW5kZWZpbmVkID0+IHtcbiAgY29uc3Qga2V5cyA9IGZ1bGxLZXkuc3BsaXQoJy4nKTtcbiAgY29uc3Qga2V5ID0ga2V5cy5wb3AoKSE7XG4gIHJldHVybiBrZXlzLmxlbmd0aCA+PSAxICYmIFsnQGlkJywgJ29wZW5MQ0FJZCddLmluY2x1ZGVzKGtleSkgPyB7IHR5cGUsIGlzVW5pcXVlS2V5OiAnQGlkJyB9IDogdW5kZWZpbmVkO1xufTtcblxuY29uc3QgZGVmYXVsdE5vZGVUeXBlU3VnZ2VzdGlvbiA9ICh0eXBlOiBOb2RlVHlwZSkgPT4gKGZ1bGxLZXk6IHN0cmluZykgPT5cbiAgc3VnZ2VzdExpbmtOb2Rlcyh0eXBlLCBmdWxsS2V5KSB8fCBzdWdnZXN0RXhpc3RpbmdOb2RlKHR5cGUsIGZ1bGxLZXkpO1xuXG5jb25zdCB0ZXJtU3VnZ2VzdGlvbnMgPSAocGFyZW50OiBzdHJpbmcsIHsgYWxsT2YgfTogSURlZmluaXRpb25PYmplY3QpID0+ICh7XG4gIHR5cGU6IE5vZGVUeXBlLlRlcm0sXG4gIHF1ZXJpZXM6IFtcbiAgICAuLi5jb21waWxlU3VnZ2VzdGlvblF1ZXJpZXMobm9uRXhwYW5kYWJsZUFycmF5RGF0YVBhdGgocGFyZW50KSwgYWxsT2YhKSxcbiAgICAuLi4oWydjb3VudHJ5J10uaW5jbHVkZXMocGFyZW50KSA/IFttYXRjaENvdW50cnldIDogW10pXG4gIF1cbn0pO1xuXG5jb25zdCB0eXBlVG9TdWdnZXN0aW9uOiB7XG4gIFt0eXBlIGluIFNjaGVtYVR5cGUgfCBOb2RlVHlwZSB8IGdlbmVyaWNUeXBlIHwgJ2ludGVnZXInXT86IChcbiAgICBmdWxsS2V5OiBzdHJpbmcsXG4gICAgcGFyZW50U2NoZW1hPzogZGVmaW5pdGlvbixcbiAgICBzY2hlbWE/OiBkZWZpbml0aW9uXG4gICkgPT4gSU5vZGVQcm9wZXJ0eVN1Z2dlc3Rpb24gfCBhbnk7XG59ID0ge1xuICBbTm9kZVR5cGUuQWN0b3JdOiBkZWZhdWx0Tm9kZVR5cGVTdWdnZXN0aW9uKE5vZGVUeXBlLkFjdG9yKSxcbiAgW05vZGVUeXBlLkN5Y2xlXTogZGVmYXVsdE5vZGVUeXBlU3VnZ2VzdGlvbihOb2RlVHlwZS5DeWNsZSksXG4gIFtOb2RlVHlwZS5JbXBhY3RBc3Nlc3NtZW50XTogZGVmYXVsdE5vZGVUeXBlU3VnZ2VzdGlvbihOb2RlVHlwZS5JbXBhY3RBc3Nlc3NtZW50KSxcbiAgW05vZGVUeXBlLk9yZ2FuaXNhdGlvbl06IGRlZmF1bHROb2RlVHlwZVN1Z2dlc3Rpb24oTm9kZVR5cGUuT3JnYW5pc2F0aW9uKSxcbiAgW05vZGVUeXBlLlNpdGVdOiBkZWZhdWx0Tm9kZVR5cGVTdWdnZXN0aW9uKE5vZGVUeXBlLlNpdGUpLFxuICBbTm9kZVR5cGUuU291cmNlXTogZGVmYXVsdE5vZGVUeXBlU3VnZ2VzdGlvbihOb2RlVHlwZS5Tb3VyY2UpLFxuICBbTm9kZVR5cGUuVGVybV06IChmdWxsS2V5LCBwYXJlbnRTY2hlbWEpID0+IHtcbiAgICBjb25zdCBrZXlzID0gZnVsbEtleS5zcGxpdCgnLicpO1xuICAgIGNvbnN0IGtleSA9IGtleXMucG9wKCkhO1xuICAgIHJldHVybiBbJ25hbWUnXS5pbmNsdWRlcyhrZXkpICYmIGtleXMubGVuZ3RoID49IDFcbiAgICAgID8gdGVybVN1Z2dlc3Rpb25zKGtleXMucG9wKCkhLCBwYXJlbnRTY2hlbWEgYXMgSURlZmluaXRpb25PYmplY3QpXG4gICAgICA6IGRlZmF1bHROb2RlVHlwZVN1Z2dlc3Rpb24oTm9kZVR5cGUuVGVybSkoZnVsbEtleSk7XG4gIH0sXG4gIFtTY2hlbWFUeXBlLkJpYmxpb2dyYXBoeV06IGZ1bGxLZXkgPT4ge1xuICAgIGNvbnN0IGtleXMgPSBmdWxsS2V5LnNwbGl0KCcuJyk7XG4gICAgY29uc3Qga2V5ID0ga2V5cy5wb3AoKSE7XG4gICAgY29uc3QgcGFyZW50ID0ga2V5cy5wb3AoKSE7XG4gICAgLy8gcHJldmVudCByZXBsYWNpbmcgYSB0b3AtbGV2ZWwgc291cmNlXG4gICAgcmV0dXJuIFsndGl0bGUnLCAnZG9jdW1lbnRET0knLCAnc2NvcHVzJ10uaW5jbHVkZXMoa2V5KSAmJiBwYXJlbnQgPT09ICdiaWJsaW9ncmFwaHknICYmIGtleXMubGVuZ3RoID49IDFcbiAgICAgID8ge1xuICAgICAgICAgIHR5cGU6IE5vZGVUeXBlLlNvdXJjZSxcbiAgICAgICAgICBwYXJlbnRMZXZlbDogMVxuICAgICAgICB9XG4gICAgICA6IHVuZGVmaW5lZDtcbiAgfSxcbiAgbnVtYmVyOiAoX2EsIF9iLCBzY2hlbWEpID0+IHtcbiAgICBjb25zdCB2YWx1ZXMgPSAoc2NoZW1hIGFzIGFueSkuY29uc3QgPyBbKHNjaGVtYSBhcyBhbnkpLmNvbnN0XSA6IFtdO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiB2YWx1ZXMubGVuZ3RoID4gMCA/ICdzZWxlY3QnIDogZGVmYXVsdFN1Z2dlc3Rpb25UeXBlLFxuICAgICAgLy8gZXhjbHVkZSBzdWdnZXN0aW5nIFNjaGVtYVR5cGVcbiAgICAgIHZhbHVlc1xuICAgIH07XG4gIH0sXG4gIGludGVnZXI6IChfYSwgX2IsIHNjaGVtYSkgPT4ge1xuICAgIGNvbnN0IHZhbHVlcyA9IChzY2hlbWEgYXMgYW55KS5jb25zdCA/IFsoc2NoZW1hIGFzIGFueSkuY29uc3RdIDogW107XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IHZhbHVlcy5sZW5ndGggPiAwID8gJ3NlbGVjdCcgOiBkZWZhdWx0U3VnZ2VzdGlvblR5cGUsXG4gICAgICAvLyBleGNsdWRlIHN1Z2dlc3RpbmcgU2NoZW1hVHlwZVxuICAgICAgdmFsdWVzXG4gICAgfTtcbiAgfSxcbiAgc3RyaW5nOiAoZnVsbEtleSwgX2IsIHNjaGVtYSkgPT4ge1xuICAgIC8vIGV4Y2x1ZGUgc3VnZ2VzdGluZyBTY2hlbWFUeXBlXG4gICAgY29uc3QgdmFsdWVzID0gKHNjaGVtYSBhcyBhbnkpLmNvbnN0XG4gICAgICA/IFsoc2NoZW1hIGFzIGFueSkuY29uc3RdXG4gICAgICA6ICgoc2NoZW1hIGFzIGFueSkuZW51bSB8fCBbXSkuZmlsdGVyKHZhbCA9PiAhT2JqZWN0LnZhbHVlcyhTY2hlbWFUeXBlKS5pbmNsdWRlcyh2YWwpKTtcbiAgICBjb25zdCBrZXkgPSBmdWxsS2V5LnNwbGl0KCcuJykucG9wKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IHZhbHVlcy5sZW5ndGggPiAwICYmIGtleSAhPT0gJ3R5cGUnID8gJ3NlbGVjdCcgOiBkZWZhdWx0U3VnZ2VzdGlvblR5cGUsXG4gICAgICB2YWx1ZXNcbiAgICB9O1xuICB9LFxuICBib29sZWFuOiBfYSA9PiAoe1xuICAgIHR5cGU6ICdzZWxlY3QnLFxuICAgIHZhbHVlczogWyd0cnVlJywgJ2ZhbHNlJ11cbiAgfSlcbn07XG5cbmNvbnN0IGVuYWJsZVN1Z2dlc3Rpb25zID0gKFxuICBwYXJlbnRTY2hlbWE6IGRlZmluaXRpb24sXG4gIHR5cGU6IFNjaGVtYVR5cGUgfCBOb2RlVHlwZSB8IGdlbmVyaWNUeXBlLFxuICBmdWxsS2V5OiBzdHJpbmcsXG4gIHNjaGVtYT86IGRlZmluaXRpb25cbikgPT4ge1xuICBjb25zdCBzdWdnZXN0aW9uID0gdHlwZSBpbiB0eXBlVG9TdWdnZXN0aW9uID8gdHlwZVRvU3VnZ2VzdGlvblt0eXBlXSEoZnVsbEtleSwgcGFyZW50U2NoZW1hKSA6IHVuZGVmaW5lZDtcbiAgcmV0dXJuIChcbiAgICBzdWdnZXN0aW9uIHx8XG4gICAgKHNjaGVtYSAmJiAoc2NoZW1hLnR5cGUgYXMgZ2VuZXJpY1R5cGUpIGluIHR5cGVUb1N1Z2dlc3Rpb25cbiAgICAgID8gdHlwZVRvU3VnZ2VzdGlvbltzY2hlbWEudHlwZSBhcyBnZW5lcmljVHlwZV0hKGZ1bGxLZXksIHBhcmVudFNjaGVtYSwgc2NoZW1hKVxuICAgICAgOiB1bmRlZmluZWQpXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3Qgbm9kZUF2YWlsYWJsZVByb3BlcnRpZXMgPSAoXG4gIG5vZGU6IEhlc3RpYUpzb248U2NoZW1hVHlwZT4sXG4gIHsgZnVsbEtleSwgc2NoZW1hLCBzY2hlbWFUeXBlIH06IFBhcnRpYWw8SU5vZGVQcm9wZXJ0eT5cbikgPT4gYXZhaWxhYmxlUHJvcGVydGllcyhzY2hlbWEhLCBzY2hlbWFUeXBlISwgZnVsbEtleSA/IGdldChub2RlLCBmdWxsS2V5LCB7fSkgOiBub2RlLCBmdWxsS2V5IS5sZW5ndGggPiAwKTtcblxuZXhwb3J0IGNvbnN0IGlzQWRkUHJvcGVydHlFbmFibGVkID0gKFxuICBub2RlOiBIZXN0aWFKc29uPFNjaGVtYVR5cGU+LFxuICBzY2hlbWFUeXBlOiBTY2hlbWFUeXBlLFxuICBzY2hlbWE6IGRlZmluaXRpb24sXG4gIGZ1bGxLZXkgPSAnJ1xuKSA9PlxuICAhIXNjaGVtYSAmJlxuICAhIU9iamVjdC5rZXlzKG5vZGVBdmFpbGFibGVQcm9wZXJ0aWVzKG5vZGUsIHsgZnVsbEtleSwgc2NoZW1hIH0pKS5sZW5ndGggJiZcbiAgKCFmdWxsS2V5IHx8IG5lc3RpbmdUeXBlRW5hYmxlZChzY2hlbWFUeXBlKSk7XG5cbmNvbnN0IGVkaXRhYmxlS2V5ID0gKGtleTogc3RyaW5nKSA9PiAhWyd0eXBlJywgJ0B0eXBlJywgJ3Rlcm1UeXBlJ10uaW5jbHVkZXMoa2V5KTtcblxuZXhwb3J0IGNvbnN0IHByb3BlcnR5SWQgPSAoKSA9PiB1dWlkdjQoKTtcblxuY29uc3QgaXNHZW9qc29uID0gKHNjaGVtYTogYW55KSA9PiBzY2hlbWEuZ2VvanNvbjtcblxuY29uc3QgcHJvcGVydHlVcmwgPSAobm9kZTogSGVzdGlhSnNvbjxTY2hlbWFUeXBlPiwga2V5OiBzdHJpbmcpID0+XG4gIFsnQGlkJywgJ2lkJywgJ25hbWUnXS5pbmNsdWRlcyhrZXkpICYmIGxpbmtUeXBlRW5hYmxlZChub2RlWydAdHlwZSddIHx8IG5vZGUudHlwZSlcbiAgICA/IG5vZGVbJ0BpZCddIHx8XG4gICAgICAvLyBoYW5kbGUgbGlua3Mgb24gQ29tbXVuaXR5IEVkaXRpb25cbiAgICAgIChpc0V4dGVybmFsKCkgJiYgbm9kZS5pZClcbiAgICAgID8ge1xuICAgICAgICAgIHVybDogYC8keyhub2RlWydAdHlwZSddIHx8IG5vZGUudHlwZSkudG9Mb3dlckNhc2UoKX0vJHtub2RlWydAaWQnXSB8fCBub2RlLmlkfWAsXG4gICAgICAgICAgdGl0bGU6ICdPcGVuJ1xuICAgICAgICB9XG4gICAgICA6IG5vZGVbJ0B0eXBlJ10gPT09IFNjaGVtYVR5cGUuVGVybVxuICAgICAgICA/IHtcbiAgICAgICAgICAgIHVybDogYCR7Z2xvc3NhcnlCYXNlVXJsKCl9P3F1ZXJ5PWAsXG4gICAgICAgICAgICB1cmxQYXJhbVZhbHVlOiB0cnVlLFxuICAgICAgICAgICAgdGl0bGU6ICdTZWFyY2ggaW4gR2xvc3NhcnknXG4gICAgICAgICAgfVxuICAgICAgICA6IHVuZGVmaW5lZFxuICAgIDogdW5kZWZpbmVkO1xuXG5jb25zdCBwcm9wZXJ0eU1hcHNVcmwgPSAobm9kZTogU2l0ZSB8IE9yZ2FuaXNhdGlvbiwga2V5OiBzdHJpbmcsIHZhbHVlKSA9PlxuICBbJ3R5cGUnXS5pbmNsdWRlcyhrZXkpICYmXG4gIFtTY2hlbWFUeXBlLlNpdGUudG9TdHJpbmcoKSwgU2NoZW1hVHlwZS5PcmdhbmlzYXRpb24udG9TdHJpbmcoKV0uaW5jbHVkZXMoc3RyaW5nVmFsdWUodmFsdWUpIHx8IG5vZGUudHlwZSlcbiAgICA/IHtcbiAgICAgICAgdXJsOiBtYXBzVXJsKHsgbGF0OiBub2RlLmxhdGl0dWRlLCBsbmc6IG5vZGUubG9uZ2l0dWRlIH0pLFxuICAgICAgICB0aXRsZTogJ1ZpZXcgb24gbWFwcycsXG4gICAgICAgIGljb246IGZhTWFwXG4gICAgICB9XG4gICAgOiB1bmRlZmluZWQ7XG5cbmNvbnN0IHByb3BlcnR5RXh0ZXJuYWxVcmwgPSAobm9kZTogSGVzdGlhSnNvbjxTY2hlbWFUeXBlPiwga2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpID0+XG4gIHByb3BlcnR5VXJsKG5vZGUsIGtleSkgfHwgcHJvcGVydHlNYXBzVXJsKG5vZGUgYXMgYW55LCBrZXksIHZhbHVlKTtcblxuY29uc3QgYXJyYXlQbGFjZWhvbGRlciA9ICh2YWx1ZVR5cGU6IGdlbmVyaWNUeXBlKSA9PiBgVHlwZSBhICR7dmFsdWVUeXBlfSB0aGVuIHByZXNzIEVudGVyYDtcblxuY29uc3QgZGVmYXVsdFBsYWNlaG9sZGVyID0gKHsgdHlwZSwgZXhhbXBsZXMsIGdlb2pzb24gfTogYW55LCB2YWx1ZVR5cGU6IGdlbmVyaWNUeXBlKSA9PlxuICBnZW9qc29uXG4gICAgPyAnTXVzdCBiZSBhIHZhbGlkIEdlb0pTT04nXG4gICAgOiBleGFtcGxlcz8ubGVuZ3RoXG4gICAgICA/IEFycmF5LmlzQXJyYXkoZXhhbXBsZXNbMF0pXG4gICAgICAgID8gYXJyYXlQbGFjZWhvbGRlcih2YWx1ZVR5cGUpXG4gICAgICAgIDogZXhhbXBsZXNbMF1cbiAgICAgIDogYE11c3QgYmUgb2YgdHlwZSAke3R5cGUgfHwgdmFsdWVUeXBlfWA7XG5cbmNvbnN0IHNjaGVtYVBsYWNob2xkZXIgPSAoc2NoZW1hOiBhbnksIGZ1bGxLZXk6IHN0cmluZykgPT4ge1xuICBjb25zdCBbcGFyZW50LCAuLi5rZXlzXSA9IGZ1bGxLZXkuc3BsaXQoJy4nKTtcbiAgY29uc3QgcHJvcGVydGllcyA9IHNjaGVtYS5wcm9wZXJ0aWVzIHx8IHt9O1xuICBjb25zdCB7IGV4YW1wbGVzIH0gPSBwYXJlbnQgaW4gcHJvcGVydGllcyA/IHByb3BlcnRpZXNbcGFyZW50XSA6IHsgZXhhbXBsZXM6IFtdIH07XG4gIHJldHVybiBleGFtcGxlcz8ubGVuZ3RoICYmIHR5cGVvZiBleGFtcGxlc1swXSA9PT0gJ29iamVjdCcgPyBnZXQoZXhhbXBsZXNbMF0sIGtleXMuam9pbignLicpLCBudWxsKSA6IG51bGw7XG59O1xuXG5jb25zdCBwcm9wZXJ0eVBsYWNlaG9sZGVyID0gKHNjaGVtYTogYW55LCB2YWx1ZVR5cGU6IGdlbmVyaWNUeXBlLCBmdWxsS2V5ID0gJycsIHBhcmVudFNjaGVtYT86IGFueSkgPT5cbiAgc2NoZW1hLnR5cGUgPT09ICdhcnJheSdcbiAgICA/IGFycmF5UGxhY2Vob2xkZXIodmFsdWVUeXBlKVxuICAgIDogKHBhcmVudFNjaGVtYSAmJiBmdWxsS2V5Py5sZW5ndGggPyBzY2hlbWFQbGFjaG9sZGVyKHBhcmVudFNjaGVtYSwgZnVsbEtleSkgOiBudWxsKSB8fFxuICAgICAgZGVmYXVsdFBsYWNlaG9sZGVyKHNjaGVtYSwgdmFsdWVUeXBlKTtcblxuY29uc3QgcHJvcGVydHlUeXBlVmFsdWU6IHtcbiAgW3R5cGU6IHN0cmluZ106ICh2YWx1ZTogYW55LCBzY2hlbWE6IGRlZmluaXRpb24pID0+IGFueTtcbn0gPSB7XG4gIG9iamVjdDogc2FmZUpTT05TdHJpbmdpZnksXG4gIGFycmF5OiAodmFsLCBzY2hlbWEpID0+IHtcbiAgICBjb25zdCB7IGl0ZW1zIH0gPSBzY2hlbWEgYXMgSURlZmluaXRpb25BcnJheTtcbiAgICByZXR1cm4gJyRyZWYnIGluIGl0ZW1zXG4gICAgICA/IHZhbFxuICAgICAgOiBBcnJheS5pc0FycmF5KHZhbClcbiAgICAgICAgPyB2YWwubWFwKHZhbHVlID0+IHByb3BlcnR5VmFsdWUoaXRlbXMsIHZhbHVlKSkuam9pbihBUlJBWV9ERUxJTUlURVIpXG4gICAgICAgIDogdmFsO1xuICB9LFxuICBqc29uOiB2YWwgPT4gdmFsIHx8ICcnLFxuICBzdHJpbmc6IHZhbCA9PiAoYCR7dmFsfWAgfHwgJycpLnRyaW0oKSxcbiAgbnVtYmVyOiB2YWwgPT4gKyhgJHt2YWx9YCB8fCAnMCcpLFxuICBpbnRlZ2VyOiB2YWwgPT4gKyhgJHt2YWx9YCB8fCAnMCcpLFxuICBib29sZWFuOiB2YWwgPT4gKGAke3ZhbH1gIHx8ICcnKS50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZSdcbn07XG5cbmNvbnN0IHByb3BlcnR5VmFsdWUgPSAoc2NoZW1hOiBkZWZpbml0aW9uLCB2YWx1ZTogYW55KSA9PiB7XG4gIGNvbnN0IHZhbHVlVHlwZSA9IGlzR2VvanNvbihzY2hlbWEpXG4gICAgPyAnanNvbidcbiAgICA6IHNjaGVtYS50eXBlXG4gICAgICA/IEFycmF5LmlzQXJyYXkoc2NoZW1hLnR5cGUpICYmICh0eXBlb2YgdmFsdWUpIGluIHByb3BlcnR5VHlwZVZhbHVlXG4gICAgICAgID8gdHlwZW9mIHZhbHVlXG4gICAgICAgIDogKHNjaGVtYS50eXBlIGFzIHN0cmluZylcbiAgICAgIDogJ29iamVjdCc7XG4gIHJldHVybiBwcm9wZXJ0eVR5cGVWYWx1ZVt2YWx1ZVR5cGUgaW4gcHJvcGVydHlUeXBlVmFsdWUgPyB2YWx1ZVR5cGUgOiAnc3RyaW5nJ10odmFsdWUsIHNjaGVtYSk7XG59O1xuXG5jb25zdCBwcm9wZXJ0eVZhbHVlVHlwZSA9IChzY2hlbWE6IGRlZmluaXRpb24sIHZhbHVlPzogYW55KSA9PlxuICAoaXNHZW9qc29uKHNjaGVtYSlcbiAgICA/ICdqc29uJ1xuICAgIDogc2NoZW1hLnR5cGVcbiAgICAgID8gQXJyYXkuaXNBcnJheShzY2hlbWEudHlwZSlcbiAgICAgICAgPyBzY2hlbWEudHlwZVswXVxuICAgICAgICA6IHNjaGVtYS50eXBlID09PSAnYXJyYXknXG4gICAgICAgICAgPyBwcm9wZXJ0eVZhbHVlVHlwZSh7IC4uLnNjaGVtYSwgdHlwZTogW3NjaGVtYS5pdGVtcy50eXBlIGFzIGdlbmVyaWNUeXBlXSB9KVxuICAgICAgICAgIDogc2NoZW1hLnR5cGVcbiAgICAgIDogdHlwZW9mIHZhbHVlKSBhcyBnZW5lcmljVHlwZTtcblxuY29uc3QgcHJvcGVydHlUeXBlUGFyc2VWYWx1ZToge1xuICBbdHlwZTogc3RyaW5nXTogKHZhbHVlOiBhbnksIHNjaGVtYTogZGVmaW5pdGlvbikgPT4gYW55O1xufSA9IHtcbiAgdW5kZWZpbmVkOiAoKSA9PiB1bmRlZmluZWQsXG4gIG9iamVjdDogdmFsID0+IHNhZmVKU09OUGFyc2UodmFsKSxcbiAgYXJyYXk6ICh2YWwsIHNjaGVtYSkgPT4ge1xuICAgIGNvbnN0IHsgaXRlbXMgfSA9IHNjaGVtYSBhcyBJRGVmaW5pdGlvbkFycmF5O1xuICAgIHJldHVybiAnJHJlZicgaW4gaXRlbXNcbiAgICAgID8gdmFsXG4gICAgICA6ICF2YWwgfHwgQXJyYXkuaXNBcnJheSh2YWwpXG4gICAgICAgID8gdmFsXG4gICAgICAgIDogdmFsLnNwbGl0KEFSUkFZX0RFTElNSVRFUikubWFwKHZhbHVlID0+IHBhcnNlTmV3VmFsdWUoaXRlbXMsIHZhbHVlKSk7XG4gIH0sXG4gIGpzb246IHZhbCA9PiB2YWwgfHwgJycsXG4gIHN0cmluZzogdmFsID0+IChgJHt2YWx9YCB8fCAnJykudHJpbSgpLFxuICBudW1iZXI6IHZhbCA9PiArKGAke3ZhbH1gIHx8ICcwJyksXG4gIGludGVnZXI6IHZhbCA9PiArKGAke3ZhbH1gIHx8ICcwJyksXG4gIGJvb2xlYW46IHZhbCA9PiAoYCR7dmFsfWAgfHwgJycpLnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJ1xufTtcblxuLyoqXG4gKiBDb252ZXJ0IHZhbHVlIHRvIHRoZSBmaW5hbCB0eXBlIGluIHRoZSBzY2hlbWEuXG4gKlxuICogQHBhcmFtIHNjaGVtYSBEZWZpbml0aW9uIG9mIHRoZSB2YWx1ZS5cbiAqIEBwYXJhbSB2YWx1ZVxuICogQHJldHVybnMgVmFsdWUgaW4gdGhlIGNvcnJlY3QgZm9ybWF0LlxuICovXG5leHBvcnQgY29uc3QgcGFyc2VOZXdWYWx1ZSA9IChzY2hlbWE6IGRlZmluaXRpb24sIHZhbHVlOiBhbnkpID0+XG4gIHNjaGVtYT8udHlwZVxuICAgID8gQXJyYXkuaXNBcnJheShzY2hlbWE/LnR5cGUpXG4gICAgICA/IHByb3BlcnR5VHlwZVBhcnNlVmFsdWVbdHlwZW9mIHZhbHVlXSh2YWx1ZSwgc2NoZW1hKVxuICAgICAgOiBwcm9wZXJ0eVR5cGVQYXJzZVZhbHVlW2lzR2VvanNvbihzY2hlbWEpID8gJ2pzb24nIDogKHNjaGVtYS50eXBlIGFzIHN0cmluZyldKHZhbHVlLCBzY2hlbWEpXG4gICAgOiB2YWx1ZTtcblxuY29uc3QgaXNPcGVuRGVmYXVsdCA9IChzY2hlbWFUeXBlOiBTY2hlbWFUeXBlKSA9PiBbU2NoZW1hVHlwZS5UZXJtXS5pbmNsdWRlcyhzY2hlbWFUeXBlKTtcblxuLy8gY2FuIHRoZSBwcm9wZXJ0eSBiZSBzZWVuIHdoZW4gdGhlIGdyb3VwIGlzIGNsb3NlZFxuY29uc3QgaXNLZXlDbG9zZWRWaXNpYmxlID0gKGtleTogc3RyaW5nKSA9PiBbJ3R5cGUnLCAnaWQnLCAnQHR5cGUnLCAnQGlkJ10uaW5jbHVkZXMoa2V5KTtcblxuY29uc3QgaXNLZXlIaWRkZW4gPSAoa2V5OiBzdHJpbmcpID0+IFsndHlwZScsICdAdHlwZSddLmluY2x1ZGVzKGtleSk7XG5cbmNvbnN0IGlzS2V5UmVxdWlyZWQgPSAoa2V5OiBzdHJpbmcsIGRlZj86IElEZWZpbml0aW9uT2JqZWN0KSA9PlxuICBbJ3R5cGUnLCAnaWQnXS5pbmNsdWRlcyhrZXkpIHx8IChkZWY/LnJlcXVpcmVkIHx8IFtdKS5pbmNsdWRlcyhrZXkpO1xuXG5leHBvcnQgY29uc3QgcHJvcGVydHlFcnJvciA9XG4gIChlcnJvcnM6IElWYWxpZGF0aW9uRXJyb3JbXSkgPT5cbiAgKGRhdGFQYXRoOiBzdHJpbmcsIG5vbkV4cGFuZGFibGVBcnJheSA9IGZhbHNlKSA9PlxuICAgIGVycm9ycy5maW5kKFxuICAgICAgZXJyb3IgPT5cbiAgICAgICAgKGVycm9yLmRhdGFQYXRoID09PSBkYXRhUGF0aCB8fFxuICAgICAgICAgIChub25FeHBhbmRhYmxlQXJyYXkgJiZcbiAgICAgICAgICAgIG5vbkV4cGFuZGFibGVBcnJheURhdGFQYXRoKGVycm9yLmRhdGFQYXRoISkgPT09IG5vbkV4cGFuZGFibGVBcnJheURhdGFQYXRoKGRhdGFQYXRoKSkpICYmXG4gICAgICAgIChkYXRhUGF0aC5sZW5ndGggPiAwIHx8ICFpc01pc3NpbmdQcm9wZXJ0eUVycm9yKGVycm9yKSlcbiAgICApO1xuXG5jb25zdCBtaXNzaW5nUHJvcGVydHlFcnJvcnMgPSAoXG4gIG5vZGU6IEhlc3RpYUpzb248U2NoZW1hVHlwZT4sXG4gIGVycm9yczogSVZhbGlkYXRpb25FcnJvcltdLFxuICBwYXJlbnQgPSAnJ1xuKTogSU5vZGVQcm9wZXJ0eVtdID0+IHtcbiAgY29uc3QgYWxsRXJyb3JzID0gZXJyb3JzLmZpbHRlcihlcnJvciA9PiBlcnJvci5kYXRhUGF0aCA9PT0ga2V5VG9EYXRhUGF0aChwYXJlbnQpICYmIGlzTWlzc2luZ1Byb3BlcnR5RXJyb3IoZXJyb3IpKTtcbiAgLy8gY2hlY2sgZm9yIG5vZGUgbm90IGZvdW5kIGVycm9yc1xuICBjb25zdCBtaXNzaW5nTm9kZSA9IG1pc3NpbmdOb2RlRXJyb3JzKGFsbEVycm9ycyk7XG4gIHJldHVybiBtaXNzaW5nTm9kZS5sZW5ndGggPT09IDJcbiAgICA/IFtcbiAgICAgICAge1xuICAgICAgICAgIGlkOiBwcm9wZXJ0eUlkKCksXG4gICAgICAgICAgc2NoZW1hVHlwZTogbm9kZS50eXBlLFxuICAgICAgICAgIHN1Z2dlc3Rpb25zOiB7IHR5cGU6IGRlZmF1bHRTdWdnZXN0aW9uVHlwZSB9LFxuICAgICAgICAgIGtleTogJycsXG4gICAgICAgICAgZnVsbEtleTogcGFyZW50LFxuICAgICAgICAgIHZhbHVlOiAnJyxcbiAgICAgICAgICBlcnJvcjoge1xuICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICBtZXNzYWdlOiBtaXNzaW5nTm9kZUVycm9yTWVzc2FnZShcbiAgICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgICAgbWlzc2luZ05vZGUuZmluZCgoeyBwYXJhbXMgfSkgPT4gcGFyYW1zPy5taXNzaW5nUHJvcGVydHkgPT09ICdAaWQnKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgaGFzRXJyb3I6IHRydWUsXG4gICAgICAgICAgcHJvcGVydGllczogW10sXG4gICAgICAgICAgYWRkUHJvcGVydHlFbmFibGVkOiBmYWxzZSxcbiAgICAgICAgICBmb3JtYXR0ZXI6IGZvcm1hdHRlcignJylcbiAgICAgICAgfVxuICAgICAgXVxuICAgIDogYWxsRXJyb3JzLm1hcChlcnJvciA9PiB7XG4gICAgICAgIGNvbnN0IHsgbWlzc2luZ1Byb3BlcnR5IH0gPSBlcnJvci5wYXJhbXMhO1xuICAgICAgICBjb25zdCBmdWxsS2V5ID0gcGFyZW50ID8gYCR7cGFyZW50fS4ke21pc3NpbmdQcm9wZXJ0eX1gIDogbWlzc2luZ1Byb3BlcnR5O1xuICAgICAgICBjb25zdCBtaXNzaW5nT25lT2YgPSBpc01pc3NpbmdPbmVPZkVycm9yKGVycm9yKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpZDogcHJvcGVydHlJZCgpLFxuICAgICAgICAgIHNjaGVtYVR5cGU6IG5vZGUudHlwZSxcbiAgICAgICAgICBzdWdnZXN0aW9uczogeyB0eXBlOiBkZWZhdWx0U3VnZ2VzdGlvblR5cGUgfSxcbiAgICAgICAgICBrZXk6IG1pc3NpbmdQcm9wZXJ0eSxcbiAgICAgICAgICBmdWxsS2V5LFxuICAgICAgICAgIHZhbHVlOiAnJyxcbiAgICAgICAgICBlZGl0YWJsZTogZmFsc2UsXG4gICAgICAgICAgZXJyb3I6IGZvcm1hdEVycm9yKGVycm9yKSxcbiAgICAgICAgICBoYXNFcnJvcjogbWlzc2luZ09uZU9mID8gZmFsc2UgOiBlcnJvckhhc0Vycm9yKGVycm9yKSxcbiAgICAgICAgICBoYXNXYXJuaW5nOiBtaXNzaW5nT25lT2YgfHwgZXJyb3JIYXNXYXJuaW5nKGVycm9yKSxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiBbXSxcbiAgICAgICAgICBhZGRQcm9wZXJ0eUVuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgZm9ybWF0dGVyOiBmb3JtYXR0ZXIobWlzc2luZ1Byb3BlcnR5KVxuICAgICAgICB9O1xuICAgICAgfSk7XG59O1xuXG5jb25zdCBwcm9wZXJ0eUZyb21Ob2RlID1cbiAgKFxuICAgIHNjaGVtYXM6IGRlZmluaXRpb25zLFxuICAgIGVycm9yczogSVZhbGlkYXRpb25FcnJvcltdLFxuICAgIG5vZGVTY2hlbWE6IGRlZmluaXRpb24sXG4gICAgZGVlcEVkaXRhYmxlOiBib29sZWFuLFxuICAgIHBhcmVudCA9ICcnLFxuICAgIG5vZGU6IGFueVxuICApID0+XG4gIChrZXk6IHN0cmluZyk6IElOb2RlUHJvcGVydHkgPT4ge1xuICAgIGNvbnN0IHZhbHVlID0gbm9kZVtrZXldO1xuICAgIGNvbnN0IGV4cGFuZGFibGUgPSBpc0V4cGFuZGFibGUodmFsdWUpO1xuICAgIGNvbnN0IGlzQXJyYXkgPSBBcnJheS5pc0FycmF5KHZhbHVlKTtcbiAgICBjb25zdCBub25FeHBhbmRhYmxlQXJyYXkgPSBpc0FycmF5ICYmICFleHBhbmRhYmxlO1xuICAgIGNvbnN0IGZ1bGxLZXkgPSBBcnJheS5pc0FycmF5KG5vZGUpID8gYCR7cGFyZW50fVske2tleX1dYCA6IFtwYXJlbnQsIGtleV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJy4nKTtcbiAgICBjb25zdCBub2RlVHlwZSA9IG5vZGUudHlwZSB8fCBub2RlWydAdHlwZSddO1xuICAgIGNvbnN0IHNjaGVtYVR5cGUgPSBleHBhbmRhYmxlXG4gICAgICA/IGlzQXJyYXkgJiYgdmFsdWUubGVuZ3RoXG4gICAgICAgID8gdmFsdWVbMF0udHlwZSB8fCB2YWx1ZVswXVsnQHR5cGUnXVxuICAgICAgICA6IHZhbHVlLnR5cGUgfHwgdmFsdWVbJ0B0eXBlJ11cbiAgICAgIDogbm9kZVR5cGU7XG4gICAgY29uc3Qgc2NoZW1hID1cbiAgICAgIChzY2hlbWFzICYmIGlzVHlwZVZhbGlkKHsgdHlwZTogc2NoZW1hVHlwZSB9KVxuICAgICAgICA/IGV4cGFuZGFibGVcbiAgICAgICAgICA/IHNjaGVtYXNbc2NoZW1hVHlwZV1cbiAgICAgICAgICA6IHNjaGVtYXNbc2NoZW1hVHlwZV0ucHJvcGVydGllc1trZXldXG4gICAgICAgIDogbnVsbCkgfHwge307XG4gICAgY29uc3QgaXNJcmkgPSBpc1NjaGVtYUlyaShzY2hlbWEpO1xuICAgIGNvbnN0IGVycm9yID0gcHJvcGVydHlFcnJvcihlcnJvcnMpKGtleVRvRGF0YVBhdGgoZnVsbEtleSksIG5vbkV4cGFuZGFibGVBcnJheSk7XG4gICAgY29uc3QgcGFyZW50U2NoZW1hID0gZXhwYW5kYWJsZVxuICAgICAgPyAvLyBUT0RPOiBmb3Igbm9uLWFycmF5LCBzaG91bGQgYmUgc2NoZW1hIHVubGVzcyBsYXN0IHJlY3Vyc2lvblxuICAgICAgICBpc0FycmF5XG4gICAgICAgID8gc2NoZW1hXG4gICAgICAgIDogbm9kZVNjaGVtYVxuICAgICAgOiBub2RlU2NoZW1hO1xuICAgIGNvbnN0IHByb3BlcnRpZXMgPVxuICAgICAgZXhwYW5kYWJsZSB8fCBpc0lyaSA/IHJlY3Vyc2l2ZVByb3BlcnRpZXMoc2NoZW1hcywgZXJyb3JzLCBwYXJlbnRTY2hlbWEsIGRlZXBFZGl0YWJsZSwgZnVsbEtleSkodmFsdWUpIDogW107XG4gICAgY29uc3QgaW5FcnJvciA9IGVycm9ySGFzRXJyb3IoZXJyb3IpIHx8IGhhc0Vycm9yKHByb3BlcnRpZXMpO1xuICAgIGNvbnN0IGluV2FybmluZyA9IGVycm9ySGFzV2FybmluZyhlcnJvcikgfHwgaGFzV2FybmluZyhwcm9wZXJ0aWVzKTtcbiAgICBjb25zdCBlZGl0YWJsZSA9XG4gICAgICBpc1R5cGVOb2RlKG5vZGVbJ0B0eXBlJ10pIHx8IChleHBhbmRhYmxlICYmIGlzVHlwZU5vZGUodmFsdWVbJ0B0eXBlJ10pKVxuICAgICAgICA/IGZhbHNlXG4gICAgICAgIDogLy8gcHJldmVudCBlZGl0aW5nL2FkZGluZyBuZXcgcHJvcGVydGllcyBvbiBleGlzdGluZyBzdWItbm9kZXNcbiAgICAgICAgICAhZGVlcEVkaXRhYmxlICYmXG4gICAgICAgICAgICBpc1R5cGVOb2RlKHNjaGVtYVR5cGUpICYmXG4gICAgICAgICAgICAoZXhwYW5kYWJsZSA/IHZhbHVlLnR5cGUgIT09IE5vZGVUeXBlLlRlcm0gOiBwYXJlbnQgJiYgbm9kZS50eXBlICE9PSBOb2RlVHlwZS5UZXJtKVxuICAgICAgICAgID8gZmFsc2VcbiAgICAgICAgICA6IC8vIGhhbmRsZSBJUklcbiAgICAgICAgICAgICghc2NoZW1hVHlwZSAmJiBrZXkgPT09ICdAaWQnKSB8fCBlZGl0YWJsZUtleShrZXkpO1xuICAgIGNvbnN0IHZhbHVlVHlwZSA9IHByb3BlcnR5VmFsdWVUeXBlKHNjaGVtYSwgdmFsdWUpO1xuICAgIHJldHVybiB7XG4gICAgICBpZDogcHJvcGVydHlJZCgpLFxuICAgICAgc2NoZW1hVHlwZTogaXNJcmkgPyBudWxsIDogc2NoZW1hVHlwZSxcbiAgICAgIHNjaGVtYSxcbiAgICAgIGtleSxcbiAgICAgIGZ1bGxLZXksXG4gICAgICB2YWx1ZTogcHJvcGVydHlWYWx1ZShzY2hlbWEsIHZhbHVlKSxcbiAgICAgIGVkaXRhYmxlOiBpbkVycm9yIHx8IGVkaXRhYmxlLFxuICAgICAgc3VnZ2VzdGlvbnM6IGVuYWJsZVN1Z2dlc3Rpb25zKG5vZGVTY2hlbWEsIG5vZGUudHlwZSwgZnVsbEtleSwgc2NoZW1hKSxcbiAgICAgIGFkZFByb3BlcnR5RW5hYmxlZDogaXNBZGRQcm9wZXJ0eUVuYWJsZWQobm9kZSwgc2NoZW1hVHlwZSwgc2NoZW1hLCBmdWxsS2V5KSxcbiAgICAgIG5ld1Byb3BlcnR5OiB7fSxcbiAgICAgIG5ld0Vycm9yOiB7IGxldmVsOiAnd2FybmluZycgfSxcbiAgICAgIGVycm9yOiBmb3JtYXRFcnJvcihlcnJvciksXG4gICAgICBpc0hpZGRlbjogcGFyZW50ICYmIGlzS2V5SGlkZGVuKGtleSksXG4gICAgICBjbG9zZWRWaXNpYmxlOiBpc0tleUNsb3NlZFZpc2libGUoa2V5KSxcbiAgICAgIGhhc0Vycm9yOiBpbkVycm9yLFxuICAgICAgaGFzV2FybmluZzogaW5XYXJuaW5nLFxuICAgICAgaXNSZXF1aXJlZDogaXNLZXlSZXF1aXJlZChrZXksIHNjaGVtYXNbbm9kZVR5cGVdKSxcbiAgICAgIGlzQXJyYXksXG4gICAgICBpc0V4cGFuZGFibGU6IGV4cGFuZGFibGUsXG4gICAgICBpc09wZW46IGlzT3BlbkRlZmF1bHQoc2NoZW1hVHlwZSksXG4gICAgICBwcm9wZXJ0aWVzLFxuICAgICAgcGxhY2Vob2xkZXI6IHByb3BlcnR5UGxhY2Vob2xkZXIoc2NoZW1hLCB2YWx1ZVR5cGUsIGZ1bGxLZXksIHBhcmVudFNjaGVtYSksXG4gICAgICBleHRlcm5hbFVybDogcHJvcGVydHlFeHRlcm5hbFVybChub2RlLCBrZXksIHZhbHVlKSxcbiAgICAgIGZvcm1hdHRlcjogZm9ybWF0dGVyKGtleSlcbiAgICB9O1xuICB9O1xuXG5leHBvcnQgY29uc3Qgc2luZ2xlUHJvcGVydHkgPSAoc2NoZW1hczogZGVmaW5pdGlvbnMsIGVycm9yczogSVZhbGlkYXRpb25FcnJvcltdLCBub2RlOiBhbnksIGZ1bGxLZXk6IHN0cmluZykgPT4ge1xuICBjb25zdCBbX3QsIC4uLmtleXNdID0gZnVsbEtleS5zcGxpdCgnLicpO1xuICBjb25zdCBrZXkgPSBrZXlzLnBvcCgpITtcbiAgY29uc3QgcGFyZW50ID0ga2V5cy5qb2luKCcuJyk7XG4gIGNvbnN0IHBhcmVudE5vZGUgPSBwYXJlbnQubGVuZ3RoID8gZ2V0KG5vZGUsIHBhcmVudCkgOiBub2RlO1xuICBjb25zdCBzY2hlbWFUeXBlID0gdHlwZVRvU2NoZW1hVHlwZShwYXJlbnROb2RlLnR5cGUgfHwgcGFyZW50Tm9kZVsnQHR5cGUnXSk7XG4gIGNvbnN0IHBhcmVudFNjaGVtYSA9IHNjaGVtYXNbc2NoZW1hVHlwZV07XG4gIHJldHVybiBwcm9wZXJ0eUZyb21Ob2RlKHNjaGVtYXMsIGVycm9ycywgcGFyZW50U2NoZW1hLCB0cnVlLCBwYXJlbnQsIHBhcmVudE5vZGUpKGtleSk7XG59O1xuXG5leHBvcnQgY29uc3QgcmVjdXJzaXZlUHJvcGVydGllcyA9XG4gIChzY2hlbWFzOiBkZWZpbml0aW9ucywgZXJyb3JzOiBJVmFsaWRhdGlvbkVycm9yW10sIG5vZGVTY2hlbWE6IGRlZmluaXRpb24sIGRlZXBFZGl0YWJsZTogYm9vbGVhbiwgcGFyZW50ID0gJycpID0+XG4gIChub2RlOiBhbnkpOiBJTm9kZVByb3BlcnR5W10gPT5cbiAgICBPYmplY3Qua2V5cyhub2RlKVxuICAgICAgLmZpbHRlcihrZXkgPT4gIWlnbm9yZUtleXMuaW5jbHVkZXMoa2V5KSlcbiAgICAgIC5tYXAocHJvcGVydHlGcm9tTm9kZShzY2hlbWFzLCBlcnJvcnMsIG5vZGVTY2hlbWEsIGRlZXBFZGl0YWJsZSwgcGFyZW50LCBub2RlKSlcbiAgICAgIC5jb25jYXQoLi4ubWlzc2luZ1Byb3BlcnR5RXJyb3JzKG5vZGUsIGVycm9ycywgcGFyZW50KSlcbiAgICAgIC5zb3J0KHNvcnRQcm9wZXJ0aWVzKTtcblxuY29uc3QgZnVsbEtleVBhcnRzID0gKGZ1bGxLZXk6IHN0cmluZykgPT5cbiAgZnVsbEtleS5zcGxpdCgnLicpLmZsYXRNYXAodmFsID0+IHtcbiAgICBpZiAodmFsLmVuZHNXaXRoKCddJykpIHtcbiAgICAgIGNvbnN0IFtrZXksIGluZGV4XSA9IHZhbC5zcGxpdCgnWycpO1xuICAgICAgcmV0dXJuIFtrZXksIGluZGV4LnJlcGxhY2UoJ10nLCAnJyldO1xuICAgIH1cbiAgICByZXR1cm4gdmFsO1xuICB9KTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZVByb3BlcnRpZXMgPSAoXG4gIHsgcHJvcGVydGllcyB9OiBQYXJ0aWFsPElOb2RlUHJvcGVydHk+LFxuICB1cGRhdGVyOiAocHJvcDogSU5vZGVQcm9wZXJ0eSkgPT4gSU5vZGVQcm9wZXJ0eVxuKSA9PiAocHJvcGVydGllcyB8fCBbXSkubWFwKHByb3AgPT4gdXBkYXRlUHJvcGVydGllcyh1cGRhdGVyKHByb3ApLCB1cGRhdGVyKSk7XG5cbmV4cG9ydCBjb25zdCB0eXBlVG9OZXdQcm9wZXJ0eSA9IChcbiAgc2NoZW1hczogZGVmaW5pdGlvbnMsXG4gIHNjaGVtYTogZGVmaW5pdGlvbixcbiAgbm9kZVNjaGVtYTogZGVmaW5pdGlvbixcbiAgbm9kZTogYW55LFxuICBmdWxsS2V5OiBzdHJpbmdcbik6IElOb2RlUHJvcGVydHkgPT4ge1xuICBjb25zdCBrZXkgPSBmdWxsS2V5UGFydHMoZnVsbEtleSkucG9wKCkhO1xuICBjb25zdCBtYXBwaW5nczoge1xuICAgIFtrZXk6IHN0cmluZ106ICgpID0+IElOb2RlUHJvcGVydHk7XG4gIH0gPSB7XG4gICAgb2JqZWN0OiAoKSA9PiB7XG4gICAgICBjb25zdCB7IHNjaGVtYVR5cGUsIHByb3BlcnRpZXMgfSA9IHNjaGVtYVJlcXVpcmVkUHJvcGVydGllcyhzY2hlbWFzLCBzY2hlbWEgYXMgSURlZmluaXRpb25PYmplY3QpO1xuICAgICAgbm9kZVtrZXldID0gbm9kZVtrZXldIHx8IHt9O1xuICAgICAgbm9kZVtrZXldLnR5cGUgPSBzY2hlbWFUeXBlO1xuICAgICAgLy8gVE9ETzogaGFuZGxlIG5vZGVTY2hlbWEgc2hvdWxkIGJlIHNjaGVtYSB1bmxlc3MgbGFzdCByZWN1cnNpb25cbiAgICAgIGNvbnN0IHByb3BzID0gcHJvcGVydGllc1xuICAgICAgICAuZmlsdGVyKHByb3AgPT4gbmVzdGluZ0VuYWJsZWQoc2NoZW1hVHlwZSwgcHJvcC5rZXkpICYmICEhcHJvcC52YWx1ZSlcbiAgICAgICAgLm1hcCh2ID0+ICh7XG4gICAgICAgICAgLi4udHlwZVRvTmV3UHJvcGVydHkoc2NoZW1hcywgdi52YWx1ZSwgbm9kZVNjaGVtYSwgbm9kZVtrZXldLCBgJHtmdWxsS2V5fS4ke3Yua2V5fWApLFxuICAgICAgICAgIGlzUmVxdWlyZWQ6IHRydWVcbiAgICAgICAgfSkpO1xuICAgICAgY29uc3QgdmFsdWUgPSBwcm9wcy5yZWR1Y2UoKHByZXYsIGN1cnIpID0+ICh7IC4uLnByZXYsIFtjdXJyLmtleV06IGN1cnIudmFsdWUgfSksIHt9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkOiBwcm9wZXJ0eUlkKCksXG4gICAgICAgIGlzQWRkZWQ6IHRydWUsXG4gICAgICAgIHNjaGVtYTogc2NoZW1hc1tzY2hlbWFUeXBlXSxcbiAgICAgICAgc2NoZW1hVHlwZSxcbiAgICAgICAga2V5LFxuICAgICAgICBmdWxsS2V5LFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgZWRpdGFibGU6IGVkaXRhYmxlS2V5KGtleSksXG4gICAgICAgIGlzSGlkZGVuOiBpc0tleUhpZGRlbihrZXkpLFxuICAgICAgICBjbG9zZWRWaXNpYmxlOiBpc0tleUNsb3NlZFZpc2libGUoa2V5KSxcbiAgICAgICAgc3VnZ2VzdGlvbnM6IGVuYWJsZVN1Z2dlc3Rpb25zKG5vZGVTY2hlbWEsIHNjaGVtYVR5cGUsIGZ1bGxLZXkpLFxuICAgICAgICBwcm9wZXJ0aWVzOiBwcm9wcy5zb3J0KHNvcnRQcm9wZXJ0aWVzKSxcbiAgICAgICAgYWRkUHJvcGVydHlFbmFibGVkOiBpc0FkZFByb3BlcnR5RW5hYmxlZChub2RlLCBzY2hlbWFUeXBlLCBzY2hlbWFzW3NjaGVtYVR5cGVdLCBrZXkpLFxuICAgICAgICBuZXdQcm9wZXJ0eToge30sXG4gICAgICAgIG5ld0Vycm9yOiB7IGxldmVsOiAnd2FybmluZycgfSxcbiAgICAgICAgaXNSZXF1aXJlZDogaXNLZXlSZXF1aXJlZChrZXksIHNjaGVtYSBhcyBhbnkpLFxuICAgICAgICBpc0FycmF5OiBmYWxzZSxcbiAgICAgICAgaXNFeHBhbmRhYmxlOiB0cnVlLFxuICAgICAgICBpc09wZW46IGlzT3BlbkRlZmF1bHQoc2NoZW1hVHlwZSksXG4gICAgICAgIGZvcm1hdHRlcjogZm9ybWF0dGVyKGtleSlcbiAgICAgIH07XG4gICAgfSxcbiAgICBhcnJheTogKCkgPT4ge1xuICAgICAgY29uc3QgeyBpdGVtcyB9ID0gc2NoZW1hIGFzIElEZWZpbml0aW9uQXJyYXk7XG4gICAgICAvLyBhcnJheSBvZiBzdHJpbmcsIG51bWJlciBhbmQgYm9vbGVhblxuICAgICAgaWYgKGl0ZW1zLnR5cGUpIHtcbiAgICAgICAgcmV0dXJuIG1hcHBpbmdzLmRlZmF1bHQoKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNjaGVtYVR5cGUgPSBkZWZpbml0aW9uVG9TY2hlbWFUeXBlKGl0ZW1zIGFzIElEZWZpbml0aW9uT2JqZWN0KTtcbiAgICAgIG5vZGVba2V5XSA9IG5vZGVba2V5XSB8fCBbXTtcbiAgICAgIG5vZGVba2V5XS5wdXNoKHt9KTtcbiAgICAgIGNvbnN0IHByb3BlcnR5ID0gdHlwZVRvTmV3UHJvcGVydHkoc2NoZW1hcywgaXRlbXMsIHNjaGVtYXNbc2NoZW1hVHlwZV0sIG5vZGVba2V5XVswXSwgYCR7ZnVsbEtleX1bMF1gKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkOiBwcm9wZXJ0eUlkKCksXG4gICAgICAgIGlzQWRkZWQ6IHRydWUsXG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgc2NoZW1hVHlwZSxcbiAgICAgICAga2V5LFxuICAgICAgICBmdWxsS2V5LFxuICAgICAgICB2YWx1ZTogW3Byb3BlcnR5LnZhbHVlXSxcbiAgICAgICAgZWRpdGFibGU6IGVkaXRhYmxlS2V5KGtleSksXG4gICAgICAgIGlzSGlkZGVuOiBpc0tleUhpZGRlbihrZXkpLFxuICAgICAgICBjbG9zZWRWaXNpYmxlOiBpc0tleUNsb3NlZFZpc2libGUoa2V5KSxcbiAgICAgICAgc3VnZ2VzdGlvbnM6IHVuZGVmaW5lZCxcbiAgICAgICAgcHJvcGVydGllczogW3Byb3BlcnR5XSxcbiAgICAgICAgbmV3UHJvcGVydHk6IHt9LFxuICAgICAgICBuZXdFcnJvcjogeyBsZXZlbDogJ3dhcm5pbmcnIH0sXG4gICAgICAgIGlzQXJyYXk6IHRydWUsXG4gICAgICAgIGlzRXhwYW5kYWJsZTogdHJ1ZSxcbiAgICAgICAgYWRkUHJvcGVydHlFbmFibGVkOiBmYWxzZSxcbiAgICAgICAgZm9ybWF0dGVyOiBmb3JtYXR0ZXIoa2V5KVxuICAgICAgfTtcbiAgICB9LFxuICAgIGdlb2pzb246ICgpID0+IHR5cGVUb05ld1Byb3BlcnR5KHNjaGVtYXMsIHsgdHlwZTogJ2pzb24nIH0gYXMgYW55LCBub2RlU2NoZW1hLCBub2RlLCBmdWxsS2V5KSxcbiAgICBkZWZhdWx0OiAoKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZVR5cGUgPSBwcm9wZXJ0eVZhbHVlVHlwZShzY2hlbWEpO1xuICAgICAgY29uc3QgdmFsdWUgPSBzY2hlbWEuZGVmYXVsdCB8fCAoc2NoZW1hIGFzIGFueSkuY29uc3QgfHwgdmFsdWVUeXBlVG9EZWZhdWx0W3ZhbHVlVHlwZV07XG4gICAgICBub2RlW2tleV0gPSB2YWx1ZTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkOiBwcm9wZXJ0eUlkKCksXG4gICAgICAgIGlzQWRkZWQ6IHRydWUsXG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgc2NoZW1hVHlwZTogbm9kZS50eXBlLFxuICAgICAgICBrZXksXG4gICAgICAgIGZ1bGxLZXksXG4gICAgICAgIHZhbHVlOiBwcm9wZXJ0eVZhbHVlKHNjaGVtYSwgdmFsdWUpLFxuICAgICAgICBlZGl0YWJsZTogZWRpdGFibGVLZXkoa2V5KSxcbiAgICAgICAgaXNIaWRkZW46IGlzS2V5SGlkZGVuKGtleSksXG4gICAgICAgIGNsb3NlZFZpc2libGU6IGlzS2V5Q2xvc2VkVmlzaWJsZShrZXkpLFxuICAgICAgICBzdWdnZXN0aW9uczogZW5hYmxlU3VnZ2VzdGlvbnMobm9kZVNjaGVtYSwgbm9kZS50eXBlLCBmdWxsS2V5LCBzY2hlbWEpLFxuICAgICAgICBwbGFjZWhvbGRlcjogcHJvcGVydHlQbGFjZWhvbGRlcihzY2hlbWEsIHZhbHVlVHlwZSwgZnVsbEtleSwgbm9kZVNjaGVtYSksXG4gICAgICAgIGV4dGVybmFsVXJsOiBwcm9wZXJ0eUV4dGVybmFsVXJsKG5vZGUsIGtleSwgdmFsdWUpLFxuICAgICAgICBwcm9wZXJ0aWVzOiBbXSxcbiAgICAgICAgYWRkUHJvcGVydHlFbmFibGVkOiBmYWxzZSxcbiAgICAgICAgZm9ybWF0dGVyOiBmb3JtYXR0ZXIoa2V5KVxuICAgICAgfTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IG1hcHBlZCA9IGlzR2VvanNvbihzY2hlbWEpXG4gICAgPyBtYXBwaW5ncy5nZW9qc29uXG4gICAgOiAhc2NoZW1hLnR5cGVcbiAgICAgID8gbWFwcGluZ3Mub2JqZWN0XG4gICAgICA6IChzY2hlbWEudHlwZSBhcyBzdHJpbmcpIGluIG1hcHBpbmdzXG4gICAgICAgID8gbWFwcGluZ3Nbc2NoZW1hLnR5cGUgYXMgc3RyaW5nXVxuICAgICAgICA6IG1hcHBpbmdzLmRlZmF1bHQ7XG4gIHJldHVybiBtYXBwZWQoKTtcbn07XG5cbmV4cG9ydCBjb25zdCBmaW5kUHJvcGVydHkgPSAocHJvcGVydGllczogSU5vZGVQcm9wZXJ0eVtdLCBmdWxsS2V5OiBzdHJpbmcpID0+IHtcbiAgZm9yIChjb25zdCBwIG9mIHByb3BlcnRpZXMpIHtcbiAgICBpZiAocC5mdWxsS2V5ID09PSBmdWxsS2V5KSB7XG4gICAgICByZXR1cm4gcDtcbiAgICB9XG4gICAgY29uc3QgY2hpbGRQID0gZmluZFByb3BlcnR5KHAucHJvcGVydGllcywgZnVsbEtleSk7XG4gICAgaWYgKGNoaWxkUCkge1xuICAgICAgcmV0dXJuIGNoaWxkUDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgcGFyZW50UHJvcGVydHkgPSAocHJvcGVydGllczogSU5vZGVQcm9wZXJ0eVtdLCBwcm9wZXJ0eTogSU5vZGVQcm9wZXJ0eSkgPT4ge1xuICBjb25zdCBhbGxLZXlzID0gcHJvcGVydHkuZnVsbEtleS5zcGxpdCgnLicpO1xuICBbLi4ubmV3IEFycmF5KHByb3BlcnR5LnN1Z2dlc3Rpb25zPy5wYXJlbnRMZXZlbCB8fCAwKV0ubWFwKCgpID0+IGFsbEtleXMucG9wKCkpO1xuICBjb25zdCBwYXJlbnRLZXlzID0gZnVsbEtleVBhcnRzKGFsbEtleXMuam9pbignLicpKTtcbiAgcGFyZW50S2V5cy5wb3AoKTtcbiAgY29uc3QgcGFyZW50ID0gcGFyZW50S2V5cy5yZWR1Y2UoKHByZXYsIGN1cnIsIGN1cnJJbmRleCk6IGFueSA9PiB7XG4gICAgY29uc3QgcHJvcCA9IHByZXYuZmluZCh2ID0+IHYua2V5ID09PSBjdXJyKTtcbiAgICByZXR1cm4gY3VyckluZGV4ID09PSBwYXJlbnRLZXlzLmxlbmd0aCAtIDEgPyBwcm9wIHx8ICh7fSBhcyBJTm9kZVByb3BlcnR5KSA6IHByb3AhLnByb3BlcnRpZXMgfHwgW107XG4gIH0sIHByb3BlcnRpZXMpIGFzIGFueSBhcyBJTm9kZVByb3BlcnR5O1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShwYXJlbnQpID8gcHJvcGVydHkgOiBwYXJlbnQ7XG59O1xuXG5leHBvcnQgY29uc3QgbmVzdGVkUHJvcGVydHkgPSAoeyBwcm9wZXJ0aWVzIH06IElOb2RlUHJvcGVydHksIG5lc3RlZEtleTogc3RyaW5nKSA9PlxuICBwcm9wZXJ0aWVzLmZpbmQoKHsga2V5IH0pID0+IGtleSA9PT0gbmVzdGVkS2V5KTtcblxuZXhwb3J0IGNvbnN0IHNpYmxpbmdQcm9wZXJ0eSA9IChwcm9wZXJ0aWVzOiBJTm9kZVByb3BlcnR5W10sIHByb3BlcnR5OiBJTm9kZVByb3BlcnR5LCBzaWJsaW5nS2V5OiBzdHJpbmcpID0+IHtcbiAgY29uc3QgcGFyZW50ID0gcGFyZW50UHJvcGVydHkocHJvcGVydGllcywgcHJvcGVydHkpO1xuICBjb25zdCBwYXJlbnRQcm9wZXJ0aWVzID0gcGFyZW50ID09PSBwcm9wZXJ0eSA/IHByb3BlcnRpZXMgOiBwYXJlbnQucHJvcGVydGllcztcbiAgcmV0dXJuIHBhcmVudFByb3BlcnRpZXMuZmluZChwcm9wID0+IHByb3Aua2V5ID09PSBzaWJsaW5nS2V5KTtcbn07XG5cbmV4cG9ydCBjb25zdCBncm91cENoYW5nZWQgPSAocHJvcGVydGllczogSU5vZGVQcm9wZXJ0eVtdLCBrZXk6IHN0cmluZywgdmFsdWU/OiBhbnkpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJlbnRLZXlzID0gZnVsbEtleVBhcnRzKGtleSk7XG4gICAgcGFyZW50S2V5cy5yZWR1Y2UoKHByZXYsIGN1cnIsIGN1cnJJbmRleCkgPT4ge1xuICAgICAgaWYgKGN1cnJJbmRleCA9PT0gcGFyZW50S2V5cy5sZW5ndGggLSAxICYmIHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBwcmV2LnNwbGljZShcbiAgICAgICAgICBwcmV2LmZpbmRJbmRleCh2ID0+IHYua2V5ID09PSBjdXJyKSxcbiAgICAgICAgICAxXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBwcm9wID0gcHJldi5maW5kKHYgPT4gdi5rZXkgPT09IGN1cnIpITtcbiAgICAgICAgcHJvcC5jaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHByb3AucHJvcGVydGllcztcbiAgICAgIH1cbiAgICB9LCBwcm9wZXJ0aWVzKTtcbiAgfSBjYXRjaCAoX2Vycikge1xuICAgIC8vIGlnbm9yZSBlcnJvclxuICB9XG59O1xuXG5leHBvcnQgY29uc3QgcmVmcmVzaFByb3BlcnR5S2V5cyA9IChwcm9wZXJ0eTogSU5vZGVQcm9wZXJ0eSkgPT5cbiAgcHJvcGVydHkucHJvcGVydGllcy5tYXAoKHByb3AsIGkpID0+IHtcbiAgICBwcm9wLmZ1bGxLZXkgPSBgJHtwcm9wZXJ0eS5mdWxsS2V5fSR7cHJvcGVydHkuaXNBcnJheSA/IGBbJHtpfV1gIDogYC4ke3Byb3Aua2V5fWB9YDtcbiAgICBwcm9wLmtleSA9IHByb3BlcnR5LmlzQXJyYXkgPyBgJHtpfWAgOiBwcm9wLmtleTtcbiAgICByZXR1cm4gcmVmcmVzaFByb3BlcnR5S2V5cyhwcm9wKTtcbiAgfSk7XG5cbmV4cG9ydCBjb25zdCBjYWxjdWxhdGVDeWNsZUR1cmF0aW9uRW5hYmxlZCA9IChwcm9wZXJ0aWVzOiBJTm9kZVByb3BlcnR5W10sIHByb3BlcnR5OiBJTm9kZVByb3BlcnR5KSA9PiB7XG4gIGNvbnN0IHN0YXJ0RGF0ZSA9IHNpYmxpbmdQcm9wZXJ0eShwcm9wZXJ0aWVzLCBwcm9wZXJ0eSwgJ3N0YXJ0RGF0ZScpO1xuICBjb25zdCBlbmREYXRlID0gc2libGluZ1Byb3BlcnR5KHByb3BlcnRpZXMsIHByb3BlcnR5LCAnZW5kRGF0ZScpO1xuICByZXR1cm4gISFzdGFydERhdGU/LnZhbHVlICYmICEhZW5kRGF0ZT8udmFsdWU7XG59O1xuXG5leHBvcnQgY29uc3QgY2FsY3VsYXRlQ3ljbGVEdXJhdGlvbiA9IChwcm9wZXJ0aWVzOiBJTm9kZVByb3BlcnR5W10sIHByb3BlcnR5OiBJTm9kZVByb3BlcnR5KSA9PiB7XG4gIGNvbnN0IHN0YXJ0RGF0ZSA9IHNpYmxpbmdQcm9wZXJ0eShwcm9wZXJ0aWVzLCBwcm9wZXJ0eSwgJ3N0YXJ0RGF0ZScpITtcbiAgY29uc3QgZW5kRGF0ZSA9IHNpYmxpbmdQcm9wZXJ0eShwcm9wZXJ0aWVzLCBwcm9wZXJ0eSwgJ2VuZERhdGUnKSE7XG4gIHJldHVybiBkaWZmSW5EYXlzKHN0YXJ0RGF0ZS52YWx1ZSwgZW5kRGF0ZS52YWx1ZSk7XG59O1xuXG5leHBvcnQgY29uc3QgY2FsY3VsYXRlQ3ljbGVTdGFydERhdGVFbmFibGVkID0gKHByb3BlcnRpZXM6IElOb2RlUHJvcGVydHlbXSwgcHJvcGVydHk6IElOb2RlUHJvcGVydHkpID0+IHtcbiAgY29uc3QgY3ljbGVEdXJhdGlvbiA9IHNpYmxpbmdQcm9wZXJ0eShwcm9wZXJ0aWVzLCBwcm9wZXJ0eSwgJ2N5Y2xlRHVyYXRpb24nKTtcbiAgY29uc3QgZW5kRGF0ZSA9IHNpYmxpbmdQcm9wZXJ0eShwcm9wZXJ0aWVzLCBwcm9wZXJ0eSwgJ2VuZERhdGUnKTtcbiAgcmV0dXJuICEhY3ljbGVEdXJhdGlvbj8udmFsdWUgJiYgISFlbmREYXRlPy52YWx1ZTtcbn07XG5cbmV4cG9ydCBjb25zdCBjYWxjdWxhdGVDeWNsZVN0YXJ0RGF0ZSA9IChwcm9wZXJ0aWVzOiBJTm9kZVByb3BlcnR5W10sIHByb3BlcnR5OiBJTm9kZVByb3BlcnR5KSA9PiB7XG4gIGNvbnN0IGN5Y2xlRHVyYXRpb24gPSBzaWJsaW5nUHJvcGVydHkocHJvcGVydGllcywgcHJvcGVydHksICdjeWNsZUR1cmF0aW9uJykhO1xuICBjb25zdCBlbmREYXRlID0gc2libGluZ1Byb3BlcnR5KHByb3BlcnRpZXMsIHByb3BlcnR5LCAnZW5kRGF0ZScpITtcbiAgcmV0dXJuIG1vbWVudChlbmREYXRlLnZhbHVlKS5sb2NhbGUoJ2VuLWdiJykuc3VidHJhY3QoY3ljbGVEdXJhdGlvbi52YWx1ZSwgJ2RheXMnKS5mb3JtYXQoJ1lZWVktTU0tREQnKTtcbn07XG4iXX0=
615
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZXMtZm9ybS5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9maWxlcy9maWxlcy1mb3JtLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQixPQUFPLEdBQUcsTUFBTSxZQUFZLENBQUM7QUFDN0IsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLEVBQUUsSUFBSSxNQUFNLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMzRCxPQUFPLEVBRUwsVUFBVSxFQUNWLFFBQVEsRUFDUixVQUFVLEVBQ1YsV0FBVyxFQUNYLFlBQVksRUFHWixnQkFBZ0IsRUFDakIsTUFBTSxzQkFBc0IsQ0FBQztBQUc5QixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFHMUQsT0FBTyxFQUNMLHdCQUF3QixFQUN4QixXQUFXLEVBQ1gsc0JBQXNCLEVBQ3RCLGFBQWEsRUFDYixlQUFlLEVBQ2YsaUJBQWlCLEVBQ2pCLG1CQUFtQixFQUNuQixnQkFBZ0IsRUFDaEIscUJBQXFCLEVBQ3RCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUNMLHdCQUF3QixFQUN4QixrQkFBa0IsRUFDbEIsc0JBQXNCLEVBQ3RCLG1CQUFtQixFQUNuQixrQkFBa0IsRUFDbEIsY0FBYyxFQUNkLGVBQWUsRUFDZixXQUFXLEVBQ1osTUFBTSwwQkFBMEIsQ0FBQztBQUNsQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEQsT0FBTyxFQUNMLElBQUksRUFDSixlQUFlLEVBQ2YsWUFBWSxFQUNaLFVBQVUsRUFDVixhQUFhLEVBQ2IsaUJBQWlCLEVBQ2pCLFVBQVUsRUFDWCxNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9B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QyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDMUcsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgY29tcGxleGl0eSAqL1xuaW1wb3J0IGdldCBmcm9tICdsb2Rhc2guZ2V0JztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCAnbW9tZW50L2xvY2FsZS9lbi1nYic7XG5pbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tICd1dWlkJztcbmltcG9ydCB7IGRpZmZJbkRheXMsIGlzTnVtYmVyIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC91dGlscyc7XG5pbXBvcnQge1xuICBKU09OIGFzIEhlc3RpYUpzb24sXG4gIFNjaGVtYVR5cGUsXG4gIE5vZGVUeXBlLFxuICBpc1R5cGVOb2RlLFxuICBpc1R5cGVWYWxpZCxcbiAgaXNFeHBhbmRhYmxlLFxuICBTaXRlLFxuICBPcmdhbmlzYXRpb24sXG4gIHR5cGVUb1NjaGVtYVR5cGVcbn0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9zY2hlbWEnO1xuaW1wb3J0IHsgZGVmaW5pdGlvbnMsIGRlZmluaXRpb24sIElEZWZpbml0aW9uT2JqZWN0LCBJRGVmaW5pdGlvbkFycmF5LCBnZW5lcmljVHlwZSB9IGZyb20gJ0BoZXN0aWEtZWFydGgvanNvbi1zY2hlbWEnO1xuaW1wb3J0IHsgSWNvbkRlZmluaXRpb24gfSBmcm9tICdAZm9ydGF3ZXNvbWUvZm9udGF3ZXNvbWUtc3ZnLWNvcmUnO1xuaW1wb3J0IHsgZmFNYXAgfSBmcm9tICdAZm9ydGF3ZXNvbWUvZnJlZS1zb2xpZC1zdmctaWNvbnMnO1xuXG5pbXBvcnQgeyBJVmFsaWRhdGlvbkVycm9yLCB2YWxpZGF0aW9uRXJyb3JMZXZlbCB9IGZyb20gJy4uL3NjaGVtYS9zY2hlbWEtdmFsaWRhdGlvbi5tb2RlbCc7XG5pbXBvcnQge1xuICBmb3JtYXRDdXN0b21FcnJvck1lc3NhZ2UsXG4gIGZvcm1hdEVycm9yLFxuICBpc01pc3NpbmdQcm9wZXJ0eUVycm9yLFxuICBlcnJvckhhc0Vycm9yLFxuICBlcnJvckhhc1dhcm5pbmcsXG4gIG1pc3NpbmdOb2RlRXJyb3JzLFxuICBpc01pc3NpbmdPbmVPZkVycm9yLFxuICBpc01pZ3JhdGlvbkVycm9yLFxuICBtaWdyYXRpb25FcnJvck1lc3NhZ2Vcbn0gZnJvbSAnLi9maWxlcy1lcnJvci5tb2RlbCc7XG5pbXBvcnQge1xuICBzY2hlbWFSZXF1aXJlZFByb3BlcnRpZXMsXG4gIHZhbHVlVHlwZVRvRGVmYXVsdCxcbiAgZGVmaW5pdGlvblRvU2NoZW1hVHlwZSxcbiAgYXZhaWxhYmxlUHJvcGVydGllcyxcbiAgbmVzdGluZ1R5cGVFbmFibGVkLFxuICBuZXN0aW5nRW5hYmxlZCxcbiAgbGlua1R5cGVFbmFibGVkLFxuICBpc1NjaGVtYUlyaVxufSBmcm9tICcuLi9zY2hlbWEvc2NoZW1hLnNlcnZpY2UnO1xuaW1wb3J0IHsgbWF0Y2hDb3VudHJ5IH0gZnJvbSAnLi4vc2VhcmNoL3NlYXJjaC5tb2RlbCc7XG5pbXBvcnQge1xuICBjb2RlLFxuICBnbG9zc2FyeUJhc2VVcmwsXG4gIGdsb3NzYXJ5TGluayxcbiAgaXNFeHRlcm5hbCxcbiAgc2FmZUpTT05QYXJzZSxcbiAgc2FmZUpTT05TdHJpbmdpZnksXG4gIHNjaGVtYUxpbmtcbn0gZnJvbSAnLi4vY29tbW9uL3V0aWxzJztcbmltcG9ydCB7IG1hcHNVcmwgfSBmcm9tICcuLi9jb21tb24vbWFwcy11dGlscyc7XG5cbmNvbnN0IG1pc3NpbmdOb2RlRXJyb3JNZXNzYWdlID0gKHsgJ0B0eXBlJzogX3QsIHR5cGUsIG5hbWUgfTogYW55LCBtaXNzaW5nSWRFcnJvcj86IElWYWxpZGF0aW9uRXJyb3IpID0+XG4gIChfdCB8fCB0eXBlKSA9PT0gJ1Rlcm0nXG4gICAgPyAvLyBtaWdyYXRlZCBmcm9tIGEgdmFsdWUgdG8gYW5vdGhlclxuICAgICAgaXNNaWdyYXRpb25FcnJvcihtaXNzaW5nSWRFcnJvcilcbiAgICAgID8gbWlncmF0aW9uRXJyb3JNZXNzYWdlKG1pc3NpbmdJZEVycm9yKVxuICAgICAgOiBgJHtuYW1lID8gYFRoZSB0ZXJtIFwiJHtuYW1lfVwiYCA6ICdUaGlzIHRlcm0nfSBkb2Vzbid0IG1hdGNoIGEgdGVybSBpbiB0aGUgJHtnbG9zc2FyeUxpbmsoJ0dsb3NzYXJ5IG9mIFRlcm1zJyl9LlxuICAgICAgUGxlYXNlIGNoZWNrIHRoZSAke2dsb3NzYXJ5TGluaygnR2xvc3NhcnknKX0gZm9yIHRoZSBjb3JyZWN0ICR7Y29kZSgnQGlkJyl9IG9yICR7Y29kZSgnbmFtZScpfSBhbmQgc3BlbGxpbmcuYFxuICAgIDogYFRoaXMgJHtzY2hlbWFMaW5rKF90IHx8IHR5cGUpfSBkb2VzIG5vdCBleGlzdCBpbiBIZXN0aWEuIElmIHlvdSBhcmUgdHJ5aW5nIHRvIGxpbmsgdG8gYW4gZXhpc3RpbmdcbiAgICAke3NjaGVtYUxpbmsoX3QgfHwgdHlwZSl9IGluIEhlc3RpYSwgcGxlYXNlIGNoZWNrIHRoZSAke2NvZGUoJ25hbWUnKX0gb3IgJHtjb2RlKCdAaWQnKX0gaXMgY29ycmVjdC5cbiAgICBJZiB5b3UgYXJlIHRyeWluZyB0byBjcmVhdGUgYSBuZXcgJHtzY2hlbWFMaW5rKF90IHx8IHR5cGUpfSwgcGxlYXNlIGlkZW50aWZ5IGl0IHdpdGggYW4gJHtjb2RlKCdpZCcpfSBmaWVsZC5gO1xuXG5leHBvcnQgY29uc3QgQVJSQVlfREVMSU1JVEVSID0gJzsnO1xuY29uc3QgaWdub3JlS2V5cyA9IFsnZmlsZXBhdGgnLCAnX2NhY2hlJ107XG5cbmV4cG9ydCB0eXBlIHN1Z2dlc3Rpb25UeXBlID0gTm9kZVR5cGUgfCAnc2VsZWN0JyB8ICdkZWZhdWx0JztcbmV4cG9ydCBjb25zdCBkZWZhdWx0U3VnZ2VzdGlvblR5cGU6IHN1Z2dlc3Rpb25UeXBlID0gJ2RlZmF1bHQnO1xuXG5pbnRlcmZhY2UgSU5vZGVQcm9wZXJ0eVN1Z2dlc3Rpb24ge1xuICB0eXBlPzogc3VnZ2VzdGlvblR5cGU7XG4gIHF1ZXJpZXM/OiBhbnlbXTtcbiAgdmFsdWVzPzogc3RyaW5nW107XG4gIHBhcmVudExldmVsPzogbnVtYmVyO1xuICBpc0xpbmtOb2RlPzogYm9vbGVhbjtcbiAgaXNVbmlxdWVLZXk/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSU5ld1Byb3BlcnR5IHtcbiAgbmFtZT86IHN0cmluZztcbiAgcHJvcD86IGRlZmluaXRpb247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUVycm9yUHJvcGVydHkge1xuICBsZXZlbD86IHZhbGlkYXRpb25FcnJvckxldmVsO1xuICBtZXNzYWdlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElOb2RlUHJvcGVydHkge1xuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdGhpcyBwcm9wZXJ0eSB3YXMgYWRkZWQgYnkgdGhlIHVzZXJcbiAgICovXG4gIGlkOiBzdHJpbmc7XG4gIGlzQWRkZWQ/OiBib29sZWFuO1xuICBzY2hlbWFUeXBlOiBTY2hlbWFUeXBlO1xuICBrZXk6IHN0cmluZztcbiAgZnVsbEtleTogc3RyaW5nO1xuICB2YWx1ZTogYW55O1xuICBhZGRQcm9wZXJ0eUVuYWJsZWQ6IGJvb2xlYW47XG4gIHN1Z2dlc3Rpb25zPzogSU5vZGVQcm9wZXJ0eVN1Z2dlc3Rpb247XG4gIHNjaGVtYT86IGRlZmluaXRpb247XG4gIGVycm9yPzogSVZhbGlkYXRpb25FcnJvcjtcbiAgaGFzRXJyb3I/OiBib29sZWFuO1xuICBoYXNXYXJuaW5nPzogYm9vbGVhbjtcbiAgZWRpdGFibGU/OiBib29sZWFuO1xuICBjbG9zZWRWaXNpYmxlPzogYm9vbGVhbjtcbiAgbmV3UHJvcGVydHk/OiBJTmV3UHJvcGVydHk7XG4gIG5ld0Vycm9yPzogSUVycm9yUHJvcGVydHk7XG4gIGlzUmVxdWlyZWQ/OiBib29sZWFuO1xuICBpc0hpZGRlbj86IGJvb2xlYW47XG4gIGlzQXJyYXk/OiBib29sZWFuO1xuICBpc0V4cGFuZGFibGU/OiBib29sZWFuO1xuICBpc09wZW4/OiBib29sZWFuO1xuICBwcm9wZXJ0aWVzOiBJTm9kZVByb3BlcnR5W107XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICBleHRlcm5hbFVybD86IHtcbiAgICB1cmw/OiBzdHJpbmc7XG4gICAgdGl0bGU6IHN0cmluZztcbiAgICAvLyBkZWZhdWx0IGlzIGV4dGVybmFsLWxpbmstYWx0XG4gICAgaWNvbj86IEljb25EZWZpbml0aW9uO1xuICAgIHVybFBhcmFtVmFsdWU/OiBib29sZWFuO1xuICB9O1xuICAvLyBtYWtpbmcgY2hhbmdlcyBvbiB0aGUgcHJvcGVydHlcbiAgbG9hZGluZz86IGJvb2xlYW47XG4gIC8vIHVzZXIgbWFkZSBjaGFuZ2VzIHRvIHRoZSBvcmlnaW5hbCB2YWx1ZVxuICBjaGFuZ2VkPzogYm9vbGVhbjtcbiAgZm9ybWF0dGVyOiAodmFsdWU6IGFueSkgPT4gc3RyaW5nO1xufVxuXG5jb25zdCBzdHJpbmdWYWx1ZSA9ICh2YWx1ZTogYW55KSA9PiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJyB8fCB2YWx1ZSA9PT0gbnVsbCA/ICcnIDogdmFsdWUpLnRvU3RyaW5nKCk7XG5jb25zdCBub25FeHBhbmRhYmxlQXJyYXlEYXRhUGF0aCA9IChrZXk6IHN0cmluZykgPT4ga2V5LnJlcGxhY2UoL1xcW1xcZCtcXF0kLywgJycpO1xuZXhwb3J0IGNvbnN0IGtleVRvRGF0YVBhdGggPSAoa2V5OiBzdHJpbmcpID0+IChrZXk/Lmxlbmd0aCA/IGAuJHtrZXl9YCA6ICcnKTtcbmV4cG9ydCBjb25zdCBkYXRhUGF0aFRvS2V5ID0gKGRhdGFQYXRoID0gJycsIHRyaW1BcnJheSA9IGZhbHNlKSA9PlxuICB0cmltQXJyYXkgPyBub25FeHBhbmRhYmxlQXJyYXlEYXRhUGF0aChkYXRhUGF0aC5zdWJzdHJpbmcoMSkpIDogZGF0YVBhdGguc3Vic3RyaW5nKDEpO1xuZXhwb3J0IGNvbnN0IHBhcmVudEtleSA9IChrZXk6IHN0cmluZykgPT4ge1xuICBjb25zdCBrZXlzID0gKGtleS5zdGFydHNXaXRoKCcuJykgPyBrZXkuc3Vic3RyaW5nKDEpIDoga2V5KS5zcGxpdCgnLicpO1xuICBrZXlzLnBvcCgpO1xuICByZXR1cm4ga2V5cy5qb2luKCcuJyk7XG59O1xuXG4vKipcbiAqIFNvcnQgcHJvcGVydGllcyBoYXZpbmcgZXJyb3JzLCB0eXBlLCBpZCwgLi4ucHJvcGVydGllcyAoc2ltcGxlKSwgYW5kIGZpbmFsbHkgdGhlIGdyb3Vwc1xuICpcbiAqIEBwYXJhbSBhIHtJTm9kZVByb3BlcnR5fVxuICogQHBhcmFtIGIge0lOb2RlUHJvcGVydHl9XG4gKi9cbmV4cG9ydCBjb25zdCBzb3J0UHJvcGVydGllcyA9IChhOiBJTm9kZVByb3BlcnR5LCBiOiBJTm9kZVByb3BlcnR5KSA9PiB7XG4gIGlmIChpc051bWJlcihhLmtleSkgJiYgaXNOdW1iZXIoYi5rZXkpKSB7XG4gICAgcmV0dXJuICthLmtleSAtICtiLmtleTtcbiAgfVxuICBpZiAoYS5pc0V4cGFuZGFibGUpIHtcbiAgICByZXR1cm4gYi5pc0V4cGFuZGFibGUgPyBhLmtleS5sb2NhbGVDb21wYXJlKGIua2V5KSA6IDE7XG4gIH1cbiAgaWYgKGIuaXNFeHBhbmRhYmxlKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG4gIGlmICghYS5rZXkpIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cbiAgY29uc3QgYUtleSA9IGEua2V5LnJlcGxhY2UoJ0AnLCAnJyk7XG4gIGNvbnN0IGJLZXkgPSBiLmtleS5yZXBsYWNlKCdAJywgJycpO1xuICBpZiAoYUtleSA9PT0gJ3R5cGUnKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG4gIGlmIChiS2V5ID09PSAndHlwZScpIHtcbiAgICByZXR1cm4gMTtcbiAgfVxuICBpZiAoYUtleSA9PT0gJ2lkJyAmJiBiS2V5ICE9PSAndHlwZScpIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cbiAgaWYgKGEuaGFzRXJyb3IgfHwgYS5oYXNXYXJuaW5nKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG4gIHJldHVybiBhLmtleS5sb2NhbGVDb21wYXJlKGIua2V5KTtcbn07XG5cbmNvbnN0IGRlZmF1bHRQcm9wZXJ0eUVycm9yOiB7XG4gIFtrZXk6IHN0cmluZ106IChlcnJvcjogYW55LCBwcm9wZXJ0eTogSU5vZGVQcm9wZXJ0eSkgPT4gc3RyaW5nIHwgdW5kZWZpbmVkO1xufSA9IHtcbiAgbWF4OiAoeyBtYXggfSkgPT4gYHNob3VsZCBiZSA8PSAke21heH1gLFxuICBtaW46ICh7IG1pbiB9KSA9PiBgc2hvdWxkIGJlID49ICR7bWlufWAsXG4gIHBhdHRlcm46ICh7IHJlcXVpcmVkUGF0dGVybiB9KSA9PiBgc2hvdWxkIG1hdGNoIHBhdHRlcm4gXCIke3JlcXVpcmVkUGF0dGVybn1cImAsXG4gIHJlcXVpcmVkOiAoX2UsIHsgc2NoZW1hVHlwZSB9KSA9PiAoc2NoZW1hVHlwZSA/IGBzaG91bGQgYmUgc2V0IG9yIGxpbmtlZCB0byBhbm90aGVyICR7c2NoZW1hVHlwZX1gIDogdW5kZWZpbmVkKVxufTtcblxuZXhwb3J0IGNvbnN0IGZvcm1hdFByb3BlcnR5RXJyb3IgPSAoZXJyb3JzOiBhbnksIHByb3BlcnR5OiBJTm9kZVByb3BlcnR5KSA9PiB7XG4gIGNvbnN0IGtleSA9IE9iamVjdC5rZXlzKGVycm9ycylbMF07XG4gIHJldHVybiBrZXkgaW4gZGVmYXVsdFByb3BlcnR5RXJyb3IgPyBmb3JtYXRDdXN0b21FcnJvck1lc3NhZ2UoZGVmYXVsdFByb3BlcnR5RXJyb3Jba2V5XShlcnJvcnNba2V5XSwgcHJvcGVydHkpKSA6ICcnO1xufTtcblxuZXhwb3J0IGNvbnN0IGZvcm1hdHRlciA9IChrZXk6IHN0cmluZykgPT4gKHZhbHVlOiBhbnkpID0+XG4gIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgPyB2YWx1ZS5iaWJsaW9ncmFwaHk/LnRpdGxlIHx8IHZhbHVlW2tleV0gfHwgdmFsdWUubmFtZSA6IHZhbHVlO1xuXG5leHBvcnQgY29uc3QgaGFzRXJyb3IgPSB2YWx1ZSA9PiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5zb21lKGhhc0Vycm9yKSA6IHZhbHVlLmhhc0Vycm9yKTtcblxuZXhwb3J0IGNvbnN0IGhhc1dhcm5pbmcgPSB2YWx1ZSA9PiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5zb21lKGhhc1dhcm5pbmcpIDogdmFsdWUuaGFzV2FybmluZyk7XG5cbmNvbnN0IGNvbXBpbGVTdWdnZXN0aW9uUXVlcmllcyA9IChrZXk6IHN0cmluZywgYWxsT2Y6IGFueVtdKSA9PiB7XG4gIGNvbnN0IGNvbmRpdGlvbnMgPSAoYWxsT2YgfHwgW10pXG4gICAgLmZpbHRlcih2ID0+ICh2LmlmPy5yZXF1aXJlZCB8fCBbXSkuaW5jbHVkZXMoa2V5KSlcbiAgICAubWFwKHYgPT4gdi50aGVuPy5wcm9wZXJ0aWVzPy5ba2V5XSlcbiAgICAubWFwKHYgPT4gdj8uaXRlbXM/LnByb3BlcnRpZXMgfHwgdj8ucHJvcGVydGllcylcbiAgICAuZmlsdGVyKEJvb2xlYW4pO1xuICByZXR1cm4gY29uZGl0aW9ucy5sZW5ndGhcbiAgICA/IFtcbiAgICAgICAge1xuICAgICAgICAgIGJvb2w6IHtcbiAgICAgICAgICAgIHNob3VsZDogY29uZGl0aW9ucy5mbGF0TWFwKGNvbmQgPT5cbiAgICAgICAgICAgICAgT2JqZWN0LmtleXMoY29uZCkuZmxhdE1hcChrID0+XG4gICAgICAgICAgICAgICAgKGNvbmRba10uZW51bSB8fCBbXSkubWFwKHYgPT4gKHtcbiAgICAgICAgICAgICAgICAgIG1hdGNoOiB7IFtrXTogdiB9XG4gICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBtaW5pbXVtX3Nob3VsZF9tYXRjaDogMVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIDogW107XG59O1xuXG4vLyBkZWZhdWx0IHN1Z2dlc3QgZm9yIGxpbmtpbmcgbm9kZXMgdG9nZXRoZXIgdXNpbmcgdGhlIGBpZGAgZmllbGRcbmNvbnN0IHN1Z2dlc3RMaW5rTm9kZXMgPSAodHlwZTogTm9kZVR5cGUsIGZ1bGxLZXk6IHN0cmluZyk6IElOb2RlUHJvcGVydHlTdWdnZXN0aW9uIHwgdW5kZWZpbmVkID0+IHtcbiAgY29uc3Qga2V5cyA9IGZ1bGxLZXkuc3BsaXQoJy4nKTtcbiAgY29uc3Qga2V5ID0ga2V5cy5wb3AoKTtcbiAgcmV0dXJuIGtleSA9PT0gJ2lkJyAmJiBrZXlzLmxlbmd0aCA+PSAxID8geyB0eXBlLCBpc0xpbmtOb2RlOiB0cnVlIH0gOiB1bmRlZmluZWQ7XG59O1xuXG5jb25zdCBzdWdnZXN0RXhpc3RpbmdOb2RlID0gKHR5cGU6IE5vZGVUeXBlLCBmdWxsS2V5OiBzdHJpbmcpOiBJTm9kZVByb3BlcnR5U3VnZ2VzdGlvbiB8IHVuZGVmaW5lZCA9PiB7XG4gIGNvbnN0IGtleXMgPSBmdWxsS2V5LnNwbGl0KCcuJyk7XG4gIGNvbnN0IGtleSA9IGtleXMucG9wKCkhO1xuICByZXR1cm4ga2V5cy5sZW5ndGggPj0gMSAmJiBbJ0BpZCcsICdvcGVuTENBSWQnXS5pbmNsdWRlcyhrZXkpID8geyB0eXBlLCBpc1VuaXF1ZUtleTogJ0BpZCcgfSA6IHVuZGVmaW5lZDtcbn07XG5cbmNvbnN0IGRlZmF1bHROb2RlVHlwZVN1Z2dlc3Rpb24gPSAodHlwZTogTm9kZVR5cGUpID0+IChmdWxsS2V5OiBzdHJpbmcpID0+XG4gIHN1Z2dlc3RMaW5rTm9kZXModHlwZSwgZnVsbEtleSkgfHwgc3VnZ2VzdEV4aXN0aW5nTm9kZSh0eXBlLCBmdWxsS2V5KTtcblxuY29uc3QgdGVybVN1Z2dlc3Rpb25zID0gKHBhcmVudDogc3RyaW5nLCB7IGFsbE9mIH06IElEZWZpbml0aW9uT2JqZWN0KSA9PiAoe1xuICB0eXBlOiBOb2RlVHlwZS5UZXJtLFxuICBxdWVyaWVzOiBbXG4gICAgLi4uY29tcGlsZVN1Z2dlc3Rpb25RdWVyaWVzKG5vbkV4cGFuZGFibGVBcnJheURhdGFQYXRoKHBhcmVudCksIGFsbE9mISksXG4gICAgLi4uKFsnY291bnRyeSddLmluY2x1ZGVzKHBhcmVudCkgPyBbbWF0Y2hDb3VudHJ5XSA6IFtdKVxuICBdXG59KTtcblxuY29uc3QgdHlwZVRvU3VnZ2VzdGlvbjoge1xuICBbdHlwZSBpbiBTY2hlbWFUeXBlIHwgTm9kZVR5cGUgfCBnZW5lcmljVHlwZSB8ICdpbnRlZ2VyJ10/OiAoXG4gICAgZnVsbEtleTogc3RyaW5nLFxuICAgIHBhcmVudFNjaGVtYT86IGRlZmluaXRpb24sXG4gICAgc2NoZW1hPzogZGVmaW5pdGlvblxuICApID0+IElOb2RlUHJvcGVydHlTdWdnZXN0aW9uIHwgYW55O1xufSA9IHtcbiAgW05vZGVUeXBlLkFjdG9yXTogZGVmYXVsdE5vZGVUeXBlU3VnZ2VzdGlvbihOb2RlVHlwZS5BY3RvciksXG4gIFtOb2RlVHlwZS5DeWNsZV06IGRlZmF1bHROb2RlVHlwZVN1Z2dlc3Rpb24oTm9kZVR5cGUuQ3ljbGUpLFxuICBbTm9kZVR5cGUuSW1wYWN0QXNzZXNzbWVudF06IGRlZmF1bHROb2RlVHlwZVN1Z2dlc3Rpb24oTm9kZVR5cGUuSW1wYWN0QXNzZXNzbWVudCksXG4gIFtOb2RlVHlwZS5PcmdhbmlzYXRpb25dOiBkZWZhdWx0Tm9kZVR5cGVTdWdnZXN0aW9uKE5vZGVUeXBlLk9yZ2FuaXNhdGlvbiksXG4gIFtOb2RlVHlwZS5TaXRlXTogZGVmYXVsdE5vZGVUeXBlU3VnZ2VzdGlvbihOb2RlVHlwZS5TaXRlKSxcbiAgW05vZGVUeXBlLlNvdXJjZV06IGRlZmF1bHROb2RlVHlwZVN1Z2dlc3Rpb24oTm9kZVR5cGUuU291cmNlKSxcbiAgW05vZGVUeXBlLlRlcm1dOiAoZnVsbEtleSwgcGFyZW50U2NoZW1hKSA9PiB7XG4gICAgY29uc3Qga2V5cyA9IGZ1bGxLZXkuc3BsaXQoJy4nKTtcbiAgICBjb25zdCBrZXkgPSBrZXlzLnBvcCgpITtcbiAgICByZXR1cm4gWyduYW1lJ10uaW5jbHVkZXMoa2V5KSAmJiBrZXlzLmxlbmd0aCA+PSAxXG4gICAgICA/IHRlcm1TdWdnZXN0aW9ucyhrZXlzLnBvcCgpISwgcGFyZW50U2NoZW1hIGFzIElEZWZpbml0aW9uT2JqZWN0KVxuICAgICAgOiBkZWZhdWx0Tm9kZVR5cGVTdWdnZXN0aW9uKE5vZGVUeXBlLlRlcm0pKGZ1bGxLZXkpO1xuICB9LFxuICBbU2NoZW1hVHlwZS5CaWJsaW9ncmFwaHldOiBmdWxsS2V5ID0+IHtcbiAgICBjb25zdCBrZXlzID0gZnVsbEtleS5zcGxpdCgnLicpO1xuICAgIGNvbnN0IGtleSA9IGtleXMucG9wKCkhO1xuICAgIGNvbnN0IHBhcmVudCA9IGtleXMucG9wKCkhO1xuICAgIC8vIHByZXZlbnQgcmVwbGFjaW5nIGEgdG9wLWxldmVsIHNvdXJjZVxuICAgIHJldHVybiBbJ3RpdGxlJywgJ2RvY3VtZW50RE9JJywgJ3Njb3B1cyddLmluY2x1ZGVzKGtleSkgJiYgcGFyZW50ID09PSAnYmlibGlvZ3JhcGh5JyAmJiBrZXlzLmxlbmd0aCA+PSAxXG4gICAgICA/IHtcbiAgICAgICAgICB0eXBlOiBOb2RlVHlwZS5Tb3VyY2UsXG4gICAgICAgICAgcGFyZW50TGV2ZWw6IDFcbiAgICAgICAgfVxuICAgICAgOiB1bmRlZmluZWQ7XG4gIH0sXG4gIG51bWJlcjogKF9hLCBfYiwgc2NoZW1hKSA9PiB7XG4gICAgY29uc3QgdmFsdWVzID0gKHNjaGVtYSBhcyBhbnkpLmNvbnN0ID8gWyhzY2hlbWEgYXMgYW55KS5jb25zdF0gOiBbXTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogdmFsdWVzLmxlbmd0aCA+IDAgPyAnc2VsZWN0JyA6IGRlZmF1bHRTdWdnZXN0aW9uVHlwZSxcbiAgICAgIC8vIGV4Y2x1ZGUgc3VnZ2VzdGluZyBTY2hlbWFUeXBlXG4gICAgICB2YWx1ZXNcbiAgICB9O1xuICB9LFxuICBpbnRlZ2VyOiAoX2EsIF9iLCBzY2hlbWEpID0+IHtcbiAgICBjb25zdCB2YWx1ZXMgPSAoc2NoZW1hIGFzIGFueSkuY29uc3QgPyBbKHNjaGVtYSBhcyBhbnkpLmNvbnN0XSA6IFtdO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiB2YWx1ZXMubGVuZ3RoID4gMCA/ICdzZWxlY3QnIDogZGVmYXVsdFN1Z2dlc3Rpb25UeXBlLFxuICAgICAgLy8gZXhjbHVkZSBzdWdnZXN0aW5nIFNjaGVtYVR5cGVcbiAgICAgIHZhbHVlc1xuICAgIH07XG4gIH0sXG4gIHN0cmluZzogKGZ1bGxLZXksIF9iLCBzY2hlbWEpID0+IHtcbiAgICAvLyBleGNsdWRlIHN1Z2dlc3RpbmcgU2NoZW1hVHlwZVxuICAgIGNvbnN0IHZhbHVlcyA9IChzY2hlbWEgYXMgYW55KS5jb25zdFxuICAgICAgPyBbKHNjaGVtYSBhcyBhbnkpLmNvbnN0XVxuICAgICAgOiAoKHNjaGVtYSBhcyBhbnkpLmVudW0gfHwgW10pLmZpbHRlcih2YWwgPT4gIU9iamVjdC52YWx1ZXMoU2NoZW1hVHlwZSkuaW5jbHVkZXModmFsKSk7XG4gICAgY29uc3Qga2V5ID0gZnVsbEtleS5zcGxpdCgnLicpLnBvcCgpO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiB2YWx1ZXMubGVuZ3RoID4gMCAmJiBrZXkgIT09ICd0eXBlJyA/ICdzZWxlY3QnIDogZGVmYXVsdFN1Z2dlc3Rpb25UeXBlLFxuICAgICAgdmFsdWVzXG4gICAgfTtcbiAgfSxcbiAgYm9vbGVhbjogX2EgPT4gKHtcbiAgICB0eXBlOiAnc2VsZWN0JyxcbiAgICB2YWx1ZXM6IFsndHJ1ZScsICdmYWxzZSddXG4gIH0pXG59O1xuXG5jb25zdCBlbmFibGVTdWdnZXN0aW9ucyA9IChcbiAgcGFyZW50U2NoZW1hOiBkZWZpbml0aW9uLFxuICB0eXBlOiBTY2hlbWFUeXBlIHwgTm9kZVR5cGUgfCBnZW5lcmljVHlwZSxcbiAgZnVsbEtleTogc3RyaW5nLFxuICBzY2hlbWE/OiBkZWZpbml0aW9uXG4pID0+IHtcbiAgY29uc3Qgc3VnZ2VzdGlvbiA9IHR5cGUgaW4gdHlwZVRvU3VnZ2VzdGlvbiA/IHR5cGVUb1N1Z2dlc3Rpb25bdHlwZV0hKGZ1bGxLZXksIHBhcmVudFNjaGVtYSkgOiB1bmRlZmluZWQ7XG4gIHJldHVybiAoXG4gICAgc3VnZ2VzdGlvbiB8fFxuICAgIChzY2hlbWEgJiYgKHNjaGVtYS50eXBlIGFzIGdlbmVyaWNUeXBlKSBpbiB0eXBlVG9TdWdnZXN0aW9uXG4gICAgICA/IHR5cGVUb1N1Z2dlc3Rpb25bc2NoZW1hLnR5cGUgYXMgZ2VuZXJpY1R5cGVdIShmdWxsS2V5LCBwYXJlbnRTY2hlbWEsIHNjaGVtYSlcbiAgICAgIDogdW5kZWZpbmVkKVxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IG5vZGVBdmFpbGFibGVQcm9wZXJ0aWVzID0gKFxuICBub2RlOiBIZXN0aWFKc29uPFNjaGVtYVR5cGU+LFxuICB7IGZ1bGxLZXksIHNjaGVtYSwgc2NoZW1hVHlwZSB9OiBQYXJ0aWFsPElOb2RlUHJvcGVydHk+XG4pID0+IGF2YWlsYWJsZVByb3BlcnRpZXMoc2NoZW1hISwgc2NoZW1hVHlwZSEsIGZ1bGxLZXkgPyBnZXQobm9kZSwgZnVsbEtleSwge30pIDogbm9kZSwgZnVsbEtleSEubGVuZ3RoID4gMCk7XG5cbmV4cG9ydCBjb25zdCBpc0FkZFByb3BlcnR5RW5hYmxlZCA9IChcbiAgbm9kZTogSGVzdGlhSnNvbjxTY2hlbWFUeXBlPixcbiAgc2NoZW1hVHlwZTogU2NoZW1hVHlwZSxcbiAgc2NoZW1hOiBkZWZpbml0aW9uLFxuICBmdWxsS2V5ID0gJydcbikgPT5cbiAgISFzY2hlbWEgJiZcbiAgISFPYmplY3Qua2V5cyhub2RlQXZhaWxhYmxlUHJvcGVydGllcyhub2RlLCB7IGZ1bGxLZXksIHNjaGVtYSB9KSkubGVuZ3RoICYmXG4gICghZnVsbEtleSB8fCBuZXN0aW5nVHlwZUVuYWJsZWQoc2NoZW1hVHlwZSkpO1xuXG5jb25zdCBlZGl0YWJsZUtleSA9IChrZXk6IHN0cmluZykgPT4gIVsndHlwZScsICdAdHlwZScsICd0ZXJtVHlwZSddLmluY2x1ZGVzKGtleSk7XG5cbmV4cG9ydCBjb25zdCBwcm9wZXJ0eUlkID0gKCkgPT4gdXVpZHY0KCk7XG5cbmNvbnN0IGlzR2VvanNvbiA9IChzY2hlbWE6IGFueSkgPT4gc2NoZW1hLmdlb2pzb247XG5cbmNvbnN0IHByb3BlcnR5VXJsID0gKG5vZGU6IEhlc3RpYUpzb248U2NoZW1hVHlwZT4sIGtleTogc3RyaW5nKSA9PlxuICBbJ0BpZCcsICdpZCcsICduYW1lJ10uaW5jbHVkZXMoa2V5KSAmJiBsaW5rVHlwZUVuYWJsZWQobm9kZVsnQHR5cGUnXSB8fCBub2RlLnR5cGUpXG4gICAgPyBub2RlWydAaWQnXSB8fFxuICAgICAgLy8gaGFuZGxlIGxpbmtzIG9uIENvbW11bml0eSBFZGl0aW9uXG4gICAgICAoaXNFeHRlcm5hbCgpICYmIG5vZGUuaWQpXG4gICAgICA/IHtcbiAgICAgICAgICB1cmw6IGAvJHsobm9kZVsnQHR5cGUnXSB8fCBub2RlLnR5cGUpLnRvTG93ZXJDYXNlKCl9LyR7bm9kZVsnQGlkJ10gfHwgbm9kZS5pZH1gLFxuICAgICAgICAgIHRpdGxlOiAnT3BlbidcbiAgICAgICAgfVxuICAgICAgOiBub2RlWydAdHlwZSddID09PSBTY2hlbWFUeXBlLlRlcm1cbiAgICAgICAgPyB7XG4gICAgICAgICAgICB1cmw6IGAke2dsb3NzYXJ5QmFzZVVybCgpfT9xdWVyeT1gLFxuICAgICAgICAgICAgdXJsUGFyYW1WYWx1ZTogdHJ1ZSxcbiAgICAgICAgICAgIHRpdGxlOiAnU2VhcmNoIGluIEdsb3NzYXJ5J1xuICAgICAgICAgIH1cbiAgICAgICAgOiB1bmRlZmluZWRcbiAgICA6IHVuZGVmaW5lZDtcblxuY29uc3QgcHJvcGVydHlNYXBzVXJsID0gKG5vZGU6IFNpdGUgfCBPcmdhbmlzYXRpb24sIGtleTogc3RyaW5nLCB2YWx1ZSkgPT5cbiAgWyd0eXBlJ10uaW5jbHVkZXMoa2V5KSAmJlxuICBbU2NoZW1hVHlwZS5TaXRlLnRvU3RyaW5nKCksIFNjaGVtYVR5cGUuT3JnYW5pc2F0aW9uLnRvU3RyaW5nKCldLmluY2x1ZGVzKHN0cmluZ1ZhbHVlKHZhbHVlKSB8fCBub2RlLnR5cGUpXG4gICAgPyB7XG4gICAgICAgIHVybDogbWFwc1VybCh7IGxhdDogbm9kZS5sYXRpdHVkZSwgbG5nOiBub2RlLmxvbmdpdHVkZSB9KSxcbiAgICAgICAgdGl0bGU6ICdWaWV3IG9uIG1hcHMnLFxuICAgICAgICBpY29uOiBmYU1hcFxuICAgICAgfVxuICAgIDogdW5kZWZpbmVkO1xuXG5jb25zdCBwcm9wZXJ0eUV4dGVybmFsVXJsID0gKG5vZGU6IEhlc3RpYUpzb248U2NoZW1hVHlwZT4sIGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSA9PlxuICBwcm9wZXJ0eVVybChub2RlLCBrZXkpIHx8IHByb3BlcnR5TWFwc1VybChub2RlIGFzIGFueSwga2V5LCB2YWx1ZSk7XG5cbmNvbnN0IGFycmF5UGxhY2Vob2xkZXIgPSAodmFsdWVUeXBlOiBnZW5lcmljVHlwZSkgPT4gYFR5cGUgYSAke3ZhbHVlVHlwZX0gdGhlbiBwcmVzcyBFbnRlcmA7XG5cbmNvbnN0IGRlZmF1bHRQbGFjZWhvbGRlciA9ICh7IHR5cGUsIGV4YW1wbGVzLCBnZW9qc29uIH06IGFueSwgdmFsdWVUeXBlOiBnZW5lcmljVHlwZSkgPT5cbiAgZ2VvanNvblxuICAgID8gJ011c3QgYmUgYSB2YWxpZCBHZW9KU09OJ1xuICAgIDogZXhhbXBsZXM/Lmxlbmd0aFxuICAgICAgPyBBcnJheS5pc0FycmF5KGV4YW1wbGVzWzBdKVxuICAgICAgICA/IGFycmF5UGxhY2Vob2xkZXIodmFsdWVUeXBlKVxuICAgICAgICA6IGV4YW1wbGVzWzBdXG4gICAgICA6IGBNdXN0IGJlIG9mIHR5cGUgJHt0eXBlIHx8IHZhbHVlVHlwZX1gO1xuXG5jb25zdCBzY2hlbWFQbGFjaG9sZGVyID0gKHNjaGVtYTogYW55LCBmdWxsS2V5OiBzdHJpbmcpID0+IHtcbiAgY29uc3QgW3BhcmVudCwgLi4ua2V5c10gPSBmdWxsS2V5LnNwbGl0KCcuJyk7XG4gIGNvbnN0IHByb3BlcnRpZXMgPSBzY2hlbWEucHJvcGVydGllcyB8fCB7fTtcbiAgY29uc3QgeyBleGFtcGxlcyB9ID0gcGFyZW50IGluIHByb3BlcnRpZXMgPyBwcm9wZXJ0aWVzW3BhcmVudF0gOiB7IGV4YW1wbGVzOiBbXSB9O1xuICByZXR1cm4gZXhhbXBsZXM/Lmxlbmd0aCAmJiB0eXBlb2YgZXhhbXBsZXNbMF0gPT09ICdvYmplY3QnID8gZ2V0KGV4YW1wbGVzWzBdLCBrZXlzLmpvaW4oJy4nKSwgbnVsbCkgOiBudWxsO1xufTtcblxuY29uc3QgcHJvcGVydHlQbGFjZWhvbGRlciA9IChzY2hlbWE6IGFueSwgdmFsdWVUeXBlOiBnZW5lcmljVHlwZSwgZnVsbEtleSA9ICcnLCBwYXJlbnRTY2hlbWE/OiBhbnkpID0+XG4gIHNjaGVtYS50eXBlID09PSAnYXJyYXknXG4gICAgPyBhcnJheVBsYWNlaG9sZGVyKHZhbHVlVHlwZSlcbiAgICA6IChwYXJlbnRTY2hlbWEgJiYgZnVsbEtleT8ubGVuZ3RoID8gc2NoZW1hUGxhY2hvbGRlcihwYXJlbnRTY2hlbWEsIGZ1bGxLZXkpIDogbnVsbCkgfHxcbiAgICAgIGRlZmF1bHRQbGFjZWhvbGRlcihzY2hlbWEsIHZhbHVlVHlwZSk7XG5cbmNvbnN0IHByb3BlcnR5VHlwZVZhbHVlOiB7XG4gIFt0eXBlOiBzdHJpbmddOiAodmFsdWU6IGFueSwgc2NoZW1hOiBkZWZpbml0aW9uKSA9PiBhbnk7XG59ID0ge1xuICBvYmplY3Q6IHNhZmVKU09OU3RyaW5naWZ5LFxuICBhcnJheTogKHZhbCwgc2NoZW1hKSA9PiB7XG4gICAgY29uc3QgeyBpdGVtcyB9ID0gc2NoZW1hIGFzIElEZWZpbml0aW9uQXJyYXk7XG4gICAgcmV0dXJuICckcmVmJyBpbiBpdGVtc1xuICAgICAgPyB2YWxcbiAgICAgIDogQXJyYXkuaXNBcnJheSh2YWwpXG4gICAgICAgID8gdmFsLm1hcCh2YWx1ZSA9PiBwcm9wZXJ0eVZhbHVlKGl0ZW1zLCB2YWx1ZSkpLmpvaW4oQVJSQVlfREVMSU1JVEVSKVxuICAgICAgICA6IHZhbDtcbiAgfSxcbiAganNvbjogdmFsID0+IHZhbCB8fCAnJyxcbiAgc3RyaW5nOiB2YWwgPT4gKGAke3ZhbH1gIHx8ICcnKS50cmltKCksXG4gIG51bWJlcjogdmFsID0+ICsoYCR7dmFsfWAgfHwgJzAnKSxcbiAgaW50ZWdlcjogdmFsID0+ICsoYCR7dmFsfWAgfHwgJzAnKSxcbiAgYm9vbGVhbjogdmFsID0+IChgJHt2YWx9YCB8fCAnJykudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnXG59O1xuXG5jb25zdCBwcm9wZXJ0eVZhbHVlID0gKHNjaGVtYTogZGVmaW5pdGlvbiwgdmFsdWU6IGFueSkgPT4ge1xuICBjb25zdCB2YWx1ZVR5cGUgPSBpc0dlb2pzb24oc2NoZW1hKVxuICAgID8gJ2pzb24nXG4gICAgOiBzY2hlbWEudHlwZVxuICAgICAgPyBBcnJheS5pc0FycmF5KHNjaGVtYS50eXBlKSAmJiAodHlwZW9mIHZhbHVlKSBpbiBwcm9wZXJ0eVR5cGVWYWx1ZVxuICAgICAgICA/IHR5cGVvZiB2YWx1ZVxuICAgICAgICA6IChzY2hlbWEudHlwZSBhcyBzdHJpbmcpXG4gICAgICA6ICdvYmplY3QnO1xuICByZXR1cm4gcHJvcGVydHlUeXBlVmFsdWVbdmFsdWVUeXBlIGluIHByb3BlcnR5VHlwZVZhbHVlID8gdmFsdWVUeXBlIDogJ3N0cmluZyddKHZhbHVlLCBzY2hlbWEpO1xufTtcblxuY29uc3QgcHJvcGVydHlWYWx1ZVR5cGUgPSAoc2NoZW1hOiBkZWZpbml0aW9uLCB2YWx1ZT86IGFueSkgPT5cbiAgKGlzR2VvanNvbihzY2hlbWEpXG4gICAgPyAnanNvbidcbiAgICA6IHNjaGVtYS50eXBlXG4gICAgICA/IEFycmF5LmlzQXJyYXkoc2NoZW1hLnR5cGUpXG4gICAgICAgID8gc2NoZW1hLnR5cGVbMF1cbiAgICAgICAgOiBzY2hlbWEudHlwZSA9PT0gJ2FycmF5J1xuICAgICAgICAgID8gcHJvcGVydHlWYWx1ZVR5cGUoeyAuLi5zY2hlbWEsIHR5cGU6IFtzY2hlbWEuaXRlbXMudHlwZSBhcyBnZW5lcmljVHlwZV0gfSlcbiAgICAgICAgICA6IHNjaGVtYS50eXBlXG4gICAgICA6IHR5cGVvZiB2YWx1ZSkgYXMgZ2VuZXJpY1R5cGU7XG5cbmNvbnN0IHByb3BlcnR5VHlwZVBhcnNlVmFsdWU6IHtcbiAgW3R5cGU6IHN0cmluZ106ICh2YWx1ZTogYW55LCBzY2hlbWE6IGRlZmluaXRpb24pID0+IGFueTtcbn0gPSB7XG4gIHVuZGVmaW5lZDogKCkgPT4gdW5kZWZpbmVkLFxuICBvYmplY3Q6IHZhbCA9PiBzYWZlSlNPTlBhcnNlKHZhbCksXG4gIGFycmF5OiAodmFsLCBzY2hlbWEpID0+IHtcbiAgICBjb25zdCB7IGl0ZW1zIH0gPSBzY2hlbWEgYXMgSURlZmluaXRpb25BcnJheTtcbiAgICByZXR1cm4gJyRyZWYnIGluIGl0ZW1zXG4gICAgICA/IHZhbFxuICAgICAgOiAhdmFsIHx8IEFycmF5LmlzQXJyYXkodmFsKVxuICAgICAgICA/IHZhbFxuICAgICAgICA6IHZhbC5zcGxpdChBUlJBWV9ERUxJTUlURVIpLm1hcCh2YWx1ZSA9PiBwYXJzZU5ld1ZhbHVlKGl0ZW1zLCB2YWx1ZSkpO1xuICB9LFxuICBqc29uOiB2YWwgPT4gdmFsIHx8ICcnLFxuICBzdHJpbmc6IHZhbCA9PiAoYCR7dmFsfWAgfHwgJycpLnRyaW0oKSxcbiAgbnVtYmVyOiB2YWwgPT4gKyhgJHt2YWx9YCB8fCAnMCcpLFxuICBpbnRlZ2VyOiB2YWwgPT4gKyhgJHt2YWx9YCB8fCAnMCcpLFxuICBib29sZWFuOiB2YWwgPT4gKGAke3ZhbH1gIHx8ICcnKS50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZSdcbn07XG5cbi8qKlxuICogQ29udmVydCB2YWx1ZSB0byB0aGUgZmluYWwgdHlwZSBpbiB0aGUgc2NoZW1hLlxuICpcbiAqIEBwYXJhbSBzY2hlbWEgRGVmaW5pdGlvbiBvZiB0aGUgdmFsdWUuXG4gKiBAcGFyYW0gdmFsdWVcbiAqIEByZXR1cm5zIFZhbHVlIGluIHRoZSBjb3JyZWN0IGZvcm1hdC5cbiAqL1xuZXhwb3J0IGNvbnN0IHBhcnNlTmV3VmFsdWUgPSAoc2NoZW1hOiBkZWZpbml0aW9uLCB2YWx1ZTogYW55KSA9PlxuICBzY2hlbWE/LnR5cGVcbiAgICA/IEFycmF5LmlzQXJyYXkoc2NoZW1hPy50eXBlKVxuICAgICAgPyBwcm9wZXJ0eVR5cGVQYXJzZVZhbHVlW3R5cGVvZiB2YWx1ZV0odmFsdWUsIHNjaGVtYSlcbiAgICAgIDogcHJvcGVydHlUeXBlUGFyc2VWYWx1ZVtpc0dlb2pzb24oc2NoZW1hKSA/ICdqc29uJyA6IChzY2hlbWEudHlwZSBhcyBzdHJpbmcpXSh2YWx1ZSwgc2NoZW1hKVxuICAgIDogdmFsdWU7XG5cbmNvbnN0IGlzT3BlbkRlZmF1bHQgPSAoc2NoZW1hVHlwZTogU2NoZW1hVHlwZSkgPT4gW1NjaGVtYVR5cGUuVGVybV0uaW5jbHVkZXMoc2NoZW1hVHlwZSk7XG5cbi8vIGNhbiB0aGUgcHJvcGVydHkgYmUgc2VlbiB3aGVuIHRoZSBncm91cCBpcyBjbG9zZWRcbmNvbnN0IGlzS2V5Q2xvc2VkVmlzaWJsZSA9IChrZXk6IHN0cmluZykgPT4gWyd0eXBlJywgJ2lkJywgJ0B0eXBlJywgJ0BpZCddLmluY2x1ZGVzKGtleSk7XG5cbmNvbnN0IGlzS2V5SGlkZGVuID0gKGtleTogc3RyaW5nKSA9PiBbJ3R5cGUnLCAnQHR5cGUnXS5pbmNsdWRlcyhrZXkpO1xuXG5jb25zdCBpc0tleVJlcXVpcmVkID0gKGtleTogc3RyaW5nLCBkZWY/OiBJRGVmaW5pdGlvbk9iamVjdCkgPT5cbiAgWyd0eXBlJywgJ2lkJ10uaW5jbHVkZXMoa2V5KSB8fCAoZGVmPy5yZXF1aXJlZCB8fCBbXSkuaW5jbHVkZXMoa2V5KTtcblxuZXhwb3J0IGNvbnN0IHByb3BlcnR5RXJyb3IgPVxuICAoZXJyb3JzOiBJVmFsaWRhdGlvbkVycm9yW10pID0+XG4gIChkYXRhUGF0aDogc3RyaW5nLCBub25FeHBhbmRhYmxlQXJyYXkgPSBmYWxzZSkgPT5cbiAgICBlcnJvcnMuZmluZChcbiAgICAgIGVycm9yID0+XG4gICAgICAgIChlcnJvci5kYXRhUGF0aCA9PT0gZGF0YVBhdGggfHxcbiAgICAgICAgICAobm9uRXhwYW5kYWJsZUFycmF5ICYmXG4gICAgICAgICAgICBub25FeHBhbmRhYmxlQXJyYXlEYXRhUGF0aChlcnJvci5kYXRhUGF0aCEpID09PSBub25FeHBhbmRhYmxlQXJyYXlEYXRhUGF0aChkYXRhUGF0aCkpKSAmJlxuICAgICAgICAoZGF0YVBhdGgubGVuZ3RoID4gMCB8fCAhaXNNaXNzaW5nUHJvcGVydHlFcnJvcihlcnJvcikpXG4gICAgKTtcblxuY29uc3QgbWlzc2luZ1Byb3BlcnR5RXJyb3JzID0gKFxuICBub2RlOiBIZXN0aWFKc29uPFNjaGVtYVR5cGU+LFxuICBlcnJvcnM6IElWYWxpZGF0aW9uRXJyb3JbXSxcbiAgcGFyZW50ID0gJydcbik6IElOb2RlUHJvcGVydHlbXSA9PiB7XG4gIGNvbnN0IGFsbEVycm9ycyA9IGVycm9ycy5maWx0ZXIoZXJyb3IgPT4gZXJyb3IuZGF0YVBhdGggPT09IGtleVRvRGF0YVBhdGgocGFyZW50KSAmJiBpc01pc3NpbmdQcm9wZXJ0eUVycm9yKGVycm9yKSk7XG4gIC8vIGNoZWNrIGZvciBub2RlIG5vdCBmb3VuZCBlcnJvcnNcbiAgY29uc3QgbWlzc2luZ05vZGUgPSBtaXNzaW5nTm9kZUVycm9ycyhhbGxFcnJvcnMpO1xuICByZXR1cm4gbWlzc2luZ05vZGUubGVuZ3RoID09PSAyXG4gICAgPyBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogcHJvcGVydHlJZCgpLFxuICAgICAgICAgIHNjaGVtYVR5cGU6IG5vZGUudHlwZSxcbiAgICAgICAgICBzdWdnZXN0aW9uczogeyB0eXBlOiBkZWZhdWx0U3VnZ2VzdGlvblR5cGUgfSxcbiAgICAgICAgICBrZXk6ICcnLFxuICAgICAgICAgIGZ1bGxLZXk6IHBhcmVudCxcbiAgICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgICAgZXJyb3I6IHtcbiAgICAgICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAgICAgbWVzc2FnZTogbWlzc2luZ05vZGVFcnJvck1lc3NhZ2UoXG4gICAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICAgIG1pc3NpbmdOb2RlLmZpbmQoKHsgcGFyYW1zIH0pID0+IHBhcmFtcz8ubWlzc2luZ1Byb3BlcnR5ID09PSAnQGlkJylcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9LFxuICAgICAgICAgIGhhc0Vycm9yOiB0cnVlLFxuICAgICAgICAgIHByb3BlcnRpZXM6IFtdLFxuICAgICAgICAgIGFkZFByb3BlcnR5RW5hYmxlZDogZmFsc2UsXG4gICAgICAgICAgZm9ybWF0dGVyOiBmb3JtYXR0ZXIoJycpXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICA6IGFsbEVycm9ycy5tYXAoZXJyb3IgPT4ge1xuICAgICAgICBjb25zdCB7IG1pc3NpbmdQcm9wZXJ0eSB9ID0gZXJyb3IucGFyYW1zITtcbiAgICAgICAgY29uc3QgZnVsbEtleSA9IHBhcmVudCA/IGAke3BhcmVudH0uJHttaXNzaW5nUHJvcGVydHl9YCA6IG1pc3NpbmdQcm9wZXJ0eTtcbiAgICAgICAgY29uc3QgbWlzc2luZ09uZU9mID0gaXNNaXNzaW5nT25lT2ZFcnJvcihlcnJvcik7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaWQ6IHByb3BlcnR5SWQoKSxcbiAgICAgICAgICBzY2hlbWFUeXBlOiBub2RlLnR5cGUsXG4gICAgICAgICAgc3VnZ2VzdGlvbnM6IHsgdHlwZTogZGVmYXVsdFN1Z2dlc3Rpb25UeXBlIH0sXG4gICAgICAgICAga2V5OiBtaXNzaW5nUHJvcGVydHksXG4gICAgICAgICAgZnVsbEtleSxcbiAgICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgICAgZWRpdGFibGU6IGZhbHNlLFxuICAgICAgICAgIGVycm9yOiBmb3JtYXRFcnJvcihlcnJvciksXG4gICAgICAgICAgaGFzRXJyb3I6IG1pc3NpbmdPbmVPZiA/IGZhbHNlIDogZXJyb3JIYXNFcnJvcihlcnJvciksXG4gICAgICAgICAgaGFzV2FybmluZzogbWlzc2luZ09uZU9mIHx8IGVycm9ySGFzV2FybmluZyhlcnJvciksXG4gICAgICAgICAgcHJvcGVydGllczogW10sXG4gICAgICAgICAgYWRkUHJvcGVydHlFbmFibGVkOiB0cnVlLFxuICAgICAgICAgIGZvcm1hdHRlcjogZm9ybWF0dGVyKG1pc3NpbmdQcm9wZXJ0eSlcbiAgICAgICAgfTtcbiAgICAgIH0pO1xufTtcblxuY29uc3QgcHJvcGVydHlGcm9tTm9kZSA9XG4gIChcbiAgICBzY2hlbWFzOiBkZWZpbml0aW9ucyxcbiAgICBlcnJvcnM6IElWYWxpZGF0aW9uRXJyb3JbXSxcbiAgICBub2RlU2NoZW1hOiBkZWZpbml0aW9uLFxuICAgIGRlZXBFZGl0YWJsZTogYm9vbGVhbixcbiAgICBwYXJlbnQgPSAnJyxcbiAgICBub2RlOiBhbnlcbiAgKSA9PlxuICAoa2V5OiBzdHJpbmcpOiBJTm9kZVByb3BlcnR5ID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9IG5vZGVba2V5XTtcbiAgICBjb25zdCBleHBhbmRhYmxlID0gaXNFeHBhbmRhYmxlKHZhbHVlKTtcbiAgICBjb25zdCBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG4gICAgY29uc3Qgbm9uRXhwYW5kYWJsZUFycmF5ID0gaXNBcnJheSAmJiAhZXhwYW5kYWJsZTtcbiAgICBjb25zdCBmdWxsS2V5ID0gQXJyYXkuaXNBcnJheShub2RlKSA/IGAke3BhcmVudH1bJHtrZXl9XWAgOiBbcGFyZW50LCBrZXldLmZpbHRlcihCb29sZWFuKS5qb2luKCcuJyk7XG4gICAgY29uc3Qgbm9kZVR5cGUgPSBub2RlLnR5cGUgfHwgbm9kZVsnQHR5cGUnXTtcbiAgICBjb25zdCBzY2hlbWFUeXBlID0gZXhwYW5kYWJsZVxuICAgICAgPyBpc0FycmF5ICYmIHZhbHVlLmxlbmd0aFxuICAgICAgICA/IHZhbHVlWzBdLnR5cGUgfHwgdmFsdWVbMF1bJ0B0eXBlJ11cbiAgICAgICAgOiB2YWx1ZS50eXBlIHx8IHZhbHVlWydAdHlwZSddXG4gICAgICA6IG5vZGVUeXBlO1xuICAgIGNvbnN0IHNjaGVtYSA9XG4gICAgICAoc2NoZW1hcyAmJiBpc1R5cGVWYWxpZCh7IHR5cGU6IHNjaGVtYVR5cGUgfSlcbiAgICAgICAgPyBleHBhbmRhYmxlXG4gICAgICAgICAgPyBzY2hlbWFzW3NjaGVtYVR5cGVdXG4gICAgICAgICAgOiBzY2hlbWFzW3NjaGVtYVR5cGVdLnByb3BlcnRpZXNba2V5XVxuICAgICAgICA6IG51bGwpIHx8IHt9O1xuICAgIGNvbnN0IGlzSXJpID0gaXNTY2hlbWFJcmkoc2NoZW1hKTtcbiAgICBjb25zdCBlcnJvciA9IHByb3BlcnR5RXJyb3IoZXJyb3JzKShrZXlUb0RhdGFQYXRoKGZ1bGxLZXkpLCBub25FeHBhbmRhYmxlQXJyYXkpO1xuICAgIGNvbnN0IHBhcmVudFNjaGVtYSA9IGV4cGFuZGFibGVcbiAgICAgID8gLy8gVE9ETzogZm9yIG5vbi1hcnJheSwgc2hvdWxkIGJlIHNjaGVtYSB1bmxlc3MgbGFzdCByZWN1cnNpb25cbiAgICAgICAgaXNBcnJheVxuICAgICAgICA/IHNjaGVtYVxuICAgICAgICA6IG5vZGVTY2hlbWFcbiAgICAgIDogbm9kZVNjaGVtYTtcbiAgICBjb25zdCBwcm9wZXJ0aWVzID1cbiAgICAgIGV4cGFuZGFibGUgfHwgaXNJcmkgPyByZWN1cnNpdmVQcm9wZXJ0aWVzKHNjaGVtYXMsIGVycm9ycywgcGFyZW50U2NoZW1hLCBkZWVwRWRpdGFibGUsIGZ1bGxLZXkpKHZhbHVlKSA6IFtdO1xuICAgIGNvbnN0IGluRXJyb3IgPSBlcnJvckhhc0Vycm9yKGVycm9yKSB8fCBoYXNFcnJvcihwcm9wZXJ0aWVzKTtcbiAgICBjb25zdCBpbldhcm5pbmcgPSBlcnJvckhhc1dhcm5pbmcoZXJyb3IpIHx8IGhhc1dhcm5pbmcocHJvcGVydGllcyk7XG4gICAgY29uc3QgZWRpdGFibGUgPVxuICAgICAgaXNUeXBlTm9kZShub2RlWydAdHlwZSddKSB8fCAoZXhwYW5kYWJsZSAmJiBpc1R5cGVOb2RlKHZhbHVlWydAdHlwZSddKSlcbiAgICAgICAgPyBmYWxzZVxuICAgICAgICA6IC8vIHByZXZlbnQgZWRpdGluZy9hZGRpbmcgbmV3IHByb3BlcnRpZXMgb24gZXhpc3Rpbmcgc3ViLW5vZGVzXG4gICAgICAgICAgIWRlZXBFZGl0YWJsZSAmJlxuICAgICAgICAgICAgaXNUeXBlTm9kZShzY2hlbWFUeXBlKSAmJlxuICAgICAgICAgICAgKGV4cGFuZGFibGUgPyB2YWx1ZS50eXBlICE9PSBOb2RlVHlwZS5UZXJtIDogcGFyZW50ICYmIG5vZGUudHlwZSAhPT0gTm9kZVR5cGUuVGVybSlcbiAgICAgICAgICA/IGZhbHNlXG4gICAgICAgICAgOiAvLyBoYW5kbGUgSVJJXG4gICAgICAgICAgICAoIXNjaGVtYVR5cGUgJiYga2V5ID09PSAnQGlkJykgfHwgZWRpdGFibGVLZXkoa2V5KTtcbiAgICBjb25zdCB2YWx1ZVR5cGUgPSBwcm9wZXJ0eVZhbHVlVHlwZShzY2hlbWEsIHZhbHVlKTtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHByb3BlcnR5SWQoKSxcbiAgICAgIHNjaGVtYVR5cGU6IGlzSXJpID8gbnVsbCA6IHNjaGVtYVR5cGUsXG4gICAgICBzY2hlbWEsXG4gICAgICBrZXksXG4gICAgICBmdWxsS2V5LFxuICAgICAgdmFsdWU6IHByb3BlcnR5VmFsdWUoc2NoZW1hLCB2YWx1ZSksXG4gICAgICBlZGl0YWJsZTogaW5FcnJvciB8fCBlZGl0YWJsZSxcbiAgICAgIHN1Z2dlc3Rpb25zOiBlbmFibGVTdWdnZXN0aW9ucyhub2RlU2NoZW1hLCBub2RlLnR5cGUsIGZ1bGxLZXksIHNjaGVtYSksXG4gICAgICBhZGRQcm9wZXJ0eUVuYWJsZWQ6IGlzQWRkUHJvcGVydHlFbmFibGVkKG5vZGUsIHNjaGVtYVR5cGUsIHNjaGVtYSwgZnVsbEtleSksXG4gICAgICBuZXdQcm9wZXJ0eToge30sXG4gICAgICBuZXdFcnJvcjogeyBsZXZlbDogJ3dhcm5pbmcnIH0sXG4gICAgICBlcnJvcjogZm9ybWF0RXJyb3IoZXJyb3IpLFxuICAgICAgaXNIaWRkZW46IHBhcmVudCAmJiBpc0tleUhpZGRlbihrZXkpLFxuICAgICAgY2xvc2VkVmlzaWJsZTogaXNLZXlDbG9zZWRWaXNpYmxlKGtleSksXG4gICAgICBoYXNFcnJvcjogaW5FcnJvcixcbiAgICAgIGhhc1dhcm5pbmc6IGluV2FybmluZyxcbiAgICAgIGlzUmVxdWlyZWQ6IGlzS2V5UmVxdWlyZWQoa2V5LCBzY2hlbWFzW25vZGVUeXBlXSksXG4gICAgICBpc0FycmF5LFxuICAgICAgaXNFeHBhbmRhYmxlOiBleHBhbmRhYmxlLFxuICAgICAgaXNPcGVuOiBpc09wZW5EZWZhdWx0KHNjaGVtYVR5cGUpLFxuICAgICAgcHJvcGVydGllcyxcbiAgICAgIHBsYWNlaG9sZGVyOiBwcm9wZXJ0eVBsYWNlaG9sZGVyKHNjaGVtYSwgdmFsdWVUeXBlLCBmdWxsS2V5LCBwYXJlbnRTY2hlbWEpLFxuICAgICAgZXh0ZXJuYWxVcmw6IHByb3BlcnR5RXh0ZXJuYWxVcmwobm9kZSwga2V5LCB2YWx1ZSksXG4gICAgICBmb3JtYXR0ZXI6IGZvcm1hdHRlcihrZXkpXG4gICAgfTtcbiAgfTtcblxuZXhwb3J0IGNvbnN0IHNpbmdsZVByb3BlcnR5ID0gKHNjaGVtYXM6IGRlZmluaXRpb25zLCBlcnJvcnM6IElWYWxpZGF0aW9uRXJyb3JbXSwgbm9kZTogYW55LCBmdWxsS2V5OiBzdHJpbmcpID0+IHtcbiAgY29uc3QgW190LCAuLi5rZXlzXSA9IGZ1bGxLZXkuc3BsaXQoJy4nKTtcbiAgY29uc3Qga2V5ID0ga2V5cy5wb3AoKSE7XG4gIGNvbnN0IHBhcmVudCA9IGtleXMuam9pbignLicpO1xuICBjb25zdCBwYXJlbnROb2RlID0gcGFyZW50Lmxlbmd0aCA/IGdldChub2RlLCBwYXJlbnQpIDogbm9kZTtcbiAgY29uc3Qgc2NoZW1hVHlwZSA9IHR5cGVUb1NjaGVtYVR5cGUocGFyZW50Tm9kZS50eXBlIHx8IHBhcmVudE5vZGVbJ0B0eXBlJ10pO1xuICBjb25zdCBwYXJlbnRTY2hlbWEgPSBzY2hlbWFzW3NjaGVtYVR5cGVdO1xuICByZXR1cm4gcHJvcGVydHlGcm9tTm9kZShzY2hlbWFzLCBlcnJvcnMsIHBhcmVudFNjaGVtYSwgdHJ1ZSwgcGFyZW50LCBwYXJlbnROb2RlKShrZXkpO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlY3Vyc2l2ZVByb3BlcnRpZXMgPVxuICAoc2NoZW1hczogZGVmaW5pdGlvbnMsIGVycm9yczogSVZhbGlkYXRpb25FcnJvcltdLCBub2RlU2NoZW1hOiBkZWZpbml0aW9uLCBkZWVwRWRpdGFibGU6IGJvb2xlYW4sIHBhcmVudCA9ICcnKSA9PlxuICAobm9kZTogYW55KTogSU5vZGVQcm9wZXJ0eVtdID0+XG4gICAgT2JqZWN0LmtleXMobm9kZSlcbiAgICAgIC5maWx0ZXIoa2V5ID0+ICFpZ25vcmVLZXlzLmluY2x1ZGVzKGtleSkpXG4gICAgICAubWFwKHByb3BlcnR5RnJvbU5vZGUoc2NoZW1hcywgZXJyb3JzLCBub2RlU2NoZW1hLCBkZWVwRWRpdGFibGUsIHBhcmVudCwgbm9kZSkpXG4gICAgICAuY29uY2F0KC4uLm1pc3NpbmdQcm9wZXJ0eUVycm9ycyhub2RlLCBlcnJvcnMsIHBhcmVudCkpXG4gICAgICAuc29ydChzb3J0UHJvcGVydGllcyk7XG5cbmNvbnN0IGZ1bGxLZXlQYXJ0cyA9IChmdWxsS2V5OiBzdHJpbmcpID0+XG4gIGZ1bGxLZXkuc3BsaXQoJy4nKS5mbGF0TWFwKHZhbCA9PiB7XG4gICAgaWYgKHZhbC5lbmRzV2l0aCgnXScpKSB7XG4gICAgICBjb25zdCBba2V5LCBpbmRleF0gPSB2YWwuc3BsaXQoJ1snKTtcbiAgICAgIHJldHVybiBba2V5LCBpbmRleC5yZXBsYWNlKCddJywgJycpXTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbDtcbiAgfSk7XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVQcm9wZXJ0aWVzID0gKFxuICB7IHByb3BlcnRpZXMgfTogUGFydGlhbDxJTm9kZVByb3BlcnR5PixcbiAgdXBkYXRlcjogKHByb3A6IElOb2RlUHJvcGVydHkpID0+IElOb2RlUHJvcGVydHlcbikgPT4gKHByb3BlcnRpZXMgfHwgW10pLm1hcChwcm9wID0+IHVwZGF0ZVByb3BlcnRpZXModXBkYXRlcihwcm9wKSwgdXBkYXRlcikpO1xuXG5leHBvcnQgY29uc3QgdHlwZVRvTmV3UHJvcGVydHkgPSAoXG4gIHNjaGVtYXM6IGRlZmluaXRpb25zLFxuICBzY2hlbWE6IGRlZmluaXRpb24sXG4gIG5vZGVTY2hlbWE6IGRlZmluaXRpb24sXG4gIG5vZGU6IGFueSxcbiAgZnVsbEtleTogc3RyaW5nXG4pOiBJTm9kZVByb3BlcnR5ID0+IHtcbiAgY29uc3Qga2V5ID0gZnVsbEtleVBhcnRzKGZ1bGxLZXkpLnBvcCgpITtcbiAgY29uc3QgbWFwcGluZ3M6IHtcbiAgICBba2V5OiBzdHJpbmddOiAoKSA9PiBJTm9kZVByb3BlcnR5O1xuICB9ID0ge1xuICAgIG9iamVjdDogKCkgPT4ge1xuICAgICAgY29uc3QgeyBzY2hlbWFUeXBlLCBwcm9wZXJ0aWVzIH0gPSBzY2hlbWFSZXF1aXJlZFByb3BlcnRpZXMoc2NoZW1hcywgc2NoZW1hIGFzIElEZWZpbml0aW9uT2JqZWN0KTtcbiAgICAgIG5vZGVba2V5XSA9IG5vZGVba2V5XSB8fCB7fTtcbiAgICAgIG5vZGVba2V5XS50eXBlID0gc2NoZW1hVHlwZTtcbiAgICAgIC8vIFRPRE86IGhhbmRsZSBub2RlU2NoZW1hIHNob3VsZCBiZSBzY2hlbWEgdW5sZXNzIGxhc3QgcmVjdXJzaW9uXG4gICAgICBjb25zdCBwcm9wcyA9IHByb3BlcnRpZXNcbiAgICAgICAgLmZpbHRlcihwcm9wID0+IG5lc3RpbmdFbmFibGVkKHNjaGVtYVR5cGUsIHByb3Aua2V5KSAmJiAhIXByb3AudmFsdWUpXG4gICAgICAgIC5tYXAodiA9PiAoe1xuICAgICAgICAgIC4uLnR5cGVUb05ld1Byb3BlcnR5KHNjaGVtYXMsIHYudmFsdWUsIG5vZGVTY2hlbWEsIG5vZGVba2V5XSwgYCR7ZnVsbEtleX0uJHt2LmtleX1gKSxcbiAgICAgICAgICBpc1JlcXVpcmVkOiB0cnVlXG4gICAgICAgIH0pKTtcbiAgICAgIGNvbnN0IHZhbHVlID0gcHJvcHMucmVkdWNlKChwcmV2LCBjdXJyKSA9PiAoeyAuLi5wcmV2LCBbY3Vyci5rZXldOiBjdXJyLnZhbHVlIH0pLCB7fSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZDogcHJvcGVydHlJZCgpLFxuICAgICAgICBpc0FkZGVkOiB0cnVlLFxuICAgICAgICBzY2hlbWE6IHNjaGVtYXNbc2NoZW1hVHlwZV0sXG4gICAgICAgIHNjaGVtYVR5cGUsXG4gICAgICAgIGtleSxcbiAgICAgICAgZnVsbEtleSxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIGVkaXRhYmxlOiBlZGl0YWJsZUtleShrZXkpLFxuICAgICAgICBpc0hpZGRlbjogaXNLZXlIaWRkZW4oa2V5KSxcbiAgICAgICAgY2xvc2VkVmlzaWJsZTogaXNLZXlDbG9zZWRWaXNpYmxlKGtleSksXG4gICAgICAgIHN1Z2dlc3Rpb25zOiBlbmFibGVTdWdnZXN0aW9ucyhub2RlU2NoZW1hLCBzY2hlbWFUeXBlLCBmdWxsS2V5KSxcbiAgICAgICAgcHJvcGVydGllczogcHJvcHMuc29ydChzb3J0UHJvcGVydGllcyksXG4gICAgICAgIGFkZFByb3BlcnR5RW5hYmxlZDogaXNBZGRQcm9wZXJ0eUVuYWJsZWQobm9kZSwgc2NoZW1hVHlwZSwgc2NoZW1hc1tzY2hlbWFUeXBlXSwga2V5KSxcbiAgICAgICAgbmV3UHJvcGVydHk6IHt9LFxuICAgICAgICBuZXdFcnJvcjogeyBsZXZlbDogJ3dhcm5pbmcnIH0sXG4gICAgICAgIGlzUmVxdWlyZWQ6IGlzS2V5UmVxdWlyZWQoa2V5LCBzY2hlbWEgYXMgYW55KSxcbiAgICAgICAgaXNBcnJheTogZmFsc2UsXG4gICAgICAgIGlzRXhwYW5kYWJsZTogdHJ1ZSxcbiAgICAgICAgaXNPcGVuOiBpc09wZW5EZWZhdWx0KHNjaGVtYVR5cGUpLFxuICAgICAgICBmb3JtYXR0ZXI6IGZvcm1hdHRlcihrZXkpXG4gICAgICB9O1xuICAgIH0sXG4gICAgYXJyYXk6ICgpID0+IHtcbiAgICAgIGNvbnN0IHsgaXRlbXMgfSA9IHNjaGVtYSBhcyBJRGVmaW5pdGlvbkFycmF5O1xuICAgICAgLy8gYXJyYXkgb2Ygc3RyaW5nLCBudW1iZXIgYW5kIGJvb2xlYW5cbiAgICAgIGlmIChpdGVtcy50eXBlKSB7XG4gICAgICAgIHJldHVybiBtYXBwaW5ncy5kZWZhdWx0KCk7XG4gICAgICB9XG4gICAgICBjb25zdCBzY2hlbWFUeXBlID0gZGVmaW5pdGlvblRvU2NoZW1hVHlwZShpdGVtcyBhcyBJRGVmaW5pdGlvbk9iamVjdCk7XG4gICAgICBub2RlW2tleV0gPSBub2RlW2tleV0gfHwgW107XG4gICAgICBub2RlW2tleV0ucHVzaCh7fSk7XG4gICAgICBjb25zdCBwcm9wZXJ0eSA9IHR5cGVUb05ld1Byb3BlcnR5KHNjaGVtYXMsIGl0ZW1zLCBzY2hlbWFzW3NjaGVtYVR5cGVdLCBub2RlW2tleV1bMF0sIGAke2Z1bGxLZXl9WzBdYCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZDogcHJvcGVydHlJZCgpLFxuICAgICAgICBpc0FkZGVkOiB0cnVlLFxuICAgICAgICBzY2hlbWEsXG4gICAgICAgIHNjaGVtYVR5cGUsXG4gICAgICAgIGtleSxcbiAgICAgICAgZnVsbEtleSxcbiAgICAgICAgdmFsdWU6IFtwcm9wZXJ0eS52YWx1ZV0sXG4gICAgICAgIGVkaXRhYmxlOiBlZGl0YWJsZUtleShrZXkpLFxuICAgICAgICBpc0hpZGRlbjogaXNLZXlIaWRkZW4oa2V5KSxcbiAgICAgICAgY2xvc2VkVmlzaWJsZTogaXNLZXlDbG9zZWRWaXNpYmxlKGtleSksXG4gICAgICAgIHN1Z2dlc3Rpb25zOiB1bmRlZmluZWQsXG4gICAgICAgIHByb3BlcnRpZXM6IFtwcm9wZXJ0eV0sXG4gICAgICAgIG5ld1Byb3BlcnR5OiB7fSxcbiAgICAgICAgbmV3RXJyb3I6IHsgbGV2ZWw6ICd3YXJuaW5nJyB9LFxuICAgICAgICBpc0FycmF5OiB0cnVlLFxuICAgICAgICBpc0V4cGFuZGFibGU6IHRydWUsXG4gICAgICAgIGFkZFByb3BlcnR5RW5hYmxlZDogZmFsc2UsXG4gICAgICAgIGZvcm1hdHRlcjogZm9ybWF0dGVyKGtleSlcbiAgICAgIH07XG4gICAgfSxcbiAgICBnZW9qc29uOiAoKSA9PiB0eXBlVG9OZXdQcm9wZXJ0eShzY2hlbWFzLCB7IHR5cGU6ICdqc29uJyB9IGFzIGFueSwgbm9kZVNjaGVtYSwgbm9kZSwgZnVsbEtleSksXG4gICAgZGVmYXVsdDogKCkgPT4ge1xuICAgICAgY29uc3QgdmFsdWVUeXBlID0gcHJvcGVydHlWYWx1ZVR5cGUoc2NoZW1hKTtcbiAgICAgIGNvbnN0IHZhbHVlID0gc2NoZW1hLmRlZmF1bHQgfHwgKHNjaGVtYSBhcyBhbnkpLmNvbnN0IHx8IHZhbHVlVHlwZVRvRGVmYXVsdFt2YWx1ZVR5cGVdO1xuICAgICAgbm9kZVtrZXldID0gdmFsdWU7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZDogcHJvcGVydHlJZCgpLFxuICAgICAgICBpc0FkZGVkOiB0cnVlLFxuICAgICAgICBzY2hlbWEsXG4gICAgICAgIHNjaGVtYVR5cGU6IG5vZGUudHlwZSxcbiAgICAgICAga2V5LFxuICAgICAgICBmdWxsS2V5LFxuICAgICAgICB2YWx1ZTogcHJvcGVydHlWYWx1ZShzY2hlbWEsIHZhbHVlKSxcbiAgICAgICAgZWRpdGFibGU6IGVkaXRhYmxlS2V5KGtleSksXG4gICAgICAgIGlzSGlkZGVuOiBpc0tleUhpZGRlbihrZXkpLFxuICAgICAgICBjbG9zZWRWaXNpYmxlOiBpc0tleUNsb3NlZFZpc2libGUoa2V5KSxcbiAgICAgICAgc3VnZ2VzdGlvbnM6IGVuYWJsZVN1Z2dlc3Rpb25zKG5vZGVTY2hlbWEsIG5vZGUudHlwZSwgZnVsbEtleSwgc2NoZW1hKSxcbiAgICAgICAgcGxhY2Vob2xkZXI6IHByb3BlcnR5UGxhY2Vob2xkZXIoc2NoZW1hLCB2YWx1ZVR5cGUsIGZ1bGxLZXksIG5vZGVTY2hlbWEpLFxuICAgICAgICBleHRlcm5hbFVybDogcHJvcGVydHlFeHRlcm5hbFVybChub2RlLCBrZXksIHZhbHVlKSxcbiAgICAgICAgcHJvcGVydGllczogW10sXG4gICAgICAgIGFkZFByb3BlcnR5RW5hYmxlZDogZmFsc2UsXG4gICAgICAgIGZvcm1hdHRlcjogZm9ybWF0dGVyKGtleSlcbiAgICAgIH07XG4gICAgfVxuICB9O1xuICBjb25zdCBtYXBwZWQgPSBpc0dlb2pzb24oc2NoZW1hKVxuICAgID8gbWFwcGluZ3MuZ2VvanNvblxuICAgIDogIXNjaGVtYS50eXBlXG4gICAgICA/IG1hcHBpbmdzLm9iamVjdFxuICAgICAgOiAoc2NoZW1hLnR5cGUgYXMgc3RyaW5nKSBpbiBtYXBwaW5nc1xuICAgICAgICA/IG1hcHBpbmdzW3NjaGVtYS50eXBlIGFzIHN0cmluZ11cbiAgICAgICAgOiBtYXBwaW5ncy5kZWZhdWx0O1xuICByZXR1cm4gbWFwcGVkKCk7XG59O1xuXG5leHBvcnQgY29uc3QgZmluZFByb3BlcnR5ID0gKHByb3BlcnRpZXM6IElOb2RlUHJvcGVydHlbXSwgZnVsbEtleTogc3RyaW5nKSA9PiB7XG4gIGZvciAoY29uc3QgcCBvZiBwcm9wZXJ0aWVzKSB7XG4gICAgaWYgKHAuZnVsbEtleSA9PT0gZnVsbEtleSkge1xuICAgICAgcmV0dXJuIHA7XG4gICAgfVxuICAgIGNvbnN0IGNoaWxkUCA9IGZpbmRQcm9wZXJ0eShwLnByb3BlcnRpZXMsIGZ1bGxLZXkpO1xuICAgIGlmIChjaGlsZFApIHtcbiAgICAgIHJldHVybiBjaGlsZFA7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IHBhcmVudFByb3BlcnR5ID0gKHByb3BlcnRpZXM6IElOb2RlUHJvcGVydHlbXSwgcHJvcGVydHk6IElOb2RlUHJvcGVydHkpID0+IHtcbiAgY29uc3QgYWxsS2V5cyA9IHByb3BlcnR5LmZ1bGxLZXkuc3BsaXQoJy4nKTtcbiAgWy4uLm5ldyBBcnJheShwcm9wZXJ0eS5zdWdnZXN0aW9ucz8ucGFyZW50TGV2ZWwgfHwgMCldLm1hcCgoKSA9PiBhbGxLZXlzLnBvcCgpKTtcbiAgY29uc3QgcGFyZW50S2V5cyA9IGZ1bGxLZXlQYXJ0cyhhbGxLZXlzLmpvaW4oJy4nKSk7XG4gIHBhcmVudEtleXMucG9wKCk7XG4gIGNvbnN0IHBhcmVudCA9IHBhcmVudEtleXMucmVkdWNlKChwcmV2LCBjdXJyLCBjdXJySW5kZXgpOiBhbnkgPT4ge1xuICAgIGNvbnN0IHByb3AgPSBwcmV2LmZpbmQodiA9PiB2LmtleSA9PT0gY3Vycik7XG4gICAgcmV0dXJuIGN1cnJJbmRleCA9PT0gcGFyZW50S2V5cy5sZW5ndGggLSAxID8gcHJvcCB8fCAoe30gYXMgSU5vZGVQcm9wZXJ0eSkgOiBwcm9wIS5wcm9wZXJ0aWVzIHx8IFtdO1xuICB9LCBwcm9wZXJ0aWVzKSBhcyBhbnkgYXMgSU5vZGVQcm9wZXJ0eTtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkocGFyZW50KSA/IHByb3BlcnR5IDogcGFyZW50O1xufTtcblxuZXhwb3J0IGNvbnN0IG5lc3RlZFByb3BlcnR5ID0gKHsgcHJvcGVydGllcyB9OiBJTm9kZVByb3BlcnR5LCBuZXN0ZWRLZXk6IHN0cmluZykgPT5cbiAgcHJvcGVydGllcy5maW5kKCh7IGtleSB9KSA9PiBrZXkgPT09IG5lc3RlZEtleSk7XG5cbmV4cG9ydCBjb25zdCBzaWJsaW5nUHJvcGVydHkgPSAocHJvcGVydGllczogSU5vZGVQcm9wZXJ0eVtdLCBwcm9wZXJ0eTogSU5vZGVQcm9wZXJ0eSwgc2libGluZ0tleTogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IHBhcmVudCA9IHBhcmVudFByb3BlcnR5KHByb3BlcnRpZXMsIHByb3BlcnR5KTtcbiAgY29uc3QgcGFyZW50UHJvcGVydGllcyA9IHBhcmVudCA9PT0gcHJvcGVydHkgPyBwcm9wZXJ0aWVzIDogcGFyZW50LnByb3BlcnRpZXM7XG4gIHJldHVybiBwYXJlbnRQcm9wZXJ0aWVzLmZpbmQocHJvcCA9PiBwcm9wLmtleSA9PT0gc2libGluZ0tleSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ3JvdXBDaGFuZ2VkID0gKHByb3BlcnRpZXM6IElOb2RlUHJvcGVydHlbXSwga2V5OiBzdHJpbmcsIHZhbHVlPzogYW55KSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGFyZW50S2V5cyA9IGZ1bGxLZXlQYXJ0cyhrZXkpO1xuICAgIHBhcmVudEtleXMucmVkdWNlKChwcmV2LCBjdXJyLCBjdXJySW5kZXgpID0+IHtcbiAgICAgIGlmIChjdXJySW5kZXggPT09IHBhcmVudEtleXMubGVuZ3RoIC0gMSAmJiB2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gcHJldi5zcGxpY2UoXG4gICAgICAgICAgcHJldi5maW5kSW5kZXgodiA9PiB2LmtleSA9PT0gY3VyciksXG4gICAgICAgICAgMVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcHJvcCA9IHByZXYuZmluZCh2ID0+IHYua2V5ID09PSBjdXJyKSE7XG4gICAgICAgIHByb3AuY2hhbmdlZCA9IHRydWU7XG4gICAgICAgIHJldHVybiBwcm9wLnByb3BlcnRpZXM7XG4gICAgICB9XG4gICAgfSwgcHJvcGVydGllcyk7XG4gIH0gY2F0Y2ggKF9lcnIpIHtcbiAgICAvLyBpZ25vcmUgZXJyb3JcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHJlZnJlc2hQcm9wZXJ0eUtleXMgPSAocHJvcGVydHk6IElOb2RlUHJvcGVydHkpID0+XG4gIHByb3BlcnR5LnByb3BlcnRpZXMubWFwKChwcm9wLCBpKSA9PiB7XG4gICAgcHJvcC5mdWxsS2V5ID0gYCR7cHJvcGVydHkuZnVsbEtleX0ke3Byb3BlcnR5LmlzQXJyYXkgPyBgWyR7aX1dYCA6IGAuJHtwcm9wLmtleX1gfWA7XG4gICAgcHJvcC5rZXkgPSBwcm9wZXJ0eS5pc0FycmF5ID8gYCR7aX1gIDogcHJvcC5rZXk7XG4gICAgcmV0dXJuIHJlZnJlc2hQcm9wZXJ0eUtleXMocHJvcCk7XG4gIH0pO1xuXG5leHBvcnQgY29uc3QgY2FsY3VsYXRlQ3ljbGVEdXJhdGlvbkVuYWJsZWQgPSAocHJvcGVydGllczogSU5vZGVQcm9wZXJ0eVtdLCBwcm9wZXJ0eTogSU5vZGVQcm9wZXJ0eSkgPT4ge1xuICBjb25zdCBzdGFydERhdGUgPSBzaWJsaW5nUHJvcGVydHkocHJvcGVydGllcywgcHJvcGVydHksICdzdGFydERhdGUnKTtcbiAgY29uc3QgZW5kRGF0ZSA9IHNpYmxpbmdQcm9wZXJ0eShwcm9wZXJ0aWVzLCBwcm9wZXJ0eSwgJ2VuZERhdGUnKTtcbiAgcmV0dXJuICEhc3RhcnREYXRlPy52YWx1ZSAmJiAhIWVuZERhdGU/LnZhbHVlO1xufTtcblxuZXhwb3J0IGNvbnN0IGNhbGN1bGF0ZUN5Y2xlRHVyYXRpb24gPSAocHJvcGVydGllczogSU5vZGVQcm9wZXJ0eVtdLCBwcm9wZXJ0eTogSU5vZGVQcm9wZXJ0eSkgPT4ge1xuICBjb25zdCBzdGFydERhdGUgPSBzaWJsaW5nUHJvcGVydHkocHJvcGVydGllcywgcHJvcGVydHksICdzdGFydERhdGUnKSE7XG4gIGNvbnN0IGVuZERhdGUgPSBzaWJsaW5nUHJvcGVydHkocHJvcGVydGllcywgcHJvcGVydHksICdlbmREYXRlJykhO1xuICByZXR1cm4gZGlmZkluRGF5cyhzdGFydERhdGUudmFsdWUsIGVuZERhdGUudmFsdWUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNhbGN1bGF0ZUN5Y2xlU3RhcnREYXRlRW5hYmxlZCA9IChwcm9wZXJ0aWVzOiBJTm9kZVByb3BlcnR5W10sIHByb3BlcnR5OiBJTm9kZVByb3BlcnR5KSA9PiB7XG4gIGNvbnN0IGN5Y2xlRHVyYXRpb24gPSBzaWJsaW5nUHJvcGVydHkocHJvcGVydGllcywgcHJvcGVydHksICdjeWNsZUR1cmF0aW9uJyk7XG4gIGNvbnN0IGVuZERhdGUgPSBzaWJsaW5nUHJvcGVydHkocHJvcGVydGllcywgcHJvcGVydHksICdlbmREYXRlJyk7XG4gIHJldHVybiAhIWN5Y2xlRHVyYXRpb24/LnZhbHVlICYmICEhZW5kRGF0ZT8udmFsdWU7XG59O1xuXG5leHBvcnQgY29uc3QgY2FsY3VsYXRlQ3ljbGVTdGFydERhdGUgPSAocHJvcGVydGllczogSU5vZGVQcm9wZXJ0eVtdLCBwcm9wZXJ0eTogSU5vZGVQcm9wZXJ0eSkgPT4ge1xuICBjb25zdCBjeWNsZUR1cmF0aW9uID0gc2libGluZ1Byb3BlcnR5KHByb3BlcnRpZXMsIHByb3BlcnR5LCAnY3ljbGVEdXJhdGlvbicpITtcbiAgY29uc3QgZW5kRGF0ZSA9IHNpYmxpbmdQcm9wZXJ0eShwcm9wZXJ0aWVzLCBwcm9wZXJ0eSwgJ2VuZERhdGUnKSE7XG4gIHJldHVybiBtb21lbnQoZW5kRGF0ZS52YWx1ZSkubG9jYWxlKCdlbi1nYicpLnN1YnRyYWN0KGN5Y2xlRHVyYXRpb24udmFsdWUsICdkYXlzJykuZm9ybWF0KCdZWVlZLU1NLUREJyk7XG59O1xuIl19