@hestia-earth/ui-components 0.9.6 → 0.9.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/common/apply-pure.pipe.d.ts +12 -0
- package/common/common.light.module.d.ts +16 -15
- package/common/index.d.ts +1 -0
- package/common/maps-utils.d.ts +2 -2
- package/common/popover/popover.component.d.ts +1 -1
- package/common/popover-confirm/popover-confirm.component.d.ts +1 -0
- package/engine/engine.service.d.ts +6 -2
- package/esm2020/bibliographies/bibliographies-search-confirm/bibliographies-search-confirm.component.mjs +3 -3
- package/esm2020/common/apply-pure.pipe.mjs +23 -0
- package/esm2020/common/common.light.module.mjs +5 -1
- package/esm2020/common/data-table/data-table.component.mjs +2 -2
- package/esm2020/common/index.mjs +2 -1
- package/esm2020/common/maps-drawing-confirm/maps-drawing-confirm.component.mjs +3 -3
- package/esm2020/common/maps-utils.mjs +3 -3
- package/esm2020/common/popover/popover.component.mjs +3 -3
- package/esm2020/common/popover-confirm/popover-confirm.component.mjs +4 -1
- package/esm2020/cycles/cycles-activity/cycles-activity.component.mjs +3 -3
- package/esm2020/cycles/cycles-completeness/cycles-completeness.component.mjs +3 -3
- package/esm2020/cycles/cycles-emissions/cycles-emissions.component.mjs +3 -3
- package/esm2020/cycles/cycles-emissions-chart/cycles-emissions-chart.component.mjs +3 -3
- package/esm2020/cycles/cycles-practices/cycles-practices.component.mjs +3 -3
- package/esm2020/engine/engine-orchestrator-edit/engine-orchestrator-edit.component.mjs +3 -3
- package/esm2020/engine/engine.service.mjs +22 -8
- package/esm2020/files/files-form/files-form.component.mjs +9 -8
- package/esm2020/fontawesome/fontawesome.module.mjs +3 -3
- package/esm2020/impact-assessments/impact-assessments-graph/impact-assessments-graph.component.mjs +3 -3
- package/esm2020/impact-assessments/impact-assessments-indicator-breakdown-chart/impact-assessments-indicator-breakdown-chart.component.mjs +3 -3
- package/esm2020/impact-assessments/impact-assessments-indicators-chart/impact-assessments-indicators-chart.component.mjs +3 -3
- package/esm2020/impact-assessments/impact-assessments-products/impact-assessments-products.component.mjs +3 -3
- package/esm2020/node/node-csv-export-confirm/node-csv-export-confirm.component.mjs +6 -4
- package/esm2020/node/node-csv-select-headers/node-csv-select-headers.component.mjs +3 -3
- package/esm2020/node/node-logs-file/node-logs-file.component.mjs +3 -3
- package/esm2020/node/node-logs-models/node-logs-models.component.mjs +3 -3
- package/esm2020/node/node-missing-lookup-factors/node-missing-lookup-factors.component.mjs +3 -3
- package/esm2020/node/node.service.mjs +1 -10
- package/esm2020/sites/sites-measurements/sites-measurements.component.mjs +3 -3
- package/fesm2015/hestia-earth-ui-components.mjs +138 -106
- package/fesm2015/hestia-earth-ui-components.mjs.map +1 -1
- package/fesm2020/hestia-earth-ui-components.mjs +137 -105
- package/fesm2020/hestia-earth-ui-components.mjs.map +1 -1
- package/files/files-form/files-form.component.d.ts +3 -3
- package/node/node.service.d.ts +0 -12
- package/package.json +2 -2
- package/styles.scss +106 -17
package/esm2020/impact-assessments/impact-assessments-graph/impact-assessments-graph.component.mjs
CHANGED
|
@@ -830,10 +830,10 @@ export class ImpactAssessmentsGraphComponent {
|
|
|
830
830
|
}
|
|
831
831
|
}
|
|
832
832
|
ImpactAssessmentsGraphComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: ImpactAssessmentsGraphComponent, deps: [{ token: i0.NgZone }, { token: i1.HeSearchService }, { token: i2.HeNodeService }, { token: i3.HeEngineService }], target: i0.ɵɵFactoryTarget.Component });
|
|
833
|
-
ImpactAssessmentsGraphComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.8", type: ImpactAssessmentsGraphComponent, selector: "he-impact-assessments-graph", inputs: { impactAssessments: "impactAssessments", dataState: "dataState" }, viewQueries: [{ propertyName: "chartRef", first: true, predicate: ["chart"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"!loading; else loader\">\n <ng-container *ngIf=\"isRecalculated; else showSwitchRecalculated\">\n <div class=\"field has-addons pt-2 px-3 mb-0\" *ngIf=\"filteredImpactAssessments.length > 1\">\n <div class=\"control\">\n <span class=\"button is-small is-static\">Select an Impact Assessment</span>\n </div>\n <div class=\"control is-expanded\">\n <div class=\"select is-small is-fullwidth\">\n <select [(ngModel)]=\"selectedImpactAssessmentId\" (change)=\"reloadChart()\" [disabled]=\"loading\">\n <option *ngFor=\"let value of filteredImpactAssessments\" [value]=\"value['@id']\">\n {{ value.name || value['@id'] }}\n </option>\n </select>\n </div>\n </div>\n </div>\n <div *ngIf=\"!noData\" class=\"field has-addons py-2 px-3\">\n <div class=\"control\">\n <span class=\"button is-small is-static\">Select a model</span>\n </div>\n <div class=\"control is-expanded\">\n <div class=\"select is-small is-fullwidth\">\n <select [(ngModel)]=\"selectedModelId\" (change)=\"initChart()\" [disabled]=\"loading\">\n <option *ngFor=\"let model of models\" [value]=\"model['@id']\">{{ model.name || model['@id'] }}</option>\n </select>\n </div>\n </div>\n </div>\n\n <ng-container *ngIf=\"!noData && !showWarnings\">\n <div class=\"columns is-centered py-2 is-size-7 is-mobile is-multiline\">\n <ng-container *ngFor=\"let legendItem of legend\">\n <div class=\"column is-narrow py-0 is-flex-mobile is-flex-direction-column is-align-items-center is-legend-item\">\n <span\n class=\"key-colour is-inline-block-tablet is-align-middle\"\n [style.backgroundColor]=\"nodeColours[legendItem.type]\"\n ></span>\n <strong class=\"has-text-black is-align-middle key-label is-pl-tablet-2\">\n <span class=\"is-hidden-desktop\">{{legendItem.mobileText}}</span>\n <span class=\"is-hidden-touch\">{{legendItem.text}}</span>\n </strong>\n </div>\n </ng-container>\n </div>\n </ng-container>\n\n <p *ngIf=\"error\" class=\"has-text-danger py-3\">\n <ng-container [ngSwitch]=\"error\">\n <p *ngSwitchCase=\"'not-found'\">Impact Assessment not found</p>\n <div *ngSwitchDefault>\n <span>An unexpected error occurred:</span>\n <p class=\"mt-1\">{{ error }}</p>\n </div>\n </ng-container>\n </p>\n\n <div *ngIf=\"showWarnings\" class=\"has-text-warning py-3 has-text-centered\">\n <p class=\"is-mb-2\" *ngFor=\"let warning of warnings\">\n <fa-icon class=\"pr-2\" icon=\"exclamation-triangle\"></fa-icon>\n <ng-container [ngSwitch]=\"warning\">\n <span *ngSwitchCase=\"'missing-terms'\">Calculations are not up to date. Some terms may not display correctly.</span>\n </ng-container>\n </p>\n <p class=\"is-underlined is-size-7\"><a (click)=\"showWarnings = false\">View chart anyway.</a></p>\n </div>\n\n <div *ngIf=\"noData\" class=\"py-3\">\n <p class=\"has-text-centered\">No chart available.</p>\n </div>\n </ng-container>\n</ng-container>\n\n<div [class.is-hidden]=\"!isRecalculated || loading || error || noData || showWarnings\" class=\"chart-container is-relative w-100\">\n <svg class=\"w-100 h-100\" #chart></svg>\n</div>\n\n<ng-template #loader>\n <div class=\"loading-container has-text-center my-5 py-5\">\n <fa-icon icon=\"spinner\" [pulse]=\"true\" size=\"lg\"></fa-icon>\n </div>\n</ng-template>\n\n<ng-template #showSwitchRecalculated>\n <p class=\"has-text-centered py-3\">No chart available. Switch to <code>recalculated</code> version.</p>\n</ng-template>\n", styles: [".is-marginless{margin:0!important}.is-paddingless{padding:0!important}.m-0{margin:0!important}.mt-0{margin-top:0!important}.mr-0{margin-right:0!important}.mb-0{margin-bottom:0!important}.ml-0{margin-left:0!important}.mx-0{margin-left:0!important;margin-right:0!important}.my-0{margin-top:0!important;margin-bottom:0!important}.m-1{margin:.25rem!important}.mt-1{margin-top:.25rem!important}.mr-1{margin-right:.25rem!important}.mb-1{margin-bottom:.25rem!important}.ml-1{margin-left:.25rem!important}.mx-1{margin-left:.25rem!important;margin-right:.25rem!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.m-2{margin:.5rem!important}.mt-2{margin-top:.5rem!important}.mr-2{margin-right:.5rem!important}.mb-2{margin-bottom:.5rem!important}.ml-2{margin-left:.5rem!important}.mx-2{margin-left:.5rem!important;margin-right:.5rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.m-3{margin:.75rem!important}.mt-3{margin-top:.75rem!important}.mr-3{margin-right:.75rem!important}.mb-3{margin-bottom:.75rem!important}.ml-3{margin-left:.75rem!important}.mx-3{margin-left:.75rem!important;margin-right:.75rem!important}.my-3{margin-top:.75rem!important;margin-bottom:.75rem!important}.m-4{margin:1rem!important}.mt-4{margin-top:1rem!important}.mr-4{margin-right:1rem!important}.mb-4{margin-bottom:1rem!important}.ml-4{margin-left:1rem!important}.mx-4{margin-left:1rem!important;margin-right:1rem!important}.my-4{margin-top:1rem!important;margin-bottom:1rem!important}.m-5{margin:1.5rem!important}.mt-5{margin-top:1.5rem!important}.mr-5{margin-right:1.5rem!important}.mb-5{margin-bottom:1.5rem!important}.ml-5{margin-left:1.5rem!important}.mx-5{margin-left:1.5rem!important;margin-right:1.5rem!important}.my-5{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.m-6{margin:3rem!important}.mt-6{margin-top:3rem!important}.mr-6{margin-right:3rem!important}.mb-6{margin-bottom:3rem!important}.ml-6{margin-left:3rem!important}.mx-6{margin-left:3rem!important;margin-right:3rem!important}.my-6{margin-top:3rem!important;margin-bottom:3rem!important}.m-auto{margin:auto!important}.mt-auto{margin-top:auto!important}.mr-auto{margin-right:auto!important}.mb-auto{margin-bottom:auto!important}.ml-auto{margin-left:auto!important}.mx-auto{margin-left:auto!important;margin-right:auto!important}.my-auto{margin-top:auto!important;margin-bottom:auto!important}.p-0{padding:0!important}.pt-0{padding-top:0!important}.pr-0{padding-right:0!important}.pb-0{padding-bottom:0!important}.pl-0{padding-left:0!important}.px-0{padding-left:0!important;padding-right:0!important}.py-0{padding-top:0!important;padding-bottom:0!important}.p-1{padding:.25rem!important}.pt-1{padding-top:.25rem!important}.pr-1{padding-right:.25rem!important}.pb-1{padding-bottom:.25rem!important}.pl-1{padding-left:.25rem!important}.px-1{padding-left:.25rem!important;padding-right:.25rem!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.p-2{padding:.5rem!important}.pt-2{padding-top:.5rem!important}.pr-2{padding-right:.5rem!important}.pb-2{padding-bottom:.5rem!important}.pl-2{padding-left:.5rem!important}.px-2{padding-left:.5rem!important;padding-right:.5rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.p-3{padding:.75rem!important}.pt-3{padding-top:.75rem!important}.pr-3{padding-right:.75rem!important}.pb-3{padding-bottom:.75rem!important}.pl-3{padding-left:.75rem!important}.px-3{padding-left:.75rem!important;padding-right:.75rem!important}.py-3{padding-top:.75rem!important;padding-bottom:.75rem!important}.p-4{padding:1rem!important}.pt-4{padding-top:1rem!important}.pr-4{padding-right:1rem!important}.pb-4{padding-bottom:1rem!important}.pl-4{padding-left:1rem!important}.px-4{padding-left:1rem!important;padding-right:1rem!important}.py-4{padding-top:1rem!important;padding-bottom:1rem!important}.p-5{padding:1.5rem!important}.pt-5{padding-top:1.5rem!important}.pr-5{padding-right:1.5rem!important}.pb-5{padding-bottom:1.5rem!important}.pl-5{padding-left:1.5rem!important}.px-5{padding-left:1.5rem!important;padding-right:1.5rem!important}.py-5{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.p-6{padding:3rem!important}.pt-6{padding-top:3rem!important}.pr-6{padding-right:3rem!important}.pb-6{padding-bottom:3rem!important}.pl-6{padding-left:3rem!important}.px-6{padding-left:3rem!important;padding-right:3rem!important}.py-6{padding-top:3rem!important;padding-bottom:3rem!important}.p-auto{padding:auto!important}.pt-auto{padding-top:auto!important}.pr-auto{padding-right:auto!important}.pb-auto{padding-bottom:auto!important}.pl-auto{padding-left:auto!important}.px-auto{padding-left:auto!important;padding-right:auto!important}.py-auto{padding-top:auto!important;padding-bottom:auto!important}.key-colour{border-radius:2px;box-shadow:0 2px 3px #0000001a,inset 0 0 0 1px #0000001a;height:1.5em;width:1.5em;opacity:.7}@media screen and (max-width: 768px){.key-label{font-size:.675rem}}svg{pointer-events:none}@media screen and (min-width: 1216px){.is-legend-item{min-width:130px}}@media screen and (min-width: 1408px){.is-legend-item{min-width:200px}}.loading-container{min-height:200px}:host ::ng-deep .node-box{rx:10px;ry:10px;fill-opacity:0;stroke-opacity:.5;pointer-events:auto}:host ::ng-deep .node-open{stroke-width:3}:host ::ng-deep .node-openable{cursor:pointer;stroke-opacity:1;fill-opacity:.1}:host ::ng-deep .node-openable:hover{stroke-width:3}:host ::ng-deep .group-button{fill:#fff;cursor:pointer;pointer-events:auto;stroke-dasharray:2,5;stroke:#999;stroke-width:2}:host ::ng-deep .group-button:hover{fill:#000}:host ::ng-deep .group-button:hover+text{fill:#fff}:host ::ng-deep .group-button-text{text-anchor:middle;alignment-baseline:central}:host ::ng-deep .group-border,:host ::ng-deep .group-line{stroke-dasharray:2,5;stroke:#999;stroke-width:2;fill:none}:host ::ng-deep .group-label{font-weight:700;fill:#696969;text-anchor:start;alignment-baseline:central}:host ::ng-deep .node-label{font-weight:700;fill:#000;text-anchor:middle;alignment-baseline:central}:host ::ng-deep .node-label tspan{alignment-baseline:inherit}:host ::ng-deep .bar-label{font-weight:700;fill:#696969;alignment-baseline:central}:host ::ng-deep .sibling-mask{fill:#fafafa;fill-opacity:.8;stroke-opacity:.9;stroke:#fafafa;rx:10px;ry:10px;stroke-width:3;pointer-events:none}:host ::ng-deep .mask-openable{pointer-events:all}:host ::ng-deep .mask-openable:hover{fill:none;stroke:none}:host ::ng-deep .bar-background{fill:#d3d3d3;fill-opacity:.5}:host ::ng-deep .link-path{fill:none;stroke:#999}:host ::ng-deep .bar-foreground{fill-opacity:.5}:host ::ng-deep .tip-background{fill:#000}:host ::ng-deep .tip-text{font-weight:400;alignment-baseline:central;fill:#fff}:host ::ng-deep .tip-text *{font-weight:inherit;alignment-baseline:inherit}:host ::ng-deep .tip-text-key{font-weight:700}:host ::ng-deep .tip-anchor{text-decoration:underline;color:#fff;cursor:pointer;fill:#fff}:host ::ng-deep .tip-anchor:hover{text-decoration:underline}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i4.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i4.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }] });
|
|
833
|
+
ImpactAssessmentsGraphComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.8", type: ImpactAssessmentsGraphComponent, selector: "he-impact-assessments-graph", inputs: { impactAssessments: "impactAssessments", dataState: "dataState" }, viewQueries: [{ propertyName: "chartRef", first: true, predicate: ["chart"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"!loading; else loader\">\n <ng-container *ngIf=\"isRecalculated; else showSwitchRecalculated\">\n <div class=\"field has-addons pt-2 px-3 mb-0\" *ngIf=\"filteredImpactAssessments.length > 1\">\n <div class=\"control\">\n <span class=\"button is-small is-static is-secondary\">Select an Impact Assessment</span>\n </div>\n <div class=\"control is-expanded\">\n <div class=\"select is-small is-fullwidth is-secondary\">\n <select [(ngModel)]=\"selectedImpactAssessmentId\" (change)=\"reloadChart()\" [disabled]=\"loading\">\n <option *ngFor=\"let value of filteredImpactAssessments\" [value]=\"value['@id']\">\n {{ value.name || value['@id'] }}\n </option>\n </select>\n </div>\n </div>\n </div>\n <div *ngIf=\"!noData\" class=\"field has-addons py-2 px-3\">\n <div class=\"control\">\n <span class=\"button is-small is-static is-secondary\">Select a model</span>\n </div>\n <div class=\"control is-expanded\">\n <div class=\"select is-small is-fullwidth is-secondary\">\n <select [(ngModel)]=\"selectedModelId\" (change)=\"initChart()\" [disabled]=\"loading\">\n <option *ngFor=\"let model of models\" [value]=\"model['@id']\">{{ model.name || model['@id'] }}</option>\n </select>\n </div>\n </div>\n </div>\n\n <ng-container *ngIf=\"!noData && !showWarnings\">\n <div class=\"columns is-centered py-2 is-size-7 is-mobile is-multiline\">\n <ng-container *ngFor=\"let legendItem of legend\">\n <div class=\"column is-narrow py-0 is-flex-mobile is-flex-direction-column is-align-items-center is-legend-item\">\n <span\n class=\"key-colour is-inline-block-tablet is-align-middle\"\n [style.backgroundColor]=\"nodeColours[legendItem.type]\"\n ></span>\n <strong class=\"has-text-black is-align-middle key-label is-pl-tablet-2\">\n <span class=\"is-hidden-desktop\">{{legendItem.mobileText}}</span>\n <span class=\"is-hidden-touch\">{{legendItem.text}}</span>\n </strong>\n </div>\n </ng-container>\n </div>\n </ng-container>\n\n <p *ngIf=\"error\" class=\"has-text-danger py-3\">\n <ng-container [ngSwitch]=\"error\">\n <p *ngSwitchCase=\"'not-found'\">Impact Assessment not found</p>\n <div *ngSwitchDefault>\n <span>An unexpected error occurred:</span>\n <p class=\"mt-1\">{{ error }}</p>\n </div>\n </ng-container>\n </p>\n\n <div *ngIf=\"showWarnings\" class=\"has-text-warning py-3 has-text-centered\">\n <p class=\"is-mb-2\" *ngFor=\"let warning of warnings\">\n <fa-icon class=\"pr-2\" icon=\"exclamation-triangle\"></fa-icon>\n <ng-container [ngSwitch]=\"warning\">\n <span *ngSwitchCase=\"'missing-terms'\">Calculations are not up to date. Some terms may not display correctly.</span>\n </ng-container>\n </p>\n <p class=\"is-underlined is-size-7\"><a (click)=\"showWarnings = false\">View chart anyway.</a></p>\n </div>\n\n <div *ngIf=\"noData\" class=\"py-3\">\n <p class=\"has-text-centered\">No chart available.</p>\n </div>\n </ng-container>\n</ng-container>\n\n<div [class.is-hidden]=\"!isRecalculated || loading || error || noData || showWarnings\" class=\"chart-container is-relative w-100\">\n <svg class=\"w-100 h-100\" #chart></svg>\n</div>\n\n<ng-template #loader>\n <div class=\"loading-container has-text-center my-5 py-5\">\n <fa-icon icon=\"spinner\" [pulse]=\"true\" size=\"lg\"></fa-icon>\n </div>\n</ng-template>\n\n<ng-template #showSwitchRecalculated>\n <p class=\"has-text-centered py-3\">No chart available. Switch to <code>recalculated</code> version.</p>\n</ng-template>\n", styles: [".is-marginless{margin:0!important}.is-paddingless{padding:0!important}.m-0{margin:0!important}.mt-0{margin-top:0!important}.mr-0{margin-right:0!important}.mb-0{margin-bottom:0!important}.ml-0{margin-left:0!important}.mx-0{margin-left:0!important;margin-right:0!important}.my-0{margin-top:0!important;margin-bottom:0!important}.m-1{margin:.25rem!important}.mt-1{margin-top:.25rem!important}.mr-1{margin-right:.25rem!important}.mb-1{margin-bottom:.25rem!important}.ml-1{margin-left:.25rem!important}.mx-1{margin-left:.25rem!important;margin-right:.25rem!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.m-2{margin:.5rem!important}.mt-2{margin-top:.5rem!important}.mr-2{margin-right:.5rem!important}.mb-2{margin-bottom:.5rem!important}.ml-2{margin-left:.5rem!important}.mx-2{margin-left:.5rem!important;margin-right:.5rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.m-3{margin:.75rem!important}.mt-3{margin-top:.75rem!important}.mr-3{margin-right:.75rem!important}.mb-3{margin-bottom:.75rem!important}.ml-3{margin-left:.75rem!important}.mx-3{margin-left:.75rem!important;margin-right:.75rem!important}.my-3{margin-top:.75rem!important;margin-bottom:.75rem!important}.m-4{margin:1rem!important}.mt-4{margin-top:1rem!important}.mr-4{margin-right:1rem!important}.mb-4{margin-bottom:1rem!important}.ml-4{margin-left:1rem!important}.mx-4{margin-left:1rem!important;margin-right:1rem!important}.my-4{margin-top:1rem!important;margin-bottom:1rem!important}.m-5{margin:1.5rem!important}.mt-5{margin-top:1.5rem!important}.mr-5{margin-right:1.5rem!important}.mb-5{margin-bottom:1.5rem!important}.ml-5{margin-left:1.5rem!important}.mx-5{margin-left:1.5rem!important;margin-right:1.5rem!important}.my-5{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.m-6{margin:3rem!important}.mt-6{margin-top:3rem!important}.mr-6{margin-right:3rem!important}.mb-6{margin-bottom:3rem!important}.ml-6{margin-left:3rem!important}.mx-6{margin-left:3rem!important;margin-right:3rem!important}.my-6{margin-top:3rem!important;margin-bottom:3rem!important}.m-auto{margin:auto!important}.mt-auto{margin-top:auto!important}.mr-auto{margin-right:auto!important}.mb-auto{margin-bottom:auto!important}.ml-auto{margin-left:auto!important}.mx-auto{margin-left:auto!important;margin-right:auto!important}.my-auto{margin-top:auto!important;margin-bottom:auto!important}.p-0{padding:0!important}.pt-0{padding-top:0!important}.pr-0{padding-right:0!important}.pb-0{padding-bottom:0!important}.pl-0{padding-left:0!important}.px-0{padding-left:0!important;padding-right:0!important}.py-0{padding-top:0!important;padding-bottom:0!important}.p-1{padding:.25rem!important}.pt-1{padding-top:.25rem!important}.pr-1{padding-right:.25rem!important}.pb-1{padding-bottom:.25rem!important}.pl-1{padding-left:.25rem!important}.px-1{padding-left:.25rem!important;padding-right:.25rem!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.p-2{padding:.5rem!important}.pt-2{padding-top:.5rem!important}.pr-2{padding-right:.5rem!important}.pb-2{padding-bottom:.5rem!important}.pl-2{padding-left:.5rem!important}.px-2{padding-left:.5rem!important;padding-right:.5rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.p-3{padding:.75rem!important}.pt-3{padding-top:.75rem!important}.pr-3{padding-right:.75rem!important}.pb-3{padding-bottom:.75rem!important}.pl-3{padding-left:.75rem!important}.px-3{padding-left:.75rem!important;padding-right:.75rem!important}.py-3{padding-top:.75rem!important;padding-bottom:.75rem!important}.p-4{padding:1rem!important}.pt-4{padding-top:1rem!important}.pr-4{padding-right:1rem!important}.pb-4{padding-bottom:1rem!important}.pl-4{padding-left:1rem!important}.px-4{padding-left:1rem!important;padding-right:1rem!important}.py-4{padding-top:1rem!important;padding-bottom:1rem!important}.p-5{padding:1.5rem!important}.pt-5{padding-top:1.5rem!important}.pr-5{padding-right:1.5rem!important}.pb-5{padding-bottom:1.5rem!important}.pl-5{padding-left:1.5rem!important}.px-5{padding-left:1.5rem!important;padding-right:1.5rem!important}.py-5{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.p-6{padding:3rem!important}.pt-6{padding-top:3rem!important}.pr-6{padding-right:3rem!important}.pb-6{padding-bottom:3rem!important}.pl-6{padding-left:3rem!important}.px-6{padding-left:3rem!important;padding-right:3rem!important}.py-6{padding-top:3rem!important;padding-bottom:3rem!important}.p-auto{padding:auto!important}.pt-auto{padding-top:auto!important}.pr-auto{padding-right:auto!important}.pb-auto{padding-bottom:auto!important}.pl-auto{padding-left:auto!important}.px-auto{padding-left:auto!important;padding-right:auto!important}.py-auto{padding-top:auto!important;padding-bottom:auto!important}.key-colour{border-radius:2px;box-shadow:0 2px 3px #0000001a,inset 0 0 0 1px #0000001a;height:1.5em;width:1.5em;opacity:.7}@media screen and (max-width: 768px){.key-label{font-size:.675rem}}svg{pointer-events:none}@media screen and (min-width: 1216px){.is-legend-item{min-width:130px}}@media screen and (min-width: 1408px){.is-legend-item{min-width:200px}}.loading-container{min-height:200px}:host ::ng-deep .node-box{rx:10px;ry:10px;fill-opacity:0;stroke-opacity:.5;pointer-events:auto}:host ::ng-deep .node-open{stroke-width:3}:host ::ng-deep .node-openable{cursor:pointer;stroke-opacity:1;fill-opacity:.1}:host ::ng-deep .node-openable:hover{stroke-width:3}:host ::ng-deep .group-button{fill:#fff;cursor:pointer;pointer-events:auto;stroke-dasharray:2,5;stroke:#999;stroke-width:2}:host ::ng-deep .group-button:hover{fill:#000}:host ::ng-deep .group-button:hover+text{fill:#fff}:host ::ng-deep .group-button-text{text-anchor:middle;alignment-baseline:central}:host ::ng-deep .group-border,:host ::ng-deep .group-line{stroke-dasharray:2,5;stroke:#999;stroke-width:2;fill:none}:host ::ng-deep .group-label{font-weight:700;fill:#696969;text-anchor:start;alignment-baseline:central}:host ::ng-deep .node-label{font-weight:700;fill:#000;text-anchor:middle;alignment-baseline:central}:host ::ng-deep .node-label tspan{alignment-baseline:inherit}:host ::ng-deep .bar-label{font-weight:700;fill:#696969;alignment-baseline:central}:host ::ng-deep .sibling-mask{fill:#fafafa;fill-opacity:.8;stroke-opacity:.9;stroke:#fafafa;rx:10px;ry:10px;stroke-width:3;pointer-events:none}:host ::ng-deep .mask-openable{pointer-events:all}:host ::ng-deep .mask-openable:hover{fill:none;stroke:none}:host ::ng-deep .bar-background{fill:#d3d3d3;fill-opacity:.5}:host ::ng-deep .link-path{fill:none;stroke:#999}:host ::ng-deep .bar-foreground{fill-opacity:.5}:host ::ng-deep .tip-background{fill:#000}:host ::ng-deep .tip-text{font-weight:400;alignment-baseline:central;fill:#fff}:host ::ng-deep .tip-text *{font-weight:inherit;alignment-baseline:inherit}:host ::ng-deep .tip-text-key{font-weight:700}:host ::ng-deep .tip-anchor{text-decoration:underline;color:#fff;cursor:pointer;fill:#fff}:host ::ng-deep .tip-anchor:hover{text-decoration:underline}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i4.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i4.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }] });
|
|
834
834
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: ImpactAssessmentsGraphComponent, decorators: [{
|
|
835
835
|
type: Component,
|
|
836
|
-
args: [{ selector: 'he-impact-assessments-graph', template: "<ng-container *ngIf=\"!loading; else loader\">\n <ng-container *ngIf=\"isRecalculated; else showSwitchRecalculated\">\n <div class=\"field has-addons pt-2 px-3 mb-0\" *ngIf=\"filteredImpactAssessments.length > 1\">\n <div class=\"control\">\n <span class=\"button is-small is-static\">Select an Impact Assessment</span>\n </div>\n <div class=\"control is-expanded\">\n <div class=\"select is-small is-fullwidth\">\n <select [(ngModel)]=\"selectedImpactAssessmentId\" (change)=\"reloadChart()\" [disabled]=\"loading\">\n <option *ngFor=\"let value of filteredImpactAssessments\" [value]=\"value['@id']\">\n {{ value.name || value['@id'] }}\n </option>\n </select>\n </div>\n </div>\n </div>\n <div *ngIf=\"!noData\" class=\"field has-addons py-2 px-3\">\n <div class=\"control\">\n <span class=\"button is-small is-static\">Select a model</span>\n </div>\n <div class=\"control is-expanded\">\n <div class=\"select is-small is-fullwidth\">\n <select [(ngModel)]=\"selectedModelId\" (change)=\"initChart()\" [disabled]=\"loading\">\n <option *ngFor=\"let model of models\" [value]=\"model['@id']\">{{ model.name || model['@id'] }}</option>\n </select>\n </div>\n </div>\n </div>\n\n <ng-container *ngIf=\"!noData && !showWarnings\">\n <div class=\"columns is-centered py-2 is-size-7 is-mobile is-multiline\">\n <ng-container *ngFor=\"let legendItem of legend\">\n <div class=\"column is-narrow py-0 is-flex-mobile is-flex-direction-column is-align-items-center is-legend-item\">\n <span\n class=\"key-colour is-inline-block-tablet is-align-middle\"\n [style.backgroundColor]=\"nodeColours[legendItem.type]\"\n ></span>\n <strong class=\"has-text-black is-align-middle key-label is-pl-tablet-2\">\n <span class=\"is-hidden-desktop\">{{legendItem.mobileText}}</span>\n <span class=\"is-hidden-touch\">{{legendItem.text}}</span>\n </strong>\n </div>\n </ng-container>\n </div>\n </ng-container>\n\n <p *ngIf=\"error\" class=\"has-text-danger py-3\">\n <ng-container [ngSwitch]=\"error\">\n <p *ngSwitchCase=\"'not-found'\">Impact Assessment not found</p>\n <div *ngSwitchDefault>\n <span>An unexpected error occurred:</span>\n <p class=\"mt-1\">{{ error }}</p>\n </div>\n </ng-container>\n </p>\n\n <div *ngIf=\"showWarnings\" class=\"has-text-warning py-3 has-text-centered\">\n <p class=\"is-mb-2\" *ngFor=\"let warning of warnings\">\n <fa-icon class=\"pr-2\" icon=\"exclamation-triangle\"></fa-icon>\n <ng-container [ngSwitch]=\"warning\">\n <span *ngSwitchCase=\"'missing-terms'\">Calculations are not up to date. Some terms may not display correctly.</span>\n </ng-container>\n </p>\n <p class=\"is-underlined is-size-7\"><a (click)=\"showWarnings = false\">View chart anyway.</a></p>\n </div>\n\n <div *ngIf=\"noData\" class=\"py-3\">\n <p class=\"has-text-centered\">No chart available.</p>\n </div>\n </ng-container>\n</ng-container>\n\n<div [class.is-hidden]=\"!isRecalculated || loading || error || noData || showWarnings\" class=\"chart-container is-relative w-100\">\n <svg class=\"w-100 h-100\" #chart></svg>\n</div>\n\n<ng-template #loader>\n <div class=\"loading-container has-text-center my-5 py-5\">\n <fa-icon icon=\"spinner\" [pulse]=\"true\" size=\"lg\"></fa-icon>\n </div>\n</ng-template>\n\n<ng-template #showSwitchRecalculated>\n <p class=\"has-text-centered py-3\">No chart available. Switch to <code>recalculated</code> version.</p>\n</ng-template>\n", styles: [".is-marginless{margin:0!important}.is-paddingless{padding:0!important}.m-0{margin:0!important}.mt-0{margin-top:0!important}.mr-0{margin-right:0!important}.mb-0{margin-bottom:0!important}.ml-0{margin-left:0!important}.mx-0{margin-left:0!important;margin-right:0!important}.my-0{margin-top:0!important;margin-bottom:0!important}.m-1{margin:.25rem!important}.mt-1{margin-top:.25rem!important}.mr-1{margin-right:.25rem!important}.mb-1{margin-bottom:.25rem!important}.ml-1{margin-left:.25rem!important}.mx-1{margin-left:.25rem!important;margin-right:.25rem!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.m-2{margin:.5rem!important}.mt-2{margin-top:.5rem!important}.mr-2{margin-right:.5rem!important}.mb-2{margin-bottom:.5rem!important}.ml-2{margin-left:.5rem!important}.mx-2{margin-left:.5rem!important;margin-right:.5rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.m-3{margin:.75rem!important}.mt-3{margin-top:.75rem!important}.mr-3{margin-right:.75rem!important}.mb-3{margin-bottom:.75rem!important}.ml-3{margin-left:.75rem!important}.mx-3{margin-left:.75rem!important;margin-right:.75rem!important}.my-3{margin-top:.75rem!important;margin-bottom:.75rem!important}.m-4{margin:1rem!important}.mt-4{margin-top:1rem!important}.mr-4{margin-right:1rem!important}.mb-4{margin-bottom:1rem!important}.ml-4{margin-left:1rem!important}.mx-4{margin-left:1rem!important;margin-right:1rem!important}.my-4{margin-top:1rem!important;margin-bottom:1rem!important}.m-5{margin:1.5rem!important}.mt-5{margin-top:1.5rem!important}.mr-5{margin-right:1.5rem!important}.mb-5{margin-bottom:1.5rem!important}.ml-5{margin-left:1.5rem!important}.mx-5{margin-left:1.5rem!important;margin-right:1.5rem!important}.my-5{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.m-6{margin:3rem!important}.mt-6{margin-top:3rem!important}.mr-6{margin-right:3rem!important}.mb-6{margin-bottom:3rem!important}.ml-6{margin-left:3rem!important}.mx-6{margin-left:3rem!important;margin-right:3rem!important}.my-6{margin-top:3rem!important;margin-bottom:3rem!important}.m-auto{margin:auto!important}.mt-auto{margin-top:auto!important}.mr-auto{margin-right:auto!important}.mb-auto{margin-bottom:auto!important}.ml-auto{margin-left:auto!important}.mx-auto{margin-left:auto!important;margin-right:auto!important}.my-auto{margin-top:auto!important;margin-bottom:auto!important}.p-0{padding:0!important}.pt-0{padding-top:0!important}.pr-0{padding-right:0!important}.pb-0{padding-bottom:0!important}.pl-0{padding-left:0!important}.px-0{padding-left:0!important;padding-right:0!important}.py-0{padding-top:0!important;padding-bottom:0!important}.p-1{padding:.25rem!important}.pt-1{padding-top:.25rem!important}.pr-1{padding-right:.25rem!important}.pb-1{padding-bottom:.25rem!important}.pl-1{padding-left:.25rem!important}.px-1{padding-left:.25rem!important;padding-right:.25rem!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.p-2{padding:.5rem!important}.pt-2{padding-top:.5rem!important}.pr-2{padding-right:.5rem!important}.pb-2{padding-bottom:.5rem!important}.pl-2{padding-left:.5rem!important}.px-2{padding-left:.5rem!important;padding-right:.5rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.p-3{padding:.75rem!important}.pt-3{padding-top:.75rem!important}.pr-3{padding-right:.75rem!important}.pb-3{padding-bottom:.75rem!important}.pl-3{padding-left:.75rem!important}.px-3{padding-left:.75rem!important;padding-right:.75rem!important}.py-3{padding-top:.75rem!important;padding-bottom:.75rem!important}.p-4{padding:1rem!important}.pt-4{padding-top:1rem!important}.pr-4{padding-right:1rem!important}.pb-4{padding-bottom:1rem!important}.pl-4{padding-left:1rem!important}.px-4{padding-left:1rem!important;padding-right:1rem!important}.py-4{padding-top:1rem!important;padding-bottom:1rem!important}.p-5{padding:1.5rem!important}.pt-5{padding-top:1.5rem!important}.pr-5{padding-right:1.5rem!important}.pb-5{padding-bottom:1.5rem!important}.pl-5{padding-left:1.5rem!important}.px-5{padding-left:1.5rem!important;padding-right:1.5rem!important}.py-5{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.p-6{padding:3rem!important}.pt-6{padding-top:3rem!important}.pr-6{padding-right:3rem!important}.pb-6{padding-bottom:3rem!important}.pl-6{padding-left:3rem!important}.px-6{padding-left:3rem!important;padding-right:3rem!important}.py-6{padding-top:3rem!important;padding-bottom:3rem!important}.p-auto{padding:auto!important}.pt-auto{padding-top:auto!important}.pr-auto{padding-right:auto!important}.pb-auto{padding-bottom:auto!important}.pl-auto{padding-left:auto!important}.px-auto{padding-left:auto!important;padding-right:auto!important}.py-auto{padding-top:auto!important;padding-bottom:auto!important}.key-colour{border-radius:2px;box-shadow:0 2px 3px #0000001a,inset 0 0 0 1px #0000001a;height:1.5em;width:1.5em;opacity:.7}@media screen and (max-width: 768px){.key-label{font-size:.675rem}}svg{pointer-events:none}@media screen and (min-width: 1216px){.is-legend-item{min-width:130px}}@media screen and (min-width: 1408px){.is-legend-item{min-width:200px}}.loading-container{min-height:200px}:host ::ng-deep .node-box{rx:10px;ry:10px;fill-opacity:0;stroke-opacity:.5;pointer-events:auto}:host ::ng-deep .node-open{stroke-width:3}:host ::ng-deep .node-openable{cursor:pointer;stroke-opacity:1;fill-opacity:.1}:host ::ng-deep .node-openable:hover{stroke-width:3}:host ::ng-deep .group-button{fill:#fff;cursor:pointer;pointer-events:auto;stroke-dasharray:2,5;stroke:#999;stroke-width:2}:host ::ng-deep .group-button:hover{fill:#000}:host ::ng-deep .group-button:hover+text{fill:#fff}:host ::ng-deep .group-button-text{text-anchor:middle;alignment-baseline:central}:host ::ng-deep .group-border,:host ::ng-deep .group-line{stroke-dasharray:2,5;stroke:#999;stroke-width:2;fill:none}:host ::ng-deep .group-label{font-weight:700;fill:#696969;text-anchor:start;alignment-baseline:central}:host ::ng-deep .node-label{font-weight:700;fill:#000;text-anchor:middle;alignment-baseline:central}:host ::ng-deep .node-label tspan{alignment-baseline:inherit}:host ::ng-deep .bar-label{font-weight:700;fill:#696969;alignment-baseline:central}:host ::ng-deep .sibling-mask{fill:#fafafa;fill-opacity:.8;stroke-opacity:.9;stroke:#fafafa;rx:10px;ry:10px;stroke-width:3;pointer-events:none}:host ::ng-deep .mask-openable{pointer-events:all}:host ::ng-deep .mask-openable:hover{fill:none;stroke:none}:host ::ng-deep .bar-background{fill:#d3d3d3;fill-opacity:.5}:host ::ng-deep .link-path{fill:none;stroke:#999}:host ::ng-deep .bar-foreground{fill-opacity:.5}:host ::ng-deep .tip-background{fill:#000}:host ::ng-deep .tip-text{font-weight:400;alignment-baseline:central;fill:#fff}:host ::ng-deep .tip-text *{font-weight:inherit;alignment-baseline:inherit}:host ::ng-deep .tip-text-key{font-weight:700}:host ::ng-deep .tip-anchor{text-decoration:underline;color:#fff;cursor:pointer;fill:#fff}:host ::ng-deep .tip-anchor:hover{text-decoration:underline}\n"] }]
|
|
836
|
+
args: [{ selector: 'he-impact-assessments-graph', template: "<ng-container *ngIf=\"!loading; else loader\">\n <ng-container *ngIf=\"isRecalculated; else showSwitchRecalculated\">\n <div class=\"field has-addons pt-2 px-3 mb-0\" *ngIf=\"filteredImpactAssessments.length > 1\">\n <div class=\"control\">\n <span class=\"button is-small is-static is-secondary\">Select an Impact Assessment</span>\n </div>\n <div class=\"control is-expanded\">\n <div class=\"select is-small is-fullwidth is-secondary\">\n <select [(ngModel)]=\"selectedImpactAssessmentId\" (change)=\"reloadChart()\" [disabled]=\"loading\">\n <option *ngFor=\"let value of filteredImpactAssessments\" [value]=\"value['@id']\">\n {{ value.name || value['@id'] }}\n </option>\n </select>\n </div>\n </div>\n </div>\n <div *ngIf=\"!noData\" class=\"field has-addons py-2 px-3\">\n <div class=\"control\">\n <span class=\"button is-small is-static is-secondary\">Select a model</span>\n </div>\n <div class=\"control is-expanded\">\n <div class=\"select is-small is-fullwidth is-secondary\">\n <select [(ngModel)]=\"selectedModelId\" (change)=\"initChart()\" [disabled]=\"loading\">\n <option *ngFor=\"let model of models\" [value]=\"model['@id']\">{{ model.name || model['@id'] }}</option>\n </select>\n </div>\n </div>\n </div>\n\n <ng-container *ngIf=\"!noData && !showWarnings\">\n <div class=\"columns is-centered py-2 is-size-7 is-mobile is-multiline\">\n <ng-container *ngFor=\"let legendItem of legend\">\n <div class=\"column is-narrow py-0 is-flex-mobile is-flex-direction-column is-align-items-center is-legend-item\">\n <span\n class=\"key-colour is-inline-block-tablet is-align-middle\"\n [style.backgroundColor]=\"nodeColours[legendItem.type]\"\n ></span>\n <strong class=\"has-text-black is-align-middle key-label is-pl-tablet-2\">\n <span class=\"is-hidden-desktop\">{{legendItem.mobileText}}</span>\n <span class=\"is-hidden-touch\">{{legendItem.text}}</span>\n </strong>\n </div>\n </ng-container>\n </div>\n </ng-container>\n\n <p *ngIf=\"error\" class=\"has-text-danger py-3\">\n <ng-container [ngSwitch]=\"error\">\n <p *ngSwitchCase=\"'not-found'\">Impact Assessment not found</p>\n <div *ngSwitchDefault>\n <span>An unexpected error occurred:</span>\n <p class=\"mt-1\">{{ error }}</p>\n </div>\n </ng-container>\n </p>\n\n <div *ngIf=\"showWarnings\" class=\"has-text-warning py-3 has-text-centered\">\n <p class=\"is-mb-2\" *ngFor=\"let warning of warnings\">\n <fa-icon class=\"pr-2\" icon=\"exclamation-triangle\"></fa-icon>\n <ng-container [ngSwitch]=\"warning\">\n <span *ngSwitchCase=\"'missing-terms'\">Calculations are not up to date. Some terms may not display correctly.</span>\n </ng-container>\n </p>\n <p class=\"is-underlined is-size-7\"><a (click)=\"showWarnings = false\">View chart anyway.</a></p>\n </div>\n\n <div *ngIf=\"noData\" class=\"py-3\">\n <p class=\"has-text-centered\">No chart available.</p>\n </div>\n </ng-container>\n</ng-container>\n\n<div [class.is-hidden]=\"!isRecalculated || loading || error || noData || showWarnings\" class=\"chart-container is-relative w-100\">\n <svg class=\"w-100 h-100\" #chart></svg>\n</div>\n\n<ng-template #loader>\n <div class=\"loading-container has-text-center my-5 py-5\">\n <fa-icon icon=\"spinner\" [pulse]=\"true\" size=\"lg\"></fa-icon>\n </div>\n</ng-template>\n\n<ng-template #showSwitchRecalculated>\n <p class=\"has-text-centered py-3\">No chart available. Switch to <code>recalculated</code> version.</p>\n</ng-template>\n", styles: [".is-marginless{margin:0!important}.is-paddingless{padding:0!important}.m-0{margin:0!important}.mt-0{margin-top:0!important}.mr-0{margin-right:0!important}.mb-0{margin-bottom:0!important}.ml-0{margin-left:0!important}.mx-0{margin-left:0!important;margin-right:0!important}.my-0{margin-top:0!important;margin-bottom:0!important}.m-1{margin:.25rem!important}.mt-1{margin-top:.25rem!important}.mr-1{margin-right:.25rem!important}.mb-1{margin-bottom:.25rem!important}.ml-1{margin-left:.25rem!important}.mx-1{margin-left:.25rem!important;margin-right:.25rem!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.m-2{margin:.5rem!important}.mt-2{margin-top:.5rem!important}.mr-2{margin-right:.5rem!important}.mb-2{margin-bottom:.5rem!important}.ml-2{margin-left:.5rem!important}.mx-2{margin-left:.5rem!important;margin-right:.5rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.m-3{margin:.75rem!important}.mt-3{margin-top:.75rem!important}.mr-3{margin-right:.75rem!important}.mb-3{margin-bottom:.75rem!important}.ml-3{margin-left:.75rem!important}.mx-3{margin-left:.75rem!important;margin-right:.75rem!important}.my-3{margin-top:.75rem!important;margin-bottom:.75rem!important}.m-4{margin:1rem!important}.mt-4{margin-top:1rem!important}.mr-4{margin-right:1rem!important}.mb-4{margin-bottom:1rem!important}.ml-4{margin-left:1rem!important}.mx-4{margin-left:1rem!important;margin-right:1rem!important}.my-4{margin-top:1rem!important;margin-bottom:1rem!important}.m-5{margin:1.5rem!important}.mt-5{margin-top:1.5rem!important}.mr-5{margin-right:1.5rem!important}.mb-5{margin-bottom:1.5rem!important}.ml-5{margin-left:1.5rem!important}.mx-5{margin-left:1.5rem!important;margin-right:1.5rem!important}.my-5{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.m-6{margin:3rem!important}.mt-6{margin-top:3rem!important}.mr-6{margin-right:3rem!important}.mb-6{margin-bottom:3rem!important}.ml-6{margin-left:3rem!important}.mx-6{margin-left:3rem!important;margin-right:3rem!important}.my-6{margin-top:3rem!important;margin-bottom:3rem!important}.m-auto{margin:auto!important}.mt-auto{margin-top:auto!important}.mr-auto{margin-right:auto!important}.mb-auto{margin-bottom:auto!important}.ml-auto{margin-left:auto!important}.mx-auto{margin-left:auto!important;margin-right:auto!important}.my-auto{margin-top:auto!important;margin-bottom:auto!important}.p-0{padding:0!important}.pt-0{padding-top:0!important}.pr-0{padding-right:0!important}.pb-0{padding-bottom:0!important}.pl-0{padding-left:0!important}.px-0{padding-left:0!important;padding-right:0!important}.py-0{padding-top:0!important;padding-bottom:0!important}.p-1{padding:.25rem!important}.pt-1{padding-top:.25rem!important}.pr-1{padding-right:.25rem!important}.pb-1{padding-bottom:.25rem!important}.pl-1{padding-left:.25rem!important}.px-1{padding-left:.25rem!important;padding-right:.25rem!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.p-2{padding:.5rem!important}.pt-2{padding-top:.5rem!important}.pr-2{padding-right:.5rem!important}.pb-2{padding-bottom:.5rem!important}.pl-2{padding-left:.5rem!important}.px-2{padding-left:.5rem!important;padding-right:.5rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.p-3{padding:.75rem!important}.pt-3{padding-top:.75rem!important}.pr-3{padding-right:.75rem!important}.pb-3{padding-bottom:.75rem!important}.pl-3{padding-left:.75rem!important}.px-3{padding-left:.75rem!important;padding-right:.75rem!important}.py-3{padding-top:.75rem!important;padding-bottom:.75rem!important}.p-4{padding:1rem!important}.pt-4{padding-top:1rem!important}.pr-4{padding-right:1rem!important}.pb-4{padding-bottom:1rem!important}.pl-4{padding-left:1rem!important}.px-4{padding-left:1rem!important;padding-right:1rem!important}.py-4{padding-top:1rem!important;padding-bottom:1rem!important}.p-5{padding:1.5rem!important}.pt-5{padding-top:1.5rem!important}.pr-5{padding-right:1.5rem!important}.pb-5{padding-bottom:1.5rem!important}.pl-5{padding-left:1.5rem!important}.px-5{padding-left:1.5rem!important;padding-right:1.5rem!important}.py-5{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.p-6{padding:3rem!important}.pt-6{padding-top:3rem!important}.pr-6{padding-right:3rem!important}.pb-6{padding-bottom:3rem!important}.pl-6{padding-left:3rem!important}.px-6{padding-left:3rem!important;padding-right:3rem!important}.py-6{padding-top:3rem!important;padding-bottom:3rem!important}.p-auto{padding:auto!important}.pt-auto{padding-top:auto!important}.pr-auto{padding-right:auto!important}.pb-auto{padding-bottom:auto!important}.pl-auto{padding-left:auto!important}.px-auto{padding-left:auto!important;padding-right:auto!important}.py-auto{padding-top:auto!important;padding-bottom:auto!important}.key-colour{border-radius:2px;box-shadow:0 2px 3px #0000001a,inset 0 0 0 1px #0000001a;height:1.5em;width:1.5em;opacity:.7}@media screen and (max-width: 768px){.key-label{font-size:.675rem}}svg{pointer-events:none}@media screen and (min-width: 1216px){.is-legend-item{min-width:130px}}@media screen and (min-width: 1408px){.is-legend-item{min-width:200px}}.loading-container{min-height:200px}:host ::ng-deep .node-box{rx:10px;ry:10px;fill-opacity:0;stroke-opacity:.5;pointer-events:auto}:host ::ng-deep .node-open{stroke-width:3}:host ::ng-deep .node-openable{cursor:pointer;stroke-opacity:1;fill-opacity:.1}:host ::ng-deep .node-openable:hover{stroke-width:3}:host ::ng-deep .group-button{fill:#fff;cursor:pointer;pointer-events:auto;stroke-dasharray:2,5;stroke:#999;stroke-width:2}:host ::ng-deep .group-button:hover{fill:#000}:host ::ng-deep .group-button:hover+text{fill:#fff}:host ::ng-deep .group-button-text{text-anchor:middle;alignment-baseline:central}:host ::ng-deep .group-border,:host ::ng-deep .group-line{stroke-dasharray:2,5;stroke:#999;stroke-width:2;fill:none}:host ::ng-deep .group-label{font-weight:700;fill:#696969;text-anchor:start;alignment-baseline:central}:host ::ng-deep .node-label{font-weight:700;fill:#000;text-anchor:middle;alignment-baseline:central}:host ::ng-deep .node-label tspan{alignment-baseline:inherit}:host ::ng-deep .bar-label{font-weight:700;fill:#696969;alignment-baseline:central}:host ::ng-deep .sibling-mask{fill:#fafafa;fill-opacity:.8;stroke-opacity:.9;stroke:#fafafa;rx:10px;ry:10px;stroke-width:3;pointer-events:none}:host ::ng-deep .mask-openable{pointer-events:all}:host ::ng-deep .mask-openable:hover{fill:none;stroke:none}:host ::ng-deep .bar-background{fill:#d3d3d3;fill-opacity:.5}:host ::ng-deep .link-path{fill:none;stroke:#999}:host ::ng-deep .bar-foreground{fill-opacity:.5}:host ::ng-deep .tip-background{fill:#000}:host ::ng-deep .tip-text{font-weight:400;alignment-baseline:central;fill:#fff}:host ::ng-deep .tip-text *{font-weight:inherit;alignment-baseline:inherit}:host ::ng-deep .tip-text-key{font-weight:700}:host ::ng-deep .tip-anchor{text-decoration:underline;color:#fff;cursor:pointer;fill:#fff}:host ::ng-deep .tip-anchor:hover{text-decoration:underline}\n"] }]
|
|
837
837
|
}], ctorParameters: function () { return [{ type: i0.NgZone }, { type: i1.HeSearchService }, { type: i2.HeNodeService }, { type: i3.HeEngineService }]; }, propDecorators: { chartRef: [{
|
|
838
838
|
type: ViewChild,
|
|
839
839
|
args: ['chart']
|
|
@@ -842,4 +842,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImpor
|
|
|
842
842
|
}], dataState: [{
|
|
843
843
|
type: Input
|
|
844
844
|
}] } });
|
|
845
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wYWN0LWFzc2Vzc21lbnRzLWdyYXBoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9pbXBhY3QtYXNzZXNzbWVudHMvaW1wYWN0LWFzc2Vzc21lbnRzLWdyYXBoL2ltcGFjdC1hc3Nlc3NtZW50cy1ncmFwaC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvaW1wYWN0LWFzc2Vzc21lbnRzL2ltcGFjdC1hc3Nlc3NtZW50cy1ncmFwaC9pbXBhY3QtYXNzZXNzbWVudHMtZ3JhcGguY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFJVCxTQUFTLEVBRVQsS0FBSyxFQUlOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEcsT0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzlDLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBRXpCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEVBQXdDLFFBQVEsRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzFELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRXRFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7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QUFFLEVBQUU7WUFDbEMsS0FBSyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDdEIsSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO2dCQUNmLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO2dCQUNwQixnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDeEIsS0FBSyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO2FBQ3pCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxrQkFBa0IsRUFBRSxDQUFDLENBQUM7SUFDM0MsQ0FBQzs7NEhBbmdCVSwrQkFBK0I7Z0hBQS9CLCtCQUErQix1UUNybUI1QywydUhBcUZBOzJGRGdoQmEsK0JBQStCO2tCQUwzQyxTQUFTOytCQUNFLDZCQUE2QjtxTEFtQi9CLFFBQVE7c0JBRGYsU0FBUzt1QkFBQyxPQUFPO2dCQUlWLGlCQUFpQjtzQkFEeEIsS0FBSztnQkFHRSxTQUFTO3NCQURoQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBOZ1pvbmUsXG4gIE9uSW5pdCxcbiAgVmlld0NoaWxkLFxuICBBZnRlclZpZXdJbml0LFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkNoYW5nZXMsXG4gIFNpbXBsZUNoYW5nZXNcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmaWx0ZXIsIGdyb3VwQnksIG1hcCwgbWVyZ2VBbGwsIG1lcmdlTWFwLCB0b0FycmF5LCBjYXRjaEVycm9yLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBmcm9tLCBvZiwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgKiBhcyBkMyBmcm9tICdkMyc7XG5pbXBvcnQgeyBIaWVyYXJjaHlOb2RlLCBTZWxlY3Rpb24sIEJhc2VUeXBlLCBIaWVyYXJjaHlQb2ludE5vZGUsIEhpZXJhcmNoeVBvaW50TGluayB9IGZyb20gJ2QzJztcbmltcG9ydCB7IERhdGFTdGF0ZSB9IGZyb20gJ0BoZXN0aWEtZWFydGgvYXBpJztcbmltcG9ydCB7IElJbXBhY3RBc3Nlc3NtZW50SlNPTkxELCBJVGVybUpTT05MRCwgTm9kZVR5cGUsIFRlcm1UZXJtVHlwZSB9IGZyb20gJ0BoZXN0aWEtZWFydGgvc2NoZW1hJztcbmltcG9ydCB7IGdldERlZmF1bHRNb2RlbElkIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9nbG9zc2FyeSc7XG5pbXBvcnQgeyB1bmlxdWUsIHRvUHJlY2lzaW9uIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC91dGlscyc7XG5pbXBvcnQgeyBmYUV4dGVybmFsTGlua0FsdCB9IGZyb20gJ0Bmb3J0YXdlc29tZS9mcmVlLXNvbGlkLXN2Zy1pY29ucyc7XG5cbmltcG9ydCB7IGJhc2VVcmwgfSBmcm9tICcuLi8uLi9jb21tb24vdXRpbHMnO1xuaW1wb3J0IHsgZDN3cmFwIH0gZnJvbSAnLi4vLi4vY29tbW9uL2QzLXV0aWxzJztcbmltcG9ydCB7IExldmVsLCBwYXJzZUxpbmVzLCBwYXJzZU1lc3NhZ2UgfSBmcm9tICcuLi8uLi9jb21tb24vbG9ncy11dGlscyc7XG5pbXBvcnQgeyBIZUVuZ2luZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9lbmdpbmUvZW5naW5lLnNlcnZpY2UnO1xuaW1wb3J0IHsgSGVOb2RlU2VydmljZSB9IGZyb20gJy4uLy4uL25vZGUvbm9kZS5zZXJ2aWNlJztcbmltcG9ydCB7IEhlU2VhcmNoU2VydmljZSwgSVNlYXJjaFJlc3VsdEV4dGVuZGVkIH0gZnJvbSAnLi4vLi4vc2VhcmNoL3NlYXJjaC5zZXJ2aWNlJztcbmltcG9ydCB7IG1hdGNoVGVybVR5cGUsIG1hdGNoRXhhY3RRdWVyeSwgbWF0Y2hUeXBlIH0gZnJvbSAnLi4vLi4vc2VhcmNoL3NlYXJjaC5tb2RlbCc7XG5cbmVudW0gQ2hhcnROb2RlVHlwZSB7XG4gIG1pZHBvaW50ID0gJ21pZHBvaW50JyxcbiAgZW1pc3Npb24gPSAnZW1pc3Npb24nLFxuICBlbmRwb2ludCA9ICdlbmRwb2ludCcsXG4gIGlucHV0ID0gJ2lucHV0JyxcbiAgb3BlcmF0aW9uID0gJ29wZXJhdGlvbicsXG4gIHJvb3QgPSAncm9vdCdcbn1cblxuaW50ZXJmYWNlIE5vZGVEYXR1bSB7XG4gIGlkOiBzdHJpbmc7XG4gIHRlcm06IHN0cmluZztcbiAgbW9kZWxJZDogc3RyaW5nO1xuICBtb2RlbE5hbWU/OiBzdHJpbmc7XG4gIG1vZGVsRG9jcz86IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgdHlwZTogQ2hhcnROb2RlVHlwZTtcbiAgdmFsdWU6IG51bWJlciB8IG51bGw7XG4gIHdlaWdodGVkVmFsdWU6IG51bWJlciB8IG51bGw7XG4gIGZyYWN0aW9uPzogbnVtYmVyO1xuICBjaGlsZHJlbj86IE5vZGVEYXR1bVtdO1xuICBncm91cD86IGJvb2xlYW47XG4gIHNob3dCYXI/OiBib29sZWFuO1xuICB1bml0czogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgQ2hhcnROb2RlIGV4dGVuZHMgSGllcmFyY2h5UG9pbnROb2RlPE5vZGVEYXR1bT4ge1xuICBfY2hpbGRyZW4/OiBDaGFydE5vZGVbXTsgLy8gY2hpbGRyZW4gb2YgY29sbGFwc2VkIG5vZGVzXG4gIF9ncm91cENoaWxkcmVuPzogQ2hhcnROb2RlW107IC8vIGFsbCBjaGlsZHJlbiB3aGVuIGdyb3VwIGNsb3NlZDsgdW5ncm91cGVkIGNoaWxkcmVuIHdoZW4gZ3JvdXAgb3BlblxuICBfb3Blbj86IGJvb2xlYW47XG4gIF9ncmV5ZWQ/OiBib29sZWFuO1xuICBfZ3JvdXBPcGVuPzogYm9vbGVhbjtcbiAgX3RpbWVvdXQ/OiBOb2RlSlMuVGltZW91dDtcbn1cblxuaW50ZXJmYWNlIEhOb2RlIGV4dGVuZHMgSGllcmFyY2h5Tm9kZTxOb2RlRGF0dW0+IHtcbiAgX2NoaWxkcmVuPzogSE5vZGVbXTtcbiAgX2dyb3VwQ2hpbGRyZW4/OiBITm9kZVtdO1xuICBfZ3JvdXBPcGVuPzogYm9vbGVhbjtcbiAgX29wZW4/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgTGluayBleHRlbmRzIEhpZXJhcmNoeVBvaW50TGluazxOb2RlRGF0dW0+IHtcbiAgc291cmNlOiBDaGFydE5vZGU7XG4gIHRhcmdldDogQ2hhcnROb2RlO1xufVxuXG50eXBlIE5vZGVTZWxlY3Rpb24gPSBTZWxlY3Rpb248U1ZHR0VsZW1lbnQgfCBCYXNlVHlwZSwgQ2hhcnROb2RlLCBTVkdHRWxlbWVudCwgdW5rbm93bj47XG50eXBlIExpbmtTZWxlY3Rpb24gPSBTZWxlY3Rpb248U1ZHUGF0aEVsZW1lbnQgfCBCYXNlVHlwZSwgTGluaywgU1ZHR0VsZW1lbnQsIHVua25vd24+O1xuXG5pbnRlcmZhY2UgSUlucHV0TG9nIHtcbiAgbGFiZWw6IHN0cmluZztcbiAgdW5pdHM6IHN0cmluZztcbiAgd2VpZ2h0ZWRWYWx1ZTogbnVtYmVyO1xuICB2YWx1ZTogbnVtYmVyO1xuICBvcGVyYXRpb25zOiB7XG4gICAgd2VpZ2h0ZWRWYWx1ZTogbnVtYmVyO1xuICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgdW5pdHM6IHN0cmluZztcbiAgICB2YWx1ZTogbnVtYmVyO1xuICB9W107XG59XG5pbnRlcmZhY2UgSUxvZyB7XG4gIGluZGljYXRvcjogc3RyaW5nO1xuICBjb250cmlidXRvcjogc3RyaW5nO1xuICBjb2VmZmljaWVudDogbnVtYmVyO1xuICB2YWx1ZTogbnVtYmVyO1xuICB3ZWlnaHRlZFZhbHVlOiBudW1iZXI7XG4gIG1vZGVsSWQ6IHN0cmluZztcbiAgaW5wdXRzPzogSUlucHV0TG9nW107XG59XG5cbmNvbnN0IHBhcnNlTG9nID0gKGRhdGE6IGFueSk6IElMb2cgPT4gKHtcbiAgaW5kaWNhdG9yOiBkYXRhWydrZXkvdGVybSddIHx8IGRhdGEudGVybSB8fCBkYXRhLmluZGljYXRvcixcbiAgY29udHJpYnV0b3I6IGRhdGEubm9kZSxcbiAgY29lZmZpY2llbnQ6ICtkYXRhLmNvZWZmaWNpZW50LFxuICBtb2RlbElkOiBkYXRhLm1vZGVsIHx8ICdVbmtub3duJyxcbiAgd2VpZ2h0ZWRWYWx1ZTogK2RhdGEudmFsdWUgKiArZGF0YS5jb2VmZmljaWVudCxcbiAgdmFsdWU6ICtkYXRhLnZhbHVlXG59KTtcblxuY29uc3QgZmlsdGVyVGVybVR5cGVzID0gW1xuICBUZXJtVGVybVR5cGUucmVzb3VyY2VVc2UsXG4gIFRlcm1UZXJtVHlwZS5lbWlzc2lvbixcbiAgVGVybVRlcm1UeXBlLmNoYXJhY3RlcmlzZWRJbmRpY2F0b3IsXG4gIFRlcm1UZXJtVHlwZS5lbmRwb2ludEluZGljYXRvcixcbiAgVGVybVRlcm1UeXBlLm1vZGVsXG5dO1xuY29uc3Qgbm9kZUNvbG91cnMgPSB7XG4gIFtDaGFydE5vZGVUeXBlLmVuZHBvaW50XTogJ2JsdWUnLFxuICBbQ2hhcnROb2RlVHlwZS5taWRwb2ludF06ICdyZWQnLFxuICBbQ2hhcnROb2RlVHlwZS5lbWlzc2lvbl06ICdwdXJwbGUnLFxuICBbQ2hhcnROb2RlVHlwZS5pbnB1dF06ICdncmVlbicsXG4gIFtDaGFydE5vZGVUeXBlLm9wZXJhdGlvbl06ICdvcmFuZ2UnXG59O1xuY29uc3Qgd2lkdGggPSA4MDA7XG5jb25zdCBtYXJnaW4gPSB7IHRvcDogMTAsIHJpZ2h0OiAyMCwgYm90dG9tOiAxMCwgbGVmdDogMjAgfTtcbmNvbnN0IGZvbnRTaXplID0gTWF0aC5mbG9vcih3aWR0aCAvIDEwMCk7XG5jb25zdCBub2RlUGFkZGluZyA9IGZvbnRTaXplIC8gMjtcbmNvbnN0IGxpbmVIZWlnaHQgPSBmb250U2l6ZSAqIDEuMjtcbmNvbnN0IGJhckhlaWdodCA9IGxpbmVIZWlnaHQ7XG5cbmNvbnN0IG5vZGVIZWlnaHQgPSBub2RlUGFkZGluZyAqIDIgKyAyICogbGluZUhlaWdodCArIGJhckhlaWdodDtcbmNvbnN0IG5vZGVXaWR0aCA9IG5vZGVIZWlnaHQgKiAyICogMS42MTg7XG5jb25zdCBub2RlQ29udGVudFdpZHRoID0gbm9kZVdpZHRoIC0gbm9kZVBhZGRpbmcgKiAyO1xuY29uc3QgbGF5ZXJTcGFjaW5nID0gKHdpZHRoIC0gbWFyZ2luLmxlZnQgLSBtYXJnaW4ucmlnaHQgLSBub2RlV2lkdGggKiA1KSAvIDQ7XG5jb25zdCBub2RlTWFyZ2luID0gbm9kZVBhZGRpbmcgKiAwLjc1O1xuY29uc3Qgbm9kZVNwYWNpbmdGYWN0b3IgPSAobm9kZUhlaWdodCArIG5vZGVNYXJnaW4gKiAyKSAvIG5vZGVIZWlnaHQ7XG5jb25zdCBub2RlRHVyYXRpb24gPSA2MDA7XG5jb25zdCBsaW5rRHVyYXRpb24gPSAyMDA7XG5jb25zdCBncm91cERlbGF5ID0gbm9kZUR1cmF0aW9uIC0gMTAwO1xuY29uc3Qgbm9uTENBSW5kaWNhdG9yc0lkID0gJ25vbkxDQUluZGljYXRvcnMnO1xuY29uc3QgZ3JleWVkT3BhY2l0eSA9IDAuMjtcbmNvbnN0IGRlZmF1bHRJbmRpY2F0b3JzTW9kZWxJZCA9ICdkZWZhdWx0SW5kaWNhdG9yc01vZGVsSWQnO1xuY29uc3QgZGVmYXVsdEluZGljYXRvcnNNb2RlbE5hbWUgPSAnRGVmYXVsdCBJbmRpY2F0b3JzIChtdWx0aS1tb2RlbCknO1xuY29uc3QgZ3JvdXBPdmVybGFwID0gbGluZUhlaWdodCAtIG5vZGVQYWRkaW5nIC0gbm9kZU1hcmdpbjtcbmNvbnN0IGdyb3VwTm9kZVNwYWNlID0gbm9kZUhlaWdodCAtIDIgKiBncm91cE92ZXJsYXA7XG5cbmNvbnN0IGNvbGxhcHNlQ2hpbGRyZW4gPSAobm9kZTogQ2hhcnROb2RlIHwgSE5vZGUpID0+IHtcbiAgbm9kZS5fY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuIHx8IG5vZGUuX2NoaWxkcmVuO1xuICBub2RlLmNoaWxkcmVuID0gbnVsbDtcbiAgcmV0dXJuIG5vZGU7XG59O1xuXG5jb25zdCByZXN0b3JlQ2hpbGRyZW4gPSAobm9kZTogQ2hhcnROb2RlIHwgSE5vZGUpID0+IHtcbiAgbm9kZS5jaGlsZHJlbiA9IG5vZGUuX2NoaWxkcmVuO1xuICBub2RlLl9jaGlsZHJlbiA9IG51bGw7XG4gIHJldHVybiBub2RlO1xufTtcblxuY29uc3Qgd3JhcCA9IChzZWxlY3Rpb246IFNlbGVjdGlvbjxTVkdUZXh0RWxlbWVudCwgQ2hhcnROb2RlLCBhbnksIGFueT4sIG1heFdpZHRoID0gbm9kZUNvbnRlbnRXaWR0aCkgPT4ge1xuICBzZWxlY3Rpb24uZWFjaChmdW5jdGlvbihkKSB7XG4gICAgY29uc3QgdCA9IGQzLnNlbGVjdDxTVkdUZXh0RWxlbWVudCwgQ2hhcnROb2RlPih0aGlzKTtcbiAgICBkM3dyYXA8Q2hhcnROb2RlPih0LCB7XG4gICAgICBtYXhXaWR0aCxcbiAgICAgIG1heExpbmVzOiBkLmRhdGEuc2hvd0JhciA/IDIgOiAzLFxuICAgICAgdmNlbnRyZTogIWQuZGF0YS5zaG93QmFyLFxuICAgICAgd29yZHM6IFsuLi5kLmRhdGEubGFiZWwuc3BsaXQoL1xccysvKSwgZC5kYXRhLnVuaXRzXSxcbiAgICAgIG93bkxpbmVXb3JkOiBkLmRhdGEudW5pdHMsXG4gICAgICBuSGVpZ2h0OiBub2RlSGVpZ2h0LFxuICAgICAgbEhlaWdodDogbGluZUhlaWdodFxuICAgIH0pO1xuICB9KTtcbn07XG5cbmNvbnN0IHNldE5vZGVTaXplID0gKHNlbGVjdGlvbikgPT4gc2VsZWN0aW9uLmF0dHIoJ3dpZHRoJywgbm9kZVdpZHRoKS5hdHRyKCdoZWlnaHQnLCBub2RlSGVpZ2h0KTtcblxuY29uc3QgZm9ybWF0QmFyID0gKHNlbGVjdGlvbjogTm9kZVNlbGVjdGlvbikgPT5cbiAgc2VsZWN0aW9uXG4gICAgLmF0dHIoJ2hlaWdodCcsIGJhckhlaWdodClcbiAgICAuYXR0cigncngnLCAnMScpXG4gICAgLmF0dHIoJ3J5JywgJzEnKVxuICAgIC5hdHRyKCd5Jywgbm9kZUhlaWdodCAtIG5vZGVQYWRkaW5nIC0gYmFySGVpZ2h0KVxuICAgIC5hdHRyKCd4Jywgbm9kZVBhZGRpbmcpO1xuXG5jb25zdCBpc1R5cGVXaXRob3V0VmFsdWUgPSAobm9kZURhdHVtKSA9PiBbQ2hhcnROb2RlVHlwZS5pbnB1dCwgQ2hhcnROb2RlVHlwZS5vcGVyYXRpb25dLmluY2x1ZGVzKG5vZGVEYXR1bS5kYXRhLnR5cGUpO1xuXG5jb25zdCBnZXRXZWlnaHRlZFZhbHVlVGV4dCA9IChub2RlRGF0dW0pID0+XG4gIGAke3RvUHJlY2lzaW9uKG5vZGVEYXR1bS5kYXRhLndlaWdodGVkVmFsdWUsIDMpfSR7XG4gICAgbm9kZURhdHVtLnBhcmVudD8uZGF0YS52YWx1ZSA9PT0gbnVsbFxuICAgICAgPyAnJ1xuICAgICAgOiBgIG9mICR7dG9QcmVjaXNpb24obm9kZURhdHVtLnBhcmVudD8uZGF0YS52YWx1ZSB8fCBub2RlRGF0dW0ucGFyZW50Py5kYXRhLndlaWdodGVkVmFsdWUsIDMpfWBcbiAgfSAke25vZGVEYXR1bS5wYXJlbnQ/LmRhdGEudmFsdWUgPyBub2RlRGF0dW0ucGFyZW50Py5kYXRhLnVuaXRzIDogbm9kZURhdHVtLnBhcmVudD8ucGFyZW50Py5kYXRhLnVuaXRzfSAtIGA7XG5cbmNvbnN0IGdlbmVyYXRlVGlwRGF0YSA9IChub2RlRGF0dW0pID0+XG4gIFtcbiAgICBub2RlRGF0dW0uZGF0YS53ZWlnaHRlZFZhbHVlXG4gICAgICA/IFtcbiAgICAgICAgICB7IHRleHQ6ICdjb250cmlidXRpb24nIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGV4dDogZ2V0V2VpZ2h0ZWRWYWx1ZVRleHQobm9kZURhdHVtKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgeyB0ZXh0OiBgRG9jcyBgLCBocmVmOiBub2RlRGF0dW0uZGF0YS5tb2RlbERvY3MgfVxuICAgICAgICBdXG4gICAgICA6IG51bGwsXG5cbiAgICBub2RlRGF0dW0uZGF0YS52YWx1ZVxuICAgICAgPyBbXG4gICAgICAgICAgeyB0ZXh0OiAndmFsdWUnLCBocmVmOiBgJHtiYXNlVXJsKCl9L3NjaGVtYS9JbmRpY2F0b3IjdmFsdWVgIH0sXG4gICAgICAgICAgeyB0ZXh0OiBgJHt0b1ByZWNpc2lvbihub2RlRGF0dW0uZGF0YS52YWx1ZSwgMyl9ICR7bm9kZURhdHVtLmRhdGEudW5pdHN9IC0gYCB9LFxuICAgICAgICAgIHsgdGV4dDogYERvY3MgYCwgaHJlZjogbm9kZURhdHVtLmRhdGEubW9kZWxEb2NzIH1cbiAgICAgICAgXVxuICAgICAgOiBbXG4gICAgICAgICAgeyB0ZXh0OiAndmFsdWUnIH0sXG4gICAgICAgICAgeyB0ZXh0OiBpc1R5cGVXaXRob3V0VmFsdWUobm9kZURhdHVtKSA/ICdubyBkYXRhICh1bmRlciBkZXZlbG9wbWVudCknIDogJ25vIGNvbnRyaWJ1dGlvbicgfVxuICAgICAgICBdLFxuICAgIFtcbiAgICAgIHsgdGV4dDogJ21ldGhvZE1vZGVsJywgaHJlZjogYCR7YmFzZVVybCgpfS9zY2hlbWEvSW5kaWNhdG9yI21ldGhvZE1vZGVsYCB9LFxuICAgICAgeyB0ZXh0OiBgJHtub2RlRGF0dW0uZGF0YS5tb2RlbE5hbWV9YCwgaHJlZjogYCR7YmFzZVVybCgpfS9tb2RlbC8ke25vZGVEYXR1bS5kYXRhLm1vZGVsSWR9YCB9XG4gICAgXSxcbiAgICBbXG4gICAgICB7IHRleHQ6ICd0ZXJtJywgaHJlZjogYCR7YmFzZVVybCgpfS9zY2hlbWEvSW5kaWNhdG9yI3Rlcm1gIH0sXG4gICAgICB7IHRleHQ6IG5vZGVEYXR1bS5kYXRhLnRlcm0sIGhyZWY6IGAke2Jhc2VVcmwoKX0vdGVybS8ke25vZGVEYXR1bS5kYXRhLmlkfWAgfVxuICAgIF1cbiAgXS5maWx0ZXIoQm9vbGVhbik7XG5cbmNvbnN0IHJpZ2h0VGlwUGF0aCA9ICh3LCBoLCB0YWlsKSA9PlxuICBgTSR7LXRhaWx9LCR7aCAvIDJ9IGwke3RhaWx9LC0ke3RhaWx9IHYtJHtoIC8gMiAtIHRhaWx9IGgke3d9IHYke2h9IGgtJHt3fSB2LSR7aCAvIDIgLSB0YWlsfSB6YDtcblxuY29uc3QgbGVmdFRpcFBhdGggPSAodywgaCwgdGFpbCkgPT5cbiAgYE0kezB9LCR7MH0gaCR7d30gdiR7aC8yLXRhaWx9IGwke3RhaWx9LCR7dGFpbH0gbCR7LXRhaWx9LCR7dGFpbH0gdiR7aCAvIDIgLSB0YWlsfSBoJHstd30gemA7XG5cbmNvbnN0IGFkZFRvb2x0aXAgPSAoc2VsZWN0aW9uOiBOb2RlU2VsZWN0aW9uLCB7IHRpcFNlbGVjdGlvbiB9KSA9PiB7XG4gIGxldCBob3ZlcmluZ1RpcCA9IGZhbHNlO1xuICBsZXQgaG92ZXJpbmdOb2RlID0gZmFsc2U7XG4gIGxldCBsYXN0Tm9kZUlkOiBzdHJpbmc7XG5cbiAgY29uc3QgY2xvc2VUaXAgPSAoKSA9PiB7XG4gICAgdGlwU2VsZWN0aW9uLnN0eWxlKCdwb2ludGVyLWV2ZW50cycsICdub25lJykudHJhbnNpdGlvbigpLmR1cmF0aW9uKDEwMCkuc3R5bGUoJ29wYWNpdHknLCAwKTtcbiAgICB0aXBTZWxlY3Rpb24uc3R5bGUoJ2Rpc3BsYXknLCAnbm9uZScpO1xuICAgIGxhc3ROb2RlSWQgPSBudWxsO1xuICB9O1xuXG4gIGNvbnN0IHN0YXJ0Q2xvc2VUaXAgPSAoKSA9PiB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoIWhvdmVyaW5nVGlwICYmICFob3ZlcmluZ05vZGUpIHtcbiAgICAgICAgY2xvc2VUaXAoKTtcbiAgICAgIH1cbiAgICB9LCAxMDApO1xuICB9O1xuXG4gIHRpcFNlbGVjdGlvblxuICAgIC5vbigncG9pbnRlcmVudGVyJywgKCkgPT4ge1xuICAgICAgaG92ZXJpbmdUaXAgPSB0cnVlO1xuICAgIH0pXG4gICAgLm9uKCdwb2ludGVybGVhdmUnLCAoKSA9PiB7XG4gICAgICBob3ZlcmluZ1RpcCA9IGZhbHNlO1xuICAgICAgc3RhcnRDbG9zZVRpcCgpO1xuICAgIH0pO1xuXG4gIHNlbGVjdGlvblxuICAgIC5vbignY2xpY2snLCAoX2UsIGQpID0+IHtcbiAgICAgIGNsb3NlVGlwKCk7XG4gICAgICBjbGVhclRpbWVvdXQoZC5fdGltZW91dCk7XG4gICAgfSlcbiAgICAub24oJ3BvaW50ZXJlbnRlcicsIChldmVudCwgbm9kZURhdHVtKSA9PiB7XG4gICAgICBob3ZlcmluZ05vZGUgPSB0cnVlO1xuICAgICAgaWYgKGxhc3ROb2RlSWQgPT09IG5vZGVEYXR1bS5kYXRhLmlkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNsb3NlVGlwKCk7XG4gICAgICBsYXN0Tm9kZUlkID0gbm9kZURhdHVtLmRhdGEuaWQ7XG5cbiAgICAgIG5vZGVEYXR1bS5fdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aXBTZWxlY3Rpb24uc3R5bGUoJ2Rpc3BsYXknLCBudWxsKS5zdHlsZSgncG9pbnRlci1ldmVudHMnLCAnYWxsJykudHJhbnNpdGlvbigpLmR1cmF0aW9uKDEwMCkuc3R5bGUoJ29wYWNpdHknLCAxKTtcbiAgICAgICAgY29uc3QgdGlwQmFja2dyb3VuZCA9IHRpcFNlbGVjdGlvbi5zZWxlY3RBbGwoJ3BhdGgnKS5kYXRhKFssXSkuam9pbigncGF0aCcpLmNsYXNzZWQoJ3RpcC1iYWNrZ3JvdW5kJywgdHJ1ZSk7XG4gICAgICAgIGNvbnN0IHRpcFRleHQgPSB0aXBTZWxlY3Rpb24uc2VsZWN0QWxsKCdnJykuZGF0YShbLF0pLmpvaW4oJ2cnKS5jbGFzc2VkKCd0aXAtdGV4dCcsIHRydWUpO1xuXG4gICAgICAgIGNvbnN0IHRpcFJvdyA9IHRpcFRleHRcbiAgICAgICAgICAuc2VsZWN0QWxsKCdnID4gZycpXG4gICAgICAgICAgLmRhdGEoZ2VuZXJhdGVUaXBEYXRhKG5vZGVEYXR1bSkpXG4gICAgICAgICAgLmpvaW4oJ2cnKVxuICAgICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAoXywgaSkgPT4gYHRyYW5zbGF0ZSgwLCR7aSAqIGZvbnRTaXplICogMS41ICsgZm9udFNpemUgLyAyfSlgKTtcblxuICAgICAgICB0aXBSb3cuYXBwZW5kKCd0ZXh0JykuZWFjaChmdW5jdGlvbihkKSB7XG4gICAgICAgICAgY29uc3QgdCA9IGQzLnNlbGVjdCh0aGlzKTtcbiAgICAgICAgICBjb25zdCBhT3JUc3BhbiA9IGRbMF0uaHJlZiA/IHQuYXBwZW5kKCdhJykuYXR0cignaHJlZicsIGRbMF0uaHJlZikgOiB0LmFwcGVuZCgndHNwYW4nKTtcbiAgICAgICAgICBhT3JUc3Bhbi5hcHBlbmQoJ3RzcGFuJykudGV4dChkWzBdLnRleHQpO1xuICAgICAgICAgIGFPclRzcGFuLmNsYXNzZWQoJ3RpcC10ZXh0LWtleScsIHRydWUpO1xuICAgICAgICAgIHQuYXBwZW5kKCd0c3BhbicpLnRleHQoJzogJyk7XG4gICAgICAgICAgaWYgKGRbMV0gJiYgIWRbMV0uaHJlZikge1xuICAgICAgICAgICAgdC5hcHBlbmQoJ3RzcGFuJykudGV4dChkWzFdLnRleHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIC8vIHN2ZyBpY29uIGNhbm5vdCBiZSBjaGlsZCBvZiB0ZXh0IHNvIHBvc2l0aW9uIGZpbmFsIGxpbmsgbWFudWFsbHlcbiAgICAgICAgdGlwUm93XG4gICAgICAgICAgLmZpbHRlcigoZCkgPT4gZFtkLmxlbmd0aCAtIDFdLmhyZWYpXG4gICAgICAgICAgLmVhY2goZnVuY3Rpb24oZCkge1xuICAgICAgICAgICAgY29uc3QgeyB3aWR0aDogdGV4dFdpZHRoIH0gPSB0aGlzLmdldEJCb3goKTtcbiAgICAgICAgICAgIGNvbnN0IGEgPSBkM1xuICAgICAgICAgICAgICAuc2VsZWN0KHRoaXMpXG4gICAgICAgICAgICAgIC5hcHBlbmQoJ2EnKVxuICAgICAgICAgICAgICAuYXR0cignaHJlZicsIGRbZC5sZW5ndGggLSAxXS5ocmVmKVxuICAgICAgICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgke3RleHRXaWR0aCArIG5vZGVQYWRkaW5nfSwwKWApO1xuXG4gICAgICAgICAgICBhLmFwcGVuZCgndGV4dCcpLnRleHQoZFtkLmxlbmd0aCAtIDFdLnRleHQpO1xuXG4gICAgICAgICAgICBjb25zdCB7IHdpZHRoOiBhV2lkdGggfSA9IChhLm5vZGUoKSBhcyB1bmtub3duIGFzIFNWR0FFbGVtZW50KS5nZXRCQm94KCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGcgPSBhLmFwcGVuZCgnZycpLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoJHthV2lkdGggKyBub2RlUGFkZGluZ30sJHstZm9udFNpemUgLyAyfSlgKTtcblxuICAgICAgICAgICAgZy5hcHBlbmQoJ3JlY3QnKVxuICAgICAgICAgICAgICAuYXR0cignd2lkdGgnLCBmb250U2l6ZSlcbiAgICAgICAgICAgICAgLmF0dHIoJ2hlaWdodCcsIGZvbnRTaXplKVxuICAgICAgICAgICAgICAuYXR0cignZmlsbCcsICdub25lJylcbiAgICAgICAgICAgICAgLmF0dHIoJ3N0cm9rZScsICdub25lJyk7XG5cbiAgICAgICAgICAgIGcuYXBwZW5kKCdzdmcnKVxuICAgICAgICAgICAgICAuYXR0cigndmlld0JveCcsIGAwIDAgJHtmYUV4dGVybmFsTGlua0FsdC5pY29uWzBdfSAke2ZhRXh0ZXJuYWxMaW5rQWx0Lmljb25bMV19YClcbiAgICAgICAgICAgICAgLmF0dHIoJ3dpZHRoJywgZm9udFNpemUpXG4gICAgICAgICAgICAgIC5hdHRyKCdoZWlnaHQnLCBmb250U2l6ZSlcbiAgICAgICAgICAgICAgLmFwcGVuZCgncGF0aCcpXG4gICAgICAgICAgICAgIC5hdHRyKCdkJywgZmFFeHRlcm5hbExpbmtBbHQuaWNvbls0XSlcbiAgICAgICAgICAgICAgLmF0dHIoJ2ZpbGwnLCAnd2hpdGUnKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICB0aXBUZXh0LnNlbGVjdEFsbCgnYScpLmNsYXNzZWQoJ3RpcC1hbmNob3InLCB0cnVlKS5hdHRyKCd0YXJnZXQnLCAnX2JsYW5rJyk7XG5cbiAgICAgICAgY29uc3QgeyB3aWR0aDogdGlwV2lkdGgsIGhlaWdodDogdGlwSGVpZ2h0IH0gPSB0aXBUZXh0Lm5vZGUoKS5nZXRCQm94KCk7XG4gICAgICAgIGNvbnN0IG9yaWVudExlZnQgPSBub2RlRGF0dW0ueSArIHRpcFdpZHRoICsgbm9kZVdpZHRoID4gd2lkdGggLSBtYXJnaW4ubGVmdDtcblxuICAgICAgICBjb25zdCB0aXBQYXRoQXJnczogW251bWJlciwgbnVtYmVyLCBudW1iZXJdID0gW3RpcFdpZHRoICsgbm9kZVBhZGRpbmcgKiAyLCB0aXBIZWlnaHQgKyBub2RlUGFkZGluZyAqIDIsIDVdO1xuICAgICAgICB0aXBCYWNrZ3JvdW5kXG4gICAgICAgICAgLmF0dHIoJ2QnLCBvcmllbnRMZWZ0ID8gbGVmdFRpcFBhdGgoLi4udGlwUGF0aEFyZ3MpIDogcmlnaHRUaXBQYXRoKC4uLnRpcFBhdGhBcmdzKSlcbiAgICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgkey1ub2RlUGFkZGluZ30sJHstbm9kZVBhZGRpbmd9KWApXG4gICAgICAgICAgLmF0dHIoJ3N0cm9rZS1saW5lam9pbicsICdyb3VuZCcpXG4gICAgICAgICAgLmF0dHIoJ3N0cm9rZS13aWR0aCcsIDMpXG4gICAgICAgICAgLmF0dHIoJ3N0cm9rZScsICdibGFjaycpO1xuICAgICAgICBjb25zdCB4T2Zmc2V0ID0gb3JpZW50TGVmdCA/IC10aXBXaWR0aCAtIG5vZGVQYWRkaW5nKjIgOiBub2RlV2lkdGggKyBub2RlUGFkZGluZyAqIDI7XG5cbiAgICAgICAgdGlwU2VsZWN0aW9uLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoJHtub2RlRGF0dW0ueSt4T2Zmc2V0fSwke25vZGVEYXR1bS54K25vZGVIZWlnaHQvMi10aXBIZWlnaHQvMn0pYCk7XG4gICAgICB9LCAyNTApO1xuICAgIH0pXG4gICAgLm9uKCdwb2ludGVybGVhdmUnLCAoX2UsIGQpID0+IHtcbiAgICAgIGhvdmVyaW5nTm9kZSA9IGZhbHNlO1xuICAgICAgc3RhcnRDbG9zZVRpcCgpO1xuICAgICAgY2xlYXJUaW1lb3V0KGQuX3RpbWVvdXQpO1xuICAgIH0pO1xuXG4gIHJldHVybiBzZWxlY3Rpb247XG59O1xuXG5jb25zdCBtZXJnZWROb2RlcyA9IChzZWxlY3Rpb246IE5vZGVTZWxlY3Rpb24sIHsgdGlwU2VsZWN0aW9uIH0pID0+IHtcbiAgc2VsZWN0aW9uXG4gICAgLnNlbGVjdEFsbDxTVkdSZWN0RWxlbWVudCwgQ2hhcnROb2RlPignLm5vZGUtYm94JylcbiAgICAuY2xhc3NlZCgnbm9kZS1vcGVuYWJsZScsIChkKSA9PiAhIWQuaGVpZ2h0KVxuICAgIC5jbGFzc2VkKCdub2RlLW9wZW4nLCAoZCkgPT4gZC5fb3BlbilcbiAgICAuY2FsbChzZXROb2RlU2l6ZSlcbiAgICAuYXR0cignc3Ryb2tlJywgKHsgZGF0YSB9KSA9PiBub2RlQ29sb3Vyc1tkYXRhLnR5cGVdKVxuICAgIC5hdHRyKCdmaWxsJywgKGQpID0+IG5vZGVDb2xvdXJzW2QuZGF0YS50eXBlXSlcbiAgICAuc3R5bGUoJ3VzZXItc2VsZWN0Jywgd2luZG93LmlubmVyV2lkdGggPCA3NjggPyAnbm9uZScgOiBudWxsKTtcblxuICBzZWxlY3Rpb25cbiAgICAuZmlsdGVyKChkKSA9PiAhZC5kYXRhLmdyb3VwICYmIGQuZGF0YS5pZCAhPT0gbm9uTENBSW5kaWNhdG9yc0lkKVxuICAgIC5jYWxsKGFkZFRvb2x0aXAsIHsgdGlwU2VsZWN0aW9uIH0pO1xuXG4gIHNlbGVjdGlvblxuICAgIC5zZWxlY3RBbGw8U1ZHVGV4dEVsZW1lbnQsIENoYXJ0Tm9kZT4oJy5ub2RlLWxhYmVsJylcbiAgICAuYXR0cigneScsIChkKSA9PiAoZC5kYXRhLnNob3dCYXIgPyBsaW5lSGVpZ2h0IC8gMiArIG5vZGVQYWRkaW5nIC8gMiA6IDApKVxuICAgIC5hdHRyKCd4Jywgbm9kZVdpZHRoIC8gMik7XG5cbiAgY29uc3QgZ3JvdXBzID0gc2VsZWN0aW9uLmZpbHRlcigoZCkgPT4gZC5kYXRhLmdyb3VwKTtcblxuICBncm91cHNcbiAgICAuc2VsZWN0QWxsPFNWR1RleHRFbGVtZW50LCBDaGFydE5vZGU+KCcuZ3JvdXAtYm9yZGVyJylcbiAgICAuYXR0cignd2lkdGgnLCBub2RlV2lkdGggKyBub2RlUGFkZGluZyAqIDIpXG4gICAgLmF0dHIoJ3gnLCAtbm9kZVBhZGRpbmcpXG4gICAgLmF0dHIoJ3knLCBub2RlSGVpZ2h0IC0gKGxpbmVIZWlnaHQgKyBub2RlUGFkZGluZyAqIDIpKVxuICAgIC5hdHRyKCdvcGFjaXR5JywgKGQpID0+IChkLl9ncmV5ZWQgJiYgZC5fZ3JvdXBPcGVuID8gZ3JleWVkT3BhY2l0eSA6IGQuX2dyb3VwT3BlbiA/IDEgOiAwKSlcbiAgICAuYXR0cihcbiAgICAgICdoZWlnaHQnLFxuICAgICAgKGQpID0+XG4gICAgICAgIE1hdGguYWJzKGQucGFyZW50Ll9ncm91cENoaWxkcmVuLmxlbmd0aCAtIGQucGFyZW50LmNoaWxkcmVuLmxlbmd0aCkgKiAobm9kZUhlaWdodCAqIG5vZGVTcGFjaW5nRmFjdG9yKSArXG4gICAgICAgIG5vZGVQYWRkaW5nICtcbiAgICAgICAgKGxpbmVIZWlnaHQgKyBub2RlUGFkZGluZyAqIDIpIC8gMlxuICAgICk7XG5cbiAgY29uc3QgZ3JvdXBMYWJlbHMgPSBncm91cHNcbiAgICAuc2VsZWN0QWxsPFNWR1RleHRFbGVtZW50LCBDaGFydE5vZGU+KCcuZ3JvdXAtbGFiZWwnKVxuICAgIC5hdHRyKCd5Jywgbm9kZUhlaWdodCAvIDIpXG4gICAgLmF0dHIoJ3gnLCBub2RlUGFkZGluZylcbiAgICAudGV4dCgoZCkgPT4gZC5kYXRhLmxhYmVsKVxuICAgIC5hdHRyKCdvcGFjaXR5JywgKGQpID0+IChkLl9ncm91cE9wZW4gPyAwIDogZC5fZ3JleWVkID8gZ3JleWVkT3BhY2l0eSA6IDEpKTtcblxuICAvLyB1bm5lZWRlZCB3aXRoIGN1cnJlbnQgZGltZW5zaW9uc1xuICAvLyBncm91cExhYmVscy5lYWNoKGZ1bmN0aW9uKCkge1xuICAvLyAgIGNvbnN0IHRleHQgPSBkMy5zZWxlY3Q8U1ZHVGV4dEVsZW1lbnQsIENoYXJ0Tm9kZT4odGhpcyk7XG4gIC8vICAgY29uc3QgdGV4dFdpZHRoID0gKHRleHQubm9kZSgpIGFzIFNWR1RleHRFbGVtZW50KS5nZXRDb21wdXRlZFRleHRMZW5ndGgoKTtcbiAgLy8gICBjb25zdCBsaW5lID0gZDMuc2VsZWN0PFNWR0xpbmVFbGVtZW50LCBDaGFydE5vZGU+KHRoaXMubmV4dFNpYmxpbmcgYXMgU1ZHTGluZUVsZW1lbnQpO1xuICAvLyAgIGxpbmVcbiAgLy8gICAgIC5jbGFzc2VkKCdncm91cC1saW5lJywgdHJ1ZSlcbiAgLy8gICAgIC5hdHRyKCd4MScsIHRleHRXaWR0aCArIG5vZGVQYWRkaW5nICogMilcbiAgLy8gICAgIC5hdHRyKCd5MScsIG5vZGVIZWlnaHQgLyAyKVxuICAvLyAgICAgLmF0dHIoJ3gyJywgKG5vZGVXaWR0aCAqIDUpIC8gNyAtIG5vZGVQYWRkaW5nKVxuICAvLyAgICAgLmF0dHIoJ3kyJywgbm9kZUhlaWdodCAvIDIpXG4gIC8vICAgICAuYXR0cignb3BhY2l0eScsIChkKSA9PiAoZC5fZ3JvdXBPcGVuID8gMCA6IGQuX2dyZXllZCA/IGdyZXllZE9wYWNpdHkgOiAxKSk7XG4gIC8vIH0pO1xuXG4gIGNvbnN0IHNldEdyb3VwQnV0dG9uWFkgPSAoc2VsKSA9PlxuICAgIHNlbFxuICAgICAgLmF0dHIoJ3dpZHRoJywgKG5vZGVXaWR0aCAqIDIpIC8gNylcbiAgICAgIC5hdHRyKCdoZWlnaHQnLCAoZCkgPT4gKGQuX2dyb3VwT3BlbiA/IGxpbmVIZWlnaHQgKyBub2RlUGFkZGluZyAqIDIgOiBub2RlUGFkZGluZyAqIDIgKyBsaW5lSGVpZ2h0KSlcbiAgICAgIC5hdHRyKCd4JywgKGQpID0+IChkLl9ncm91cE9wZW4gPyAobm9kZVdpZHRoICogMi41KSAvIDcgOiAobm9kZVdpZHRoICogNSkgLyA3IC0gbm9kZVBhZGRpbmcpKVxuICAgICAgLmF0dHIoJ3knLCAoZCkgPT5cbiAgICAgICAgZC5fZ3JvdXBPcGVuXG4gICAgICAgICAgPyBncm91cE92ZXJsYXAgKyAoZ3JvdXBOb2RlU3BhY2UgLSAobGluZUhlaWdodCArIG5vZGVQYWRkaW5nICogMikpIC8gMlxuICAgICAgICAgIDogbm9kZVBhZGRpbmcgKyBsaW5lSGVpZ2h0IC8gMlxuICAgICAgKTtcblxuICBncm91cHNcbiAgICAuc2VsZWN0QWxsPFNWR1JlY3RFbGVtZW50LCBDaGFydE5vZGU+KCcuZ3JvdXAtYnV0dG9uJylcbiAgICAuY2FsbChzZXRHcm91cEJ1dHRvblhZKVxuICAgIC5zdHlsZSgncG9pbnRlci1ldmVudHMnLCAoZCkgPT4gKGQuX2dyZXllZCA/ICdub25lJyA6ICdhdXRvJykpXG4gICAgLnN0eWxlKCdzdHJva2Utb3BhY2l0eScsIChkKSA9PiAoZC5fZ3JleWVkID8gZ3JleWVkT3BhY2l0eSA6IDEpKTtcblxuICBncm91cHNcbiAgICAuc2VsZWN0QWxsPFNWR1RleHRFbGVtZW50LCBDaGFydE5vZGU+KCcuZ3JvdXAtYnV0dG9uLXRleHQnKVxuICAgIC50ZXh0KChkKSA9PiAoZC5fZ3JvdXBPcGVuID8gJ0hpZGUnIDogJ1Nob3cnKSlcbiAgICAuYXR0cigneCcsIChkKSA9PiAoZC5fZ3JvdXBPcGVuID8gbm9kZVdpZHRoIC8gMiA6IChub2RlV2lkdGggKiA2KSAvIDcgLSBub2RlUGFkZGluZykpXG4gICAgLmF0dHIoJ3knLCAoZCkgPT4gKGQuX2dyb3VwT3BlbiA/IG5vZGVNYXJnaW4gKyBsaW5lSGVpZ2h0ICsgbGluZUhlaWdodCAvIDIgOiBub2RlSGVpZ2h0IC8gMikpXG4gICAgLmF0dHIoJ2ZvbnQtc2l6ZScsIChkKSA9PiBgJHtmb250U2l6ZSAqIDEuM31weGApO1xuXG4gIHNlbGVjdGlvbi5zZWxlY3RBbGwoJy5zaWJsaW5nLW1hc2snKS5yZW1vdmUoKTtcblxuICBzZWxlY3Rpb25cbiAgICAuZmlsdGVyKChkKSA9PiBkLl9ncmV5ZWQgJiYgIWQuZGF0YS5ncm91cClcbiAgICAuYXBwZW5kKCdyZWN0JylcbiAgICAuY2xhc3NlZCgnbm9kZS1vcGVuYWJsZScsIChkKSA9PiAhIWQuaGVpZ2h0KVxuICAgIC5jbGFzc2VkKCdzaWJsaW5nLW1hc2sgbWFzay1vcGVuYWJsZScsIHRydWUpXG4gICAgLmNhbGwoc2V0Tm9kZVNpemUpO1xuXG4gIHNlbGVjdGlvblxuICAgIC5maWx0ZXIoKGQpID0+IGQuX2dyZXllZCAmJiBkLmRhdGEuZ3JvdXApXG4gICAgLmFwcGVuZCgncmVjdCcpXG4gICAgLmNsYXNzZWQoJ3NpYmxpbmctbWFzaycsIHRydWUpXG4gICAgLmNhbGwoc2V0R3JvdXBCdXR0b25YWSk7XG5cbiAgcmV0dXJuIHNlbGVjdGlvbjtcbn07XG5cbmNvbnN0IGVudGVyTm9kZXMgPSAoc2VsZWN0aW9uOiBOb2RlU2VsZWN0aW9uKSA9PiB7XG4gIGNvbnN0IG5vZGVzID0gc2VsZWN0aW9uLmZpbHRlcigoZCkgPT4gZC5kYXRhLnR5cGUgIT09IENoYXJ0Tm9kZVR5cGUucm9vdCAmJiAhZC5kYXRhLmdyb3VwKTtcblxuICBub2Rlcy5hcHBlbmQoJ3JlY3QnKS5jbGFzc2VkKCdub2RlLWJveCcsIHRydWUpO1xuXG4gIG5vZGVzXG4gICAgLmFwcGVuZCgndGV4dCcpXG4gICAgLmNsYXNzZWQoJ25vZGUtbGFiZWwnLCB0cnVlKVxuICAgIC50ZXh0KCh7IGRhdGEgfSkgPT4gZGF0YS5sYWJlbCArICcgJyArIGRhdGEudW5pdHMpXG4gICAgLmF0dHIoJ29wYWNpdHknLCAwKTtcblxuICAvLyBUZXh0IGVsZW1lbnRzIG11c3QgYmUgcmVuZGVyZWQgYmVmb3JlIHdlIGNhbiBjYWxjdWxhdGUgd3JhcHBpbmdcbiAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgY29uc3QgbGFiZWxzID0gbm9kZXMuc2VsZWN0QWxsPFNWR1RleHRFbGVtZW50LCBDaGFydE5vZGU+KCcubm9kZS1sYWJlbCcpLmNhbGwod3JhcCk7XG4gICAgbGFiZWxzLmF0dHIoJ29wYWNpdHknLCAxKTtcbiAgfSk7XG5cbiAgY29uc3QgZ3JvdXBzID0gc2VsZWN0aW9uLmZpbHRlcigoZCkgPT4gZC5kYXRhLmdyb3VwKTtcblxuICBncm91cHMuYXBwZW5kKCdyZWN0JykuYXR0cignY2xhc3MnLCAnZ3JvdXAtYm9yZGVyJyk7XG4gIGdyb3Vwcy5hcHBlbmQoJ3RleHQnKS5hdHRyKCdjbGFzcycsICdncm91cC1sYWJlbCcpO1xuICAvLyBncm91cHMuYXBwZW5kKCdsaW5lJykuYXR0cignY2xhc3MnLCAnZ3JvdXAtbGluZScpO1xuICBncm91cHMuYXBwZW5kKCdyZWN0JykuYXR0cignY2xhc3MnLCAnZ3JvdXAtYnV0dG9uJyk7XG4gIGdyb3Vwcy5hcHBlbmQoJ3RleHQnKS5hdHRyKCdjbGFzcycsICdncm91cC1idXR0b24tdGV4dCcpO1xuXG4gIGNvbnN0IHdpdGhCYXIgPSBub2Rlcy5maWx0ZXIoKGQpID0+IGQuZGF0YS5zaG93QmFyKTtcblxuICB3aXRoQmFyXG4gICAgLmZpbHRlcigoZCkgPT4gZC5kYXRhLmZyYWN0aW9uID4gMClcbiAgICAuYXBwZW5kKCdyZWN0JylcbiAgICAuY2xhc3NlZCgnYmFyLWJhY2tncm91bmQnLCB0cnVlKVxuICAgIC5hdHRyKCd3aWR0aCcsIG5vZGVDb250ZW50V2lkdGgpXG4gICAgLmNhbGwoZm9ybWF0QmFyKTtcblxuICB3aXRoQmFyXG4gICAgLmFwcGVuZCgncmVjdCcpXG4gICAgLmNsYXNzZWQoJ2Jhci1mb3JlZ3JvdW5kJywgdHJ1ZSlcbiAgICAuY2FsbChmb3JtYXRCYXIpXG4gICAgLmF0dHIoJ3dpZHRoJywgKGQpID0+IGQuZGF0YS5mcmFjdGlvbiAqIG5vZGVDb250ZW50V2lkdGgpXG4gICAgLmF0dHIoJ2ZpbGwnLCAoZCkgPT4gbm9kZUNvbG91cnNbZC5kYXRhLnR5cGVdKTtcblxuICB3aXRoQmFyXG4gICAgLmFwcGVuZCgndGV4dCcpXG4gICAgLmNsYXNzZWQoJ2Jhci1sYWJlbCcsIHRydWUpXG4gICAgLnRleHQoKHsgZGF0YSB9KSA9PlxuICAgICAgZGF0YS5mcmFjdGlvbiA9PT0gMFxuICAgICAgICA/ICdubyBjb250cmlidXRpb24nXG4gICAgICAgIDogYCR7TWF0aC5yb3VuZCgxMDAgKiBkYXRhLmZyYWN0aW9uKX0lICR7TWF0aC5yb3VuZCgxMDAgKiBkYXRhLmZyYWN0aW9uKSA9PT0gMCA/ICcgKHJvdW5kZWQpJyA6ICcnfWBcbiAgICApXG4gICAgLmF0dHIoJ3RleHQtYW5jaG9yJywgKGQpID0+IChkLmRhdGEuZnJhY3Rpb24gPT09IDAgPyAnbWlkZGxlJyA6IGQuZGF0YS5mcmFjdGlvbiA+IDAuNyA/ICdlbmQnIDogJ3N0YXJ0JykpXG4gICAgLmF0dHIoJ3gnLCAoZCkgPT5cbiAgICAgIGQuZGF0YS5mcmFjdGlvbiA9PT0gMFxuICAgICAgICA/IG5vZGVXaWR0aCAvIDJcbiAgICAgICAgOiBkLmRhdGEuZnJhY3Rpb24gKiBub2RlQ29udGVudFdpZHRoICsgbm9kZVBhZGRpbmcgKyAoZC5kYXRhLmZyYWN0aW9uID4gMC43ID8gLTQgOiA0KVxuICAgIClcbiAgICAuYXR0cigneScsIG5vZGVIZWlnaHQgLSBub2RlUGFkZGluZyAtIGJhckhlaWdodCAvIDIpO1xuXG4gIHJldHVybiBzZWxlY3Rpb247XG59O1xuXG5jb25zdCBtZXJnZWRMaW5rcyA9IChzZWxlY3Rpb246IExpbmtTZWxlY3Rpb24sIHsgdG9nZ2xpbmdHcm91cCwgc3dpdGNoaW5nU2VsZWN0aW9uIH0pID0+XG4gIHNlbGVjdGlvblxuICAgIC5zdHlsZSgnc3Ryb2tlJywgKGQpID0+IHtcbiAgICAgIGNvbnN0IGNvbG91cnMgPSB7XG4gICAgICAgIFtDaGFydE5vZGVUeXBlLm1pZHBvaW50XTogbm9kZUNvbG91cnNbQ2hhcnROb2RlVHlwZS5taWRwb2ludF0sXG4gICAgICAgIFtDaGFydE5vZGVUeXBlLmVuZHBvaW50XTogbm9kZUNvbG91cnNbQ2hhcnROb2RlVHlwZS5lbmRwb2ludF0sXG4gICAgICAgIFtDaGFydE5vZGVUeXBlLmVtaXNzaW9uXTogbm9kZUNvbG91cnNbQ2hhcnROb2RlVHlwZS5lbWlzc2lvbl1cbiAgICAgIH07XG4gICAgICByZXR1cm4gKGQudGFyZ2V0Ll9vcGVuICYmIGNvbG91cnNbZC5zb3VyY2UuZGF0YS50eXBlXSkgfHwgbnVsbDtcbiAgICB9KVxuICAgIC5hdHRyKCdzdHJva2UtZGFzaGFycmF5JywgKGQpID0+IChkLnRhcmdldC5kYXRhLmdyb3VwID8gJzIsNScgOiBudWxsKSlcbiAgICAuYXR0cignc3Ryb2tlLXdpZHRoJywgKGQpID0+IChkLnRhcmdldC5fb3BlbiA/IDMgOiBkLnRhcmdldC5fZ3JvdXBPcGVuID8gMCA6IDIpKVxuICAgIC5hdHRyKCdzdHJva2Utb3BhY2l0eScsIChkKSA9PiAoZC50YXJnZXQuX2dyZXllZCA/IDAuMSA6IDAuNikpXG4gICAgLnRyYW5zaXRpb24oKVxuICAgIC5kdXJhdGlvbihsaW5rRHVyYXRpb24pXG4gICAgLmRlbGF5KChkKSA9PiB7XG4gICAgICBjb25zdCBncm91cENsb3NpbmcgPSB0b2dnbGluZ0dyb3VwICYmICFkLnRhcmdldC5wYXJlbnQ/LmNoaWxkcmVuPy5maW5kKChuKSA9PiBuLmRhdGEuZ3JvdXApPy5fZ3JvdXBPcGVuO1xuICAgICAgcmV0dXJuIGdyb3VwQ2xvc2luZ1xuICAgICAgICA/IGdyb3VwRGVsYXlcbiAgICAgICAgOiAoc3dpdGNoaW5nU2VsZWN0aW9uID8gbm9kZUR1cmF0aW9uIDogMCkgKyBkLnNvdXJjZS5jaGlsZHJlbj8uaW5kZXhPZihkLnRhcmdldCkgKiAxMDtcbiAgICB9KVxuICAgIC5hdHRyKCdvcGFjaXR5JywgMSlcbiAgICAuYXR0cignZCcsIChkKSA9PiB7XG4gICAgICBjb25zdCB0YXJnZXREeSA9IGQudGFyZ2V0Ll9ncm91cE9wZW4gPyBub2RlUGFkZGluZyArIGxpbmVIZWlnaHQgLyAyICsgbm9kZU1hcmdpbiAqIDIgOiBub2RlSGVpZ2h0IC8gMjtcbiAgICAgIHJldHVybiBkMy5saW5rSG9yaXpvbnRhbCgpKHtcbiAgICAgICAgc291cmNlOiBbZC5zb3VyY2UueSArIG5vZGVXaWR0aCwgZC5zb3VyY2UueCArIG5vZGVIZWlnaHQgLyAyXSxcbiAgICAgICAgdGFyZ2V0OiBbZC50YXJnZXQueSwgZC50YXJnZXQueCArIHRhcmdldER5XVxuICAgICAgfSk7XG4gICAgfSk7XG5cbmNvbnN0IGdyb3VwQnlQZXJjZW50YWdlID0gKG5vZGUpID0+XG4gIFtDaGFydE5vZGVUeXBlLmVuZHBvaW50LCBDaGFydE5vZGVUeXBlLm1pZHBvaW50LCBDaGFydE5vZGVUeXBlLmVtaXNzaW9uXS5pbmNsdWRlcyhub2RlLmRhdGEudHlwZSk7XG5cbmNvbnN0IGdyb3VwUGVyY2VudGFnZSA9IChub2RlLCBwZXJjZW50YWdlID0gMC4wMikgPT4ge1xuICBjb25zdCBncm91cGVkID0gbm9kZS5fY2hpbGRyZW4/LmZpbHRlcigoY2hpbGQpID0+IGNoaWxkLmRhdGEuZnJhY3Rpb24gPCBwZXJjZW50YWdlKTtcbiAgaWYgKG5vZGUuX2NoaWxkcmVuPy5sZW5ndGggPiA2ICYmIGdyb3VwZWQ/Lmxlbmd0aCA+IDEpIHtcbiAgICBjb25zdCB0eXBlID0gbm9kZS5fY2hpbGRyZW5bMF0uZGF0YS50eXBlO1xuICAgIGNvbnN0IGdyb3VwTm9kZSA9IHtcbiAgICAgIC4uLmQzLmhpZXJhcmNoeSh7XG4gICAgICAgIGlkOiBgJHt0eXBlfS1ncm91cGAsXG4gICAgICAgIGxhYmVsOiBgJHtncm91cGVkLmxlbmd0aH0gbW9yZSB1bmRlciAke01hdGgucm91bmQocGVyY2VudGFnZSAqIDEwMCl9JS5gLFxuICAgICAgICB3ZWlnaHRlZFZhbHVlOiBudWxsLFxuICAgICAgICB2YWx1ZTogbnVsbCxcbiAgICAgICAgdHlwZSxcbiAgICAgICAgZ3JvdXA6IHRydWVcbiAgICAgIH0pLFxuICAgICAgZGVwdGg6IG5vZGUuZGVwdGggKyAxLFxuICAgICAgaGVpZ2h0OiAxLFxuICAgICAgcGFyZW50OiBub2RlXG4gICAgfTtcbiAgICBjb25zdCBub3RHcm91cGVkID0gbm9kZS5fY2hpbGRyZW4/LmZpbHRlcigoY2hpbGQpID0+IGNoaWxkLmRhdGEuZnJhY3Rpb24gPj0gcGVyY2VudGFnZSk7XG4gICAgbm9kZS5fY2hpbGRyZW4uc3BsaWNlKG5vdEdyb3VwZWQubGVuZ3RoLCAwLCBncm91cE5vZGUpO1xuICAgIG5vdEdyb3VwZWQucHVzaChncm91cE5vZGUpO1xuICAgIG5vZGUuX2dyb3VwQ2hpbGRyZW4gPSBub2RlLl9jaGlsZHJlbjtcbiAgICBub2RlLl9jaGlsZHJlbiA9IG5vdEdyb3VwZWQ7XG4gIH1cbn07XG5cbmNvbnN0IHNob3dCYXIgPSAobm9kZSkgPT5cbiAgW1xuICAgIG5vZGUucGFyZW50Py5kYXRhLnR5cGUgIT09IENoYXJ0Tm9kZVR5cGUucm9vdCxcbiAgICBub2RlLnBhcmVudD8uZGF0YS5pZCAhPT0gbm9uTENBSW5kaWNhdG9yc0lkLFxuICAgICFub2RlLmRhdGEuZ3JvdXAsXG4gICAgbm9kZS5kYXRhLmZyYWN0aW9uID49IDBcbiAgXS5ldmVyeShCb29sZWFuKTtcblxuY29uc3QgZ2V0VW5pdHNBbmRMYWJlbCA9ICh0ZXJtOiBQYXJ0aWFsPElUZXJtSlNPTkxEPiwgZmFsbGJhY2tMYWJlbCA9ICd1bmtub3duIHRlcm0nKSA9PiB7XG4gIGNvbnN0IGxhYmVsID0gdGVybT8ubmFtZSB8fCB0ZXJtPy5bJ0BpZCddIHx8IGZhbGxiYWNrTGFiZWw7XG4gIGNvbnN0IHVuaXRzID0gYCgke3Rlcm0/LnVuaXRzIHx8ICd1bmtub3duIHVuaXRzJ30pYDtcbiAgcmV0dXJuIHsgbGFiZWw6IGxhYmVsLnJlcGxhY2UodW5pdHMsICcnKS50cmltKCksIHRlcm06IGxhYmVsLCB1bml0cyB9O1xufTtcblxuY29uc3QgcXVlcnkgPSAoc2hvdWxkKSA9PiAoe1xuICBmaWVsZHM6IFsnQHR5cGUnLCAnQGlkJywgJ25hbWUnLCAndW5pdHMnLCAndGVybVR5cGUnXSxcbiAgbGltaXQ6IDEwMDAwLFxuICBxdWVyeToge1xuICAgIGJvb2w6IHtcbiAgICAgIG11c3Q6IFttYXRjaFR5cGUoTm9kZVR5cGUuVGVybSldLFxuICAgICAgc2hvdWxkLFxuICAgICAgbWluaW11bV9zaG91bGRfbWF0Y2g6IDFcbiAgICB9XG4gIH1cbn0pO1xuXG50eXBlIFRlcm0gPSBJVGVybUpTT05MRCAmIElTZWFyY2hSZXN1bHRFeHRlbmRlZCAmIHsgZG9jcz86IHN0cmluZyB9O1xuXG5jb25zdCBsZWdlbmQgPSBbXG4gIHsgdHlwZTogQ2hhcnROb2RlVHlwZS5lbmRwb2ludCwgbW9iaWxlVGV4dDogJ0VuZHBvaW50JywgdGV4dDogJ0VuZHBvaW50IEluZGljYXRvcicgfSxcbiAgeyB0eXBlOiBDaGFydE5vZGVUeXBlLm1pZHBvaW50LCB0ZXh0OiAnQ2hhcmFjdGVyaXNlZCBJbmRpY2F0b3InLCBtb2JpbGVUZXh0OiAnSW1wYWN0JyB9LFxuICB7IHR5cGU6IENoYXJ0Tm9kZVR5cGUuZW1pc3Npb24sIG1vYmlsZVRleHQ6ICdFbWlzc2lvbicsIHRleHQ6ICdFbWlzc2lvbiBvciBSZXNvdXJjZSBVc2UnIH0sXG4gIHsgdHlwZTogQ2hhcnROb2RlVHlwZS5pbnB1dCwgdGV4dDogJ0lucHV0JywgbW9iaWxlVGV4dDogJ0lucHV0JyB9LFxuICB7IHR5cGU6IENoYXJ0Tm9kZVR5cGUub3BlcmF0aW9uLCB0ZXh0OiAnT3BlcmF0aW9uJywgbW9iaWxlVGV4dDogJ09wZXJhdGlvbicgfVxuXTtcblxuY29uc3Qgd2FybmluZ3MgPSAobG9nczogSUxvZ1tdLCB0ZXJtczogeyBbaWQ6IHN0cmluZ106IFRlcm0gfSkgPT4gW1xuICAhbG9ncy5ldmVyeShsb2cgPT4gdGVybXNbbG9nLmluZGljYXRvcl0gJiYgdGVybXNbbG9nLmNvbnRyaWJ1dG9yXSkgJiYgJ21pc3NpbmctdGVybXMnXG5dLmZpbHRlcihCb29sZWFuKTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaGUtaW1wYWN0LWFzc2Vzc21lbnRzLWdyYXBoJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2ltcGFjdC1hc3Nlc3NtZW50cy1ncmFwaC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2ltcGFjdC1hc3Nlc3NtZW50cy1ncmFwaC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEltcGFjdEFzc2Vzc21lbnRzR3JhcGhDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0IHtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBpbml0aWFsVGVybXM6IHsgW2lkOiBzdHJpbmddOiBUZXJtIH07XG4gIHByaXZhdGUgYWxsVGVybXM6IHsgW2lkOiBzdHJpbmddOiBUZXJtIH07XG5cbiAgcHJpdmF0ZSByb290PzogSE5vZGU7XG4gIHByaXZhdGUgbm9kZTogTm9kZVNlbGVjdGlvbjtcbiAgcHJpdmF0ZSBsaW5rOiBMaW5rU2VsZWN0aW9uO1xuICBwcml2YXRlIHRvb2x0aXA6IFNlbGVjdGlvbjxTVkdHRWxlbWVudCwgYW55LCBIVE1MRWxlbWVudCwgdW5rbm93bj47XG4gIHByaXZhdGUgc3ZnOiBTZWxlY3Rpb248U1ZHU1ZHRWxlbWVudCwgYW55LCBIVE1MRWxlbWVudCwgdW5rbm93bj47XG4gIHByaXZhdGUgeU1pbjogbnVtYmVyO1xuICBwcml2YXRlIHlUb3RhbDogbnVtYmVyO1xuICBwcml2YXRlIGxvZ3NBbGxNb2RlbHM6IElMb2dbXTtcblxuICBAVmlld0NoaWxkKCdjaGFydCcpXG4gIHByaXZhdGUgY2hhcnRSZWY/OiBFbGVtZW50UmVmO1xuXG4gIEBJbnB1dCgpXG4gIHByaXZhdGUgaW1wYWN0QXNzZXNzbWVudHM6IElJbXBhY3RBc3Nlc3NtZW50SlNPTkxEW10gPSBbXTtcbiAgQElucHV0KClcbiAgcHJpdmF0ZSBkYXRhU3RhdGUgPSBEYXRhU3RhdGUucmVjYWxjdWxhdGVkO1xuXG4gIHB1YmxpYyBsb2FkaW5nID0gdHJ1ZTtcbiAgcHVibGljIG5vZGVDb2xvdXJzID0gbm9kZUNvbG91cnM7XG4gIHB1YmxpYyBub0RhdGEgPSBmYWxzZTtcbiAgcHVibGljIGVycm9yPzogYW55O1xuICBwdWJsaWMgd2FybmluZ3M6IHN0cmluZ1tdID0gW107XG4gIHB1YmxpYyBzaG93V2FybmluZ3MgPSBmYWxzZTtcbiAgcHVibGljIHNlbGVjdGVkSW1wYWN0QXNzZXNzbWVudElkOiBzdHJpbmc7XG4gIHB1YmxpYyBmaWx0ZXJlZEltcGFjdEFzc2Vzc21lbnRzOiBJSW1wYWN0QXNzZXNzbWVudEpTT05MRFtdO1xuICBwdWJsaWMgc2VsZWN0ZWRNb2RlbElkOiBzdHJpbmc7XG4gIHB1YmxpYyBtb2RlbHM6IFBhcnRpYWw8SVRlcm1KU09OTEQ+W107XG4gIHB1YmxpYyBsZWdlbmQgPSBsZWdlbmQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcbiAgICBwcml2YXRlIHNlYXJjaFNlcnZpY2U6IEhlU2VhcmNoU2VydmljZSxcbiAgICBwcml2YXRlIG5vZGVTZXJ2aWNlOiBIZU5vZGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgZW5naW5lU2VydmljZTogSGVFbmdpbmVTZXJ2aWNlXG4gICkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICByZXR1cm4gdGhpcy5pbml0SW1wYWN0QXNzZXNzbWVudHMoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHJldHVybiB0aGlzLnJlbG9hZENoYXJ0KCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKCdpbXBhY3RBc3Nlc3NtZW50cycgaW4gY2hhbmdlcykge1xuICAgICAgdGhpcy5pbml0SW1wYWN0QXNzZXNzbWVudHMoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucmVsb2FkQ2hhcnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdEltcGFjdEFzc2Vzc21lbnRzKCkge1xuICAgIHRoaXMuZmlsdGVyZWRJbXBhY3RBc3Nlc3NtZW50cyA9IHRoaXMuaW1wYWN0QXNzZXNzbWVudHMuZmlsdGVyKChpYSkgPT4gaWEuZW5kcG9pbnRzPy5sZW5ndGggfHwgaWEuaW1wYWN0cz8ubGVuZ3RoKTtcbiAgICB0aGlzLnNlbGVjdGVkSW1wYWN0QXNzZXNzbWVudElkID0gdGhpcy5zZWxlY3RlZEltcGFjdEFzc2Vzc21lbnRJZCB8fCB0aGlzLmZpbHRlcmVkSW1wYWN0QXNzZXNzbWVudHM/LlswXT8uWydAaWQnXTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbG9hZEluaXRpYWxUZXJtcygpIHtcbiAgICBjb25zdCB7IHJlc3VsdHM6IHRlcm1zIH0gPSBhd2FpdCB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoPElUZXJtSlNPTkxELCBOb2RlVHlwZS5UZXJtPihcbiAgICAgIHF1ZXJ5KGZpbHRlclRlcm1UeXBlcy5tYXAoKHRlcm1UeXBlKSA9PiBtYXRjaFRlcm1UeXBlKHRlcm1UeXBlKSkpXG4gICAgKTtcbiAgICBjb25zdCBhdWdtZW50ZWRUZXJtcyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgdGVybXMubWFwKGFzeW5jICh0OiBUZXJtKSA9PiB7XG4gICAgICAgIGlmICh0LnRlcm1UeXBlID09PSAnbW9kZWwnKSB7XG4gICAgICAgICAgY29uc3QgbW9kZWwgPSBhd2FpdCB0aGlzLmVuZ2luZVNlcnZpY2UubW9kZWwoeyBtb2RlbDogdFsnQGlkJ10gfSk7XG4gICAgICAgICAgdC5kb2NzID0gbW9kZWw/LmFwaURvY3NQYXRoIHx8IG1vZGVsPy5kb2NQYXRoIHx8IG1vZGVsPy5wYXRoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgICAgfSlcbiAgICApO1xuICAgIHRoaXMuaW5pdGlhbFRlcm1zID0gT2JqZWN0LmZyb21FbnRyaWVzKGF1Z21lbnRlZFRlcm1zLm1hcCgodGVybSkgPT4gW3Rlcm1bJ0BpZCddLCB0ZXJtXSkpO1xuICAgIHJldHVybiB0aGlzLmluaXRpYWxUZXJtcztcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbG9hZExvZ1Rlcm1zKGxvZ3M6IElMb2dbXSkge1xuICAgIGNvbnN0IGlucHV0SWRzID0gdW5pcXVlKGxvZ3MuZmxhdE1hcCgobCkgPT4gW2wuY29udHJpYnV0b3IsIGwuaW5kaWNhdG9yXSkuZmlsdGVyKCh0ZXJtSWQpID0+ICF0aGlzLmluaXRpYWxUZXJtc1t0ZXJtSWRdKSk7XG4gICAgY29uc3QgeyByZXN1bHRzOiBpbnB1dHMgfSA9IGF3YWl0IHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2g8SVRlcm1KU09OTEQsIE5vZGVUeXBlLlRlcm0+KFxuICAgICAgcXVlcnkoaW5wdXRJZHMubWFwKChpZCkgPT4gbWF0Y2hFeGFjdFF1ZXJ5KCdAaWQnLCBpZCkpKVxuICAgICk7XG4gICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhpbnB1dHMubWFwKCh0ZXJtKSA9PiBbdGVybVsnQGlkJ10sIHRlcm1dKSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzUmVjYWxjdWxhdGVkKCkge1xuICAgIHJldHVybiB0aGlzLmRhdGFTdGF0ZSA9PT0gRGF0YVN0YXRlLnJlY2FsY3VsYXRlZDtcbiAgfVxuXG4gIHB1YmxpYyByZWxvYWRDaGFydCgpIHtcbiAgICBjb25zdCBpbXBhY3RBc3Nlc3NtZW50ID1cbiAgICAgIHRoaXMuZmlsdGVyZWRJbXBhY3RBc3Nlc3NtZW50cy5maW5kKChpYSkgPT4gaWFbJ0BpZCddID09PSB0aGlzLnNlbGVjdGVkSW1wYWN0QXNzZXNzbWVudElkKSB8fFxuICAgICAgdGhpcy5maWx0ZXJlZEltcGFjdEFzc2Vzc21lbnRzWzBdO1xuICAgIGNvbnN0IGluZGljYXRvcnMgPSBbXG4gICAgICAuLi4oaW1wYWN0QXNzZXNzbWVudD8uZW5kcG9pbnRzIHx8IFtdKSxcbiAgICAgIC4uLihpbXBhY3RBc3Nlc3NtZW50Py5pbXBhY3RzIHx8IFtdKVxuICAgIF07XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IG9mKGltcGFjdEFzc2Vzc21lbnQpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKCgpID0+ICh0aGlzLmxvYWRpbmcgPSB0cnVlKSksXG4gICAgICAgIG1lcmdlTWFwKG5vZGUgPT4gKHRoaXMuaW5pdGlhbFRlcm1zID8gb2Yobm9kZSkgOiBmcm9tKHRoaXMubG9hZEluaXRpYWxUZXJtcygpKS5waXBlKG1hcCgoKSA9PiBub2RlKSkpKSxcbiAgICAgICAgbWVyZ2VNYXAobm9kZSA9PlxuICAgICAgICAgIHRoaXMubm9kZVNlcnZpY2UuZ2V0TG9nKHtcbiAgICAgICAgICAgIC4uLm5vZGUsXG4gICAgICAgICAgICBkYXRhU3RhdGU6IERhdGFTdGF0ZS5yZWNhbGN1bGF0ZWRcbiAgICAgICAgICB9KVxuICAgICAgICApLFxuICAgICAgICBtYXAoKHZhbHVlKSA9PiAodmFsdWUgPyBwYXJzZUxpbmVzKHZhbHVlKSA6IFtdKSksXG4gICAgICAgIG1lcmdlQWxsKCksXG4gICAgICAgIGZpbHRlcigoeyBkYXRhIH0pID0+IGRhdGEubG9nZ2VyID09PSAnaGVzdGlhX2VhcnRoLm1vZGVscycgJiYgZGF0YS5sZXZlbCA9PT0gTGV2ZWwuZGVidWcpLFxuICAgICAgICBtYXAoKHsgZGF0YSB9KSA9PiBwYXJzZU1lc3NhZ2UoZGF0YS5tZXNzYWdlKSksXG4gICAgICAgIGZpbHRlcigobWVzc2FnZSkgPT4gJ25vZGUnIGluIG1lc3NhZ2UpLFxuICAgICAgICBtYXAocGFyc2VMb2cpLFxuICAgICAgICBmaWx0ZXIoKGxvZykgPT4gW1xuICAgICAgICAgICEhbG9nLmluZGljYXRvcixcbiAgICAgICAgICAhIWxvZy5jb250cmlidXRvcixcbiAgICAgICAgICAhaXNOYU4obG9nLndlaWdodGVkVmFsdWUpLFxuICAgICAgICAgIGxvZy5jb2VmZmljaWVudCA+IDAsXG4gICAgICAgICAgaW5kaWNhdG9ycy5zb21lKChlcnUpID0+IGVydS50ZXJtWydAaWQnXSA9PT0gbG9nLmluZGljYXRvcilcbiAgICAgICAgXS5ldmVyeShCb29sZWFuKSksXG4gICAgICAgIGdyb3VwQnkoKGxvZykgPT4gW2xvZy5pbmRpY2F0b3IsIGxvZy5jb250cmlidXRvciwgbG9nLm1vZGVsSWRdLmpvaW4oJy8nKSksXG4gICAgICAgIG1lcmdlTWFwKChncm91cCkgPT4gZ3JvdXAucGlwZSh0b0FycmF5KCkpKSxcbiAgICAgICAgbWFwKCh2YWx1ZXM6IElMb2dbXSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGxvZyA9IHZhbHVlc1swXTtcbiAgICAgICAgICBjb25zdCB7IHdlaWdodGVkVG90YWwsIHRvdGFsIH0gPSB2YWx1ZXMucmVkdWNlKFxuICAgICAgICAgICAgKHByZXYsIGN1cnIpID0+ICh7XG4gICAgICAgICAgICAgIHdlaWdodGVkVG90YWw6IHByZXYud2VpZ2h0ZWRUb3RhbCArIGN1cnIud2VpZ2h0ZWRWYWx1ZSxcbiAgICAgICAgICAgICAgdG90YWw6IHByZXYudG90YWwgKyBjdXJyLnZhbHVlXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHsgd2VpZ2h0ZWRUb3RhbDogMCwgdG90YWw6IDAgfVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBjb25zdCBpbnB1dHNPYmogPSAoaW1wYWN0QXNzZXNzbWVudC5lbWlzc2lvbnNSZXNvdXJjZVVzZSB8fCBbXSlcbiAgICAgICAgICAgIC5maWx0ZXIoKGVydSkgPT4gZXJ1LnRlcm1bJ0BpZCddID09PSBsb2cuY29udHJpYnV0b3IgJiYgZXJ1LmlucHV0cz8ubGVuZ3RoKVxuICAgICAgICAgICAgLnJlZHVjZSgoYWNjLCBlcnUpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgaW5wdXRJZCA9IGVydS5pbnB1dHMubWFwKChpKSA9PiBpWydAaWQnXSkuam9pbignOycpO1xuICAgICAgICAgICAgICBjb25zdCBjdXJyZW50T3BlcmF0aW9ucyA9IGVydS5vcGVyYXRpb25cbiAgICAgICAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIGlkOiBlcnUub3BlcmF0aW9uWydAaWQnXSxcbiAgICAgICAgICAgICAgICAgICAgICAuLi5nZXRVbml0c0FuZExhYmVsKGVydS5vcGVyYXRpb24pLFxuICAgICAgICAgICAgICAgICAgICAgIG1vZGVsSWQ6IGxvZy5tb2RlbElkLFxuICAgICAgICAgICAgICAgICAgICAgIHdlaWdodGVkVmFsdWU6IGVydS52YWx1ZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgOiBbXTtcblxuICAgICAgICAgICAgICBhY2NbaW5wdXRJZF0gPSBhY2NbaW5wdXRJZF1cbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgLi4uYWNjW2lucHV0SWRdLFxuICAgICAgICAgICAgICAgICAgICB3ZWlnaHRlZFZhbHVlOiBhY2NbaW5wdXRJZF0ud2VpZ2h0ZWRWYWx1ZSArIGVydS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgbW9kZWxJZDogbG9nLm1vZGVsSWQsXG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbnM6IFsuLi5hY2NbaW5wdXRJZF0ub3BlcmF0aW9ucywgLi4uY3VycmVudE9wZXJhdGlvbnNdXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBpbnB1dElkLFxuICAgICAgICAgICAgICAgICAgICAuLi5nZXRVbml0c0FuZExhYmVsKFxuICAgICAgICAgICAgICAgICAgICAgIGVydS5pbnB1dHMubGVuZ3RoID09PSAxID8gZXJ1LmlucHV0c1swXSA6IHsgbmFtZTogJ0lucHV0IGdyb3VwICh1bmRlciBkZXZlbG9wbWVudCknIH1cbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgbW9kZWxJZDogbG9nLm1vZGVsSWQsXG4gICAgICAgICAgICAgICAgICAgIHdlaWdodGVkVmFsdWU6IGVydS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uczogWy4uLmN1cnJlbnRPcGVyYXRpb25zXVxuICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgIH0sIHt9KTtcbiAgICAgICAgICBjb25zdCBpbnB1dHM6IElJbnB1dExvZ1tdID0gT2JqZWN0LnZhbHVlcyhpbnB1dHNPYmopO1xuICAgICAgICAgIHJldHVybiB7IC4uLmxvZywgd2VpZ2h0ZWRWYWx1ZTogd2VpZ2h0ZWRUb3RhbCwgdmFsdWU6IHRvdGFsLCBpbnB1dHMgfSBhcyBJTG9nO1xuICAgICAgICB9KSxcbiAgICAgICAgdG9BcnJheSgpLFxuICAgICAgICBtZXJnZU1hcCgobG9ncykgPT4gZnJvbSh0aGlzLmxvYWRMb2dUZXJtcyhsb2dzKSkucGlwZShcbiAgICAgICAgICBtYXAobG9nVGVybXMgPT4ge1xuICAgICAgICAgICAgdGhpcy5hbGxUZXJtcyA9IHsgLi4udGhpcy5pbml0aWFsVGVybXMsIC4uLmxvZ1Rlcm1zIH07XG4gICAgICAgICAgICByZXR1cm4gbG9ncztcbiAgICAgICAgICB9KVxuICAgICAgICApKSxcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgIHRoaXMuZXJyb3IgPSBlcnI7XG4gICAgICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRhcCgoKSA9PiAodGhpcy5sb2FkaW5nID0gZmFsc2UpKSxcbiAgICAgICAgdGFwKChsb2dzKSA9PiAodGhpcy5ub0RhdGEgPSAhbG9ncy5sZW5ndGgpKSxcbiAgICAgICAgdGFwKChsb2dzOiBJTG9nW10pID0+IHtcbiAgICAgICAgICB0aGlzLndhcm5pbmdzID0gd2FybmluZ3MobG9ncywgdGhpcy5hbGxUZXJtcyk7XG4gICAgICAgICAgdGhpcy5zaG93V2FybmluZ3MgPSB0aGlzLndhcm5pbmdzLmxlbmd0aCA+IDA7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChsb2dzOiBJTG9nW10pID0+IHtcbiAgICAgICAgdGhpcy5yb290ID0gbnVsbDtcbiAgICAgICAgdGhpcy5ub2RlID0gbnVsbDtcbiAgICAgICAgdGhpcy5saW5rID0gbnVsbDtcbiAgICAgICAgY29uc3QgaGFzRGVmYXVsdE1vZGVsTG9ncyA9IGxvZ3Muc29tZSgobG9nKSA9PiBsb2cubW9kZWxJZCA9PT0gZ2V0RGVmYXVsdE1vZGVsSWQobG9nLmluZGljYXRvcikpO1xuICAgICAgICB0aGlzLm1vZGVscyA9IFtcbiAgICAgICAgICAuLi4oaGFzRGVmYXVsdE1vZGVsTG9nc1xuICAgICAgICAgICAgPyBbeyAnQGlkJzogZGVmYXVsdEluZGljYXRvcnNNb2RlbElkLCBuYW1lOiBkZWZhdWx0SW5kaWNhdG9yc01vZGVsTmFtZSB9XVxuICAgICAgICAgICAgOiBbXSksXG4gICAgICAgICAgLi4udW5pcXVlKGxvZ3MubWFwKCh7IG1vZGVsSWQgfSkgPT4gdGhpcy5hbGxUZXJtc1ttb2RlbElkXSB8fCB7ICdAaWQnOiBtb2RlbElkIH0pKVxuICAgICAgICBdO1xuICAgICAgICB0aGlzLnNlbGVjdGVkTW9kZWxJZCA9IHRoaXMubW9kZWxzPy5bMF0/LlsnQGlkJ107XG4gICAgICAgIGlmIChsb2dzLmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMubG9nc0FsbE1vZGVscyA9IGxvZ3M7XG4gICAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pbml0Q2hhcnQoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgaW5pdENoYXJ0KCkge1xuICAgIGNvbnN0IGxvZ3MgPSB0aGlzLmxvZ3NBbGxNb2RlbHMuZmlsdGVyKFxuICAgICAgKGxvZykgPT5cbiAgICAgICAgbG9nLm1vZGVsSWQgPT09XG4gICAgICAgICh0aGlzLnNlbGVjdGVkTW9kZWxJZCA9PT0gZGVmYXVsdEluZGljYXRvcnNNb2RlbElkID8gZ2V0RGVmYXVsdE1vZGVsSWQobG9nLmluZGljYXRvcikgOiB0aGlzLnNlbGVjdGVkTW9kZWxJZClcbiAgICApO1xuICAgIGNvbnN0IHRvdGFsc1BlckluZGljYXRvciA9IGxvZ3MucmVkdWNlKChhY2MsIGxvZykgPT4ge1xuICAgICAgYWNjW2xvZy5pbmRpY2F0b3JdID0gKGFjY1tsb2cuaW5kaWNhdG9yXSB8fCAwKSArIGxvZy53ZWlnaHRlZFZhbHVlO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG4gICAgY29uc3QgaW5kaWNhdG9yczogeyBbaWQ6IHN0cmluZ106IE5vZGVEYXR1bSB9ID0gbG9ncy5yZWR1Y2UoKGFjYywgbG9nKSA9PiB7XG4gICAgICBjb25zdCB0eXBlTWFwcGluZyA9IHtcbiAgICAgICAgW1Rlcm1UZXJtVHlwZS5lbmRwb2ludEluZGljYXRvcl06IENoYXJ0Tm9kZVR5cGUuZW5kcG9pbnQsXG4gICAgICAgIFtUZXJtVGVybVR5cGUuY2hhcmFjdGVyaXNlZEluZGljYXRvcl06IENoYXJ0Tm9kZVR5cGUubWlkcG9pbnQsXG4gICAgICAgIFtUZXJtVGVybVR5cGUuZW1pc3Npb25dOiBDaGFydE5vZGVUeXBlLmVtaXNzaW9uLFxuICAgICAgICBbVGVybVRlcm1UeXBlLnJlc291cmNlVXNlXTogQ2hhcnROb2RlVHlwZS5lbWlzc2lvbixcbiAgICAgICAgW1Rlcm1UZXJtVHlwZS5vcGVyYXRpb25dOiBDaGFydE5vZGVUeXBlLm9wZXJhdGlvblxuICAgICAgfTtcblxuICAgICAgY29uc3QgY29udHJpYnV0b3JUeXBlID0gdHlwZU1hcHBpbmdbdGhpcy5hbGxUZXJtc1tsb2cuY29udHJpYnV0b3JdPy50ZXJtVHlwZV0gfHwgQ2hhcnROb2RlVHlwZS5pbnB1dDtcbiAgICAgIGNvbnN0IGluZGljYXRvclR5cGUgPSB0eXBlTWFwcGluZ1t0aGlzLmFsbFRlcm1zW2xvZy5pbmRpY2F0b3JdPy50ZXJtVHlwZV07XG4gICAgICBjb25zdCBjb250cmlidXRvck5vZGUgPSB7XG4gICAgICAgIGlkOiBsb2cuY29udHJpYnV0b3IsXG4gICAgICAgIC4uLmdldFVuaXRzQW5kTGFiZWwodGhpcy5hbGxUZXJtc1tsb2cuY29udHJpYnV0b3JdLCBsb2cuY29udHJpYnV0b3IpLFxuICAgICAgICB0eXBlOiBjb250cmlidXRvclR5cGUsXG4gICAgICAgIHZhbHVlOiBsb2cudmFsdWUsXG4gICAgICAgIHdlaWdodGVkVmFsdWU6IGxvZy53ZWlnaHRlZFZhbHVlLFxuICAgICAgICBtb2RlbElkOiBsb2cubW9kZWxJZCxcbiAgICAgICAgZnJhY3Rpb246IGxvZy53ZWlnaHRlZFZhbHVlIC8gdG90YWxzUGVySW5kaWNhdG9yW2xvZy5pbmRpY2F0b3JdLFxuICAgICAgICBjaGlsZHJlbjpcbiAgICAgICAgICBjb250cmlidXRvclR5cGUgPT09IENoYXJ0Tm9kZVR5cGUuZW1pc3Npb25cbiAgICAgICAgICAgID8gbG9nLmlucHV0cy5tYXAoKGkpID0+ICh7XG4gICAgICAgICAgICAgICAgLi4uaSxcbiAgICAgICAgICAgICAgICB0eXBlOiBDaGFydE5vZGVUeXBlLmlucHV0LFxuICAgICAgICAgICAgICAgIGZyYWN0aW9uOiBpLndlaWdodGVkVmFsdWUgLyBsb2cudmFsdWUsXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IGkub3BlcmF0aW9ucy5tYXAoKG8pID0+ICh7XG4gICAgICAgICAgICAgICAgICAuLi5vLFxuICAgICAgICAgICAgICAgICAgdHlwZTogQ2hhcnROb2RlVHlwZS5vcGVyYXRpb24sXG4gICAgICAgICAgICAgICAgICBmcmFjdGlvbjogby53ZWlnaHRlZFZhbHVlIC8gaS53ZWlnaHRlZFZhbHVlXG4gICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgOiBbXVxuICAgICAgfTtcblxuICAgICAgYWNjW2xvZy5pbmRpY2F0b3JdXG4gICAgICAgID8gYWNjW2xvZy5pbmRpY2F0b3JdLmNoaWxkcmVuLnB1c2goY29udHJpYnV0b3JOb2RlKVxuICAgICAgICA6IChhY2NbbG9nLmluZGljYXRvcl0gPSB7XG4gICAgICAgICAgICBpZDogbG9nLmluZGljYXRvcixcbiAgICAgICAgICAgIC4uLmdldFVuaXRzQW5kTGFiZWwodGhpcy5hbGxUZXJtc1tsb2cuaW5kaWNhdG9yXSwgbG9nLmluZGljYXRvciksXG4gICAgICAgICAgICBtb2RlbElkOiBsb2cubW9kZWxJZCxcbiAgICAgICAgICAgIHR5cGU6IGluZGljYXRvclR5cGUsXG4gICAgICAgICAgICB2YWx1ZTogdG90YWxzUGVySW5kaWNhdG9yW2xvZy5pbmRpY2F0b3JdLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtjb250cmlidXRvck5vZGVdXG4gICAgICAgICAgfSk7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcbiAgICBjb25zdCBpbmRpY2F0b3JBcnJheSA9IE9iamVjdC52YWx1ZXMoaW5kaWNhdG9ycyk7XG4gICAgY29uc3QgbGlua2VkSW5kaWNhdG9ycyA9IGluZGljYXRvckFycmF5XG4gICAgICAvLyBsaW5rIGVuZHBvaW50cyB0byBtaWRwb2ludHMgYW5kIG1pZHBvaW50cyB0byBhbnkgY2hpbGQgbWlkcG9pbnRzXG4gICAgICAubWFwKChpbmRpY2F0b3IpID0+ICh7XG4gICAgICAgIC4uLmluZGljYXRvcixcbiAgICAgICAgY2hpbGRyZW46IGluZGljYXRvci5jaGlsZHJlbi5tYXAoKGNoaWxkKSA9PiB7XG4gICAgICAgICAgY29uc3QgcHJlZml4UmVtb3ZlZCA9IGluZGljYXRvci50eXBlID09PSBDaGFydE5vZGVUeXBlLmVuZHBvaW50ICYmIGNoaWxkLmxhYmVsLnNwbGl0KCcsICcpWzFdO1xuICAgICAgICAgIHJldHVybiBjaGlsZC50eXBlID09PSBDaGFydE5vZGVUeXBlLm1pZHBvaW50XG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAuLi5jaGlsZCxcbiAgICAgICAgICAgICAgICBsYWJlbDogcHJlZml4UmVtb3ZlZFxuICAgICAgICAgICAgICAgICAgPyAnWy4uLl0nICsgcHJlZml4UmVtb3ZlZC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHByZWZpeFJlbW92ZWQuc2xpY2UoMSlcbiAgICAgICAgICAgICAgICAgIDogY2hpbGQubGFiZWwsXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IGluZGljYXRvcnNbY2hpbGQuaWRdPy5jaGlsZHJlblxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IGNoaWxkO1xuICAgICAgICB9KVxuICAgICAgfSkpXG4gICAgICAvLyByZW1vdmUgZHVwbGljYXRlZCBpbmRpY2F0b3JzXG4gICAgICAuZmlsdGVyKFxuICAgICAgICAoaW5kaWNhdG9yKSA9PiAhaW5kaWNhdG9yQXJyYXkuc29tZSgocGFyZW50KSA9PiBwYXJlbnQuY2hpbGRyZW4uc29tZSgoY2hpbGQpID0+IGNoaWxkLmlkID09PSBpbmRpY2F0b3IuaWQpKVxuICAgICAgKTtcblxuICAgIGNvbnN0IGVuZHBvaW50cyA9IGxpbmtlZEluZGljYXRvcnMuZmlsdGVyKChpbmRpY2F0b3IpID0+IGluZGljYXRvci50eXBlID09PSBDaGFydE5vZGVUeXBlLmVuZHBvaW50KTtcbiAgICBjb25zdCBub25MQ0FJbmRpY2F0b3JzID0gbGlua2VkSW5kaWNhdG9ycy5maWx0ZXIoKGluZGljYXRvcikgPT4gaW5kaWNhdG9yLnR5cGUgPT09IENoYXJ0Tm9kZVR5cGUubWlkcG9pbnQpO1xuXG4gICAgZW5kcG9pbnRzLmxlbmd0aCAmJlxuICAgICAgbm9uTENBSW5kaWNhdG9ycy5sZW5ndGggJiZcbiAgICAgIGVuZHBvaW50cy5wdXNoKHtcbiAgICAgICAgaWQ6IG5vbkxDQUluZGljYXRvcnNJZCxcbiAgICAgICAgbGFiZWw6ICdPdGhlciBpbmRpY2F0b3JzJyxcbiAgICAgICAgdGVybTogJ24vYScsXG4gICAgICAgIG1vZGVsSWQ6ICduL2EnLFxuICAgICAgICB1bml0czogJycsXG4gICAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgICB3ZWlnaHRlZFZhbHVlOiBudWxsLFxuICAgICAgICB0eXBlOiBDaGFydE5vZGVUeXBlLmVuZHBvaW50LFxuICAgICAgICBmcmFjdGlvbjogbnVsbCxcbiAgICAgICAgY2hpbGRyZW46IG5vbkxDQUluZGljYXRvcnNcbiAgICAgIH0pO1xuXG4gICAgY29uc3Qgcm9vdCA9IGQzLmhpZXJhcmNoeTxOb2RlRGF0dW0+KHtcbiAgICAgIGlkOiAnZHVtbXktcm9vdCcsXG4gICAgICBsYWJlbDogJycsXG4gICAgICB0ZXJtOiAnJyxcbiAgICAgIG1vZGVsSWQ6ICcnLFxuICAgICAgdmFsdWU6IG51bGwsXG4gICAgICB3ZWlnaHRlZFZhbHVlOiBudWxsLFxuICAgICAgdW5pdHM6ICcnLFxuICAgICAgdHlwZTogQ2hhcnROb2RlVHlwZS5yb290LFxuICAgICAgY2hpbGRyZW46IGVuZHBvaW50cy5sZW5ndGggPyBlbmRwb2ludHMgOiBsaW5rZWRJbmRpY2F0b3JzXG4gICAgfSk7XG5cbiAgICBjb25zdCBpbmNsdWRlZFR5cGVzID0gdW5pcXVlKHJvb3QuZGVzY2VuZGFudHMoKS5tYXAoKG4pID0+IG4uZGF0YS50eXBlKSk7XG4gICAgdGhpcy5sZWdlbmQgPSBsZWdlbmQuZmlsdGVyKCh7IHR5cGUgfSkgPT4gaW5jbHVkZWRUeXBlcy5pbmNsdWRlcyh0eXBlKSk7XG5cbiAgICB0aGlzLnJvb3QgPSByb290XG4gICAgICAuc29ydCgoYSwgYikgPT4gYi5kYXRhLmZyYWN0aW9uIC0gYS5kYXRhLmZyYWN0aW9uKVxuICAgICAgLmVhY2hBZnRlcigobm9kZSkgPT4ge1xuICAgICAgICBpZiAobm9kZS5kYXRhLmZyYWN0aW9uID09PSAwKSB7XG4gICAgICAgICAgbm9kZS5jaGlsZHJlbiA9IG51bGw7XG4gICAgICAgICAgKG5vZGUuaGVpZ2h0IGFzIG51bWJlcikgPSAwO1xuICAgICAgICB9XG4gICAgICAgIG5vZGUuZGF0YS50eXBlICE9PSBDaGFydE5vZGVUeXBlLnJvb3QgJiYgY29sbGFwc2VDaGlsZHJlbihub2RlKTtcbiAgICAgICAgZ3JvdXBCeVBlcmNlbnRhZ2Uobm9kZSkgJiYgZ3JvdXBQZXJjZW50YWdlKG5vZGUpO1xuICAgICAgICBub2RlLmRhdGEuc2hvd0JhciA9IHNob3dCYXIobm9kZSk7XG4gICAgICAgIG5vZGUuZGF0YS5tb2RlbE5hbWUgPSB0aGlzLmFsbFRlcm1zW25vZGUuZGF0YS5tb2RlbElkXT8ubmFtZTtcbiAgICAgICAgbm9kZS5kYXRhLm1vZGVsRG9jcyA9IHRoaXMuYWxsVGVybXNbbm9kZS5kYXRhLm1vZGVsSWRdPy5kb2NzO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLnJlbmRlckNoYXJ0KCk7XG4gIH1cblxuICBwcml2YXRlIHJlbmRlckNoYXJ0KCkge1xuICAgIHRoaXMuc3ZnID0gZDMuc2VsZWN0KHRoaXMuY2hhcnRSZWY/Lm5hdGl2ZUVsZW1lbnQpO1xuICAgIHRoaXMuc3ZnLnNlbGVjdEFsbCgnKicpLnJlbW92ZSgpO1xuICAgIC8vIHJvb3Qgbm9kZSBpcyBhbHdheXMgcG9zaXRpb25lZCBhdCDin6gwLCAw4p+pXG4gICAgY29uc3QgaW5uZXJIZWlnaHQgPSAodGhpcy5yb290LmNoaWxkcmVuLmxlbmd0aCAtIDEpICogbm9kZUhlaWdodCAqIG5vZGVTcGFjaW5nRmFjdG9yICsgbm9kZUhlaWdodDtcbiAgICB0aGlzLnlNaW4gPSAobm9kZUhlaWdodCAtIGlubmVySGVpZ2h0KSAvIDIgLSBtYXJnaW4udG9wO1xuICAgIHRoaXMueVRvdGFsID0gaW5uZXJIZWlnaHQgKyBtYXJnaW4udG9wICsgbWFyZ2luLmJvdHRvbTtcbiAgICB0aGlzLnN2Z1xuICAgICAgLmF0dHIoJ3ZpZXdCb3gnLCBbLW1hcmdpbi5sZWZ0LCB0aGlzLnlNaW4sIHdpZHRoLCB0aGlzLnlUb3RhbF0uam9pbignICcpKVxuICAgICAgLmF0dHIoJ2ZvbnQtc2l6ZScsIGAke2ZvbnRTaXplfXB4YCk7XG5cbiAgICB0aGlzLm5vZGUgPSB0aGlzLnN2Zy5hcHBlbmQoJ2cnKS5zZWxlY3RBbGwoJ2cnKTtcbiAgICB0aGlzLmxpbmsgPSB0aGlzLnN2Zy5hcHBlbmQoJ2cnKS5zZWxlY3RBbGwoJ3BhdGgnKTtcbiAgICB0aGlzLnRvb2x0aXAgPSB0aGlzLnN2Zy5hcHBlbmQoJ2cnKS5jbGFzc2VkKCd0b29sdGlwJywgdHJ1ZSkuc3R5bGUoJ29wYWNpdHknLCAwKTtcblxuICAgIHRoaXMuaGFuZGxlTm9kZUNsaWNrKFxuICAgICAgbnVsbCxcbiAgICAgIHRoaXMucm9vdC5maW5kKChub2RlKSA9PiBub2RlLmRlcHRoID09PSAxKVxuICAgICk7XG4gIH1cblxuICAvLyBmbGlwIHgveSB0byBnbyBsZWZ0LXJpZ2h0IGluc3RlYWQgb2YgdG9wLWJvdHRvbVxuICBwcml2YXRlIHVwZGF0ZUNoYXJ0KHsgdG9nZ2xpbmdHcm91cCA9IGZhbHNlLCBzd2l0Y2hpbmdTZWxlY3Rpb24gPSBmYWxzZSB9ID0ge30pIHtcbiAgICBjb25zdCByb290ID0gdGhpcy5yb290O1xuICAgIGNvbnN0IHRyZWVMYXlvdXQgPSBkM1xuICAgICAgLnRyZWU8Tm9kZURhdHVtPigpXG4gICAgICAubm9kZVNpemUoW25vZGVIZWlnaHQsIG5vZGVXaWR0aF0pXG4gICAgICAuc2VwYXJhdGlvbigoLi4ubmVpZ2hib3VyczogQ2hhcnROb2RlW10pID0+XG4gICAgICAgIG5laWdoYm91cnMuc29tZSgobikgPT4gbi5kYXRhLmdyb3VwICYmIG4uX2dyb3VwT3BlbikgPyAxIC0gZ3JvdXBPdmVybGFwIC8gbm9kZUhlaWdodCA6IG5vZGVTcGFjaW5nRmFjdG9yXG4gICAgICApO1xuICAgIGNvbnN0IHRyZWU6IENoYXJ0Tm9kZSA9IHRyZWVMYXlvdXQocm9vdCk7XG4gICAgY29uc3QgbGlua3M6IExpbmtbXSA9IHRyZWUubGlua3MoKS5maWx0ZXIoKGQpID0+IGQuc291cmNlLmRhdGEudHlwZSAhPT0gQ2hhcnROb2RlVHlwZS5yb290KSB8fCBbXTtcbiAgICBjb25zdCBub2RlcyA9IHRyZWUuZGVzY2VuZGFudHMoKS5yZXZlcnNlKCk7XG5cbiAgICBub2Rlcy5mb3JFYWNoKChkKSA9PiB7XG4gICAgICBkLnkgPVxuICAgICAgICAoZC5kZXB0aCAtIDEgKyAoT2JqZWN0LmtleXMoQ2hhcnROb2RlVHlwZSkubGVuZ3RoIC0gMSAtIHRoaXMubGVnZW5kLmxlbmd0aCkgLyAyKSAqIChub2RlV2lkdGggKyBsYXllclNwYWNpbmcpO1xuICAgIH0pO1xuXG4gICAgLy8gQnkgZGVmYXVsdCB0aGUgdHJlZSBleHBhbmRzIHN5bW1ldHJpY2FsbHkgdXB3YXJkcyBhbmQgZG93bndhcmRzIGZyb20gdGhlIHNlbGVjdGVkIG5vZGUuXG4gICAgLy8gV2UgbW92ZSBjaGlsZHJlbiBkb3duIHRvIHByZXZlbnQgZXhwYW5zaW9uIHVwd2FyZHMgb3IgdXAgdG8gbWluaW1pc2UgZXhwYW5zaW9uIGRvd253YXJkc1xuICAgIGNvbnN0IG1pbmltaXNlSGVpZ2h0ID0gKHsgcHJldmlvdXNUYW5zbGF0ZVksIHByZXZpb3VzWVRvdGFsIH0sIGRlcHRoOiBudW1iZXIpID0+IHtcbiAgICAgIGNvbnN0IG1heFlUb3RhbCA9IE1hdGgubWF4KHByZXZpb3VzWVRvdGFsLCB0aGlzLnlUb3RhbCk7XG4gICAgICBjb25zdCBwYXJlbnQgPSB0cmVlLmZpbmQoKG5vZGUpID0+IChub2RlLmRlcHRoID09PSBkZXB0aCAtIDEpICYmIG5vZGUuX29wZW4pO1xuICAgICAgcGFyZW50Py5jaGlsZHJlbj8uZm9yRWFjaCgobm9kZSkgPT4gKG5vZGUueCArPSBwcmV2aW91c1RhbnNsYXRlWSkpO1xuXG4gICAgICBjb25zdCB7IG1pbjogbWluWCwgbWF4OiBtYXhYIH0gPSAocGFyZW50Py5jaGlsZHJlbiB8fCBbXSkucmVkdWNlKFxuICAgICAgICAoeyBtaW4sIG1heCB9LCBuKSA9PiAoe1xuICAgICAgICAgIG1pbjogbi54IDwgbWluID8gbi54IDogbWluLFxuICAgICAgICAgIG1heDogbi54ID4gbWF4ID8gbi54IDogbWF4XG4gICAgICAgIH0pLFxuICAgICAgICB7IG1pbjogcGFyZW50Py54LCBtYXg6IHBhcmVudD8ueCB9XG4gICAgICApO1xuXG4gICAgICBjb25zdCB7IHlNaW4sIHlUb3RhbCB9ID0gcGFyZW50Py5jaGlsZHJlbj8ubGVuZ3RoXG4gICAgICAgID8geyB5TWluOiBtaW5YIC0gbWFyZ2luLnRvcCwgeVRvdGFsOiBtYXhYIC0gbWluWCArIG1hcmdpbi5ib3R0b20gKyBtYXJnaW4udG9wICsgbm9kZUhlaWdodCB9XG4gICAgICAgIDogeyB5TWluOiBudWxsLCB5VG90YWw6IG51bGwgfTtcblxuICAgICAgY29uc3Qgb3ZlcmZsb3dBYm92ZSA9IHRoaXMueU1pbiAtIHlNaW47IC8vIHBvc2l0aXZlIHdoZW4gb3ZlcmZsb3dzIGFib3ZlXG4gICAgICBjb25zdCBvdmVyZmxvd0JlbG93ID0geVRvdGFsICsgeU1pbiAtIChtYXhZVG90YWwgKyB0aGlzLnlNaW4pOyAvLyBwb3NpdGl2ZSB3aGVuIG92ZXJmbG93cyBiZWxvd1xuICAgICAgLy8gLSB0cmFuc2xhdGVZIHdoZW4gb3ZlcmZsb3dzIGFib3ZlOiBwb3NpdGl2ZVxuICAgICAgLy8gLSB0cmFuc2xhdGVZIHdoZW4gb3ZlcmZsb3dzIGJlbG93OiBuZWdhdGl2ZSBieSBzbWFsbGVzdCBvZiB1bmRlcmZsb3cgYWJvdmUgb3Igb3ZlcmZsb3cgYmVsb3dcbiAgICAgIC8vIC0gdHJhbnNsYXRlWSB3aGVuIG5vIG92ZXJmbG93OiAwXG4gICAgICBjb25zdCB0cmFuc2xhdGVZID1cbiAgICAgICAgb3ZlcmZsb3dBYm92ZSA+IDAgPyBvdmVyZmxvd0Fib3ZlIDogb3ZlcmZsb3dCZWxvdyA+IDAgPyBNYXRoLm1heCgtb3ZlcmZsb3dCZWxvdywgb3ZlcmZsb3dBYm92ZSkgOiAwO1xuXG4gICAgICBwYXJlbnQ/LmNoaWxkcmVuPy5mb3JFYWNoKChub2RlKSA9PiAobm9kZS54ICs9IHRyYW5zbGF0ZVkpKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcHJldmlvdXNZVG90YWw6IE1hdGgubWF4KHlUb3RhbCwgcHJldmlvdXNZVG90YWwpLFxuICAgICAgICBwcmV2aW91c1RhbnNsYXRlWTogdHJhbnNsYXRlWSArIHByZXZpb3VzVGFuc2xhdGVZXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCB7IHByZXZpb3VzWVRvdGFsOiBuZXdIZWlnaHQgfSA9IFtcbiAgICAgIDIsIDMsIDQsIDVcbiAgICBdLnJlZHVjZShtaW5pbWlzZUhlaWdodCwge1xuICAgICAgcHJldmlvdXNUYW5zbGF0ZVk6IDAsXG4gICAgICBwcmV2aW91c1lUb3RhbDogdGhpcy55VG90YWxcbiAgICB9KTtcblxuICAgIHRoaXMuc3ZnLnRyYW5zaXRpb24oKS5kdXJhdGlvbigzMDApLmF0dHIoJ3ZpZXdCb3gnLCBbLW1hcmdpbi5sZWZ0LCB0aGlzLnlNaW4sIHdpZHRoLCBuZXdIZWlnaHRdLmpvaW4oJyAnKSk7XG5cbiAgICB0aGlzLm5vZGUgPSB0aGlzLm5vZGVcbiAgICAgIC5kYXRhKFxuICAgICAgICBub2RlcyxcbiAgICAgICAgKGQpID0+IGAke2QucGFyZW50Py5wYXJlbnQ/LnBhcmVudD8uZGF0YS5pZH0tJHtkLnBhcmVudD8ucGFyZW50Py5kYXRhLmlkfS0ke2QucGFyZW50Py5kYXRhLmlkfS0ke2QuZGF0YS5pZH1gXG4gICAgICApXG4gICAgICAuam9pbihcbiAgICAgICAgKGVudGVyKSA9PlxuICAgICAgICAgIGVudGVyXG4gICAgICAgICAgICAuYXBwZW5kKCdnJylcbiAgICAgICAgICAgIC5jYWxsKGVudGVyTm9kZXMpXG4gICAgICAgICAgICAuYXR0cignb3BhY2l0eScsIDApXG4gICAgICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgKGQpID0+ICd0cmFuc2xhdGUoJyArICh0b2dnbGluZ0dyb3VwID8gZC55IDogZC55IC0gbm9kZVdpZHRoIC8gMikgKyAnLCcgKyBkLnggKyAnKScpLFxuICAgICAgICAodXBkYXRlKSA9PiB1cGRhdGUsXG4gICAgICAgIChleGl0KSA9PlxuICAgICAgICAgIGV4aXRcbiAgICAgICAgICAgIC50cmFuc2l0aW9uKClcbiAgICAgICAgICAgIC5kdXJhdGlvbihub2RlRHVyYXRpb24gLyAyKVxuICAgICAgICAgICAgLmRlbGF5KChkKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gZC5wYXJlbnQ/LmNoaWxkcmVuIHx8IGQucGFyZW50Py5fY2hpbGRyZW47XG4gICAgICAgICAgICAgIHJldHVybiAoY2hpbGRyZW4/Lmxlbmd0aCAtIGNoaWxkcmVuPy5pbmRleE9mKGQpIC0gMSkgKiAxMDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuZWFzZShkMy5lYXNlRWxhc3RpY0luLmFtcGxpdHVkZSgwLjUpLnBlcmlvZCgxKSlcbiAgICAgICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAoZCkgPT4gJ3RyYW5zbGF0ZSgnICsgKHRvZ2dsaW5nR3JvdXAgPyBkLnkgOiBkLnkgLSBub2RlV2lkdGggLyAyKSArICcsJyArIGQueCArICcpJylcbiAgICAgICAgICAgIC5hdHRyKCdvcGFjaXR5JywgMClcbiAgICAgICAgICAgIC5yZW1vdmUoKVxuICAgICAgKTtcblxuICAgIHRoaXMubm9kZVxuICAgICAgLmNhbGwobWVyZ2VkTm9kZXMsIHsgdGlwU2VsZWN0aW9uOiB0aGlzLnRvb2x0aXAgfSlcbiAgICAgIC50cmFuc2l0aW9uKClcbiAgICAgIC5kZWxheSgoZCkgPT4ge1xuICAgICAgICBjb25zdCBncm91cENsb3NpbmcgPSB0b2dnbGluZ0dyb3VwICYmICFkLnBhcmVudD8uY2hpbGRyZW4/LmZpbmQoKG4pID0+IG4uZGF0YS5ncm91cCk/Ll9ncm91cE9wZW47XG4gICAgICAgIHJldHVybiBncm91cENsb3NpbmcgPyBncm91cERlbGF5IDogKHN3aXRjaGluZ1NlbGVjdGlvbiA/IG5vZGVEdXJhdGlvbiA6IDApICsgZC5wYXJlbnQ/LmNoaWxkcmVuLmluZGV4T2YoZCkgKiAxMDtcbiAgICAgIH0pXG4gICAgICAuZHVyYXRpb24obm9kZUR1cmF0aW9uKVxuICAgICAgLmVhc2UoZDMuZWFzZUVsYXN0aWNPdXQuYW1wbGl0dWRlKDAuNSkucGVyaW9kKDEpKVxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIChkKSA9PiBgdHJhbnNsYXRlKCR7ZC55fSwke2QueH0pYClcbiAgICAgIC5hdHRyKCdvcGFjaXR5JywgMSk7XG5cbiAgICB0aGlzLm5vZGUuc2VsZWN0QWxsKCcubm9kZS1vcGVuYWJsZScpLm9uKCdjbGljaycsIHRoaXMuaGFuZGxlTm9kZUNsaWNrLmJpbmQodGhpcykpO1xuICAgIHRoaXMubm9kZS5zZWxlY3RBbGwoJy5ncm91cC1idXR0b24nKS5vbignY2xpY2snLCB0aGlzLmhhbmRsZUdyb3VwQnV0dG9uQ2xpY2suYmluZCh0aGlzKSk7XG5cbiAgICB0aGlzLmxpbmsgPSB0aGlzLmxpbmtcbiAgICAgIC5kYXRhKFxuICAgICAgICBsaW5rcyxcbiAgICAgICAgKGQpID0+IGAke2Quc291cmNlLnBhcmVudD8ucGFyZW50Py5kYXRhLmlkfS0ke2Quc291cmNlLnBhcmVudD8uZGF0YS5pZH0tJHtkLnNvdXJjZS5kYXRhLmlkfS0ke2QudGFyZ2V0LmRhdGEuaWR9YFxuICAgICAgKVxuICAgICAgLmpvaW4oXG4gICAgICAgIChlbnRlcikgPT4gZW50ZXIuYXBwZW5kKCdwYXRoJykuY2xhc3NlZCgnbGluay1wYXRoJywgdHJ1ZSkuYXR0cignb3BhY2l0eScsIDApLFxuICAgICAgICAodXBkYXRlKSA9PiB1cGRhdGUsXG4gICAgICAgIChleGl0KSA9PlxuICAgICAgICAgIGV4aXRcbiAgICAgICAgICAgIC50cmFuc2l0aW9uKClcbiAgICAgICAgICAgIC5kdXJhdGlvbihsaW5rRHVyYXRpb24gLyAyKVxuICAgICAgICAgICAgLmRlbGF5KChkKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gZC5zb3VyY2UucGFyZW50Py5jaGlsZHJlbiB8fCBkLnNvdXJjZS5wYXJlbnQ/Ll9jaGlsZHJlbjtcbiAgICAgICAgICAgICAgcmV0dXJuIChjaGlsZHJlbj8ubGVuZ3RoIC0gY2hpbGRyZW4/LmluZGV4T2YoZC50YXJnZXQpIC0gMSkgKiAxMDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuYXR0cignb3BhY2l0eScsIDApXG4gICAgICAgICAgICAucmVtb3ZlKClcbiAgICAgIClcbiAgICAgIC5jYWxsKG1lcmdlZExpbmtzLCB7IHRvZ2dsaW5nR3JvdXAsIHN3aXRjaGluZ1NlbGVjdGlvbiB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlR3JvdXBCdXR0b25DbGljayhfZXZlbnQ6IGFueSwgZDogQ2hhcnROb2RlKSB7XG4gICAgaWYgKGQuX2dyZXllZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkLl9ncm91cE9wZW4gPSAhZC5fZ3JvdXBPcGVuO1xuICAgIGNvbnN0IGNoaWxkcmVuID0gZC5wYXJlbnQuX2dyb3VwQ2hpbGRyZW47XG4gICAgZC5wYXJlbnQuX2dyb3VwQ2hpbGRyZW4gPSBkLnBhcmVudC5jaGlsZHJlbjtcbiAgICBkLnBhcmVudC5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICAgIHRoaXMudXBkYXRlQ2hhcnQoeyB0b2dnbGluZ0dyb3VwOiB0cnVlIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVOb2RlQ2xpY2soX2V2ZW50OiBhbnksIGQ6IENoYXJ0Tm9kZSB8IEhOb2RlKTogdm9pZCB7XG4gICAgZC5fb3BlbiA9ICFkLl9vcGVuO1xuICAgIGNvbnN0IHN3aXRjaGluZ1NlbGVjdGlvbiA9ICdfZ3JleWVkJyBpbiBkICYmIGQuX2dyZXllZDtcbiAgICBkLnBhcmVudC5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4ge1xuICAgICAgY2hpbGQuX2dyZXllZCA9IGZhbHNlO1xuICAgICAgaWYgKGNoaWxkICE9PSBkKSB7XG4gICAgICAgIGNoaWxkLl9vcGVuID0gZmFsc2U7XG4gICAgICAgIGNvbGxhcHNlQ2hpbGRyZW4oY2hpbGQpO1xuICAgICAgICBjaGlsZC5fZ3JleWVkID0gZC5fb3BlbjtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBkLmNoaWxkcmVuID8gY29sbGFwc2VDaGlsZHJlbihkKSA6IHJlc3RvcmVDaGlsZHJlbihkKTtcbiAgICB0aGlzLnVwZGF0ZUNoYXJ0KHsgc3dpdGNoaW5nU2VsZWN0aW9uIH0pO1xuICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiIWxvYWRpbmc7IGVsc2UgbG9hZGVyXCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1JlY2FsY3VsYXRlZDsgZWxzZSBzaG93U3dpdGNoUmVjYWxjdWxhdGVkXCI+XG4gICAgPGRpdiBjbGFzcz1cImZpZWxkIGhhcy1hZGRvbnMgcHQtMiBweC0zIG1iLTBcIiAqbmdJZj1cImZpbHRlcmVkSW1wYWN0QXNzZXNzbWVudHMubGVuZ3RoID4gMVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2xcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJidXR0b24gaXMtc21hbGwgaXMtc3RhdGljXCI+U2VsZWN0IGFuIEltcGFjdCBBc3Nlc3NtZW50PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbCBpcy1leHBhbmRlZFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0IGlzLXNtYWxsIGlzLWZ1bGx3aWR0aFwiPlxuICAgICAgICAgIDxzZWxlY3QgWyhuZ01vZGVsKV09XCJzZWxlY3RlZEltcGFjdEFzc2Vzc21lbnRJZFwiIChjaGFuZ2UpPVwicmVsb2FkQ2hhcnQoKVwiIFtkaXNhYmxlZF09XCJsb2FkaW5nXCI+XG4gICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCB2YWx1ZSBvZiBmaWx0ZXJlZEltcGFjdEFzc2Vzc21lbnRzXCIgW3ZhbHVlXT1cInZhbHVlWydAaWQnXVwiPlxuICAgICAgICAgICAgICB7eyB2YWx1ZS5uYW1lIHx8IHZhbHVlWydAaWQnXSB9fVxuICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cIiFub0RhdGFcIiBjbGFzcz1cImZpZWxkIGhhcy1hZGRvbnMgcHktMiBweC0zXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbFwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImJ1dHRvbiBpcy1zbWFsbCBpcy1zdGF0aWNcIj5TZWxlY3QgYSBtb2RlbDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2wgaXMtZXhwYW5kZWRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdCBpcy1zbWFsbCBpcy1mdWxsd2lkdGhcIj5cbiAgICAgICAgICA8c2VsZWN0IFsobmdNb2RlbCldPVwic2VsZWN0ZWRNb2RlbElkXCIgKGNoYW5nZSk9XCJpbml0Q2hhcnQoKVwiIFtkaXNhYmxlZF09XCJsb2FkaW5nXCI+XG4gICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBtb2RlbCBvZiBtb2RlbHNcIiBbdmFsdWVdPVwibW9kZWxbJ0BpZCddXCI+e3sgbW9kZWwubmFtZSB8fCBtb2RlbFsnQGlkJ10gfX08L29wdGlvbj5cbiAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbm9EYXRhICYmICFzaG93V2FybmluZ3NcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW5zIGlzLWNlbnRlcmVkIHB5LTIgaXMtc2l6ZS03IGlzLW1vYmlsZSBpcy1tdWx0aWxpbmVcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgbGVnZW5kSXRlbSBvZiBsZWdlbmRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uIGlzLW5hcnJvdyBweS0wIGlzLWZsZXgtbW9iaWxlIGlzLWZsZXgtZGlyZWN0aW9uLWNvbHVtbiBpcy1hbGlnbi1pdGVtcy1jZW50ZXIgaXMtbGVnZW5kLWl0ZW1cIj5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgIGNsYXNzPVwia2V5LWNvbG91ciBpcy1pbmxpbmUtYmxvY2stdGFibGV0IGlzLWFsaWduLW1pZGRsZVwiXG4gICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwibm9kZUNvbG91cnNbbGVnZW5kSXRlbS50eXBlXVwiXG4gICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgPHN0cm9uZyBjbGFzcz1cImhhcy10ZXh0LWJsYWNrIGlzLWFsaWduLW1pZGRsZSBrZXktbGFiZWwgaXMtcGwtdGFibGV0LTJcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpcy1oaWRkZW4tZGVza3RvcFwiPnt7bGVnZW5kSXRlbS5tb2JpbGVUZXh0fX08L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaXMtaGlkZGVuLXRvdWNoXCI+e3tsZWdlbmRJdGVtLnRleHR9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvc3Ryb25nPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPHAgKm5nSWY9XCJlcnJvclwiIGNsYXNzPVwiaGFzLXRleHQtZGFuZ2VyIHB5LTNcIj5cbiAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImVycm9yXCI+XG4gICAgICAgIDxwICpuZ1N3aXRjaENhc2U9XCInbm90LWZvdW5kJ1wiPkltcGFjdCBBc3Nlc3NtZW50IG5vdCBmb3VuZDwvcD5cbiAgICAgICAgPGRpdiAqbmdTd2l0Y2hEZWZhdWx0PlxuICAgICAgICAgIDxzcGFuPkFuIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJyZWQ6PC9zcGFuPlxuICAgICAgICAgIDxwIGNsYXNzPVwibXQtMVwiPnt7IGVycm9yIH19PC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvcD5cblxuICAgIDxkaXYgKm5nSWY9XCJzaG93V2FybmluZ3NcIiBjbGFzcz1cImhhcy10ZXh0LXdhcm5pbmcgcHktMyBoYXMtdGV4dC1jZW50ZXJlZFwiPlxuICAgICAgPHAgY2xhc3M9XCJpcy1tYi0yXCIgKm5nRm9yPVwibGV0IHdhcm5pbmcgb2Ygd2FybmluZ3NcIj5cbiAgICAgICAgPGZhLWljb24gY2xhc3M9XCJwci0yXCIgaWNvbj1cImV4Y2xhbWF0aW9uLXRyaWFuZ2xlXCI+PC9mYS1pY29uPlxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJ3YXJuaW5nXCI+XG4gICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidtaXNzaW5nLXRlcm1zJ1wiPkNhbGN1bGF0aW9ucyBhcmUgbm90IHVwIHRvIGRhdGUuIFNvbWUgdGVybXMgbWF5IG5vdCBkaXNwbGF5IGNvcnJlY3RseS48L3NwYW4+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9wPlxuICAgICAgPHAgY2xhc3M9XCJpcy11bmRlcmxpbmVkIGlzLXNpemUtN1wiPjxhIChjbGljayk9XCJzaG93V2FybmluZ3MgPSBmYWxzZVwiPlZpZXcgY2hhcnQgYW55d2F5LjwvYT48L3A+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2ICpuZ0lmPVwibm9EYXRhXCIgY2xhc3M9XCJweS0zXCI+XG4gICAgICA8cCBjbGFzcz1cImhhcy10ZXh0LWNlbnRlcmVkXCI+Tm8gY2hhcnQgYXZhaWxhYmxlLjwvcD5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cblxuPGRpdiBbY2xhc3MuaXMtaGlkZGVuXT1cIiFpc1JlY2FsY3VsYXRlZCB8fCBsb2FkaW5nIHx8IGVycm9yIHx8IG5vRGF0YSB8fCBzaG93V2FybmluZ3NcIiBjbGFzcz1cImNoYXJ0LWNvbnRhaW5lciBpcy1yZWxhdGl2ZSB3LTEwMFwiPlxuICA8c3ZnIGNsYXNzPVwidy0xMDAgaC0xMDBcIiAjY2hhcnQ+PC9zdmc+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNsb2FkZXI+XG4gIDxkaXYgY2xhc3M9XCJsb2FkaW5nLWNvbnRhaW5lciBoYXMtdGV4dC1jZW50ZXIgbXktNSBweS01XCI+XG4gICAgPGZhLWljb24gaWNvbj1cInNwaW5uZXJcIiBbcHVsc2VdPVwidHJ1ZVwiIHNpemU9XCJsZ1wiPjwvZmEtaWNvbj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3Nob3dTd2l0Y2hSZWNhbGN1bGF0ZWQ+XG4gIDxwIGNsYXNzPVwiaGFzLXRleHQtY2VudGVyZWQgcHktM1wiPk5vIGNoYXJ0IGF2YWlsYWJsZS4gU3dpdGNoIHRvIDxjb2RlPnJlY2FsY3VsYXRlZDwvY29kZT4gdmVyc2lvbi48L3A+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
845
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wYWN0LWFzc2Vzc21lbnRzLWdyYXBoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9pbXBhY3QtYXNzZXNzbWVudHMvaW1wYWN0LWFzc2Vzc21lbnRzLWdyYXBoL2ltcGFjdC1hc3Nlc3NtZW50cy1ncmFwaC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvaW1wYWN0LWFzc2Vzc21lbnRzL2ltcGFjdC1hc3Nlc3NtZW50cy1ncmFwaC9pbXBhY3QtYXNzZXNzbWVudHMtZ3JhcGguY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFJVCxTQUFTLEVBRVQsS0FBSyxFQUlOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEcsT0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzlDLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBRXpCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEVBQXdDLFFBQVEsRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzFELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRXRFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7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QUFFLEVBQUU7WUFDbEMsS0FBSyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDdEIsSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO2dCQUNmLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO2dCQUNwQixnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDeEIsS0FBSyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO2FBQ3pCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxrQkFBa0IsRUFBRSxDQUFDLENBQUM7SUFDM0MsQ0FBQzs7NEhBbmdCVSwrQkFBK0I7Z0hBQS9CLCtCQUErQix1UUNybUI1QywreEhBcUZBOzJGRGdoQmEsK0JBQStCO2tCQUwzQyxTQUFTOytCQUNFLDZCQUE2QjtxTEFtQi9CLFFBQVE7c0JBRGYsU0FBUzt1QkFBQyxPQUFPO2dCQUlWLGlCQUFpQjtzQkFEeEIsS0FBSztnQkFHRSxTQUFTO3NCQURoQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBOZ1pvbmUsXG4gIE9uSW5pdCxcbiAgVmlld0NoaWxkLFxuICBBZnRlclZpZXdJbml0LFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkNoYW5nZXMsXG4gIFNpbXBsZUNoYW5nZXNcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmaWx0ZXIsIGdyb3VwQnksIG1hcCwgbWVyZ2VBbGwsIG1lcmdlTWFwLCB0b0FycmF5LCBjYXRjaEVycm9yLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBmcm9tLCBvZiwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgKiBhcyBkMyBmcm9tICdkMyc7XG5pbXBvcnQgeyBIaWVyYXJjaHlOb2RlLCBTZWxlY3Rpb24sIEJhc2VUeXBlLCBIaWVyYXJjaHlQb2ludE5vZGUsIEhpZXJhcmNoeVBvaW50TGluayB9IGZyb20gJ2QzJztcbmltcG9ydCB7IERhdGFTdGF0ZSB9IGZyb20gJ0BoZXN0aWEtZWFydGgvYXBpJztcbmltcG9ydCB7IElJbXBhY3RBc3Nlc3NtZW50SlNPTkxELCBJVGVybUpTT05MRCwgTm9kZVR5cGUsIFRlcm1UZXJtVHlwZSB9IGZyb20gJ0BoZXN0aWEtZWFydGgvc2NoZW1hJztcbmltcG9ydCB7IGdldERlZmF1bHRNb2RlbElkIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9nbG9zc2FyeSc7XG5pbXBvcnQgeyB1bmlxdWUsIHRvUHJlY2lzaW9uIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC91dGlscyc7XG5pbXBvcnQgeyBmYUV4dGVybmFsTGlua0FsdCB9IGZyb20gJ0Bmb3J0YXdlc29tZS9mcmVlLXNvbGlkLXN2Zy1pY29ucyc7XG5cbmltcG9ydCB7IGJhc2VVcmwgfSBmcm9tICcuLi8uLi9jb21tb24vdXRpbHMnO1xuaW1wb3J0IHsgZDN3cmFwIH0gZnJvbSAnLi4vLi4vY29tbW9uL2QzLXV0aWxzJztcbmltcG9ydCB7IExldmVsLCBwYXJzZUxpbmVzLCBwYXJzZU1lc3NhZ2UgfSBmcm9tICcuLi8uLi9jb21tb24vbG9ncy11dGlscyc7XG5pbXBvcnQgeyBIZUVuZ2luZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9lbmdpbmUvZW5naW5lLnNlcnZpY2UnO1xuaW1wb3J0IHsgSGVOb2RlU2VydmljZSB9IGZyb20gJy4uLy4uL25vZGUvbm9kZS5zZXJ2aWNlJztcbmltcG9ydCB7IEhlU2VhcmNoU2VydmljZSwgSVNlYXJjaFJlc3VsdEV4dGVuZGVkIH0gZnJvbSAnLi4vLi4vc2VhcmNoL3NlYXJjaC5zZXJ2aWNlJztcbmltcG9ydCB7IG1hdGNoVGVybVR5cGUsIG1hdGNoRXhhY3RRdWVyeSwgbWF0Y2hUeXBlIH0gZnJvbSAnLi4vLi4vc2VhcmNoL3NlYXJjaC5tb2RlbCc7XG5cbmVudW0gQ2hhcnROb2RlVHlwZSB7XG4gIG1pZHBvaW50ID0gJ21pZHBvaW50JyxcbiAgZW1pc3Npb24gPSAnZW1pc3Npb24nLFxuICBlbmRwb2ludCA9ICdlbmRwb2ludCcsXG4gIGlucHV0ID0gJ2lucHV0JyxcbiAgb3BlcmF0aW9uID0gJ29wZXJhdGlvbicsXG4gIHJvb3QgPSAncm9vdCdcbn1cblxuaW50ZXJmYWNlIE5vZGVEYXR1bSB7XG4gIGlkOiBzdHJpbmc7XG4gIHRlcm06IHN0cmluZztcbiAgbW9kZWxJZDogc3RyaW5nO1xuICBtb2RlbE5hbWU/OiBzdHJpbmc7XG4gIG1vZGVsRG9jcz86IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgdHlwZTogQ2hhcnROb2RlVHlwZTtcbiAgdmFsdWU6IG51bWJlciB8IG51bGw7XG4gIHdlaWdodGVkVmFsdWU6IG51bWJlciB8IG51bGw7XG4gIGZyYWN0aW9uPzogbnVtYmVyO1xuICBjaGlsZHJlbj86IE5vZGVEYXR1bVtdO1xuICBncm91cD86IGJvb2xlYW47XG4gIHNob3dCYXI/OiBib29sZWFuO1xuICB1bml0czogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgQ2hhcnROb2RlIGV4dGVuZHMgSGllcmFyY2h5UG9pbnROb2RlPE5vZGVEYXR1bT4ge1xuICBfY2hpbGRyZW4/OiBDaGFydE5vZGVbXTsgLy8gY2hpbGRyZW4gb2YgY29sbGFwc2VkIG5vZGVzXG4gIF9ncm91cENoaWxkcmVuPzogQ2hhcnROb2RlW107IC8vIGFsbCBjaGlsZHJlbiB3aGVuIGdyb3VwIGNsb3NlZDsgdW5ncm91cGVkIGNoaWxkcmVuIHdoZW4gZ3JvdXAgb3BlblxuICBfb3Blbj86IGJvb2xlYW47XG4gIF9ncmV5ZWQ/OiBib29sZWFuO1xuICBfZ3JvdXBPcGVuPzogYm9vbGVhbjtcbiAgX3RpbWVvdXQ/OiBOb2RlSlMuVGltZW91dDtcbn1cblxuaW50ZXJmYWNlIEhOb2RlIGV4dGVuZHMgSGllcmFyY2h5Tm9kZTxOb2RlRGF0dW0+IHtcbiAgX2NoaWxkcmVuPzogSE5vZGVbXTtcbiAgX2dyb3VwQ2hpbGRyZW4/OiBITm9kZVtdO1xuICBfZ3JvdXBPcGVuPzogYm9vbGVhbjtcbiAgX29wZW4/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgTGluayBleHRlbmRzIEhpZXJhcmNoeVBvaW50TGluazxOb2RlRGF0dW0+IHtcbiAgc291cmNlOiBDaGFydE5vZGU7XG4gIHRhcmdldDogQ2hhcnROb2RlO1xufVxuXG50eXBlIE5vZGVTZWxlY3Rpb24gPSBTZWxlY3Rpb248U1ZHR0VsZW1lbnQgfCBCYXNlVHlwZSwgQ2hhcnROb2RlLCBTVkdHRWxlbWVudCwgdW5rbm93bj47XG50eXBlIExpbmtTZWxlY3Rpb24gPSBTZWxlY3Rpb248U1ZHUGF0aEVsZW1lbnQgfCBCYXNlVHlwZSwgTGluaywgU1ZHR0VsZW1lbnQsIHVua25vd24+O1xuXG5pbnRlcmZhY2UgSUlucHV0TG9nIHtcbiAgbGFiZWw6IHN0cmluZztcbiAgdW5pdHM6IHN0cmluZztcbiAgd2VpZ2h0ZWRWYWx1ZTogbnVtYmVyO1xuICB2YWx1ZTogbnVtYmVyO1xuICBvcGVyYXRpb25zOiB7XG4gICAgd2VpZ2h0ZWRWYWx1ZTogbnVtYmVyO1xuICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgdW5pdHM6IHN0cmluZztcbiAgICB2YWx1ZTogbnVtYmVyO1xuICB9W107XG59XG5pbnRlcmZhY2UgSUxvZyB7XG4gIGluZGljYXRvcjogc3RyaW5nO1xuICBjb250cmlidXRvcjogc3RyaW5nO1xuICBjb2VmZmljaWVudDogbnVtYmVyO1xuICB2YWx1ZTogbnVtYmVyO1xuICB3ZWlnaHRlZFZhbHVlOiBudW1iZXI7XG4gIG1vZGVsSWQ6IHN0cmluZztcbiAgaW5wdXRzPzogSUlucHV0TG9nW107XG59XG5cbmNvbnN0IHBhcnNlTG9nID0gKGRhdGE6IGFueSk6IElMb2cgPT4gKHtcbiAgaW5kaWNhdG9yOiBkYXRhWydrZXkvdGVybSddIHx8IGRhdGEudGVybSB8fCBkYXRhLmluZGljYXRvcixcbiAgY29udHJpYnV0b3I6IGRhdGEubm9kZSxcbiAgY29lZmZpY2llbnQ6ICtkYXRhLmNvZWZmaWNpZW50LFxuICBtb2RlbElkOiBkYXRhLm1vZGVsIHx8ICdVbmtub3duJyxcbiAgd2VpZ2h0ZWRWYWx1ZTogK2RhdGEudmFsdWUgKiArZGF0YS5jb2VmZmljaWVudCxcbiAgdmFsdWU6ICtkYXRhLnZhbHVlXG59KTtcblxuY29uc3QgZmlsdGVyVGVybVR5cGVzID0gW1xuICBUZXJtVGVybVR5cGUucmVzb3VyY2VVc2UsXG4gIFRlcm1UZXJtVHlwZS5lbWlzc2lvbixcbiAgVGVybVRlcm1UeXBlLmNoYXJhY3RlcmlzZWRJbmRpY2F0b3IsXG4gIFRlcm1UZXJtVHlwZS5lbmRwb2ludEluZGljYXRvcixcbiAgVGVybVRlcm1UeXBlLm1vZGVsXG5dO1xuY29uc3Qgbm9kZUNvbG91cnMgPSB7XG4gIFtDaGFydE5vZGVUeXBlLmVuZHBvaW50XTogJ2JsdWUnLFxuICBbQ2hhcnROb2RlVHlwZS5taWRwb2ludF06ICdyZWQnLFxuICBbQ2hhcnROb2RlVHlwZS5lbWlzc2lvbl06ICdwdXJwbGUnLFxuICBbQ2hhcnROb2RlVHlwZS5pbnB1dF06ICdncmVlbicsXG4gIFtDaGFydE5vZGVUeXBlLm9wZXJhdGlvbl06ICdvcmFuZ2UnXG59O1xuY29uc3Qgd2lkdGggPSA4MDA7XG5jb25zdCBtYXJnaW4gPSB7IHRvcDogMTAsIHJpZ2h0OiAyMCwgYm90dG9tOiAxMCwgbGVmdDogMjAgfTtcbmNvbnN0IGZvbnRTaXplID0gTWF0aC5mbG9vcih3aWR0aCAvIDEwMCk7XG5jb25zdCBub2RlUGFkZGluZyA9IGZvbnRTaXplIC8gMjtcbmNvbnN0IGxpbmVIZWlnaHQgPSBmb250U2l6ZSAqIDEuMjtcbmNvbnN0IGJhckhlaWdodCA9IGxpbmVIZWlnaHQ7XG5cbmNvbnN0IG5vZGVIZWlnaHQgPSBub2RlUGFkZGluZyAqIDIgKyAyICogbGluZUhlaWdodCArIGJhckhlaWdodDtcbmNvbnN0IG5vZGVXaWR0aCA9IG5vZGVIZWlnaHQgKiAyICogMS42MTg7XG5jb25zdCBub2RlQ29udGVudFdpZHRoID0gbm9kZVdpZHRoIC0gbm9kZVBhZGRpbmcgKiAyO1xuY29uc3QgbGF5ZXJTcGFjaW5nID0gKHdpZHRoIC0gbWFyZ2luLmxlZnQgLSBtYXJnaW4ucmlnaHQgLSBub2RlV2lkdGggKiA1KSAvIDQ7XG5jb25zdCBub2RlTWFyZ2luID0gbm9kZVBhZGRpbmcgKiAwLjc1O1xuY29uc3Qgbm9kZVNwYWNpbmdGYWN0b3IgPSAobm9kZUhlaWdodCArIG5vZGVNYXJnaW4gKiAyKSAvIG5vZGVIZWlnaHQ7XG5jb25zdCBub2RlRHVyYXRpb24gPSA2MDA7XG5jb25zdCBsaW5rRHVyYXRpb24gPSAyMDA7XG5jb25zdCBncm91cERlbGF5ID0gbm9kZUR1cmF0aW9uIC0gMTAwO1xuY29uc3Qgbm9uTENBSW5kaWNhdG9yc0lkID0gJ25vbkxDQUluZGljYXRvcnMnO1xuY29uc3QgZ3JleWVkT3BhY2l0eSA9IDAuMjtcbmNvbnN0IGRlZmF1bHRJbmRpY2F0b3JzTW9kZWxJZCA9ICdkZWZhdWx0SW5kaWNhdG9yc01vZGVsSWQnO1xuY29uc3QgZGVmYXVsdEluZGljYXRvcnNNb2RlbE5hbWUgPSAnRGVmYXVsdCBJbmRpY2F0b3JzIChtdWx0aS1tb2RlbCknO1xuY29uc3QgZ3JvdXBPdmVybGFwID0gbGluZUhlaWdodCAtIG5vZGVQYWRkaW5nIC0gbm9kZU1hcmdpbjtcbmNvbnN0IGdyb3VwTm9kZVNwYWNlID0gbm9kZUhlaWdodCAtIDIgKiBncm91cE92ZXJsYXA7XG5cbmNvbnN0IGNvbGxhcHNlQ2hpbGRyZW4gPSAobm9kZTogQ2hhcnROb2RlIHwgSE5vZGUpID0+IHtcbiAgbm9kZS5fY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuIHx8IG5vZGUuX2NoaWxkcmVuO1xuICBub2RlLmNoaWxkcmVuID0gbnVsbDtcbiAgcmV0dXJuIG5vZGU7XG59O1xuXG5jb25zdCByZXN0b3JlQ2hpbGRyZW4gPSAobm9kZTogQ2hhcnROb2RlIHwgSE5vZGUpID0+IHtcbiAgbm9kZS5jaGlsZHJlbiA9IG5vZGUuX2NoaWxkcmVuO1xuICBub2RlLl9jaGlsZHJlbiA9IG51bGw7XG4gIHJldHVybiBub2RlO1xufTtcblxuY29uc3Qgd3JhcCA9IChzZWxlY3Rpb246IFNlbGVjdGlvbjxTVkdUZXh0RWxlbWVudCwgQ2hhcnROb2RlLCBhbnksIGFueT4sIG1heFdpZHRoID0gbm9kZUNvbnRlbnRXaWR0aCkgPT4ge1xuICBzZWxlY3Rpb24uZWFjaChmdW5jdGlvbihkKSB7XG4gICAgY29uc3QgdCA9IGQzLnNlbGVjdDxTVkdUZXh0RWxlbWVudCwgQ2hhcnROb2RlPih0aGlzKTtcbiAgICBkM3dyYXA8Q2hhcnROb2RlPih0LCB7XG4gICAgICBtYXhXaWR0aCxcbiAgICAgIG1heExpbmVzOiBkLmRhdGEuc2hvd0JhciA/IDIgOiAzLFxuICAgICAgdmNlbnRyZTogIWQuZGF0YS5zaG93QmFyLFxuICAgICAgd29yZHM6IFsuLi5kLmRhdGEubGFiZWwuc3BsaXQoL1xccysvKSwgZC5kYXRhLnVuaXRzXSxcbiAgICAgIG93bkxpbmVXb3JkOiBkLmRhdGEudW5pdHMsXG4gICAgICBuSGVpZ2h0OiBub2RlSGVpZ2h0LFxuICAgICAgbEhlaWdodDogbGluZUhlaWdodFxuICAgIH0pO1xuICB9KTtcbn07XG5cbmNvbnN0IHNldE5vZGVTaXplID0gKHNlbGVjdGlvbikgPT4gc2VsZWN0aW9uLmF0dHIoJ3dpZHRoJywgbm9kZVdpZHRoKS5hdHRyKCdoZWlnaHQnLCBub2RlSGVpZ2h0KTtcblxuY29uc3QgZm9ybWF0QmFyID0gKHNlbGVjdGlvbjogTm9kZVNlbGVjdGlvbikgPT5cbiAgc2VsZWN0aW9uXG4gICAgLmF0dHIoJ2hlaWdodCcsIGJhckhlaWdodClcbiAgICAuYXR0cigncngnLCAnMScpXG4gICAgLmF0dHIoJ3J5JywgJzEnKVxuICAgIC5hdHRyKCd5Jywgbm9kZUhlaWdodCAtIG5vZGVQYWRkaW5nIC0gYmFySGVpZ2h0KVxuICAgIC5hdHRyKCd4Jywgbm9kZVBhZGRpbmcpO1xuXG5jb25zdCBpc1R5cGVXaXRob3V0VmFsdWUgPSAobm9kZURhdHVtKSA9PiBbQ2hhcnROb2RlVHlwZS5pbnB1dCwgQ2hhcnROb2RlVHlwZS5vcGVyYXRpb25dLmluY2x1ZGVzKG5vZGVEYXR1bS5kYXRhLnR5cGUpO1xuXG5jb25zdCBnZXRXZWlnaHRlZFZhbHVlVGV4dCA9IChub2RlRGF0dW0pID0+XG4gIGAke3RvUHJlY2lzaW9uKG5vZGVEYXR1bS5kYXRhLndlaWdodGVkVmFsdWUsIDMpfSR7XG4gICAgbm9kZURhdHVtLnBhcmVudD8uZGF0YS52YWx1ZSA9PT0gbnVsbFxuICAgICAgPyAnJ1xuICAgICAgOiBgIG9mICR7dG9QcmVjaXNpb24obm9kZURhdHVtLnBhcmVudD8uZGF0YS52YWx1ZSB8fCBub2RlRGF0dW0ucGFyZW50Py5kYXRhLndlaWdodGVkVmFsdWUsIDMpfWBcbiAgfSAke25vZGVEYXR1bS5wYXJlbnQ/LmRhdGEudmFsdWUgPyBub2RlRGF0dW0ucGFyZW50Py5kYXRhLnVuaXRzIDogbm9kZURhdHVtLnBhcmVudD8ucGFyZW50Py5kYXRhLnVuaXRzfSAtIGA7XG5cbmNvbnN0IGdlbmVyYXRlVGlwRGF0YSA9IChub2RlRGF0dW0pID0+XG4gIFtcbiAgICBub2RlRGF0dW0uZGF0YS53ZWlnaHRlZFZhbHVlXG4gICAgICA/IFtcbiAgICAgICAgICB7IHRleHQ6ICdjb250cmlidXRpb24nIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGV4dDogZ2V0V2VpZ2h0ZWRWYWx1ZVRleHQobm9kZURhdHVtKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgeyB0ZXh0OiBgRG9jcyBgLCBocmVmOiBub2RlRGF0dW0uZGF0YS5tb2RlbERvY3MgfVxuICAgICAgICBdXG4gICAgICA6IG51bGwsXG5cbiAgICBub2RlRGF0dW0uZGF0YS52YWx1ZVxuICAgICAgPyBbXG4gICAgICAgICAgeyB0ZXh0OiAndmFsdWUnLCBocmVmOiBgJHtiYXNlVXJsKCl9L3NjaGVtYS9JbmRpY2F0b3IjdmFsdWVgIH0sXG4gICAgICAgICAgeyB0ZXh0OiBgJHt0b1ByZWNpc2lvbihub2RlRGF0dW0uZGF0YS52YWx1ZSwgMyl9ICR7bm9kZURhdHVtLmRhdGEudW5pdHN9IC0gYCB9LFxuICAgICAgICAgIHsgdGV4dDogYERvY3MgYCwgaHJlZjogbm9kZURhdHVtLmRhdGEubW9kZWxEb2NzIH1cbiAgICAgICAgXVxuICAgICAgOiBbXG4gICAgICAgICAgeyB0ZXh0OiAndmFsdWUnIH0sXG4gICAgICAgICAgeyB0ZXh0OiBpc1R5cGVXaXRob3V0VmFsdWUobm9kZURhdHVtKSA/ICdubyBkYXRhICh1bmRlciBkZXZlbG9wbWVudCknIDogJ25vIGNvbnRyaWJ1dGlvbicgfVxuICAgICAgICBdLFxuICAgIFtcbiAgICAgIHsgdGV4dDogJ21ldGhvZE1vZGVsJywgaHJlZjogYCR7YmFzZVVybCgpfS9zY2hlbWEvSW5kaWNhdG9yI21ldGhvZE1vZGVsYCB9LFxuICAgICAgeyB0ZXh0OiBgJHtub2RlRGF0dW0uZGF0YS5tb2RlbE5hbWV9YCwgaHJlZjogYCR7YmFzZVVybCgpfS9tb2RlbC8ke25vZGVEYXR1bS5kYXRhLm1vZGVsSWR9YCB9XG4gICAgXSxcbiAgICBbXG4gICAgICB7IHRleHQ6ICd0ZXJtJywgaHJlZjogYCR7YmFzZVVybCgpfS9zY2hlbWEvSW5kaWNhdG9yI3Rlcm1gIH0sXG4gICAgICB7IHRleHQ6IG5vZGVEYXR1bS5kYXRhLnRlcm0sIGhyZWY6IGAke2Jhc2VVcmwoKX0vdGVybS8ke25vZGVEYXR1bS5kYXRhLmlkfWAgfVxuICAgIF1cbiAgXS5maWx0ZXIoQm9vbGVhbik7XG5cbmNvbnN0IHJpZ2h0VGlwUGF0aCA9ICh3LCBoLCB0YWlsKSA9PlxuICBgTSR7LXRhaWx9LCR7aCAvIDJ9IGwke3RhaWx9LC0ke3RhaWx9IHYtJHtoIC8gMiAtIHRhaWx9IGgke3d9IHYke2h9IGgtJHt3fSB2LSR7aCAvIDIgLSB0YWlsfSB6YDtcblxuY29uc3QgbGVmdFRpcFBhdGggPSAodywgaCwgdGFpbCkgPT5cbiAgYE0kezB9LCR7MH0gaCR7d30gdiR7aC8yLXRhaWx9IGwke3RhaWx9LCR7dGFpbH0gbCR7LXRhaWx9LCR7dGFpbH0gdiR7aCAvIDIgLSB0YWlsfSBoJHstd30gemA7XG5cbmNvbnN0IGFkZFRvb2x0aXAgPSAoc2VsZWN0aW9uOiBOb2RlU2VsZWN0aW9uLCB7IHRpcFNlbGVjdGlvbiB9KSA9PiB7XG4gIGxldCBob3ZlcmluZ1RpcCA9IGZhbHNlO1xuICBsZXQgaG92ZXJpbmdOb2RlID0gZmFsc2U7XG4gIGxldCBsYXN0Tm9kZUlkOiBzdHJpbmc7XG5cbiAgY29uc3QgY2xvc2VUaXAgPSAoKSA9PiB7XG4gICAgdGlwU2VsZWN0aW9uLnN0eWxlKCdwb2ludGVyLWV2ZW50cycsICdub25lJykudHJhbnNpdGlvbigpLmR1cmF0aW9uKDEwMCkuc3R5bGUoJ29wYWNpdHknLCAwKTtcbiAgICB0aXBTZWxlY3Rpb24uc3R5bGUoJ2Rpc3BsYXknLCAnbm9uZScpO1xuICAgIGxhc3ROb2RlSWQgPSBudWxsO1xuICB9O1xuXG4gIGNvbnN0IHN0YXJ0Q2xvc2VUaXAgPSAoKSA9PiB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoIWhvdmVyaW5nVGlwICYmICFob3ZlcmluZ05vZGUpIHtcbiAgICAgICAgY2xvc2VUaXAoKTtcbiAgICAgIH1cbiAgICB9LCAxMDApO1xuICB9O1xuXG4gIHRpcFNlbGVjdGlvblxuICAgIC5vbigncG9pbnRlcmVudGVyJywgKCkgPT4ge1xuICAgICAgaG92ZXJpbmdUaXAgPSB0cnVlO1xuICAgIH0pXG4gICAgLm9uKCdwb2ludGVybGVhdmUnLCAoKSA9PiB7XG4gICAgICBob3ZlcmluZ1RpcCA9IGZhbHNlO1xuICAgICAgc3RhcnRDbG9zZVRpcCgpO1xuICAgIH0pO1xuXG4gIHNlbGVjdGlvblxuICAgIC5vbignY2xpY2snLCAoX2UsIGQpID0+IHtcbiAgICAgIGNsb3NlVGlwKCk7XG4gICAgICBjbGVhclRpbWVvdXQoZC5fdGltZW91dCk7XG4gICAgfSlcbiAgICAub24oJ3BvaW50ZXJlbnRlcicsIChldmVudCwgbm9kZURhdHVtKSA9PiB7XG4gICAgICBob3ZlcmluZ05vZGUgPSB0cnVlO1xuICAgICAgaWYgKGxhc3ROb2RlSWQgPT09IG5vZGVEYXR1bS5kYXRhLmlkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNsb3NlVGlwKCk7XG4gICAgICBsYXN0Tm9kZUlkID0gbm9kZURhdHVtLmRhdGEuaWQ7XG5cbiAgICAgIG5vZGVEYXR1bS5fdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aXBTZWxlY3Rpb24uc3R5bGUoJ2Rpc3BsYXknLCBudWxsKS5zdHlsZSgncG9pbnRlci1ldmVudHMnLCAnYWxsJykudHJhbnNpdGlvbigpLmR1cmF0aW9uKDEwMCkuc3R5bGUoJ29wYWNpdHknLCAxKTtcbiAgICAgICAgY29uc3QgdGlwQmFja2dyb3VuZCA9IHRpcFNlbGVjdGlvbi5zZWxlY3RBbGwoJ3BhdGgnKS5kYXRhKFssXSkuam9pbigncGF0aCcpLmNsYXNzZWQoJ3RpcC1iYWNrZ3JvdW5kJywgdHJ1ZSk7XG4gICAgICAgIGNvbnN0IHRpcFRleHQgPSB0aXBTZWxlY3Rpb24uc2VsZWN0QWxsKCdnJykuZGF0YShbLF0pLmpvaW4oJ2cnKS5jbGFzc2VkKCd0aXAtdGV4dCcsIHRydWUpO1xuXG4gICAgICAgIGNvbnN0IHRpcFJvdyA9IHRpcFRleHRcbiAgICAgICAgICAuc2VsZWN0QWxsKCdnID4gZycpXG4gICAgICAgICAgLmRhdGEoZ2VuZXJhdGVUaXBEYXRhKG5vZGVEYXR1bSkpXG4gICAgICAgICAgLmpvaW4oJ2cnKVxuICAgICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAoXywgaSkgPT4gYHRyYW5zbGF0ZSgwLCR7aSAqIGZvbnRTaXplICogMS41ICsgZm9udFNpemUgLyAyfSlgKTtcblxuICAgICAgICB0aXBSb3cuYXBwZW5kKCd0ZXh0JykuZWFjaChmdW5jdGlvbihkKSB7XG4gICAgICAgICAgY29uc3QgdCA9IGQzLnNlbGVjdCh0aGlzKTtcbiAgICAgICAgICBjb25zdCBhT3JUc3BhbiA9IGRbMF0uaHJlZiA/IHQuYXBwZW5kKCdhJykuYXR0cignaHJlZicsIGRbMF0uaHJlZikgOiB0LmFwcGVuZCgndHNwYW4nKTtcbiAgICAgICAgICBhT3JUc3Bhbi5hcHBlbmQoJ3RzcGFuJykudGV4dChkWzBdLnRleHQpO1xuICAgICAgICAgIGFPclRzcGFuLmNsYXNzZWQoJ3RpcC10ZXh0LWtleScsIHRydWUpO1xuICAgICAgICAgIHQuYXBwZW5kKCd0c3BhbicpLnRleHQoJzogJyk7XG4gICAgICAgICAgaWYgKGRbMV0gJiYgIWRbMV0uaHJlZikge1xuICAgICAgICAgICAgdC5hcHBlbmQoJ3RzcGFuJykudGV4dChkWzFdLnRleHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIC8vIHN2ZyBpY29uIGNhbm5vdCBiZSBjaGlsZCBvZiB0ZXh0IHNvIHBvc2l0aW9uIGZpbmFsIGxpbmsgbWFudWFsbHlcbiAgICAgICAgdGlwUm93XG4gICAgICAgICAgLmZpbHRlcigoZCkgPT4gZFtkLmxlbmd0aCAtIDFdLmhyZWYpXG4gICAgICAgICAgLmVhY2goZnVuY3Rpb24oZCkge1xuICAgICAgICAgICAgY29uc3QgeyB3aWR0aDogdGV4dFdpZHRoIH0gPSB0aGlzLmdldEJCb3goKTtcbiAgICAgICAgICAgIGNvbnN0IGEgPSBkM1xuICAgICAgICAgICAgICAuc2VsZWN0KHRoaXMpXG4gICAgICAgICAgICAgIC5hcHBlbmQoJ2EnKVxuICAgICAgICAgICAgICAuYXR0cignaHJlZicsIGRbZC5sZW5ndGggLSAxXS5ocmVmKVxuICAgICAgICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgke3RleHRXaWR0aCArIG5vZGVQYWRkaW5nfSwwKWApO1xuXG4gICAgICAgICAgICBhLmFwcGVuZCgndGV4dCcpLnRleHQoZFtkLmxlbmd0aCAtIDFdLnRleHQpO1xuXG4gICAgICAgICAgICBjb25zdCB7IHdpZHRoOiBhV2lkdGggfSA9IChhLm5vZGUoKSBhcyB1bmtub3duIGFzIFNWR0FFbGVtZW50KS5nZXRCQm94KCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGcgPSBhLmFwcGVuZCgnZycpLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoJHthV2lkdGggKyBub2RlUGFkZGluZ30sJHstZm9udFNpemUgLyAyfSlgKTtcblxuICAgICAgICAgICAgZy5hcHBlbmQoJ3JlY3QnKVxuICAgICAgICAgICAgICAuYXR0cignd2lkdGgnLCBmb250U2l6ZSlcbiAgICAgICAgICAgICAgLmF0dHIoJ2hlaWdodCcsIGZvbnRTaXplKVxuICAgICAgICAgICAgICAuYXR0cignZmlsbCcsICdub25lJylcbiAgICAgICAgICAgICAgLmF0dHIoJ3N0cm9rZScsICdub25lJyk7XG5cbiAgICAgICAgICAgIGcuYXBwZW5kKCdzdmcnKVxuICAgICAgICAgICAgICAuYXR0cigndmlld0JveCcsIGAwIDAgJHtmYUV4dGVybmFsTGlua0FsdC5pY29uWzBdfSAke2ZhRXh0ZXJuYWxMaW5rQWx0Lmljb25bMV19YClcbiAgICAgICAgICAgICAgLmF0dHIoJ3dpZHRoJywgZm9udFNpemUpXG4gICAgICAgICAgICAgIC5hdHRyKCdoZWlnaHQnLCBmb250U2l6ZSlcbiAgICAgICAgICAgICAgLmFwcGVuZCgncGF0aCcpXG4gICAgICAgICAgICAgIC5hdHRyKCdkJywgZmFFeHRlcm5hbExpbmtBbHQuaWNvbls0XSlcbiAgICAgICAgICAgICAgLmF0dHIoJ2ZpbGwnLCAnd2hpdGUnKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICB0aXBUZXh0LnNlbGVjdEFsbCgnYScpLmNsYXNzZWQoJ3RpcC1hbmNob3InLCB0cnVlKS5hdHRyKCd0YXJnZXQnLCAnX2JsYW5rJyk7XG5cbiAgICAgICAgY29uc3QgeyB3aWR0aDogdGlwV2lkdGgsIGhlaWdodDogdGlwSGVpZ2h0IH0gPSB0aXBUZXh0Lm5vZGUoKS5nZXRCQm94KCk7XG4gICAgICAgIGNvbnN0IG9yaWVudExlZnQgPSBub2RlRGF0dW0ueSArIHRpcFdpZHRoICsgbm9kZVdpZHRoID4gd2lkdGggLSBtYXJnaW4ubGVmdDtcblxuICAgICAgICBjb25zdCB0aXBQYXRoQXJnczogW251bWJlciwgbnVtYmVyLCBudW1iZXJdID0gW3RpcFdpZHRoICsgbm9kZVBhZGRpbmcgKiAyLCB0aXBIZWlnaHQgKyBub2RlUGFkZGluZyAqIDIsIDVdO1xuICAgICAgICB0aXBCYWNrZ3JvdW5kXG4gICAgICAgICAgLmF0dHIoJ2QnLCBvcmllbnRMZWZ0ID8gbGVmdFRpcFBhdGgoLi4udGlwUGF0aEFyZ3MpIDogcmlnaHRUaXBQYXRoKC4uLnRpcFBhdGhBcmdzKSlcbiAgICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgkey1ub2RlUGFkZGluZ30sJHstbm9kZVBhZGRpbmd9KWApXG4gICAgICAgICAgLmF0dHIoJ3N0cm9rZS1saW5lam9pbicsICdyb3VuZCcpXG4gICAgICAgICAgLmF0dHIoJ3N0cm9rZS13aWR0aCcsIDMpXG4gICAgICAgICAgLmF0dHIoJ3N0cm9rZScsICdibGFjaycpO1xuICAgICAgICBjb25zdCB4T2Zmc2V0ID0gb3JpZW50TGVmdCA/IC10aXBXaWR0aCAtIG5vZGVQYWRkaW5nKjIgOiBub2RlV2lkdGggKyBub2RlUGFkZGluZyAqIDI7XG5cbiAgICAgICAgdGlwU2VsZWN0aW9uLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoJHtub2RlRGF0dW0ueSt4T2Zmc2V0fSwke25vZGVEYXR1bS54K25vZGVIZWlnaHQvMi10aXBIZWlnaHQvMn0pYCk7XG4gICAgICB9LCAyNTApO1xuICAgIH0pXG4gICAgLm9uKCdwb2ludGVybGVhdmUnLCAoX2UsIGQpID0+IHtcbiAgICAgIGhvdmVyaW5nTm9kZSA9IGZhbHNlO1xuICAgICAgc3RhcnRDbG9zZVRpcCgpO1xuICAgICAgY2xlYXJUaW1lb3V0KGQuX3RpbWVvdXQpO1xuICAgIH0pO1xuXG4gIHJldHVybiBzZWxlY3Rpb247XG59O1xuXG5jb25zdCBtZXJnZWROb2RlcyA9IChzZWxlY3Rpb246IE5vZGVTZWxlY3Rpb24sIHsgdGlwU2VsZWN0aW9uIH0pID0+IHtcbiAgc2VsZWN0aW9uXG4gICAgLnNlbGVjdEFsbDxTVkdSZWN0RWxlbWVudCwgQ2hhcnROb2RlPignLm5vZGUtYm94JylcbiAgICAuY2xhc3NlZCgnbm9kZS1vcGVuYWJsZScsIChkKSA9PiAhIWQuaGVpZ2h0KVxuICAgIC5jbGFzc2VkKCdub2RlLW9wZW4nLCAoZCkgPT4gZC5fb3BlbilcbiAgICAuY2FsbChzZXROb2RlU2l6ZSlcbiAgICAuYXR0cignc3Ryb2tlJywgKHsgZGF0YSB9KSA9PiBub2RlQ29sb3Vyc1tkYXRhLnR5cGVdKVxuICAgIC5hdHRyKCdmaWxsJywgKGQpID0+IG5vZGVDb2xvdXJzW2QuZGF0YS50eXBlXSlcbiAgICAuc3R5bGUoJ3VzZXItc2VsZWN0Jywgd2luZG93LmlubmVyV2lkdGggPCA3NjggPyAnbm9uZScgOiBudWxsKTtcblxuICBzZWxlY3Rpb25cbiAgICAuZmlsdGVyKChkKSA9PiAhZC5kYXRhLmdyb3VwICYmIGQuZGF0YS5pZCAhPT0gbm9uTENBSW5kaWNhdG9yc0lkKVxuICAgIC5jYWxsKGFkZFRvb2x0aXAsIHsgdGlwU2VsZWN0aW9uIH0pO1xuXG4gIHNlbGVjdGlvblxuICAgIC5zZWxlY3RBbGw8U1ZHVGV4dEVsZW1lbnQsIENoYXJ0Tm9kZT4oJy5ub2RlLWxhYmVsJylcbiAgICAuYXR0cigneScsIChkKSA9PiAoZC5kYXRhLnNob3dCYXIgPyBsaW5lSGVpZ2h0IC8gMiArIG5vZGVQYWRkaW5nIC8gMiA6IDApKVxuICAgIC5hdHRyKCd4Jywgbm9kZVdpZHRoIC8gMik7XG5cbiAgY29uc3QgZ3JvdXBzID0gc2VsZWN0aW9uLmZpbHRlcigoZCkgPT4gZC5kYXRhLmdyb3VwKTtcblxuICBncm91cHNcbiAgICAuc2VsZWN0QWxsPFNWR1RleHRFbGVtZW50LCBDaGFydE5vZGU+KCcuZ3JvdXAtYm9yZGVyJylcbiAgICAuYXR0cignd2lkdGgnLCBub2RlV2lkdGggKyBub2RlUGFkZGluZyAqIDIpXG4gICAgLmF0dHIoJ3gnLCAtbm9kZVBhZGRpbmcpXG4gICAgLmF0dHIoJ3knLCBub2RlSGVpZ2h0IC0gKGxpbmVIZWlnaHQgKyBub2RlUGFkZGluZyAqIDIpKVxuICAgIC5hdHRyKCdvcGFjaXR5JywgKGQpID0+IChkLl9ncmV5ZWQgJiYgZC5fZ3JvdXBPcGVuID8gZ3JleWVkT3BhY2l0eSA6IGQuX2dyb3VwT3BlbiA/IDEgOiAwKSlcbiAgICAuYXR0cihcbiAgICAgICdoZWlnaHQnLFxuICAgICAgKGQpID0+XG4gICAgICAgIE1hdGguYWJzKGQucGFyZW50Ll9ncm91cENoaWxkcmVuLmxlbmd0aCAtIGQucGFyZW50LmNoaWxkcmVuLmxlbmd0aCkgKiAobm9kZUhlaWdodCAqIG5vZGVTcGFjaW5nRmFjdG9yKSArXG4gICAgICAgIG5vZGVQYWRkaW5nICtcbiAgICAgICAgKGxpbmVIZWlnaHQgKyBub2RlUGFkZGluZyAqIDIpIC8gMlxuICAgICk7XG5cbiAgY29uc3QgZ3JvdXBMYWJlbHMgPSBncm91cHNcbiAgICAuc2VsZWN0QWxsPFNWR1RleHRFbGVtZW50LCBDaGFydE5vZGU+KCcuZ3JvdXAtbGFiZWwnKVxuICAgIC5hdHRyKCd5Jywgbm9kZUhlaWdodCAvIDIpXG4gICAgLmF0dHIoJ3gnLCBub2RlUGFkZGluZylcbiAgICAudGV4dCgoZCkgPT4gZC5kYXRhLmxhYmVsKVxuICAgIC5hdHRyKCdvcGFjaXR5JywgKGQpID0+IChkLl9ncm91cE9wZW4gPyAwIDogZC5fZ3JleWVkID8gZ3JleWVkT3BhY2l0eSA6IDEpKTtcblxuICAvLyB1bm5lZWRlZCB3aXRoIGN1cnJlbnQgZGltZW5zaW9uc1xuICAvLyBncm91cExhYmVscy5lYWNoKGZ1bmN0aW9uKCkge1xuICAvLyAgIGNvbnN0IHRleHQgPSBkMy5zZWxlY3Q8U1ZHVGV4dEVsZW1lbnQsIENoYXJ0Tm9kZT4odGhpcyk7XG4gIC8vICAgY29uc3QgdGV4dFdpZHRoID0gKHRleHQubm9kZSgpIGFzIFNWR1RleHRFbGVtZW50KS5nZXRDb21wdXRlZFRleHRMZW5ndGgoKTtcbiAgLy8gICBjb25zdCBsaW5lID0gZDMuc2VsZWN0PFNWR0xpbmVFbGVtZW50LCBDaGFydE5vZGU+KHRoaXMubmV4dFNpYmxpbmcgYXMgU1ZHTGluZUVsZW1lbnQpO1xuICAvLyAgIGxpbmVcbiAgLy8gICAgIC5jbGFzc2VkKCdncm91cC1saW5lJywgdHJ1ZSlcbiAgLy8gICAgIC5hdHRyKCd4MScsIHRleHRXaWR0aCArIG5vZGVQYWRkaW5nICogMilcbiAgLy8gICAgIC5hdHRyKCd5MScsIG5vZGVIZWlnaHQgLyAyKVxuICAvLyAgICAgLmF0dHIoJ3gyJywgKG5vZGVXaWR0aCAqIDUpIC8gNyAtIG5vZGVQYWRkaW5nKVxuICAvLyAgICAgLmF0dHIoJ3kyJywgbm9kZUhlaWdodCAvIDIpXG4gIC8vICAgICAuYXR0cignb3BhY2l0eScsIChkKSA9PiAoZC5fZ3JvdXBPcGVuID8gMCA6IGQuX2dyZXllZCA/IGdyZXllZE9wYWNpdHkgOiAxKSk7XG4gIC8vIH0pO1xuXG4gIGNvbnN0IHNldEdyb3VwQnV0dG9uWFkgPSAoc2VsKSA9PlxuICAgIHNlbFxuICAgICAgLmF0dHIoJ3dpZHRoJywgKG5vZGVXaWR0aCAqIDIpIC8gNylcbiAgICAgIC5hdHRyKCdoZWlnaHQnLCAoZCkgPT4gKGQuX2dyb3VwT3BlbiA/IGxpbmVIZWlnaHQgKyBub2RlUGFkZGluZyAqIDIgOiBub2RlUGFkZGluZyAqIDIgKyBsaW5lSGVpZ2h0KSlcbiAgICAgIC5hdHRyKCd4JywgKGQpID0+IChkLl9ncm91cE9wZW4gPyAobm9kZVdpZHRoICogMi41KSAvIDcgOiAobm9kZVdpZHRoICogNSkgLyA3IC0gbm9kZVBhZGRpbmcpKVxuICAgICAgLmF0dHIoJ3knLCAoZCkgPT5cbiAgICAgICAgZC5fZ3JvdXBPcGVuXG4gICAgICAgICAgPyBncm91cE92ZXJsYXAgKyAoZ3JvdXBOb2RlU3BhY2UgLSAobGluZUhlaWdodCArIG5vZGVQYWRkaW5nICogMikpIC8gMlxuICAgICAgICAgIDogbm9kZVBhZGRpbmcgKyBsaW5lSGVpZ2h0IC8gMlxuICAgICAgKTtcblxuICBncm91cHNcbiAgICAuc2VsZWN0QWxsPFNWR1JlY3RFbGVtZW50LCBDaGFydE5vZGU+KCcuZ3JvdXAtYnV0dG9uJylcbiAgICAuY2FsbChzZXRHcm91cEJ1dHRvblhZKVxuICAgIC5zdHlsZSgncG9pbnRlci1ldmVudHMnLCAoZCkgPT4gKGQuX2dyZXllZCA/ICdub25lJyA6ICdhdXRvJykpXG4gICAgLnN0eWxlKCdzdHJva2Utb3BhY2l0eScsIChkKSA9PiAoZC5fZ3JleWVkID8gZ3JleWVkT3BhY2l0eSA6IDEpKTtcblxuICBncm91cHNcbiAgICAuc2VsZWN0QWxsPFNWR1RleHRFbGVtZW50LCBDaGFydE5vZGU+KCcuZ3JvdXAtYnV0dG9uLXRleHQnKVxuICAgIC50ZXh0KChkKSA9PiAoZC5fZ3JvdXBPcGVuID8gJ0hpZGUnIDogJ1Nob3cnKSlcbiAgICAuYXR0cigneCcsIChkKSA9PiAoZC5fZ3JvdXBPcGVuID8gbm9kZVdpZHRoIC8gMiA6IChub2RlV2lkdGggKiA2KSAvIDcgLSBub2RlUGFkZGluZykpXG4gICAgLmF0dHIoJ3knLCAoZCkgPT4gKGQuX2dyb3VwT3BlbiA/IG5vZGVNYXJnaW4gKyBsaW5lSGVpZ2h0ICsgbGluZUhlaWdodCAvIDIgOiBub2RlSGVpZ2h0IC8gMikpXG4gICAgLmF0dHIoJ2ZvbnQtc2l6ZScsIChkKSA9PiBgJHtmb250U2l6ZSAqIDEuM31weGApO1xuXG4gIHNlbGVjdGlvbi5zZWxlY3RBbGwoJy5zaWJsaW5nLW1hc2snKS5yZW1vdmUoKTtcblxuICBzZWxlY3Rpb25cbiAgICAuZmlsdGVyKChkKSA9PiBkLl9ncmV5ZWQgJiYgIWQuZGF0YS5ncm91cClcbiAgICAuYXBwZW5kKCdyZWN0JylcbiAgICAuY2xhc3NlZCgnbm9kZS1vcGVuYWJsZScsIChkKSA9PiAhIWQuaGVpZ2h0KVxuICAgIC5jbGFzc2VkKCdzaWJsaW5nLW1hc2sgbWFzay1vcGVuYWJsZScsIHRydWUpXG4gICAgLmNhbGwoc2V0Tm9kZVNpemUpO1xuXG4gIHNlbGVjdGlvblxuICAgIC5maWx0ZXIoKGQpID0+IGQuX2dyZXllZCAmJiBkLmRhdGEuZ3JvdXApXG4gICAgLmFwcGVuZCgncmVjdCcpXG4gICAgLmNsYXNzZWQoJ3NpYmxpbmctbWFzaycsIHRydWUpXG4gICAgLmNhbGwoc2V0R3JvdXBCdXR0b25YWSk7XG5cbiAgcmV0dXJuIHNlbGVjdGlvbjtcbn07XG5cbmNvbnN0IGVudGVyTm9kZXMgPSAoc2VsZWN0aW9uOiBOb2RlU2VsZWN0aW9uKSA9PiB7XG4gIGNvbnN0IG5vZGVzID0gc2VsZWN0aW9uLmZpbHRlcigoZCkgPT4gZC5kYXRhLnR5cGUgIT09IENoYXJ0Tm9kZVR5cGUucm9vdCAmJiAhZC5kYXRhLmdyb3VwKTtcblxuICBub2Rlcy5hcHBlbmQoJ3JlY3QnKS5jbGFzc2VkKCdub2RlLWJveCcsIHRydWUpO1xuXG4gIG5vZGVzXG4gICAgLmFwcGVuZCgndGV4dCcpXG4gICAgLmNsYXNzZWQoJ25vZGUtbGFiZWwnLCB0cnVlKVxuICAgIC50ZXh0KCh7IGRhdGEgfSkgPT4gZGF0YS5sYWJlbCArICcgJyArIGRhdGEudW5pdHMpXG4gICAgLmF0dHIoJ29wYWNpdHknLCAwKTtcblxuICAvLyBUZXh0IGVsZW1lbnRzIG11c3QgYmUgcmVuZGVyZWQgYmVmb3JlIHdlIGNhbiBjYWxjdWxhdGUgd3JhcHBpbmdcbiAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgY29uc3QgbGFiZWxzID0gbm9kZXMuc2VsZWN0QWxsPFNWR1RleHRFbGVtZW50LCBDaGFydE5vZGU+KCcubm9kZS1sYWJlbCcpLmNhbGwod3JhcCk7XG4gICAgbGFiZWxzLmF0dHIoJ29wYWNpdHknLCAxKTtcbiAgfSk7XG5cbiAgY29uc3QgZ3JvdXBzID0gc2VsZWN0aW9uLmZpbHRlcigoZCkgPT4gZC5kYXRhLmdyb3VwKTtcblxuICBncm91cHMuYXBwZW5kKCdyZWN0JykuYXR0cignY2xhc3MnLCAnZ3JvdXAtYm9yZGVyJyk7XG4gIGdyb3Vwcy5hcHBlbmQoJ3RleHQnKS5hdHRyKCdjbGFzcycsICdncm91cC1sYWJlbCcpO1xuICAvLyBncm91cHMuYXBwZW5kKCdsaW5lJykuYXR0cignY2xhc3MnLCAnZ3JvdXAtbGluZScpO1xuICBncm91cHMuYXBwZW5kKCdyZWN0JykuYXR0cignY2xhc3MnLCAnZ3JvdXAtYnV0dG9uJyk7XG4gIGdyb3Vwcy5hcHBlbmQoJ3RleHQnKS5hdHRyKCdjbGFzcycsICdncm91cC1idXR0b24tdGV4dCcpO1xuXG4gIGNvbnN0IHdpdGhCYXIgPSBub2Rlcy5maWx0ZXIoKGQpID0+IGQuZGF0YS5zaG93QmFyKTtcblxuICB3aXRoQmFyXG4gICAgLmZpbHRlcigoZCkgPT4gZC5kYXRhLmZyYWN0aW9uID4gMClcbiAgICAuYXBwZW5kKCdyZWN0JylcbiAgICAuY2xhc3NlZCgnYmFyLWJhY2tncm91bmQnLCB0cnVlKVxuICAgIC5hdHRyKCd3aWR0aCcsIG5vZGVDb250ZW50V2lkdGgpXG4gICAgLmNhbGwoZm9ybWF0QmFyKTtcblxuICB3aXRoQmFyXG4gICAgLmFwcGVuZCgncmVjdCcpXG4gICAgLmNsYXNzZWQoJ2Jhci1mb3JlZ3JvdW5kJywgdHJ1ZSlcbiAgICAuY2FsbChmb3JtYXRCYXIpXG4gICAgLmF0dHIoJ3dpZHRoJywgKGQpID0+IGQuZGF0YS5mcmFjdGlvbiAqIG5vZGVDb250ZW50V2lkdGgpXG4gICAgLmF0dHIoJ2ZpbGwnLCAoZCkgPT4gbm9kZUNvbG91cnNbZC5kYXRhLnR5cGVdKTtcblxuICB3aXRoQmFyXG4gICAgLmFwcGVuZCgndGV4dCcpXG4gICAgLmNsYXNzZWQoJ2Jhci1sYWJlbCcsIHRydWUpXG4gICAgLnRleHQoKHsgZGF0YSB9KSA9PlxuICAgICAgZGF0YS5mcmFjdGlvbiA9PT0gMFxuICAgICAgICA/ICdubyBjb250cmlidXRpb24nXG4gICAgICAgIDogYCR7TWF0aC5yb3VuZCgxMDAgKiBkYXRhLmZyYWN0aW9uKX0lICR7TWF0aC5yb3VuZCgxMDAgKiBkYXRhLmZyYWN0aW9uKSA9PT0gMCA/ICcgKHJvdW5kZWQpJyA6ICcnfWBcbiAgICApXG4gICAgLmF0dHIoJ3RleHQtYW5jaG9yJywgKGQpID0+IChkLmRhdGEuZnJhY3Rpb24gPT09IDAgPyAnbWlkZGxlJyA6IGQuZGF0YS5mcmFjdGlvbiA+IDAuNyA/ICdlbmQnIDogJ3N0YXJ0JykpXG4gICAgLmF0dHIoJ3gnLCAoZCkgPT5cbiAgICAgIGQuZGF0YS5mcmFjdGlvbiA9PT0gMFxuICAgICAgICA/IG5vZGVXaWR0aCAvIDJcbiAgICAgICAgOiBkLmRhdGEuZnJhY3Rpb24gKiBub2RlQ29udGVudFdpZHRoICsgbm9kZVBhZGRpbmcgKyAoZC5kYXRhLmZyYWN0aW9uID4gMC43ID8gLTQgOiA0KVxuICAgIClcbiAgICAuYXR0cigneScsIG5vZGVIZWlnaHQgLSBub2RlUGFkZGluZyAtIGJhckhlaWdodCAvIDIpO1xuXG4gIHJldHVybiBzZWxlY3Rpb247XG59O1xuXG5jb25zdCBtZXJnZWRMaW5rcyA9IChzZWxlY3Rpb246IExpbmtTZWxlY3Rpb24sIHsgdG9nZ2xpbmdHcm91cCwgc3dpdGNoaW5nU2VsZWN0aW9uIH0pID0+XG4gIHNlbGVjdGlvblxuICAgIC5zdHlsZSgnc3Ryb2tlJywgKGQpID0+IHtcbiAgICAgIGNvbnN0IGNvbG91cnMgPSB7XG4gICAgICAgIFtDaGFydE5vZGVUeXBlLm1pZHBvaW50XTogbm9kZUNvbG91cnNbQ2hhcnROb2RlVHlwZS5taWRwb2ludF0sXG4gICAgICAgIFtDaGFydE5vZGVUeXBlLmVuZHBvaW50XTogbm9kZUNvbG91cnNbQ2hhcnROb2RlVHlwZS5lbmRwb2ludF0sXG4gICAgICAgIFtDaGFydE5vZGVUeXBlLmVtaXNzaW9uXTogbm9kZUNvbG91cnNbQ2hhcnROb2RlVHlwZS5lbWlzc2lvbl1cbiAgICAgIH07XG4gICAgICByZXR1cm4gKGQudGFyZ2V0Ll9vcGVuICYmIGNvbG91cnNbZC5zb3VyY2UuZGF0YS50eXBlXSkgfHwgbnVsbDtcbiAgICB9KVxuICAgIC5hdHRyKCdzdHJva2UtZGFzaGFycmF5JywgKGQpID0+IChkLnRhcmdldC5kYXRhLmdyb3VwID8gJzIsNScgOiBudWxsKSlcbiAgICAuYXR0cignc3Ryb2tlLXdpZHRoJywgKGQpID0+IChkLnRhcmdldC5fb3BlbiA/IDMgOiBkLnRhcmdldC5fZ3JvdXBPcGVuID8gMCA6IDIpKVxuICAgIC5hdHRyKCdzdHJva2Utb3BhY2l0eScsIChkKSA9PiAoZC50YXJnZXQuX2dyZXllZCA/IDAuMSA6IDAuNikpXG4gICAgLnRyYW5zaXRpb24oKVxuICAgIC5kdXJhdGlvbihsaW5rRHVyYXRpb24pXG4gICAgLmRlbGF5KChkKSA9PiB7XG4gICAgICBjb25zdCBncm91cENsb3NpbmcgPSB0b2dnbGluZ0dyb3VwICYmICFkLnRhcmdldC5wYXJlbnQ/LmNoaWxkcmVuPy5maW5kKChuKSA9PiBuLmRhdGEuZ3JvdXApPy5fZ3JvdXBPcGVuO1xuICAgICAgcmV0dXJuIGdyb3VwQ2xvc2luZ1xuICAgICAgICA/IGdyb3VwRGVsYXlcbiAgICAgICAgOiAoc3dpdGNoaW5nU2VsZWN0aW9uID8gbm9kZUR1cmF0aW9uIDogMCkgKyBkLnNvdXJjZS5jaGlsZHJlbj8uaW5kZXhPZihkLnRhcmdldCkgKiAxMDtcbiAgICB9KVxuICAgIC5hdHRyKCdvcGFjaXR5JywgMSlcbiAgICAuYXR0cignZCcsIChkKSA9PiB7XG4gICAgICBjb25zdCB0YXJnZXREeSA9IGQudGFyZ2V0Ll9ncm91cE9wZW4gPyBub2RlUGFkZGluZyArIGxpbmVIZWlnaHQgLyAyICsgbm9kZU1hcmdpbiAqIDIgOiBub2RlSGVpZ2h0IC8gMjtcbiAgICAgIHJldHVybiBkMy5saW5rSG9yaXpvbnRhbCgpKHtcbiAgICAgICAgc291cmNlOiBbZC5zb3VyY2UueSArIG5vZGVXaWR0aCwgZC5zb3VyY2UueCArIG5vZGVIZWlnaHQgLyAyXSxcbiAgICAgICAgdGFyZ2V0OiBbZC50YXJnZXQueSwgZC50YXJnZXQueCArIHRhcmdldER5XVxuICAgICAgfSk7XG4gICAgfSk7XG5cbmNvbnN0IGdyb3VwQnlQZXJjZW50YWdlID0gKG5vZGUpID0+XG4gIFtDaGFydE5vZGVUeXBlLmVuZHBvaW50LCBDaGFydE5vZGVUeXBlLm1pZHBvaW50LCBDaGFydE5vZGVUeXBlLmVtaXNzaW9uXS5pbmNsdWRlcyhub2RlLmRhdGEudHlwZSk7XG5cbmNvbnN0IGdyb3VwUGVyY2VudGFnZSA9IChub2RlLCBwZXJjZW50YWdlID0gMC4wMikgPT4ge1xuICBjb25zdCBncm91cGVkID0gbm9kZS5fY2hpbGRyZW4/LmZpbHRlcigoY2hpbGQpID0+IGNoaWxkLmRhdGEuZnJhY3Rpb24gPCBwZXJjZW50YWdlKTtcbiAgaWYgKG5vZGUuX2NoaWxkcmVuPy5sZW5ndGggPiA2ICYmIGdyb3VwZWQ/Lmxlbmd0aCA+IDEpIHtcbiAgICBjb25zdCB0eXBlID0gbm9kZS5fY2hpbGRyZW5bMF0uZGF0YS50eXBlO1xuICAgIGNvbnN0IGdyb3VwTm9kZSA9IHtcbiAgICAgIC4uLmQzLmhpZXJhcmNoeSh7XG4gICAgICAgIGlkOiBgJHt0eXBlfS1ncm91cGAsXG4gICAgICAgIGxhYmVsOiBgJHtncm91cGVkLmxlbmd0aH0gbW9yZSB1bmRlciAke01hdGgucm91bmQocGVyY2VudGFnZSAqIDEwMCl9JS5gLFxuICAgICAgICB3ZWlnaHRlZFZhbHVlOiBudWxsLFxuICAgICAgICB2YWx1ZTogbnVsbCxcbiAgICAgICAgdHlwZSxcbiAgICAgICAgZ3JvdXA6IHRydWVcbiAgICAgIH0pLFxuICAgICAgZGVwdGg6IG5vZGUuZGVwdGggKyAxLFxuICAgICAgaGVpZ2h0OiAxLFxuICAgICAgcGFyZW50OiBub2RlXG4gICAgfTtcbiAgICBjb25zdCBub3RHcm91cGVkID0gbm9kZS5fY2hpbGRyZW4/LmZpbHRlcigoY2hpbGQpID0+IGNoaWxkLmRhdGEuZnJhY3Rpb24gPj0gcGVyY2VudGFnZSk7XG4gICAgbm9kZS5fY2hpbGRyZW4uc3BsaWNlKG5vdEdyb3VwZWQubGVuZ3RoLCAwLCBncm91cE5vZGUpO1xuICAgIG5vdEdyb3VwZWQucHVzaChncm91cE5vZGUpO1xuICAgIG5vZGUuX2dyb3VwQ2hpbGRyZW4gPSBub2RlLl9jaGlsZHJlbjtcbiAgICBub2RlLl9jaGlsZHJlbiA9IG5vdEdyb3VwZWQ7XG4gIH1cbn07XG5cbmNvbnN0IHNob3dCYXIgPSAobm9kZSkgPT5cbiAgW1xuICAgIG5vZGUucGFyZW50Py5kYXRhLnR5cGUgIT09IENoYXJ0Tm9kZVR5cGUucm9vdCxcbiAgICBub2RlLnBhcmVudD8uZGF0YS5pZCAhPT0gbm9uTENBSW5kaWNhdG9yc0lkLFxuICAgICFub2RlLmRhdGEuZ3JvdXAsXG4gICAgbm9kZS5kYXRhLmZyYWN0aW9uID49IDBcbiAgXS5ldmVyeShCb29sZWFuKTtcblxuY29uc3QgZ2V0VW5pdHNBbmRMYWJlbCA9ICh0ZXJtOiBQYXJ0aWFsPElUZXJtSlNPTkxEPiwgZmFsbGJhY2tMYWJlbCA9ICd1bmtub3duIHRlcm0nKSA9PiB7XG4gIGNvbnN0IGxhYmVsID0gdGVybT8ubmFtZSB8fCB0ZXJtPy5bJ0BpZCddIHx8IGZhbGxiYWNrTGFiZWw7XG4gIGNvbnN0IHVuaXRzID0gYCgke3Rlcm0/LnVuaXRzIHx8ICd1bmtub3duIHVuaXRzJ30pYDtcbiAgcmV0dXJuIHsgbGFiZWw6IGxhYmVsLnJlcGxhY2UodW5pdHMsICcnKS50cmltKCksIHRlcm06IGxhYmVsLCB1bml0cyB9O1xufTtcblxuY29uc3QgcXVlcnkgPSAoc2hvdWxkKSA9PiAoe1xuICBmaWVsZHM6IFsnQHR5cGUnLCAnQGlkJywgJ25hbWUnLCAndW5pdHMnLCAndGVybVR5cGUnXSxcbiAgbGltaXQ6IDEwMDAwLFxuICBxdWVyeToge1xuICAgIGJvb2w6IHtcbiAgICAgIG11c3Q6IFttYXRjaFR5cGUoTm9kZVR5cGUuVGVybSldLFxuICAgICAgc2hvdWxkLFxuICAgICAgbWluaW11bV9zaG91bGRfbWF0Y2g6IDFcbiAgICB9XG4gIH1cbn0pO1xuXG50eXBlIFRlcm0gPSBJVGVybUpTT05MRCAmIElTZWFyY2hSZXN1bHRFeHRlbmRlZCAmIHsgZG9jcz86IHN0cmluZyB9O1xuXG5jb25zdCBsZWdlbmQgPSBbXG4gIHsgdHlwZTogQ2hhcnROb2RlVHlwZS5lbmRwb2ludCwgbW9iaWxlVGV4dDogJ0VuZHBvaW50JywgdGV4dDogJ0VuZHBvaW50IEluZGljYXRvcicgfSxcbiAgeyB0eXBlOiBDaGFydE5vZGVUeXBlLm1pZHBvaW50LCB0ZXh0OiAnQ2hhcmFjdGVyaXNlZCBJbmRpY2F0b3InLCBtb2JpbGVUZXh0OiAnSW1wYWN0JyB9LFxuICB7IHR5cGU6IENoYXJ0Tm9kZVR5cGUuZW1pc3Npb24sIG1vYmlsZVRleHQ6ICdFbWlzc2lvbicsIHRleHQ6ICdFbWlzc2lvbiBvciBSZXNvdXJjZSBVc2UnIH0sXG4gIHsgdHlwZTogQ2hhcnROb2RlVHlwZS5pbnB1dCwgdGV4dDogJ0lucHV0JywgbW9iaWxlVGV4dDogJ0lucHV0JyB9LFxuICB7IHR5cGU6IENoYXJ0Tm9kZVR5cGUub3BlcmF0aW9uLCB0ZXh0OiAnT3BlcmF0aW9uJywgbW9iaWxlVGV4dDogJ09wZXJhdGlvbicgfVxuXTtcblxuY29uc3Qgd2FybmluZ3MgPSAobG9nczogSUxvZ1tdLCB0ZXJtczogeyBbaWQ6IHN0cmluZ106IFRlcm0gfSkgPT4gW1xuICAhbG9ncy5ldmVyeShsb2cgPT4gdGVybXNbbG9nLmluZGljYXRvcl0gJiYgdGVybXNbbG9nLmNvbnRyaWJ1dG9yXSkgJiYgJ21pc3NpbmctdGVybXMnXG5dLmZpbHRlcihCb29sZWFuKTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaGUtaW1wYWN0LWFzc2Vzc21lbnRzLWdyYXBoJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2ltcGFjdC1hc3Nlc3NtZW50cy1ncmFwaC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2ltcGFjdC1hc3Nlc3NtZW50cy1ncmFwaC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEltcGFjdEFzc2Vzc21lbnRzR3JhcGhDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0IHtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBpbml0aWFsVGVybXM6IHsgW2lkOiBzdHJpbmddOiBUZXJtIH07XG4gIHByaXZhdGUgYWxsVGVybXM6IHsgW2lkOiBzdHJpbmddOiBUZXJtIH07XG5cbiAgcHJpdmF0ZSByb290PzogSE5vZGU7XG4gIHByaXZhdGUgbm9kZTogTm9kZVNlbGVjdGlvbjtcbiAgcHJpdmF0ZSBsaW5rOiBMaW5rU2VsZWN0aW9uO1xuICBwcml2YXRlIHRvb2x0aXA6IFNlbGVjdGlvbjxTVkdHRWxlbWVudCwgYW55LCBIVE1MRWxlbWVudCwgdW5rbm93bj47XG4gIHByaXZhdGUgc3ZnOiBTZWxlY3Rpb248U1ZHU1ZHRWxlbWVudCwgYW55LCBIVE1MRWxlbWVudCwgdW5rbm93bj47XG4gIHByaXZhdGUgeU1pbjogbnVtYmVyO1xuICBwcml2YXRlIHlUb3RhbDogbnVtYmVyO1xuICBwcml2YXRlIGxvZ3NBbGxNb2RlbHM6IElMb2dbXTtcblxuICBAVmlld0NoaWxkKCdjaGFydCcpXG4gIHByaXZhdGUgY2hhcnRSZWY/OiBFbGVtZW50UmVmO1xuXG4gIEBJbnB1dCgpXG4gIHByaXZhdGUgaW1wYWN0QXNzZXNzbWVudHM6IElJbXBhY3RBc3Nlc3NtZW50SlNPTkxEW10gPSBbXTtcbiAgQElucHV0KClcbiAgcHJpdmF0ZSBkYXRhU3RhdGUgPSBEYXRhU3RhdGUucmVjYWxjdWxhdGVkO1xuXG4gIHB1YmxpYyBsb2FkaW5nID0gdHJ1ZTtcbiAgcHVibGljIG5vZGVDb2xvdXJzID0gbm9kZUNvbG91cnM7XG4gIHB1YmxpYyBub0RhdGEgPSBmYWxzZTtcbiAgcHVibGljIGVycm9yPzogYW55O1xuICBwdWJsaWMgd2FybmluZ3M6IHN0cmluZ1tdID0gW107XG4gIHB1YmxpYyBzaG93V2FybmluZ3MgPSBmYWxzZTtcbiAgcHVibGljIHNlbGVjdGVkSW1wYWN0QXNzZXNzbWVudElkOiBzdHJpbmc7XG4gIHB1YmxpYyBmaWx0ZXJlZEltcGFjdEFzc2Vzc21lbnRzOiBJSW1wYWN0QXNzZXNzbWVudEpTT05MRFtdO1xuICBwdWJsaWMgc2VsZWN0ZWRNb2RlbElkOiBzdHJpbmc7XG4gIHB1YmxpYyBtb2RlbHM6IFBhcnRpYWw8SVRlcm1KU09OTEQ+W107XG4gIHB1YmxpYyBsZWdlbmQgPSBsZWdlbmQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcbiAgICBwcml2YXRlIHNlYXJjaFNlcnZpY2U6IEhlU2VhcmNoU2VydmljZSxcbiAgICBwcml2YXRlIG5vZGVTZXJ2aWNlOiBIZU5vZGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgZW5naW5lU2VydmljZTogSGVFbmdpbmVTZXJ2aWNlXG4gICkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICByZXR1cm4gdGhpcy5pbml0SW1wYWN0QXNzZXNzbWVudHMoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHJldHVybiB0aGlzLnJlbG9hZENoYXJ0KCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKCdpbXBhY3RBc3Nlc3NtZW50cycgaW4gY2hhbmdlcykge1xuICAgICAgdGhpcy5pbml0SW1wYWN0QXNzZXNzbWVudHMoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucmVsb2FkQ2hhcnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdEltcGFjdEFzc2Vzc21lbnRzKCkge1xuICAgIHRoaXMuZmlsdGVyZWRJbXBhY3RBc3Nlc3NtZW50cyA9IHRoaXMuaW1wYWN0QXNzZXNzbWVudHMuZmlsdGVyKChpYSkgPT4gaWEuZW5kcG9pbnRzPy5sZW5ndGggfHwgaWEuaW1wYWN0cz8ubGVuZ3RoKTtcbiAgICB0aGlzLnNlbGVjdGVkSW1wYWN0QXNzZXNzbWVudElkID0gdGhpcy5zZWxlY3RlZEltcGFjdEFzc2Vzc21lbnRJZCB8fCB0aGlzLmZpbHRlcmVkSW1wYWN0QXNzZXNzbWVudHM/LlswXT8uWydAaWQnXTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbG9hZEluaXRpYWxUZXJtcygpIHtcbiAgICBjb25zdCB7IHJlc3VsdHM6IHRlcm1zIH0gPSBhd2FpdCB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoPElUZXJtSlNPTkxELCBOb2RlVHlwZS5UZXJtPihcbiAgICAgIHF1ZXJ5KGZpbHRlclRlcm1UeXBlcy5tYXAoKHRlcm1UeXBlKSA9PiBtYXRjaFRlcm1UeXBlKHRlcm1UeXBlKSkpXG4gICAgKTtcbiAgICBjb25zdCBhdWdtZW50ZWRUZXJtcyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgdGVybXMubWFwKGFzeW5jICh0OiBUZXJtKSA9PiB7XG4gICAgICAgIGlmICh0LnRlcm1UeXBlID09PSAnbW9kZWwnKSB7XG4gICAgICAgICAgY29uc3QgbW9kZWwgPSBhd2FpdCB0aGlzLmVuZ2luZVNlcnZpY2UubW9kZWwoeyBtb2RlbDogdFsnQGlkJ10gfSk7XG4gICAgICAgICAgdC5kb2NzID0gbW9kZWw/LmFwaURvY3NQYXRoIHx8IG1vZGVsPy5kb2NQYXRoIHx8IG1vZGVsPy5wYXRoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgICAgfSlcbiAgICApO1xuICAgIHRoaXMuaW5pdGlhbFRlcm1zID0gT2JqZWN0LmZyb21FbnRyaWVzKGF1Z21lbnRlZFRlcm1zLm1hcCgodGVybSkgPT4gW3Rlcm1bJ0BpZCddLCB0ZXJtXSkpO1xuICAgIHJldHVybiB0aGlzLmluaXRpYWxUZXJtcztcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbG9hZExvZ1Rlcm1zKGxvZ3M6IElMb2dbXSkge1xuICAgIGNvbnN0IGlucHV0SWRzID0gdW5pcXVlKGxvZ3MuZmxhdE1hcCgobCkgPT4gW2wuY29udHJpYnV0b3IsIGwuaW5kaWNhdG9yXSkuZmlsdGVyKCh0ZXJtSWQpID0+ICF0aGlzLmluaXRpYWxUZXJtc1t0ZXJtSWRdKSk7XG4gICAgY29uc3QgeyByZXN1bHRzOiBpbnB1dHMgfSA9IGF3YWl0IHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2g8SVRlcm1KU09OTEQsIE5vZGVUeXBlLlRlcm0+KFxuICAgICAgcXVlcnkoaW5wdXRJZHMubWFwKChpZCkgPT4gbWF0Y2hFeGFjdFF1ZXJ5KCdAaWQnLCBpZCkpKVxuICAgICk7XG4gICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhpbnB1dHMubWFwKCh0ZXJtKSA9PiBbdGVybVsnQGlkJ10sIHRlcm1dKSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzUmVjYWxjdWxhdGVkKCkge1xuICAgIHJldHVybiB0aGlzLmRhdGFTdGF0ZSA9PT0gRGF0YVN0YXRlLnJlY2FsY3VsYXRlZDtcbiAgfVxuXG4gIHB1YmxpYyByZWxvYWRDaGFydCgpIHtcbiAgICBjb25zdCBpbXBhY3RBc3Nlc3NtZW50ID1cbiAgICAgIHRoaXMuZmlsdGVyZWRJbXBhY3RBc3Nlc3NtZW50cy5maW5kKChpYSkgPT4gaWFbJ0BpZCddID09PSB0aGlzLnNlbGVjdGVkSW1wYWN0QXNzZXNzbWVudElkKSB8fFxuICAgICAgdGhpcy5maWx0ZXJlZEltcGFjdEFzc2Vzc21lbnRzWzBdO1xuICAgIGNvbnN0IGluZGljYXRvcnMgPSBbXG4gICAgICAuLi4oaW1wYWN0QXNzZXNzbWVudD8uZW5kcG9pbnRzIHx8IFtdKSxcbiAgICAgIC4uLihpbXBhY3RBc3Nlc3NtZW50Py5pbXBhY3RzIHx8IFtdKVxuICAgIF07XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IG9mKGltcGFjdEFzc2Vzc21lbnQpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKCgpID0+ICh0aGlzLmxvYWRpbmcgPSB0cnVlKSksXG4gICAgICAgIG1lcmdlTWFwKG5vZGUgPT4gKHRoaXMuaW5pdGlhbFRlcm1zID8gb2Yobm9kZSkgOiBmcm9tKHRoaXMubG9hZEluaXRpYWxUZXJtcygpKS5waXBlKG1hcCgoKSA9PiBub2RlKSkpKSxcbiAgICAgICAgbWVyZ2VNYXAobm9kZSA9PlxuICAgICAgICAgIHRoaXMubm9kZVNlcnZpY2UuZ2V0TG9nKHtcbiAgICAgICAgICAgIC4uLm5vZGUsXG4gICAgICAgICAgICBkYXRhU3RhdGU6IERhdGFTdGF0ZS5yZWNhbGN1bGF0ZWRcbiAgICAgICAgICB9KVxuICAgICAgICApLFxuICAgICAgICBtYXAoKHZhbHVlKSA9PiAodmFsdWUgPyBwYXJzZUxpbmVzKHZhbHVlKSA6IFtdKSksXG4gICAgICAgIG1lcmdlQWxsKCksXG4gICAgICAgIGZpbHRlcigoeyBkYXRhIH0pID0+IGRhdGEubG9nZ2VyID09PSAnaGVzdGlhX2VhcnRoLm1vZGVscycgJiYgZGF0YS5sZXZlbCA9PT0gTGV2ZWwuZGVidWcpLFxuICAgICAgICBtYXAoKHsgZGF0YSB9KSA9PiBwYXJzZU1lc3NhZ2UoZGF0YS5tZXNzYWdlKSksXG4gICAgICAgIGZpbHRlcigobWVzc2FnZSkgPT4gJ25vZGUnIGluIG1lc3NhZ2UpLFxuICAgICAgICBtYXAocGFyc2VMb2cpLFxuICAgICAgICBmaWx0ZXIoKGxvZykgPT4gW1xuICAgICAgICAgICEhbG9nLmluZGljYXRvcixcbiAgICAgICAgICAhIWxvZy5jb250cmlidXRvcixcbiAgICAgICAgICAhaXNOYU4obG9nLndlaWdodGVkVmFsdWUpLFxuICAgICAgICAgIGxvZy5jb2VmZmljaWVudCA+IDAsXG4gICAgICAgICAgaW5kaWNhdG9ycy5zb21lKChlcnUpID0+IGVydS50ZXJtWydAaWQnXSA9PT0gbG9nLmluZGljYXRvcilcbiAgICAgICAgXS5ldmVyeShCb29sZWFuKSksXG4gICAgICAgIGdyb3VwQnkoKGxvZykgPT4gW2xvZy5pbmRpY2F0b3IsIGxvZy5jb250cmlidXRvciwgbG9nLm1vZGVsSWRdLmpvaW4oJy8nKSksXG4gICAgICAgIG1lcmdlTWFwKChncm91cCkgPT4gZ3JvdXAucGlwZSh0b0FycmF5KCkpKSxcbiAgICAgICAgbWFwKCh2YWx1ZXM6IElMb2dbXSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGxvZyA9IHZhbHVlc1swXTtcbiAgICAgICAgICBjb25zdCB7IHdlaWdodGVkVG90YWwsIHRvdGFsIH0gPSB2YWx1ZXMucmVkdWNlKFxuICAgICAgICAgICAgKHByZXYsIGN1cnIpID0+ICh7XG4gICAgICAgICAgICAgIHdlaWdodGVkVG90YWw6IHByZXYud2VpZ2h0ZWRUb3RhbCArIGN1cnIud2VpZ2h0ZWRWYWx1ZSxcbiAgICAgICAgICAgICAgdG90YWw6IHByZXYudG90YWwgKyBjdXJyLnZhbHVlXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHsgd2VpZ2h0ZWRUb3RhbDogMCwgdG90YWw6IDAgfVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBjb25zdCBpbnB1dHNPYmogPSAoaW1wYWN0QXNzZXNzbWVudC5lbWlzc2lvbnNSZXNvdXJjZVVzZSB8fCBbXSlcbiAgICAgICAgICAgIC5maWx0ZXIoKGVydSkgPT4gZXJ1LnRlcm1bJ0BpZCddID09PSBsb2cuY29udHJpYnV0b3IgJiYgZXJ1LmlucHV0cz8ubGVuZ3RoKVxuICAgICAgICAgICAgLnJlZHVjZSgoYWNjLCBlcnUpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgaW5wdXRJZCA9IGVydS5pbnB1dHMubWFwKChpKSA9PiBpWydAaWQnXSkuam9pbignOycpO1xuICAgICAgICAgICAgICBjb25zdCBjdXJyZW50T3BlcmF0aW9ucyA9IGVydS5vcGVyYXRpb25cbiAgICAgICAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIGlkOiBlcnUub3BlcmF0aW9uWydAaWQnXSxcbiAgICAgICAgICAgICAgICAgICAgICAuLi5nZXRVbml0c0FuZExhYmVsKGVydS5vcGVyYXRpb24pLFxuICAgICAgICAgICAgICAgICAgICAgIG1vZGVsSWQ6IGxvZy5tb2RlbElkLFxuICAgICAgICAgICAgICAgICAgICAgIHdlaWdodGVkVmFsdWU6IGVydS52YWx1ZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgOiBbXTtcblxuICAgICAgICAgICAgICBhY2NbaW5wdXRJZF0gPSBhY2NbaW5wdXRJZF1cbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgLi4uYWNjW2lucHV0SWRdLFxuICAgICAgICAgICAgICAgICAgICB3ZWlnaHRlZFZhbHVlOiBhY2NbaW5wdXRJZF0ud2VpZ2h0ZWRWYWx1ZSArIGVydS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgbW9kZWxJZDogbG9nLm1vZGVsSWQsXG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbnM6IFsuLi5hY2NbaW5wdXRJZF0ub3BlcmF0aW9ucywgLi4uY3VycmVudE9wZXJhdGlvbnNdXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBpbnB1dElkLFxuICAgICAgICAgICAgICAgICAgICAuLi5nZXRVbml0c0FuZExhYmVsKFxuICAgICAgICAgICAgICAgICAgICAgIGVydS5pbnB1dHMubGVuZ3RoID09PSAxID8gZXJ1LmlucHV0c1swXSA6IHsgbmFtZTogJ0lucHV0IGdyb3VwICh1bmRlciBkZXZlbG9wbWVudCknIH1cbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgbW9kZWxJZDogbG9nLm1vZGVsSWQsXG4gICAgICAgICAgICAgICAgICAgIHdlaWdodGVkVmFsdWU6IGVydS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uczogWy4uLmN1cnJlbnRPcGVyYXRpb25zXVxuICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgIH0sIHt9KTtcbiAgICAgICAgICBjb25zdCBpbnB1dHM6IElJbnB1dExvZ1tdID0gT2JqZWN0LnZhbHVlcyhpbnB1dHNPYmopO1xuICAgICAgICAgIHJldHVybiB7IC4uLmxvZywgd2VpZ2h0ZWRWYWx1ZTogd2VpZ2h0ZWRUb3RhbCwgdmFsdWU6IHRvdGFsLCBpbnB1dHMgfSBhcyBJTG9nO1xuICAgICAgICB9KSxcbiAgICAgICAgdG9BcnJheSgpLFxuICAgICAgICBtZXJnZU1hcCgobG9ncykgPT4gZnJvbSh0aGlzLmxvYWRMb2dUZXJtcyhsb2dzKSkucGlwZShcbiAgICAgICAgICBtYXAobG9nVGVybXMgPT4ge1xuICAgICAgICAgICAgdGhpcy5hbGxUZXJtcyA9IHsgLi4udGhpcy5pbml0aWFsVGVybXMsIC4uLmxvZ1Rlcm1zIH07XG4gICAgICAgICAgICByZXR1cm4gbG9ncztcbiAgICAgICAgICB9KVxuICAgICAgICApKSxcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgIHRoaXMuZXJyb3IgPSBlcnI7XG4gICAgICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRhcCgoKSA9PiAodGhpcy5sb2FkaW5nID0gZmFsc2UpKSxcbiAgICAgICAgdGFwKChsb2dzKSA9PiAodGhpcy5ub0RhdGEgPSAhbG9ncy5sZW5ndGgpKSxcbiAgICAgICAgdGFwKChsb2dzOiBJTG9nW10pID0+IHtcbiAgICAgICAgICB0aGlzLndhcm5pbmdzID0gd2FybmluZ3MobG9ncywgdGhpcy5hbGxUZXJtcyk7XG4gICAgICAgICAgdGhpcy5zaG93V2FybmluZ3MgPSB0aGlzLndhcm5pbmdzLmxlbmd0aCA+IDA7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChsb2dzOiBJTG9nW10pID0+IHtcbiAgICAgICAgdGhpcy5yb290ID0gbnVsbDtcbiAgICAgICAgdGhpcy5ub2RlID0gbnVsbDtcbiAgICAgICAgdGhpcy5saW5rID0gbnVsbDtcbiAgICAgICAgY29uc3QgaGFzRGVmYXVsdE1vZGVsTG9ncyA9IGxvZ3Muc29tZSgobG9nKSA9PiBsb2cubW9kZWxJZCA9PT0gZ2V0RGVmYXVsdE1vZGVsSWQobG9nLmluZGljYXRvcikpO1xuICAgICAgICB0aGlzLm1vZGVscyA9IFtcbiAgICAgICAgICAuLi4oaGFzRGVmYXVsdE1vZGVsTG9nc1xuICAgICAgICAgICAgPyBbeyAnQGlkJzogZGVmYXVsdEluZGljYXRvcnNNb2RlbElkLCBuYW1lOiBkZWZhdWx0SW5kaWNhdG9yc01vZGVsTmFtZSB9XVxuICAgICAgICAgICAgOiBbXSksXG4gICAgICAgICAgLi4udW5pcXVlKGxvZ3MubWFwKCh7IG1vZGVsSWQgfSkgPT4gdGhpcy5hbGxUZXJtc1ttb2RlbElkXSB8fCB7ICdAaWQnOiBtb2RlbElkIH0pKVxuICAgICAgICBdO1xuICAgICAgICB0aGlzLnNlbGVjdGVkTW9kZWxJZCA9IHRoaXMubW9kZWxzPy5bMF0/LlsnQGlkJ107XG4gICAgICAgIGlmIChsb2dzLmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMubG9nc0FsbE1vZGVscyA9IGxvZ3M7XG4gICAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pbml0Q2hhcnQoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgaW5pdENoYXJ0KCkge1xuICAgIGNvbnN0IGxvZ3MgPSB0aGlzLmxvZ3NBbGxNb2RlbHMuZmlsdGVyKFxuICAgICAgKGxvZykgPT5cbiAgICAgICAgbG9nLm1vZGVsSWQgPT09XG4gICAgICAgICh0aGlzLnNlbGVjdGVkTW9kZWxJZCA9PT0gZGVmYXVsdEluZGljYXRvcnNNb2RlbElkID8gZ2V0RGVmYXVsdE1vZGVsSWQobG9nLmluZGljYXRvcikgOiB0aGlzLnNlbGVjdGVkTW9kZWxJZClcbiAgICApO1xuICAgIGNvbnN0IHRvdGFsc1BlckluZGljYXRvciA9IGxvZ3MucmVkdWNlKChhY2MsIGxvZykgPT4ge1xuICAgICAgYWNjW2xvZy5pbmRpY2F0b3JdID0gKGFjY1tsb2cuaW5kaWNhdG9yXSB8fCAwKSArIGxvZy53ZWlnaHRlZFZhbHVlO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG4gICAgY29uc3QgaW5kaWNhdG9yczogeyBbaWQ6IHN0cmluZ106IE5vZGVEYXR1bSB9ID0gbG9ncy5yZWR1Y2UoKGFjYywgbG9nKSA9PiB7XG4gICAgICBjb25zdCB0eXBlTWFwcGluZyA9IHtcbiAgICAgICAgW1Rlcm1UZXJtVHlwZS5lbmRwb2ludEluZGljYXRvcl06IENoYXJ0Tm9kZVR5cGUuZW5kcG9pbnQsXG4gICAgICAgIFtUZXJtVGVybVR5cGUuY2hhcmFjdGVyaXNlZEluZGljYXRvcl06IENoYXJ0Tm9kZVR5cGUubWlkcG9pbnQsXG4gICAgICAgIFtUZXJtVGVybVR5cGUuZW1pc3Npb25dOiBDaGFydE5vZGVUeXBlLmVtaXNzaW9uLFxuICAgICAgICBbVGVybVRlcm1UeXBlLnJlc291cmNlVXNlXTogQ2hhcnROb2RlVHlwZS5lbWlzc2lvbixcbiAgICAgICAgW1Rlcm1UZXJtVHlwZS5vcGVyYXRpb25dOiBDaGFydE5vZGVUeXBlLm9wZXJhdGlvblxuICAgICAgfTtcblxuICAgICAgY29uc3QgY29udHJpYnV0b3JUeXBlID0gdHlwZU1hcHBpbmdbdGhpcy5hbGxUZXJtc1tsb2cuY29udHJpYnV0b3JdPy50ZXJtVHlwZV0gfHwgQ2hhcnROb2RlVHlwZS5pbnB1dDtcbiAgICAgIGNvbnN0IGluZGljYXRvclR5cGUgPSB0eXBlTWFwcGluZ1t0aGlzLmFsbFRlcm1zW2xvZy5pbmRpY2F0b3JdPy50ZXJtVHlwZV07XG4gICAgICBjb25zdCBjb250cmlidXRvck5vZGUgPSB7XG4gICAgICAgIGlkOiBsb2cuY29udHJpYnV0b3IsXG4gICAgICAgIC4uLmdldFVuaXRzQW5kTGFiZWwodGhpcy5hbGxUZXJtc1tsb2cuY29udHJpYnV0b3JdLCBsb2cuY29udHJpYnV0b3IpLFxuICAgICAgICB0eXBlOiBjb250cmlidXRvclR5cGUsXG4gICAgICAgIHZhbHVlOiBsb2cudmFsdWUsXG4gICAgICAgIHdlaWdodGVkVmFsdWU6IGxvZy53ZWlnaHRlZFZhbHVlLFxuICAgICAgICBtb2RlbElkOiBsb2cubW9kZWxJZCxcbiAgICAgICAgZnJhY3Rpb246IGxvZy53ZWlnaHRlZFZhbHVlIC8gdG90YWxzUGVySW5kaWNhdG9yW2xvZy5pbmRpY2F0b3JdLFxuICAgICAgICBjaGlsZHJlbjpcbiAgICAgICAgICBjb250cmlidXRvclR5cGUgPT09IENoYXJ0Tm9kZVR5cGUuZW1pc3Npb25cbiAgICAgICAgICAgID8gbG9nLmlucHV0cy5tYXAoKGkpID0+ICh7XG4gICAgICAgICAgICAgICAgLi4uaSxcbiAgICAgICAgICAgICAgICB0eXBlOiBDaGFydE5vZGVUeXBlLmlucHV0LFxuICAgICAgICAgICAgICAgIGZyYWN0aW9uOiBpLndlaWdodGVkVmFsdWUgLyBsb2cudmFsdWUsXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IGkub3BlcmF0aW9ucy5tYXAoKG8pID0+ICh7XG4gICAgICAgICAgICAgICAgICAuLi5vLFxuICAgICAgICAgICAgICAgICAgdHlwZTogQ2hhcnROb2RlVHlwZS5vcGVyYXRpb24sXG4gICAgICAgICAgICAgICAgICBmcmFjdGlvbjogby53ZWlnaHRlZFZhbHVlIC8gaS53ZWlnaHRlZFZhbHVlXG4gICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgOiBbXVxuICAgICAgfTtcblxuICAgICAgYWNjW2xvZy5pbmRpY2F0b3JdXG4gICAgICAgID8gYWNjW2xvZy5pbmRpY2F0b3JdLmNoaWxkcmVuLnB1c2goY29udHJpYnV0b3JOb2RlKVxuICAgICAgICA6IChhY2NbbG9nLmluZGljYXRvcl0gPSB7XG4gICAgICAgICAgICBpZDogbG9nLmluZGljYXRvcixcbiAgICAgICAgICAgIC4uLmdldFVuaXRzQW5kTGFiZWwodGhpcy5hbGxUZXJtc1tsb2cuaW5kaWNhdG9yXSwgbG9nLmluZGljYXRvciksXG4gICAgICAgICAgICBtb2RlbElkOiBsb2cubW9kZWxJZCxcbiAgICAgICAgICAgIHR5cGU6IGluZGljYXRvclR5cGUsXG4gICAgICAgICAgICB2YWx1ZTogdG90YWxzUGVySW5kaWNhdG9yW2xvZy5pbmRpY2F0b3JdLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtjb250cmlidXRvck5vZGVdXG4gICAgICAgICAgfSk7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcbiAgICBjb25zdCBpbmRpY2F0b3JBcnJheSA9IE9iamVjdC52YWx1ZXMoaW5kaWNhdG9ycyk7XG4gICAgY29uc3QgbGlua2VkSW5kaWNhdG9ycyA9IGluZGljYXRvckFycmF5XG4gICAgICAvLyBsaW5rIGVuZHBvaW50cyB0byBtaWRwb2ludHMgYW5kIG1pZHBvaW50cyB0byBhbnkgY2hpbGQgbWlkcG9pbnRzXG4gICAgICAubWFwKChpbmRpY2F0b3IpID0+ICh7XG4gICAgICAgIC4uLmluZGljYXRvcixcbiAgICAgICAgY2hpbGRyZW46IGluZGljYXRvci5jaGlsZHJlbi5tYXAoKGNoaWxkKSA9PiB7XG4gICAgICAgICAgY29uc3QgcHJlZml4UmVtb3ZlZCA9IGluZGljYXRvci50eXBlID09PSBDaGFydE5vZGVUeXBlLmVuZHBvaW50ICYmIGNoaWxkLmxhYmVsLnNwbGl0KCcsICcpWzFdO1xuICAgICAgICAgIHJldHVybiBjaGlsZC50eXBlID09PSBDaGFydE5vZGVUeXBlLm1pZHBvaW50XG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAuLi5jaGlsZCxcbiAgICAgICAgICAgICAgICBsYWJlbDogcHJlZml4UmVtb3ZlZFxuICAgICAgICAgICAgICAgICAgPyAnWy4uLl0nICsgcHJlZml4UmVtb3ZlZC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHByZWZpeFJlbW92ZWQuc2xpY2UoMSlcbiAgICAgICAgICAgICAgICAgIDogY2hpbGQubGFiZWwsXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IGluZGljYXRvcnNbY2hpbGQuaWRdPy5jaGlsZHJlblxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IGNoaWxkO1xuICAgICAgICB9KVxuICAgICAgfSkpXG4gICAgICAvLyByZW1vdmUgZHVwbGljYXRlZCBpbmRpY2F0b3JzXG4gICAgICAuZmlsdGVyKFxuICAgICAgICAoaW5kaWNhdG9yKSA9PiAhaW5kaWNhdG9yQXJyYXkuc29tZSgocGFyZW50KSA9PiBwYXJlbnQuY2hpbGRyZW4uc29tZSgoY2hpbGQpID0+IGNoaWxkLmlkID09PSBpbmRpY2F0b3IuaWQpKVxuICAgICAgKTtcblxuICAgIGNvbnN0IGVuZHBvaW50cyA9IGxpbmtlZEluZGljYXRvcnMuZmlsdGVyKChpbmRpY2F0b3IpID0+IGluZGljYXRvci50eXBlID09PSBDaGFydE5vZGVUeXBlLmVuZHBvaW50KTtcbiAgICBjb25zdCBub25MQ0FJbmRpY2F0b3JzID0gbGlua2VkSW5kaWNhdG9ycy5maWx0ZXIoKGluZGljYXRvcikgPT4gaW5kaWNhdG9yLnR5cGUgPT09IENoYXJ0Tm9kZVR5cGUubWlkcG9pbnQpO1xuXG4gICAgZW5kcG9pbnRzLmxlbmd0aCAmJlxuICAgICAgbm9uTENBSW5kaWNhdG9ycy5sZW5ndGggJiZcbiAgICAgIGVuZHBvaW50cy5wdXNoKHtcbiAgICAgICAgaWQ6IG5vbkxDQUluZGljYXRvcnNJZCxcbiAgICAgICAgbGFiZWw6ICdPdGhlciBpbmRpY2F0b3JzJyxcbiAgICAgICAgdGVybTogJ24vYScsXG4gICAgICAgIG1vZGVsSWQ6ICduL2EnLFxuICAgICAgICB1bml0czogJycsXG4gICAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgICB3ZWlnaHRlZFZhbHVlOiBudWxsLFxuICAgICAgICB0eXBlOiBDaGFydE5vZGVUeXBlLmVuZHBvaW50LFxuICAgICAgICBmcmFjdGlvbjogbnVsbCxcbiAgICAgICAgY2hpbGRyZW46IG5vbkxDQUluZGljYXRvcnNcbiAgICAgIH0pO1xuXG4gICAgY29uc3Qgcm9vdCA9IGQzLmhpZXJhcmNoeTxOb2RlRGF0dW0+KHtcbiAgICAgIGlkOiAnZHVtbXktcm9vdCcsXG4gICAgICBsYWJlbDogJycsXG4gICAgICB0ZXJtOiAnJyxcbiAgICAgIG1vZGVsSWQ6ICcnLFxuICAgICAgdmFsdWU6IG51bGwsXG4gICAgICB3ZWlnaHRlZFZhbHVlOiBudWxsLFxuICAgICAgdW5pdHM6ICcnLFxuICAgICAgdHlwZTogQ2hhcnROb2RlVHlwZS5yb290LFxuICAgICAgY2hpbGRyZW46IGVuZHBvaW50cy5sZW5ndGggPyBlbmRwb2ludHMgOiBsaW5rZWRJbmRpY2F0b3JzXG4gICAgfSk7XG5cbiAgICBjb25zdCBpbmNsdWRlZFR5cGVzID0gdW5pcXVlKHJvb3QuZGVzY2VuZGFudHMoKS5tYXAoKG4pID0+IG4uZGF0YS50eXBlKSk7XG4gICAgdGhpcy5sZWdlbmQgPSBsZWdlbmQuZmlsdGVyKCh7IHR5cGUgfSkgPT4gaW5jbHVkZWRUeXBlcy5pbmNsdWRlcyh0eXBlKSk7XG5cbiAgICB0aGlzLnJvb3QgPSByb290XG4gICAgICAuc29ydCgoYSwgYikgPT4gYi5kYXRhLmZyYWN0aW9uIC0gYS5kYXRhLmZyYWN0aW9uKVxuICAgICAgLmVhY2hBZnRlcigobm9kZSkgPT4ge1xuICAgICAgICBpZiAobm9kZS5kYXRhLmZyYWN0aW9uID09PSAwKSB7XG4gICAgICAgICAgbm9kZS5jaGlsZHJlbiA9IG51bGw7XG4gICAgICAgICAgKG5vZGUuaGVpZ2h0IGFzIG51bWJlcikgPSAwO1xuICAgICAgICB9XG4gICAgICAgIG5vZGUuZGF0YS50eXBlICE9PSBDaGFydE5vZGVUeXBlLnJvb3QgJiYgY29sbGFwc2VDaGlsZHJlbihub2RlKTtcbiAgICAgICAgZ3JvdXBCeVBlcmNlbnRhZ2Uobm9kZSkgJiYgZ3JvdXBQZXJjZW50YWdlKG5vZGUpO1xuICAgICAgICBub2RlLmRhdGEuc2hvd0JhciA9IHNob3dCYXIobm9kZSk7XG4gICAgICAgIG5vZGUuZGF0YS5tb2RlbE5hbWUgPSB0aGlzLmFsbFRlcm1zW25vZGUuZGF0YS5tb2RlbElkXT8ubmFtZTtcbiAgICAgICAgbm9kZS5kYXRhLm1vZGVsRG9jcyA9IHRoaXMuYWxsVGVybXNbbm9kZS5kYXRhLm1vZGVsSWRdPy5kb2NzO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLnJlbmRlckNoYXJ0KCk7XG4gIH1cblxuICBwcml2YXRlIHJlbmRlckNoYXJ0KCkge1xuICAgIHRoaXMuc3ZnID0gZDMuc2VsZWN0KHRoaXMuY2hhcnRSZWY/Lm5hdGl2ZUVsZW1lbnQpO1xuICAgIHRoaXMuc3ZnLnNlbGVjdEFsbCgnKicpLnJlbW92ZSgpO1xuICAgIC8vIHJvb3Qgbm9kZSBpcyBhbHdheXMgcG9zaXRpb25lZCBhdCDin6gwLCAw4p+pXG4gICAgY29uc3QgaW5uZXJIZWlnaHQgPSAodGhpcy5yb290LmNoaWxkcmVuLmxlbmd0aCAtIDEpICogbm9kZUhlaWdodCAqIG5vZGVTcGFjaW5nRmFjdG9yICsgbm9kZUhlaWdodDtcbiAgICB0aGlzLnlNaW4gPSAobm9kZUhlaWdodCAtIGlubmVySGVpZ2h0KSAvIDIgLSBtYXJnaW4udG9wO1xuICAgIHRoaXMueVRvdGFsID0gaW5uZXJIZWlnaHQgKyBtYXJnaW4udG9wICsgbWFyZ2luLmJvdHRvbTtcbiAgICB0aGlzLnN2Z1xuICAgICAgLmF0dHIoJ3ZpZXdCb3gnLCBbLW1hcmdpbi5sZWZ0LCB0aGlzLnlNaW4sIHdpZHRoLCB0aGlzLnlUb3RhbF0uam9pbignICcpKVxuICAgICAgLmF0dHIoJ2ZvbnQtc2l6ZScsIGAke2ZvbnRTaXplfXB4YCk7XG5cbiAgICB0aGlzLm5vZGUgPSB0aGlzLnN2Zy5hcHBlbmQoJ2cnKS5zZWxlY3RBbGwoJ2cnKTtcbiAgICB0aGlzLmxpbmsgPSB0aGlzLnN2Zy5hcHBlbmQoJ2cnKS5zZWxlY3RBbGwoJ3BhdGgnKTtcbiAgICB0aGlzLnRvb2x0aXAgPSB0aGlzLnN2Zy5hcHBlbmQoJ2cnKS5jbGFzc2VkKCd0b29sdGlwJywgdHJ1ZSkuc3R5bGUoJ29wYWNpdHknLCAwKTtcblxuICAgIHRoaXMuaGFuZGxlTm9kZUNsaWNrKFxuICAgICAgbnVsbCxcbiAgICAgIHRoaXMucm9vdC5maW5kKChub2RlKSA9PiBub2RlLmRlcHRoID09PSAxKVxuICAgICk7XG4gIH1cblxuICAvLyBmbGlwIHgveSB0byBnbyBsZWZ0LXJpZ2h0IGluc3RlYWQgb2YgdG9wLWJvdHRvbVxuICBwcml2YXRlIHVwZGF0ZUNoYXJ0KHsgdG9nZ2xpbmdHcm91cCA9IGZhbHNlLCBzd2l0Y2hpbmdTZWxlY3Rpb24gPSBmYWxzZSB9ID0ge30pIHtcbiAgICBjb25zdCByb290ID0gdGhpcy5yb290O1xuICAgIGNvbnN0IHRyZWVMYXlvdXQgPSBkM1xuICAgICAgLnRyZWU8Tm9kZURhdHVtPigpXG4gICAgICAubm9kZVNpemUoW25vZGVIZWlnaHQsIG5vZGVXaWR0aF0pXG4gICAgICAuc2VwYXJhdGlvbigoLi4ubmVpZ2hib3VyczogQ2hhcnROb2RlW10pID0+XG4gICAgICAgIG5laWdoYm91cnMuc29tZSgobikgPT4gbi5kYXRhLmdyb3VwICYmIG4uX2dyb3VwT3BlbikgPyAxIC0gZ3JvdXBPdmVybGFwIC8gbm9kZUhlaWdodCA6IG5vZGVTcGFjaW5nRmFjdG9yXG4gICAgICApO1xuICAgIGNvbnN0IHRyZWU6IENoYXJ0Tm9kZSA9IHRyZWVMYXlvdXQocm9vdCk7XG4gICAgY29uc3QgbGlua3M6IExpbmtbXSA9IHRyZWUubGlua3MoKS5maWx0ZXIoKGQpID0+IGQuc291cmNlLmRhdGEudHlwZSAhPT0gQ2hhcnROb2RlVHlwZS5yb290KSB8fCBbXTtcbiAgICBjb25zdCBub2RlcyA9IHRyZWUuZGVzY2VuZGFudHMoKS5yZXZlcnNlKCk7XG5cbiAgICBub2Rlcy5mb3JFYWNoKChkKSA9PiB7XG4gICAgICBkLnkgPVxuICAgICAgICAoZC5kZXB0aCAtIDEgKyAoT2JqZWN0LmtleXMoQ2hhcnROb2RlVHlwZSkubGVuZ3RoIC0gMSAtIHRoaXMubGVnZW5kLmxlbmd0aCkgLyAyKSAqIChub2RlV2lkdGggKyBsYXllclNwYWNpbmcpO1xuICAgIH0pO1xuXG4gICAgLy8gQnkgZGVmYXVsdCB0aGUgdHJlZSBleHBhbmRzIHN5bW1ldHJpY2FsbHkgdXB3YXJkcyBhbmQgZG93bndhcmRzIGZyb20gdGhlIHNlbGVjdGVkIG5vZGUuXG4gICAgLy8gV2UgbW92ZSBjaGlsZHJlbiBkb3duIHRvIHByZXZlbnQgZXhwYW5zaW9uIHVwd2FyZHMgb3IgdXAgdG8gbWluaW1pc2UgZXhwYW5zaW9uIGRvd253YXJkc1xuICAgIGNvbnN0IG1pbmltaXNlSGVpZ2h0ID0gKHsgcHJldmlvdXNUYW5zbGF0ZVksIHByZXZpb3VzWVRvdGFsIH0sIGRlcHRoOiBudW1iZXIpID0+IHtcbiAgICAgIGNvbnN0IG1heFlUb3RhbCA9IE1hdGgubWF4KHByZXZpb3VzWVRvdGFsLCB0aGlzLnlUb3RhbCk7XG4gICAgICBjb25zdCBwYXJlbnQgPSB0cmVlLmZpbmQoKG5vZGUpID0+IChub2RlLmRlcHRoID09PSBkZXB0aCAtIDEpICYmIG5vZGUuX29wZW4pO1xuICAgICAgcGFyZW50Py5jaGlsZHJlbj8uZm9yRWFjaCgobm9kZSkgPT4gKG5vZGUueCArPSBwcmV2aW91c1RhbnNsYXRlWSkpO1xuXG4gICAgICBjb25zdCB7IG1pbjogbWluWCwgbWF4OiBtYXhYIH0gPSAocGFyZW50Py5jaGlsZHJlbiB8fCBbXSkucmVkdWNlKFxuICAgICAgICAoeyBtaW4sIG1heCB9LCBuKSA9PiAoe1xuICAgICAgICAgIG1pbjogbi54IDwgbWluID8gbi54IDogbWluLFxuICAgICAgICAgIG1heDogbi54ID4gbWF4ID8gbi54IDogbWF4XG4gICAgICAgIH0pLFxuICAgICAgICB7IG1pbjogcGFyZW50Py54LCBtYXg6IHBhcmVudD8ueCB9XG4gICAgICApO1xuXG4gICAgICBjb25zdCB7IHlNaW4sIHlUb3RhbCB9ID0gcGFyZW50Py5jaGlsZHJlbj8ubGVuZ3RoXG4gICAgICAgID8geyB5TWluOiBtaW5YIC0gbWFyZ2luLnRvcCwgeVRvdGFsOiBtYXhYIC0gbWluWCArIG1hcmdpbi5ib3R0b20gKyBtYXJnaW4udG9wICsgbm9kZUhlaWdodCB9XG4gICAgICAgIDogeyB5TWluOiBudWxsLCB5VG90YWw6IG51bGwgfTtcblxuICAgICAgY29uc3Qgb3ZlcmZsb3dBYm92ZSA9IHRoaXMueU1pbiAtIHlNaW47IC8vIHBvc2l0aXZlIHdoZW4gb3ZlcmZsb3dzIGFib3ZlXG4gICAgICBjb25zdCBvdmVyZmxvd0JlbG93ID0geVRvdGFsICsgeU1pbiAtIChtYXhZVG90YWwgKyB0aGlzLnlNaW4pOyAvLyBwb3NpdGl2ZSB3aGVuIG92ZXJmbG93cyBiZWxvd1xuICAgICAgLy8gLSB0cmFuc2xhdGVZIHdoZW4gb3ZlcmZsb3dzIGFib3ZlOiBwb3NpdGl2ZVxuICAgICAgLy8gLSB0cmFuc2xhdGVZIHdoZW4gb3ZlcmZsb3dzIGJlbG93OiBuZWdhdGl2ZSBieSBzbWFsbGVzdCBvZiB1bmRlcmZsb3cgYWJvdmUgb3Igb3ZlcmZsb3cgYmVsb3dcbiAgICAgIC8vIC0gdHJhbnNsYXRlWSB3aGVuIG5vIG92ZXJmbG93OiAwXG4gICAgICBjb25zdCB0cmFuc2xhdGVZID1cbiAgICAgICAgb3ZlcmZsb3dBYm92ZSA+IDAgPyBvdmVyZmxvd0Fib3ZlIDogb3ZlcmZsb3dCZWxvdyA+IDAgPyBNYXRoLm1heCgtb3ZlcmZsb3dCZWxvdywgb3ZlcmZsb3dBYm92ZSkgOiAwO1xuXG4gICAgICBwYXJlbnQ/LmNoaWxkcmVuPy5mb3JFYWNoKChub2RlKSA9PiAobm9kZS54ICs9IHRyYW5zbGF0ZVkpKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcHJldmlvdXNZVG90YWw6IE1hdGgubWF4KHlUb3RhbCwgcHJldmlvdXNZVG90YWwpLFxuICAgICAgICBwcmV2aW91c1RhbnNsYXRlWTogdHJhbnNsYXRlWSArIHByZXZpb3VzVGFuc2xhdGVZXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCB7IHByZXZpb3VzWVRvdGFsOiBuZXdIZWlnaHQgfSA9IFtcbiAgICAgIDIsIDMsIDQsIDVcbiAgICBdLnJlZHVjZShtaW5pbWlzZUhlaWdodCwge1xuICAgICAgcHJldmlvdXNUYW5zbGF0ZVk6IDAsXG4gICAgICBwcmV2aW91c1lUb3RhbDogdGhpcy55VG90YWxcbiAgICB9KTtcblxuICAgIHRoaXMuc3ZnLnRyYW5zaXRpb24oKS5kdXJhdGlvbigzMDApLmF0dHIoJ3ZpZXdCb3gnLCBbLW1hcmdpbi5sZWZ0LCB0aGlzLnlNaW4sIHdpZHRoLCBuZXdIZWlnaHRdLmpvaW4oJyAnKSk7XG5cbiAgICB0aGlzLm5vZGUgPSB0aGlzLm5vZGVcbiAgICAgIC5kYXRhKFxuICAgICAgICBub2RlcyxcbiAgICAgICAgKGQpID0+IGAke2QucGFyZW50Py5wYXJlbnQ/LnBhcmVudD8uZGF0YS5pZH0tJHtkLnBhcmVudD8ucGFyZW50Py5kYXRhLmlkfS0ke2QucGFyZW50Py5kYXRhLmlkfS0ke2QuZGF0YS5pZH1gXG4gICAgICApXG4gICAgICAuam9pbihcbiAgICAgICAgKGVudGVyKSA9PlxuICAgICAgICAgIGVudGVyXG4gICAgICAgICAgICAuYXBwZW5kKCdnJylcbiAgICAgICAgICAgIC5jYWxsKGVudGVyTm9kZXMpXG4gICAgICAgICAgICAuYXR0cignb3BhY2l0eScsIDApXG4gICAgICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgKGQpID0+ICd0cmFuc2xhdGUoJyArICh0b2dnbGluZ0dyb3VwID8gZC55IDogZC55IC0gbm9kZVdpZHRoIC8gMikgKyAnLCcgKyBkLnggKyAnKScpLFxuICAgICAgICAodXBkYXRlKSA9PiB1cGRhdGUsXG4gICAgICAgIChleGl0KSA9PlxuICAgICAgICAgIGV4aXRcbiAgICAgICAgICAgIC50cmFuc2l0aW9uKClcbiAgICAgICAgICAgIC5kdXJhdGlvbihub2RlRHVyYXRpb24gLyAyKVxuICAgICAgICAgICAgLmRlbGF5KChkKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gZC5wYXJlbnQ/LmNoaWxkcmVuIHx8IGQucGFyZW50Py5fY2hpbGRyZW47XG4gICAgICAgICAgICAgIHJldHVybiAoY2hpbGRyZW4/Lmxlbmd0aCAtIGNoaWxkcmVuPy5pbmRleE9mKGQpIC0gMSkgKiAxMDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuZWFzZShkMy5lYXNlRWxhc3RpY0luLmFtcGxpdHVkZSgwLjUpLnBlcmlvZCgxKSlcbiAgICAgICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAoZCkgPT4gJ3RyYW5zbGF0ZSgnICsgKHRvZ2dsaW5nR3JvdXAgPyBkLnkgOiBkLnkgLSBub2RlV2lkdGggLyAyKSArICcsJyArIGQueCArICcpJylcbiAgICAgICAgICAgIC5hdHRyKCdvcGFjaXR5JywgMClcbiAgICAgICAgICAgIC5yZW1vdmUoKVxuICAgICAgKTtcblxuICAgIHRoaXMubm9kZVxuICAgICAgLmNhbGwobWVyZ2VkTm9kZXMsIHsgdGlwU2VsZWN0aW9uOiB0aGlzLnRvb2x0aXAgfSlcbiAgICAgIC50cmFuc2l0aW9uKClcbiAgICAgIC5kZWxheSgoZCkgPT4ge1xuICAgICAgICBjb25zdCBncm91cENsb3NpbmcgPSB0b2dnbGluZ0dyb3VwICYmICFkLnBhcmVudD8uY2hpbGRyZW4/LmZpbmQoKG4pID0+IG4uZGF0YS5ncm91cCk/Ll9ncm91cE9wZW47XG4gICAgICAgIHJldHVybiBncm91cENsb3NpbmcgPyBncm91cERlbGF5IDogKHN3aXRjaGluZ1NlbGVjdGlvbiA/IG5vZGVEdXJhdGlvbiA6IDApICsgZC5wYXJlbnQ/LmNoaWxkcmVuLmluZGV4T2YoZCkgKiAxMDtcbiAgICAgIH0pXG4gICAgICAuZHVyYXRpb24obm9kZUR1cmF0aW9uKVxuICAgICAgLmVhc2UoZDMuZWFzZUVsYXN0aWNPdXQuYW1wbGl0dWRlKDAuNSkucGVyaW9kKDEpKVxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIChkKSA9PiBgdHJhbnNsYXRlKCR7ZC55fSwke2QueH0pYClcbiAgICAgIC5hdHRyKCdvcGFjaXR5JywgMSk7XG5cbiAgICB0aGlzLm5vZGUuc2VsZWN0QWxsKCcubm9kZS1vcGVuYWJsZScpLm9uKCdjbGljaycsIHRoaXMuaGFuZGxlTm9kZUNsaWNrLmJpbmQodGhpcykpO1xuICAgIHRoaXMubm9kZS5zZWxlY3RBbGwoJy5ncm91cC1idXR0b24nKS5vbignY2xpY2snLCB0aGlzLmhhbmRsZUdyb3VwQnV0dG9uQ2xpY2suYmluZCh0aGlzKSk7XG5cbiAgICB0aGlzLmxpbmsgPSB0aGlzLmxpbmtcbiAgICAgIC5kYXRhKFxuICAgICAgICBsaW5rcyxcbiAgICAgICAgKGQpID0+IGAke2Quc291cmNlLnBhcmVudD8ucGFyZW50Py5kYXRhLmlkfS0ke2Quc291cmNlLnBhcmVudD8uZGF0YS5pZH0tJHtkLnNvdXJjZS5kYXRhLmlkfS0ke2QudGFyZ2V0LmRhdGEuaWR9YFxuICAgICAgKVxuICAgICAgLmpvaW4oXG4gICAgICAgIChlbnRlcikgPT4gZW50ZXIuYXBwZW5kKCdwYXRoJykuY2xhc3NlZCgnbGluay1wYXRoJywgdHJ1ZSkuYXR0cignb3BhY2l0eScsIDApLFxuICAgICAgICAodXBkYXRlKSA9PiB1cGRhdGUsXG4gICAgICAgIChleGl0KSA9PlxuICAgICAgICAgIGV4aXRcbiAgICAgICAgICAgIC50cmFuc2l0aW9uKClcbiAgICAgICAgICAgIC5kdXJhdGlvbihsaW5rRHVyYXRpb24gLyAyKVxuICAgICAgICAgICAgLmRlbGF5KChkKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gZC5zb3VyY2UucGFyZW50Py5jaGlsZHJlbiB8fCBkLnNvdXJjZS5wYXJlbnQ/Ll9jaGlsZHJlbjtcbiAgICAgICAgICAgICAgcmV0dXJuIChjaGlsZHJlbj8ubGVuZ3RoIC0gY2hpbGRyZW4/LmluZGV4T2YoZC50YXJnZXQpIC0gMSkgKiAxMDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuYXR0cignb3BhY2l0eScsIDApXG4gICAgICAgICAgICAucmVtb3ZlKClcbiAgICAgIClcbiAgICAgIC5jYWxsKG1lcmdlZExpbmtzLCB7IHRvZ2dsaW5nR3JvdXAsIHN3aXRjaGluZ1NlbGVjdGlvbiB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlR3JvdXBCdXR0b25DbGljayhfZXZlbnQ6IGFueSwgZDogQ2hhcnROb2RlKSB7XG4gICAgaWYgKGQuX2dyZXllZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkLl9ncm91cE9wZW4gPSAhZC5fZ3JvdXBPcGVuO1xuICAgIGNvbnN0IGNoaWxkcmVuID0gZC5wYXJlbnQuX2dyb3VwQ2hpbGRyZW47XG4gICAgZC5wYXJlbnQuX2dyb3VwQ2hpbGRyZW4gPSBkLnBhcmVudC5jaGlsZHJlbjtcbiAgICBkLnBhcmVudC5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICAgIHRoaXMudXBkYXRlQ2hhcnQoeyB0b2dnbGluZ0dyb3VwOiB0cnVlIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVOb2RlQ2xpY2soX2V2ZW50OiBhbnksIGQ6IENoYXJ0Tm9kZSB8IEhOb2RlKTogdm9pZCB7XG4gICAgZC5fb3BlbiA9ICFkLl9vcGVuO1xuICAgIGNvbnN0IHN3aXRjaGluZ1NlbGVjdGlvbiA9ICdfZ3JleWVkJyBpbiBkICYmIGQuX2dyZXllZDtcbiAgICBkLnBhcmVudC5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4ge1xuICAgICAgY2hpbGQuX2dyZXllZCA9IGZhbHNlO1xuICAgICAgaWYgKGNoaWxkICE9PSBkKSB7XG4gICAgICAgIGNoaWxkLl9vcGVuID0gZmFsc2U7XG4gICAgICAgIGNvbGxhcHNlQ2hpbGRyZW4oY2hpbGQpO1xuICAgICAgICBjaGlsZC5fZ3JleWVkID0gZC5fb3BlbjtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBkLmNoaWxkcmVuID8gY29sbGFwc2VDaGlsZHJlbihkKSA6IHJlc3RvcmVDaGlsZHJlbihkKTtcbiAgICB0aGlzLnVwZGF0ZUNoYXJ0KHsgc3dpdGNoaW5nU2VsZWN0aW9uIH0pO1xuICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiIWxvYWRpbmc7IGVsc2UgbG9hZGVyXCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1JlY2FsY3VsYXRlZDsgZWxzZSBzaG93U3dpdGNoUmVjYWxjdWxhdGVkXCI+XG4gICAgPGRpdiBjbGFzcz1cImZpZWxkIGhhcy1hZGRvbnMgcHQtMiBweC0zIG1iLTBcIiAqbmdJZj1cImZpbHRlcmVkSW1wYWN0QXNzZXNzbWVudHMubGVuZ3RoID4gMVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2xcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJidXR0b24gaXMtc21hbGwgaXMtc3RhdGljIGlzLXNlY29uZGFyeVwiPlNlbGVjdCBhbiBJbXBhY3QgQXNzZXNzbWVudDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2wgaXMtZXhwYW5kZWRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdCBpcy1zbWFsbCBpcy1mdWxsd2lkdGggaXMtc2Vjb25kYXJ5XCI+XG4gICAgICAgICAgPHNlbGVjdCBbKG5nTW9kZWwpXT1cInNlbGVjdGVkSW1wYWN0QXNzZXNzbWVudElkXCIgKGNoYW5nZSk9XCJyZWxvYWRDaGFydCgpXCIgW2Rpc2FibGVkXT1cImxvYWRpbmdcIj5cbiAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IHZhbHVlIG9mIGZpbHRlcmVkSW1wYWN0QXNzZXNzbWVudHNcIiBbdmFsdWVdPVwidmFsdWVbJ0BpZCddXCI+XG4gICAgICAgICAgICAgIHt7IHZhbHVlLm5hbWUgfHwgdmFsdWVbJ0BpZCddIH19XG4gICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwiIW5vRGF0YVwiIGNsYXNzPVwiZmllbGQgaGFzLWFkZG9ucyBweS0yIHB4LTNcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiYnV0dG9uIGlzLXNtYWxsIGlzLXN0YXRpYyBpcy1zZWNvbmRhcnlcIj5TZWxlY3QgYSBtb2RlbDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2wgaXMtZXhwYW5kZWRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdCBpcy1zbWFsbCBpcy1mdWxsd2lkdGggaXMtc2Vjb25kYXJ5XCI+XG4gICAgICAgICAgPHNlbGVjdCBbKG5nTW9kZWwpXT1cInNlbGVjdGVkTW9kZWxJZFwiIChjaGFuZ2UpPVwiaW5pdENoYXJ0KClcIiBbZGlzYWJsZWRdPVwibG9hZGluZ1wiPlxuICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgbW9kZWwgb2YgbW9kZWxzXCIgW3ZhbHVlXT1cIm1vZGVsWydAaWQnXVwiPnt7IG1vZGVsLm5hbWUgfHwgbW9kZWxbJ0BpZCddIH19PC9vcHRpb24+XG4gICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIW5vRGF0YSAmJiAhc2hvd1dhcm5pbmdzXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sdW1ucyBpcy1jZW50ZXJlZCBweS0yIGlzLXNpemUtNyBpcy1tb2JpbGUgaXMtbXVsdGlsaW5lXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGxlZ2VuZEl0ZW0gb2YgbGVnZW5kXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbHVtbiBpcy1uYXJyb3cgcHktMCBpcy1mbGV4LW1vYmlsZSBpcy1mbGV4LWRpcmVjdGlvbi1jb2x1bW4gaXMtYWxpZ24taXRlbXMtY2VudGVyIGlzLWxlZ2VuZC1pdGVtXCI+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICBjbGFzcz1cImtleS1jb2xvdXIgaXMtaW5saW5lLWJsb2NrLXRhYmxldCBpcy1hbGlnbi1taWRkbGVcIlxuICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cIm5vZGVDb2xvdXJzW2xlZ2VuZEl0ZW0udHlwZV1cIlxuICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgIDxzdHJvbmcgY2xhc3M9XCJoYXMtdGV4dC1ibGFjayBpcy1hbGlnbi1taWRkbGUga2V5LWxhYmVsIGlzLXBsLXRhYmxldC0yXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaXMtaGlkZGVuLWRlc2t0b3BcIj57e2xlZ2VuZEl0ZW0ubW9iaWxlVGV4dH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlzLWhpZGRlbi10b3VjaFwiPnt7bGVnZW5kSXRlbS50ZXh0fX08L3NwYW4+XG4gICAgICAgICAgICA8L3N0cm9uZz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxwICpuZ0lmPVwiZXJyb3JcIiBjbGFzcz1cImhhcy10ZXh0LWRhbmdlciBweS0zXCI+XG4gICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJlcnJvclwiPlxuICAgICAgICA8cCAqbmdTd2l0Y2hDYXNlPVwiJ25vdC1mb3VuZCdcIj5JbXBhY3QgQXNzZXNzbWVudCBub3QgZm91bmQ8L3A+XG4gICAgICAgIDxkaXYgKm5nU3dpdGNoRGVmYXVsdD5cbiAgICAgICAgICA8c3Bhbj5BbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VycmVkOjwvc3Bhbj5cbiAgICAgICAgICA8cCBjbGFzcz1cIm10LTFcIj57eyBlcnJvciB9fTwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L3A+XG5cbiAgICA8ZGl2ICpuZ0lmPVwic2hvd1dhcm5pbmdzXCIgY2xhc3M9XCJoYXMtdGV4dC13YXJuaW5nIHB5LTMgaGFzLXRleHQtY2VudGVyZWRcIj5cbiAgICAgIDxwIGNsYXNzPVwiaXMtbWItMlwiICpuZ0Zvcj1cImxldCB3YXJuaW5nIG9mIHdhcm5pbmdzXCI+XG4gICAgICAgIDxmYS1pY29uIGNsYXNzPVwicHItMlwiIGljb249XCJleGNsYW1hdGlvbi10cmlhbmdsZVwiPjwvZmEtaWNvbj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwid2FybmluZ1wiPlxuICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInbWlzc2luZy10ZXJtcydcIj5DYWxjdWxhdGlvbnMgYXJlIG5vdCB1cCB0byBkYXRlLiBTb21lIHRlcm1zIG1heSBub3QgZGlzcGxheSBjb3JyZWN0bHkuPC9zcGFuPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvcD5cbiAgICAgIDxwIGNsYXNzPVwiaXMtdW5kZXJsaW5lZCBpcy1zaXplLTdcIj48YSAoY2xpY2spPVwic2hvd1dhcm5pbmdzID0gZmFsc2VcIj5WaWV3IGNoYXJ0IGFueXdheS48L2E+PC9wPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiAqbmdJZj1cIm5vRGF0YVwiIGNsYXNzPVwicHktM1wiPlxuICAgICAgPHAgY2xhc3M9XCJoYXMtdGV4dC1jZW50ZXJlZFwiPk5vIGNoYXJ0IGF2YWlsYWJsZS48L3A+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG5cbjxkaXYgW2NsYXNzLmlzLWhpZGRlbl09XCIhaXNSZWNhbGN1bGF0ZWQgfHwgbG9hZGluZyB8fCBlcnJvciB8fCBub0RhdGEgfHwgc2hvd1dhcm5pbmdzXCIgY2xhc3M9XCJjaGFydC1jb250YWluZXIgaXMtcmVsYXRpdmUgdy0xMDBcIj5cbiAgPHN2ZyBjbGFzcz1cInctMTAwIGgtMTAwXCIgI2NoYXJ0Pjwvc3ZnPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjbG9hZGVyPlxuICA8ZGl2IGNsYXNzPVwibG9hZGluZy1jb250YWluZXIgaGFzLXRleHQtY2VudGVyIG15LTUgcHktNVwiPlxuICAgIDxmYS1pY29uIGljb249XCJzcGlubmVyXCIgW3B1bHNlXT1cInRydWVcIiBzaXplPVwibGdcIj48L2ZhLWljb24+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNzaG93U3dpdGNoUmVjYWxjdWxhdGVkPlxuICA8cCBjbGFzcz1cImhhcy10ZXh0LWNlbnRlcmVkIHB5LTNcIj5ObyBjaGFydCBhdmFpbGFibGUuIFN3aXRjaCB0byA8Y29kZT5yZWNhbGN1bGF0ZWQ8L2NvZGU+IHZlcnNpb24uPC9wPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|