@hestia-earth/ui-components 0.0.34 → 0.1.2
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/bundles/hestia-earth-ui-components.umd.js +481 -303
- package/bundles/hestia-earth-ui-components.umd.js.map +1 -1
- package/common/common.light.module.d.ts +15 -14
- package/common/common.module.d.ts +23 -22
- package/common/data-table/data-table.component.d.ts +21 -0
- package/common/index.d.ts +2 -0
- package/common/issue-confirm/issue-confirm.component.d.ts +14 -0
- package/common/utils.d.ts +11 -0
- package/cycles/cycles-emissions-chart/cycles-emissions-chart.component.d.ts +4 -1
- package/cycles/cycles-result/cycles-result.component.d.ts +3 -1
- package/esm2015/bibliographies/bibliographies-search-confirm/bibliographies-search-confirm.component.js +5 -4
- package/esm2015/common/blank-node-state/blank-node-state.component.js +5 -4
- package/esm2015/common/blank-node-state-notice/blank-node-state-notice.component.js +5 -4
- package/esm2015/common/blank-node-value-delta/blank-node-value-delta.component.js +5 -4
- package/esm2015/common/common.light.module.js +7 -3
- package/esm2015/common/common.module.js +28 -24
- package/esm2015/common/data-table/data-table.component.js +70 -0
- package/esm2015/common/index.js +3 -1
- package/esm2015/common/issue-confirm/issue-confirm.component.js +38 -0
- package/esm2015/common/link-key-value/link-key-value.component.js +5 -4
- package/esm2015/common/schema-version-link/schema-version-link.component.js +5 -4
- package/esm2015/common/social-tags/social-tags.component.js +5 -4
- package/esm2015/common/unit-converter/unit-converter.component.js +5 -4
- package/esm2015/common/utils.js +14 -1
- package/esm2015/cycles/cycles-activity/cycles-activity.component.js +15 -14
- package/esm2015/cycles/cycles-completeness/cycles-completeness.component.js +10 -8
- package/esm2015/cycles/cycles-emissions/cycles-emissions.component.js +16 -15
- package/esm2015/cycles/cycles-emissions-chart/cycles-emissions-chart.component.js +9 -5
- package/esm2015/cycles/cycles-functional-unit-measure/cycles-functional-unit-measure.component.js +5 -4
- package/esm2015/cycles/cycles-practices/cycles-practices.component.js +15 -14
- package/esm2015/cycles/cycles-result/cycles-result.component.js +10 -8
- package/esm2015/engine/engine-orchestrator-edit/engine-orchestrator-edit.component.js +4 -5
- package/esm2015/engine/engine-requirements-form/engine-requirements-form.component.js +5 -4
- package/esm2015/impact-assessments/impact-assessments-indicator-breakdown-chart/impact-assessments-indicator-breakdown-chart.component.js +9 -5
- package/esm2015/impact-assessments/impact-assessments-indicators-chart/impact-assessments-indicators-chart.component.js +9 -5
- package/esm2015/impact-assessments/impact-assessments-products/impact-assessments-products.component.js +18 -17
- package/esm2015/node/node-csv-export-confirm/node-csv-export-confirm.component.js +5 -4
- package/esm2015/node/node-csv-select-headers/node-csv-select-headers.component.js +5 -4
- package/esm2015/node/node-diffs/node-diffs.component.js +5 -4
- package/esm2015/node/node-icon/node-icon.component.js +5 -4
- package/esm2015/node/node-link/node-link.component.js +5 -4
- package/esm2015/node/node-logs-file/node-logs-file.component.js +5 -4
- package/esm2015/node/node-logs-models/node-logs-models.component.js +17 -14
- package/esm2015/node/node-missing-lookup-factors/node-missing-lookup-factors.component.js +5 -4
- package/esm2015/node/node-value-details/node-value-details.component.js +5 -4
- package/esm2015/search/search.model.js +3 -3
- package/esm2015/sites/sites-maps/sites-maps.component.js +5 -4
- package/esm2015/sites/sites-measurements/sites-measurements.component.js +14 -13
- package/fesm2015/hestia-earth-ui-components.js +397 -242
- package/fesm2015/hestia-earth-ui-components.js.map +1 -1
- package/impact-assessments/impact-assessments-indicator-breakdown-chart/impact-assessments-indicator-breakdown-chart.component.d.ts +4 -2
- package/impact-assessments/impact-assessments-indicators-chart/impact-assessments-indicators-chart.component.d.ts +4 -1
- package/node/node-logs-models/node-logs-models.component.d.ts +1 -0
- package/package.json +6 -6
- package/styles.scss +0 -83
|
@@ -13,18 +13,19 @@ import * as i0 from "@angular/core";
|
|
|
13
13
|
import * as i1 from "../../search/search.service";
|
|
14
14
|
import * as i2 from "../../engine/engine.service";
|
|
15
15
|
import * as i3 from "@fortawesome/angular-fontawesome";
|
|
16
|
-
import * as i4 from "
|
|
17
|
-
import * as i5 from "
|
|
18
|
-
import * as i6 from "
|
|
19
|
-
import * as i7 from "@angular/
|
|
20
|
-
import * as i8 from "@
|
|
21
|
-
import * as i9 from "
|
|
22
|
-
import * as i10 from "../../common/
|
|
23
|
-
import * as i11 from "../../common/
|
|
24
|
-
import * as i12 from "../../common/
|
|
25
|
-
import * as i13 from "../../common/
|
|
26
|
-
import * as i14 from "../../common/
|
|
27
|
-
import * as i15 from "../../common/
|
|
16
|
+
import * as i4 from "../../common/data-table/data-table.component";
|
|
17
|
+
import * as i5 from "../node-link/node-link.component";
|
|
18
|
+
import * as i6 from "../../common/blank-node-value-delta/blank-node-value-delta.component";
|
|
19
|
+
import * as i7 from "@angular/common";
|
|
20
|
+
import * as i8 from "@angular/forms";
|
|
21
|
+
import * as i9 from "@ng-bootstrap/ng-bootstrap";
|
|
22
|
+
import * as i10 from "../../common/times.pipe";
|
|
23
|
+
import * as i11 from "../../common/default.pipe";
|
|
24
|
+
import * as i12 from "../../common/precision.pipe";
|
|
25
|
+
import * as i13 from "../../common/key-to-label.pipe";
|
|
26
|
+
import * as i14 from "../../common/keys.pipe";
|
|
27
|
+
import * as i15 from "../../common/pluralize.pipe";
|
|
28
|
+
import * as i16 from "../../common/is-array.pipe";
|
|
28
29
|
const get = require('lodash.get');
|
|
29
30
|
const orderBy = require('lodash.orderby');
|
|
30
31
|
const nodeTypesLowerCase = Object.values(NodeType).map(v => v.toLowerCase());
|
|
@@ -151,6 +152,7 @@ export class NodeLogsModelsComponent {
|
|
|
151
152
|
this.loading = true;
|
|
152
153
|
this.blankNodes = [];
|
|
153
154
|
this.methodModelsCount = 0;
|
|
155
|
+
this.rowsCount = 0;
|
|
154
156
|
this.onlyWithData = true;
|
|
155
157
|
this.showLegend = true;
|
|
156
158
|
this.LogStatus = LogStatus;
|
|
@@ -220,6 +222,7 @@ export class NodeLogsModelsComponent {
|
|
|
220
222
|
v.configModels.length,
|
|
221
223
|
...v.subValues.map(s => { var _a, _b; return (_b = (_a = s.configModels) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0; })
|
|
222
224
|
]));
|
|
225
|
+
this.rowsCount = this.allBlankNodes.reduce((prev, curr) => prev + 1 + curr.subValues.length + curr.keys.length, 0);
|
|
223
226
|
this.filterResults();
|
|
224
227
|
this.loading = false;
|
|
225
228
|
});
|
|
@@ -331,7 +334,7 @@ export class NodeLogsModelsComponent {
|
|
|
331
334
|
}
|
|
332
335
|
}
|
|
333
336
|
NodeLogsModelsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: NodeLogsModelsComponent, deps: [{ token: i1.HeSearchService }, { token: i2.HeEngineService }], target: i0.ɵɵFactoryTarget.Component });
|
|
334
|
-
NodeLogsModelsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: NodeLogsModelsComponent, selector: "he-node-logs-models", inputs: { nodeType: "nodeType", nodeKey: "nodeKey", logsUrl: "logsUrl", originalValues: "originalValues", recalculatedValues: "recalculatedValues", terms: "terms", logs: "logs", filteredType: "filteredType" }, ngImport: i0, template: "<div class=\"px-3 pb-3\">\n <div class=\"has-text-right mb-2\" *ngIf=\"!isExternal\">\n <a class=\"is-size-7\" *ngIf=\"logsUrl\" [href]=\"logsUrl\" target=\"_blank\">\n <fa-icon icon=\"external-link-alt\"></fa-icon>\n <span class=\"pl-2\">Open Full Logs</span>\n </a>\n </div>\n\n <div class=\"table-container data-table-container mb-1\">\n <table class=\"table is-narrow data-table\">\n <thead>\n <tr>\n <th class=\"width-auto\">\n <div class=\"field\">\n <div class=\"control is-expanded has-icons-right\">\n <input class=\"input search-input is-small\"\n [(ngModel)]=\"term\" name=\"term\"\n placeholder=\"Filter by name\"\n [editable]=\"false\"\n [ngbTypeahead]=\"suggestTerm\"\n (selectItem)=\"filterResults()\"\n >\n <a class=\"icon is-small is-right\"\n [class.is-hidden]=\"!term\"\n (click)=\"term = ''; filterResults();\"\n >\n <fa-icon icon=\"times\"></fa-icon>\n </a>\n </div>\n </div>\n </th>\n <th>Original</th>\n <th>Recalculated</th>\n <th>Difference</th>\n <th *ngFor=\"let c of methodModelsCount | times; let i = index\">({{i + 1}})</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngIf=\"loading\">\n <td colspan=\"5\">\n <div class=\"has-text-center py-3\">\n <fa-icon icon=\"spinner\" [pulse]=\"true\" size=\"lg\"></fa-icon>\n </div>\n </td>\n </tr>\n <ng-container *ngFor=\"let blankNode of blankNodes; trackBy: trackByBlankNode\">\n <tr [class.has-sub-rows]=\"blankNode.canOpen\">\n <td class=\"width-auto\" [attr.title]=\"blankNode.term.name\">\n <a class=\"is-inline-block is-align-top pr-2 open-node\"\n (click)=\"blankNode.isOpen = !blankNode.isOpen\"\n *ngIf=\"blankNode.canOpen\"\n >\n <fa-icon icon=\"angle-down\" [class.is-hidden]=\"!blankNode.isOpen\"></fa-icon>\n <fa-icon icon=\"angle-right\" [class.is-hidden]=\"blankNode.isOpen\"></fa-icon>\n </a>\n <he-node-link class=\"is-inline-block\" [node]=\"blankNode.term\">\n <span class=\"is-nowrap has-text-ellipsis\">{{blankNode.term.name}}</span>\n </he-node-link>\n </td>\n <td>\n <span>{{blankNode.originalValue | precision:3 | default:'-'}}</span>\n </td>\n <td>\n <span *ngIf=\"!blankNode.isOriginal || blankNode.isRecalculated; else notUpdated\">\n {{blankNode.recalculatedValue | precision:3 | default:'-'}}\n </span>\n </td>\n <td class=\"is-nowrap\">\n <he-blank-node-value-delta *ngIf=\"blankNode.original.length && blankNode.isRecalculated; else noValue\"\n [value]=\"blankNode.recalculatedValue\"\n [originalValue]=\"blankNode.originalValue\"\n ></he-blank-node-value-delta>\n </td>\n <ng-container *ngTemplateOutlet=\"blankNodeModels; context: {blankNode: blankNode}\"></ng-container>\n </tr>\n\n <ng-container *ngIf=\"blankNode.keys?.length\">\n <tr\n *ngFor=\"let subValue of blankNode.keys\"\n [class.is-hidden]=\"!blankNode.isOpen\"\n [class.has-sub-rows]=\"blankNode.subValues?.length\"\n >\n <td class=\"width-auto has-text-left\">\n <span class=\"is-inline-block is-align-top pl-3 pr-1 field-node\">Field:</span>\n\n <a class=\"is-inline-block\" *ngIf=\"blankNode.type\"\n [href]=\"baseUrl + '/schema/' + blankNode.type + '#' + subValue.key\" target=\"_blank\" [title]=\"subValue.key\"\n >\n <span class=\"is-nowrap has-text-ellipsis\">{{subValue.key}}</span>\n </a>\n <span class=\"is-inline-block is-align-top\" *ngIf=\"!blankNode.type\">{{subValue.key}}</span>\n </td>\n <td>\n <span *ngIf=\"subValue.originalValue !== null; else noValue\">{{subValue.originalValue | precision:3 | default:'-'}}</span>\n </td>\n <td>\n <span *ngIf=\"subValue.recalculatedValue !== null; else noValue\">\n {{subValue.recalculatedValue | precision:3 | default:'-'}}\n </span>\n </td>\n <td>-</td>\n <td class=\"blank-node-index-key\">\n <ng-container *ngTemplateOutlet=\"blankNodeModel; context: {blankNode:blankNode, methodId:subValue.key, logs:getLogs(blankNode, subValue.key)}\"></ng-container>\n </td>\n <td *ngIf=\"methodModelsCount > 1\" [attr.colspan]=\"methodModelsCount - 1\"></td>\n </tr>\n </ng-container>\n\n <tr\n *ngFor=\"let subValue of blankNode.subValues\"\n [class.is-hidden]=\"!blankNode.isOpen\"\n >\n <td class=\"width-auto has-text-left\">\n <span class=\"is-inline-block is-align-top pl-3\">{{subValue.key | keyToLabel}}</span>\n\n <ng-container *ngIf=\"subValue.id\">\n <span class=\"is-inline-block\" class=\"is-inline-block is-align-top pr-1\">:</span>\n\n <ng-container [ngSwitch]=\"subValue.key\">\n <span class=\"is-inline-block\" *ngSwitchCase=\"'backgroundData'\">{{subValue.id | keyToLabel}}</span>\n <he-node-link *ngSwitchDefault class=\"is-block pl-4\" [node]=\"{'@type':'Term','@id':subValue.id}\" [attr.title]=\"subValue.id | keyToLabel\">\n <span class=\"is-nowrap has-text-ellipsis\">{{subValue.id | keyToLabel}}</span>\n </he-node-link>\n </ng-container>\n </ng-container>\n </td>\n <td>\n <span *ngIf=\"subValue.originalValue !== null; else noValue\">{{subValue.originalValue | precision:3 | default:'-'}}</span>\n </td>\n <td>\n <span *ngIf=\"subValue.recalculatedValue !== null; else noValue\">\n {{subValue.recalculatedValue | precision:3 | default:'-'}}\n </span>\n </td>\n <td>-</td>\n <ng-container *ngTemplateOutlet=\"blankNodeModels; context: {blankNode: blankNode, subValue: subValue}\"></ng-container>\n </tr>\n </ng-container>\n </tbody>\n </table>\n </div>\n\n <div class=\"is-size-7 is-italic\">\n <div class=\"columns is-variable is-1 my-0\">\n <div class=\"column is-narrow\">\n <p>\n <a class=\"is-inline-block pr-2\"\n (click)=\"showLegend = !showLegend\"\n >\n <fa-icon icon=\"angle-down\" [class.is-hidden]=\"!showLegend\"></fa-icon>\n <fa-icon icon=\"angle-right\" [class.is-hidden]=\"showLegend\"></fa-icon>\n </a>\n <span class=\"is-inline-block\">Legend:</span>\n </p>\n <ul class=\"content pl-2\" [class.is-hidden]=\"!showLegend\">\n <li\n class=\"has-text-{{logColor[status.value]}}\"\n *ngFor=\"let status of LogStatus | keys\"\n >\n <fa-icon [icon]=\"logIcon[status.value]\"></fa-icon>\n <span class=\"pl-1\">{{status.value}}</span>\n </li>\n </ul>\n </div>\n <div class=\"column has-text-right\" *ngIf=\"filteredType\">\n <label class=\"is-inline-block checkbox\">\n <input type=\"checkbox\" class=\"selector\"\n [(ngModel)]=\"onlyWithData\"\n (change)=\"filterResults()\"\n >\n <span class=\"ml-2\">Show only recalculated {{filteredType | pluralize}}</span>\n </label>\n </div>\n </div>\n </div>\n</div>\n\n<ng-template #blankNodeModels let-blankNode=\"blankNode\" let-subValue=\"subValue\">\n <td class=\"blank-node-index-{{i}}\" *ngFor=\"let c of methodModelsCount | times; let i = index\">\n <ng-container *ngIf=\"validSubValue(blankNode, i, subValue); else noValue\">\n <ng-container *ngIf=\"getMethodIdAt(blankNode, i, subValue); let methodId; else noValue\">\n <ng-template #modelSerie>\n <ng-container *ngTemplateOutlet=\"blankNodeModel; context: {blankNode:blankNode, methodId:methodId, subValue:subValue, logs:getLogs(blankNode, methodId, subValue)}\"></ng-container>\n </ng-template>\n <div *ngIf=\"methodId | isArray; else modelSerie\">\n <p *ngFor=\"let value of methodId\">\n <ng-container *ngTemplateOutlet=\"blankNodeModel; context: {blankNode:blankNode, methodId:value, subValue:subValue, logs:getLogs(blankNode, methodId, subValue)}\"></ng-container>\n </p>\n </div>\n </ng-container>\n </ng-container>\n </td>\n</ng-template>\n\n<ng-template #blankNodeModel let-blankNode=\"blankNode\" let-methodId=\"methodId\" let-subValue=\"subValue\" let-logs=\"logs\">\n <span\n [class.trigger-popover]=\"hasLogDetails(blankNode, methodId, subValue)\"\n [ngbPopover]=\"logDetails\" [autoClose]=\"'outside'\"\n triggers=\"manual\" #p=\"ngbPopover\" placement=\"left\" container=\"body\"\n (click)=\"hasLogDetails(blankNode, methodId, subValue) ? togglePopover(p, { logs }) : null\"\n >\n <span class=\"is-capitalized\">{{methodName(blankNode, methodId, subValue)}}</span>\n <span class=\"pl-1\" *ngIf=\"hasLog(logs) && logs?.methodTier\">[{{logs.methodTier}}]</span>\n <span class=\"pl-1 has-text-{{logColor[logStatus(blankNode, methodId, subValue)]}}\">\n <fa-icon [icon]=\"logIcon[logStatus(blankNode, methodId, subValue)]\"></fa-icon>\n </span>\n </span>\n</ng-template>\n\n<ng-template #noValue>-</ng-template>\n\n<ng-template #notUpdated>\n <span>not updated</span>\n</ng-template>\n\n<ng-template #logDetails let-logs=\"logs\">\n <ng-container *ngIf=\"logs.requirements\">\n <p class=\"is-requirement\" *ngFor=\"let key of requirementKeys(logs.requirements)\" class=\"has-text-{{requirementColor(logs.requirements[key])}}\">\n {{key}}: {{logs.requirements[key]}}\n </p>\n </ng-container>\n <ng-container *ngIf=\"logs.logs\">\n <p class=\"is-log\" *ngFor=\"let key of logs.logs | keys\">\n {{key.key}}: {{key.value}}\n </p>\n </ng-container>\n <ng-container *ngIf=\"logs.missingLookups?.length\">\n <p class=\"mt-2\">Missing lookups:</p>\n\n <div class=\"table-container data-table-container\">\n <table class=\"table is-fullwidth mb-0\">\n <thead class=\"has-background-black\">\n <tr>\n <th>\n <span class=\"has-text-white\">Filename</span>\n </th>\n <th>\n <span class=\"has-text-white\">Column Title</span>\n </th>\n <th>\n <span class=\"has-text-white\">Row (term.id)</span>\n </th>\n </tr>\n </thead>\n <tbody class=\"has-background-black has-text-white\">\n <tr *ngFor=\"let data of logs.missingLookups\">\n <td>{{data.filename}}</td>\n <td>{{data.column}}</td>\n <td>{{data.termId}}</td>\n </tr>\n </tbody>\n </table>\n </div>\n </ng-container>\n</ng-template>\n", styles: [":host{display:block}table.data-table th:nth-child(2),table.data-table td:nth-child(2){min-width:60px}table.data-table th:nth-child(3),table.data-table td:nth-child(3){min-width:100px}table.data-table tr.has-sub-rows td{border-bottom-style:dotted}table.data-table td he-node-link{width:190px}table.data-table td .open-node+he-node-link{width:170px}\n"], components: [{ type: i3.FaIconComponent, selector: "fa-icon", inputs: ["classes", "icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }, { type: i4.NodeLinkComponent, selector: "he-node-link", inputs: ["node", "showExternalLink"] }, { type: i5.BlankNodeValueDeltaComponent, selector: "he-blank-node-value-delta", inputs: ["value", "originalValue", "displayType"] }], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i8.NgbTypeahead, selector: "input[ngbTypeahead]", inputs: ["autocomplete", "placement", "container", "editable", "focusFirst", "showHint", "inputFormatter", "ngbTypeahead", "resultFormatter", "resultTemplate"], outputs: ["selectItem"], exportAs: ["ngbTypeahead"] }, { type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i6.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i6.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i6.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { type: i7.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i8.NgbPopover, selector: "[ngbPopover]", inputs: ["animation", "autoClose", "placement", "triggers", "container", "disablePopover", "popoverClass", "openDelay", "closeDelay", "ngbPopover", "popoverTitle"], outputs: ["shown", "hidden"], exportAs: ["ngbPopover"] }], pipes: { "times": i9.TimesPipe, "default": i10.DefaultPipe, "precision": i11.PrecisionPipe, "keyToLabel": i12.KeyToLabelPipe, "keys": i13.KeysPipe, "pluralize": i14.PluralizePipe, "isArray": i15.IsArrayPipe } });
|
|
337
|
+
NodeLogsModelsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: NodeLogsModelsComponent, selector: "he-node-logs-models", inputs: { nodeType: "nodeType", nodeKey: "nodeKey", logsUrl: "logsUrl", originalValues: "originalValues", recalculatedValues: "recalculatedValues", terms: "terms", logs: "logs", filteredType: "filteredType" }, ngImport: i0, template: "<div class=\"px-3 pb-3\">\n <div class=\"has-text-right mb-2\" *ngIf=\"!isExternal\">\n <a class=\"is-size-7\" *ngIf=\"logsUrl\" [href]=\"logsUrl\" target=\"_blank\">\n <fa-icon icon=\"external-link-alt\"></fa-icon>\n <span class=\"pl-2\">Open Full Logs</span>\n </a>\n </div>\n\n <he-data-table class=\"mb-1 is-small\" [small]=\"true\" [nbRows]=\"rowsCount\" maxHeight=\"320\">\n <table class=\"table is-narrow is-striped\">\n <thead>\n <tr>\n <th class=\"width-auto\">\n <div class=\"field\">\n <div class=\"control is-expanded has-icons-right\">\n <input class=\"input search-input is-small\"\n [(ngModel)]=\"term\" name=\"term\"\n placeholder=\"Filter by name\"\n [editable]=\"false\"\n [ngbTypeahead]=\"suggestTerm\"\n (selectItem)=\"filterResults()\"\n >\n <a class=\"icon is-small is-right\"\n [class.is-hidden]=\"!term\"\n (click)=\"term = ''; filterResults();\"\n >\n <fa-icon icon=\"times\"></fa-icon>\n </a>\n </div>\n </div>\n </th>\n <th>Original</th>\n <th>Recalculated</th>\n <th>Difference</th>\n <th *ngFor=\"let c of methodModelsCount | times; let i = index\">({{i + 1}})</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngIf=\"loading\">\n <td colspan=\"5\">\n <div class=\"has-text-center py-3\">\n <fa-icon icon=\"spinner\" [pulse]=\"true\" size=\"lg\"></fa-icon>\n </div>\n </td>\n </tr>\n <ng-container *ngFor=\"let blankNode of blankNodes; trackBy: trackByBlankNode\">\n <tr [class.has-sub-rows]=\"blankNode.canOpen\">\n <td class=\"width-auto\" [attr.title]=\"blankNode.term.name\">\n <a class=\"is-inline-block is-align-top pr-2 open-node\"\n (click)=\"blankNode.isOpen = !blankNode.isOpen\"\n *ngIf=\"blankNode.canOpen\"\n >\n <fa-icon icon=\"angle-down\" [class.is-hidden]=\"!blankNode.isOpen\"></fa-icon>\n <fa-icon icon=\"angle-right\" [class.is-hidden]=\"blankNode.isOpen\"></fa-icon>\n </a>\n <he-node-link class=\"is-inline-block\" [node]=\"blankNode.term\">\n <span class=\"is-nowrap has-text-ellipsis\">{{blankNode.term.name}}</span>\n </he-node-link>\n </td>\n <td>\n <span>{{blankNode.originalValue | precision:3 | default:'-'}}</span>\n </td>\n <td>\n <span *ngIf=\"!blankNode.isOriginal || blankNode.isRecalculated; else notUpdated\">\n {{blankNode.recalculatedValue | precision:3 | default:'-'}}\n </span>\n </td>\n <td class=\"is-nowrap\">\n <he-blank-node-value-delta *ngIf=\"blankNode.original.length && blankNode.isRecalculated; else noValue\"\n [value]=\"blankNode.recalculatedValue\"\n [originalValue]=\"blankNode.originalValue\"\n ></he-blank-node-value-delta>\n </td>\n <ng-container *ngTemplateOutlet=\"blankNodeModels; context: {blankNode: blankNode}\"></ng-container>\n </tr>\n\n <ng-container *ngIf=\"blankNode.keys?.length\">\n <tr\n *ngFor=\"let subValue of blankNode.keys\"\n [class.is-hidden]=\"!blankNode.isOpen\"\n [class.has-sub-rows]=\"blankNode.subValues?.length\"\n >\n <td class=\"width-auto has-text-left\">\n <span class=\"is-inline-block is-align-top pl-3 pr-1 field-node\">Field:</span>\n\n <a class=\"is-inline-block\" *ngIf=\"blankNode.type\"\n [href]=\"baseUrl + '/schema/' + blankNode.type + '#' + subValue.key\" target=\"_blank\" [title]=\"subValue.key\"\n >\n <span class=\"is-nowrap has-text-ellipsis\">{{subValue.key}}</span>\n </a>\n <span class=\"is-inline-block is-align-top\" *ngIf=\"!blankNode.type\">{{subValue.key}}</span>\n </td>\n <td>\n <span *ngIf=\"subValue.originalValue !== null; else noValue\">{{subValue.originalValue | precision:3 | default:'-'}}</span>\n </td>\n <td>\n <span *ngIf=\"subValue.recalculatedValue !== null; else noValue\">\n {{subValue.recalculatedValue | precision:3 | default:'-'}}\n </span>\n </td>\n <td>-</td>\n <td class=\"blank-node-index-key\">\n <ng-container *ngTemplateOutlet=\"blankNodeModel; context: {blankNode:blankNode, methodId:subValue.key, logs:getLogs(blankNode, subValue.key)}\"></ng-container>\n </td>\n <td *ngIf=\"methodModelsCount > 1\" [attr.colspan]=\"methodModelsCount - 1\"></td>\n </tr>\n </ng-container>\n\n <tr\n *ngFor=\"let subValue of blankNode.subValues\"\n [class.is-hidden]=\"!blankNode.isOpen\"\n >\n <td class=\"width-auto has-text-left\">\n <span class=\"is-inline-block is-align-top pl-3\">{{subValue.key | keyToLabel}}</span>\n\n <ng-container *ngIf=\"subValue.id\">\n <span class=\"is-inline-block\" class=\"is-inline-block is-align-top pr-1\">:</span>\n\n <ng-container [ngSwitch]=\"subValue.key\">\n <span class=\"is-inline-block\" *ngSwitchCase=\"'backgroundData'\">{{subValue.id | keyToLabel}}</span>\n <he-node-link *ngSwitchDefault class=\"is-block pl-4\" [node]=\"{'@type':'Term','@id':subValue.id}\" [attr.title]=\"subValue.id | keyToLabel\">\n <span class=\"is-nowrap has-text-ellipsis\">{{subValue.id | keyToLabel}}</span>\n </he-node-link>\n </ng-container>\n </ng-container>\n </td>\n <td>\n <span *ngIf=\"subValue.originalValue !== null; else noValue\">{{subValue.originalValue | precision:3 | default:'-'}}</span>\n </td>\n <td>\n <span *ngIf=\"subValue.recalculatedValue !== null; else noValue\">\n {{subValue.recalculatedValue | precision:3 | default:'-'}}\n </span>\n </td>\n <td>-</td>\n <ng-container *ngTemplateOutlet=\"blankNodeModels; context: {blankNode: blankNode, subValue: subValue}\"></ng-container>\n </tr>\n </ng-container>\n </tbody>\n </table>\n </he-data-table>\n\n <div class=\"is-size-7 is-italic\">\n <div class=\"columns is-variable is-1 my-0\">\n <div class=\"column is-narrow\">\n <p>\n <a class=\"is-inline-block pr-2\"\n (click)=\"showLegend = !showLegend\"\n >\n <fa-icon icon=\"angle-down\" [class.is-hidden]=\"!showLegend\"></fa-icon>\n <fa-icon icon=\"angle-right\" [class.is-hidden]=\"showLegend\"></fa-icon>\n </a>\n <span class=\"is-inline-block\">Legend:</span>\n </p>\n <ul class=\"content pl-2\" [class.is-hidden]=\"!showLegend\">\n <li\n class=\"has-text-{{logColor[status.value]}}\"\n *ngFor=\"let status of LogStatus | keys\"\n >\n <fa-icon [icon]=\"logIcon[status.value]\"></fa-icon>\n <span class=\"pl-1\">{{status.value}}</span>\n </li>\n </ul>\n </div>\n <div class=\"column has-text-right\" *ngIf=\"filteredType\">\n <label class=\"is-inline-block checkbox\">\n <input type=\"checkbox\" class=\"selector\"\n [(ngModel)]=\"onlyWithData\"\n (change)=\"filterResults()\"\n >\n <span class=\"ml-2\">Show only recalculated {{filteredType | pluralize}}</span>\n </label>\n </div>\n </div>\n </div>\n</div>\n\n<ng-template #blankNodeModels let-blankNode=\"blankNode\" let-subValue=\"subValue\">\n <td class=\"blank-node-index-{{i}}\" *ngFor=\"let c of methodModelsCount | times; let i = index\">\n <ng-container *ngIf=\"validSubValue(blankNode, i, subValue); else noValue\">\n <ng-container *ngIf=\"getMethodIdAt(blankNode, i, subValue); let methodId; else noValue\">\n <ng-template #modelSerie>\n <ng-container *ngTemplateOutlet=\"blankNodeModel; context: {blankNode:blankNode, methodId:methodId, subValue:subValue, logs:getLogs(blankNode, methodId, subValue)}\"></ng-container>\n </ng-template>\n <div *ngIf=\"methodId | isArray; else modelSerie\">\n <p *ngFor=\"let value of methodId\">\n <ng-container *ngTemplateOutlet=\"blankNodeModel; context: {blankNode:blankNode, methodId:value, subValue:subValue, logs:getLogs(blankNode, methodId, subValue)}\"></ng-container>\n </p>\n </div>\n </ng-container>\n </ng-container>\n </td>\n</ng-template>\n\n<ng-template #blankNodeModel let-blankNode=\"blankNode\" let-methodId=\"methodId\" let-subValue=\"subValue\" let-logs=\"logs\">\n <span\n [class.trigger-popover]=\"hasLogDetails(blankNode, methodId, subValue)\"\n [ngbPopover]=\"logDetails\" [autoClose]=\"'outside'\"\n triggers=\"manual\" #p=\"ngbPopover\" placement=\"left\" container=\"body\"\n (click)=\"hasLogDetails(blankNode, methodId, subValue) ? togglePopover(p, { logs }) : null\"\n >\n <span class=\"is-capitalized\">{{methodName(blankNode, methodId, subValue)}}</span>\n <span class=\"pl-1\" *ngIf=\"hasLog(logs) && logs?.methodTier\">[{{logs.methodTier}}]</span>\n <span class=\"pl-1 has-text-{{logColor[logStatus(blankNode, methodId, subValue)]}}\">\n <fa-icon [icon]=\"logIcon[logStatus(blankNode, methodId, subValue)]\"></fa-icon>\n </span>\n </span>\n</ng-template>\n\n<ng-template #noValue>-</ng-template>\n\n<ng-template #notUpdated>\n <span>not updated</span>\n</ng-template>\n\n<ng-template #logDetails let-logs=\"logs\">\n <ng-container *ngIf=\"logs.requirements\">\n <p class=\"is-requirement\" *ngFor=\"let key of requirementKeys(logs.requirements)\" class=\"has-text-{{requirementColor(logs.requirements[key])}}\">\n {{key}}: {{logs.requirements[key]}}\n </p>\n </ng-container>\n <ng-container *ngIf=\"logs.logs\">\n <p class=\"is-log\" *ngFor=\"let key of logs.logs | keys\">\n {{key.key}}: {{key.value}}\n </p>\n </ng-container>\n <ng-container *ngIf=\"logs.missingLookups?.length\">\n <p class=\"mt-2\">Missing lookups:</p>\n\n <div class=\"table-container data-table-container\">\n <table class=\"table is-fullwidth mb-0\">\n <thead class=\"has-background-black\">\n <tr>\n <th>\n <span class=\"has-text-white\">Filename</span>\n </th>\n <th>\n <span class=\"has-text-white\">Column Title</span>\n </th>\n <th>\n <span class=\"has-text-white\">Row (term.id)</span>\n </th>\n </tr>\n </thead>\n <tbody class=\"has-background-black has-text-white\">\n <tr *ngFor=\"let data of logs.missingLookups\">\n <td>{{data.filename}}</td>\n <td>{{data.column}}</td>\n <td>{{data.termId}}</td>\n </tr>\n </tbody>\n </table>\n </div>\n </ng-container>\n</ng-template>\n", styles: [":host{display:block}::ng-deep tr.has-sub-rows td{border-bottom-style:dotted}::ng-deep td he-node-link{width:190px}::ng-deep td .open-node+he-node-link{width:170px}\n"], components: [{ type: i3.FaIconComponent, selector: "fa-icon", inputs: ["classes", "icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }, { type: i4.DataTableComponent, selector: "he-data-table", inputs: ["minHeight", "maxHeight", "nbRows", "small", "height", "width"] }, { type: i5.NodeLinkComponent, selector: "he-node-link", inputs: ["node", "showExternalLink"] }, { type: i6.BlankNodeValueDeltaComponent, selector: "he-blank-node-value-delta", inputs: ["value", "originalValue", "displayType"] }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i9.NgbTypeahead, selector: "input[ngbTypeahead]", inputs: ["autocomplete", "placement", "container", "editable", "focusFirst", "showHint", "inputFormatter", "ngbTypeahead", "resultFormatter", "resultTemplate"], outputs: ["selectItem"], exportAs: ["ngbTypeahead"] }, { type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i7.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i7.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i7.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { type: i8.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i9.NgbPopover, selector: "[ngbPopover]", inputs: ["animation", "autoClose", "placement", "triggers", "container", "disablePopover", "popoverClass", "openDelay", "closeDelay", "ngbPopover", "popoverTitle"], outputs: ["shown", "hidden"], exportAs: ["ngbPopover"] }], pipes: { "times": i10.TimesPipe, "default": i11.DefaultPipe, "precision": i12.PrecisionPipe, "keyToLabel": i13.KeyToLabelPipe, "keys": i14.KeysPipe, "pluralize": i15.PluralizePipe, "isArray": i16.IsArrayPipe } });
|
|
335
338
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: NodeLogsModelsComponent, decorators: [{
|
|
336
339
|
type: Component,
|
|
337
340
|
args: [{
|
|
@@ -356,4 +359,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
|
|
|
356
359
|
}], filteredType: [{
|
|
357
360
|
type: Input
|
|
358
361
|
}] } });
|
|
359
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1sb2dzLW1vZGVscy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbm9kZS9ub2RlLWxvZ3MtbW9kZWxzL25vZGUtbG9ncy1tb2RlbHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vc3JjL25vZGUvbm9kZS1sb2dzLW1vZGVscy9ub2RlLWxvZ3MtbW9kZWxzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSwrQkFBK0I7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFjLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN4QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RyxPQUFPLEVBQ0ssa0JBQWtCLEVBQzVCLFFBQVEsRUFBRSxZQUFZLEVBQ3ZCLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFLOUQsT0FBTyxFQUMyRCxnQkFBZ0IsRUFDakYsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXJFLE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBVHpELE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUNsQyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQVUxQyxNQUFNLGtCQUFrQixH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QyxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssZ0JBQWdCLENBQUMsQ0FBQztJQUMxRyxDQUFDO0lBRU0sZ0JBQWdCLENBQUMsS0FBVTtRQUNoQyxPQUFPLENBQUMsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztJQUN0RixDQUFDOztxSEFsUlUsdUJBQXVCO3lHQUF2Qix1QkFBdUIsNlFDbE1wQyxzd1dBK1BBOzRGRDdEYSx1QkFBdUI7a0JBTG5DLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHFCQUFxQjtvQkFDL0IsV0FBVyxFQUFFLG1DQUFtQztvQkFDaEQsU0FBUyxFQUFFLENBQUMsbUNBQW1DLENBQUM7aUJBQ2pEO29JQVFTLFFBQVE7c0JBRGYsS0FBSztnQkFNRSxPQUFPO3NCQURkLEtBQUs7Z0JBR0MsT0FBTztzQkFEYixLQUFLO2dCQUdDLGNBQWM7c0JBRHBCLEtBQUs7Z0JBR0Usa0JBQWtCO3NCQUR6QixLQUFLO2dCQUdFLEtBQUs7c0JBRFosS0FBSztnQkFHRSxJQUFJO3NCQURYLEtBQUs7Z0JBR0MsWUFBWTtzQkFEbEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGNvbXBsZXhpdHkgKi9cbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgZnJvbSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGlzdGluY3QsIGZpbHRlciwgcmVkdWNlLCB0b0FycmF5LCBtYXAsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICBFbWlzc2lvbiwgRW1pc3Npb25NZXRob2RUaWVyLCBJVGVybUpTT05MRCwgUHJvZHVjdCwgSW5wdXQgYXMgSGVzdGlhSW5wdXQsXG4gIE5vZGVUeXBlLCBUZXJtVGVybVR5cGUsIFByb3BlcnR5XG59IGZyb20gJ0BoZXN0aWEtZWFydGgvc2NoZW1hJztcbmltcG9ydCB7IHVuaXF1ZSwga2V5VG9MYWJlbCB9IGZyb20gJ0BoZXN0aWEtZWFydGgvdXRpbHMnO1xuaW1wb3J0IHsgcHJvcGVydHlWYWx1ZSB9IGZyb20gJ0BoZXN0aWEtZWFydGgvdXRpbHMvZGlzdC90ZXJtJztcbmNvbnN0IGdldCA9IHJlcXVpcmUoJ2xvZGFzaC5nZXQnKTtcbmNvbnN0IG9yZGVyQnkgPSByZXF1aXJlKCdsb2Rhc2gub3JkZXJieScpO1xuXG5pbXBvcnQgeyBJTm9kZUxvZ3MsIElOb2RlVGVybUxvZ3MsIElOb2RlVGVybUxvZyB9IGZyb20gJy4uL25vZGUuc2VydmljZSc7XG5pbXBvcnQge1xuICBIZUVuZ2luZVNlcnZpY2UsIElPcmNoZXN0cmF0b3JDb25maWcsIElPcmNoZXN0cmF0b3JNb2RlbENvbmZpZywgZmluZENvbmZpZ01vZGVsc1xufSBmcm9tICcuLi8uLi9lbmdpbmUvZW5naW5lLnNlcnZpY2UnO1xuaW1wb3J0IHsgbWF0Y2hUZXJtVHlwZSwgbWF0Y2hUeXBlIH0gZnJvbSAnLi4vLi4vc2VhcmNoL3NlYXJjaC5tb2RlbCc7XG5pbXBvcnQgeyBIZVNlYXJjaFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZWFyY2gvc2VhcmNoLnNlcnZpY2UnO1xuaW1wb3J0IHsgYmFzZVVybCwgaXNFeHRlcm5hbCB9IGZyb20gJy4uLy4uL2NvbW1vbi91dGlscyc7XG5cbmNvbnN0IG5vZGVUeXBlc0xvd2VyQ2FzZSA9IE9iamVjdC52YWx1ZXMoTm9kZVR5cGUpLm1hcCh2ID0+IHYudG9Mb3dlckNhc2UoKSk7XG5cbnR5cGUgYmxhbmtOb2RlID0gRW1pc3Npb24gfCBQcm9kdWN0IHwgSGVzdGlhSW5wdXQgfCBQcm9wZXJ0eTtcblxuaW50ZXJmYWNlIElCbGFua05vZGVMb2dTdWJWYWx1ZSB7XG4gIGtleTogc3RyaW5nO1xuICBvcmlnaW5hbFZhbHVlOiBudW1iZXIgfCBzdHJpbmcgfCBib29sZWFuO1xuICByZWNhbGN1bGF0ZWRWYWx1ZTogbnVtYmVyIHwgc3RyaW5nIHwgYm9vbGVhbjtcbiAgaWQ/OiBhbnk7XG4gIGNvbmZpZ01vZGVscz86IHN0cmluZ1tdO1xufVxuXG5pbnRlcmZhY2UgSUJsYW5rTm9kZUxvZyB7XG4gIGlzT3BlbjogYm9vbGVhbjtcbiAgY2FuT3BlbjogYm9vbGVhbjtcbiAgdGVybTogSVRlcm1KU09OTEQ7XG4gIHRlcm1JZDogc3RyaW5nO1xuICB0eXBlPzogc3RyaW5nO1xuICBjb25maWdNb2RlbHM6IHN0cmluZ1tdO1xuICBvcmlnaW5hbDogYmxhbmtOb2RlW107XG4gIG9yaWdpbmFsVmFsdWU6IG51bWJlcjtcbiAgcmVjYWxjdWxhdGVkOiBibGFua05vZGVbXTtcbiAgcmVjYWxjdWxhdGVkVmFsdWU6IG51bWJlcjtcbiAgaXNPcmlnaW5hbDogYm9vbGVhbjtcbiAgaXNSZWNhbGN1bGF0ZWQ6IGJvb2xlYW47XG4gIGhhc0RhdGE6IGJvb2xlYW47XG4gIGxvZ3M/OiBJTm9kZVRlcm1Mb2dzO1xuICBrZXlzOiBJQmxhbmtOb2RlTG9nU3ViVmFsdWVbXTtcbiAgc3ViVmFsdWVzOiBJQmxhbmtOb2RlTG9nU3ViVmFsdWVbXTtcbn1cblxuY29uc3QgcmVkdWNlVmFsdWVzID0gKHZhbHVlczogYW55W10sIHRlcm1JZDogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IHByb3BlcnR5VmFsdWVzID0gdmFsdWVzXG4gICAgLm1hcCgoeyB2YWx1ZSB9KSA9PiBwcm9wZXJ0eVZhbHVlKHZhbHVlLCB0ZXJtSWQpKVxuICAgIC8vIHByb3BlcnR5VmFsdWUgbWF5IHJldHVybiBudWxsIGlmIHRoZSB2YWx1ZSBpcyBudWxsIG9yIHVuZGVmaW5lZCwgdGhlcmVmb3JlIHJlbW92ZSB0aGVtIGZyb20gdG90YWxcbiAgICAuZmlsdGVyKHYgPT4gdiAhPT0gbnVsbCk7XG4gIHJldHVybiBwcm9wZXJ0eVZhbHVlcy5sZW5ndGggPyBwcm9wZXJ0eVZhbHVlcy5yZWR1Y2UoKHAsIHYpID0+IHAgKyB2LCAwKSA6IHVuZGVmaW5lZDtcbn07XG5cbmNvbnN0IGlzUmVjYWxjdWxhdGVkID0gKHZhbHVlczogYmxhbmtOb2RlW10sIGtleSA9ICd2YWx1ZScpID0+IHZhbHVlcy5zb21lKHYgPT4gKFtcbiAgLi4uKHYuYWRkZWQgfHwgW10pLFxuICAuLi4odi51cGRhdGVkIHx8IFtdKVxuXSkuaW5jbHVkZXMoa2V5KSk7XG5cbmNvbnN0IGJsYW5rTm9kZVZhbHVlQnlLZXk6IHtcbiAgW2tleTogc3RyaW5nXTogKHZhbHVlczogYmxhbmtOb2RlW10sIGtleT86IHN0cmluZywgaWQ/OiBzdHJpbmcpID0+IG51bWJlciB8IHN0cmluZyB8IGJvb2xlYW47XG59ID0ge1xuICBwcm9wZXJ0eTogKHZhbHVlczogKEVtaXNzaW9uIHwgUHJvZHVjdCB8IEhlc3RpYUlucHV0KVtdLCBfaywgaWQpID0+ICEhaWQgJiYgdmFsdWVzPy5sZW5ndGhcbiAgICA/ICh2YWx1ZXNbMF0ucHJvcGVydGllcyB8fCBbXSkuZmluZChwID0+IHAudGVybVsnQGlkJ10gPT09IGlkKT8udmFsdWUgfHwgJydcbiAgICA6ICcnLFxuICBpbnB1dDogKHZhbHVlczogRW1pc3Npb25bXSwgX2ssIGlkKSA9PiAhIWlkICYmIHZhbHVlcz8ubGVuZ3RoXG4gICAgPyBwcm9wZXJ0eVZhbHVlKHZhbHVlcy5maW5kKCh7IGlucHV0cyB9KSA9PiAoaW5wdXRzIHx8IFtdKS5zb21lKGlucHV0ID0+IGlucHV0WydAaWQnXSA9PT0gaWQpKT8udmFsdWUsIGlkKVxuICAgIDogJycsXG4gIHRyYW5zZm9ybWF0aW9uOiAoKSA9PiBudWxsLCAvLyBUT0RPOiBoYW5kbGUgVHJhbnNmb3JtYXRpb25cbiAgZGVmYXVsdDogKGJsYW5rTm9kZXMsIGtleSkgPT4ge1xuICAgIGNvbnN0IHZhbHVlID0gYmxhbmtOb2Rlcz8ubGVuZ3RoID8gYmxhbmtOb2Rlc1swXVtrZXldIDogbnVsbDtcbiAgICByZXR1cm4gWydzdHJpbmcnLCAnbnVtYmVyJywgJ2Jvb2xlYW4nLCAndW5kZWZpbmVkJ10uaW5jbHVkZXModHlwZW9mIHZhbHVlKSA/ICh2YWx1ZSB8fCAnJykgOiBudWxsO1xuICB9XG59O1xuXG5jb25zdCBibGFua05vZGVWYWx1ZSA9IChibGFua05vZGVzOiBibGFua05vZGVbXSwga2V5OiBzdHJpbmcsIGlkPzogc3RyaW5nKSA9PlxuICBibGFua05vZGVWYWx1ZUJ5S2V5W2tleSBpbiBibGFua05vZGVWYWx1ZUJ5S2V5ID8ga2V5IDogJ2RlZmF1bHQnXShibGFua05vZGVzLCBrZXksIGlkKTtcblxuY29uc3QgbG9nU3ViVmFsdWUgPSAobG9nczogSU5vZGVUZXJtTG9ncywga2V5OiBzdHJpbmcsIHByb3A6IHN0cmluZykgPT5cbiAgbG9nc1trZXldW3Byb3BdID8gKFxuICAgIEFycmF5LmlzQXJyYXkobG9nc1trZXldW3Byb3BdKSA/XG4gICAgICAobG9nc1trZXldW3Byb3BdIGFzIHN0cmluZ1tdKS5tYXAoaWQgPT4gKHsga2V5OiBwcm9wLCBpZCB9IGFzIElCbGFua05vZGVMb2dTdWJWYWx1ZSkpIDpcbiAgICAgIHsga2V5OiBwcm9wLCBpZDogbG9nc1trZXldW3Byb3BdIH0gYXMgSUJsYW5rTm9kZUxvZ1N1YlZhbHVlXG4gICkgOiB1bmRlZmluZWQ7XG5cbmNvbnN0IGlzQmFja2dyb3VuZE5vSW5wdXQgPSAobG9nczogSU5vZGVUZXJtTG9ncywga2V5OiBzdHJpbmcpID0+XG4gIGxvZ3Nba2V5XS5tZXRob2RUaWVyID09PSBFbWlzc2lvbk1ldGhvZFRpZXIuYmFja2dyb3VuZCAmJiAhbG9nc1trZXldLmlucHV0O1xuXG5jb25zdCBsb2dTdWJWYWx1ZXMgPSAobG9nczogSU5vZGVUZXJtTG9ncywgb3JpZ2luYWw6IGJsYW5rTm9kZVtdLCByZWNhbGN1bGF0ZWQ6IGJsYW5rTm9kZVtdKTogSUJsYW5rTm9kZUxvZ1N1YlZhbHVlW10gPT5cbiAgT2JqZWN0LmtleXMobG9ncylcbiAgICAuZmxhdE1hcChrZXkgPT5cbiAgICAgIFtcbiAgICAgICAgbG9nU3ViVmFsdWUobG9ncywga2V5LCAnaW5wdXQnKSxcbiAgICAgICAgbG9nU3ViVmFsdWUobG9ncywga2V5LCAncHJvcGVydHknKSxcbiAgICAgICAgbG9nU3ViVmFsdWUobG9ncywga2V5LCAndHJhbnNmb3JtYXRpb24nKVxuICAgICAgXVxuICAgICAgICAuZmxhdCgpXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgLm1hcCh2ID0+ICh7XG4gICAgICAgICAgLi4udixcbiAgICAgICAgICBjb25maWdNb2RlbHM6IFtrZXldLFxuICAgICAgICAgIG9yaWdpbmFsVmFsdWU6IGJsYW5rTm9kZVZhbHVlKG9yaWdpbmFsLCB2LmtleSwgdi5pZCksXG4gICAgICAgICAgcmVjYWxjdWxhdGVkVmFsdWU6IGJsYW5rTm9kZVZhbHVlKHJlY2FsY3VsYXRlZCwgdi5rZXksIHYuaWQpLFxuICAgICAgICAgIGlzUmVjYWxjdWxhdGVkOiBpc1JlY2FsY3VsYXRlZChyZWNhbGN1bGF0ZWQsIHYua2V5KVxuICAgICAgICB9KSlcbiAgICApO1xuXG5jb25zdCBsb2dLZXlzID0gKGxvZ3M6IElOb2RlVGVybUxvZ3MsIG9yaWdpbmFsOiBibGFua05vZGVbXSwgcmVjYWxjdWxhdGVkOiBibGFua05vZGVbXSk6IElCbGFua05vZGVMb2dTdWJWYWx1ZVtdID0+XG4gIE9iamVjdC5rZXlzKGxvZ3MpXG4gICAgLmZpbHRlcihrZXkgPT4gbG9nc1trZXldLmlzS2V5KVxuICAgIC5tYXAoa2V5ID0+ICh7XG4gICAgICBrZXksXG4gICAgICBvcmlnaW5hbFZhbHVlOiBibGFua05vZGVWYWx1ZShvcmlnaW5hbCwga2V5KSxcbiAgICAgIHJlY2FsY3VsYXRlZFZhbHVlOiBibGFua05vZGVWYWx1ZShyZWNhbGN1bGF0ZWQsIGtleSksXG4gICAgICBpc1JlY2FsY3VsYXRlZDogaXNSZWNhbGN1bGF0ZWQocmVjYWxjdWxhdGVkLCBrZXkpXG4gICAgfSkpO1xuXG5jb25zdCBtb2RlbENvbmZpZ09yZGVyID0gKFxuICBtb2RlbHM6IChJT3JjaGVzdHJhdG9yTW9kZWxDb25maWcgfCBJT3JjaGVzdHJhdG9yTW9kZWxDb25maWdbXSlbXSwgdGVybUlkOiBzdHJpbmcsIG1vZGVsS2V5OiBzdHJpbmcsIG1vZGVsOiBzdHJpbmdcbik6IHN0cmluZyA9PiB7XG4gIGNvbnN0IGluZGV4ZXMgPSBtb2RlbHMubWFwKChtLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IGFycmF5SW5kZXggPSBBcnJheS5pc0FycmF5KG0pID8gbW9kZWxDb25maWdPcmRlcihtLCB0ZXJtSWQsIG1vZGVsS2V5LCBtb2RlbCkgOiAnJztcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShtKVxuICAgICAgPyBhcnJheUluZGV4XG4gICAgICAgID8gW2luZGV4LCBhcnJheUluZGV4XS5qb2luKCcuJylcbiAgICAgICAgOiAnJ1xuICAgICAgOiBbdGVybUlkID09PSBtLnZhbHVlLCBtb2RlbEtleSA9PT0gbS5rZXksIG1vZGVsID09PSBtLm1vZGVsXS5ldmVyeShCb29sZWFuKVxuICAgICAgICA/IGAke2luZGV4fWBcbiAgICAgICAgOiAnJztcbiAgfSkuZmlsdGVyKEJvb2xlYW4pO1xuICByZXR1cm4gaW5kZXhlcy5sZW5ndGggPyBpbmRleGVzWzBdIDogJyc7XG59O1xuXG4vKipcbiAqIEdyb3VwIG1vZGVscyBydW5uaW5nIGluIHBhcmFsbGVsIHVuZGVyIHRoZSBzYW1lIGFycmF5LCBhcyB0aGV5IHNob3VsZCBhcHBlYXIgdmVydGljYWxseS5cbiAqXG4gKiBAcGFyYW0gY29uZmlnIFRoZSBjb25maWd1cmF0aW9uLlxuICogQHBhcmFtIG1vZGVscyBUaGUgbGlzdCBvZiBtb2RlbHNcbiAqL1xuY29uc3QgZ3JvdXBQYXJhbGxlbE1vZGVscyA9IChjb25maWc6IElPcmNoZXN0cmF0b3JDb25maWcsIHRlcm1JZDogc3RyaW5nLCBtb2RlbEtleTogc3RyaW5nLCBtb2RlbHM6IHN0cmluZ1tdKSA9PiB7XG4gIGNvbnN0IG1vZGVsc1dpdGhPcmRlciA9IG1vZGVscy5tYXAobW9kZWwgPT4gKHtcbiAgICBtb2RlbCxcbiAgICBvcmRlcjogbW9kZWxDb25maWdPcmRlcihjb25maWcubW9kZWxzLCB0ZXJtSWQsIG1vZGVsS2V5LCBtb2RlbClcbiAgfSkpO1xuICByZXR1cm4gbW9kZWxzV2l0aE9yZGVyXG4gICAgLnJlZHVjZSgocHJldiwgeyBtb2RlbCwgb3JkZXIgfSkgPT4ge1xuICAgICAgY29uc3QgaXNBcnJheSA9IG9yZGVyLmluY2x1ZGVzKCcuJyk7XG4gICAgICBjb25zdCBhcnJheUluZGV4ID0gaXNBcnJheSA/IG9yZGVyLnNwbGl0KCcuJylbMF0gOiBwcmV2Lmxlbmd0aDtcbiAgICAgIHByZXZbYXJyYXlJbmRleF0gPSBpc0FycmF5ID8gWy4uLihwcmV2W2FycmF5SW5kZXhdIHx8IFtdKSwgbW9kZWxdIDogbW9kZWw7XG4gICAgICByZXR1cm4gcHJldjtcbiAgICB9LCBbXSBhcyBzdHJpbmdbXSlcbiAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgLm1hcCh2ID0+IHYubGVuZ3RoID09PSAxID8gdlswXSA6IHYpO1xufTtcblxuZW51bSBMb2dTdGF0dXMge1xuICBzdWNjZXNzID0gJ3N1Y2Nlc3NmdWwnLFxuICBlcnJvciA9ICdmYWlsZWQnLFxuICBza2lwSGllcmFyY2h5ID0gJ25vdCBydW4gKG1vZGVsIGhpZ2hlciB1cCBoaWVyYXJjaHkgcnVuIGluc3RlYWQpJyxcbiAgZGF0YVByb3ZpZGVkID0gJ25vdCBydW4gKHVzZXIgcHJvdmlkZWQgZGF0YSByZXRhaW5lZCknLFxuICBub3RSZXF1aXJlZCA9ICdub3QgcnVuIChub3QgcmVxdWlyZWQgdG8gcnVuKSdcbn1cblxuY29uc3QgbG9nSWNvbjoge1xuICBbc3RhdHVzIGluIExvZ1N0YXR1c106IHN0cmluZyB8IHN0cmluZ1tdO1xufSA9IHtcbiAgW0xvZ1N0YXR1cy5zdWNjZXNzXTogJ2NoZWNrJyxcbiAgW0xvZ1N0YXR1cy5lcnJvcl06ICd0aW1lcycsXG4gIFtMb2dTdGF0dXMuc2tpcEhpZXJhcmNoeV06IFsnZmFyJywgJ2NpcmNsZSddLFxuICBbTG9nU3RhdHVzLmRhdGFQcm92aWRlZF06ICdjaXJjbGUnLFxuICBbTG9nU3RhdHVzLm5vdFJlcXVpcmVkXTogJ21pbnVzLWNpcmNsZSdcbn07XG5cbmNvbnN0IGxvZ0NvbG9yOiB7XG4gIFtzdGF0dXMgaW4gTG9nU3RhdHVzXTogc3RyaW5nO1xufSA9IHtcbiAgW0xvZ1N0YXR1cy5zdWNjZXNzXTogJ3N1Y2Nlc3MnLFxuICBbTG9nU3RhdHVzLmVycm9yXTogJ2RhbmdlcicsXG4gIFtMb2dTdGF0dXMuc2tpcEhpZXJhcmNoeV06ICdkYXJrJyxcbiAgW0xvZ1N0YXR1cy5kYXRhUHJvdmlkZWRdOiAnZGFyaycsXG4gIFtMb2dTdGF0dXMubm90UmVxdWlyZWRdOiAnZ3JleSdcbn07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2hlLW5vZGUtbG9ncy1tb2RlbHMnLFxuICB0ZW1wbGF0ZVVybDogJy4vbm9kZS1sb2dzLW1vZGVscy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL25vZGUtbG9ncy1tb2RlbHMuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBOb2RlTG9nc01vZGVsc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHByaXZhdGUgY29uZmlnPzogSU9yY2hlc3RyYXRvckNvbmZpZztcbiAgcHJpdmF0ZSBtb2RlbHM6IElUZXJtSlNPTkxEW10gPSBbXTtcbiAgcHJpdmF0ZSBhbGxUZXJtczogSVRlcm1KU09OTERbXSA9IFtdO1xuICBwcml2YXRlIGFsbEJsYW5rTm9kZXM6IElCbGFua05vZGVMb2dbXSA9IFtdO1xuXG4gIEBJbnB1dCgpXG4gIHByaXZhdGUgbm9kZVR5cGU/OiBOb2RlVHlwZTtcbiAgLyoqXG4gICAqIFJlc3RyaWN0IG1vZGVscyBieSBrZXkuXG4gICAqL1xuICBASW5wdXQoKVxuICBwcml2YXRlIG5vZGVLZXk/OiBzdHJpbmc7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBsb2dzVXJsPzogc3RyaW5nO1xuICBASW5wdXQoKVxuICBwdWJsaWMgb3JpZ2luYWxWYWx1ZXM6IGJsYW5rTm9kZVtdID0gW107XG4gIEBJbnB1dCgpXG4gIHByaXZhdGUgcmVjYWxjdWxhdGVkVmFsdWVzOiBibGFua05vZGVbXSA9IFtdO1xuICBASW5wdXQoKVxuICBwcml2YXRlIHRlcm1zOiBJVGVybUpTT05MRFtdID0gW107XG4gIEBJbnB1dCgpXG4gIHByaXZhdGUgbG9ncz86IElOb2RlTG9ncztcbiAgQElucHV0KClcbiAgcHVibGljIGZpbHRlcmVkVHlwZT86IHN0cmluZztcblxuICBwdWJsaWMgYmFzZVVybCA9IGJhc2VVcmwoKTtcbiAgcHVibGljIGlzRXh0ZXJuYWwgPSBpc0V4dGVybmFsKCk7XG4gIHB1YmxpYyBsb2FkaW5nID0gdHJ1ZTtcbiAgcHVibGljIGJsYW5rTm9kZXM6IElCbGFua05vZGVMb2dbXSA9IFtdO1xuICBwdWJsaWMgbWV0aG9kTW9kZWxzQ291bnQgPSAwO1xuICBwdWJsaWMgbWV0aG9kc0J5SWQ/OiBhbnk7XG4gIHB1YmxpYyBvbmx5V2l0aERhdGEgPSB0cnVlO1xuXG4gIHB1YmxpYyBzaG93TGVnZW5kID0gdHJ1ZTtcbiAgcHVibGljIExvZ1N0YXR1cyA9IExvZ1N0YXR1cztcbiAgcHVibGljIGxvZ0ljb24gPSBsb2dJY29uO1xuICBwdWJsaWMgbG9nQ29sb3IgPSBsb2dDb2xvcjtcblxuICBwdWJsaWMgdGVybT86IHN0cmluZztcbiAgcHVibGljIHN1Z2dlc3RUZXJtID0gKHRleHQkOiBPYnNlcnZhYmxlPHN0cmluZz4pID0+XG4gICAgdGV4dCQucGlwZShcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICBzd2l0Y2hNYXAodiA9PiB0aGlzLnN1Z2dlc3RCeVRlcm0odikpLFxuICAgICk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBzZWFyY2hTZXJ2aWNlOiBIZVNlYXJjaFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBoZXN0aWFFbmdpbmVTZXJ2aWNlOiBIZUVuZ2luZVNlcnZpY2VcbiAgKSB7IH1cblxuICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmNvbmZpZyA9IGF3YWl0IHRoaXMuaGVzdGlhRW5naW5lU2VydmljZS5vY2hlc3RyYXRvckNvbmZpZyh0aGlzLm5vZGVUeXBlISk7XG5cbiAgICBjb25zdCB7IHJlc3VsdHM6IG1vZGVscyB9ID0gYXdhaXQgdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaDxJVGVybUpTT05MRCwgTm9kZVR5cGUuVGVybT4oe1xuICAgICAgZmllbGRzOiBbJ0B0eXBlJywgJ0BpZCcsICduYW1lJ10sXG4gICAgICBsaW1pdDogMTAwMCxcbiAgICAgIHF1ZXJ5OiB7XG4gICAgICAgIGJvb2w6IHtcbiAgICAgICAgICBtdXN0OiBbXG4gICAgICAgICAgICBtYXRjaFR5cGUoTm9kZVR5cGUuVGVybSksXG4gICAgICAgICAgICBtYXRjaFRlcm1UeXBlKFRlcm1UZXJtVHlwZS5tb2RlbClcbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLm1vZGVscyA9IG1vZGVscztcblxuICAgIHRoaXMubWV0aG9kc0J5SWQgPSBhd2FpdCBmcm9tKHRoaXMubW9kZWxzKS5waXBlKFxuICAgICAgZmlsdGVyKHYgPT4gISF2KSxcbiAgICAgIGRpc3RpbmN0KHYgPT4gdlsnQGlkJ10pLFxuICAgICAgcmVkdWNlKChwcmV2LCBjdXJyKSA9PiAoeyAuLi5wcmV2LCBbY3VyclsnQGlkJ11dOiBjdXJyIH0pLCB7fSlcbiAgICApLnRvUHJvbWlzZSgpO1xuXG4gICAgLy8gZnJvbSBgbW9kZWwtbGlua3MuanNvbmAgZmlsZVxuICAgIGNvbnN0IGFsbE1vZGVscyA9IGF3YWl0IHRoaXMuaGVzdGlhRW5naW5lU2VydmljZS5tb2RlbHMoKTtcblxuICAgIGNvbnN0IG9yaWdpbmFsVmFsdWVzID0gKHRoaXMub3JpZ2luYWxWYWx1ZXMgfHwgW10pLmZpbHRlcih2YWx1ZSA9PiAhKHZhbHVlIGFzIGFueSkuZGVsZXRlZCk7XG4gICAgY29uc3QgcmVjYWxjdWxhdGVkVmFsdWVzID0gKHRoaXMucmVjYWxjdWxhdGVkVmFsdWVzIHx8IFtdKS5maWx0ZXIodmFsdWUgPT4gISh2YWx1ZSBhcyBhbnkpLmRlbGV0ZWQpO1xuICAgIGNvbnN0IHR5cGUgPSBvcmlnaW5hbFZhbHVlcy5sZW5ndGggP1xuICAgICAgb3JpZ2luYWxWYWx1ZXNbMF1bJ0B0eXBlJ10gfHwgb3JpZ2luYWxWYWx1ZXNbMF0udHlwZSA6XG4gICAgICByZWNhbGN1bGF0ZWRWYWx1ZXMubGVuZ3RoID9cbiAgICAgICAgcmVjYWxjdWxhdGVkVmFsdWVzWzBdWydAdHlwZSddIHx8IHJlY2FsY3VsYXRlZFZhbHVlc1swXS50eXBlIDpcbiAgICAgICAgdW5kZWZpbmVkO1xuICAgIHRoaXMuYWxsVGVybXMgPSBhd2FpdCB0aGlzLmZldGNoQWxsVGVybXMoKTtcbiAgICB0aGlzLmFsbEJsYW5rTm9kZXMgPSB0aGlzLmFsbFRlcm1zLmZsYXRNYXAodGVybSA9PiB7XG4gICAgICBjb25zdCB0ZXJtSWQgPSB0ZXJtWydAaWQnXTtcbiAgICAgIGNvbnN0IHRlcm1Mb2dzID0gZ2V0KHRoaXMubG9ncywgdGVybUlkLCB7fSkgYXMgSU5vZGVUZXJtTG9ncztcbiAgICAgIGNvbnN0IG9yaWdpbmFsID0gb3JpZ2luYWxWYWx1ZXMuZmlsdGVyKHYgPT4gdGVybUlkID09PSB2LnRlcm0hWydAaWQnXSk7XG4gICAgICBjb25zdCByZWNhbGN1bGF0ZWQgPSByZWNhbGN1bGF0ZWRWYWx1ZXMuZmlsdGVyKHYgPT4gdGVybUlkID09PSB2LnRlcm0hWydAaWQnXSk7XG4gICAgICBjb25zdCBoYXNEYXRhID0gISFvcmlnaW5hbC5sZW5ndGggfHwgISFyZWNhbGN1bGF0ZWQubGVuZ3RoIHx8IE9iamVjdC5rZXlzKHRlcm1Mb2dzKS5sZW5ndGggPiAwO1xuICAgICAgY29uc3QgY29uZmlnTW9kZWxzID0gdW5pcXVlKFtcbiAgICAgICAgLi4uZmluZENvbmZpZ01vZGVscyh0aGlzLmNvbmZpZyEsIHRlcm1JZCwgdGhpcy5ub2RlS2V5ISwgYWxsTW9kZWxzKS5tYXAoKHsgbW9kZWwgfSkgPT4gbW9kZWwgYXMgc3RyaW5nKSxcbiAgICAgICAgLi4uT2JqZWN0LmtleXModGVybUxvZ3MpLmZpbHRlcihrZXkgPT4gIWlzQmFja2dyb3VuZE5vSW5wdXQodGVybUxvZ3MsIGtleSkpXG4gICAgICBdKS5maWx0ZXIoa2V5ID0+ICEoXG4gICAgICAgIGtleSBpbiB0ZXJtTG9nc1xuICAgICAgKSB8fCAoXG4gICAgICAgICAgIXRlcm1Mb2dzW2tleV0uaXNLZXkgJiYgIXRlcm1Mb2dzW2tleV0uaW5wdXQgJiYgIXRlcm1Mb2dzW2tleV0ucHJvcGVydHlcbiAgICAgICAgKSk7XG4gICAgICBjb25zdCBrZXlzID0gbG9nS2V5cyh0ZXJtTG9ncywgb3JpZ2luYWwsIHJlY2FsY3VsYXRlZCk7XG4gICAgICBjb25zdCBzdWJWYWx1ZXMgPSBsb2dTdWJWYWx1ZXModGVybUxvZ3MsIG9yaWdpbmFsLCByZWNhbGN1bGF0ZWQpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXNPcGVuOiB0cnVlLFxuICAgICAgICBjYW5PcGVuOiBrZXlzLmxlbmd0aCA+IDAgfHwgc3ViVmFsdWVzLmxlbmd0aCA+IDAsXG4gICAgICAgIHRlcm1JZCxcbiAgICAgICAgdGVybSxcbiAgICAgICAgdHlwZSxcbiAgICAgICAgY29uZmlnTW9kZWxzOiBncm91cFBhcmFsbGVsTW9kZWxzKHRoaXMuY29uZmlnLCB0ZXJtSWQsIHRoaXMubm9kZUtleSEsIGNvbmZpZ01vZGVscyksXG4gICAgICAgIG9yaWdpbmFsLFxuICAgICAgICBvcmlnaW5hbFZhbHVlOiByZWR1Y2VWYWx1ZXMob3JpZ2luYWwsIHRlcm1JZCksXG4gICAgICAgIHJlY2FsY3VsYXRlZCxcbiAgICAgICAgcmVjYWxjdWxhdGVkVmFsdWU6IHJlZHVjZVZhbHVlcyhyZWNhbGN1bGF0ZWQsIHRlcm1JZCksXG4gICAgICAgIGlzT3JpZ2luYWw6ICEhb3JpZ2luYWwubGVuZ3RoLFxuICAgICAgICBpc1JlY2FsY3VsYXRlZDogaXNSZWNhbGN1bGF0ZWQocmVjYWxjdWxhdGVkKSxcbiAgICAgICAgaGFzRGF0YSxcbiAgICAgICAgbG9nczogdGVybUxvZ3MsXG4gICAgICAgIGtleXMsXG4gICAgICAgIHN1YlZhbHVlc1xuICAgICAgfTtcbiAgICB9KTtcbiAgICB0aGlzLm1ldGhvZE1vZGVsc0NvdW50ID0gTWF0aC5tYXguYXBwbHkoTWF0aC5tYXgsIHRoaXMuYWxsQmxhbmtOb2Rlcy5mbGF0TWFwKHYgPT4gW1xuICAgICAgdi5jb25maWdNb2RlbHMubGVuZ3RoLFxuICAgICAgLi4udi5zdWJWYWx1ZXMubWFwKHMgPT4gcy5jb25maWdNb2RlbHM/Lmxlbmd0aCA/PyAwKVxuICAgIF0pKTtcblxuICAgIHRoaXMuZmlsdGVyUmVzdWx0cygpO1xuXG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZldGNoQWxsVGVybXMoKSB7XG4gICAgcmV0dXJuIGZyb20oXG4gICAgICB0aGlzLnRlcm1zLmxlbmd0aCA/XG4gICAgICAgIHRoaXMudGVybXMgOlxuICAgICAgICBbXG4gICAgICAgICAgLi4uKHRoaXMub3JpZ2luYWxWYWx1ZXMgfHwgW10pLm1hcCgoeyB0ZXJtIH0pID0+IHRlcm0pLFxuICAgICAgICAgIC4uLih0aGlzLnJlY2FsY3VsYXRlZFZhbHVlcyB8fCBbXSkubWFwKCh7IHRlcm0gfSkgPT4gdGVybSlcbiAgICAgICAgXVxuICAgICkucGlwZShcbiAgICAgIGRpc3RpbmN0KHYgPT4gdiFbJ0BpZCddKSxcbiAgICAgIHRvQXJyYXkoKSxcbiAgICAgIG1hcCh2ID0+IG9yZGVyQnkodiwgWyduYW1lJ10sIFsnYXNjJ10pKVxuICAgICkudG9Qcm9taXNlKCk7XG4gIH1cblxuICBwcml2YXRlIHN1Z2dlc3RCeVRlcm0odGVybTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGZyb20odGhpcy5hbGxUZXJtcykucGlwZShcbiAgICAgIG1hcCh2ID0+IHYubmFtZSksXG4gICAgICBmaWx0ZXIodiA9PiB2LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGVybS50b0xvd2VyQ2FzZSgpKSksXG4gICAgICB0b0FycmF5KClcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHRyYWNrQnlCbGFua05vZGUoX2luZGV4OiBudW1iZXIsIG5vZGU6IElCbGFua05vZGVMb2cpIHtcbiAgICByZXR1cm4gbm9kZS50ZXJtSWQ7XG4gIH1cblxuICBwdWJsaWMga2V5VmFsdWUoYmxhbmtOb2RlczogYmxhbmtOb2RlW10sIGtleTogc3RyaW5nKSB7XG4gICAgY29uc3QgdmFsdWUgPSBibGFua05vZGVzPy5sZW5ndGggPyBibGFua05vZGVzWzBdW2tleV0gOiBudWxsO1xuICAgIHJldHVybiBbJ3N0cmluZycsICdudW1iZXInLCAnYm9vbGVhbiddLmluY2x1ZGVzKHR5cGVvZiB2YWx1ZSkgPyAodmFsdWUgfHwgJycpIDogbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVQb3BvdmVyKHBvcG92ZXIsIGNvbnRleHQpIHtcbiAgICByZXR1cm4gcG9wb3Zlci5pc09wZW4oKSA/IHBvcG92ZXIuY2xvc2UoKSA6IHBvcG92ZXIub3Blbihjb250ZXh0KTtcbiAgfVxuXG4gIHB1YmxpYyBmaWx0ZXJSZXN1bHRzKCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5ibGFua05vZGVzID0gdGhpcy5hbGxCbGFua05vZGVzLmZpbHRlcigoeyBoYXNEYXRhLCB0ZXJtOiB7IG5hbWUgfSB9KSA9PlxuICAgICAgICAoIXRoaXMub25seVdpdGhEYXRhIHx8IGhhc0RhdGEpICYmXG4gICAgICAgICghdGhpcy50ZXJtIHx8IG5hbWUgPT09IHRoaXMudGVybSlcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICAvKiogTG9ncyAqKi9cblxuICBwcml2YXRlIGdldFN1YnZhbHVlTG9ncyhub2RlOiBJQmxhbmtOb2RlTG9nLCB7IGlkIH06IElCbGFua05vZGVMb2dTdWJWYWx1ZSkge1xuICAgIC8vIHRyeSB0byBnZXQgYSBtb3JlIHByZWNpc2UgbG9ncywgZGVmYXVsdHMgdG8gaWQgb3RoZXJ3aXNlXG4gICAgcmV0dXJuIGdldCh0aGlzLmxvZ3MsIFtpZCwgbm9kZS50ZXJtSWRdLmpvaW4oJy4nKSwgZ2V0KHRoaXMubG9ncywgaWQsIHt9KSkgYXMgSU5vZGVUZXJtTG9nO1xuICB9XG5cbiAgcHVibGljIGdldExvZ3Mobm9kZTogSUJsYW5rTm9kZUxvZywgbWV0aG9kSWQ6IHN0cmluZywgc3ViVmFsdWU/OiBJQmxhbmtOb2RlTG9nU3ViVmFsdWUpIHtcbiAgICBjb25zdCBsb2dzID0gc3ViVmFsdWU/LmtleSA/IHRoaXMuZ2V0U3VidmFsdWVMb2dzKG5vZGUsIHN1YlZhbHVlKSA6IG5vZGUubG9ncyB8fCB7fTtcbiAgICByZXR1cm4gbG9nc1ttZXRob2RJZF07XG4gIH1cblxuICBwcml2YXRlIGlzQmFja2dyb3VuZChsb2c6IElOb2RlVGVybUxvZykge1xuICAgIHJldHVybiBsb2c/Lm1ldGhvZFRpZXIgPT09IEVtaXNzaW9uTWV0aG9kVGllci5iYWNrZ3JvdW5kO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1JlcXVpcmVkKGxvZzogSU5vZGVUZXJtTG9nKSB7XG4gICAgcmV0dXJuICEoJ3Nob3VsZFJ1bk9yY2hlc3RyYXRvcicgaW4gbG9nKSB8fCBsb2cuc2hvdWxkUnVuT3JjaGVzdHJhdG9yO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1VzZXJQcm92aWRlZChub2RlOiBJQmxhbmtOb2RlTG9nLCBtZXRob2RJZDogc3RyaW5nLCBzdWJWYWx1ZT86IElCbGFua05vZGVMb2dTdWJWYWx1ZSkge1xuICAgIGNvbnN0IGxvZyA9IHRoaXMuZ2V0TG9ncyhub2RlLCBtZXRob2RJZCwgc3ViVmFsdWUpO1xuICAgIHJldHVybiBbXG4gICAgICB0eXBlb2Ygbm9kZS5vcmlnaW5hbFZhbHVlID09PSAndW5kZWZpbmVkJywgLy8gaGFzIHZhbHVlXG4gICAgICBub2RlLmlzUmVjYWxjdWxhdGVkLCAvLyBpcyBub3QgcmVjYWxjdWxhdGVkXG4gICAgICB0aGlzLmlzQmFja2dyb3VuZChsb2cpLCAvLyBpcyBub3QgYmFja2dyb3VuZCBkYXRhXG4gICAgICBsb2c/LmlzS2V5LCAvLyBpcyBub3Qga2V5XG4gICAgICB0aGlzLmhhc0xvZyhsb2csIGZhbHNlKSAvLyBza2lwIGlmIGNvbnRhaW5zIGxvZ3Mgb3RoZXIgdGhhbiBvcmNoZXN0cmF0b3JcbiAgICBdLmV2ZXJ5KHYgPT4gIXYpO1xuICB9XG5cbiAgcHVibGljIHZhbGlkU3ViVmFsdWUobm9kZTogSUJsYW5rTm9kZUxvZywgaW5kZXg6IG51bWJlciwgc3ViVmFsdWU/OiBJQmxhbmtOb2RlTG9nU3ViVmFsdWUpIHtcbiAgICBjb25zdCBtZXRob2RJZCA9IHRoaXMuZ2V0TWV0aG9kSWRBdChub2RlLCBpbmRleCwgc3ViVmFsdWUpO1xuICAgIGNvbnN0IGxvZyA9IGdldChub2RlLmxvZ3MhW21ldGhvZElkXSwgc3ViVmFsdWU/LmtleSwgbnVsbCk7XG4gICAgcmV0dXJuICFzdWJWYWx1ZT8uaWQgfHwgKFxuICAgICAgLy8gc3ViVmFsdWUgY2FuIGJlIGFuIGFycmF5XG4gICAgICBBcnJheS5pc0FycmF5KGxvZykgPyBsb2cuaW5jbHVkZXMoc3ViVmFsdWU/LmlkKSA6IGxvZyA9PT0gc3ViVmFsdWU/LmlkXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRNZXRob2RJZEF0KG5vZGU6IElCbGFua05vZGVMb2csIGluZGV4OiBudW1iZXIsIHN1YlZhbHVlPzogSUJsYW5rTm9kZUxvZ1N1YlZhbHVlKSB7XG4gICAgY29uc3QgeyBjb25maWdNb2RlbHMgfSA9IHN1YlZhbHVlIHx8IG5vZGU7XG4gICAgcmV0dXJuIGNvbmZpZ01vZGVsc1tpbmRleF07XG4gIH1cblxuICBwdWJsaWMgbWV0aG9kTmFtZShub2RlOiBJQmxhbmtOb2RlTG9nLCBtZXRob2RJZDogc3RyaW5nLCBzdWJWYWx1ZT86IElCbGFua05vZGVMb2dTdWJWYWx1ZSkge1xuICAgIGNvbnN0IGxvZyA9IHRoaXMuZ2V0TG9ncyhub2RlLCBtZXRob2RJZCwgc3ViVmFsdWUpO1xuICAgIHJldHVybiB0aGlzLm1ldGhvZHNCeUlkW21ldGhvZElkXT8ubmFtZSB8fFxuICAgICAgbG9nPy5rZXkgfHxcbiAgICAgIGxvZz8ubW9kZWwgfHxcbiAgICAgIChtZXRob2RJZCA/IGtleVRvTGFiZWwobWV0aG9kSWQpIDogJycpO1xuICB9XG5cbiAgcHVibGljIGhhc0xvZyhsb2c6IElOb2RlVGVybUxvZywgd2l0aE9yY2hlc3RyYXRvciA9IHRydWUpIHtcbiAgICByZXR1cm4gISFsb2cgJiYgKFxuICAgICAgJ3Nob3VsZFJ1bicgaW4gbG9nIHx8XG4gICAgICAod2l0aE9yY2hlc3RyYXRvciAmJiAnc2hvdWxkUnVuT3JjaGVzdHJhdG9yJyBpbiBsb2cpXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBoYXNMb2dEZXRhaWxzKG5vZGU6IElCbGFua05vZGVMb2csIG1ldGhvZElkOiBzdHJpbmcsIHN1YlZhbHVlPzogSUJsYW5rTm9kZUxvZ1N1YlZhbHVlKSB7XG4gICAgY29uc3QgbG9nID0gdGhpcy5nZXRMb2dzKG5vZGUsIG1ldGhvZElkLCBzdWJWYWx1ZSk7XG4gICAgcmV0dXJuIFtcbiAgICAgIExvZ1N0YXR1cy5zdWNjZXNzLFxuICAgICAgTG9nU3RhdHVzLmVycm9yXG4gICAgXS5pbmNsdWRlcyh0aGlzLmxvZ1N0YXR1cyhub2RlLCBtZXRob2RJZCwgc3ViVmFsdWUpKSAmJiAoXG4gICAgICAgIGxvZz8ucmVxdWlyZW1lbnRzIHx8IGxvZz8ubG9ncyB8fCBsb2c/Lm1pc3NpbmdMb29rdXBzPy5sZW5ndGhcbiAgICAgICk7XG4gIH1cblxuICBwdWJsaWMgbG9nU3RhdHVzKG5vZGU6IElCbGFua05vZGVMb2csIG1ldGhvZElkOiBzdHJpbmcsIHN1YlZhbHVlPzogSUJsYW5rTm9kZUxvZ1N1YlZhbHVlKSB7XG4gICAgY29uc3QgbG9nID0gdGhpcy5nZXRMb2dzKG5vZGUsIG1ldGhvZElkLCBzdWJWYWx1ZSk7XG4gICAgcmV0dXJuIHRoaXMuaXNVc2VyUHJvdmlkZWQobm9kZSwgbWV0aG9kSWQsIHN1YlZhbHVlKSA/XG4gICAgICBMb2dTdGF0dXMuZGF0YVByb3ZpZGVkIDpcbiAgICAgIChcbiAgICAgICAgdGhpcy5oYXNMb2cobG9nKSA/XG4gICAgICAgICAgKFxuICAgICAgICAgICAgdGhpcy5pc1JlcXVpcmVkKGxvZykgP1xuICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgbG9nLnNob3VsZFJ1biA/XG4gICAgICAgICAgICAgICAgICBMb2dTdGF0dXMuc3VjY2VzcyA6XG4gICAgICAgICAgICAgICAgICBMb2dTdGF0dXMuZXJyb3JcbiAgICAgICAgICAgICAgKSA6XG4gICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICBub2RlLmlzUmVjYWxjdWxhdGVkID9cbiAgICAgICAgICAgICAgICAgIExvZ1N0YXR1cy5za2lwSGllcmFyY2h5IDpcbiAgICAgICAgICAgICAgICAgIExvZ1N0YXR1cy5ub3RSZXF1aXJlZFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgKSA6XG4gICAgICAgICAgTG9nU3RhdHVzLnNraXBIaWVyYXJjaHlcbiAgICAgICk7XG4gIH1cblxuICBwdWJsaWMgcmVxdWlyZW1lbnRLZXlzKHJlcXVpcmVtZW50czogeyBba2V5OiBzdHJpbmddOiBhbnkgfSkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhyZXF1aXJlbWVudHMpLmZpbHRlcihrID0+ICFub2RlVHlwZXNMb3dlckNhc2UuaW5jbHVkZXMoaykgJiYgayAhPT0gJ3RyYW5zZm9ybWF0aW9uJyk7XG4gIH1cblxuICBwdWJsaWMgcmVxdWlyZW1lbnRDb2xvcih2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuICF2YWx1ZSB8fCBbJ05vbmUnLCAnRmFsc2UnLCAnMCcsICcwLjAnXS5pbmNsdWRlcyh2YWx1ZSkgPyAnZGFuZ2VyJyA6ICd3aGl0ZSc7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJweC0zIHBiLTNcIj5cbiAgPGRpdiBjbGFzcz1cImhhcy10ZXh0LXJpZ2h0IG1iLTJcIiAqbmdJZj1cIiFpc0V4dGVybmFsXCI+XG4gICAgPGEgY2xhc3M9XCJpcy1zaXplLTdcIiAqbmdJZj1cImxvZ3NVcmxcIiBbaHJlZl09XCJsb2dzVXJsXCIgdGFyZ2V0PVwiX2JsYW5rXCI+XG4gICAgICA8ZmEtaWNvbiBpY29uPVwiZXh0ZXJuYWwtbGluay1hbHRcIj48L2ZhLWljb24+XG4gICAgICA8c3BhbiBjbGFzcz1cInBsLTJcIj5PcGVuIEZ1bGwgTG9nczwvc3Bhbj5cbiAgICA8L2E+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJ0YWJsZS1jb250YWluZXIgZGF0YS10YWJsZS1jb250YWluZXIgbWItMVwiPlxuICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIGlzLW5hcnJvdyBkYXRhLXRhYmxlXCI+XG4gICAgICA8dGhlYWQ+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGggY2xhc3M9XCJ3aWR0aC1hdXRvXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmllbGRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2wgaXMtZXhwYW5kZWQgaGFzLWljb25zLXJpZ2h0XCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXQgc2VhcmNoLWlucHV0IGlzLXNtYWxsXCJcbiAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidGVybVwiIG5hbWU9XCJ0ZXJtXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRmlsdGVyIGJ5IG5hbWVcIlxuICAgICAgICAgICAgICAgICAgW2VkaXRhYmxlXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgIFtuZ2JUeXBlYWhlYWRdPVwic3VnZ2VzdFRlcm1cIlxuICAgICAgICAgICAgICAgICAgKHNlbGVjdEl0ZW0pPVwiZmlsdGVyUmVzdWx0cygpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJpY29uIGlzLXNtYWxsIGlzLXJpZ2h0XCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5pcy1oaWRkZW5dPVwiIXRlcm1cIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRlcm0gPSAnJzsgZmlsdGVyUmVzdWx0cygpO1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGZhLWljb24gaWNvbj1cInRpbWVzXCI+PC9mYS1pY29uPlxuICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L3RoPlxuICAgICAgICAgIDx0aD5PcmlnaW5hbDwvdGg+XG4gICAgICAgICAgPHRoPlJlY2FsY3VsYXRlZDwvdGg+XG4gICAgICAgICAgPHRoPkRpZmZlcmVuY2U8L3RoPlxuICAgICAgICAgIDx0aCAqbmdGb3I9XCJsZXQgYyBvZiBtZXRob2RNb2RlbHNDb3VudCB8IHRpbWVzOyBsZXQgaSA9IGluZGV4XCI+KHt7aSArIDF9fSk8L3RoPlxuICAgICAgICA8L3RyPlxuICAgICAgPC90aGVhZD5cbiAgICAgIDx0Ym9keT5cbiAgICAgICAgPHRyICpuZ0lmPVwibG9hZGluZ1wiPlxuICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiNVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhhcy10ZXh0LWNlbnRlciBweS0zXCI+XG4gICAgICAgICAgICAgIDxmYS1pY29uIGljb249XCJzcGlubmVyXCIgW3B1bHNlXT1cInRydWVcIiBzaXplPVwibGdcIj48L2ZhLWljb24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBibGFua05vZGUgb2YgYmxhbmtOb2RlczsgdHJhY2tCeTogdHJhY2tCeUJsYW5rTm9kZVwiPlxuICAgICAgICAgIDx0ciBbY2xhc3MuaGFzLXN1Yi1yb3dzXT1cImJsYW5rTm9kZS5jYW5PcGVuXCI+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJ3aWR0aC1hdXRvXCIgW2F0dHIudGl0bGVdPVwiYmxhbmtOb2RlLnRlcm0ubmFtZVwiPlxuICAgICAgICAgICAgICA8YSBjbGFzcz1cImlzLWlubGluZS1ibG9jayBpcy1hbGlnbi10b3AgcHItMiBvcGVuLW5vZGVcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJibGFua05vZGUuaXNPcGVuID0gIWJsYW5rTm9kZS5pc09wZW5cIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiYmxhbmtOb2RlLmNhbk9wZW5cIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGZhLWljb24gaWNvbj1cImFuZ2xlLWRvd25cIiBbY2xhc3MuaXMtaGlkZGVuXT1cIiFibGFua05vZGUuaXNPcGVuXCI+PC9mYS1pY29uPlxuICAgICAgICAgICAgICAgIDxmYS1pY29uIGljb249XCJhbmdsZS1yaWdodFwiIFtjbGFzcy5pcy1oaWRkZW5dPVwiYmxhbmtOb2RlLmlzT3BlblwiPjwvZmEtaWNvbj5cbiAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICA8aGUtbm9kZS1saW5rIGNsYXNzPVwiaXMtaW5saW5lLWJsb2NrXCIgW25vZGVdPVwiYmxhbmtOb2RlLnRlcm1cIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlzLW5vd3JhcCBoYXMtdGV4dC1lbGxpcHNpc1wiPnt7YmxhbmtOb2RlLnRlcm0ubmFtZX19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2hlLW5vZGUtbGluaz5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgIDxzcGFuPnt7YmxhbmtOb2RlLm9yaWdpbmFsVmFsdWUgfCBwcmVjaXNpb246MyB8IGRlZmF1bHQ6Jy0nfX08L3NwYW4+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFibGFua05vZGUuaXNPcmlnaW5hbCB8fCBibGFua05vZGUuaXNSZWNhbGN1bGF0ZWQ7IGVsc2Ugbm90VXBkYXRlZFwiPlxuICAgICAgICAgICAgICAgIHt7YmxhbmtOb2RlLnJlY2FsY3VsYXRlZFZhbHVlIHwgcHJlY2lzaW9uOjMgfCBkZWZhdWx0OictJ319XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJpcy1ub3dyYXBcIj5cbiAgICAgICAgICAgICAgPGhlLWJsYW5rLW5vZGUtdmFsdWUtZGVsdGEgKm5nSWY9XCJibGFua05vZGUub3JpZ2luYWwubGVuZ3RoICYmIGJsYW5rTm9kZS5pc1JlY2FsY3VsYXRlZDsgZWxzZSBub1ZhbHVlXCJcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwiYmxhbmtOb2RlLnJlY2FsY3VsYXRlZFZhbHVlXCJcbiAgICAgICAgICAgICAgICBbb3JpZ2luYWxWYWx1ZV09XCJibGFua05vZGUub3JpZ2luYWxWYWx1ZVwiXG4gICAgICAgICAgICAgID48L2hlLWJsYW5rLW5vZGUtdmFsdWUtZGVsdGE+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJsYW5rTm9kZU1vZGVsczsgY29udGV4dDoge2JsYW5rTm9kZTogYmxhbmtOb2RlfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvdHI+XG5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYmxhbmtOb2RlLmtleXM/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgPHRyXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBzdWJWYWx1ZSBvZiBibGFua05vZGUua2V5c1wiXG4gICAgICAgICAgICAgIFtjbGFzcy5pcy1oaWRkZW5dPVwiIWJsYW5rTm9kZS5pc09wZW5cIlxuICAgICAgICAgICAgICBbY2xhc3MuaGFzLXN1Yi1yb3dzXT1cImJsYW5rTm9kZS5zdWJWYWx1ZXM/Lmxlbmd0aFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cIndpZHRoLWF1dG8gaGFzLXRleHQtbGVmdFwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaXMtaW5saW5lLWJsb2NrIGlzLWFsaWduLXRvcCBwbC0zIHByLTEgZmllbGQtbm9kZVwiPkZpZWxkOjwvc3Bhbj5cblxuICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiaXMtaW5saW5lLWJsb2NrXCIgKm5nSWY9XCJibGFua05vZGUudHlwZVwiXG4gICAgICAgICAgICAgICAgICBbaHJlZl09XCJiYXNlVXJsICsgJy9zY2hlbWEvJyArIGJsYW5rTm9kZS50eXBlICsgJyMnICsgc3ViVmFsdWUua2V5XCIgdGFyZ2V0PVwiX2JsYW5rXCIgW3RpdGxlXT1cInN1YlZhbHVlLmtleVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpcy1ub3dyYXAgaGFzLXRleHQtZWxsaXBzaXNcIj57e3N1YlZhbHVlLmtleX19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlzLWlubGluZS1ibG9jayBpcy1hbGlnbi10b3BcIiAqbmdJZj1cIiFibGFua05vZGUudHlwZVwiPnt7c3ViVmFsdWUua2V5fX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInN1YlZhbHVlLm9yaWdpbmFsVmFsdWUgIT09IG51bGw7IGVsc2Ugbm9WYWx1ZVwiPnt7c3ViVmFsdWUub3JpZ2luYWxWYWx1ZSB8IHByZWNpc2lvbjozIHwgZGVmYXVsdDonLSd9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic3ViVmFsdWUucmVjYWxjdWxhdGVkVmFsdWUgIT09IG51bGw7IGVsc2Ugbm9WYWx1ZVwiPlxuICAgICAgICAgICAgICAgICAge3tzdWJWYWx1ZS5yZWNhbGN1bGF0ZWRWYWx1ZSB8IHByZWNpc2lvbjozIHwgZGVmYXVsdDonLSd9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgPHRkPi08L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJibGFuay1ub2RlLWluZGV4LWtleVwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJibGFua05vZGVNb2RlbDsgY29udGV4dDoge2JsYW5rTm9kZTpibGFua05vZGUsIG1ldGhvZElkOnN1YlZhbHVlLmtleSwgbG9nczpnZXRMb2dzKGJsYW5rTm9kZSwgc3ViVmFsdWUua2V5KX1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgPHRkICpuZ0lmPVwibWV0aG9kTW9kZWxzQ291bnQgPiAxXCIgW2F0dHIuY29sc3Bhbl09XCJtZXRob2RNb2RlbHNDb3VudCAtIDFcIj48L3RkPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDx0clxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IHN1YlZhbHVlIG9mIGJsYW5rTm9kZS5zdWJWYWx1ZXNcIlxuICAgICAgICAgICAgW2NsYXNzLmlzLWhpZGRlbl09XCIhYmxhbmtOb2RlLmlzT3BlblwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwid2lkdGgtYXV0byBoYXMtdGV4dC1sZWZ0XCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaXMtaW5saW5lLWJsb2NrIGlzLWFsaWduLXRvcCBwbC0zXCI+e3tzdWJWYWx1ZS5rZXkgfCBrZXlUb0xhYmVsfX08L3NwYW4+XG5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInN1YlZhbHVlLmlkXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpcy1pbmxpbmUtYmxvY2tcIiBjbGFzcz1cImlzLWlubGluZS1ibG9jayBpcy1hbGlnbi10b3AgcHItMVwiPjo8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJzdWJWYWx1ZS5rZXlcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaXMtaW5saW5lLWJsb2NrXCIgKm5nU3dpdGNoQ2FzZT1cIidiYWNrZ3JvdW5kRGF0YSdcIj57e3N1YlZhbHVlLmlkIHwga2V5VG9MYWJlbH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPGhlLW5vZGUtbGluayAqbmdTd2l0Y2hEZWZhdWx0IGNsYXNzPVwiaXMtYmxvY2sgcGwtNFwiIFtub2RlXT1cInsnQHR5cGUnOidUZXJtJywnQGlkJzpzdWJWYWx1ZS5pZH1cIiBbYXR0ci50aXRsZV09XCJzdWJWYWx1ZS5pZCB8IGtleVRvTGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpcy1ub3dyYXAgaGFzLXRleHQtZWxsaXBzaXNcIj57e3N1YlZhbHVlLmlkIHwga2V5VG9MYWJlbH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9oZS1ub2RlLWxpbms+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzdWJWYWx1ZS5vcmlnaW5hbFZhbHVlICE9PSBudWxsOyBlbHNlIG5vVmFsdWVcIj57e3N1YlZhbHVlLm9yaWdpbmFsVmFsdWUgfCBwcmVjaXNpb246MyB8IGRlZmF1bHQ6Jy0nfX08L3NwYW4+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInN1YlZhbHVlLnJlY2FsY3VsYXRlZFZhbHVlICE9PSBudWxsOyBlbHNlIG5vVmFsdWVcIj5cbiAgICAgICAgICAgICAgICB7e3N1YlZhbHVlLnJlY2FsY3VsYXRlZFZhbHVlIHwgcHJlY2lzaW9uOjMgfCBkZWZhdWx0OictJ319XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8dGQ+LTwvdGQ+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYmxhbmtOb2RlTW9kZWxzOyBjb250ZXh0OiB7YmxhbmtOb2RlOiBibGFua05vZGUsIHN1YlZhbHVlOiBzdWJWYWx1ZX1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvdGJvZHk+XG4gICAgPC90YWJsZT5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImlzLXNpemUtNyBpcy1pdGFsaWNcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sdW1ucyBpcy12YXJpYWJsZSBpcy0xIG15LTBcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW4gaXMtbmFycm93XCI+XG4gICAgICAgIDxwPlxuICAgICAgICAgIDxhIGNsYXNzPVwiaXMtaW5saW5lLWJsb2NrIHByLTJcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInNob3dMZWdlbmQgPSAhc2hvd0xlZ2VuZFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGZhLWljb24gaWNvbj1cImFuZ2xlLWRvd25cIiBbY2xhc3MuaXMtaGlkZGVuXT1cIiFzaG93TGVnZW5kXCI+PC9mYS1pY29uPlxuICAgICAgICAgICAgPGZhLWljb24gaWNvbj1cImFuZ2xlLXJpZ2h0XCIgW2NsYXNzLmlzLWhpZGRlbl09XCJzaG93TGVnZW5kXCI+PC9mYS1pY29uPlxuICAgICAgICAgIDwvYT5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImlzLWlubGluZS1ibG9ja1wiPkxlZ2VuZDo8L3NwYW4+XG4gICAgICAgIDwvcD5cbiAgICAgICAgPHVsIGNsYXNzPVwiY29udGVudCBwbC0yXCIgW2NsYXNzLmlzLWhpZGRlbl09XCIhc2hvd0xlZ2VuZFwiPlxuICAgICAgICAgIDxsaVxuICAgICAgICAgICAgY2xhc3M9XCJoYXMtdGV4dC17e2xvZ0NvbG9yW3N0YXR1cy52YWx1ZV19fVwiXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgc3RhdHVzIG9mIExvZ1N0YXR1cyB8IGtleXNcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxmYS1pY29uIFtpY29uXT1cImxvZ0ljb25bc3RhdHVzLnZhbHVlXVwiPjwvZmEtaWNvbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGwtMVwiPnt7c3RhdHVzLnZhbHVlfX08L3NwYW4+XG4gICAgICAgICAgPC9saT5cbiAgICAgICAgPC91bD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbHVtbiBoYXMtdGV4dC1yaWdodFwiICpuZ0lmPVwiZmlsdGVyZWRUeXBlXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImlzLWlubGluZS1ibG9jayBjaGVja2JveFwiPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cInNlbGVjdG9yXCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwib25seVdpdGhEYXRhXCJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwiZmlsdGVyUmVzdWx0cygpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJtbC0yXCI+U2hvdyBvbmx5IHJlY2FsY3VsYXRlZCB7e2ZpbHRlcmVkVHlwZSB8IHBsdXJhbGl6ZX19PC9zcGFuPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjYmxhbmtOb2RlTW9kZWxzIGxldC1ibGFua05vZGU9XCJibGFua05vZGVcIiBsZXQtc3ViVmFsdWU9XCJzdWJWYWx1ZVwiPlxuICA8dGQgY2xhc3M9XCJibGFuay1ub2RlLWluZGV4LXt7aX19XCIgKm5nRm9yPVwibGV0IGMgb2YgbWV0aG9kTW9kZWxzQ291bnQgfCB0aW1lczsgbGV0IGkgPSBpbmRleFwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ2YWxpZFN1YlZhbHVlKGJsYW5rTm9kZSwgaSwgc3ViVmFsdWUpOyBlbHNlIG5vVmFsdWVcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRNZXRob2RJZEF0KGJsYW5rTm9kZSwgaSwgc3ViVmFsdWUpOyBsZXQgbWV0aG9kSWQ7IGVsc2Ugbm9WYWx1ZVwiPlxuICAgICAgICA8bmctdGVtcGxhdGUgI21vZGVsU2VyaWU+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJsYW5rTm9kZU1vZGVsOyBjb250ZXh0OiB7YmxhbmtOb2RlOmJsYW5rTm9kZSwgbWV0aG9kSWQ6bWV0aG9kSWQsIHN1YlZhbHVlOnN1YlZhbHVlLCBsb2dzOmdldExvZ3MoYmxhbmtOb2RlLCBtZXRob2RJZCwgc3ViVmFsdWUpfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwibWV0aG9kSWQgfCBpc0FycmF5OyBlbHNlIG1vZGVsU2VyaWVcIj5cbiAgICAgICAgICA8cCAqbmdGb3I9XCJsZXQgdmFsdWUgb2YgbWV0aG9kSWRcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJibGFua05vZGVNb2RlbDsgY29udGV4dDoge2JsYW5rTm9kZTpibGFua05vZGUsIG1ldGhvZElkOnZhbHVlLCBzdWJWYWx1ZTpzdWJWYWx1ZSwgbG9nczpnZXRMb2dzKGJsYW5rTm9kZSwgbWV0aG9kSWQsIHN1YlZhbHVlKX1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L3A+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvdGQ+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2JsYW5rTm9kZU1vZGVsIGxldC1ibGFua05vZGU9XCJibGFua05vZGVcIiBsZXQtbWV0aG9kSWQ9XCJtZXRob2RJZFwiIGxldC1zdWJWYWx1ZT1cInN1YlZhbHVlXCIgbGV0LWxvZ3M9XCJsb2dzXCI+XG4gIDxzcGFuXG4gICAgW2NsYXNzLnRyaWdnZXItcG9wb3Zlcl09XCJoYXNMb2dEZXRhaWxzKGJsYW5rTm9kZSwgbWV0aG9kSWQsIHN1YlZhbHVlKVwiXG4gICAgW25nYlBvcG92ZXJdPVwibG9nRGV0YWlsc1wiIFthdXRvQ2xvc2VdPVwiJ291dHNpZGUnXCJcbiAgICB0cmlnZ2Vycz1cIm1hbnVhbFwiICNwPVwibmdiUG9wb3ZlclwiIHBsYWNlbWVudD1cImxlZnRcIiBjb250YWluZXI9XCJib2R5XCJcbiAgICAoY2xpY2spPVwiaGFzTG9nRGV0YWlscyhibGFua05vZGUsIG1ldGhvZElkLCBzdWJWYWx1ZSkgPyB0b2dnbGVQb3BvdmVyKHAsIHsgbG9ncyB9KSA6IG51bGxcIlxuICA+XG4gICAgPHNwYW4gY2xhc3M9XCJpcy1jYXBpdGFsaXplZFwiPnt7bWV0aG9kTmFtZShibGFua05vZGUsIG1ldGhvZElkLCBzdWJWYWx1ZSl9fTwvc3Bhbj5cbiAgICA8c3BhbiBjbGFzcz1cInBsLTFcIiAqbmdJZj1cImhhc0xvZyhsb2dzKSAmJiBsb2dzPy5tZXRob2RUaWVyXCI+W3t7bG9ncy5tZXRob2RUaWVyfX1dPC9zcGFuPlxuICAgIDxzcGFuIGNsYXNzPVwicGwtMSBoYXMtdGV4dC17e2xvZ0NvbG9yW2xvZ1N0YXR1cyhibGFua05vZGUsIG1ldGhvZElkLCBzdWJWYWx1ZSldfX1cIj5cbiAgICAgIDxmYS1pY29uIFtpY29uXT1cImxvZ0ljb25bbG9nU3RhdHVzKGJsYW5rTm9kZSwgbWV0aG9kSWQsIHN1YlZhbHVlKV1cIj48L2ZhLWljb24+XG4gICAgPC9zcGFuPlxuICA8L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI25vVmFsdWU+LTwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbm90VXBkYXRlZD5cbiAgPHNwYW4+bm90IHVwZGF0ZWQ8L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2xvZ0RldGFpbHMgbGV0LWxvZ3M9XCJsb2dzXCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJsb2dzLnJlcXVpcmVtZW50c1wiPlxuICAgIDxwIGNsYXNzPVwiaXMtcmVxdWlyZW1lbnRcIiAqbmdGb3I9XCJsZXQga2V5IG9mIHJlcXVpcmVtZW50S2V5cyhsb2dzLnJlcXVpcmVtZW50cylcIiBjbGFzcz1cImhhcy10ZXh0LXt7cmVxdWlyZW1lbnRDb2xvcihsb2dzLnJlcXVpcmVtZW50c1trZXldKX19XCI+XG4gICAgICB7e2tleX19OiB7e2xvZ3MucmVxdWlyZW1lbnRzW2tleV19fVxuICAgIDwvcD5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJsb2dzLmxvZ3NcIj5cbiAgICA8cCBjbGFzcz1cImlzLWxvZ1wiICpuZ0Zvcj1cImxldCBrZXkgb2YgbG9ncy5sb2dzIHwga2V5c1wiPlxuICAgICAge3trZXkua2V5fX06IHt7a2V5LnZhbHVlfX1cbiAgICA8L3A+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwibG9ncy5taXNzaW5nTG9va3Vwcz8ubGVuZ3RoXCI+XG4gICAgPHAgY2xhc3M9XCJtdC0yXCI+TWlzc2luZyBsb29rdXBzOjwvcD5cblxuICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1jb250YWluZXIgZGF0YS10YWJsZS1jb250YWluZXJcIj5cbiAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIGlzLWZ1bGx3aWR0aCBtYi0wXCI+XG4gICAgICAgIDx0aGVhZCBjbGFzcz1cImhhcy1iYWNrZ3JvdW5kLWJsYWNrXCI+XG4gICAgICAgICAgPHRyPlxuICAgICAgICAgICAgPHRoPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImhhcy10ZXh0LXdoaXRlXCI+RmlsZW5hbWU8L3NwYW4+XG4gICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgPHRoPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImhhcy10ZXh0LXdoaXRlXCI+Q29sdW1uIFRpdGxlPC9zcGFuPlxuICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgIDx0aD5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJoYXMtdGV4dC13aGl0ZVwiPlJvdyAodGVybS5pZCk8L3NwYW4+XG4gICAgICAgICAgICA8L3RoPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgIDwvdGhlYWQ+XG4gICAgICAgIDx0Ym9keSBjbGFzcz1cImhhcy1iYWNrZ3JvdW5kLWJsYWNrIGhhcy10ZXh0LXdoaXRlXCI+XG4gICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBkYXRhIG9mIGxvZ3MubWlzc2luZ0xvb2t1cHNcIj5cbiAgICAgICAgICAgIDx0ZD57e2RhdGEuZmlsZW5hbWV9fTwvdGQ+XG4gICAgICAgICAgICA8dGQ+e3tkYXRhLmNvbHVtbn19PC90ZD5cbiAgICAgICAgICAgIDx0ZD57e2RhdGEudGVybUlkfX08L3RkPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgIDwvdGJvZHk+XG4gICAgICA8L3RhYmxlPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
362
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1sb2dzLW1vZGVscy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbm9kZS9ub2RlLWxvZ3MtbW9kZWxzL25vZGUtbG9ncy1tb2RlbHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vc3JjL25vZGUvbm9kZS1sb2dzLW1vZGVscy9ub2RlLWxvZ3MtbW9kZWxzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSwrQkFBK0I7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFjLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN4QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RyxPQUFPLEVBQ0ssa0JBQWtCLEVBQzVCLFFBQVEsRUFBRSxZQUFZLEVBQ3ZCLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFLOUQsT0FBTyxFQUMyRCxnQkFBZ0IsRUFDakYsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXJFLE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVR6RCxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDbEMsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFVMUMsTUFBTSxrQkFBa0Is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d0JBQ25CLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQzt3QkFDekIsU0FBUyxDQUFDLFdBQVcsQ0FDeEIsQ0FDSixDQUFDLENBQUM7Z0JBQ0gsU0FBUyxDQUFDLGFBQWEsQ0FDMUIsQ0FBQztJQUNOLENBQUM7SUFFTSxlQUFlLENBQUMsWUFBb0M7UUFDekQsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzFHLENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxLQUFVO1FBQ2hDLE9BQU8sQ0FBQyxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0lBQ3RGLENBQUM7O3FIQXBSVSx1QkFBdUI7eUdBQXZCLHVCQUF1Qiw2UUNsTXBDLHd6V0ErUEE7NEZEN0RhLHVCQUF1QjtrQkFMbkMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUscUJBQXFCO29CQUMvQixXQUFXLEVBQUUsbUNBQW1DO29CQUNoRCxTQUFTLEVBQUUsQ0FBQyxtQ0FBbUMsQ0FBQztpQkFDakQ7b0lBUVMsUUFBUTtzQkFEZixLQUFLO2dCQU1FLE9BQU87c0JBRGQsS0FBSztnQkFHQyxPQUFPO3NCQURiLEtBQUs7Z0JBR0MsY0FBYztzQkFEcEIsS0FBSztnQkFHRSxrQkFBa0I7c0JBRHpCLEtBQUs7Z0JBR0UsS0FBSztzQkFEWixLQUFLO2dCQUdFLElBQUk7c0JBRFgsS0FBSztnQkFHQyxZQUFZO3NCQURsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgY29tcGxleGl0eSAqL1xuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBmcm9tIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdCwgZmlsdGVyLCByZWR1Y2UsIHRvQXJyYXksIG1hcCwgZGlzdGluY3RVbnRpbENoYW5nZWQsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIEVtaXNzaW9uLCBFbWlzc2lvbk1ldGhvZFRpZXIsIElUZXJtSlNPTkxELCBQcm9kdWN0LCBJbnB1dCBhcyBIZXN0aWFJbnB1dCxcbiAgTm9kZVR5cGUsIFRlcm1UZXJtVHlwZSwgUHJvcGVydHlcbn0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9zY2hlbWEnO1xuaW1wb3J0IHsgdW5pcXVlLCBrZXlUb0xhYmVsIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC91dGlscyc7XG5pbXBvcnQgeyBwcm9wZXJ0eVZhbHVlIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC91dGlscy9kaXN0L3Rlcm0nO1xuY29uc3QgZ2V0ID0gcmVxdWlyZSgnbG9kYXNoLmdldCcpO1xuY29uc3Qgb3JkZXJCeSA9IHJlcXVpcmUoJ2xvZGFzaC5vcmRlcmJ5Jyk7XG5cbmltcG9ydCB7IElOb2RlTG9ncywgSU5vZGVUZXJtTG9ncywgSU5vZGVUZXJtTG9nIH0gZnJvbSAnLi4vbm9kZS5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIEhlRW5naW5lU2VydmljZSwgSU9yY2hlc3RyYXRvckNvbmZpZywgSU9yY2hlc3RyYXRvck1vZGVsQ29uZmlnLCBmaW5kQ29uZmlnTW9kZWxzXG59IGZyb20gJy4uLy4uL2VuZ2luZS9lbmdpbmUuc2VydmljZSc7XG5pbXBvcnQgeyBtYXRjaFRlcm1UeXBlLCBtYXRjaFR5cGUgfSBmcm9tICcuLi8uLi9zZWFyY2gvc2VhcmNoLm1vZGVsJztcbmltcG9ydCB7IEhlU2VhcmNoU2VydmljZSB9IGZyb20gJy4uLy4uL3NlYXJjaC9zZWFyY2guc2VydmljZSc7XG5pbXBvcnQgeyBiYXNlVXJsLCBpc0V4dGVybmFsIH0gZnJvbSAnLi4vLi4vY29tbW9uL3V0aWxzJztcblxuY29uc3Qgbm9kZVR5cGVzTG93ZXJDYXNlID0gT2JqZWN0LnZhbHVlcyhOb2RlVHlwZSkubWFwKHYgPT4gdi50b0xvd2VyQ2FzZSgpKTtcblxudHlwZSBibGFua05vZGUgPSBFbWlzc2lvbiB8IFByb2R1Y3QgfCBIZXN0aWFJbnB1dCB8IFByb3BlcnR5O1xuXG5pbnRlcmZhY2UgSUJsYW5rTm9kZUxvZ1N1YlZhbHVlIHtcbiAga2V5OiBzdHJpbmc7XG4gIG9yaWdpbmFsVmFsdWU6IG51bWJlciB8IHN0cmluZyB8IGJvb2xlYW47XG4gIHJlY2FsY3VsYXRlZFZhbHVlOiBudW1iZXIgfCBzdHJpbmcgfCBib29sZWFuO1xuICBpZD86IGFueTtcbiAgY29uZmlnTW9kZWxzPzogc3RyaW5nW107XG59XG5cbmludGVyZmFjZSBJQmxhbmtOb2RlTG9nIHtcbiAgaXNPcGVuOiBib29sZWFuO1xuICBjYW5PcGVuOiBib29sZWFuO1xuICB0ZXJtOiBJVGVybUpTT05MRDtcbiAgdGVybUlkOiBzdHJpbmc7XG4gIHR5cGU/OiBzdHJpbmc7XG4gIGNvbmZpZ01vZGVsczogc3RyaW5nW107XG4gIG9yaWdpbmFsOiBibGFua05vZGVbXTtcbiAgb3JpZ2luYWxWYWx1ZTogbnVtYmVyO1xuICByZWNhbGN1bGF0ZWQ6IGJsYW5rTm9kZVtdO1xuICByZWNhbGN1bGF0ZWRWYWx1ZTogbnVtYmVyO1xuICBpc09yaWdpbmFsOiBib29sZWFuO1xuICBpc1JlY2FsY3VsYXRlZDogYm9vbGVhbjtcbiAgaGFzRGF0YTogYm9vbGVhbjtcbiAgbG9ncz86IElOb2RlVGVybUxvZ3M7XG4gIGtleXM6IElCbGFua05vZGVMb2dTdWJWYWx1ZVtdO1xuICBzdWJWYWx1ZXM6IElCbGFua05vZGVMb2dTdWJWYWx1ZVtdO1xufVxuXG5jb25zdCByZWR1Y2VWYWx1ZXMgPSAodmFsdWVzOiBhbnlbXSwgdGVybUlkOiBzdHJpbmcpID0+IHtcbiAgY29uc3QgcHJvcGVydHlWYWx1ZXMgPSB2YWx1ZXNcbiAgICAubWFwKCh7IHZhbHVlIH0pID0+IHByb3BlcnR5VmFsdWUodmFsdWUsIHRlcm1JZCkpXG4gICAgLy8gcHJvcGVydHlWYWx1ZSBtYXkgcmV0dXJuIG51bGwgaWYgdGhlIHZhbHVlIGlzIG51bGwgb3IgdW5kZWZpbmVkLCB0aGVyZWZvcmUgcmVtb3ZlIHRoZW0gZnJvbSB0b3RhbFxuICAgIC5maWx0ZXIodiA9PiB2ICE9PSBudWxsKTtcbiAgcmV0dXJuIHByb3BlcnR5VmFsdWVzLmxlbmd0aCA/IHByb3BlcnR5VmFsdWVzLnJlZHVjZSgocCwgdikgPT4gcCArIHYsIDApIDogdW5kZWZpbmVkO1xufTtcblxuY29uc3QgaXNSZWNhbGN1bGF0ZWQgPSAodmFsdWVzOiBibGFua05vZGVbXSwga2V5ID0gJ3ZhbHVlJykgPT4gdmFsdWVzLnNvbWUodiA9PiAoW1xuICAuLi4odi5hZGRlZCB8fCBbXSksXG4gIC4uLih2LnVwZGF0ZWQgfHwgW10pXG5dKS5pbmNsdWRlcyhrZXkpKTtcblxuY29uc3QgYmxhbmtOb2RlVmFsdWVCeUtleToge1xuICBba2V5OiBzdHJpbmddOiAodmFsdWVzOiBibGFua05vZGVbXSwga2V5Pzogc3RyaW5nLCBpZD86IHN0cmluZykgPT4gbnVtYmVyIHwgc3RyaW5nIHwgYm9vbGVhbjtcbn0gPSB7XG4gIHByb3BlcnR5OiAodmFsdWVzOiAoRW1pc3Npb24gfCBQcm9kdWN0IHwgSGVzdGlhSW5wdXQpW10sIF9rLCBpZCkgPT4gISFpZCAmJiB2YWx1ZXM/Lmxlbmd0aFxuICAgID8gKHZhbHVlc1swXS5wcm9wZXJ0aWVzIHx8IFtdKS5maW5kKHAgPT4gcC50ZXJtWydAaWQnXSA9PT0gaWQpPy52YWx1ZSB8fCAnJ1xuICAgIDogJycsXG4gIGlucHV0OiAodmFsdWVzOiBFbWlzc2lvbltdLCBfaywgaWQpID0+ICEhaWQgJiYgdmFsdWVzPy5sZW5ndGhcbiAgICA/IHByb3BlcnR5VmFsdWUodmFsdWVzLmZpbmQoKHsgaW5wdXRzIH0pID0+IChpbnB1dHMgfHwgW10pLnNvbWUoaW5wdXQgPT4gaW5wdXRbJ0BpZCddID09PSBpZCkpPy52YWx1ZSwgaWQpXG4gICAgOiAnJyxcbiAgdHJhbnNmb3JtYXRpb246ICgpID0+IG51bGwsIC8vIFRPRE86IGhhbmRsZSBUcmFuc2Zvcm1hdGlvblxuICBkZWZhdWx0OiAoYmxhbmtOb2Rlcywga2V5KSA9PiB7XG4gICAgY29uc3QgdmFsdWUgPSBibGFua05vZGVzPy5sZW5ndGggPyBibGFua05vZGVzWzBdW2tleV0gOiBudWxsO1xuICAgIHJldHVybiBbJ3N0cmluZycsICdudW1iZXInLCAnYm9vbGVhbicsICd1bmRlZmluZWQnXS5pbmNsdWRlcyh0eXBlb2YgdmFsdWUpID8gKHZhbHVlIHx8ICcnKSA6IG51bGw7XG4gIH1cbn07XG5cbmNvbnN0IGJsYW5rTm9kZVZhbHVlID0gKGJsYW5rTm9kZXM6IGJsYW5rTm9kZVtdLCBrZXk6IHN0cmluZywgaWQ/OiBzdHJpbmcpID0+XG4gIGJsYW5rTm9kZVZhbHVlQnlLZXlba2V5IGluIGJsYW5rTm9kZVZhbHVlQnlLZXkgPyBrZXkgOiAnZGVmYXVsdCddKGJsYW5rTm9kZXMsIGtleSwgaWQpO1xuXG5jb25zdCBsb2dTdWJWYWx1ZSA9IChsb2dzOiBJTm9kZVRlcm1Mb2dzLCBrZXk6IHN0cmluZywgcHJvcDogc3RyaW5nKSA9PlxuICBsb2dzW2tleV1bcHJvcF0gPyAoXG4gICAgQXJyYXkuaXNBcnJheShsb2dzW2tleV1bcHJvcF0pID9cbiAgICAgIChsb2dzW2tleV1bcHJvcF0gYXMgc3RyaW5nW10pLm1hcChpZCA9PiAoeyBrZXk6IHByb3AsIGlkIH0gYXMgSUJsYW5rTm9kZUxvZ1N1YlZhbHVlKSkgOlxuICAgICAgeyBrZXk6IHByb3AsIGlkOiBsb2dzW2tleV1bcHJvcF0gfSBhcyBJQmxhbmtOb2RlTG9nU3ViVmFsdWVcbiAgKSA6IHVuZGVmaW5lZDtcblxuY29uc3QgaXNCYWNrZ3JvdW5kTm9JbnB1dCA9IChsb2dzOiBJTm9kZVRlcm1Mb2dzLCBrZXk6IHN0cmluZykgPT5cbiAgbG9nc1trZXldLm1ldGhvZFRpZXIgPT09IEVtaXNzaW9uTWV0aG9kVGllci5iYWNrZ3JvdW5kICYmICFsb2dzW2tleV0uaW5wdXQ7XG5cbmNvbnN0IGxvZ1N1YlZhbHVlcyA9IChsb2dzOiBJTm9kZVRlcm1Mb2dzLCBvcmlnaW5hbDogYmxhbmtOb2RlW10sIHJlY2FsY3VsYXRlZDogYmxhbmtOb2RlW10pOiBJQmxhbmtOb2RlTG9nU3ViVmFsdWVbXSA9PlxuICBPYmplY3Qua2V5cyhsb2dzKVxuICAgIC5mbGF0TWFwKGtleSA9PlxuICAgICAgW1xuICAgICAgICBsb2dTdWJWYWx1ZShsb2dzLCBrZXksICdpbnB1dCcpLFxuICAgICAgICBsb2dTdWJWYWx1ZShsb2dzLCBrZXksICdwcm9wZXJ0eScpLFxuICAgICAgICBsb2dTdWJWYWx1ZShsb2dzLCBrZXksICd0cmFuc2Zvcm1hdGlvbicpXG4gICAgICBdXG4gICAgICAgIC5mbGF0KClcbiAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAubWFwKHYgPT4gKHtcbiAgICAgICAgICAuLi52LFxuICAgICAgICAgIGNvbmZpZ01vZGVsczogW2tleV0sXG4gICAgICAgICAgb3JpZ2luYWxWYWx1ZTogYmxhbmtOb2RlVmFsdWUob3JpZ2luYWwsIHYua2V5LCB2LmlkKSxcbiAgICAgICAgICByZWNhbGN1bGF0ZWRWYWx1ZTogYmxhbmtOb2RlVmFsdWUocmVjYWxjdWxhdGVkLCB2LmtleSwgdi5pZCksXG4gICAgICAgICAgaXNSZWNhbGN1bGF0ZWQ6IGlzUmVjYWxjdWxhdGVkKHJlY2FsY3VsYXRlZCwgdi5rZXkpXG4gICAgICAgIH0pKVxuICAgICk7XG5cbmNvbnN0IGxvZ0tleXMgPSAobG9nczogSU5vZGVUZXJtTG9ncywgb3JpZ2luYWw6IGJsYW5rTm9kZVtdLCByZWNhbGN1bGF0ZWQ6IGJsYW5rTm9kZVtdKTogSUJsYW5rTm9kZUxvZ1N1YlZhbHVlW10gPT5cbiAgT2JqZWN0LmtleXMobG9ncylcbiAgICAuZmlsdGVyKGtleSA9PiBsb2dzW2tleV0uaXNLZXkpXG4gICAgLm1hcChrZXkgPT4gKHtcbiAgICAgIGtleSxcbiAgICAgIG9yaWdpbmFsVmFsdWU6IGJsYW5rTm9kZVZhbHVlKG9yaWdpbmFsLCBrZXkpLFxuICAgICAgcmVjYWxjdWxhdGVkVmFsdWU6IGJsYW5rTm9kZVZhbHVlKHJlY2FsY3VsYXRlZCwga2V5KSxcbiAgICAgIGlzUmVjYWxjdWxhdGVkOiBpc1JlY2FsY3VsYXRlZChyZWNhbGN1bGF0ZWQsIGtleSlcbiAgICB9KSk7XG5cbmNvbnN0IG1vZGVsQ29uZmlnT3JkZXIgPSAoXG4gIG1vZGVsczogKElPcmNoZXN0cmF0b3JNb2RlbENvbmZpZyB8IElPcmNoZXN0cmF0b3JNb2RlbENvbmZpZ1tdKVtdLCB0ZXJtSWQ6IHN0cmluZywgbW9kZWxLZXk6IHN0cmluZywgbW9kZWw6IHN0cmluZ1xuKTogc3RyaW5nID0+IHtcbiAgY29uc3QgaW5kZXhlcyA9IG1vZGVscy5tYXAoKG0sIGluZGV4KSA9PiB7XG4gICAgY29uc3QgYXJyYXlJbmRleCA9IEFycmF5LmlzQXJyYXkobSkgPyBtb2RlbENvbmZpZ09yZGVyKG0sIHRlcm1JZCwgbW9kZWxLZXksIG1vZGVsKSA6ICcnO1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KG0pXG4gICAgICA/IGFycmF5SW5kZXhcbiAgICAgICAgPyBbaW5kZXgsIGFycmF5SW5kZXhdLmpvaW4oJy4nKVxuICAgICAgICA6ICcnXG4gICAgICA6IFt0ZXJtSWQgPT09IG0udmFsdWUsIG1vZGVsS2V5ID09PSBtLmtleSwgbW9kZWwgPT09IG0ubW9kZWxdLmV2ZXJ5KEJvb2xlYW4pXG4gICAgICAgID8gYCR7aW5kZXh9YFxuICAgICAgICA6ICcnO1xuICB9KS5maWx0ZXIoQm9vbGVhbik7XG4gIHJldHVybiBpbmRleGVzLmxlbmd0aCA/IGluZGV4ZXNbMF0gOiAnJztcbn07XG5cbi8qKlxuICogR3JvdXAgbW9kZWxzIHJ1bm5pbmcgaW4gcGFyYWxsZWwgdW5kZXIgdGhlIHNhbWUgYXJyYXksIGFzIHRoZXkgc2hvdWxkIGFwcGVhciB2ZXJ0aWNhbGx5LlxuICpcbiAqIEBwYXJhbSBjb25maWcgVGhlIGNvbmZpZ3VyYXRpb24uXG4gKiBAcGFyYW0gbW9kZWxzIFRoZSBsaXN0IG9mIG1vZGVsc1xuICovXG5jb25zdCBncm91cFBhcmFsbGVsTW9kZWxzID0gKGNvbmZpZzogSU9yY2hlc3RyYXRvckNvbmZpZywgdGVybUlkOiBzdHJpbmcsIG1vZGVsS2V5OiBzdHJpbmcsIG1vZGVsczogc3RyaW5nW10pID0+IHtcbiAgY29uc3QgbW9kZWxzV2l0aE9yZGVyID0gbW9kZWxzLm1hcChtb2RlbCA9PiAoe1xuICAgIG1vZGVsLFxuICAgIG9yZGVyOiBtb2RlbENvbmZpZ09yZGVyKGNvbmZpZy5tb2RlbHMsIHRlcm1JZCwgbW9kZWxLZXksIG1vZGVsKVxuICB9KSk7XG4gIHJldHVybiBtb2RlbHNXaXRoT3JkZXJcbiAgICAucmVkdWNlKChwcmV2LCB7IG1vZGVsLCBvcmRlciB9KSA9PiB7XG4gICAgICBjb25zdCBpc0FycmF5ID0gb3JkZXIuaW5jbHVkZXMoJy4nKTtcbiAgICAgIGNvbnN0IGFycmF5SW5kZXggPSBpc0FycmF5ID8gb3JkZXIuc3BsaXQoJy4nKVswXSA6IHByZXYubGVuZ3RoO1xuICAgICAgcHJldlthcnJheUluZGV4XSA9IGlzQXJyYXkgPyBbLi4uKHByZXZbYXJyYXlJbmRleF0gfHwgW10pLCBtb2RlbF0gOiBtb2RlbDtcbiAgICAgIHJldHVybiBwcmV2O1xuICAgIH0sIFtdIGFzIHN0cmluZ1tdKVxuICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAubWFwKHYgPT4gdi5sZW5ndGggPT09IDEgPyB2WzBdIDogdik7XG59O1xuXG5lbnVtIExvZ1N0YXR1cyB7XG4gIHN1Y2Nlc3MgPSAnc3VjY2Vzc2Z1bCcsXG4gIGVycm9yID0gJ2ZhaWxlZCcsXG4gIHNraXBIaWVyYXJjaHkgPSAnbm90IHJ1biAobW9kZWwgaGlnaGVyIHVwIGhpZXJhcmNoeSBydW4gaW5zdGVhZCknLFxuICBkYXRhUHJvdmlkZWQgPSAnbm90IHJ1biAodXNlciBwcm92aWRlZCBkYXRhIHJldGFpbmVkKScsXG4gIG5vdFJlcXVpcmVkID0gJ25vdCBydW4gKG5vdCByZXF1aXJlZCB0byBydW4pJ1xufVxuXG5jb25zdCBsb2dJY29uOiB7XG4gIFtzdGF0dXMgaW4gTG9nU3RhdHVzXTogc3RyaW5nIHwgc3RyaW5nW107XG59ID0ge1xuICBbTG9nU3RhdHVzLnN1Y2Nlc3NdOiAnY2hlY2snLFxuICBbTG9nU3RhdHVzLmVycm9yXTogJ3RpbWVzJyxcbiAgW0xvZ1N0YXR1cy5za2lwSGllcmFyY2h5XTogWydmYXInLCAnY2lyY2xlJ10sXG4gIFtMb2dTdGF0dXMuZGF0YVByb3ZpZGVkXTogJ2NpcmNsZScsXG4gIFtMb2dTdGF0dXMubm90UmVxdWlyZWRdOiAnbWludXMtY2lyY2xlJ1xufTtcblxuY29uc3QgbG9nQ29sb3I6IHtcbiAgW3N0YXR1cyBpbiBMb2dTdGF0dXNdOiBzdHJpbmc7XG59ID0ge1xuICBbTG9nU3RhdHVzLnN1Y2Nlc3NdOiAnc3VjY2VzcycsXG4gIFtMb2dTdGF0dXMuZXJyb3JdOiAnZGFuZ2VyJyxcbiAgW0xvZ1N0YXR1cy5za2lwSGllcmFyY2h5XTogJ2RhcmsnLFxuICBbTG9nU3RhdHVzLmRhdGFQcm92aWRlZF06ICdkYXJrJyxcbiAgW0xvZ1N0YXR1cy5ub3RSZXF1aXJlZF06ICdncmV5J1xufTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaGUtbm9kZS1sb2dzLW1vZGVscycsXG4gIHRlbXBsYXRlVXJsOiAnLi9ub2RlLWxvZ3MtbW9kZWxzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbm9kZS1sb2dzLW1vZGVscy5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIE5vZGVMb2dzTW9kZWxzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHJpdmF0ZSBjb25maWc/OiBJT3JjaGVzdHJhdG9yQ29uZmlnO1xuICBwcml2YXRlIG1vZGVsczogSVRlcm1KU09OTERbXSA9IFtdO1xuICBwcml2YXRlIGFsbFRlcm1zOiBJVGVybUpTT05MRFtdID0gW107XG4gIHByaXZhdGUgYWxsQmxhbmtOb2RlczogSUJsYW5rTm9kZUxvZ1tdID0gW107XG5cbiAgQElucHV0KClcbiAgcHJpdmF0ZSBub2RlVHlwZT86IE5vZGVUeXBlO1xuICAvKipcbiAgICogUmVzdHJpY3QgbW9kZWxzIGJ5IGtleS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHByaXZhdGUgbm9kZUtleT86IHN0cmluZztcbiAgQElucHV0KClcbiAgcHVibGljIGxvZ3NVcmw/OiBzdHJpbmc7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBvcmlnaW5hbFZhbHVlczogYmxhbmtOb2RlW10gPSBbXTtcbiAgQElucHV0KClcbiAgcHJpdmF0ZSByZWNhbGN1bGF0ZWRWYWx1ZXM6IGJsYW5rTm9kZVtdID0gW107XG4gIEBJbnB1dCgpXG4gIHByaXZhdGUgdGVybXM6IElUZXJtSlNPTkxEW10gPSBbXTtcbiAgQElucHV0KClcbiAgcHJpdmF0ZSBsb2dzPzogSU5vZGVMb2dzO1xuICBASW5wdXQoKVxuICBwdWJsaWMgZmlsdGVyZWRUeXBlPzogc3RyaW5nO1xuXG4gIHB1YmxpYyBiYXNlVXJsID0gYmFzZVVybCgpO1xuICBwdWJsaWMgaXNFeHRlcm5hbCA9IGlzRXh0ZXJuYWwoKTtcbiAgcHVibGljIGxvYWRpbmcgPSB0cnVlO1xuICBwdWJsaWMgYmxhbmtOb2RlczogSUJsYW5rTm9kZUxvZ1tdID0gW107XG4gIHB1YmxpYyBtZXRob2RNb2RlbHNDb3VudCA9IDA7XG4gIHB1YmxpYyByb3dzQ291bnQgPSAwO1xuICBwdWJsaWMgbWV0aG9kc0J5SWQ/OiBhbnk7XG4gIHB1YmxpYyBvbmx5V2l0aERhdGEgPSB0cnVlO1xuXG4gIHB1YmxpYyBzaG93TGVnZW5kID0gdHJ1ZTtcbiAgcHVibGljIExvZ1N0YXR1cyA9IExvZ1N0YXR1cztcbiAgcHVibGljIGxvZ0ljb24gPSBsb2dJY29uO1xuICBwdWJsaWMgbG9nQ29sb3IgPSBsb2dDb2xvcjtcblxuICBwdWJsaWMgdGVybT86IHN0cmluZztcbiAgcHVibGljIHN1Z2dlc3RUZXJtID0gKHRleHQkOiBPYnNlcnZhYmxlPHN0cmluZz4pID0+XG4gICAgdGV4dCQucGlwZShcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICBzd2l0Y2hNYXAodiA9PiB0aGlzLnN1Z2dlc3RCeVRlcm0odikpLFxuICAgICk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBzZWFyY2hTZXJ2aWNlOiBIZVNlYXJjaFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBoZXN0aWFFbmdpbmVTZXJ2aWNlOiBIZUVuZ2luZVNlcnZpY2VcbiAgKSB7IH1cblxuICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmNvbmZpZyA9IGF3YWl0IHRoaXMuaGVzdGlhRW5naW5lU2VydmljZS5vY2hlc3RyYXRvckNvbmZpZyh0aGlzLm5vZGVUeXBlISk7XG5cbiAgICBjb25zdCB7IHJlc3VsdHM6IG1vZGVscyB9ID0gYXdhaXQgdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaDxJVGVybUpTT05MRCwgTm9kZVR5cGUuVGVybT4oe1xuICAgICAgZmllbGRzOiBbJ0B0eXBlJywgJ0BpZCcsICduYW1lJ10sXG4gICAgICBsaW1pdDogMTAwMCxcbiAgICAgIHF1ZXJ5OiB7XG4gICAgICAgIGJvb2w6IHtcbiAgICAgICAgICBtdXN0OiBbXG4gICAgICAgICAgICBtYXRjaFR5cGUoTm9kZVR5cGUuVGVybSksXG4gICAgICAgICAgICBtYXRjaFRlcm1UeXBlKFRlcm1UZXJtVHlwZS5tb2RlbClcbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLm1vZGVscyA9IG1vZGVscztcblxuICAgIHRoaXMubWV0aG9kc0J5SWQgPSBhd2FpdCBmcm9tKHRoaXMubW9kZWxzKS5waXBlKFxuICAgICAgZmlsdGVyKHYgPT4gISF2KSxcbiAgICAgIGRpc3RpbmN0KHYgPT4gdlsnQGlkJ10pLFxuICAgICAgcmVkdWNlKChwcmV2LCBjdXJyKSA9PiAoeyAuLi5wcmV2LCBbY3VyclsnQGlkJ11dOiBjdXJyIH0pLCB7fSlcbiAgICApLnRvUHJvbWlzZSgpO1xuXG4gICAgLy8gZnJvbSBgbW9kZWwtbGlua3MuanNvbmAgZmlsZVxuICAgIGNvbnN0IGFsbE1vZGVscyA9IGF3YWl0IHRoaXMuaGVzdGlhRW5naW5lU2VydmljZS5tb2RlbHMoKTtcblxuICAgIGNvbnN0IG9yaWdpbmFsVmFsdWVzID0gKHRoaXMub3JpZ2luYWxWYWx1ZXMgfHwgW10pLmZpbHRlcih2YWx1ZSA9PiAhKHZhbHVlIGFzIGFueSkuZGVsZXRlZCk7XG4gICAgY29uc3QgcmVjYWxjdWxhdGVkVmFsdWVzID0gKHRoaXMucmVjYWxjdWxhdGVkVmFsdWVzIHx8IFtdKS5maWx0ZXIodmFsdWUgPT4gISh2YWx1ZSBhcyBhbnkpLmRlbGV0ZWQpO1xuICAgIGNvbnN0IHR5cGUgPSBvcmlnaW5hbFZhbHVlcy5sZW5ndGggP1xuICAgICAgb3JpZ2luYWxWYWx1ZXNbMF1bJ0B0eXBlJ10gfHwgb3JpZ2luYWxWYWx1ZXNbMF0udHlwZSA6XG4gICAgICByZWNhbGN1bGF0ZWRWYWx1ZXMubGVuZ3RoID9cbiAgICAgICAgcmVjYWxjdWxhdGVkVmFsdWVzWzBdWydAdHlwZSddIHx8IHJlY2FsY3VsYXRlZFZhbHVlc1swXS50eXBlIDpcbiAgICAgICAgdW5kZWZpbmVkO1xuICAgIHRoaXMuYWxsVGVybXMgPSBhd2FpdCB0aGlzLmZldGNoQWxsVGVybXMoKTtcbiAgICB0aGlzLmFsbEJsYW5rTm9kZXMgPSB0aGlzLmFsbFRlcm1zLmZsYXRNYXAodGVybSA9PiB7XG4gICAgICBjb25zdCB0ZXJtSWQgPSB0ZXJtWydAaWQnXTtcbiAgICAgIGNvbnN0IHRlcm1Mb2dzID0gZ2V0KHRoaXMubG9ncywgdGVybUlkLCB7fSkgYXMgSU5vZGVUZXJtTG9ncztcbiAgICAgIGNvbnN0IG9yaWdpbmFsID0gb3JpZ2luYWxWYWx1ZXMuZmlsdGVyKHYgPT4gdGVybUlkID09PSB2LnRlcm0hWydAaWQnXSk7XG4gICAgICBjb25zdCByZWNhbGN1bGF0ZWQgPSByZWNhbGN1bGF0ZWRWYWx1ZXMuZmlsdGVyKHYgPT4gdGVybUlkID09PSB2LnRlcm0hWydAaWQnXSk7XG4gICAgICBjb25zdCBoYXNEYXRhID0gISFvcmlnaW5hbC5sZW5ndGggfHwgISFyZWNhbGN1bGF0ZWQubGVuZ3RoIHx8IE9iamVjdC5rZXlzKHRlcm1Mb2dzKS5sZW5ndGggPiAwO1xuICAgICAgY29uc3QgY29uZmlnTW9kZWxzID0gdW5pcXVlKFtcbiAgICAgICAgLi4uZmluZENvbmZpZ01vZGVscyh0aGlzLmNvbmZpZyEsIHRlcm1JZCwgdGhpcy5ub2RlS2V5ISwgYWxsTW9kZWxzKS5tYXAoKHsgbW9kZWwgfSkgPT4gbW9kZWwgYXMgc3RyaW5nKSxcbiAgICAgICAgLi4uT2JqZWN0LmtleXModGVybUxvZ3MpLmZpbHRlcihrZXkgPT4gIWlzQmFja2dyb3VuZE5vSW5wdXQodGVybUxvZ3MsIGtleSkpXG4gICAgICBdKS5maWx0ZXIoa2V5ID0+ICEoXG4gICAgICAgIGtleSBpbiB0ZXJtTG9nc1xuICAgICAgKSB8fCAoXG4gICAgICAgICAgIXRlcm1Mb2dzW2tleV0uaXNLZXkgJiYgIXRlcm1Mb2dzW2tleV0uaW5wdXQgJiYgIXRlcm1Mb2dzW2tleV0ucHJvcGVydHlcbiAgICAgICAgKSk7XG4gICAgICBjb25zdCBrZXlzID0gbG9nS2V5cyh0ZXJtTG9ncywgb3JpZ2luYWwsIHJlY2FsY3VsYXRlZCk7XG4gICAgICBjb25zdCBzdWJWYWx1ZXMgPSBsb2dTdWJWYWx1ZXModGVybUxvZ3MsIG9yaWdpbmFsLCByZWNhbGN1bGF0ZWQpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXNPcGVuOiB0cnVlLFxuICAgICAgICBjYW5PcGVuOiBrZXlzLmxlbmd0aCA+IDAgfHwgc3ViVmFsdWVzLmxlbmd0aCA+IDAsXG4gICAgICAgIHRlcm1JZCxcbiAgICAgICAgdGVybSxcbiAgICAgICAgdHlwZSxcbiAgICAgICAgY29uZmlnTW9kZWxzOiBncm91cFBhcmFsbGVsTW9kZWxzKHRoaXMuY29uZmlnLCB0ZXJtSWQsIHRoaXMubm9kZUtleSEsIGNvbmZpZ01vZGVscyksXG4gICAgICAgIG9yaWdpbmFsLFxuICAgICAgICBvcmlnaW5hbFZhbHVlOiByZWR1Y2VWYWx1ZXMob3JpZ2luYWwsIHRlcm1JZCksXG4gICAgICAgIHJlY2FsY3VsYXRlZCxcbiAgICAgICAgcmVjYWxjdWxhdGVkVmFsdWU6IHJlZHVjZVZhbHVlcyhyZWNhbGN1bGF0ZWQsIHRlcm1JZCksXG4gICAgICAgIGlzT3JpZ2luYWw6ICEhb3JpZ2luYWwubGVuZ3RoLFxuICAgICAgICBpc1JlY2FsY3VsYXRlZDogaXNSZWNhbGN1bGF0ZWQocmVjYWxjdWxhdGVkKSxcbiAgICAgICAgaGFzRGF0YSxcbiAgICAgICAgbG9nczogdGVybUxvZ3MsXG4gICAgICAgIGtleXMsXG4gICAgICAgIHN1YlZhbHVlc1xuICAgICAgfTtcbiAgICB9KTtcbiAgICB0aGlzLm1ldGhvZE1vZGVsc0NvdW50ID0gTWF0aC5tYXguYXBwbHkoTWF0aC5tYXgsIHRoaXMuYWxsQmxhbmtOb2Rlcy5mbGF0TWFwKHYgPT4gW1xuICAgICAgdi5jb25maWdNb2RlbHMubGVuZ3RoLFxuICAgICAgLi4udi5zdWJWYWx1ZXMubWFwKHMgPT4gcy5jb25maWdNb2RlbHM/Lmxlbmd0aCA/PyAwKVxuICAgIF0pKTtcbiAgICB0aGlzLnJvd3NDb3VudCA9IHRoaXMuYWxsQmxhbmtOb2Rlcy5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHByZXYgKyAxICsgY3Vyci5zdWJWYWx1ZXMubGVuZ3RoICsgY3Vyci5rZXlzLmxlbmd0aCwgMCk7XG5cbiAgICB0aGlzLmZpbHRlclJlc3VsdHMoKTtcblxuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBmZXRjaEFsbFRlcm1zKCkge1xuICAgIHJldHVybiBmcm9tKFxuICAgICAgdGhpcy50ZXJtcy5sZW5ndGggP1xuICAgICAgICB0aGlzLnRlcm1zIDpcbiAgICAgICAgW1xuICAgICAgICAgIC4uLih0aGlzLm9yaWdpbmFsVmFsdWVzIHx8IFtdKS5tYXAoKHsgdGVybSB9KSA9PiB0ZXJtKSxcbiAgICAgICAgICAuLi4odGhpcy5yZWNhbGN1bGF0ZWRWYWx1ZXMgfHwgW10pLm1hcCgoeyB0ZXJtIH0pID0+IHRlcm0pXG4gICAgICAgIF1cbiAgICApLnBpcGUoXG4gICAgICBkaXN0aW5jdCh2ID0+IHYhWydAaWQnXSksXG4gICAgICB0b0FycmF5KCksXG4gICAgICBtYXAodiA9PiBvcmRlckJ5KHYsIFsnbmFtZSddLCBbJ2FzYyddKSlcbiAgICApLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdWdnZXN0QnlUZXJtKHRlcm06IHN0cmluZykge1xuICAgIHJldHVybiBmcm9tKHRoaXMuYWxsVGVybXMpLnBpcGUoXG4gICAgICBtYXAodiA9PiB2Lm5hbWUpLFxuICAgICAgZmlsdGVyKHYgPT4gdi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRlcm0udG9Mb3dlckNhc2UoKSkpLFxuICAgICAgdG9BcnJheSgpXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyB0cmFja0J5QmxhbmtOb2RlKF9pbmRleDogbnVtYmVyLCBub2RlOiBJQmxhbmtOb2RlTG9nKSB7XG4gICAgcmV0dXJuIG5vZGUudGVybUlkO1xuICB9XG5cbiAgcHVibGljIGtleVZhbHVlKGJsYW5rTm9kZXM6IGJsYW5rTm9kZVtdLCBrZXk6IHN0cmluZykge1xuICAgIGNvbnN0IHZhbHVlID0gYmxhbmtOb2Rlcz8ubGVuZ3RoID8gYmxhbmtOb2Rlc1swXVtrZXldIDogbnVsbDtcbiAgICByZXR1cm4gWydzdHJpbmcnLCAnbnVtYmVyJywgJ2Jvb2xlYW4nXS5pbmNsdWRlcyh0eXBlb2YgdmFsdWUpID8gKHZhbHVlIHx8ICcnKSA6IG51bGw7XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlUG9wb3Zlcihwb3BvdmVyLCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIHBvcG92ZXIuaXNPcGVuKCkgPyBwb3BvdmVyLmNsb3NlKCkgOiBwb3BvdmVyLm9wZW4oY29udGV4dCk7XG4gIH1cblxuICBwdWJsaWMgZmlsdGVyUmVzdWx0cygpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuYmxhbmtOb2RlcyA9IHRoaXMuYWxsQmxhbmtOb2Rlcy5maWx0ZXIoKHsgaGFzRGF0YSwgdGVybTogeyBuYW1lIH0gfSkgPT5cbiAgICAgICAgKCF0aGlzLm9ubHlXaXRoRGF0YSB8fCBoYXNEYXRhKSAmJlxuICAgICAgICAoIXRoaXMudGVybSB8fCBuYW1lID09PSB0aGlzLnRlcm0pXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqIExvZ3MgKiovXG5cbiAgcHJpdmF0ZSBnZXRTdWJ2YWx1ZUxvZ3Mobm9kZTogSUJsYW5rTm9kZUxvZywgeyBpZCB9OiBJQmxhbmtOb2RlTG9nU3ViVmFsdWUpIHtcbiAgICAvLyB0cnkgdG8gZ2V0IGEgbW9yZSBwcmVjaXNlIGxvZ3MsIGRlZmF1bHRzIHRvIGlkIG90aGVyd2lzZVxuICAgIHJldHVybiBnZXQodGhpcy5sb2dzLCBbaWQsIG5vZGUudGVybUlkXS5qb2luKCcuJyksIGdldCh0aGlzLmxvZ3MsIGlkLCB7fSkpIGFzIElOb2RlVGVybUxvZztcbiAgfVxuXG4gIHB1YmxpYyBnZXRMb2dzKG5vZGU6IElCbGFua05vZGVMb2csIG1ldGhvZElkOiBzdHJpbmcsIHN1YlZhbHVlPzogSUJsYW5rTm9kZUxvZ1N1YlZhbHVlKSB7XG4gICAgY29uc3QgbG9ncyA9IHN1YlZhbHVlPy5rZXkgPyB0aGlzLmdldFN1YnZhbHVlTG9ncyhub2RlLCBzdWJWYWx1ZSkgOiBub2RlLmxvZ3MgfHwge307XG4gICAgcmV0dXJuIGxvZ3NbbWV0aG9kSWRdO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0JhY2tncm91bmQobG9nOiBJTm9kZVRlcm1Mb2cpIHtcbiAgICByZXR1cm4gbG9nPy5tZXRob2RUaWVyID09PSBFbWlzc2lvbk1ldGhvZFRpZXIuYmFja2dyb3VuZDtcbiAgfVxuXG4gIHByaXZhdGUgaXNSZXF1aXJlZChsb2c6IElOb2RlVGVybUxvZykge1xuICAgIHJldHVybiAhKCdzaG91bGRSdW5PcmNoZXN0cmF0b3InIGluIGxvZykgfHwgbG9nLnNob3VsZFJ1bk9yY2hlc3RyYXRvcjtcbiAgfVxuXG4gIHByaXZhdGUgaXNVc2VyUHJvdmlkZWQobm9kZTogSUJsYW5rTm9kZUxvZywgbWV0aG9kSWQ6IHN0cmluZywgc3ViVmFsdWU/OiBJQmxhbmtOb2RlTG9nU3ViVmFsdWUpIHtcbiAgICBjb25zdCBsb2cgPSB0aGlzLmdldExvZ3Mobm9kZSwgbWV0aG9kSWQsIHN1YlZhbHVlKTtcbiAgICByZXR1cm4gW1xuICAgICAgdHlwZW9mIG5vZGUub3JpZ2luYWxWYWx1ZSA9PT0gJ3VuZGVmaW5lZCcsIC8vIGhhcyB2YWx1ZVxuICAgICAgbm9kZS5pc1JlY2FsY3VsYXRlZCwgLy8gaXMgbm90IHJlY2FsY3VsYXRlZFxuICAgICAgdGhpcy5pc0JhY2tncm91bmQobG9nKSwgLy8gaXMgbm90IGJhY2tncm91bmQgZGF0YVxuICAgICAgbG9nPy5pc0tleSwgLy8gaXMgbm90IGtleVxuICAgICAgdGhpcy5oYXNMb2cobG9nLCBmYWxzZSkgLy8gc2tpcCBpZiBjb250YWlucyBsb2dzIG90aGVyIHRoYW4gb3JjaGVzdHJhdG9yXG4gICAgXS5ldmVyeSh2ID0+ICF2KTtcbiAgfVxuXG4gIHB1YmxpYyB2YWxpZFN1YlZhbHVlKG5vZGU6IElCbGFua05vZGVMb2csIGluZGV4OiBudW1iZXIsIHN1YlZhbHVlPzogSUJsYW5rTm9kZUxvZ1N1YlZhbHVlKSB7XG4gICAgY29uc3QgbWV0aG9kSWQgPSB0aGlzLmdldE1ldGhvZElkQXQobm9kZSwgaW5kZXgsIHN1YlZhbHVlKTtcbiAgICBjb25zdCBsb2cgPSBnZXQobm9kZS5sb2dzIVttZXRob2RJZF0sIHN1YlZhbHVlPy5rZXksIG51bGwpO1xuICAgIHJldHVybiAhc3ViVmFsdWU/LmlkIHx8IChcbiAgICAgIC8vIHN1YlZhbHVlIGNhbiBiZSBhbiBhcnJheVxuICAgICAgQXJyYXkuaXNBcnJheShsb2cpID8gbG9nLmluY2x1ZGVzKHN1YlZhbHVlPy5pZCkgOiBsb2cgPT09IHN1YlZhbHVlPy5pZFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZ2V0TWV0aG9kSWRBdChub2RlOiBJQmxhbmtOb2RlTG9nLCBpbmRleDogbnVtYmVyLCBzdWJWYWx1ZT86IElCbGFua05vZGVMb2dTdWJWYWx1ZSkge1xuICAgIGNvbnN0IHsgY29uZmlnTW9kZWxzIH0gPSBzdWJWYWx1ZSB8fCBub2RlO1xuICAgIHJldHVybiBjb25maWdNb2RlbHNbaW5kZXhdO1xuICB9XG5cbiAgcHVibGljIG1ldGhvZE5hbWUobm9kZTogSUJsYW5rTm9kZUxvZywgbWV0aG9kSWQ6IHN0cmluZywgc3ViVmFsdWU/OiBJQmxhbmtOb2RlTG9nU3ViVmFsdWUpIHtcbiAgICBjb25zdCBsb2cgPSB0aGlzLmdldExvZ3Mobm9kZSwgbWV0aG9kSWQsIHN1YlZhbHVlKTtcbiAgICByZXR1cm4gdGhpcy5tZXRob2RzQnlJZFttZXRob2RJZF0/Lm5hbWUgfHxcbiAgICAgIGxvZz8ua2V5IHx8XG4gICAgICBsb2c/Lm1vZGVsIHx8XG4gICAgICAobWV0aG9kSWQgPyBrZXlUb0xhYmVsKG1ldGhvZElkKSA6ICcnKTtcbiAgfVxuXG4gIHB1YmxpYyBoYXNMb2cobG9nOiBJTm9kZVRlcm1Mb2csIHdpdGhPcmNoZXN0cmF0b3IgPSB0cnVlKSB7XG4gICAgcmV0dXJuICEhbG9nICYmIChcbiAgICAgICdzaG91bGRSdW4nIGluIGxvZyB8fFxuICAgICAgKHdpdGhPcmNoZXN0cmF0b3IgJiYgJ3Nob3VsZFJ1bk9yY2hlc3RyYXRvcicgaW4gbG9nKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgaGFzTG9nRGV0YWlscyhub2RlOiBJQmxhbmtOb2RlTG9nLCBtZXRob2RJZDogc3RyaW5nLCBzdWJWYWx1ZT86IElCbGFua05vZGVMb2dTdWJWYWx1ZSkge1xuICAgIGNvbnN0IGxvZyA9IHRoaXMuZ2V0TG9ncyhub2RlLCBtZXRob2RJZCwgc3ViVmFsdWUpO1xuICAgIHJldHVybiBbXG4gICAgICBMb2dTdGF0dXMuc3VjY2VzcyxcbiAgICAgIExvZ1N0YXR1cy5lcnJvclxuICAgIF0uaW5jbHVkZXModGhpcy5sb2dTdGF0dXMobm9kZSwgbWV0aG9kSWQsIHN1YlZhbHVlKSkgJiYgKFxuICAgICAgICBsb2c/LnJlcXVpcmVtZW50cyB8fCBsb2c/LmxvZ3MgfHwgbG9nPy5taXNzaW5nTG9va3Vwcz8ubGVuZ3RoXG4gICAgICApO1xuICB9XG5cbiAgcHVibGljIGxvZ1N0YXR1cyhub2RlOiBJQmxhbmtOb2RlTG9nLCBtZXRob2RJZDogc3RyaW5nLCBzdWJWYWx1ZT86IElCbGFua05vZGVMb2dTdWJWYWx1ZSkge1xuICAgIGNvbnN0IGxvZyA9IHRoaXMuZ2V0TG9ncyhub2RlLCBtZXRob2RJZCwgc3ViVmFsdWUpO1xuICAgIHJldHVybiB0aGlzLmlzVXNlclByb3ZpZGVkKG5vZGUsIG1ldGhvZElkLCBzdWJWYWx1ZSkgP1xuICAgICAgTG9nU3RhdHVzLmRhdGFQcm92aWRlZCA6XG4gICAgICAoXG4gICAgICAgIHRoaXMuaGFzTG9nKGxvZykgP1xuICAgICAgICAgIChcbiAgICAgICAgICAgIHRoaXMuaXNSZXF1aXJlZChsb2cpID9cbiAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgIGxvZy5zaG91bGRSdW4gP1xuICAgICAgICAgICAgICAgICAgTG9nU3RhdHVzLnN1Y2Nlc3MgOlxuICAgICAgICAgICAgICAgICAgTG9nU3RhdHVzLmVycm9yXG4gICAgICAgICAgICAgICkgOlxuICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgbm9kZS5pc1JlY2FsY3VsYXRlZCA/XG4gICAgICAgICAgICAgICAgICBMb2dTdGF0dXMuc2tpcEhpZXJhcmNoeSA6XG4gICAgICAgICAgICAgICAgICBMb2dTdGF0dXMubm90UmVxdWlyZWRcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICkgOlxuICAgICAgICAgIExvZ1N0YXR1cy5za2lwSGllcmFyY2h5XG4gICAgICApO1xuICB9XG5cbiAgcHVibGljIHJlcXVpcmVtZW50S2V5cyhyZXF1aXJlbWVudHM6IHsgW2tleTogc3RyaW5nXTogYW55IH0pIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMocmVxdWlyZW1lbnRzKS5maWx0ZXIoayA9PiAhbm9kZVR5cGVzTG93ZXJDYXNlLmluY2x1ZGVzKGspICYmIGsgIT09ICd0cmFuc2Zvcm1hdGlvbicpO1xuICB9XG5cbiAgcHVibGljIHJlcXVpcmVtZW50Q29sb3IodmFsdWU6IGFueSkge1xuICAgIHJldHVybiAhdmFsdWUgfHwgWydOb25lJywgJ0ZhbHNlJywgJzAnLCAnMC4wJ10uaW5jbHVkZXModmFsdWUpID8gJ2RhbmdlcicgOiAnd2hpdGUnO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwicHgtMyBwYi0zXCI+XG4gIDxkaXYgY2xhc3M9XCJoYXMtdGV4dC1yaWdodCBtYi0yXCIgKm5nSWY9XCIhaXNFeHRlcm5hbFwiPlxuICAgIDxhIGNsYXNzPVwiaXMtc2l6ZS03XCIgKm5nSWY9XCJsb2dzVXJsXCIgW2hyZWZdPVwibG9nc1VybFwiIHRhcmdldD1cIl9ibGFua1wiPlxuICAgICAgPGZhLWljb24gaWNvbj1cImV4dGVybmFsLWxpbmstYWx0XCI+PC9mYS1pY29uPlxuICAgICAgPHNwYW4gY2xhc3M9XCJwbC0yXCI+T3BlbiBGdWxsIExvZ3M8L3NwYW4+XG4gICAgPC9hPlxuICA8L2Rpdj5cblxuICA8aGUtZGF0YS10YWJsZSBjbGFzcz1cIm1iLTEgaXMtc21hbGxcIiBbc21hbGxdPVwidHJ1ZVwiIFtuYlJvd3NdPVwicm93c0NvdW50XCIgbWF4SGVpZ2h0PVwiMzIwXCI+XG4gICAgPHRhYmxlIGNsYXNzPVwidGFibGUgaXMtbmFycm93IGlzLXN0cmlwZWRcIj5cbiAgICAgIDx0aGVhZD5cbiAgICAgICAgPHRyPlxuICAgICAgICAgIDx0aCBjbGFzcz1cIndpZHRoLWF1dG9cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbCBpcy1leHBhbmRlZCBoYXMtaWNvbnMtcmlnaHRcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dCBzZWFyY2gtaW5wdXQgaXMtc21hbGxcIlxuICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJ0ZXJtXCIgbmFtZT1cInRlcm1cIlxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJGaWx0ZXIgYnkgbmFtZVwiXG4gICAgICAgICAgICAgICAgICBbZWRpdGFibGVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgW25nYlR5cGVhaGVhZF09XCJzdWdnZXN0VGVybVwiXG4gICAgICAgICAgICAgICAgICAoc2VsZWN0SXRlbSk9XCJmaWx0ZXJSZXN1bHRzKClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImljb24gaXMtc21hbGwgaXMtcmlnaHRcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLmlzLWhpZGRlbl09XCIhdGVybVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwidGVybSA9ICcnOyBmaWx0ZXJSZXN1bHRzKCk7XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZmEtaWNvbiBpY29uPVwidGltZXNcIj48L2ZhLWljb24+XG4gICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgPHRoPk9yaWdpbmFsPC90aD5cbiAgICAgICAgICA8dGg+UmVjYWxjdWxhdGVkPC90aD5cbiAgICAgICAgICA8dGg+RGlmZmVyZW5jZTwvdGg+XG4gICAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBjIG9mIG1ldGhvZE1vZGVsc0NvdW50IHwgdGltZXM7IGxldCBpID0gaW5kZXhcIj4oe3tpICsgMX19KTwvdGg+XG4gICAgICAgIDwvdHI+XG4gICAgICA8L3RoZWFkPlxuICAgICAgPHRib2R5PlxuICAgICAgICA8dHIgKm5nSWY9XCJsb2FkaW5nXCI+XG4gICAgICAgICAgPHRkIGNvbHNwYW49XCI1XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGFzLXRleHQtY2VudGVyIHB5LTNcIj5cbiAgICAgICAgICAgICAgPGZhLWljb24gaWNvbj1cInNwaW5uZXJcIiBbcHVsc2VdPVwidHJ1ZVwiIHNpemU9XCJsZ1wiPjwvZmEtaWNvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGJsYW5rTm9kZSBvZiBibGFua05vZGVzOyB0cmFja0J5OiB0cmFja0J5QmxhbmtOb2RlXCI+XG4gICAgICAgICAgPHRyIFtjbGFzcy5oYXMtc3ViLXJvd3NdPVwiYmxhbmtOb2RlLmNhbk9wZW5cIj5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cIndpZHRoLWF1dG9cIiBbYXR0ci50aXRsZV09XCJibGFua05vZGUudGVybS5uYW1lXCI+XG4gICAgICAgICAgICAgIDxhIGNsYXNzPVwiaXMtaW5saW5lLWJsb2NrIGlzLWFsaWduLXRvcCBwci0yIG9wZW4tbm9kZVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImJsYW5rTm9kZS5pc09wZW4gPSAhYmxhbmtOb2RlLmlzT3BlblwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJibGFua05vZGUuY2FuT3BlblwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZmEtaWNvbiBpY29uPVwiYW5nbGUtZG93blwiIFtjbGFzcy5pcy1oaWRkZW5dPVwiIWJsYW5rTm9kZS5pc09wZW5cIj48L2ZhLWljb24+XG4gICAgICAgICAgICAgICAgPGZhLWljb24gaWNvbj1cImFuZ2xlLXJpZ2h0XCIgW2NsYXNzLmlzLWhpZGRlbl09XCJibGFua05vZGUuaXNPcGVuXCI+PC9mYS1pY29uPlxuICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgIDxoZS1ub2RlLWxpbmsgY2xhc3M9XCJpcy1pbmxpbmUtYmxvY2tcIiBbbm9kZV09XCJibGFua05vZGUudGVybVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaXMtbm93cmFwIGhhcy10ZXh0LWVsbGlwc2lzXCI+e3tibGFua05vZGUudGVybS5uYW1lfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvaGUtbm9kZS1saW5rPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgPHNwYW4+e3tibGFua05vZGUub3JpZ2luYWxWYWx1ZSB8IHByZWNpc2lvbjozIHwgZGVmYXVsdDonLSd9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWJsYW5rTm9kZS5pc09yaWdpbmFsIHx8IGJsYW5rTm9kZS5pc1JlY2FsY3VsYXRlZDsgZWxzZSBub3RVcGRhdGVkXCI+XG4gICAgICAgICAgICAgICAge3tibGFua05vZGUucmVjYWxjdWxhdGVkVmFsdWUgfCBwcmVjaXNpb246MyB8IGRlZmF1bHQ6Jy0nfX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImlzLW5vd3JhcFwiPlxuICAgICAgICAgICAgICA8aGUtYmxhbmstbm9kZS12YWx1ZS1kZWx0YSAqbmdJZj1cImJsYW5rTm9kZS5vcmlnaW5hbC5sZW5ndGggJiYgYmxhbmtOb2RlLmlzUmVjYWxjdWxhdGVkOyBlbHNlIG5vVmFsdWVcIlxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJibGFua05vZGUucmVjYWxjdWxhdGVkVmFsdWVcIlxuICAgICAgICAgICAgICAgIFtvcmlnaW5hbFZhbHVlXT1cImJsYW5rTm9kZS5vcmlnaW5hbFZhbHVlXCJcbiAgICAgICAgICAgICAgPjwvaGUtYmxhbmstbm9kZS12YWx1ZS1kZWx0YT5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYmxhbmtOb2RlTW9kZWxzOyBjb250ZXh0OiB7YmxhbmtOb2RlOiBibGFua05vZGV9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC90cj5cblxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJibGFua05vZGUua2V5cz8ubGVuZ3RoXCI+XG4gICAgICAgICAgICA8dHJcbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHN1YlZhbHVlIG9mIGJsYW5rTm9kZS5rZXlzXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmlzLWhpZGRlbl09XCIhYmxhbmtOb2RlLmlzT3BlblwiXG4gICAgICAgICAgICAgIFtjbGFzcy5oYXMtc3ViLXJvd3NdPVwiYmxhbmtOb2RlLnN1YlZhbHVlcz8ubGVuZ3RoXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwid2lkdGgtYXV0byBoYXMtdGV4dC1sZWZ0XCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpcy1pbmxpbmUtYmxvY2sgaXMtYWxpZ24tdG9wIHBsLTMgcHItMSBmaWVsZC1ub2RlXCI+RmllbGQ6PC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJpcy1pbmxpbmUtYmxvY2tcIiAqbmdJZj1cImJsYW5rTm9kZS50eXBlXCJcbiAgICAgICAgICAgICAgICAgIFtocmVmXT1cImJhc2VVcmwgKyAnL3NjaGVtYS8nICsgYmxhbmtOb2RlLnR5cGUgKyAnIycgKyBzdWJWYWx1ZS5rZXlcIiB0YXJnZXQ9XCJfYmxhbmtcIiBbdGl0bGVdPVwic3ViVmFsdWUua2V5XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlzLW5vd3JhcCBoYXMtdGV4dC1lbGxpcHNpc1wiPnt7c3ViVmFsdWUua2V5fX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaXMtaW5saW5lLWJsb2NrIGlzLWFsaWduLXRvcFwiICpuZ0lmPVwiIWJsYW5rTm9kZS50eXBlXCI+e3tzdWJWYWx1ZS5rZXl9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic3ViVmFsdWUub3JpZ2luYWxWYWx1ZSAhPT0gbnVsbDsgZWxzZSBub1ZhbHVlXCI+e3tzdWJWYWx1ZS5vcmlnaW5hbFZhbHVlIHwgcHJlY2lzaW9uOjMgfCBkZWZhdWx0OictJ319PC9zcGFuPlxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzdWJWYWx1ZS5yZWNhbGN1bGF0ZWRWYWx1ZSAhPT0gbnVsbDsgZWxzZSBub1ZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICB7e3N1YlZhbHVlLnJlY2FsY3VsYXRlZFZhbHVlIHwgcHJlY2lzaW9uOjMgfCBkZWZhdWx0OictJ319XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICA8dGQ+LTwvdGQ+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImJsYW5rLW5vZGUtaW5kZXgta2V5XCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJsYW5rTm9kZU1vZGVsOyBjb250ZXh0OiB7YmxhbmtOb2RlOmJsYW5rTm9kZSwgbWV0aG9kSWQ6c3ViVmFsdWUua2V5LCBsb2dzOmdldExvZ3MoYmxhbmtOb2RlLCBzdWJWYWx1ZS5rZXkpfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICA8dGQgKm5nSWY9XCJtZXRob2RNb2RlbHNDb3VudCA+IDFcIiBbYXR0ci5jb2xzcGFuXT1cIm1ldGhvZE1vZGVsc0NvdW50IC0gMVwiPjwvdGQ+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPHRyXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgc3ViVmFsdWUgb2YgYmxhbmtOb2RlLnN1YlZhbHVlc1wiXG4gICAgICAgICAgICBbY2xhc3MuaXMtaGlkZGVuXT1cIiFibGFua05vZGUuaXNPcGVuXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJ3aWR0aC1hdXRvIGhhcy10ZXh0LWxlZnRcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpcy1pbmxpbmUtYmxvY2sgaXMtYWxpZ24tdG9wIHBsLTNcIj57e3N1YlZhbHVlLmtleSB8IGtleVRvTGFiZWx9fTwvc3Bhbj5cblxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic3ViVmFsdWUuaWRcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlzLWlubGluZS1ibG9ja1wiIGNsYXNzPVwiaXMtaW5saW5lLWJsb2NrIGlzLWFsaWduLXRvcCBwci0xXCI+Ojwvc3Bhbj5cblxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cInN1YlZhbHVlLmtleVwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpcy1pbmxpbmUtYmxvY2tcIiAqbmdTd2l0Y2hDYXNlPVwiJ2JhY2tncm91bmREYXRhJ1wiPnt7c3ViVmFsdWUuaWQgfCBrZXlUb0xhYmVsfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8aGUtbm9kZS1saW5rICpuZ1N3aXRjaERlZmF1bHQgY2xhc3M9XCJpcy1ibG9jayBwbC00XCIgW25vZGVdPVwieydAdHlwZSc6J1Rlcm0nLCdAaWQnOnN1YlZhbHVlLmlkfVwiIFthdHRyLnRpdGxlXT1cInN1YlZhbHVlLmlkIHwga2V5VG9MYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlzLW5vd3JhcCBoYXMtdGV4dC1lbGxpcHNpc1wiPnt7c3ViVmFsdWUuaWQgfCBrZXlUb0xhYmVsfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2hlLW5vZGUtbGluaz5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInN1YlZhbHVlLm9yaWdpbmFsVmFsdWUgIT09IG51bGw7IGVsc2Ugbm9WYWx1ZVwiPnt7c3ViVmFsdWUub3JpZ2luYWxWYWx1ZSB8IHByZWNpc2lvbjozIHwgZGVmYXVsdDonLSd9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic3ViVmFsdWUucmVjYWxjdWxhdGVkVmFsdWUgIT09IG51bGw7IGVsc2Ugbm9WYWx1ZVwiPlxuICAgICAgICAgICAgICAgIHt7c3ViVmFsdWUucmVjYWxjdWxhdGVkVmFsdWUgfCBwcmVjaXNpb246MyB8IGRlZmF1bHQ6Jy0nfX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDx0ZD4tPC90ZD5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJibGFua05vZGVNb2RlbHM7IGNvbnRleHQ6IHtibGFua05vZGU6IGJsYW5rTm9kZSwgc3ViVmFsdWU6IHN1YlZhbHVlfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC90Ym9keT5cbiAgICA8L3RhYmxlPlxuICA8L2hlLWRhdGEtdGFibGU+XG5cbiAgPGRpdiBjbGFzcz1cImlzLXNpemUtNyBpcy1pdGFsaWNcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sdW1ucyBpcy12YXJpYWJsZSBpcy0xIG15LTBcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW4gaXMtbmFycm93XCI+XG4gICAgICAgIDxwPlxuICAgICAgICAgIDxhIGNsYXNzPVwiaXMtaW5saW5lLWJsb2NrIHByLTJcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInNob3dMZWdlbmQgPSAhc2hvd0xlZ2VuZFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGZhLWljb24gaWNvbj1cImFuZ2xlLWRvd25cIiBbY2xhc3MuaXMtaGlkZGVuXT1cIiFzaG93TGVnZW5kXCI+PC9mYS1pY29uPlxuICAgICAgICAgICAgPGZhLWljb24gaWNvbj1cImFuZ2xlLXJpZ2h0XCIgW2NsYXNzLmlzLWhpZGRlbl09XCJzaG93TGVnZW5kXCI+PC9mYS1pY29uPlxuICAgICAgICAgIDwvYT5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImlzLWlubGluZS1ibG9ja1wiPkxlZ2VuZDo8L3NwYW4+XG4gICAgICAgIDwvcD5cbiAgICAgICAgPHVsIGNsYXNzPVwiY29udGVudCBwbC0yXCIgW2NsYXNzLmlzLWhpZGRlbl09XCIhc2hvd0xlZ2VuZFwiPlxuICAgICAgICAgIDxsaVxuICAgICAgICAgICAgY2xhc3M9XCJoYXMtdGV4dC17e2xvZ0NvbG9yW3N0YXR1cy52YWx1ZV19fVwiXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgc3RhdHVzIG9mIExvZ1N0YXR1cyB8IGtleXNcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxmYS1pY29uIFtpY29uXT1cImxvZ0ljb25bc3RhdHVzLnZhbHVlXVwiPjwvZmEtaWNvbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGwtMVwiPnt7c3RhdHVzLnZhbHVlfX08L3NwYW4+XG4gICAgICAgICAgPC9saT5cbiAgICAgICAgPC91bD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbHVtbiBoYXMtdGV4dC1yaWdodFwiICpuZ0lmPVwiZmlsdGVyZWRUeXBlXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImlzLWlubGluZS1ibG9jayBjaGVja2JveFwiPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cInNlbGVjdG9yXCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwib25seVdpdGhEYXRhXCJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwiZmlsdGVyUmVzdWx0cygpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJtbC0yXCI+U2hvdyBvbmx5IHJlY2FsY3VsYXRlZCB7e2ZpbHRlcmVkVHlwZSB8IHBsdXJhbGl6ZX19PC9zcGFuPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjYmxhbmtOb2RlTW9kZWxzIGxldC1ibGFua05vZGU9XCJibGFua05vZGVcIiBsZXQtc3ViVmFsdWU9XCJzdWJWYWx1ZVwiPlxuICA8dGQgY2xhc3M9XCJibGFuay1ub2RlLWluZGV4LXt7aX19XCIgKm5nRm9yPVwibGV0IGMgb2YgbWV0aG9kTW9kZWxzQ291bnQgfCB0aW1lczsgbGV0IGkgPSBpbmRleFwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ2YWxpZFN1YlZhbHVlKGJsYW5rTm9kZSwgaSwgc3ViVmFsdWUpOyBlbHNlIG5vVmFsdWVcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRNZXRob2RJZEF0KGJsYW5rTm9kZSwgaSwgc3ViVmFsdWUpOyBsZXQgbWV0aG9kSWQ7IGVsc2Ugbm9WYWx1ZVwiPlxuICAgICAgICA8bmctdGVtcGxhdGUgI21vZGVsU2VyaWU+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJsYW5rTm9kZU1vZGVsOyBjb250ZXh0OiB7YmxhbmtOb2RlOmJsYW5rTm9kZSwgbWV0aG9kSWQ6bWV0aG9kSWQsIHN1YlZhbHVlOnN1YlZhbHVlLCBsb2dzOmdldExvZ3MoYmxhbmtOb2RlLCBtZXRob2RJZCwgc3ViVmFsdWUpfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwibWV0aG9kSWQgfCBpc0FycmF5OyBlbHNlIG1vZGVsU2VyaWVcIj5cbiAgICAgICAgICA8cCAqbmdGb3I9XCJsZXQgdmFsdWUgb2YgbWV0aG9kSWRcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJibGFua05vZGVNb2RlbDsgY29udGV4dDoge2JsYW5rTm9kZTpibGFua05vZGUsIG1ldGhvZElkOnZhbHVlLCBzdWJWYWx1ZTpzdWJWYWx1ZSwgbG9nczpnZXRMb2dzKGJsYW5rTm9kZSwgbWV0aG9kSWQsIHN1YlZhbHVlKX1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L3A+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvdGQ+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2JsYW5rTm9kZU1vZGVsIGxldC1ibGFua05vZGU9XCJibGFua05vZGVcIiBsZXQtbWV0aG9kSWQ9XCJtZXRob2RJZFwiIGxldC1zdWJWYWx1ZT1cInN1YlZhbHVlXCIgbGV0LWxvZ3M9XCJsb2dzXCI+XG4gIDxzcGFuXG4gICAgW2NsYXNzLnRyaWdnZXItcG9wb3Zlcl09XCJoYXNMb2dEZXRhaWxzKGJsYW5rTm9kZSwgbWV0aG9kSWQsIHN1YlZhbHVlKVwiXG4gICAgW25nYlBvcG92ZXJdPVwibG9nRGV0YWlsc1wiIFthdXRvQ2xvc2VdPVwiJ291dHNpZGUnXCJcbiAgICB0cmlnZ2Vycz1cIm1hbnVhbFwiICNwPVwibmdiUG9wb3ZlclwiIHBsYWNlbWVudD1cImxlZnRcIiBjb250YWluZXI9XCJib2R5XCJcbiAgICAoY2xpY2spPVwiaGFzTG9nRGV0YWlscyhibGFua05vZGUsIG1ldGhvZElkLCBzdWJWYWx1ZSkgPyB0b2dnbGVQb3BvdmVyKHAsIHsgbG9ncyB9KSA6IG51bGxcIlxuICA+XG4gICAgPHNwYW4gY2xhc3M9XCJpcy1jYXBpdGFsaXplZFwiPnt7bWV0aG9kTmFtZShibGFua05vZGUsIG1ldGhvZElkLCBzdWJWYWx1ZSl9fTwvc3Bhbj5cbiAgICA8c3BhbiBjbGFzcz1cInBsLTFcIiAqbmdJZj1cImhhc0xvZyhsb2dzKSAmJiBsb2dzPy5tZXRob2RUaWVyXCI+W3t7bG9ncy5tZXRob2RUaWVyfX1dPC9zcGFuPlxuICAgIDxzcGFuIGNsYXNzPVwicGwtMSBoYXMtdGV4dC17e2xvZ0NvbG9yW2xvZ1N0YXR1cyhibGFua05vZGUsIG1ldGhvZElkLCBzdWJWYWx1ZSldfX1cIj5cbiAgICAgIDxmYS1pY29uIFtpY29uXT1cImxvZ0ljb25bbG9nU3RhdHVzKGJsYW5rTm9kZSwgbWV0aG9kSWQsIHN1YlZhbHVlKV1cIj48L2ZhLWljb24+XG4gICAgPC9zcGFuPlxuICA8L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI25vVmFsdWU+LTwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbm90VXBkYXRlZD5cbiAgPHNwYW4+bm90IHVwZGF0ZWQ8L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2xvZ0RldGFpbHMgbGV0LWxvZ3M9XCJsb2dzXCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJsb2dzLnJlcXVpcmVtZW50c1wiPlxuICAgIDxwIGNsYXNzPVwiaXMtcmVxdWlyZW1lbnRcIiAqbmdGb3I9XCJsZXQga2V5IG9mIHJlcXVpcmVtZW50S2V5cyhsb2dzLnJlcXVpcmVtZW50cylcIiBjbGFzcz1cImhhcy10ZXh0LXt7cmVxdWlyZW1lbnRDb2xvcihsb2dzLnJlcXVpcmVtZW50c1trZXldKX19XCI+XG4gICAgICB7e2tleX19OiB7e2xvZ3MucmVxdWlyZW1lbnRzW2tleV19fVxuICAgIDwvcD5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJsb2dzLmxvZ3NcIj5cbiAgICA8cCBjbGFzcz1cImlzLWxvZ1wiICpuZ0Zvcj1cImxldCBrZXkgb2YgbG9ncy5sb2dzIHwga2V5c1wiPlxuICAgICAge3trZXkua2V5fX06IHt7a2V5LnZhbHVlfX1cbiAgICA8L3A+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwibG9ncy5taXNzaW5nTG9va3Vwcz8ubGVuZ3RoXCI+XG4gICAgPHAgY2xhc3M9XCJtdC0yXCI+TWlzc2luZyBsb29rdXBzOjwvcD5cblxuICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1jb250YWluZXIgZGF0YS10YWJsZS1jb250YWluZXJcIj5cbiAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIGlzLWZ1bGx3aWR0aCBtYi0wXCI+XG4gICAgICAgIDx0aGVhZCBjbGFzcz1cImhhcy1iYWNrZ3JvdW5kLWJsYWNrXCI+XG4gICAgICAgICAgPHRyPlxuICAgICAgICAgICAgPHRoPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImhhcy10ZXh0LXdoaXRlXCI+RmlsZW5hbWU8L3NwYW4+XG4gICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgPHRoPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImhhcy10ZXh0LXdoaXRlXCI+Q29sdW1uIFRpdGxlPC9zcGFuPlxuICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgIDx0aD5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJoYXMtdGV4dC13aGl0ZVwiPlJvdyAodGVybS5pZCk8L3NwYW4+XG4gICAgICAgICAgICA8L3RoPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgIDwvdGhlYWQ+XG4gICAgICAgIDx0Ym9keSBjbGFzcz1cImhhcy1iYWNrZ3JvdW5kLWJsYWNrIGhhcy10ZXh0LXdoaXRlXCI+XG4gICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBkYXRhIG9mIGxvZ3MubWlzc2luZ0xvb2t1cHNcIj5cbiAgICAgICAgICAgIDx0ZD57e2RhdGEuZmlsZW5hbWV9fTwvdGQ+XG4gICAgICAgICAgICA8dGQ+e3tkYXRhLmNvbHVtbn19PC90ZD5cbiAgICAgICAgICAgIDx0ZD57e2RhdGEudGVybUlkfX08L3RkPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgIDwvdGJvZHk+XG4gICAgICA8L3RhYmxlPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { __awaiter } from "tslib";
|
|
2
|
-
import { Component, Input } from '@angular/core';
|
|
2
|
+
import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
|
|
3
3
|
import { DataState } from '@hestia-earth/api';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
import * as i1 from "../node.service";
|
|
@@ -20,15 +20,16 @@ export class NodeMissingLookupFactorsComponent {
|
|
|
20
20
|
}
|
|
21
21
|
}
|
|
22
22
|
NodeMissingLookupFactorsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: NodeMissingLookupFactorsComponent, deps: [{ token: i1.HeNodeService }], target: i0.ɵɵFactoryTarget.Component });
|
|
23
|
-
NodeMissingLookupFactorsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: NodeMissingLookupFactorsComponent, selector: "he-node-missing-lookup-factors", inputs: { node: "node" }, ngImport: i0, template: "<div *ngIf=\"!loading; else loader\" class=\"table-container data-table-container\">\n <table class=\"table is-fullwidth is-hoverable mb-0\">\n <thead class=\"has-background-black\">\n <tr>\n <th>\n <span class=\"has-text-white\">Filename</span>\n </th>\n <th>\n <span class=\"has-text-white\">Column Title</span>\n </th>\n <th>\n <span class=\"has-text-white\">Row (term.id)</span>\n </th>\n <th>\n <span class=\"has-text-white\">Model</span>\n </th>\n </tr>\n </thead>\n <tbody>\n <tr *ngIf=\"!logs.length\">\n <td colspan=\"3\">\n <span>No missing lookup factors.</span>\n </td>\n </tr>\n <tr *ngFor=\"let log of logs\">\n <td>{{log.filename}}</td>\n <td>\n <span *ngIf=\"log.column; else na\">{{log.column}}</span>\n </td>\n <td>\n <span *ngIf=\"log.termId; else na\">{{log.termId}}</span>\n </td>\n <td>\n <ng-container *ngIf=\"log.model; else na\">\n <span>{{log.model}}</span>\n <span class=\"pl-1\" *ngIf=\"log.key\">/ {{log.key}}</span>\n <span class=\"pl-1\" *ngIf=\"log.term && log.term !== log.termId\">/ {{log.term}}</span>\n </ng-container>\n </td>\n </tr>\n </tbody>\n </table>\n</div>\n\n<ng-template #loader>\n <div class=\"has-text-center py-3\">\n <fa-icon icon=\"spinner\" [pulse]=\"true\" size=\"lg\"></fa-icon>\n </div>\n</ng-template>\n\n<ng-template #na>\n <span>-</span>\n</ng-template>\n", styles: [":host{display:block}\n"], components: [{ type: i2.FaIconComponent, selector: "fa-icon", inputs: ["classes", "icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
|
|
23
|
+
NodeMissingLookupFactorsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: NodeMissingLookupFactorsComponent, selector: "he-node-missing-lookup-factors", inputs: { node: "node" }, ngImport: i0, template: "<div *ngIf=\"!loading; else loader\" class=\"table-container data-table-container\">\n <table class=\"table is-fullwidth is-hoverable mb-0\">\n <thead class=\"has-background-black\">\n <tr>\n <th>\n <span class=\"has-text-white\">Filename</span>\n </th>\n <th>\n <span class=\"has-text-white\">Column Title</span>\n </th>\n <th>\n <span class=\"has-text-white\">Row (term.id)</span>\n </th>\n <th>\n <span class=\"has-text-white\">Model</span>\n </th>\n </tr>\n </thead>\n <tbody>\n <tr *ngIf=\"!logs.length\">\n <td colspan=\"3\">\n <span>No missing lookup factors.</span>\n </td>\n </tr>\n <tr *ngFor=\"let log of logs\">\n <td>{{log.filename}}</td>\n <td>\n <span *ngIf=\"log.column; else na\">{{log.column}}</span>\n </td>\n <td>\n <span *ngIf=\"log.termId; else na\">{{log.termId}}</span>\n </td>\n <td>\n <ng-container *ngIf=\"log.model; else na\">\n <span>{{log.model}}</span>\n <span class=\"pl-1\" *ngIf=\"log.key\">/ {{log.key}}</span>\n <span class=\"pl-1\" *ngIf=\"log.term && log.term !== log.termId\">/ {{log.term}}</span>\n </ng-container>\n </td>\n </tr>\n </tbody>\n </table>\n</div>\n\n<ng-template #loader>\n <div class=\"has-text-center py-3\">\n <fa-icon icon=\"spinner\" [pulse]=\"true\" size=\"lg\"></fa-icon>\n </div>\n</ng-template>\n\n<ng-template #na>\n <span>-</span>\n</ng-template>\n", styles: [":host{display:block}\n"], components: [{ type: i2.FaIconComponent, selector: "fa-icon", inputs: ["classes", "icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
24
24
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: NodeMissingLookupFactorsComponent, decorators: [{
|
|
25
25
|
type: Component,
|
|
26
26
|
args: [{
|
|
27
27
|
selector: 'he-node-missing-lookup-factors',
|
|
28
28
|
templateUrl: './node-missing-lookup-factors.component.html',
|
|
29
|
-
styleUrls: ['./node-missing-lookup-factors.component.scss']
|
|
29
|
+
styleUrls: ['./node-missing-lookup-factors.component.scss'],
|
|
30
|
+
changeDetection: ChangeDetectionStrategy.OnPush
|
|
30
31
|
}]
|
|
31
32
|
}], ctorParameters: function () { return [{ type: i1.HeNodeService }]; }, propDecorators: { node: [{
|
|
32
33
|
type: Input
|
|
33
34
|
}] } });
|
|
34
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1taXNzaW5nLWxvb2t1cC1mYWN0b3JzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9ub2RlL25vZGUtbWlzc2luZy1sb29rdXAtZmFjdG9ycy9ub2RlLW1pc3NpbmctbG9va3VwLWZhY3RvcnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vc3JjL25vZGUvbm9kZS1taXNzaW5nLWxvb2t1cC1mYWN0b3JzL25vZGUtbWlzc2luZy1sb29rdXAtZmFjdG9ycy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7OztBQVc5QyxNQUFNLE9BQU8saUNBQWlDO0lBTzVDLFlBQ1MsV0FBMEI7UUFBMUIsZ0JBQVcsR0FBWCxXQUFXLENBQWU7UUFKNUIsWUFBTyxHQUFHLElBQUksQ0FBQztRQUNmLFNBQUksR0FBNEIsRUFBRSxDQUFDO0lBSXRDLENBQUM7SUFFQyxRQUFROztZQUNaLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLG9CQUFvQixpQ0FDbEQsSUFBSSxDQUFDLElBQUksS0FDWixTQUFTLEVBQUUsU0FBUyxDQUFDLFlBQVksSUFDakMsQ0FBQztZQUNILElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLENBQUM7S0FBQTs7K0hBbEJVLGlDQUFpQzttSEFBakMsaUNBQWlDLGdHQ1o5Qyw4akRBcURBOzRGRHpDYSxpQ0FBaUM7a0JBTjdDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGdDQUFnQztvQkFDMUMsV0FBVyxFQUFFLDhDQUE4QztvQkFDM0QsU0FBUyxFQUFFLENBQUMsOENBQThDLENBQUM7b0JBQzNELGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUNoRDtvR0FHUSxJQUFJO3NCQURWLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEYXRhU3RhdGUgfSBmcm9tICdAaGVzdGlhLWVhcnRoL2FwaSc7XG5pbXBvcnQgeyBKU09OTEQsIE5vZGVUeXBlIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9zY2hlbWEnO1xuXG5pbXBvcnQgeyBJTm9kZU1pc3NpbmdMb29rdXBMb2csIEhlTm9kZVNlcnZpY2UgfSBmcm9tICcuLi9ub2RlLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdoZS1ub2RlLW1pc3NpbmctbG9va3VwLWZhY3RvcnMnLFxuICB0ZW1wbGF0ZVVybDogJy4vbm9kZS1taXNzaW5nLWxvb2t1cC1mYWN0b3JzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbm9kZS1taXNzaW5nLWxvb2t1cC1mYWN0b3JzLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIE5vZGVNaXNzaW5nTG9va3VwRmFjdG9yc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBub2RlPzogSlNPTkxEPE5vZGVUeXBlPjtcblxuICBwdWJsaWMgbG9hZGluZyA9IHRydWU7XG4gIHB1YmxpYyBsb2dzOiBJTm9kZU1pc3NpbmdMb29rdXBMb2dbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBub2RlU2VydmljZTogSGVOb2RlU2VydmljZVxuICApIHsgfVxuXG4gIGFzeW5jIG5nT25Jbml0KCkge1xuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy5sb2dzID0gYXdhaXQgdGhpcy5ub2RlU2VydmljZS5nZXRNaXNzaW5nTG9va3Vwc0xvZyh7XG4gICAgICAuLi50aGlzLm5vZGUsXG4gICAgICBkYXRhU3RhdGU6IERhdGFTdGF0ZS5yZWNhbGN1bGF0ZWRcbiAgICB9KTtcbiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgfVxufVxuIiwiPGRpdiAqbmdJZj1cIiFsb2FkaW5nOyBlbHNlIGxvYWRlclwiIGNsYXNzPVwidGFibGUtY29udGFpbmVyIGRhdGEtdGFibGUtY29udGFpbmVyXCI+XG4gIDx0YWJsZSBjbGFzcz1cInRhYmxlIGlzLWZ1bGx3aWR0aCBpcy1ob3ZlcmFibGUgbWItMFwiPlxuICAgIDx0aGVhZCBjbGFzcz1cImhhcy1iYWNrZ3JvdW5kLWJsYWNrXCI+XG4gICAgICA8dHI+XG4gICAgICAgIDx0aD5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImhhcy10ZXh0LXdoaXRlXCI+RmlsZW5hbWU8L3NwYW4+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0aD5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImhhcy10ZXh0LXdoaXRlXCI+Q29sdW1uIFRpdGxlPC9zcGFuPlxuICAgICAgICA8L3RoPlxuICAgICAgICA8dGg+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJoYXMtdGV4dC13aGl0ZVwiPlJvdyAodGVybS5pZCk8L3NwYW4+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0aD5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImhhcy10ZXh0LXdoaXRlXCI+TW9kZWw8L3NwYW4+XG4gICAgICAgIDwvdGg+XG4gICAgICA8L3RyPlxuICAgIDwvdGhlYWQ+XG4gICAgPHRib2R5PlxuICAgICAgPHRyICpuZ0lmPVwiIWxvZ3MubGVuZ3RoXCI+XG4gICAgICAgIDx0ZCBjb2xzcGFuPVwiM1wiPlxuICAgICAgICAgIDxzcGFuPk5vIG1pc3NpbmcgbG9va3VwIGZhY3RvcnMuPC9zcGFuPlxuICAgICAgICA8L3RkPlxuICAgICAgPC90cj5cbiAgICAgIDx0ciAqbmdGb3I9XCJsZXQgbG9nIG9mIGxvZ3NcIj5cbiAgICAgICAgPHRkPnt7bG9nLmZpbGVuYW1lfX08L3RkPlxuICAgICAgICA8dGQ+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJsb2cuY29sdW1uOyBlbHNlIG5hXCI+e3tsb2cuY29sdW1ufX08L3NwYW4+XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIDx0ZD5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cImxvZy50ZXJtSWQ7IGVsc2UgbmFcIj57e2xvZy50ZXJtSWR9fTwvc3Bhbj5cbiAgICAgICAgPC90ZD5cbiAgICAgICAgPHRkPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJsb2cubW9kZWw7IGVsc2UgbmFcIj5cbiAgICAgICAgICAgIDxzcGFuPnt7bG9nLm1vZGVsfX08L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBsLTFcIiAqbmdJZj1cImxvZy5rZXlcIj4vIHt7bG9nLmtleX19PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwbC0xXCIgKm5nSWY9XCJsb2cudGVybSAmJiBsb2cudGVybSAhPT0gbG9nLnRlcm1JZFwiPi8ge3tsb2cudGVybX19PC9zcGFuPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3RkPlxuICAgICAgPC90cj5cbiAgICA8L3Rib2R5PlxuICA8L3RhYmxlPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjbG9hZGVyPlxuICA8ZGl2IGNsYXNzPVwiaGFzLXRleHQtY2VudGVyIHB5LTNcIj5cbiAgICA8ZmEtaWNvbiBpY29uPVwic3Bpbm5lclwiIFtwdWxzZV09XCJ0cnVlXCIgc2l6ZT1cImxnXCI+PC9mYS1pY29uPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbmE+XG4gIDxzcGFuPi08L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Component, Input } from '@angular/core';
|
|
1
|
+
import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
|
|
2
2
|
import { grouppedValueKeys } from '../../common/node-utils';
|
|
3
3
|
import { baseUrl } from '../../common/utils';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
@@ -30,13 +30,14 @@ export class NodeValueDetailsComponent {
|
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
32
|
NodeValueDetailsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: NodeValueDetailsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
33
|
-
NodeValueDetailsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: NodeValueDetailsComponent, selector: "he-node-value-details", inputs: { data: "data", nodeType: "nodeType", dataKey: "dataKey" }, ngImport: i0, template: "<ng-container *bindOnce=\"data\">\n <ng-container *ngIf=\"data?.nodes?.length === 1; else showTable\">\n <ng-container *ngFor=\"let key of keys\">\n <he-link-key-value [node]=\"data!.nodes[0]\" [nodeType]=\"nodeType\" [dataKey]=\"dataKey\" [key]=\"key\"></he-link-key-value>\n </ng-container>\n <ng-container *ngFor=\"let key of additionalKeys\">\n <he-link-key-value [node]=\"data!.nodes[0]\" [nodeType]=\"nodeType\" [dataKey]=\"dataKey\" [key]=\"key\"></he-link-key-value>\n </ng-container>\n </ng-container>\n</ng-container>\n\n<ng-template #showTable>\n <he-link-key-value [node]=\"data!.nodes[0]\" [nodeType]=\"nodeType\" [dataKey]=\"dataKey\" key=\"term\"></he-link-key-value>\n\n <div class=\"table-container mt-2\">\n <table class=\"table is-narrow\">\n <thead>\n <th *ngFor=\"let key of tableKeys\">\n <a [href]=\"baseUrl + '/schema/' + type + '#' + key\" target=\"_blank\"><b>{{key}}</b></a>\n </th>\n </thead>\n <tbody>\n <tr *ngFor=\"let node of data!.nodes\">\n <td *ngFor=\"let key of tableKeys\">\n <he-link-key-value [node]=\"node\" [nodeType]=\"nodeType\" [dataKey]=\"dataKey\" [key]=\"key\"></he-link-key-value>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n</ng-template>\n", styles: ["table{background-color:transparent;color:#fff}table::ng-deep he-link-key-value a:first-child,table::ng-deep he-link-key-value a:first-child+span{display:none}\n"], components: [{ type: i1.LinkKeyValueComponent, selector: "he-link-key-value", inputs: ["node", "nodeType", "dataKey", "key"] }], directives: [{ type: i2.BindOnceDirective, selector: "[bindOnce]", inputs: ["bindOnce"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
|
|
33
|
+
NodeValueDetailsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: NodeValueDetailsComponent, selector: "he-node-value-details", inputs: { data: "data", nodeType: "nodeType", dataKey: "dataKey" }, ngImport: i0, template: "<ng-container *bindOnce=\"data\">\n <ng-container *ngIf=\"data?.nodes?.length === 1; else showTable\">\n <ng-container *ngFor=\"let key of keys\">\n <he-link-key-value [node]=\"data!.nodes[0]\" [nodeType]=\"nodeType\" [dataKey]=\"dataKey\" [key]=\"key\"></he-link-key-value>\n </ng-container>\n <ng-container *ngFor=\"let key of additionalKeys\">\n <he-link-key-value [node]=\"data!.nodes[0]\" [nodeType]=\"nodeType\" [dataKey]=\"dataKey\" [key]=\"key\"></he-link-key-value>\n </ng-container>\n </ng-container>\n</ng-container>\n\n<ng-template #showTable>\n <he-link-key-value [node]=\"data!.nodes[0]\" [nodeType]=\"nodeType\" [dataKey]=\"dataKey\" key=\"term\"></he-link-key-value>\n\n <div class=\"table-container mt-2\">\n <table class=\"table is-narrow\">\n <thead>\n <th *ngFor=\"let key of tableKeys\">\n <a [href]=\"baseUrl + '/schema/' + type + '#' + key\" target=\"_blank\"><b>{{key}}</b></a>\n </th>\n </thead>\n <tbody>\n <tr *ngFor=\"let node of data!.nodes\">\n <td *ngFor=\"let key of tableKeys\">\n <he-link-key-value [node]=\"node\" [nodeType]=\"nodeType\" [dataKey]=\"dataKey\" [key]=\"key\"></he-link-key-value>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n</ng-template>\n", styles: ["table{background-color:transparent;color:#fff}table::ng-deep he-link-key-value a:first-child,table::ng-deep he-link-key-value a:first-child+span{display:none}\n"], components: [{ type: i1.LinkKeyValueComponent, selector: "he-link-key-value", inputs: ["node", "nodeType", "dataKey", "key"] }], directives: [{ type: i2.BindOnceDirective, selector: "[bindOnce]", inputs: ["bindOnce"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
34
34
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: NodeValueDetailsComponent, decorators: [{
|
|
35
35
|
type: Component,
|
|
36
36
|
args: [{
|
|
37
37
|
selector: 'he-node-value-details',
|
|
38
38
|
templateUrl: './node-value-details.component.html',
|
|
39
|
-
styleUrls: ['./node-value-details.component.scss']
|
|
39
|
+
styleUrls: ['./node-value-details.component.scss'],
|
|
40
|
+
changeDetection: ChangeDetectionStrategy.OnPush
|
|
40
41
|
}]
|
|
41
42
|
}], propDecorators: { data: [{
|
|
42
43
|
type: Input
|
|
@@ -45,4 +46,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
|
|
|
45
46
|
}], dataKey: [{
|
|
46
47
|
type: Input
|
|
47
48
|
}] } });
|
|
48
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS12YWx1ZS1kZXRhaWxzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9ub2RlL25vZGUtdmFsdWUtZGV0YWlscy9ub2RlLXZhbHVlLWRldGFpbHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vc3JjL25vZGUvbm9kZS12YWx1ZS1kZXRhaWxzL25vZGUtdmFsdWUtZGV0YWlscy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUdsRixPQUFPLEVBQUUsaUJBQWlCLEVBQWdCLE1BQU0seUJBQXlCLENBQUM7QUFDMUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7OztBQUU3QyxNQUFNLGNBQWMsR0FBRztJQUNyQix3QkFBd0IsRUFBRSxhQUFhO0lBQ3ZDLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxjQUFjLEVBQUUsaUJBQWlCO0lBQ2hFLE1BQU0sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsb0JBQW9CO0lBQ3hHLGtCQUFrQjtDQUNuQixDQUFDO0FBQ0YsTUFBTSxTQUFTLEdBQUc7SUFDaEIsUUFBUSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxpQkFBaUI7Q0FDM0UsQ0FBQztBQVFGLE1BQU0sT0FBTyx5QkFBeUI7SUFOdEM7UUFjUyxZQUFPLEdBQUcsT0FBTyxFQUFFLENBQUM7UUFDcEIsU0FBSSxHQUFHLENBQUMsT0FBTyxFQUFFLEdBQUcsaUJBQWlCLENBQUMsQ0FBQztRQUN2QyxtQkFBYyxHQUFHLGNBQWMsQ0FBQztRQUNoQyxjQUFTLEdBQUcsU0FBUyxDQUFDO0tBUzlCO0lBUEMsSUFBVyxJQUFJOztRQUNiLE9BQU8sTUFBQSxJQUFJLENBQUMsSUFBSSwwQ0FBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFdBQUMsT0FBQSxDQUFDLENBQUEsTUFBQSxJQUFJLENBQUMsSUFBSSwwQ0FBRSxLQUFLLEtBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFBLEVBQUEsQ0FBQyxDQUFDO0lBQy9GLENBQUM7O3VIQW5CVSx5QkFBeUI7MkdBQXpCLHlCQUF5QixpSUN0QnRDLG15Q0ErQkE7NEZEVGEseUJBQXlCO2tCQU5yQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSx1QkFBdUI7b0JBQ2pDLFdBQVcsRUFBRSxxQ0FBcUM7b0JBQ2xELFNBQVMsRUFBRSxDQUFDLHFDQUFxQyxDQUFDO29CQUNsRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDaEQ7OEJBR1EsSUFBSTtzQkFEVixLQUFLO2dCQUdDLFFBQVE7c0JBRGQsS0FBSztnQkFHQyxPQUFPO3NCQURiLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOb2RlVHlwZSB9IGZyb20gJ0BoZXN0aWEtZWFydGgvc2NoZW1hJztcblxuaW1wb3J0IHsgZ3JvdXBwZWRWYWx1ZUtleXMsIElHcm91cGVkTm9kZSB9IGZyb20gJy4uLy4uL2NvbW1vbi9ub2RlLXV0aWxzJztcbmltcG9ydCB7IGJhc2VVcmwgfSBmcm9tICcuLi8uLi9jb21tb24vdXRpbHMnO1xuXG5jb25zdCBhZGRpdGlvbmFsS2V5cyA9IFtcbiAgJ21ldGhvZE1vZGVsRGVzY3JpcHRpb24nLCAnZGVzY3JpcHRpb24nLFxuICAncHJpbWFyeScsICdlbWlzc2lvbkR1cmF0aW9uJywgJ29ic2VydmF0aW9ucycsICdzdGF0c0RlZmluaXRpb24nLFxuICAndGVybScsICdzb3VyY2UnLCAndmFyaWV0eScsICdyZWxpYWJpbGl0eScsICdwcmljZScsICdjdXJyZW5jeScsICdjb3N0JywgJ3JldmVudWUnLCAnZWNvbm9taWNWYWx1ZVNoYXJlJyxcbiAgJ2ltcGFjdEFzc2Vzc21lbnQnXG5dO1xuY29uc3QgdGFibGVLZXlzID0gW1xuICAnaW5wdXRzJywgJ3ZhbHVlJywgJ2RhdGVzJywgJ21ldGhvZE1vZGVsJywgJ21ldGhvZFRpZXInLCAnc3RhdHNEZWZpbml0aW9uJ1xuXTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaGUtbm9kZS12YWx1ZS1kZXRhaWxzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL25vZGUtdmFsdWUtZGV0YWlscy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL25vZGUtdmFsdWUtZGV0YWlscy5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBOb2RlVmFsdWVEZXRhaWxzQ29tcG9uZW50PFQ+IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KClcbiAgcHVibGljIGRhdGE/OiBJR3JvdXBlZE5vZGU8VD47XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBub2RlVHlwZT86IE5vZGVUeXBlO1xuICBASW5wdXQoKVxuICBwdWJsaWMgZGF0YUtleT86IHN0cmluZztcblxuICBwdWJsaWMgYmFzZVVybCA9IGJhc2VVcmwoKTtcbiAgcHVibGljIGtleXMgPSBbJ3ZhbHVlJywgLi4uZ3JvdXBwZWRWYWx1ZUtleXNdO1xuICBwdWJsaWMgYWRkaXRpb25hbEtleXMgPSBhZGRpdGlvbmFsS2V5cztcbiAgcHVibGljIHRhYmxlS2V5cyA9IHRhYmxlS2V5cztcblxuICBwdWJsaWMgZ2V0IHR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YT8ubm9kZXNbMF1bJ0B0eXBlJ107XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnRhYmxlS2V5cyA9IHRhYmxlS2V5cy5maWx0ZXIoa2V5ID0+ICh0aGlzLmRhdGE/Lm5vZGVzIHx8IFtdKS5zb21lKG5vZGUgPT4ga2V5IGluIG5vZGUpKTtcbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqYmluZE9uY2U9XCJkYXRhXCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJkYXRhPy5ub2Rlcz8ubGVuZ3RoID09PSAxOyBlbHNlIHNob3dUYWJsZVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGtleSBvZiBrZXlzXCI+XG4gICAgICA8aGUtbGluay1rZXktdmFsdWUgW25vZGVdPVwiZGF0YSEubm9kZXNbMF1cIiBbbm9kZVR5cGVdPVwibm9kZVR5cGVcIiBbZGF0YUtleV09XCJkYXRhS2V5XCIgW2tleV09XCJrZXlcIj48L2hlLWxpbmsta2V5LXZhbHVlPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGtleSBvZiBhZGRpdGlvbmFsS2V5c1wiPlxuICAgICAgPGhlLWxpbmsta2V5LXZhbHVlIFtub2RlXT1cImRhdGEhLm5vZGVzWzBdXCIgW25vZGVUeXBlXT1cIm5vZGVUeXBlXCIgW2RhdGFLZXldPVwiZGF0YUtleVwiIFtrZXldPVwia2V5XCI+PC9oZS1saW5rLWtleS12YWx1ZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlICNzaG93VGFibGU+XG4gIDxoZS1saW5rLWtleS12YWx1ZSBbbm9kZV09XCJkYXRhIS5ub2Rlc1swXVwiIFtub2RlVHlwZV09XCJub2RlVHlwZVwiIFtkYXRhS2V5XT1cImRhdGFLZXlcIiBrZXk9XCJ0ZXJtXCI+PC9oZS1saW5rLWtleS12YWx1ZT5cblxuICA8ZGl2IGNsYXNzPVwidGFibGUtY29udGFpbmVyIG10LTJcIj5cbiAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBpcy1uYXJyb3dcIj5cbiAgICAgIDx0aGVhZD5cbiAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBrZXkgb2YgdGFibGVLZXlzXCI+XG4gICAgICAgICAgPGEgW2hyZWZdPVwiYmFzZVVybCArICcvc2NoZW1hLycgKyB0eXBlICsgJyMnICsga2V5XCIgdGFyZ2V0PVwiX2JsYW5rXCI+PGI+e3trZXl9fTwvYj48L2E+XG4gICAgICAgIDwvdGg+XG4gICAgICA8L3RoZWFkPlxuICAgICAgPHRib2R5PlxuICAgICAgICA8dHIgKm5nRm9yPVwibGV0IG5vZGUgb2YgZGF0YSEubm9kZXNcIj5cbiAgICAgICAgICA8dGQgKm5nRm9yPVwibGV0IGtleSBvZiB0YWJsZUtleXNcIj5cbiAgICAgICAgICAgIDxoZS1saW5rLWtleS12YWx1ZSBbbm9kZV09XCJub2RlXCIgW25vZGVUeXBlXT1cIm5vZGVUeXBlXCIgW2RhdGFLZXldPVwiZGF0YUtleVwiIFtrZXldPVwia2V5XCI+PC9oZS1saW5rLWtleS12YWx1ZT5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgPC90Ym9keT5cbiAgICA8L3RhYmxlPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|