@provoly/dashboard 0.12.5 → 0.12.7
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/esm2022/dataset/components/dataset-detail/dataset-detail.component.mjs +1 -1
- package/esm2022/lib/core/store/data-source/data-source.effects.mjs +4 -3
- package/esm2022/lib/core/store/data-source/data-source.reducer.mjs +24 -2
- package/esm2022/lib/dashboard/components/widgets/datasource-selector/datasource-selector.component.mjs +97 -0
- package/esm2022/lib/dashboard/components/widgets/header/widget-header.component.mjs +29 -62
- package/esm2022/lib/dashboard/components/widgets/public-api.mjs +2 -1
- package/esm2022/lib/dashboard/dashboard.module.mjs +8 -4
- package/esm2022/presentation/components/add-edit-presentation/add-edit-presentation.component.mjs +4 -1
- package/esm2022/restitution/components/restitution/restitution.component.mjs +7 -24
- package/esm2022/restitution/style/css.component.mjs +2 -2
- package/esm2022/widgets/widget-aggregated-chart/component/widget-aggregated-chart.component.mjs +3 -3
- package/esm2022/widgets/widget-chart/component/widget-chart.component.mjs +3 -3
- package/esm2022/widgets/widget-detail/component/widget-detail.component.mjs +1 -1
- package/esm2022/widgets/widget-graph/component/widget-graph.component.mjs +3 -3
- package/esm2022/widgets/widget-map/component/widget-map.component.mjs +19 -12
- package/esm2022/widgets/widget-table/component/widget-table.component.mjs +3 -3
- package/esm2022/widgets/widget-tile/component/widget-tile.component.mjs +3 -3
- package/fesm2022/provoly-dashboard-dataset.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-presentation.mjs +3 -0
- package/fesm2022/provoly-dashboard-presentation.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-restitution.mjs +8 -25
- package/fesm2022/provoly-dashboard-restitution.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-widgets-widget-aggregated-chart.mjs +2 -2
- package/fesm2022/provoly-dashboard-widgets-widget-aggregated-chart.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-widgets-widget-chart.mjs +2 -2
- package/fesm2022/provoly-dashboard-widgets-widget-chart.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-widgets-widget-detail.mjs +1 -1
- package/fesm2022/provoly-dashboard-widgets-widget-detail.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-widgets-widget-graph.mjs +2 -2
- package/fesm2022/provoly-dashboard-widgets-widget-graph.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-widgets-widget-map.mjs +18 -11
- package/fesm2022/provoly-dashboard-widgets-widget-map.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-widgets-widget-table.mjs +2 -2
- package/fesm2022/provoly-dashboard-widgets-widget-table.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-widgets-widget-tile.mjs +2 -2
- package/fesm2022/provoly-dashboard-widgets-widget-tile.mjs.map +1 -1
- package/fesm2022/provoly-dashboard.mjs +150 -72
- package/fesm2022/provoly-dashboard.mjs.map +1 -1
- package/lib/core/store/data-source/data-source.effects.d.ts +1 -0
- package/lib/dashboard/components/widgets/datasource-selector/datasource-selector.component.d.ts +34 -0
- package/lib/dashboard/components/widgets/header/widget-header.component.d.ts +5 -16
- package/lib/dashboard/components/widgets/public-api.d.ts +1 -0
- package/lib/dashboard/dashboard.module.d.ts +15 -14
- package/package.json +37 -37
- package/restitution/components/restitution/restitution.component.d.ts +3 -9
- package/restitution/style/_o-restitution.scss +0 -4
- package/schematics/ng-add/index.js +58 -19
- package/schematics/ng-add/index.js.map +1 -1
- package/schematics/ng-add/index.spec.js +0 -2
- package/schematics/ng-add/index.spec.js.map +1 -1
- package/styles/components/_o-datasources.scss +17 -56
- package/styles/components/_o-widget.scss +40 -32
- package/styles-theme/components-theme/_o-datasources.theme.scss +8 -5
- package/widgets/widget-map/component/widget-map.component.d.ts +5 -2
|
@@ -122,7 +122,7 @@ export class WidgetDetailComponent extends BaseWidgetComponent {
|
|
|
122
122
|
return this.fields.find((field) => field.id === property.attribute.field)?.type === FieldType.RAW;
|
|
123
123
|
}
|
|
124
124
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: WidgetDetailComponent, deps: [{ token: i1.Store }, { token: i2.PryI18nService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
125
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: WidgetDetailComponent, selector: "pry-widget-detail", usesInheritance: true, ngImport: i0, template: "<pry-widget-detail-css></pry-widget-detail-css>\n<div class=\"o-widget o-widget--detail\">\n <pry-widget-header\n *ngIf=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [manifest]=\"detailledWidgetManifest$ | async\"\n [additionalOptions]=\"additionalOptions$ | async\"\n [headerOptions]=\"(displayHeader$ | async) ?? {}\"\n [displayCount]=\"false\"\n >\n </pry-widget-header>\n\n <p class=\"is-empty\" *ngIf=\"!(itemAndCategories$ | async) || (itemAndCategories$ | async)?.length === 0\">\n {{ '@pry.widget.detail.noItems' | i18n }}\n </p>\n\n <div class=\"o-widget--detail__content\" *ngFor=\"let couple of itemAndCategories$ | async; let itemIndex = index\">\n <ng-container *ngIf=\"!((options$ | async)?.header === false)\">\n <div\n class=\"o-widget--detail__header\"\n (contextmenu)=\"contextMenu($event, couple.item)\"\n title=\"{{ '@pry.widget.itemId' | i18n }}: {{ couple.item.id }}\"\n >\n <img [height]=\"25\" [width]=\"25\" [src]=\"couple.item | translateItemToSymbol | async\" [alt]=\"couple\" />\n <h3 class=\"o-widget--detail__header__title\">\n {{ '@pry.widget.class' | i18n }}:\n {{\n couple.item.oClass\n | translateId\n : {\n type: 'class',\n output: 'name'\n }\n | async\n }}\n </h3>\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-only\"\n [attr.aria-expanded]=\"!(!!panelOpened[itemIndex] && panelOpened[itemIndex].item)\"\n [attr.aria-controls]=\"'item-' + widgetId + '-' + itemIndex\"\n (click)=\"toggle(itemIndex)\"\n >\n <pry-icon *ngIf=\"!!panelOpened[itemIndex] && panelOpened[itemIndex].item\" iconSvg=\"fleche_haut\"></pry-icon>\n <pry-icon *ngIf=\"!(!!panelOpened[itemIndex] && panelOpened[itemIndex].item)\" iconSvg=\"fleche_bas\"></pry-icon>\n </button>\n </div>\n <div class=\"o-widget--detail__datas\" *ngIf=\"hasMetadata(couple.item)\">\n <pry-metadata [item]=\"couple.item\"></pry-metadata>\n </div>\n </ng-container>\n\n <div\n *ngIf=\"!!panelOpened[itemIndex] && panelOpened[itemIndex].item\"\n (contextmenu)=\"contextMenu($event, couple.item)\"\n class=\"o-widget--detail__datas\"\n [id]=\"'item-' + widgetId + '-' + itemIndex\"\n >\n <ng-container *ngFor=\"let category of couple.categories; let categoryIndex = index\">\n <div class=\"o-widget--detail__category\">\n <p>{{ '@pry.widget.detail.category' | i18n }}: {{ category.name }}</p>\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-only\"\n [attr.aria-expanded]=\"!(panelOpened[itemIndex] && panelOpened[itemIndex].categories[categoryIndex])\"\n [attr.aria-controls]=\"'properties-' + widgetId + '-' + itemIndex + '-' + categoryIndex\"\n (click)=\"toggle(itemIndex, categoryIndex)\"\n >\n <pry-icon\n *ngIf=\"panelOpened[itemIndex] && panelOpened[itemIndex].categories[categoryIndex]\"\n iconSvg=\"fleche_haut\"\n >\n </pry-icon>\n <pry-icon\n *ngIf=\"!(panelOpened[itemIndex] && panelOpened[itemIndex].categories[categoryIndex])\"\n iconSvg=\"fleche_bas\"\n >\n </pry-icon>\n </button>\n </div>\n\n <div\n class=\"o-properties\"\n [id]=\"'properties-' + widgetId + '-' + itemIndex + '-' + categoryIndex\"\n *ngIf=\"panelOpened[itemIndex] && panelOpened[itemIndex].categories[categoryIndex]\"\n >\n <ul class=\"o-properties__list\">\n <ng-container>\n <ng-container *ngFor=\"let property of category.properties\">\n <li\n *ngFor=\"let value of getValue(couple.item, property.attribute); let i = index; let c = count\"\n class=\"o-properties__list__item\"\n >\n <p class=\"o-properties__list__item__label\" *ngIf=\"i === 0\">{{ property.name }}:</p>\n <p class=\"o-properties__list__item__value\" *ngIf=\"!isRaw(property)\">{{ value?.value }}</p>\n <p class=\"o-properties__list__item__raw\" *ngIf=\"isRaw(property)\">\n <pry-vizualize-raw [item]=\"couple.item\" [propertyName]=\"property.name\"></pry-vizualize-raw>\n </p>\n <ng-container *ngIf=\"hasMetadata(value)\">\n <pry-metadata [item]=\"value\"></pry-metadata>\n </ng-container>\n </li>\n </ng-container>\n </ng-container>\n </ul>\n </div>\n </ng-container>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MetadataComponent, selector: "pry-metadata", inputs: ["item"] }, { kind: "component", type: i2.PryWidgetHeaderComponent, selector: "pry-widget-header", inputs: ["manifest", "additionalOptions", "headerOptions", "displayCount", "datasourceIds
|
|
125
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: WidgetDetailComponent, selector: "pry-widget-detail", usesInheritance: true, ngImport: i0, template: "<pry-widget-detail-css></pry-widget-detail-css>\n<div class=\"o-widget o-widget--detail\">\n <pry-widget-header\n *ngIf=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [manifest]=\"detailledWidgetManifest$ | async\"\n [additionalOptions]=\"additionalOptions$ | async\"\n [headerOptions]=\"(displayHeader$ | async) ?? {}\"\n [displayCount]=\"false\"\n >\n </pry-widget-header>\n\n <p class=\"is-empty\" *ngIf=\"!(itemAndCategories$ | async) || (itemAndCategories$ | async)?.length === 0\">\n {{ '@pry.widget.detail.noItems' | i18n }}\n </p>\n\n <div class=\"o-widget--detail__content\" *ngFor=\"let couple of itemAndCategories$ | async; let itemIndex = index\">\n <ng-container *ngIf=\"!((options$ | async)?.header === false)\">\n <div\n class=\"o-widget--detail__header\"\n (contextmenu)=\"contextMenu($event, couple.item)\"\n title=\"{{ '@pry.widget.itemId' | i18n }}: {{ couple.item.id }}\"\n >\n <img [height]=\"25\" [width]=\"25\" [src]=\"couple.item | translateItemToSymbol | async\" [alt]=\"couple\" />\n <h3 class=\"o-widget--detail__header__title\">\n {{ '@pry.widget.class' | i18n }}:\n {{\n couple.item.oClass\n | translateId\n : {\n type: 'class',\n output: 'name'\n }\n | async\n }}\n </h3>\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-only\"\n [attr.aria-expanded]=\"!(!!panelOpened[itemIndex] && panelOpened[itemIndex].item)\"\n [attr.aria-controls]=\"'item-' + widgetId + '-' + itemIndex\"\n (click)=\"toggle(itemIndex)\"\n >\n <pry-icon *ngIf=\"!!panelOpened[itemIndex] && panelOpened[itemIndex].item\" iconSvg=\"fleche_haut\"></pry-icon>\n <pry-icon *ngIf=\"!(!!panelOpened[itemIndex] && panelOpened[itemIndex].item)\" iconSvg=\"fleche_bas\"></pry-icon>\n </button>\n </div>\n <div class=\"o-widget--detail__datas\" *ngIf=\"hasMetadata(couple.item)\">\n <pry-metadata [item]=\"couple.item\"></pry-metadata>\n </div>\n </ng-container>\n\n <div\n *ngIf=\"!!panelOpened[itemIndex] && panelOpened[itemIndex].item\"\n (contextmenu)=\"contextMenu($event, couple.item)\"\n class=\"o-widget--detail__datas\"\n [id]=\"'item-' + widgetId + '-' + itemIndex\"\n >\n <ng-container *ngFor=\"let category of couple.categories; let categoryIndex = index\">\n <div class=\"o-widget--detail__category\">\n <p>{{ '@pry.widget.detail.category' | i18n }}: {{ category.name }}</p>\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-only\"\n [attr.aria-expanded]=\"!(panelOpened[itemIndex] && panelOpened[itemIndex].categories[categoryIndex])\"\n [attr.aria-controls]=\"'properties-' + widgetId + '-' + itemIndex + '-' + categoryIndex\"\n (click)=\"toggle(itemIndex, categoryIndex)\"\n >\n <pry-icon\n *ngIf=\"panelOpened[itemIndex] && panelOpened[itemIndex].categories[categoryIndex]\"\n iconSvg=\"fleche_haut\"\n >\n </pry-icon>\n <pry-icon\n *ngIf=\"!(panelOpened[itemIndex] && panelOpened[itemIndex].categories[categoryIndex])\"\n iconSvg=\"fleche_bas\"\n >\n </pry-icon>\n </button>\n </div>\n\n <div\n class=\"o-properties\"\n [id]=\"'properties-' + widgetId + '-' + itemIndex + '-' + categoryIndex\"\n *ngIf=\"panelOpened[itemIndex] && panelOpened[itemIndex].categories[categoryIndex]\"\n >\n <ul class=\"o-properties__list\">\n <ng-container>\n <ng-container *ngFor=\"let property of category.properties\">\n <li\n *ngFor=\"let value of getValue(couple.item, property.attribute); let i = index; let c = count\"\n class=\"o-properties__list__item\"\n >\n <p class=\"o-properties__list__item__label\" *ngIf=\"i === 0\">{{ property.name }}:</p>\n <p class=\"o-properties__list__item__value\" *ngIf=\"!isRaw(property)\">{{ value?.value }}</p>\n <p class=\"o-properties__list__item__raw\" *ngIf=\"isRaw(property)\">\n <pry-vizualize-raw [item]=\"couple.item\" [propertyName]=\"property.name\"></pry-vizualize-raw>\n </p>\n <ng-container *ngIf=\"hasMetadata(value)\">\n <pry-metadata [item]=\"value\"></pry-metadata>\n </ng-container>\n </li>\n </ng-container>\n </ng-container>\n </ul>\n </div>\n </ng-container>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MetadataComponent, selector: "pry-metadata", inputs: ["item"] }, { kind: "component", type: i2.PryWidgetHeaderComponent, selector: "pry-widget-header", inputs: ["manifest", "additionalOptions", "headerOptions", "displayCount", "datasourceIds", "widgetIndex"], outputs: ["manifestModified"] }, { kind: "component", type: i2.VizualizeRawComponent, selector: "pry-vizualize-raw", inputs: ["item", "propertyName", "alt"] }, { kind: "component", type: i2.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: i4.PryWidgetDetailCssComponent, selector: "pry-widget-detail-css" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.TranslateIdPipe, name: "translateId" }, { kind: "pipe", type: i2.TranslateItemToSymbolPipe, name: "translateItemToSymbol" }, { kind: "pipe", type: i2.I18nPipe, name: "i18n" }] }); }
|
|
126
126
|
}
|
|
127
127
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: WidgetDetailComponent, decorators: [{
|
|
128
128
|
type: Component,
|
|
@@ -433,11 +433,11 @@ export class WidgetGraphComponent extends DataWidgetComponent {
|
|
|
433
433
|
});
|
|
434
434
|
}
|
|
435
435
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: WidgetGraphComponent, deps: [{ token: i1.Store }, { token: i2.TooltipFactoryService }, { token: i2.PryI18nService }, { token: i2.SymbolService }, { token: i3.DomSanitizer }, { token: i0.ElementRef }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
436
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: WidgetGraphComponent, selector: "pry-widget-graph", viewQueries: [{ propertyName: "canvas", first: true, predicate: ["canvas"], descendants: true }, { propertyName: "tooltip", first: true, predicate: ["tooltip"], descendants: true, read: ViewContainerRef }], usesInheritance: true, ngImport: i0, template: "<pry-widget-force-graph-css></pry-widget-force-graph-css>\n<div class=\"o-widget o-widget--graph\">\n <pry-widget-header\n [datasourceIds
|
|
436
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: WidgetGraphComponent, selector: "pry-widget-graph", viewQueries: [{ propertyName: "canvas", first: true, predicate: ["canvas"], descendants: true }, { propertyName: "tooltip", first: true, predicate: ["tooltip"], descendants: true, read: ViewContainerRef }], usesInheritance: true, ngImport: i0, template: "<pry-widget-force-graph-css></pry-widget-force-graph-css>\n<div class=\"o-widget o-widget--graph\">\n <pry-widget-header\n [datasourceIds]=\"(datasourceIds$ | async) ?? []\"\n *ngIf=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [manifest]=\"manifest\"\n (manifestModified)=\"manifestModified.emit($event)\"\n [headerOptions]=\"(displayHeader$ | async) ?? {}\"\n #header\n >\n <pry-settings\n (saveTriggered)=\"emitManifest()\"\n [headerPresent]=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [header]=\"header\"\n [open$]=\"open$\"\n class=\"o-settings\"\n >\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"graph_layout\">{{ '@pry.widget.graph.layout' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeLayout($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"layouts\"\n [ngModel]=\"optionsCopy!.layout\"\n bindLabel=\"key\"\n bindValue=\"key\"\n id=\"graph_layout\"\n class=\"a-pry-select\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\">\n <pry-range\n [ngModel]=\"optionsCopy!.nodeRadius\"\n (ngModelChange)=\"changeNodeRadius($event)\"\n labelTranslate=\"@pry.widget.graph.nodeRadius\"\n min=\"10\"\n max=\"200\"\n ></pry-range>\n </div>\n </pry-settings>\n </pry-widget-header>\n <div class=\"no-result\" *ngIf=\"(allItemsWithImages$ | async)?.length === 0\">\n <img\n class=\"no-result__search\"\n src=\"../../../assets/svgs/pry_recherche_pas_de_resultat.svg\"\n alt=\"{{ '@pry.widget.table.empty' | i18n }}\"\n aria-hidden=\"true\"\n />\n <span class=\"no-result__text\">{{ '@pry.widget.graph.empty' | i18n }}</span>\n </div>\n <div class=\"m-btn-group -selection-choice\" [style.transform]=\"bottomLeft$ | async\">\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-only\"\n (click)=\"changeMode('move')\"\n [class.-selected]=\"mode === 'move'\"\n [pryTooltip]=\"infoTooltipMove\"\n pryTooltipPosition=\"bottom\"\n aria-describedby=\"infoTooltipMove_widgetMap\"\n >\n <pry-icon iconSvg=\"move\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.widget.graph.move' | i18n }}</span>\n </button>\n\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-only\"\n (click)=\"changeMode('rectangle')\"\n [class.-selected]=\"mode === 'rectangle'\"\n [pryTooltip]=\"infoTooltipRect\"\n pryTooltipPosition=\"bottom\"\n aria-describedby=\"infoTooltipRect_widgetMap\"\n >\n <pry-icon iconSvg=\"rectangle\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.widget.graph.rectangle' | i18n }}</span>\n </button>\n </div>\n\n <canvas\n #canvas\n class=\"o-widget--graph__canvas\"\n (mousemove)=\"onMouseMove($event)\"\n (mousedown)=\"onMouseDown($event)\"\n (mouseup)=\"onMouseUp($event)\"\n (mouseleave)=\"onMouseUp($event, true)\"\n (contextmenu)=\"contextMenu($event)\"\n ></canvas>\n\n <div class=\"selection-rectangle\" #selectionRectangle></div>\n\n <div\n class=\"m-tooltip m-tooltip--popup noevent\"\n [style.display]=\"(tooltip$ | async)?.display ? 'block' : 'none'\"\n [style.left.px]=\"((tooltip$ | async)?.x ?? 0) + 50\"\n [style.top.px]=\"((tooltip$ | async)?.y ?? 0) + 50\"\n >\n <div #tooltip></div>\n </div>\n</div>\n\n<ng-template #infoTooltipMove>\n <div class=\"m-tooltip\" role=\"tooltip\" id=\"infoTooltipMove_widgetMap\" aria-hidden=\"true\">\n <span class=\"m-tooltip__text\">{{ '@pry.widget.graph.move' | i18n }}</span>\n </div>\n</ng-template>\n\n<ng-template #infoTooltipRect>\n <div class=\"m-tooltip\" role=\"tooltip\" id=\"infoTooltipRect_widgetMap\" aria-hidden=\"true\">\n <span class=\"m-tooltip__text\">{{ '@pry.widget.graph.rectangle' | i18n }}</span>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.SettingsComponent, selector: "pry-settings", inputs: ["widgetIndex", "isDisable", "headerPresent", "open$", "header"], outputs: ["saveTriggered"] }, { kind: "component", type: i2.PryWidgetHeaderComponent, selector: "pry-widget-header", inputs: ["manifest", "additionalOptions", "headerOptions", "displayCount", "datasourceIds", "widgetIndex"], outputs: ["manifestModified"] }, { kind: "component", type: i2.PrySelectComponent, selector: "pry-select", inputs: ["labelTranslate", "baseTranslate", "translationFn", "translationFnArgs", "clearable", "multiple", "multipleClearRight", "placeholder", "isForm", "required", "name", "readonly", "items", "itemsAsOption", "bindData", "bindValue", "bindLabel", "bindIcon", "iconSize", "templateLabel", "templateOption", "autocomplete"] }, { kind: "component", type: i2.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "directive", type: i2.PryTooltipDirective, selector: "[pryTooltip]", inputs: ["pryTooltip", "styleReversed", "pryTooltipContext", "pryTooltipPosition", "pryTooltipShowDelay"] }, { kind: "component", type: i2.PryRangeComponent, selector: "pry-range", inputs: ["min", "max", "step", "disabled", "labelTranslate"] }, { kind: "component", type: i6.PryWidgetForceGraphCssComponent, selector: "pry-widget-force-graph-css" }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.I18nPipe, name: "i18n" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
437
437
|
}
|
|
438
438
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: WidgetGraphComponent, decorators: [{
|
|
439
439
|
type: Component,
|
|
440
|
-
args: [{ selector: 'pry-widget-graph', changeDetection: ChangeDetectionStrategy.OnPush, template: "<pry-widget-force-graph-css></pry-widget-force-graph-css>\n<div class=\"o-widget o-widget--graph\">\n <pry-widget-header\n [datasourceIds
|
|
440
|
+
args: [{ selector: 'pry-widget-graph', changeDetection: ChangeDetectionStrategy.OnPush, template: "<pry-widget-force-graph-css></pry-widget-force-graph-css>\n<div class=\"o-widget o-widget--graph\">\n <pry-widget-header\n [datasourceIds]=\"(datasourceIds$ | async) ?? []\"\n *ngIf=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [manifest]=\"manifest\"\n (manifestModified)=\"manifestModified.emit($event)\"\n [headerOptions]=\"(displayHeader$ | async) ?? {}\"\n #header\n >\n <pry-settings\n (saveTriggered)=\"emitManifest()\"\n [headerPresent]=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [header]=\"header\"\n [open$]=\"open$\"\n class=\"o-settings\"\n >\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"graph_layout\">{{ '@pry.widget.graph.layout' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeLayout($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"layouts\"\n [ngModel]=\"optionsCopy!.layout\"\n bindLabel=\"key\"\n bindValue=\"key\"\n id=\"graph_layout\"\n class=\"a-pry-select\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\">\n <pry-range\n [ngModel]=\"optionsCopy!.nodeRadius\"\n (ngModelChange)=\"changeNodeRadius($event)\"\n labelTranslate=\"@pry.widget.graph.nodeRadius\"\n min=\"10\"\n max=\"200\"\n ></pry-range>\n </div>\n </pry-settings>\n </pry-widget-header>\n <div class=\"no-result\" *ngIf=\"(allItemsWithImages$ | async)?.length === 0\">\n <img\n class=\"no-result__search\"\n src=\"../../../assets/svgs/pry_recherche_pas_de_resultat.svg\"\n alt=\"{{ '@pry.widget.table.empty' | i18n }}\"\n aria-hidden=\"true\"\n />\n <span class=\"no-result__text\">{{ '@pry.widget.graph.empty' | i18n }}</span>\n </div>\n <div class=\"m-btn-group -selection-choice\" [style.transform]=\"bottomLeft$ | async\">\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-only\"\n (click)=\"changeMode('move')\"\n [class.-selected]=\"mode === 'move'\"\n [pryTooltip]=\"infoTooltipMove\"\n pryTooltipPosition=\"bottom\"\n aria-describedby=\"infoTooltipMove_widgetMap\"\n >\n <pry-icon iconSvg=\"move\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.widget.graph.move' | i18n }}</span>\n </button>\n\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-only\"\n (click)=\"changeMode('rectangle')\"\n [class.-selected]=\"mode === 'rectangle'\"\n [pryTooltip]=\"infoTooltipRect\"\n pryTooltipPosition=\"bottom\"\n aria-describedby=\"infoTooltipRect_widgetMap\"\n >\n <pry-icon iconSvg=\"rectangle\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.widget.graph.rectangle' | i18n }}</span>\n </button>\n </div>\n\n <canvas\n #canvas\n class=\"o-widget--graph__canvas\"\n (mousemove)=\"onMouseMove($event)\"\n (mousedown)=\"onMouseDown($event)\"\n (mouseup)=\"onMouseUp($event)\"\n (mouseleave)=\"onMouseUp($event, true)\"\n (contextmenu)=\"contextMenu($event)\"\n ></canvas>\n\n <div class=\"selection-rectangle\" #selectionRectangle></div>\n\n <div\n class=\"m-tooltip m-tooltip--popup noevent\"\n [style.display]=\"(tooltip$ | async)?.display ? 'block' : 'none'\"\n [style.left.px]=\"((tooltip$ | async)?.x ?? 0) + 50\"\n [style.top.px]=\"((tooltip$ | async)?.y ?? 0) + 50\"\n >\n <div #tooltip></div>\n </div>\n</div>\n\n<ng-template #infoTooltipMove>\n <div class=\"m-tooltip\" role=\"tooltip\" id=\"infoTooltipMove_widgetMap\" aria-hidden=\"true\">\n <span class=\"m-tooltip__text\">{{ '@pry.widget.graph.move' | i18n }}</span>\n </div>\n</ng-template>\n\n<ng-template #infoTooltipRect>\n <div class=\"m-tooltip\" role=\"tooltip\" id=\"infoTooltipRect_widgetMap\" aria-hidden=\"true\">\n <span class=\"m-tooltip__text\">{{ '@pry.widget.graph.rectangle' | i18n }}</span>\n </div>\n</ng-template>\n" }]
|
|
441
441
|
}], ctorParameters: function () { return [{ type: i1.Store }, { type: i2.TooltipFactoryService }, { type: i2.PryI18nService }, { type: i2.SymbolService }, { type: i3.DomSanitizer }, { type: i0.ElementRef }, { type: i0.Injector }]; }, propDecorators: { canvas: [{
|
|
442
442
|
type: ViewChild,
|
|
443
443
|
args: ['canvas']
|
|
@@ -445,4 +445,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImpor
|
|
|
445
445
|
type: ViewChild,
|
|
446
446
|
args: ['tooltip', { read: ViewContainerRef }]
|
|
447
447
|
}] } });
|
|
448
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LWdyYXBoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL3dpZGdldHMvd2lkZ2V0LWdyYXBoL2NvbXBvbmVudC93aWRnZXQtZ3JhcGguY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvd2lkZ2V0cy93aWRnZXQtZ3JhcGgvY29tcG9uZW50L3dpZGdldC1ncmFwaC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFJVCxTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFFTCxjQUFjLEVBQ2Qsa0JBQWtCLEVBQ2xCLGdCQUFnQixFQUNoQixrQkFBa0IsRUFDbEIsbUJBQW1CLEVBS25CLG9CQUFvQixFQUNwQixzQkFBc0IsRUFHdEIsb0JBQW9CLEVBQ3JCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNoSCxPQUFPLEVBQ0wsU0FBUyxFQUNULGVBQWUsRUFDZixhQUFhLEVBQ2IsS0FBSyxFQUNMLE1BQU0sRUFDTixJQUFJLEVBQ0osR0FBRyxFQUNILFFBQVEsRUFFUixPQUFPLEVBQ1IsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFckMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7Ozs7O0FBTzdELE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxtQkFBbUI7SUFnQzNELFlBQ0UsS0FBaUIsRUFDVCxx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QUFDLFFBQVE7Z0JBQytCLE9BQU87c0JBQXhELFNBQVM7dUJBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgSW5qZWN0b3IsXG4gIE9uRGVzdHJveSxcbiAgVmlld0NoaWxkLFxuICBWaWV3Q29udGFpbmVyUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7XG4gIENsYXNzLFxuICBDbGFzc1NlbGVjdG9ycyxcbiAgQ29udGV4dE1lbnVBY3Rpb25zLFxuICBEYXNoYm9hcmRBY3Rpb25zLFxuICBEYXNoYm9hcmRTZWxlY3RvcnMsXG4gIERhdGFXaWRnZXRDb21wb25lbnQsXG4gIEdyYXBoV2lkZ2V0T3B0aW9ucyxcbiAgSXRlbSxcbiAgUHJ5STE4blNlcnZpY2UsXG4gIFJlbGF0aW9uVHlwZSxcbiAgUmVsYXRpb25UeXBlc0FjdGlvbnMsXG4gIFJlbGF0aW9uVHlwZXNTZWxlY3RvcnMsXG4gIFN5bWJvbFNlcnZpY2UsXG4gIFRvb2x0aXBGYWN0b3J5U2VydmljZSxcbiAgV0lER0VUX0hFQURFUl9IRUlHSFRcbn0gZnJvbSAnQHByb3ZvbHkvZGFzaGJvYXJkJztcbmltcG9ydCB7IGZvcmNlQ2VudGVyLCBmb3JjZUNvbGxpZGUsIGZvcmNlTGluaywgZm9yY2VNYW55Qm9keSwgZm9yY2VTaW11bGF0aW9uLCBmb3JjZVgsIGZvcmNlWSB9IGZyb20gJ2QzLWZvcmNlJztcbmltcG9ydCB7XG4gIGF1ZGl0VGltZSxcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBjb21iaW5lTGF0ZXN0LFxuICBkZWxheSxcbiAgZmlsdGVyLFxuICBmcm9tLFxuICBtYXAsXG4gIG1lcmdlTWFwLFxuICBPYnNlcnZhYmxlLFxuICBTdWJqZWN0XG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgUHJ5TGluaywgUHJ5Tm9kZSB9IGZyb20gJy4uL2xheW91dC9ub2RlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBzaW1wbGVTaW11bGF0aW9uIH0gZnJvbSAnLi4vbGF5b3V0L3NpbXBsZS5mdW5jdGlvbic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ByeS13aWRnZXQtZ3JhcGgnLFxuICB0ZW1wbGF0ZVVybDogJy4vd2lkZ2V0LWdyYXBoLmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgV2lkZ2V0R3JhcGhDb21wb25lbnQgZXh0ZW5kcyBEYXRhV2lkZ2V0Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgb3B0aW9ucyQ6IE9ic2VydmFibGU8R3JhcGhXaWRnZXRPcHRpb25zPjtcbiAgb3B0aW9ucyE6IEdyYXBoV2lkZ2V0T3B0aW9ucztcbiAgb3B0aW9uc0NvcHk/OiBHcmFwaFdpZGdldE9wdGlvbnM7XG4gIHNlbGVjdGVkSWRzJDogT2JzZXJ2YWJsZTxzdHJpbmdbXT47XG4gIEBWaWV3Q2hpbGQoJ2NhbnZhcycpIGNhbnZhcyE6IEVsZW1lbnRSZWY8SFRNTENhbnZhc0VsZW1lbnQ+O1xuICBAVmlld0NoaWxkKCd0b29sdGlwJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pIHRvb2x0aXAhOiBWaWV3Q29udGFpbmVyUmVmO1xuICBjbGFzc2VzJDogT2JzZXJ2YWJsZTxDbGFzc1tdPjtcbiAgdmlld1NpemUkOiBPYnNlcnZhYmxlPFtudW1iZXIsIG51bWJlcl0+O1xuICBjb250ZXh0OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgfCBudWxsID0gbnVsbDtcbiAgc2ltdWxhdGlvbiE6IGFueTtcbiAgYWxsSXRlbXNXaXRoSW1hZ2VzJDogT2JzZXJ2YWJsZTx7IGl0ZW06IEl0ZW07IGltYWdlOiBIVE1MQ2FudmFzRWxlbWVudCB9W10+O1xuICBpdGVtc0FzTm9kZXM6IFByeU5vZGVbXSA9IFtdO1xuICByZWxhdGlvbnNBc0xpbmtzOiBQcnlMaW5rW10gPSBbXTtcbiAgZHJhZ2dlZE5vZGU/OiBQcnlOb2RlO1xuICB0b29sdGlwJCA9IG5ldyBCZWhhdmlvclN1YmplY3Qoe1xuICAgIHg6IDAsXG4gICAgeTogMCxcbiAgICBpdGVtOiBudWxsIGFzIHVua25vd24gYXMgUHJ5Tm9kZSxcbiAgICBkaXNwbGF5OiBmYWxzZVxuICB9KTtcbiAgZHJhZ2dpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2VsZWN0UmVjdD86IHsgc3RhcnQ6IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfTsgZW5kOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0gfTtcbiAgcmVsYXRpb25UeXBlczogUmVsYXRpb25UeXBlW10gPSBbXTtcbiAgbW92ZSQgPSBuZXcgU3ViamVjdDxNb3VzZUV2ZW50PigpO1xuICBtb2RlOiAnbW92ZScgfCAncmVjdGFuZ2xlJyA9ICdtb3ZlJztcbiAgYm90dG9tTGVmdCQ6IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgb2Zmc2V0ID0gWzAsIDBdO1xuICBhZGRpdGlvbm5hbE9mZnNldDogW251bWJlciwgbnVtYmVyXSA9IFswLCAwXTtcbiAgbGF5b3V0cyA9IFt7IGtleTogJ3NpbXBsZScgfSwgeyBrZXk6ICdmb3JjZScgfV07XG4gIG1vdXNlRG93bjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHN0b3JlOiBTdG9yZTxhbnk+LFxuICAgIHByaXZhdGUgdG9vbHRpcEZhY3RvcnlTZXJ2aWNlOiBUb29sdGlwRmFjdG9yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBQcnlJMThuU2VydmljZSxcbiAgICBwcml2YXRlIHN5bWJvbFNlcnZpY2U6IFN5bWJvbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcixcbiAgICBlbDogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIF9pbmplY3RvcjogSW5qZWN0b3JcbiAgKSB7XG4gICAgc3VwZXIoc3RvcmUsIGVsKTtcblxuICAgIHRoaXMuY2xhc3NlcyQgPSB0aGlzLnN0b3JlLnNlbGVjdChDbGFzc1NlbGVjdG9ycy5jbGFzc2VzKTtcbiAgICB0aGlzLnNlbGVjdGVkSWRzJCA9IHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5zZWxlY3RlZEl0ZW1JZHMpO1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goUmVsYXRpb25UeXBlc0FjdGlvbnMubG9hZCgpKTtcbiAgICB0aGlzLm9wdGlvbnMkID0gdGhpcy5tYW5pZmVzdCQucGlwZShcbiAgICAgIG1hcChcbiAgICAgICAgKG1hbmlmZXN0KSA9PlxuICAgICAgICAgICh7XG4gICAgICAgICAgICBsaW5rU3Ryb2tlQ29sb3I6ICcjOTk5JyxcbiAgICAgICAgICAgIGxpbmtTdHJva2VPcGFjaXR5OiAwLjYsXG4gICAgICAgICAgICBsaW5rU3Ryb2tlV2lkdGg6IDEuNSxcbiAgICAgICAgICAgIGxpbmtTdHJva2VMaW5lY2FwOiAncm91bmQnLFxuICAgICAgICAgICAgbm9kZVN0cm9rZUNvbG9yOiAnI2ZmZicsXG4gICAgICAgICAgICBub2RlU3Ryb2tlV2lkdGg6IDEuNSxcbiAgICAgICAgICAgIG5vZGVTdHJva2VPcGFjaXR5OiAxLFxuICAgICAgICAgICAgbm9kZVJhZGl1czogMjUsXG4gICAgICAgICAgICBsYXlvdXQ6ICdzaW1wbGUnLFxuICAgICAgICAgICAgLi4ubWFuaWZlc3Qub3B0aW9uc1xuICAgICAgICAgIH0pIGFzIEdyYXBoV2lkZ2V0T3B0aW9uc1xuICAgICAgKVxuICAgICk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy5vcHRpb25zJC5waXBlKGZpbHRlcigob3B0KSA9PiAhIW9wdCkpLnN1YnNjcmliZSgob3B0aW9ucykgPT4ge1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICB0aGlzLm9wdGlvbnNDb3B5ID0geyAuLi4oSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvcHRpb25zKSkgYXMgR3JhcGhXaWRnZXRPcHRpb25zKSB9O1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy52aWV3U2l6ZSQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLndpZGdldFNpemUkLCB0aGlzLmRpc3BsYXlIZWFkZXIkXSkucGlwZShcbiAgICAgIGRlbGF5KDEwKSxcbiAgICAgIG1hcCgoW3NpemUsIGhlYWRlcl0pID0+IFtzaXplLndpZHRoLCBzaXplLmhlaWdodCAtIChoZWFkZXIgPyBXSURHRVRfSEVBREVSX0hFSUdIVCA6IDApXSBhcyBbbnVtYmVyLCBudW1iZXJdKSxcbiAgICAgIHRhcCgoc2l6ZSkgPT4ge1xuICAgICAgICBpZiAodGhpcy5jYW52YXMpIHtcbiAgICAgICAgICB0aGlzLmNhbnZhcy5uYXRpdmVFbGVtZW50LndpZHRoID0gc2l6ZVswXTtcbiAgICAgICAgICB0aGlzLmNhbnZhcy5uYXRpdmVFbGVtZW50LmhlaWdodCA9IHNpemVbMV07XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuYWxsSXRlbXNXaXRoSW1hZ2VzJCA9IHRoaXMuYWxsSXRlbXMkLnBpcGUoXG4gICAgICBtZXJnZU1hcCgoaXRlbXMpID0+XG4gICAgICAgIGZyb20oXG4gICAgICAgICAgbmV3IFByb21pc2U8eyBpdGVtOiBJdGVtOyBpbWFnZTogSFRNTENhbnZhc0VsZW1lbnQgfVtdPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBQcm9taXNlLmFsbChpdGVtcy5tYXAoKGl0ZW0pID0+IHRoaXMuc3ltYm9sU2VydmljZS5nZXRTeW1ib2woaXRlbSkpKS50aGVuKChjYW52YXNlcykgPT5cbiAgICAgICAgICAgICAgcmVzb2x2ZShcbiAgICAgICAgICAgICAgICBpdGVtcy5tYXAoKGl0ZW0sIGlkeCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgICBpbWFnZTogY2FudmFzZXNbaWR4XVxuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuXG4gICAgY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLmFsbEl0ZW1zV2l0aEltYWdlcyQsXG4gICAgICB0aGlzLnJlc3VsdFNldCQucGlwZShtYXAoKHJzKSA9PiBycy5yZWxhdGlvbnMpKSxcbiAgICAgIHRoaXMudmlld1NpemUkLFxuICAgICAgdGhpcy5vcHRpb25zJCxcbiAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KFJlbGF0aW9uVHlwZXNTZWxlY3RvcnMucmVsYXRpb25zVHlwZXMpLnBpcGUodGFwKChydCkgPT4gKHRoaXMucmVsYXRpb25UeXBlcyA9IHJ0KSkpLFxuICAgICAgdGhpcy5zZWxlY3RlZElkcyRcbiAgICBdKS5zdWJzY3JpYmUoKFtpdGVtcywgcmVsYXRpb25zLCBzaXplLCBvcHRpb25zLCByZWxhdGlvblR5cGVzLCBzZWxlY3RlZElkc10pID0+IHtcbiAgICAgIHRoaXMuaXRlbXNBc05vZGVzID0gaXRlbXMubWFwKChpdGVtV2l0aEltYWdlLCBpZHgpID0+ICh7XG4gICAgICAgIGluZGV4OiBpZHgsXG4gICAgICAgIGl0ZW06IGl0ZW1XaXRoSW1hZ2UuaXRlbSxcbiAgICAgICAgaWQ6IGl0ZW1XaXRoSW1hZ2UuaXRlbS5pZCxcbiAgICAgICAgaW1hZ2U6IGl0ZW1XaXRoSW1hZ2UuaW1hZ2UsXG4gICAgICAgIHNlbGVjdGVkOiBzZWxlY3RlZElkcy5pbmRleE9mKGl0ZW1XaXRoSW1hZ2UuaXRlbS5pZCkgPiAtMVxuICAgICAgfSkpIGFzIFByeU5vZGVbXTtcblxuICAgICAgY29uc3QgdW5rbm93bkltYWdlID0gbmV3IEltYWdlKCk7XG4gICAgICB1bmtub3duSW1hZ2Uuc3JjID0gJy9hc3NldHMvc3Zncy9xdWVzdGlvbi1saW5lLnN2Zyc7XG5cbiAgICAgIC8vIENvbXBsZXRlIG1pc3Npbmcgbm9kZXNcbiAgICAgIHJlbGF0aW9ucy5mb3JFYWNoKChyZWxhdGlvbikgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuaXRlbXNBc05vZGVzLmZpbmQoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IHJlbGF0aW9uLnNvdXJjZSkpIHtcbiAgICAgICAgICB0aGlzLml0ZW1zQXNOb2Rlcy5wdXNoKHtcbiAgICAgICAgICAgIGluZGV4OiB0aGlzLml0ZW1zQXNOb2Rlcy5sZW5ndGgsXG4gICAgICAgICAgICBpdGVtOiB7IGlkOiByZWxhdGlvbi5zb3VyY2UsIG9DbGFzczogJ3Vua25vd24nLCBhdHRyaWJ1dGVzOiB7fSB9LFxuICAgICAgICAgICAgaWQ6IHJlbGF0aW9uLnNvdXJjZSxcbiAgICAgICAgICAgIGltYWdlOiB1bmtub3duSW1hZ2UsXG4gICAgICAgICAgICBzZWxlY3RlZDogc2VsZWN0ZWRJZHMuaW5kZXhPZihyZWxhdGlvbi5zb3VyY2UpID4gLTFcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuaXRlbXNBc05vZGVzLmZpbmQoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IHJlbGF0aW9uLmRlc3RpbmF0aW9uKSkge1xuICAgICAgICAgIHRoaXMuaXRlbXNBc05vZGVzLnB1c2goe1xuICAgICAgICAgICAgaW5kZXg6IHRoaXMuaXRlbXNBc05vZGVzLmxlbmd0aCxcbiAgICAgICAgICAgIGl0ZW06IHsgaWQ6IHJlbGF0aW9uLmRlc3RpbmF0aW9uLCBvQ2xhc3M6ICd1bmtub3duJywgYXR0cmlidXRlczoge30gfSxcbiAgICAgICAgICAgIGlkOiByZWxhdGlvbi5kZXN0aW5hdGlvbixcbiAgICAgICAgICAgIGltYWdlOiB1bmtub3duSW1hZ2UsXG4gICAgICAgICAgICBzZWxlY3RlZDogc2VsZWN0ZWRJZHMuaW5kZXhPZihyZWxhdGlvbi5kZXN0aW5hdGlvbikgPiAtMVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5yZWxhdGlvbnNBc0xpbmtzID0gcmVsYXRpb25zLm1hcCgocmVsYXRpb24pID0+ICh7XG4gICAgICAgIHNvdXJjZTogdGhpcy5pdGVtc0FzTm9kZXMuZmluZCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gcmVsYXRpb24uc291cmNlKT8uaW5kZXggPz8gLTEsXG4gICAgICAgIHRhcmdldDogdGhpcy5pdGVtc0FzTm9kZXMuZmluZCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gcmVsYXRpb24uZGVzdGluYXRpb24pPy5pbmRleCA/PyAtMSxcbiAgICAgICAgcmVsYXRpb25cbiAgICAgIH0pKSBhcyBQcnlMaW5rW107XG5cbiAgICAgIGlmICh0aGlzLnNpbXVsYXRpb24pIHtcbiAgICAgICAgdGhpcy5zaW11bGF0aW9uLnN0b3AoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zaW11bGF0aW9uID0gdGhpcy5pbml0U2ltdWxhdGlvbihvcHRpb25zLCBzaXplKS5vbigndGljaycsIHRoaXMuZHJhdyhzaXplLCBvcHRpb25zLCByZWxhdGlvblR5cGVzKSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy50b29sdGlwJC5waXBlKGZpbHRlcigodG9vbHRpcCkgPT4gISF0b29sdGlwICYmICEhdG9vbHRpcC5pdGVtKSkuc3Vic2NyaWJlKCh0b29sdGlwKSA9PiB7XG4gICAgICAgIGxldCB0eXBlID0gdG9vbHRpcC5pdGVtLml0ZW0ub0NsYXNzIGFzIHN0cmluZztcbiAgICAgICAgdGhpcy50b29sdGlwLmNsZWFyKCk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCQgPSB0aGlzLnRvb2x0aXBGYWN0b3J5U2VydmljZS5nZW5lcmF0ZVRvb2x0aXAodHlwZSwgdGhpcy5faW5qZWN0b3IsIHRoaXMudG9vbHRpcCk7XG4gICAgICAgIGNvbXBvbmVudCQuc3Vic2NyaWJlKChjb21wb25lbnQpID0+IHtcbiAgICAgICAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICAgICAgICBjb21wb25lbnQuaW5zdGFuY2UuZGF0YS5pdGVtID0gdG9vbHRpcC5pdGVtLml0ZW07XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMubW92ZSQucGlwZShhdWRpdFRpbWUoMzApKS5zdWJzY3JpYmUoKCRldmVudCkgPT4gdGhpcy5tb3ZlQ2FsbGJhY2soJGV2ZW50KSk7XG5cbiAgICB0aGlzLmJvdHRvbUxlZnQkID0gY29tYmluZUxhdGVzdChbdGhpcy53aWRnZXRTaXplJCwgdGhpcy5kaXNwbGF5SGVhZGVyJF0pLnBpcGUoXG4gICAgICBtYXAoXG4gICAgICAgIChbc2l6ZSwgZGlzcGxheUhlYWRlcl0pID0+XG4gICAgICAgICAgYHRyYW5zbGF0ZSgxMHB4ICxjYWxjKDEzcHggLSAke2Rpc3BsYXlIZWFkZXIgPyBXSURHRVRfSEVBREVSX0hFSUdIVCArICdweCcgOiAnMHB4J30pKWBcbiAgICAgICksXG4gICAgICBkZWxheSgxMClcbiAgICApO1xuICB9XG5cbiAgaW5pdFNpbXVsYXRpb24ob3B0aW9uczogR3JhcGhXaWRnZXRPcHRpb25zLCBzaXplOiBbbnVtYmVyLCBudW1iZXJdKSB7XG4gICAgc3dpdGNoIChvcHRpb25zLmxheW91dCkge1xuICAgICAgY2FzZSAnc2ltcGxlJzpcbiAgICAgICAgcmV0dXJuIHNpbXBsZVNpbXVsYXRpb24odGhpcy5pdGVtc0FzTm9kZXMsIHRoaXMucmVsYXRpb25zQXNMaW5rcywgb3B0aW9ucywgc2l6ZSk7XG4gICAgICBjYXNlICdmb3JjZSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZm9yY2VTaW11bGF0aW9uKHRoaXMuaXRlbXNBc05vZGVzKVxuICAgICAgICAgIC5mb3JjZSgnY2hhcmdlJywgZm9yY2VNYW55Qm9keSgpKVxuICAgICAgICAgIC5mb3JjZSgnbGluaycsIGZvcmNlTGluayh0aGlzLnJlbGF0aW9uc0FzTGlua3MpLmRpc3RhbmNlKDUwKS5zdHJlbmd0aCgwLjEpKVxuICAgICAgICAgIC5mb3JjZSgneCcsIGZvcmNlWCgpKVxuICAgICAgICAgIC5mb3JjZSgneScsIGZvcmNlWSgpKVxuICAgICAgICAgIC5mb3JjZSgnY29sbGlkZScsIGZvcmNlQ29sbGlkZShvcHRpb25zLm5vZGVSYWRpdXMgKiAzKSlcbiAgICAgICAgICAuZm9yY2UoJ2NlbnRlcicsIGZvcmNlQ2VudGVyKHNpemVbMF0gLyAyLCBzaXplWzFdIC8gMikpO1xuICAgIH1cbiAgfVxuXG4gIGVtaXRNYW5pZmVzdCgpIHtcbiAgICB0aGlzLm1hbmlmZXN0TW9kaWZpZWQuZW1pdCh7XG4gICAgICB3aWRnZXRJbmRleDogdGhpcy53aWRnZXRJbmRleCxcbiAgICAgIG1hbmlmZXN0OiB7IC4uLnRoaXMubWFuaWZlc3QsIG9wdGlvbnM6IHRoaXMub3B0aW9uc0NvcHkgfVxuICAgIH0pO1xuICB9XG5cbiAgcmVmcmVzaCgpIHtcbiAgICB0aGlzLmRyYXcoW3RoaXMuY2FudmFzLm5hdGl2ZUVsZW1lbnQud2lkdGgsIHRoaXMuY2FudmFzLm5hdGl2ZUVsZW1lbnQuaGVpZ2h0XSwgdGhpcy5vcHRpb25zLCB0aGlzLnJlbGF0aW9uVHlwZXMpKCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5jb250ZXh0ID0gdGhpcy5jYW52YXMubmF0aXZlRWxlbWVudC5nZXRDb250ZXh0KCcyZCcpO1xuICB9XG5cbiAgb3ZlcnJpZGUgbmdPbkRlc3Ryb3koKSB7XG4gICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICBpZiAodGhpcy5zaW11bGF0aW9uKSB7XG4gICAgICB0aGlzLnNpbXVsYXRpb24uc3RvcCgpO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZU1vZGUobW9kZTogJ21vdmUnIHwgJ3JlY3RhbmdsZScpIHtcbiAgICB0aGlzLm1vZGUgPSBtb2RlO1xuICB9XG5cbiAgY2hhbmdlTGF5b3V0KCRldmVudDogYW55KSB7XG4gICAgdGhpcy5vcHRpb25zQ29weSEubGF5b3V0ID0gJGV2ZW50O1xuICB9XG5cbiAgY2hhbmdlTm9kZVJhZGl1cygkZXZlbnQ6IGFueSkge1xuICAgIHRoaXMub3B0aW9uc0NvcHkhLm5vZGVSYWRpdXMgPSAkZXZlbnQ7XG4gIH1cblxuICAvKipcbiAgICogRHJhd2luZyB0aGluZ3NcbiAgICovXG5cbiAgZHJhdyhzaXplOiBbbnVtYmVyLCBudW1iZXJdLCBvcHRpb25zOiBHcmFwaFdpZGdldE9wdGlvbnMsIHJlbGF0aW9uVHlwZXM6IFJlbGF0aW9uVHlwZVtdKSB7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmICh0aGlzLmNvbnRleHQpIHtcbiAgICAgICAgLy8gQ2xlYXIgY2FudmFzXG4gICAgICAgIHRoaXMuY29udGV4dC5jbGVhclJlY3QoMCwgMCwgc2l6ZVswXSwgc2l6ZVsxXSk7XG5cbiAgICAgICAgLy8gRHJhd2luZyBsaW5rc1xuICAgICAgICB0aGlzLmNvbnRleHQuc2F2ZSgpO1xuICAgICAgICB0aGlzLmRyYXdMaW5rcyhvcHRpb25zLCByZWxhdGlvblR5cGVzKTtcbiAgICAgICAgdGhpcy5jb250ZXh0LnJlc3RvcmUoKTtcblxuICAgICAgICAvLyBEcmF3aW5nIG5vZGVzXG4gICAgICAgIHRoaXMuY29udGV4dC5zYXZlKCk7XG4gICAgICAgIHRoaXMuZHJhd05vZGVzKG9wdGlvbnMpO1xuICAgICAgICB0aGlzLmNvbnRleHQucmVzdG9yZSgpO1xuXG4gICAgICAgIC8vIERyYXdpbmcgc2VsZWN0aW9uIHJlY3RhbmdsZSBpZiBuZWVkZWRcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0UmVjdCkge1xuICAgICAgICAgIHRoaXMuY29udGV4dC5zYXZlKCk7XG4gICAgICAgICAgdGhpcy5kcmF3U2VsZWN0aW9uUmVjdCgpO1xuICAgICAgICAgIHRoaXMuY29udGV4dC5yZXN0b3JlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBkcmF3U2VsZWN0aW9uUmVjdCgpIHtcbiAgICBpZiAodGhpcy5jb250ZXh0ICYmIHRoaXMuc2VsZWN0UmVjdCAmJiB0aGlzLm1vZGUgPT09ICdyZWN0YW5nbGUnKSB7XG4gICAgICB0aGlzLmNvbnRleHQuZ2xvYmFsQWxwaGEgPSAwLjM7XG4gICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gJyNiY2RjZGEnO1xuXG4gICAgICBjb25zdCBtaW5YID0gTWF0aC5taW4odGhpcy5zZWxlY3RSZWN0LnN0YXJ0LngsIHRoaXMuc2VsZWN0UmVjdC5lbmQueCk7XG4gICAgICBjb25zdCBtaW5ZID0gTWF0aC5taW4odGhpcy5zZWxlY3RSZWN0LnN0YXJ0LnksIHRoaXMuc2VsZWN0UmVjdC5lbmQueSk7XG4gICAgICBjb25zdCBkWCA9IE1hdGguYWJzKHRoaXMuc2VsZWN0UmVjdC5zdGFydC54IC0gdGhpcy5zZWxlY3RSZWN0LmVuZC54KTtcbiAgICAgIGNvbnN0IGRZID0gTWF0aC5hYnModGhpcy5zZWxlY3RSZWN0LnN0YXJ0LnkgLSB0aGlzLnNlbGVjdFJlY3QuZW5kLnkpO1xuXG4gICAgICB0aGlzLmNvbnRleHQucmVjdChtaW5YLCBtaW5ZLCBkWCwgZFkpO1xuICAgICAgdGhpcy5jb250ZXh0LmZpbGwoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRyYXdOb2RlcyhvcHRpb25zOiBHcmFwaFdpZGdldE9wdGlvbnMpIHtcbiAgICBpZiAodGhpcy5jb250ZXh0KSB7XG4gICAgICB0aGlzLmNvbnRleHQuZ2xvYmFsQWxwaGEgPSBvcHRpb25zLm5vZGVTdHJva2VPcGFjaXR5O1xuICAgICAgZm9yIChjb25zdCBbaSwgbm9kZV0gb2YgdGhpcy5pdGVtc0FzTm9kZXMuZW50cmllcygpKSB7XG4gICAgICAgIHRoaXMuY29udGV4dC5iZWdpblBhdGgoKTtcbiAgICAgICAgdGhpcy5jb250ZXh0Lm1vdmVUbygobm9kZS54ID8/IDApICsgdGhpcy5nbG9iYWxPZmZzZXRbMF0sIChub2RlLnkgPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFsxXSk7XG4gICAgICAgIHRoaXMuY29udGV4dC5hcmMoXG4gICAgICAgICAgKG5vZGUueCA/PyAwKSArIHRoaXMuZ2xvYmFsT2Zmc2V0WzBdLFxuICAgICAgICAgIChub2RlLnkgPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFsxXSxcbiAgICAgICAgICBvcHRpb25zLm5vZGVSYWRpdXMgLyAyICsgOCxcbiAgICAgICAgICAwLFxuICAgICAgICAgIDIgKiBNYXRoLlBJLFxuICAgICAgICAgIGZhbHNlXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSBub2RlLnNlbGVjdGVkID8gJyM1NjlhOWMnIDogbm9kZS5pdGVtLm9DbGFzcyA9PT0gJ3Vua25vd24nID8gJyNlMmE3YTcnIDogJyNlY2VkZjQnO1xuICAgICAgICB0aGlzLmNvbnRleHQuc3Ryb2tlU3R5bGUgPSBub2RlLnNlbGVjdGVkID8gJyM1NjlhOWMnIDogbm9kZS5pdGVtLm9DbGFzcyA9PT0gJ3Vua25vd24nID8gJyNlMmE3YTcnIDogJyNlY2VkZjQnO1xuICAgICAgICB0aGlzLmNvbnRleHQuZmlsbCgpO1xuICAgICAgICB0aGlzLmNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgIHRoaXMuY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgbm9kZS5pbWFnZSxcbiAgICAgICAgICAobm9kZS54ID8/IDApICsgdGhpcy5nbG9iYWxPZmZzZXRbMF0gLSBvcHRpb25zLm5vZGVSYWRpdXMgLyAyLFxuICAgICAgICAgIChub2RlLnkgPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFsxXSAtIG9wdGlvbnMubm9kZVJhZGl1cyAvIDIsXG4gICAgICAgICAgb3B0aW9ucy5ub2RlUmFkaXVzLFxuICAgICAgICAgIG9wdGlvbnMubm9kZVJhZGl1c1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZHJhd0xpbmtzKG9wdGlvbnM6IEdyYXBoV2lkZ2V0T3B0aW9ucywgcmVsYXRpb25UeXBlczogUmVsYXRpb25UeXBlW10pIHtcbiAgICBpZiAodGhpcy5jb250ZXh0KSB7XG4gICAgICB0aGlzLmNvbnRleHQuZ2xvYmFsQWxwaGEgPSBvcHRpb25zLmxpbmtTdHJva2VPcGFjaXR5O1xuICAgICAgZm9yIChjb25zdCBbaSwgbGlua10gb2YgdGhpcy5yZWxhdGlvbnNBc0xpbmtzLmVudHJpZXMoKSkge1xuICAgICAgICB0aGlzLmNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgICAgIGNvbnN0IHNvdXJjZU5vZGUgPSB0aGlzLml0ZW1zQXNOb2Rlcy5maW5kKChpdGVtKSA9PiBpdGVtLmlkID09PSBsaW5rLnJlbGF0aW9uLnNvdXJjZSk7XG4gICAgICAgIGxldCB0YXJnZXROb2RlID0gdGhpcy5pdGVtc0FzTm9kZXMuZmluZCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gbGluay5yZWxhdGlvbi5kZXN0aW5hdGlvbik7XG4gICAgICAgIGlmIChsaW5rLnNvdXJjZSA9PT0gbGluay50YXJnZXQgJiYgdGFyZ2V0Tm9kZSkge1xuICAgICAgICAgIHRoaXMuY29udGV4dC5tb3ZlVG8oKHNvdXJjZU5vZGU/LnggPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFswXSwgKHNvdXJjZU5vZGU/LnkgPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFsxXSk7XG4gICAgICAgICAgdGhpcy5jb250ZXh0LmJlemllckN1cnZlVG8oXG4gICAgICAgICAgICAoc291cmNlTm9kZT8ueCA/PyAwKSAtIDEwICsgdGhpcy5nbG9iYWxPZmZzZXRbMF0sXG4gICAgICAgICAgICAoc291cmNlTm9kZT8ueSA/PyAwKSAtIDYwICsgdGhpcy5nbG9iYWxPZmZzZXRbMV0sXG4gICAgICAgICAgICAoc291cmNlTm9kZT8ueCA/PyAwKSArIDEyMCArIHRoaXMuZ2xvYmFsT2Zmc2V0WzBdLFxuICAgICAgICAgICAgKHNvdXJjZU5vZGU/LnkgPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFsxXSxcbiAgICAgICAgICAgIChzb3VyY2VOb2RlPy54ID8/IDApIC0gMTAgKyB0aGlzLmdsb2JhbE9mZnNldFswXSxcbiAgICAgICAgICAgIChzb3VyY2VOb2RlPy55ID8/IDApICsgMjAgKyB0aGlzLmdsb2JhbE9mZnNldFsxXVxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgeyBtaWRkbGVYLCBtaWRkbGVZLCBhbmdsZSB9ID0gdGhpcy5kcmF3U2VsZlJlbGF0aW9uVGV4dExpbmsobGluaywgc291cmNlTm9kZSEsIHJlbGF0aW9uVHlwZXMsIG9wdGlvbnMpO1xuICAgICAgICAgIC8vIGFycm93XG4gICAgICAgICAgdGhpcy5kcmF3QXJyb3coXG4gICAgICAgICAgICAodGFyZ2V0Tm9kZT8ueCA/PyAwKSArIDEyMCArIHRoaXMuZ2xvYmFsT2Zmc2V0WzBdLFxuICAgICAgICAgICAgKHRhcmdldE5vZGU/LnkgPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFsxXSxcbiAgICAgICAgICAgIG1pZGRsZVgsXG4gICAgICAgICAgICBtaWRkbGVZICsgMyxcbiAgICAgICAgICAgIGFuZ2xlIC0gMTAwXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmNvbnRleHQubW92ZVRvKChzb3VyY2VOb2RlPy54ID8/IDApICsgdGhpcy5nbG9iYWxPZmZzZXRbMF0sIChzb3VyY2VOb2RlPy55ID8/IDApICsgdGhpcy5nbG9iYWxPZmZzZXRbMV0pO1xuICAgICAgICAgIHRoaXMuY29udGV4dC5saW5lVG8oKHRhcmdldE5vZGU/LnggPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFswXSwgKHRhcmdldE5vZGU/LnkgPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFsxXSk7XG4gICAgICAgICAgY29uc3QgeyBtaWRkbGVYLCBtaWRkbGVZLCBhbmdsZSB9ID0gdGhpcy5kcmF3VGV4dExpbmsobGluaywgc291cmNlTm9kZSEsIHRhcmdldE5vZGUhLCByZWxhdGlvblR5cGVzLCBvcHRpb25zKTtcbiAgICAgICAgICAvLyBhcnJvd1xuICAgICAgICAgIHRoaXMuZHJhd0Fycm93KFxuICAgICAgICAgICAgKHRhcmdldE5vZGU/LnggPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFswXSxcbiAgICAgICAgICAgICh0YXJnZXROb2RlPy55ID8/IDApICsgdGhpcy5nbG9iYWxPZmZzZXRbMV0sXG4gICAgICAgICAgICBtaWRkbGVYLFxuICAgICAgICAgICAgbWlkZGxlWSxcbiAgICAgICAgICAgIGFuZ2xlXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZHJhd1NlbGZSZWxhdGlvblRleHRMaW5rKFxuICAgIGxpbms6IFByeUxpbmssXG4gICAgc291cmNlTm9kZTogUHJ5Tm9kZSxcbiAgICByZWxhdGlvblR5cGVzOiBSZWxhdGlvblR5cGVbXSxcbiAgICBvcHRpb25zOiBHcmFwaFdpZGdldE9wdGlvbnNcbiAgKSB7XG4gICAgY29uc3QgbWlkZGxlWCA9IChzb3VyY2VOb2RlPy54ID8/IDApICsgdGhpcy5nbG9iYWxPZmZzZXRbMF0gKyA0NTtcbiAgICBjb25zdCBtaWRkbGVZID0gKHNvdXJjZU5vZGU/LnkgPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFsxXSAtIDIwO1xuICAgIGxldCBhbmdsZSA9IE1hdGguYXRhbjIoc291cmNlTm9kZT8ueSA/PyAwLCBzb3VyY2VOb2RlPy54ID8/IDApO1xuICAgIGxldCBkcmF3QW5nbGUgPSBhbmdsZTtcblxuICAgIHJldHVybiB0aGlzLmRyYXdUZXh0KG1pZGRsZVgsIG1pZGRsZVksIGFuZ2xlLCByZWxhdGlvblR5cGVzLCBvcHRpb25zLCBsaW5rLCBkcmF3QW5nbGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBkcmF3VGV4dExpbmsoXG4gICAgbGluazogUHJ5TGluayxcbiAgICBzb3VyY2VOb2RlOiBQcnlOb2RlLFxuICAgIHRhcmdldE5vZGU6IFByeU5vZGUsXG4gICAgcmVsYXRpb25UeXBlczogUmVsYXRpb25UeXBlW10sXG4gICAgb3B0aW9uczogR3JhcGhXaWRnZXRPcHRpb25zXG4gICkge1xuICAgIGNvbnN0IG1pZGRsZVggPSAoKHNvdXJjZU5vZGU/LnggPz8gMCkgKyAodGFyZ2V0Tm9kZT8ueCA/PyAwKSkgLyAyICsgdGhpcy5nbG9iYWxPZmZzZXRbMF07XG4gICAgY29uc3QgbWlkZGxlWSA9ICgoc291cmNlTm9kZT8ueSA/PyAwKSArICh0YXJnZXROb2RlPy55ID8/IDApKSAvIDIgKyB0aGlzLmdsb2JhbE9mZnNldFsxXTtcbiAgICBsZXQgYW5nbGUgPSBNYXRoLmF0YW4yKCh0YXJnZXROb2RlPy55ID8/IDApIC0gKHNvdXJjZU5vZGU/LnkgPz8gMCksICh0YXJnZXROb2RlPy54ID8/IDApIC0gKHNvdXJjZU5vZGU/LnggPz8gMCkpO1xuICAgIGxldCBkcmF3QW5nbGUgPSBhbmdsZTtcbiAgICBpZiAodGhpcy5jb250ZXh0KSB7XG4gICAgICBpZiAoKHNvdXJjZU5vZGU/LnggPz8gMCkgPiAodGFyZ2V0Tm9kZT8ueCA/PyAwKSkge1xuICAgICAgICBkcmF3QW5nbGUgKz0gTWF0aC5QSTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5kcmF3VGV4dChtaWRkbGVYLCBtaWRkbGVZLCBhbmdsZSwgcmVsYXRpb25UeXBlcywgb3B0aW9ucywgbGluaywgZHJhd0FuZ2xlKTtcbiAgfVxuXG4gIHByaXZhdGUgZHJhd1RleHQoXG4gICAgbWlkZGxlWDogbnVtYmVyLFxuICAgIG1pZGRsZVk6IG51bWJlcixcbiAgICBhbmdsZTogbnVtYmVyLFxuICAgIHJlbGF0aW9uVHlwZXM6IGFueVtdLFxuICAgIG9wdGlvbnM6IEdyYXBoV2lkZ2V0T3B0aW9ucyxcbiAgICBsaW5rOiBQcnlMaW5rLFxuICAgIGRyYXdBbmdsZTogbnVtYmVyXG4gICkge1xuICAgIGlmICh0aGlzLmNvbnRleHQpIHtcbiAgICAgIHRoaXMuY29udGV4dC5mb250ID0gJzEwcHggVWJ1bnR1JztcbiAgICAgIGNvbnN0IHJlbGF0aW9uVHlwZSA9IGxpbmsucmVsYXRpb24ucmVsYXRpb25UeXBlO1xuICAgICAgdGhpcy5jb250ZXh0LnNhdmUoKTtcbiAgICAgIHRoaXMuY29udGV4dC50cmFuc2xhdGUobWlkZGxlWCwgbWlkZGxlWSk7XG4gICAgICB0aGlzLmNvbnRleHQucm90YXRlKGRyYXdBbmdsZSk7XG4gICAgICB0aGlzLmNvbnRleHQudGV4dEFsaWduID0gJ2NlbnRlcic7XG4gICAgICB0aGlzLmNvbnRleHQuZmlsbFRleHQocmVsYXRpb25UeXBlcy5maW5kKChyZWxUKSA9PiByZWxULmlkID09PSByZWxhdGlvblR5cGUpPy5uYW1lID8/IHJlbGF0aW9uVHlwZSwgMCwgLTcpO1xuICAgICAgdGhpcy5jb250ZXh0LnN0cm9rZVN0eWxlID0gb3B0aW9ucy5saW5rU3Ryb2tlQ29sb3I7XG4gICAgICB0aGlzLmNvbnRleHQubGluZVdpZHRoID0gb3B0aW9ucy5saW5rU3Ryb2tlV2lkdGg7XG4gICAgICB0aGlzLmNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICB0aGlzLmNvbnRleHQucmVzdG9yZSgpO1xuICAgIH1cbiAgICByZXR1cm4geyBtaWRkbGVYLCBtaWRkbGVZLCBhbmdsZSB9O1xuICB9XG5cbiAgcHJpdmF0ZSBkcmF3QXJyb3codGFyZ2V0WDogbnVtYmVyLCB0YXJnZXRZOiBudW1iZXIsIG1pZGRsZVg6IG51bWJlciwgbWlkZGxlWTogbnVtYmVyLCBhbmdsZTogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMuY29udGV4dCkge1xuICAgICAgY29uc3Qgd2lkdGggPSAxO1xuICAgICAgY29uc3QgaGVhZGxlbiA9IDEwO1xuXG4gICAgICAvLyBUaGlzIG1ha2VzIGl0IHNvIHRoZSBlbmQgb2YgdGhlIGFycm93IGhlYWQgaXMgbG9jYXRlZCBhdCB0b3gsIHRveSwgZG9uJ3QgYXNrIHdoZXJlIDEuMTUgY29tZXMgZnJvbVxuICAgICAgdGFyZ2V0WCAtPSBNYXRoLmNvcyhhbmdsZSkgKiAod2lkdGggKiAxLjE1KTtcbiAgICAgIHRhcmdldFkgLT0gTWF0aC5zaW4oYW5nbGUpICogKHdpZHRoICogMS4xNSk7XG5cbiAgICAgIC8vc3RhcnRpbmcgYSBuZXcgcGF0aCBmcm9tIHRoZSBoZWFkIG9mIHRoZSBhcnJvdyB0byBvbmUgb2YgdGhlIHNpZGVzIG9mIHRoZSBwb2ludFxuICAgICAgdGhpcy5jb250ZXh0LmJlZ2luUGF0aCgpO1xuICAgICAgdGhpcy5jb250ZXh0Lm1vdmVUbyhtaWRkbGVYLCBtaWRkbGVZKTtcbiAgICAgIHRoaXMuY29udGV4dC5saW5lVG8oXG4gICAgICAgIG1pZGRsZVggLSBoZWFkbGVuICogTWF0aC5jb3MoYW5nbGUgLSBNYXRoLlBJIC8gNyksXG4gICAgICAgIG1pZGRsZVkgLSBoZWFkbGVuICogTWF0aC5zaW4oYW5nbGUgLSBNYXRoLlBJIC8gNylcbiAgICAgICk7XG5cbiAgICAgIC8vcGF0aCBmcm9tIHRoZSBzaWRlIHBvaW50IG9mIHRoZSBhcnJvdywgdG8gdGhlIG90aGVyIHNpZGUgcG9pbnRcbiAgICAgIHRoaXMuY29udGV4dC5saW5lVG8oXG4gICAgICAgIG1pZGRsZVggLSBoZWFkbGVuICogTWF0aC5jb3MoYW5nbGUgKyBNYXRoLlBJIC8gNyksXG4gICAgICAgIG1pZGRsZVkgLSBoZWFkbGVuICogTWF0aC5zaW4oYW5nbGUgKyBNYXRoLlBJIC8gNylcbiAgICAgICk7XG5cbiAgICAgIC8vcGF0aCBmcm9tIHRoZSBzaWRlIHBvaW50IGJhY2sgdG8gdGhlIHRpcCBvZiB0aGUgYXJyb3csIGFuZCB0aGVuIGFnYWluIHRvIHRoZSBvcHBvc2l0ZSBzaWRlIHBvaW50XG4gICAgICB0aGlzLmNvbnRleHQubGluZVRvKG1pZGRsZVgsIG1pZGRsZVkpO1xuICAgICAgdGhpcy5jb250ZXh0LmxpbmVUbyhcbiAgICAgICAgbWlkZGxlWCAtIGhlYWRsZW4gKiBNYXRoLmNvcyhhbmdsZSAtIE1hdGguUEkgLyA3KSxcbiAgICAgICAgbWlkZGxlWSAtIGhlYWRsZW4gKiBNYXRoLnNpbihhbmdsZSAtIE1hdGguUEkgLyA3KVxuICAgICAgKTtcblxuICAgICAgLy9kcmF3cyB0aGUgcGF0aHMgY3JlYXRlZCBhYm92ZVxuICAgICAgdGhpcy5jb250ZXh0LmxpbmVXaWR0aCA9IHdpZHRoO1xuICAgICAgdGhpcy5jb250ZXh0LnN0cm9rZSgpO1xuICAgICAgdGhpcy5jb250ZXh0LmZpbGwoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTW91c2UgTWFuYWdlbWVudFxuICAgKi9cblxuICBvbk1vdXNlRG93bigkZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBjb25zdCBub2RlcyA9IHRoaXMuZmluZE5vZGVzKCRldmVudCk7XG4gICAgdGhpcy5kcmFnZ2VkTm9kZSA9IG5vZGVzWzBdO1xuICAgIGlmICh0aGlzLmRyYWdnZWROb2RlKSB7XG4gICAgICB0aGlzLnNpbXVsYXRpb24uYWxwaGFUYXJnZXQoMC4zKS5yZXN0YXJ0KCk7XG4gICAgICB0aGlzLmRyYWdnZWROb2RlLmZ4ID0gdGhpcy5kcmFnZ2VkTm9kZS54O1xuICAgICAgdGhpcy5kcmFnZ2VkTm9kZS5meSA9IHRoaXMuZHJhZ2dlZE5vZGUueTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RSZWN0ID0ge1xuICAgICAgICBzdGFydDogeyB4OiAkZXZlbnQub2Zmc2V0WCwgeTogJGV2ZW50Lm9mZnNldFkgfSxcbiAgICAgICAgZW5kOiB7IHg6ICRldmVudC5vZmZzZXRYLCB5OiAkZXZlbnQub2Zmc2V0WSB9XG4gICAgICB9O1xuICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfVxuICAgIHRoaXMubW91c2VEb3duID0gdHJ1ZTtcbiAgfVxuXG4gIG9uTW91c2VNb3ZlKCRldmVudDogTW91c2VFdmVudCkge1xuICAgIHRoaXMubW92ZSQubmV4dCgkZXZlbnQpO1xuICAgIGlmICh0aGlzLm1vdXNlRG93bikge1xuICAgICAgdGhpcy5kcmFnZ2luZyA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgbW92ZUNhbGxiYWNrKCRldmVudDogTW91c2VFdmVudCkge1xuICAgIGlmICh0aGlzLmRyYWdnZWROb2RlKSB7XG4gICAgICB0aGlzLmRyYWdnZWROb2RlLmZ4ID0gJGV2ZW50Lm9mZnNldFggLSB0aGlzLmdsb2JhbE9mZnNldFswXTtcbiAgICAgIHRoaXMuZHJhZ2dlZE5vZGUuZnkgPSAkZXZlbnQub2Zmc2V0WSAtIHRoaXMuZ2xvYmFsT2Zmc2V0WzFdO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5zZWxlY3RSZWN0KSB7XG4gICAgICAgIHRoaXMuc2VsZWN0UmVjdCEuZW5kID0geyB4OiAkZXZlbnQub2Zmc2V0WCwgeTogJGV2ZW50Lm9mZnNldFkgfTtcbiAgICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ21vdmUnKSB7XG4gICAgICAgICAgdGhpcy5hZGRpdGlvbm5hbE9mZnNldCA9IFtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0UmVjdC5lbmQueCAtIHRoaXMuc2VsZWN0UmVjdC5zdGFydC54LFxuICAgICAgICAgICAgdGhpcy5zZWxlY3RSZWN0LmVuZC55IC0gdGhpcy5zZWxlY3RSZWN0LnN0YXJ0LnlcbiAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG5cbiAgICAvLyBkaXNwbGF5IHRvb2x0aXAgZm9yIG5vZGVzXG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLmZpbmROb2RlcygkZXZlbnQpO1xuICAgIHRoaXMudG9vbHRpcCQubmV4dCh7IGl0ZW06IG5vZGVzWzBdLCBkaXNwbGF5OiBub2Rlcy5sZW5ndGggPiAwLCB4OiAkZXZlbnQub2Zmc2V0WCwgeTogJGV2ZW50Lm9mZnNldFkgfSk7XG4gIH1cblxuICBvbk1vdXNlVXAoJGV2ZW50OiBNb3VzZUV2ZW50LCBsZWF2ZSA9IGZhbHNlKSB7XG4gICAgaWYgKCRldmVudC5idXR0b24gIT09IDIpIHtcbiAgICAgIGlmICh0aGlzLmRyYWdnaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLmRyYWdnZWROb2RlKSB7XG4gICAgICAgICAgdGhpcy5zaW11bGF0aW9uLmFscGhhVGFyZ2V0KDApO1xuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5Py5sYXlvdXQgPT09ICdmb3JjZScpIHtcbiAgICAgICAgICAgIHRoaXMuZHJhZ2dlZE5vZGUuZnggPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5kcmFnZ2VkTm9kZS5meSA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0aGlzLm1vZGUgPT09ICdyZWN0YW5nbGUnKSB7XG4gICAgICAgICAgICBjb25zdCBub2RlcyA9IHRoaXMuZmluZE5vZGVzSW5TaGFwZWQodGhpcy5zZWxlY3RSZWN0ISk7XG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKERhc2hib2FyZEFjdGlvbnMuc2VsZWN0TWFueSh7IGlkczogbm9kZXMubWFwKChub2RlKSA9PiBub2RlLml0ZW0uaWQpIH0pKTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9mZnNldCA9IFsuLi50aGlzLmdsb2JhbE9mZnNldF07XG4gICAgICAgICAgICB0aGlzLmFkZGl0aW9ubmFsT2Zmc2V0ID0gWzAsIDBdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCFsZWF2ZSkge1xuICAgICAgICAgIGNvbnN0IG5vZGVzID0gdGhpcy5maW5kTm9kZXMoJGV2ZW50KTtcbiAgICAgICAgICBpZiAobm9kZXNbMF0/Lml0ZW0/LmlkKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKERhc2hib2FyZEFjdGlvbnMuc2VsZWN0KHsgaWQ6IG5vZGVzWzBdPy5pdGVtPy5pZCwgY3VtdWxhdGl2ZTogJGV2ZW50LnNoaWZ0S2V5IH0pKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChEYXNoYm9hcmRBY3Rpb25zLnNlbGVjdCh7IGlkOiAnJywgY3VtdWxhdGl2ZTogJGV2ZW50LnNoaWZ0S2V5IH0pKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5tb2RlID0gJ21vdmUnO1xuICAgIHRoaXMuc2VsZWN0UmVjdCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmRyYWdnZWROb2RlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZHJhZ2dpbmcgPSBmYWxzZTtcbiAgICB0aGlzLm1vdXNlRG93biA9IGZhbHNlO1xuICB9XG5cbiAgZ2V0IGdsb2JhbE9mZnNldCgpIHtcbiAgICByZXR1cm4gW3RoaXMub2Zmc2V0WzBdICsgdGhpcy5hZGRpdGlvbm5hbE9mZnNldFswXSwgdGhpcy5vZmZzZXRbMV0gKyB0aGlzLmFkZGl0aW9ubmFsT2Zmc2V0WzFdXTtcbiAgfVxuXG4gIGNvbnRleHRNZW51KCRldmVudDogTW91c2VFdmVudCkge1xuICAgIGlmICh0aGlzLm1hbmlmZXN0LmNvbnRleHRNZW51ICE9PSBmYWxzZSkge1xuICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBjb25zdCBub2RlcyA9IHRoaXMuZmluZE5vZGVzKCRldmVudCk7XG4gICAgICBpZiAobm9kZXNbMF0gJiYgbm9kZXNbMF0uaXRlbSkge1xuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFxuICAgICAgICAgIENvbnRleHRNZW51QWN0aW9ucy5vcGVuKHtcbiAgICAgICAgICAgIGl0ZW1JZDogbm9kZXNbMF0uaXRlbS5pZCxcbiAgICAgICAgICAgIGNsaWVudFg6ICRldmVudC5jbGllbnRYLFxuICAgICAgICAgICAgY2xpZW50WTogJGV2ZW50LmNsaWVudFksXG4gICAgICAgICAgICByZXN1bHRTZXQ6IEFycmF5LmlzQXJyYXkodGhpcy5tYW5pZmVzdC5kYXRhc291cmNlKSA/IHRoaXMubWFuaWZlc3QuZGF0YXNvdXJjZVswXSA6IHRoaXMubWFuaWZlc3QuZGF0YXNvdXJjZSxcbiAgICAgICAgICAgIGZyb206ICdncmFwaCdcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLm9uTW91c2VVcCgkZXZlbnQsIHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRpbmcgTm9kZXNcbiAgICovXG5cbiAgZmluZE5vZGVzKCRldmVudDogTW91c2VFdmVudCkge1xuICAgIHJldHVybiB0aGlzLml0ZW1zQXNOb2Rlcy5maWx0ZXIoXG4gICAgICAoaXRlbSkgPT5cbiAgICAgICAgTWF0aC5wb3coKGl0ZW0ueCA/PyAwKSAtICRldmVudC5vZmZzZXRYICsgdGhpcy5nbG9iYWxPZmZzZXRbMF0sIDIpICtcbiAgICAgICAgICBNYXRoLnBvdygoaXRlbS55ID8/IDApICsgdGhpcy5nbG9iYWxPZmZzZXRbMV0gLSAkZXZlbnQub2Zmc2V0WSwgMikgPFxuICAgICAgICBNYXRoLnBvdyh0aGlzLm9wdGlvbnMubm9kZVJhZGl1cyAvIDIgKyA4LCAyKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGZpbmROb2Rlc0luU2hhcGVkKHNoYXBlOiB7IHN0YXJ0OiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH07IGVuZDogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9IH0pOiBQcnlOb2RlW10ge1xuICAgIGNvbnN0IG1pblggPSBNYXRoLm1pbihzaGFwZS5zdGFydC54LCBzaGFwZS5lbmQueCk7XG4gICAgY29uc3QgbWF4WCA9IE1hdGgubWF4KHNoYXBlLnN0YXJ0LngsIHNoYXBlLmVuZC54KTtcbiAgICBjb25zdCBtaW5ZID0gTWF0aC5taW4oc2hhcGUuc3RhcnQueSwgc2hhcGUuZW5kLnkpO1xuICAgIGNvbnN0IG1heFkgPSBNYXRoLm1heChzaGFwZS5zdGFydC55LCBzaGFwZS5lbmQueSk7XG5cbiAgICByZXR1cm4gdGhpcy5pdGVtc0FzTm9kZXMuZmlsdGVyKFxuICAgICAgKGl0ZW0pID0+XG4gICAgICAgIChpdGVtLnggPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFswXSA+IG1pblggJiZcbiAgICAgICAgKGl0ZW0ueCA/PyAwKSArIHRoaXMuZ2xvYmFsT2Zmc2V0WzBdIDwgbWF4WCAmJlxuICAgICAgICAoaXRlbS55ID8/IDApICsgdGhpcy5nbG9iYWxPZmZzZXRbMV0gPiBtaW5ZICYmXG4gICAgICAgIChpdGVtLnkgPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFsxXSA8IG1heFlcbiAgICApO1xuICB9XG5cbiAgb3ZlcnJpZGUgdG9JbWFnZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICByZXNvbHZlKHRoaXMuY2FudmFzLm5hdGl2ZUVsZW1lbnQudG9EYXRhVVJMKCdpbWFnZS9wbmcnKSk7XG4gICAgfSk7XG4gIH1cbn1cbiIsIjxwcnktd2lkZ2V0LWZvcmNlLWdyYXBoLWNzcz48L3ByeS13aWRnZXQtZm9yY2UtZ3JhcGgtY3NzPlxuPGRpdiBjbGFzcz1cIm8td2lkZ2V0IG8td2lkZ2V0LS1ncmFwaFwiPlxuICA8cHJ5LXdpZGdldC1oZWFkZXJcbiAgICBbZGF0YXNvdXJjZUlkcyRdPVwiZGF0YXNvdXJjZUlkcyRcIlxuICAgICpuZ0lmPVwiZGlzcGxheUhlYWRlciQgfCBhc3luY1wiXG4gICAgW3dpZGdldEluZGV4XT1cIndpZGdldEluZGV4XCJcbiAgICBbbWFuaWZlc3RdPVwibWFuaWZlc3RcIlxuICAgIChtYW5pZmVzdE1vZGlmaWVkKT1cIm1hbmlmZXN0TW9kaWZpZWQuZW1pdCgkZXZlbnQpXCJcbiAgICBbaGVhZGVyT3B0aW9uc109XCIoZGlzcGxheUhlYWRlciQgfCBhc3luYykgPz8ge31cIlxuICAgICNoZWFkZXJcbiAgPlxuICAgIDxwcnktc2V0dGluZ3NcbiAgICAgIChzYXZlVHJpZ2dlcmVkKT1cImVtaXRNYW5pZmVzdCgpXCJcbiAgICAgIFtoZWFkZXJQcmVzZW50XT1cImRpc3BsYXlIZWFkZXIkIHwgYXN5bmNcIlxuICAgICAgW3dpZGdldEluZGV4XT1cIndpZGdldEluZGV4XCJcbiAgICAgIFtoZWFkZXJdPVwiaGVhZGVyXCJcbiAgICAgIFtvcGVuJF09XCJvcGVuJFwiXG4gICAgICBjbGFzcz1cIm8tc2V0dGluZ3NcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cImdyYXBoX2xheW91dFwiPnt7ICdAcHJ5LndpZGdldC5ncmFwaC5sYXlvdXQnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlTGF5b3V0KCRldmVudClcIlxuICAgICAgICAgIFtpdGVtc0FzT3B0aW9uXT1cInRydWVcIlxuICAgICAgICAgIFtpdGVtc109XCJsYXlvdXRzXCJcbiAgICAgICAgICBbbmdNb2RlbF09XCJvcHRpb25zQ29weSEubGF5b3V0XCJcbiAgICAgICAgICBiaW5kTGFiZWw9XCJrZXlcIlxuICAgICAgICAgIGJpbmRWYWx1ZT1cImtleVwiXG4gICAgICAgICAgaWQ9XCJncmFwaF9sYXlvdXRcIlxuICAgICAgICAgIGNsYXNzPVwiYS1wcnktc2VsZWN0XCJcbiAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgIDxwcnktcmFuZ2VcbiAgICAgICAgICBbbmdNb2RlbF09XCJvcHRpb25zQ29weSEubm9kZVJhZGl1c1wiXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlTm9kZVJhZGl1cygkZXZlbnQpXCJcbiAgICAgICAgICBsYWJlbFRyYW5zbGF0ZT1cIkBwcnkud2lkZ2V0LmdyYXBoLm5vZGVSYWRpdXNcIlxuICAgICAgICAgIG1pbj1cIjEwXCJcbiAgICAgICAgICBtYXg9XCIyMDBcIlxuICAgICAgICA+PC9wcnktcmFuZ2U+XG4gICAgICA8L2Rpdj5cbiAgICA8L3ByeS1zZXR0aW5ncz5cbiAgPC9wcnktd2lkZ2V0LWhlYWRlcj5cbiAgPGRpdiBjbGFzcz1cIm5vLXJlc3VsdFwiICpuZ0lmPVwiKGFsbEl0ZW1zV2l0aEltYWdlcyQgfCBhc3luYyk/Lmxlbmd0aCA9PT0gMFwiPlxuICAgIDxpbWdcbiAgICAgIGNsYXNzPVwibm8tcmVzdWx0X19zZWFyY2hcIlxuICAgICAgc3JjPVwiLi4vLi4vLi4vYXNzZXRzL3N2Z3MvcHJ5X3JlY2hlcmNoZV9wYXNfZGVfcmVzdWx0YXQuc3ZnXCJcbiAgICAgIGFsdD1cInt7ICdAcHJ5LndpZGdldC50YWJsZS5lbXB0eScgfCBpMThuIH19XCJcbiAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgLz5cbiAgICA8c3BhbiBjbGFzcz1cIm5vLXJlc3VsdF9fdGV4dFwiPnt7ICdAcHJ5LndpZGdldC5ncmFwaC5lbXB0eScgfCBpMThuIH19PC9zcGFuPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cIm0tYnRuLWdyb3VwIC1zZWxlY3Rpb24tY2hvaWNlXCIgW3N0eWxlLnRyYW5zZm9ybV09XCJib3R0b21MZWZ0JCB8IGFzeW5jXCI+XG4gICAgPGJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzcz1cImEtYnRuIGEtYnRuLS1pY29uLW9ubHlcIlxuICAgICAgKGNsaWNrKT1cImNoYW5nZU1vZGUoJ21vdmUnKVwiXG4gICAgICBbY2xhc3MuLXNlbGVjdGVkXT1cIm1vZGUgPT09ICdtb3ZlJ1wiXG4gICAgICBbcHJ5VG9vbHRpcF09XCJpbmZvVG9vbHRpcE1vdmVcIlxuICAgICAgcHJ5VG9vbHRpcFBvc2l0aW9uPVwiYm90dG9tXCJcbiAgICAgIGFyaWEtZGVzY3JpYmVkYnk9XCJpbmZvVG9vbHRpcE1vdmVfd2lkZ2V0TWFwXCJcbiAgICA+XG4gICAgICA8cHJ5LWljb24gaWNvblN2Zz1cIm1vdmVcIj48L3ByeS1pY29uPlxuICAgICAgPHNwYW4gY2xhc3M9XCJ1LXZpc3VhbGx5LWhpZGRlblwiPnt7ICdAcHJ5LndpZGdldC5ncmFwaC5tb3ZlJyB8IGkxOG4gfX08L3NwYW4+XG4gICAgPC9idXR0b24+XG5cbiAgICA8YnV0dG9uXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGNsYXNzPVwiYS1idG4gYS1idG4tLWljb24tb25seVwiXG4gICAgICAoY2xpY2spPVwiY2hhbmdlTW9kZSgncmVjdGFuZ2xlJylcIlxuICAgICAgW2NsYXNzLi1zZWxlY3RlZF09XCJtb2RlID09PSAncmVjdGFuZ2xlJ1wiXG4gICAgICBbcHJ5VG9vbHRpcF09XCJpbmZvVG9vbHRpcFJlY3RcIlxuICAgICAgcHJ5VG9vbHRpcFBvc2l0aW9uPVwiYm90dG9tXCJcbiAgICAgIGFyaWEtZGVzY3JpYmVkYnk9XCJpbmZvVG9vbHRpcFJlY3Rfd2lkZ2V0TWFwXCJcbiAgICA+XG4gICAgICA8cHJ5LWljb24gaWNvblN2Zz1cInJlY3RhbmdsZVwiPjwvcHJ5LWljb24+XG4gICAgICA8c3BhbiBjbGFzcz1cInUtdmlzdWFsbHktaGlkZGVuXCI+e3sgJ0Bwcnkud2lkZ2V0LmdyYXBoLnJlY3RhbmdsZScgfCBpMThuIH19PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cblxuICA8Y2FudmFzXG4gICAgI2NhbnZhc1xuICAgIGNsYXNzPVwiby13aWRnZXQtLWdyYXBoX19jYW52YXNcIlxuICAgIChtb3VzZW1vdmUpPVwib25Nb3VzZU1vdmUoJGV2ZW50KVwiXG4gICAgKG1vdXNlZG93bik9XCJvbk1vdXNlRG93bigkZXZlbnQpXCJcbiAgICAobW91c2V1cCk9XCJvbk1vdXNlVXAoJGV2ZW50KVwiXG4gICAgKG1vdXNlbGVhdmUpPVwib25Nb3VzZVVwKCRldmVudCwgdHJ1ZSlcIlxuICAgIChjb250ZXh0bWVudSk9XCJjb250ZXh0TWVudSgkZXZlbnQpXCJcbiAgPjwvY2FudmFzPlxuXG4gIDxkaXYgY2xhc3M9XCJzZWxlY3Rpb24tcmVjdGFuZ2xlXCIgI3NlbGVjdGlvblJlY3RhbmdsZT48L2Rpdj5cblxuICA8ZGl2XG4gICAgY2xhc3M9XCJtLXRvb2x0aXAgbS10b29sdGlwLS1wb3B1cCBub2V2ZW50XCJcbiAgICBbc3R5bGUuZGlzcGxheV09XCIodG9vbHRpcCQgfCBhc3luYyk/LmRpc3BsYXkgPyAnYmxvY2snIDogJ25vbmUnXCJcbiAgICBbc3R5bGUubGVmdC5weF09XCIoKHRvb2x0aXAkIHwgYXN5bmMpPy54ID8/IDApICsgNTBcIlxuICAgIFtzdHlsZS50b3AucHhdPVwiKCh0b29sdGlwJCB8IGFzeW5jKT8ueSA/PyAwKSArIDUwXCJcbiAgPlxuICAgIDxkaXYgI3Rvb2x0aXA+PC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjaW5mb1Rvb2x0aXBNb3ZlPlxuICA8ZGl2IGNsYXNzPVwibS10b29sdGlwXCIgcm9sZT1cInRvb2x0aXBcIiBpZD1cImluZm9Ub29sdGlwTW92ZV93aWRnZXRNYXBcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICA8c3BhbiBjbGFzcz1cIm0tdG9vbHRpcF9fdGV4dFwiPnt7ICdAcHJ5LndpZGdldC5ncmFwaC5tb3ZlJyB8IGkxOG4gfX08L3NwYW4+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNpbmZvVG9vbHRpcFJlY3Q+XG4gIDxkaXYgY2xhc3M9XCJtLXRvb2x0aXBcIiByb2xlPVwidG9vbHRpcFwiIGlkPVwiaW5mb1Rvb2x0aXBSZWN0X3dpZGdldE1hcFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgIDxzcGFuIGNsYXNzPVwibS10b29sdGlwX190ZXh0XCI+e3sgJ0Bwcnkud2lkZ2V0LmdyYXBoLnJlY3RhbmdsZScgfCBpMThuIH19PC9zcGFuPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
448
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LWdyYXBoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL3dpZGdldHMvd2lkZ2V0LWdyYXBoL2NvbXBvbmVudC93aWRnZXQtZ3JhcGguY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvd2lkZ2V0cy93aWRnZXQtZ3JhcGgvY29tcG9uZW50L3dpZGdldC1ncmFwaC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFJVCxTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFFTCxjQUFjLEVBQ2Qsa0JBQWtCLEVBQ2xCLGdCQUFnQixFQUNoQixrQkFBa0IsRUFDbEIsbUJBQW1CLEVBS25CLG9CQUFvQixFQUNwQixzQkFBc0IsRUFHdEIsb0JBQW9CLEVBQ3JCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNoSCxPQUFPLEVBQ0wsU0FBUyxFQUNULGVBQWUsRUFDZixhQUFhLEVBQ2IsS0FBSyxFQUNMLE1BQU0sRUFDTixJQUFJLEVBQ0osR0FBRyxFQUNILFFBQVEsRUFFUixPQUFPLEVBQ1IsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFckMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7Ozs7O0FBTzdELE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxtQkFBbUI7SUFnQzNELFlBQ0UsS0FBaUIsRUFDVCxx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QUFDLFFBQVE7Z0JBQytCLE9BQU87c0JBQXhELFNBQVM7dUJBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgSW5qZWN0b3IsXG4gIE9uRGVzdHJveSxcbiAgVmlld0NoaWxkLFxuICBWaWV3Q29udGFpbmVyUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7XG4gIENsYXNzLFxuICBDbGFzc1NlbGVjdG9ycyxcbiAgQ29udGV4dE1lbnVBY3Rpb25zLFxuICBEYXNoYm9hcmRBY3Rpb25zLFxuICBEYXNoYm9hcmRTZWxlY3RvcnMsXG4gIERhdGFXaWRnZXRDb21wb25lbnQsXG4gIEdyYXBoV2lkZ2V0T3B0aW9ucyxcbiAgSXRlbSxcbiAgUHJ5STE4blNlcnZpY2UsXG4gIFJlbGF0aW9uVHlwZSxcbiAgUmVsYXRpb25UeXBlc0FjdGlvbnMsXG4gIFJlbGF0aW9uVHlwZXNTZWxlY3RvcnMsXG4gIFN5bWJvbFNlcnZpY2UsXG4gIFRvb2x0aXBGYWN0b3J5U2VydmljZSxcbiAgV0lER0VUX0hFQURFUl9IRUlHSFRcbn0gZnJvbSAnQHByb3ZvbHkvZGFzaGJvYXJkJztcbmltcG9ydCB7IGZvcmNlQ2VudGVyLCBmb3JjZUNvbGxpZGUsIGZvcmNlTGluaywgZm9yY2VNYW55Qm9keSwgZm9yY2VTaW11bGF0aW9uLCBmb3JjZVgsIGZvcmNlWSB9IGZyb20gJ2QzLWZvcmNlJztcbmltcG9ydCB7XG4gIGF1ZGl0VGltZSxcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBjb21iaW5lTGF0ZXN0LFxuICBkZWxheSxcbiAgZmlsdGVyLFxuICBmcm9tLFxuICBtYXAsXG4gIG1lcmdlTWFwLFxuICBPYnNlcnZhYmxlLFxuICBTdWJqZWN0XG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgUHJ5TGluaywgUHJ5Tm9kZSB9IGZyb20gJy4uL2xheW91dC9ub2RlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBzaW1wbGVTaW11bGF0aW9uIH0gZnJvbSAnLi4vbGF5b3V0L3NpbXBsZS5mdW5jdGlvbic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ByeS13aWRnZXQtZ3JhcGgnLFxuICB0ZW1wbGF0ZVVybDogJy4vd2lkZ2V0LWdyYXBoLmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgV2lkZ2V0R3JhcGhDb21wb25lbnQgZXh0ZW5kcyBEYXRhV2lkZ2V0Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgb3B0aW9ucyQ6IE9ic2VydmFibGU8R3JhcGhXaWRnZXRPcHRpb25zPjtcbiAgb3B0aW9ucyE6IEdyYXBoV2lkZ2V0T3B0aW9ucztcbiAgb3B0aW9uc0NvcHk/OiBHcmFwaFdpZGdldE9wdGlvbnM7XG4gIHNlbGVjdGVkSWRzJDogT2JzZXJ2YWJsZTxzdHJpbmdbXT47XG4gIEBWaWV3Q2hpbGQoJ2NhbnZhcycpIGNhbnZhcyE6IEVsZW1lbnRSZWY8SFRNTENhbnZhc0VsZW1lbnQ+O1xuICBAVmlld0NoaWxkKCd0b29sdGlwJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pIHRvb2x0aXAhOiBWaWV3Q29udGFpbmVyUmVmO1xuICBjbGFzc2VzJDogT2JzZXJ2YWJsZTxDbGFzc1tdPjtcbiAgdmlld1NpemUkOiBPYnNlcnZhYmxlPFtudW1iZXIsIG51bWJlcl0+O1xuICBjb250ZXh0OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgfCBudWxsID0gbnVsbDtcbiAgc2ltdWxhdGlvbiE6IGFueTtcbiAgYWxsSXRlbXNXaXRoSW1hZ2VzJDogT2JzZXJ2YWJsZTx7IGl0ZW06IEl0ZW07IGltYWdlOiBIVE1MQ2FudmFzRWxlbWVudCB9W10+O1xuICBpdGVtc0FzTm9kZXM6IFByeU5vZGVbXSA9IFtdO1xuICByZWxhdGlvbnNBc0xpbmtzOiBQcnlMaW5rW10gPSBbXTtcbiAgZHJhZ2dlZE5vZGU/OiBQcnlOb2RlO1xuICB0b29sdGlwJCA9IG5ldyBCZWhhdmlvclN1YmplY3Qoe1xuICAgIHg6IDAsXG4gICAgeTogMCxcbiAgICBpdGVtOiBudWxsIGFzIHVua25vd24gYXMgUHJ5Tm9kZSxcbiAgICBkaXNwbGF5OiBmYWxzZVxuICB9KTtcbiAgZHJhZ2dpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2VsZWN0UmVjdD86IHsgc3RhcnQ6IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfTsgZW5kOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0gfTtcbiAgcmVsYXRpb25UeXBlczogUmVsYXRpb25UeXBlW10gPSBbXTtcbiAgbW92ZSQgPSBuZXcgU3ViamVjdDxNb3VzZUV2ZW50PigpO1xuICBtb2RlOiAnbW92ZScgfCAncmVjdGFuZ2xlJyA9ICdtb3ZlJztcbiAgYm90dG9tTGVmdCQ6IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgb2Zmc2V0ID0gWzAsIDBdO1xuICBhZGRpdGlvbm5hbE9mZnNldDogW251bWJlciwgbnVtYmVyXSA9IFswLCAwXTtcbiAgbGF5b3V0cyA9IFt7IGtleTogJ3NpbXBsZScgfSwgeyBrZXk6ICdmb3JjZScgfV07XG4gIG1vdXNlRG93bjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHN0b3JlOiBTdG9yZTxhbnk+LFxuICAgIHByaXZhdGUgdG9vbHRpcEZhY3RvcnlTZXJ2aWNlOiBUb29sdGlwRmFjdG9yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBQcnlJMThuU2VydmljZSxcbiAgICBwcml2YXRlIHN5bWJvbFNlcnZpY2U6IFN5bWJvbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcixcbiAgICBlbDogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIF9pbmplY3RvcjogSW5qZWN0b3JcbiAgKSB7XG4gICAgc3VwZXIoc3RvcmUsIGVsKTtcblxuICAgIHRoaXMuY2xhc3NlcyQgPSB0aGlzLnN0b3JlLnNlbGVjdChDbGFzc1NlbGVjdG9ycy5jbGFzc2VzKTtcbiAgICB0aGlzLnNlbGVjdGVkSWRzJCA9IHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5zZWxlY3RlZEl0ZW1JZHMpO1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goUmVsYXRpb25UeXBlc0FjdGlvbnMubG9hZCgpKTtcbiAgICB0aGlzLm9wdGlvbnMkID0gdGhpcy5tYW5pZmVzdCQucGlwZShcbiAgICAgIG1hcChcbiAgICAgICAgKG1hbmlmZXN0KSA9PlxuICAgICAgICAgICh7XG4gICAgICAgICAgICBsaW5rU3Ryb2tlQ29sb3I6ICcjOTk5JyxcbiAgICAgICAgICAgIGxpbmtTdHJva2VPcGFjaXR5OiAwLjYsXG4gICAgICAgICAgICBsaW5rU3Ryb2tlV2lkdGg6IDEuNSxcbiAgICAgICAgICAgIGxpbmtTdHJva2VMaW5lY2FwOiAncm91bmQnLFxuICAgICAgICAgICAgbm9kZVN0cm9rZUNvbG9yOiAnI2ZmZicsXG4gICAgICAgICAgICBub2RlU3Ryb2tlV2lkdGg6IDEuNSxcbiAgICAgICAgICAgIG5vZGVTdHJva2VPcGFjaXR5OiAxLFxuICAgICAgICAgICAgbm9kZVJhZGl1czogMjUsXG4gICAgICAgICAgICBsYXlvdXQ6ICdzaW1wbGUnLFxuICAgICAgICAgICAgLi4ubWFuaWZlc3Qub3B0aW9uc1xuICAgICAgICAgIH0pIGFzIEdyYXBoV2lkZ2V0T3B0aW9uc1xuICAgICAgKVxuICAgICk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy5vcHRpb25zJC5waXBlKGZpbHRlcigob3B0KSA9PiAhIW9wdCkpLnN1YnNjcmliZSgob3B0aW9ucykgPT4ge1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICB0aGlzLm9wdGlvbnNDb3B5ID0geyAuLi4oSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvcHRpb25zKSkgYXMgR3JhcGhXaWRnZXRPcHRpb25zKSB9O1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy52aWV3U2l6ZSQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLndpZGdldFNpemUkLCB0aGlzLmRpc3BsYXlIZWFkZXIkXSkucGlwZShcbiAgICAgIGRlbGF5KDEwKSxcbiAgICAgIG1hcCgoW3NpemUsIGhlYWRlcl0pID0+IFtzaXplLndpZHRoLCBzaXplLmhlaWdodCAtIChoZWFkZXIgPyBXSURHRVRfSEVBREVSX0hFSUdIVCA6IDApXSBhcyBbbnVtYmVyLCBudW1iZXJdKSxcbiAgICAgIHRhcCgoc2l6ZSkgPT4ge1xuICAgICAgICBpZiAodGhpcy5jYW52YXMpIHtcbiAgICAgICAgICB0aGlzLmNhbnZhcy5uYXRpdmVFbGVtZW50LndpZHRoID0gc2l6ZVswXTtcbiAgICAgICAgICB0aGlzLmNhbnZhcy5uYXRpdmVFbGVtZW50LmhlaWdodCA9IHNpemVbMV07XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuYWxsSXRlbXNXaXRoSW1hZ2VzJCA9IHRoaXMuYWxsSXRlbXMkLnBpcGUoXG4gICAgICBtZXJnZU1hcCgoaXRlbXMpID0+XG4gICAgICAgIGZyb20oXG4gICAgICAgICAgbmV3IFByb21pc2U8eyBpdGVtOiBJdGVtOyBpbWFnZTogSFRNTENhbnZhc0VsZW1lbnQgfVtdPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBQcm9taXNlLmFsbChpdGVtcy5tYXAoKGl0ZW0pID0+IHRoaXMuc3ltYm9sU2VydmljZS5nZXRTeW1ib2woaXRlbSkpKS50aGVuKChjYW52YXNlcykgPT5cbiAgICAgICAgICAgICAgcmVzb2x2ZShcbiAgICAgICAgICAgICAgICBpdGVtcy5tYXAoKGl0ZW0sIGlkeCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgICBpbWFnZTogY2FudmFzZXNbaWR4XVxuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuXG4gICAgY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLmFsbEl0ZW1zV2l0aEltYWdlcyQsXG4gICAgICB0aGlzLnJlc3VsdFNldCQucGlwZShtYXAoKHJzKSA9PiBycy5yZWxhdGlvbnMpKSxcbiAgICAgIHRoaXMudmlld1NpemUkLFxuICAgICAgdGhpcy5vcHRpb25zJCxcbiAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KFJlbGF0aW9uVHlwZXNTZWxlY3RvcnMucmVsYXRpb25zVHlwZXMpLnBpcGUodGFwKChydCkgPT4gKHRoaXMucmVsYXRpb25UeXBlcyA9IHJ0KSkpLFxuICAgICAgdGhpcy5zZWxlY3RlZElkcyRcbiAgICBdKS5zdWJzY3JpYmUoKFtpdGVtcywgcmVsYXRpb25zLCBzaXplLCBvcHRpb25zLCByZWxhdGlvblR5cGVzLCBzZWxlY3RlZElkc10pID0+IHtcbiAgICAgIHRoaXMuaXRlbXNBc05vZGVzID0gaXRlbXMubWFwKChpdGVtV2l0aEltYWdlLCBpZHgpID0+ICh7XG4gICAgICAgIGluZGV4OiBpZHgsXG4gICAgICAgIGl0ZW06IGl0ZW1XaXRoSW1hZ2UuaXRlbSxcbiAgICAgICAgaWQ6IGl0ZW1XaXRoSW1hZ2UuaXRlbS5pZCxcbiAgICAgICAgaW1hZ2U6IGl0ZW1XaXRoSW1hZ2UuaW1hZ2UsXG4gICAgICAgIHNlbGVjdGVkOiBzZWxlY3RlZElkcy5pbmRleE9mKGl0ZW1XaXRoSW1hZ2UuaXRlbS5pZCkgPiAtMVxuICAgICAgfSkpIGFzIFByeU5vZGVbXTtcblxuICAgICAgY29uc3QgdW5rbm93bkltYWdlID0gbmV3IEltYWdlKCk7XG4gICAgICB1bmtub3duSW1hZ2Uuc3JjID0gJy9hc3NldHMvc3Zncy9xdWVzdGlvbi1saW5lLnN2Zyc7XG5cbiAgICAgIC8vIENvbXBsZXRlIG1pc3Npbmcgbm9kZXNcbiAgICAgIHJlbGF0aW9ucy5mb3JFYWNoKChyZWxhdGlvbikgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuaXRlbXNBc05vZGVzLmZpbmQoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IHJlbGF0aW9uLnNvdXJjZSkpIHtcbiAgICAgICAgICB0aGlzLml0ZW1zQXNOb2Rlcy5wdXNoKHtcbiAgICAgICAgICAgIGluZGV4OiB0aGlzLml0ZW1zQXNOb2Rlcy5sZW5ndGgsXG4gICAgICAgICAgICBpdGVtOiB7IGlkOiByZWxhdGlvbi5zb3VyY2UsIG9DbGFzczogJ3Vua25vd24nLCBhdHRyaWJ1dGVzOiB7fSB9LFxuICAgICAgICAgICAgaWQ6IHJlbGF0aW9uLnNvdXJjZSxcbiAgICAgICAgICAgIGltYWdlOiB1bmtub3duSW1hZ2UsXG4gICAgICAgICAgICBzZWxlY3RlZDogc2VsZWN0ZWRJZHMuaW5kZXhPZihyZWxhdGlvbi5zb3VyY2UpID4gLTFcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuaXRlbXNBc05vZGVzLmZpbmQoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IHJlbGF0aW9uLmRlc3RpbmF0aW9uKSkge1xuICAgICAgICAgIHRoaXMuaXRlbXNBc05vZGVzLnB1c2goe1xuICAgICAgICAgICAgaW5kZXg6IHRoaXMuaXRlbXNBc05vZGVzLmxlbmd0aCxcbiAgICAgICAgICAgIGl0ZW06IHsgaWQ6IHJlbGF0aW9uLmRlc3RpbmF0aW9uLCBvQ2xhc3M6ICd1bmtub3duJywgYXR0cmlidXRlczoge30gfSxcbiAgICAgICAgICAgIGlkOiByZWxhdGlvbi5kZXN0aW5hdGlvbixcbiAgICAgICAgICAgIGltYWdlOiB1bmtub3duSW1hZ2UsXG4gICAgICAgICAgICBzZWxlY3RlZDogc2VsZWN0ZWRJZHMuaW5kZXhPZihyZWxhdGlvbi5kZXN0aW5hdGlvbikgPiAtMVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5yZWxhdGlvbnNBc0xpbmtzID0gcmVsYXRpb25zLm1hcCgocmVsYXRpb24pID0+ICh7XG4gICAgICAgIHNvdXJjZTogdGhpcy5pdGVtc0FzTm9kZXMuZmluZCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gcmVsYXRpb24uc291cmNlKT8uaW5kZXggPz8gLTEsXG4gICAgICAgIHRhcmdldDogdGhpcy5pdGVtc0FzTm9kZXMuZmluZCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gcmVsYXRpb24uZGVzdGluYXRpb24pPy5pbmRleCA/PyAtMSxcbiAgICAgICAgcmVsYXRpb25cbiAgICAgIH0pKSBhcyBQcnlMaW5rW107XG5cbiAgICAgIGlmICh0aGlzLnNpbXVsYXRpb24pIHtcbiAgICAgICAgdGhpcy5zaW11bGF0aW9uLnN0b3AoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zaW11bGF0aW9uID0gdGhpcy5pbml0U2ltdWxhdGlvbihvcHRpb25zLCBzaXplKS5vbigndGljaycsIHRoaXMuZHJhdyhzaXplLCBvcHRpb25zLCByZWxhdGlvblR5cGVzKSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy50b29sdGlwJC5waXBlKGZpbHRlcigodG9vbHRpcCkgPT4gISF0b29sdGlwICYmICEhdG9vbHRpcC5pdGVtKSkuc3Vic2NyaWJlKCh0b29sdGlwKSA9PiB7XG4gICAgICAgIGxldCB0eXBlID0gdG9vbHRpcC5pdGVtLml0ZW0ub0NsYXNzIGFzIHN0cmluZztcbiAgICAgICAgdGhpcy50b29sdGlwLmNsZWFyKCk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCQgPSB0aGlzLnRvb2x0aXBGYWN0b3J5U2VydmljZS5nZW5lcmF0ZVRvb2x0aXAodHlwZSwgdGhpcy5faW5qZWN0b3IsIHRoaXMudG9vbHRpcCk7XG4gICAgICAgIGNvbXBvbmVudCQuc3Vic2NyaWJlKChjb21wb25lbnQpID0+IHtcbiAgICAgICAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICAgICAgICBjb21wb25lbnQuaW5zdGFuY2UuZGF0YS5pdGVtID0gdG9vbHRpcC5pdGVtLml0ZW07XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMubW92ZSQucGlwZShhdWRpdFRpbWUoMzApKS5zdWJzY3JpYmUoKCRldmVudCkgPT4gdGhpcy5tb3ZlQ2FsbGJhY2soJGV2ZW50KSk7XG5cbiAgICB0aGlzLmJvdHRvbUxlZnQkID0gY29tYmluZUxhdGVzdChbdGhpcy53aWRnZXRTaXplJCwgdGhpcy5kaXNwbGF5SGVhZGVyJF0pLnBpcGUoXG4gICAgICBtYXAoXG4gICAgICAgIChbc2l6ZSwgZGlzcGxheUhlYWRlcl0pID0+XG4gICAgICAgICAgYHRyYW5zbGF0ZSgxMHB4ICxjYWxjKDEzcHggLSAke2Rpc3BsYXlIZWFkZXIgPyBXSURHRVRfSEVBREVSX0hFSUdIVCArICdweCcgOiAnMHB4J30pKWBcbiAgICAgICksXG4gICAgICBkZWxheSgxMClcbiAgICApO1xuICB9XG5cbiAgaW5pdFNpbXVsYXRpb24ob3B0aW9uczogR3JhcGhXaWRnZXRPcHRpb25zLCBzaXplOiBbbnVtYmVyLCBudW1iZXJdKSB7XG4gICAgc3dpdGNoIChvcHRpb25zLmxheW91dCkge1xuICAgICAgY2FzZSAnc2ltcGxlJzpcbiAgICAgICAgcmV0dXJuIHNpbXBsZVNpbXVsYXRpb24odGhpcy5pdGVtc0FzTm9kZXMsIHRoaXMucmVsYXRpb25zQXNMaW5rcywgb3B0aW9ucywgc2l6ZSk7XG4gICAgICBjYXNlICdmb3JjZSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZm9yY2VTaW11bGF0aW9uKHRoaXMuaXRlbXNBc05vZGVzKVxuICAgICAgICAgIC5mb3JjZSgnY2hhcmdlJywgZm9yY2VNYW55Qm9keSgpKVxuICAgICAgICAgIC5mb3JjZSgnbGluaycsIGZvcmNlTGluayh0aGlzLnJlbGF0aW9uc0FzTGlua3MpLmRpc3RhbmNlKDUwKS5zdHJlbmd0aCgwLjEpKVxuICAgICAgICAgIC5mb3JjZSgneCcsIGZvcmNlWCgpKVxuICAgICAgICAgIC5mb3JjZSgneScsIGZvcmNlWSgpKVxuICAgICAgICAgIC5mb3JjZSgnY29sbGlkZScsIGZvcmNlQ29sbGlkZShvcHRpb25zLm5vZGVSYWRpdXMgKiAzKSlcbiAgICAgICAgICAuZm9yY2UoJ2NlbnRlcicsIGZvcmNlQ2VudGVyKHNpemVbMF0gLyAyLCBzaXplWzFdIC8gMikpO1xuICAgIH1cbiAgfVxuXG4gIGVtaXRNYW5pZmVzdCgpIHtcbiAgICB0aGlzLm1hbmlmZXN0TW9kaWZpZWQuZW1pdCh7XG4gICAgICB3aWRnZXRJbmRleDogdGhpcy53aWRnZXRJbmRleCxcbiAgICAgIG1hbmlmZXN0OiB7IC4uLnRoaXMubWFuaWZlc3QsIG9wdGlvbnM6IHRoaXMub3B0aW9uc0NvcHkgfVxuICAgIH0pO1xuICB9XG5cbiAgcmVmcmVzaCgpIHtcbiAgICB0aGlzLmRyYXcoW3RoaXMuY2FudmFzLm5hdGl2ZUVsZW1lbnQud2lkdGgsIHRoaXMuY2FudmFzLm5hdGl2ZUVsZW1lbnQuaGVpZ2h0XSwgdGhpcy5vcHRpb25zLCB0aGlzLnJlbGF0aW9uVHlwZXMpKCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5jb250ZXh0ID0gdGhpcy5jYW52YXMubmF0aXZlRWxlbWVudC5nZXRDb250ZXh0KCcyZCcpO1xuICB9XG5cbiAgb3ZlcnJpZGUgbmdPbkRlc3Ryb3koKSB7XG4gICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICBpZiAodGhpcy5zaW11bGF0aW9uKSB7XG4gICAgICB0aGlzLnNpbXVsYXRpb24uc3RvcCgpO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZU1vZGUobW9kZTogJ21vdmUnIHwgJ3JlY3RhbmdsZScpIHtcbiAgICB0aGlzLm1vZGUgPSBtb2RlO1xuICB9XG5cbiAgY2hhbmdlTGF5b3V0KCRldmVudDogYW55KSB7XG4gICAgdGhpcy5vcHRpb25zQ29weSEubGF5b3V0ID0gJGV2ZW50O1xuICB9XG5cbiAgY2hhbmdlTm9kZVJhZGl1cygkZXZlbnQ6IGFueSkge1xuICAgIHRoaXMub3B0aW9uc0NvcHkhLm5vZGVSYWRpdXMgPSAkZXZlbnQ7XG4gIH1cblxuICAvKipcbiAgICogRHJhd2luZyB0aGluZ3NcbiAgICovXG5cbiAgZHJhdyhzaXplOiBbbnVtYmVyLCBudW1iZXJdLCBvcHRpb25zOiBHcmFwaFdpZGdldE9wdGlvbnMsIHJlbGF0aW9uVHlwZXM6IFJlbGF0aW9uVHlwZVtdKSB7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmICh0aGlzLmNvbnRleHQpIHtcbiAgICAgICAgLy8gQ2xlYXIgY2FudmFzXG4gICAgICAgIHRoaXMuY29udGV4dC5jbGVhclJlY3QoMCwgMCwgc2l6ZVswXSwgc2l6ZVsxXSk7XG5cbiAgICAgICAgLy8gRHJhd2luZyBsaW5rc1xuICAgICAgICB0aGlzLmNvbnRleHQuc2F2ZSgpO1xuICAgICAgICB0aGlzLmRyYXdMaW5rcyhvcHRpb25zLCByZWxhdGlvblR5cGVzKTtcbiAgICAgICAgdGhpcy5jb250ZXh0LnJlc3RvcmUoKTtcblxuICAgICAgICAvLyBEcmF3aW5nIG5vZGVzXG4gICAgICAgIHRoaXMuY29udGV4dC5zYXZlKCk7XG4gICAgICAgIHRoaXMuZHJhd05vZGVzKG9wdGlvbnMpO1xuICAgICAgICB0aGlzLmNvbnRleHQucmVzdG9yZSgpO1xuXG4gICAgICAgIC8vIERyYXdpbmcgc2VsZWN0aW9uIHJlY3RhbmdsZSBpZiBuZWVkZWRcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0UmVjdCkge1xuICAgICAgICAgIHRoaXMuY29udGV4dC5zYXZlKCk7XG4gICAgICAgICAgdGhpcy5kcmF3U2VsZWN0aW9uUmVjdCgpO1xuICAgICAgICAgIHRoaXMuY29udGV4dC5yZXN0b3JlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBkcmF3U2VsZWN0aW9uUmVjdCgpIHtcbiAgICBpZiAodGhpcy5jb250ZXh0ICYmIHRoaXMuc2VsZWN0UmVjdCAmJiB0aGlzLm1vZGUgPT09ICdyZWN0YW5nbGUnKSB7XG4gICAgICB0aGlzLmNvbnRleHQuZ2xvYmFsQWxwaGEgPSAwLjM7XG4gICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gJyNiY2RjZGEnO1xuXG4gICAgICBjb25zdCBtaW5YID0gTWF0aC5taW4odGhpcy5zZWxlY3RSZWN0LnN0YXJ0LngsIHRoaXMuc2VsZWN0UmVjdC5lbmQueCk7XG4gICAgICBjb25zdCBtaW5ZID0gTWF0aC5taW4odGhpcy5zZWxlY3RSZWN0LnN0YXJ0LnksIHRoaXMuc2VsZWN0UmVjdC5lbmQueSk7XG4gICAgICBjb25zdCBkWCA9IE1hdGguYWJzKHRoaXMuc2VsZWN0UmVjdC5zdGFydC54IC0gdGhpcy5zZWxlY3RSZWN0LmVuZC54KTtcbiAgICAgIGNvbnN0IGRZID0gTWF0aC5hYnModGhpcy5zZWxlY3RSZWN0LnN0YXJ0LnkgLSB0aGlzLnNlbGVjdFJlY3QuZW5kLnkpO1xuXG4gICAgICB0aGlzLmNvbnRleHQucmVjdChtaW5YLCBtaW5ZLCBkWCwgZFkpO1xuICAgICAgdGhpcy5jb250ZXh0LmZpbGwoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRyYXdOb2RlcyhvcHRpb25zOiBHcmFwaFdpZGdldE9wdGlvbnMpIHtcbiAgICBpZiAodGhpcy5jb250ZXh0KSB7XG4gICAgICB0aGlzLmNvbnRleHQuZ2xvYmFsQWxwaGEgPSBvcHRpb25zLm5vZGVTdHJva2VPcGFjaXR5O1xuICAgICAgZm9yIChjb25zdCBbaSwgbm9kZV0gb2YgdGhpcy5pdGVtc0FzTm9kZXMuZW50cmllcygpKSB7XG4gICAgICAgIHRoaXMuY29udGV4dC5iZWdpblBhdGgoKTtcbiAgICAgICAgdGhpcy5jb250ZXh0Lm1vdmVUbygobm9kZS54ID8/IDApICsgdGhpcy5nbG9iYWxPZmZzZXRbMF0sIChub2RlLnkgPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFsxXSk7XG4gICAgICAgIHRoaXMuY29udGV4dC5hcmMoXG4gICAgICAgICAgKG5vZGUueCA/PyAwKSArIHRoaXMuZ2xvYmFsT2Zmc2V0WzBdLFxuICAgICAgICAgIChub2RlLnkgPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFsxXSxcbiAgICAgICAgICBvcHRpb25zLm5vZGVSYWRpdXMgLyAyICsgOCxcbiAgICAgICAgICAwLFxuICAgICAgICAgIDIgKiBNYXRoLlBJLFxuICAgICAgICAgIGZhbHNlXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSBub2RlLnNlbGVjdGVkID8gJyM1NjlhOWMnIDogbm9kZS5pdGVtLm9DbGFzcyA9PT0gJ3Vua25vd24nID8gJyNlMmE3YTcnIDogJyNlY2VkZjQnO1xuICAgICAgICB0aGlzLmNvbnRleHQuc3Ryb2tlU3R5bGUgPSBub2RlLnNlbGVjdGVkID8gJyM1NjlhOWMnIDogbm9kZS5pdGVtLm9DbGFzcyA9PT0gJ3Vua25vd24nID8gJyNlMmE3YTcnIDogJyNlY2VkZjQnO1xuICAgICAgICB0aGlzLmNvbnRleHQuZmlsbCgpO1xuICAgICAgICB0aGlzLmNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgIHRoaXMuY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgbm9kZS5pbWFnZSxcbiAgICAgICAgICAobm9kZS54ID8/IDApICsgdGhpcy5nbG9iYWxPZmZzZXRbMF0gLSBvcHRpb25zLm5vZGVSYWRpdXMgLyAyLFxuICAgICAgICAgIChub2RlLnkgPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFsxXSAtIG9wdGlvbnMubm9kZVJhZGl1cyAvIDIsXG4gICAgICAgICAgb3B0aW9ucy5ub2RlUmFkaXVzLFxuICAgICAgICAgIG9wdGlvbnMubm9kZVJhZGl1c1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZHJhd0xpbmtzKG9wdGlvbnM6IEdyYXBoV2lkZ2V0T3B0aW9ucywgcmVsYXRpb25UeXBlczogUmVsYXRpb25UeXBlW10pIHtcbiAgICBpZiAodGhpcy5jb250ZXh0KSB7XG4gICAgICB0aGlzLmNvbnRleHQuZ2xvYmFsQWxwaGEgPSBvcHRpb25zLmxpbmtTdHJva2VPcGFjaXR5O1xuICAgICAgZm9yIChjb25zdCBbaSwgbGlua10gb2YgdGhpcy5yZWxhdGlvbnNBc0xpbmtzLmVudHJpZXMoKSkge1xuICAgICAgICB0aGlzLmNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgICAgIGNvbnN0IHNvdXJjZU5vZGUgPSB0aGlzLml0ZW1zQXNOb2Rlcy5maW5kKChpdGVtKSA9PiBpdGVtLmlkID09PSBsaW5rLnJlbGF0aW9uLnNvdXJjZSk7XG4gICAgICAgIGxldCB0YXJnZXROb2RlID0gdGhpcy5pdGVtc0FzTm9kZXMuZmluZCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gbGluay5yZWxhdGlvbi5kZXN0aW5hdGlvbik7XG4gICAgICAgIGlmIChsaW5rLnNvdXJjZSA9PT0gbGluay50YXJnZXQgJiYgdGFyZ2V0Tm9kZSkge1xuICAgICAgICAgIHRoaXMuY29udGV4dC5tb3ZlVG8oKHNvdXJjZU5vZGU/LnggPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFswXSwgKHNvdXJjZU5vZGU/LnkgPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFsxXSk7XG4gICAgICAgICAgdGhpcy5jb250ZXh0LmJlemllckN1cnZlVG8oXG4gICAgICAgICAgICAoc291cmNlTm9kZT8ueCA/PyAwKSAtIDEwICsgdGhpcy5nbG9iYWxPZmZzZXRbMF0sXG4gICAgICAgICAgICAoc291cmNlTm9kZT8ueSA/PyAwKSAtIDYwICsgdGhpcy5nbG9iYWxPZmZzZXRbMV0sXG4gICAgICAgICAgICAoc291cmNlTm9kZT8ueCA/PyAwKSArIDEyMCArIHRoaXMuZ2xvYmFsT2Zmc2V0WzBdLFxuICAgICAgICAgICAgKHNvdXJjZU5vZGU/LnkgPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFsxXSxcbiAgICAgICAgICAgIChzb3VyY2VOb2RlPy54ID8/IDApIC0gMTAgKyB0aGlzLmdsb2JhbE9mZnNldFswXSxcbiAgICAgICAgICAgIChzb3VyY2VOb2RlPy55ID8/IDApICsgMjAgKyB0aGlzLmdsb2JhbE9mZnNldFsxXVxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgeyBtaWRkbGVYLCBtaWRkbGVZLCBhbmdsZSB9ID0gdGhpcy5kcmF3U2VsZlJlbGF0aW9uVGV4dExpbmsobGluaywgc291cmNlTm9kZSEsIHJlbGF0aW9uVHlwZXMsIG9wdGlvbnMpO1xuICAgICAgICAgIC8vIGFycm93XG4gICAgICAgICAgdGhpcy5kcmF3QXJyb3coXG4gICAgICAgICAgICAodGFyZ2V0Tm9kZT8ueCA/PyAwKSArIDEyMCArIHRoaXMuZ2xvYmFsT2Zmc2V0WzBdLFxuICAgICAgICAgICAgKHRhcmdldE5vZGU/LnkgPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFsxXSxcbiAgICAgICAgICAgIG1pZGRsZVgsXG4gICAgICAgICAgICBtaWRkbGVZICsgMyxcbiAgICAgICAgICAgIGFuZ2xlIC0gMTAwXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmNvbnRleHQubW92ZVRvKChzb3VyY2VOb2RlPy54ID8/IDApICsgdGhpcy5nbG9iYWxPZmZzZXRbMF0sIChzb3VyY2VOb2RlPy55ID8/IDApICsgdGhpcy5nbG9iYWxPZmZzZXRbMV0pO1xuICAgICAgICAgIHRoaXMuY29udGV4dC5saW5lVG8oKHRhcmdldE5vZGU/LnggPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFswXSwgKHRhcmdldE5vZGU/LnkgPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFsxXSk7XG4gICAgICAgICAgY29uc3QgeyBtaWRkbGVYLCBtaWRkbGVZLCBhbmdsZSB9ID0gdGhpcy5kcmF3VGV4dExpbmsobGluaywgc291cmNlTm9kZSEsIHRhcmdldE5vZGUhLCByZWxhdGlvblR5cGVzLCBvcHRpb25zKTtcbiAgICAgICAgICAvLyBhcnJvd1xuICAgICAgICAgIHRoaXMuZHJhd0Fycm93KFxuICAgICAgICAgICAgKHRhcmdldE5vZGU/LnggPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFswXSxcbiAgICAgICAgICAgICh0YXJnZXROb2RlPy55ID8/IDApICsgdGhpcy5nbG9iYWxPZmZzZXRbMV0sXG4gICAgICAgICAgICBtaWRkbGVYLFxuICAgICAgICAgICAgbWlkZGxlWSxcbiAgICAgICAgICAgIGFuZ2xlXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZHJhd1NlbGZSZWxhdGlvblRleHRMaW5rKFxuICAgIGxpbms6IFByeUxpbmssXG4gICAgc291cmNlTm9kZTogUHJ5Tm9kZSxcbiAgICByZWxhdGlvblR5cGVzOiBSZWxhdGlvblR5cGVbXSxcbiAgICBvcHRpb25zOiBHcmFwaFdpZGdldE9wdGlvbnNcbiAgKSB7XG4gICAgY29uc3QgbWlkZGxlWCA9IChzb3VyY2VOb2RlPy54ID8/IDApICsgdGhpcy5nbG9iYWxPZmZzZXRbMF0gKyA0NTtcbiAgICBjb25zdCBtaWRkbGVZID0gKHNvdXJjZU5vZGU/LnkgPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFsxXSAtIDIwO1xuICAgIGxldCBhbmdsZSA9IE1hdGguYXRhbjIoc291cmNlTm9kZT8ueSA/PyAwLCBzb3VyY2VOb2RlPy54ID8/IDApO1xuICAgIGxldCBkcmF3QW5nbGUgPSBhbmdsZTtcblxuICAgIHJldHVybiB0aGlzLmRyYXdUZXh0KG1pZGRsZVgsIG1pZGRsZVksIGFuZ2xlLCByZWxhdGlvblR5cGVzLCBvcHRpb25zLCBsaW5rLCBkcmF3QW5nbGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBkcmF3VGV4dExpbmsoXG4gICAgbGluazogUHJ5TGluayxcbiAgICBzb3VyY2VOb2RlOiBQcnlOb2RlLFxuICAgIHRhcmdldE5vZGU6IFByeU5vZGUsXG4gICAgcmVsYXRpb25UeXBlczogUmVsYXRpb25UeXBlW10sXG4gICAgb3B0aW9uczogR3JhcGhXaWRnZXRPcHRpb25zXG4gICkge1xuICAgIGNvbnN0IG1pZGRsZVggPSAoKHNvdXJjZU5vZGU/LnggPz8gMCkgKyAodGFyZ2V0Tm9kZT8ueCA/PyAwKSkgLyAyICsgdGhpcy5nbG9iYWxPZmZzZXRbMF07XG4gICAgY29uc3QgbWlkZGxlWSA9ICgoc291cmNlTm9kZT8ueSA/PyAwKSArICh0YXJnZXROb2RlPy55ID8/IDApKSAvIDIgKyB0aGlzLmdsb2JhbE9mZnNldFsxXTtcbiAgICBsZXQgYW5nbGUgPSBNYXRoLmF0YW4yKCh0YXJnZXROb2RlPy55ID8/IDApIC0gKHNvdXJjZU5vZGU/LnkgPz8gMCksICh0YXJnZXROb2RlPy54ID8/IDApIC0gKHNvdXJjZU5vZGU/LnggPz8gMCkpO1xuICAgIGxldCBkcmF3QW5nbGUgPSBhbmdsZTtcbiAgICBpZiAodGhpcy5jb250ZXh0KSB7XG4gICAgICBpZiAoKHNvdXJjZU5vZGU/LnggPz8gMCkgPiAodGFyZ2V0Tm9kZT8ueCA/PyAwKSkge1xuICAgICAgICBkcmF3QW5nbGUgKz0gTWF0aC5QSTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5kcmF3VGV4dChtaWRkbGVYLCBtaWRkbGVZLCBhbmdsZSwgcmVsYXRpb25UeXBlcywgb3B0aW9ucywgbGluaywgZHJhd0FuZ2xlKTtcbiAgfVxuXG4gIHByaXZhdGUgZHJhd1RleHQoXG4gICAgbWlkZGxlWDogbnVtYmVyLFxuICAgIG1pZGRsZVk6IG51bWJlcixcbiAgICBhbmdsZTogbnVtYmVyLFxuICAgIHJlbGF0aW9uVHlwZXM6IGFueVtdLFxuICAgIG9wdGlvbnM6IEdyYXBoV2lkZ2V0T3B0aW9ucyxcbiAgICBsaW5rOiBQcnlMaW5rLFxuICAgIGRyYXdBbmdsZTogbnVtYmVyXG4gICkge1xuICAgIGlmICh0aGlzLmNvbnRleHQpIHtcbiAgICAgIHRoaXMuY29udGV4dC5mb250ID0gJzEwcHggVWJ1bnR1JztcbiAgICAgIGNvbnN0IHJlbGF0aW9uVHlwZSA9IGxpbmsucmVsYXRpb24ucmVsYXRpb25UeXBlO1xuICAgICAgdGhpcy5jb250ZXh0LnNhdmUoKTtcbiAgICAgIHRoaXMuY29udGV4dC50cmFuc2xhdGUobWlkZGxlWCwgbWlkZGxlWSk7XG4gICAgICB0aGlzLmNvbnRleHQucm90YXRlKGRyYXdBbmdsZSk7XG4gICAgICB0aGlzLmNvbnRleHQudGV4dEFsaWduID0gJ2NlbnRlcic7XG4gICAgICB0aGlzLmNvbnRleHQuZmlsbFRleHQocmVsYXRpb25UeXBlcy5maW5kKChyZWxUKSA9PiByZWxULmlkID09PSByZWxhdGlvblR5cGUpPy5uYW1lID8/IHJlbGF0aW9uVHlwZSwgMCwgLTcpO1xuICAgICAgdGhpcy5jb250ZXh0LnN0cm9rZVN0eWxlID0gb3B0aW9ucy5saW5rU3Ryb2tlQ29sb3I7XG4gICAgICB0aGlzLmNvbnRleHQubGluZVdpZHRoID0gb3B0aW9ucy5saW5rU3Ryb2tlV2lkdGg7XG4gICAgICB0aGlzLmNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICB0aGlzLmNvbnRleHQucmVzdG9yZSgpO1xuICAgIH1cbiAgICByZXR1cm4geyBtaWRkbGVYLCBtaWRkbGVZLCBhbmdsZSB9O1xuICB9XG5cbiAgcHJpdmF0ZSBkcmF3QXJyb3codGFyZ2V0WDogbnVtYmVyLCB0YXJnZXRZOiBudW1iZXIsIG1pZGRsZVg6IG51bWJlciwgbWlkZGxlWTogbnVtYmVyLCBhbmdsZTogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMuY29udGV4dCkge1xuICAgICAgY29uc3Qgd2lkdGggPSAxO1xuICAgICAgY29uc3QgaGVhZGxlbiA9IDEwO1xuXG4gICAgICAvLyBUaGlzIG1ha2VzIGl0IHNvIHRoZSBlbmQgb2YgdGhlIGFycm93IGhlYWQgaXMgbG9jYXRlZCBhdCB0b3gsIHRveSwgZG9uJ3QgYXNrIHdoZXJlIDEuMTUgY29tZXMgZnJvbVxuICAgICAgdGFyZ2V0WCAtPSBNYXRoLmNvcyhhbmdsZSkgKiAod2lkdGggKiAxLjE1KTtcbiAgICAgIHRhcmdldFkgLT0gTWF0aC5zaW4oYW5nbGUpICogKHdpZHRoICogMS4xNSk7XG5cbiAgICAgIC8vc3RhcnRpbmcgYSBuZXcgcGF0aCBmcm9tIHRoZSBoZWFkIG9mIHRoZSBhcnJvdyB0byBvbmUgb2YgdGhlIHNpZGVzIG9mIHRoZSBwb2ludFxuICAgICAgdGhpcy5jb250ZXh0LmJlZ2luUGF0aCgpO1xuICAgICAgdGhpcy5jb250ZXh0Lm1vdmVUbyhtaWRkbGVYLCBtaWRkbGVZKTtcbiAgICAgIHRoaXMuY29udGV4dC5saW5lVG8oXG4gICAgICAgIG1pZGRsZVggLSBoZWFkbGVuICogTWF0aC5jb3MoYW5nbGUgLSBNYXRoLlBJIC8gNyksXG4gICAgICAgIG1pZGRsZVkgLSBoZWFkbGVuICogTWF0aC5zaW4oYW5nbGUgLSBNYXRoLlBJIC8gNylcbiAgICAgICk7XG5cbiAgICAgIC8vcGF0aCBmcm9tIHRoZSBzaWRlIHBvaW50IG9mIHRoZSBhcnJvdywgdG8gdGhlIG90aGVyIHNpZGUgcG9pbnRcbiAgICAgIHRoaXMuY29udGV4dC5saW5lVG8oXG4gICAgICAgIG1pZGRsZVggLSBoZWFkbGVuICogTWF0aC5jb3MoYW5nbGUgKyBNYXRoLlBJIC8gNyksXG4gICAgICAgIG1pZGRsZVkgLSBoZWFkbGVuICogTWF0aC5zaW4oYW5nbGUgKyBNYXRoLlBJIC8gNylcbiAgICAgICk7XG5cbiAgICAgIC8vcGF0aCBmcm9tIHRoZSBzaWRlIHBvaW50IGJhY2sgdG8gdGhlIHRpcCBvZiB0aGUgYXJyb3csIGFuZCB0aGVuIGFnYWluIHRvIHRoZSBvcHBvc2l0ZSBzaWRlIHBvaW50XG4gICAgICB0aGlzLmNvbnRleHQubGluZVRvKG1pZGRsZVgsIG1pZGRsZVkpO1xuICAgICAgdGhpcy5jb250ZXh0LmxpbmVUbyhcbiAgICAgICAgbWlkZGxlWCAtIGhlYWRsZW4gKiBNYXRoLmNvcyhhbmdsZSAtIE1hdGguUEkgLyA3KSxcbiAgICAgICAgbWlkZGxlWSAtIGhlYWRsZW4gKiBNYXRoLnNpbihhbmdsZSAtIE1hdGguUEkgLyA3KVxuICAgICAgKTtcblxuICAgICAgLy9kcmF3cyB0aGUgcGF0aHMgY3JlYXRlZCBhYm92ZVxuICAgICAgdGhpcy5jb250ZXh0LmxpbmVXaWR0aCA9IHdpZHRoO1xuICAgICAgdGhpcy5jb250ZXh0LnN0cm9rZSgpO1xuICAgICAgdGhpcy5jb250ZXh0LmZpbGwoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTW91c2UgTWFuYWdlbWVudFxuICAgKi9cblxuICBvbk1vdXNlRG93bigkZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBjb25zdCBub2RlcyA9IHRoaXMuZmluZE5vZGVzKCRldmVudCk7XG4gICAgdGhpcy5kcmFnZ2VkTm9kZSA9IG5vZGVzWzBdO1xuICAgIGlmICh0aGlzLmRyYWdnZWROb2RlKSB7XG4gICAgICB0aGlzLnNpbXVsYXRpb24uYWxwaGFUYXJnZXQoMC4zKS5yZXN0YXJ0KCk7XG4gICAgICB0aGlzLmRyYWdnZWROb2RlLmZ4ID0gdGhpcy5kcmFnZ2VkTm9kZS54O1xuICAgICAgdGhpcy5kcmFnZ2VkTm9kZS5meSA9IHRoaXMuZHJhZ2dlZE5vZGUueTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RSZWN0ID0ge1xuICAgICAgICBzdGFydDogeyB4OiAkZXZlbnQub2Zmc2V0WCwgeTogJGV2ZW50Lm9mZnNldFkgfSxcbiAgICAgICAgZW5kOiB7IHg6ICRldmVudC5vZmZzZXRYLCB5OiAkZXZlbnQub2Zmc2V0WSB9XG4gICAgICB9O1xuICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfVxuICAgIHRoaXMubW91c2VEb3duID0gdHJ1ZTtcbiAgfVxuXG4gIG9uTW91c2VNb3ZlKCRldmVudDogTW91c2VFdmVudCkge1xuICAgIHRoaXMubW92ZSQubmV4dCgkZXZlbnQpO1xuICAgIGlmICh0aGlzLm1vdXNlRG93bikge1xuICAgICAgdGhpcy5kcmFnZ2luZyA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgbW92ZUNhbGxiYWNrKCRldmVudDogTW91c2VFdmVudCkge1xuICAgIGlmICh0aGlzLmRyYWdnZWROb2RlKSB7XG4gICAgICB0aGlzLmRyYWdnZWROb2RlLmZ4ID0gJGV2ZW50Lm9mZnNldFggLSB0aGlzLmdsb2JhbE9mZnNldFswXTtcbiAgICAgIHRoaXMuZHJhZ2dlZE5vZGUuZnkgPSAkZXZlbnQub2Zmc2V0WSAtIHRoaXMuZ2xvYmFsT2Zmc2V0WzFdO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5zZWxlY3RSZWN0KSB7XG4gICAgICAgIHRoaXMuc2VsZWN0UmVjdCEuZW5kID0geyB4OiAkZXZlbnQub2Zmc2V0WCwgeTogJGV2ZW50Lm9mZnNldFkgfTtcbiAgICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ21vdmUnKSB7XG4gICAgICAgICAgdGhpcy5hZGRpdGlvbm5hbE9mZnNldCA9IFtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0UmVjdC5lbmQueCAtIHRoaXMuc2VsZWN0UmVjdC5zdGFydC54LFxuICAgICAgICAgICAgdGhpcy5zZWxlY3RSZWN0LmVuZC55IC0gdGhpcy5zZWxlY3RSZWN0LnN0YXJ0LnlcbiAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG5cbiAgICAvLyBkaXNwbGF5IHRvb2x0aXAgZm9yIG5vZGVzXG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLmZpbmROb2RlcygkZXZlbnQpO1xuICAgIHRoaXMudG9vbHRpcCQubmV4dCh7IGl0ZW06IG5vZGVzWzBdLCBkaXNwbGF5OiBub2Rlcy5sZW5ndGggPiAwLCB4OiAkZXZlbnQub2Zmc2V0WCwgeTogJGV2ZW50Lm9mZnNldFkgfSk7XG4gIH1cblxuICBvbk1vdXNlVXAoJGV2ZW50OiBNb3VzZUV2ZW50LCBsZWF2ZSA9IGZhbHNlKSB7XG4gICAgaWYgKCRldmVudC5idXR0b24gIT09IDIpIHtcbiAgICAgIGlmICh0aGlzLmRyYWdnaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLmRyYWdnZWROb2RlKSB7XG4gICAgICAgICAgdGhpcy5zaW11bGF0aW9uLmFscGhhVGFyZ2V0KDApO1xuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5Py5sYXlvdXQgPT09ICdmb3JjZScpIHtcbiAgICAgICAgICAgIHRoaXMuZHJhZ2dlZE5vZGUuZnggPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5kcmFnZ2VkTm9kZS5meSA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0aGlzLm1vZGUgPT09ICdyZWN0YW5nbGUnKSB7XG4gICAgICAgICAgICBjb25zdCBub2RlcyA9IHRoaXMuZmluZE5vZGVzSW5TaGFwZWQodGhpcy5zZWxlY3RSZWN0ISk7XG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKERhc2hib2FyZEFjdGlvbnMuc2VsZWN0TWFueSh7IGlkczogbm9kZXMubWFwKChub2RlKSA9PiBub2RlLml0ZW0uaWQpIH0pKTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9mZnNldCA9IFsuLi50aGlzLmdsb2JhbE9mZnNldF07XG4gICAgICAgICAgICB0aGlzLmFkZGl0aW9ubmFsT2Zmc2V0ID0gWzAsIDBdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCFsZWF2ZSkge1xuICAgICAgICAgIGNvbnN0IG5vZGVzID0gdGhpcy5maW5kTm9kZXMoJGV2ZW50KTtcbiAgICAgICAgICBpZiAobm9kZXNbMF0/Lml0ZW0/LmlkKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKERhc2hib2FyZEFjdGlvbnMuc2VsZWN0KHsgaWQ6IG5vZGVzWzBdPy5pdGVtPy5pZCwgY3VtdWxhdGl2ZTogJGV2ZW50LnNoaWZ0S2V5IH0pKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChEYXNoYm9hcmRBY3Rpb25zLnNlbGVjdCh7IGlkOiAnJywgY3VtdWxhdGl2ZTogJGV2ZW50LnNoaWZ0S2V5IH0pKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5tb2RlID0gJ21vdmUnO1xuICAgIHRoaXMuc2VsZWN0UmVjdCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmRyYWdnZWROb2RlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZHJhZ2dpbmcgPSBmYWxzZTtcbiAgICB0aGlzLm1vdXNlRG93biA9IGZhbHNlO1xuICB9XG5cbiAgZ2V0IGdsb2JhbE9mZnNldCgpIHtcbiAgICByZXR1cm4gW3RoaXMub2Zmc2V0WzBdICsgdGhpcy5hZGRpdGlvbm5hbE9mZnNldFswXSwgdGhpcy5vZmZzZXRbMV0gKyB0aGlzLmFkZGl0aW9ubmFsT2Zmc2V0WzFdXTtcbiAgfVxuXG4gIGNvbnRleHRNZW51KCRldmVudDogTW91c2VFdmVudCkge1xuICAgIGlmICh0aGlzLm1hbmlmZXN0LmNvbnRleHRNZW51ICE9PSBmYWxzZSkge1xuICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBjb25zdCBub2RlcyA9IHRoaXMuZmluZE5vZGVzKCRldmVudCk7XG4gICAgICBpZiAobm9kZXNbMF0gJiYgbm9kZXNbMF0uaXRlbSkge1xuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFxuICAgICAgICAgIENvbnRleHRNZW51QWN0aW9ucy5vcGVuKHtcbiAgICAgICAgICAgIGl0ZW1JZDogbm9kZXNbMF0uaXRlbS5pZCxcbiAgICAgICAgICAgIGNsaWVudFg6ICRldmVudC5jbGllbnRYLFxuICAgICAgICAgICAgY2xpZW50WTogJGV2ZW50LmNsaWVudFksXG4gICAgICAgICAgICByZXN1bHRTZXQ6IEFycmF5LmlzQXJyYXkodGhpcy5tYW5pZmVzdC5kYXRhc291cmNlKSA/IHRoaXMubWFuaWZlc3QuZGF0YXNvdXJjZVswXSA6IHRoaXMubWFuaWZlc3QuZGF0YXNvdXJjZSxcbiAgICAgICAgICAgIGZyb206ICdncmFwaCdcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLm9uTW91c2VVcCgkZXZlbnQsIHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRpbmcgTm9kZXNcbiAgICovXG5cbiAgZmluZE5vZGVzKCRldmVudDogTW91c2VFdmVudCkge1xuICAgIHJldHVybiB0aGlzLml0ZW1zQXNOb2Rlcy5maWx0ZXIoXG4gICAgICAoaXRlbSkgPT5cbiAgICAgICAgTWF0aC5wb3coKGl0ZW0ueCA/PyAwKSAtICRldmVudC5vZmZzZXRYICsgdGhpcy5nbG9iYWxPZmZzZXRbMF0sIDIpICtcbiAgICAgICAgICBNYXRoLnBvdygoaXRlbS55ID8/IDApICsgdGhpcy5nbG9iYWxPZmZzZXRbMV0gLSAkZXZlbnQub2Zmc2V0WSwgMikgPFxuICAgICAgICBNYXRoLnBvdyh0aGlzLm9wdGlvbnMubm9kZVJhZGl1cyAvIDIgKyA4LCAyKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGZpbmROb2Rlc0luU2hhcGVkKHNoYXBlOiB7IHN0YXJ0OiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH07IGVuZDogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9IH0pOiBQcnlOb2RlW10ge1xuICAgIGNvbnN0IG1pblggPSBNYXRoLm1pbihzaGFwZS5zdGFydC54LCBzaGFwZS5lbmQueCk7XG4gICAgY29uc3QgbWF4WCA9IE1hdGgubWF4KHNoYXBlLnN0YXJ0LngsIHNoYXBlLmVuZC54KTtcbiAgICBjb25zdCBtaW5ZID0gTWF0aC5taW4oc2hhcGUuc3RhcnQueSwgc2hhcGUuZW5kLnkpO1xuICAgIGNvbnN0IG1heFkgPSBNYXRoLm1heChzaGFwZS5zdGFydC55LCBzaGFwZS5lbmQueSk7XG5cbiAgICByZXR1cm4gdGhpcy5pdGVtc0FzTm9kZXMuZmlsdGVyKFxuICAgICAgKGl0ZW0pID0+XG4gICAgICAgIChpdGVtLnggPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFswXSA+IG1pblggJiZcbiAgICAgICAgKGl0ZW0ueCA/PyAwKSArIHRoaXMuZ2xvYmFsT2Zmc2V0WzBdIDwgbWF4WCAmJlxuICAgICAgICAoaXRlbS55ID8/IDApICsgdGhpcy5nbG9iYWxPZmZzZXRbMV0gPiBtaW5ZICYmXG4gICAgICAgIChpdGVtLnkgPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFsxXSA8IG1heFlcbiAgICApO1xuICB9XG5cbiAgb3ZlcnJpZGUgdG9JbWFnZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICByZXNvbHZlKHRoaXMuY2FudmFzLm5hdGl2ZUVsZW1lbnQudG9EYXRhVVJMKCdpbWFnZS9wbmcnKSk7XG4gICAgfSk7XG4gIH1cbn1cbiIsIjxwcnktd2lkZ2V0LWZvcmNlLWdyYXBoLWNzcz48L3ByeS13aWRnZXQtZm9yY2UtZ3JhcGgtY3NzPlxuPGRpdiBjbGFzcz1cIm8td2lkZ2V0IG8td2lkZ2V0LS1ncmFwaFwiPlxuICA8cHJ5LXdpZGdldC1oZWFkZXJcbiAgICBbZGF0YXNvdXJjZUlkc109XCIoZGF0YXNvdXJjZUlkcyQgfCBhc3luYykgPz8gW11cIlxuICAgICpuZ0lmPVwiZGlzcGxheUhlYWRlciQgfCBhc3luY1wiXG4gICAgW3dpZGdldEluZGV4XT1cIndpZGdldEluZGV4XCJcbiAgICBbbWFuaWZlc3RdPVwibWFuaWZlc3RcIlxuICAgIChtYW5pZmVzdE1vZGlmaWVkKT1cIm1hbmlmZXN0TW9kaWZpZWQuZW1pdCgkZXZlbnQpXCJcbiAgICBbaGVhZGVyT3B0aW9uc109XCIoZGlzcGxheUhlYWRlciQgfCBhc3luYykgPz8ge31cIlxuICAgICNoZWFkZXJcbiAgPlxuICAgIDxwcnktc2V0dGluZ3NcbiAgICAgIChzYXZlVHJpZ2dlcmVkKT1cImVtaXRNYW5pZmVzdCgpXCJcbiAgICAgIFtoZWFkZXJQcmVzZW50XT1cImRpc3BsYXlIZWFkZXIkIHwgYXN5bmNcIlxuICAgICAgW3dpZGdldEluZGV4XT1cIndpZGdldEluZGV4XCJcbiAgICAgIFtoZWFkZXJdPVwiaGVhZGVyXCJcbiAgICAgIFtvcGVuJF09XCJvcGVuJFwiXG4gICAgICBjbGFzcz1cIm8tc2V0dGluZ3NcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cImdyYXBoX2xheW91dFwiPnt7ICdAcHJ5LndpZGdldC5ncmFwaC5sYXlvdXQnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlTGF5b3V0KCRldmVudClcIlxuICAgICAgICAgIFtpdGVtc0FzT3B0aW9uXT1cInRydWVcIlxuICAgICAgICAgIFtpdGVtc109XCJsYXlvdXRzXCJcbiAgICAgICAgICBbbmdNb2RlbF09XCJvcHRpb25zQ29weSEubGF5b3V0XCJcbiAgICAgICAgICBiaW5kTGFiZWw9XCJrZXlcIlxuICAgICAgICAgIGJpbmRWYWx1ZT1cImtleVwiXG4gICAgICAgICAgaWQ9XCJncmFwaF9sYXlvdXRcIlxuICAgICAgICAgIGNsYXNzPVwiYS1wcnktc2VsZWN0XCJcbiAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgIDxwcnktcmFuZ2VcbiAgICAgICAgICBbbmdNb2RlbF09XCJvcHRpb25zQ29weSEubm9kZVJhZGl1c1wiXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlTm9kZVJhZGl1cygkZXZlbnQpXCJcbiAgICAgICAgICBsYWJlbFRyYW5zbGF0ZT1cIkBwcnkud2lkZ2V0LmdyYXBoLm5vZGVSYWRpdXNcIlxuICAgICAgICAgIG1pbj1cIjEwXCJcbiAgICAgICAgICBtYXg9XCIyMDBcIlxuICAgICAgICA+PC9wcnktcmFuZ2U+XG4gICAgICA8L2Rpdj5cbiAgICA8L3ByeS1zZXR0aW5ncz5cbiAgPC9wcnktd2lkZ2V0LWhlYWRlcj5cbiAgPGRpdiBjbGFzcz1cIm5vLXJlc3VsdFwiICpuZ0lmPVwiKGFsbEl0ZW1zV2l0aEltYWdlcyQgfCBhc3luYyk/Lmxlbmd0aCA9PT0gMFwiPlxuICAgIDxpbWdcbiAgICAgIGNsYXNzPVwibm8tcmVzdWx0X19zZWFyY2hcIlxuICAgICAgc3JjPVwiLi4vLi4vLi4vYXNzZXRzL3N2Z3MvcHJ5X3JlY2hlcmNoZV9wYXNfZGVfcmVzdWx0YXQuc3ZnXCJcbiAgICAgIGFsdD1cInt7ICdAcHJ5LndpZGdldC50YWJsZS5lbXB0eScgfCBpMThuIH19XCJcbiAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgLz5cbiAgICA8c3BhbiBjbGFzcz1cIm5vLXJlc3VsdF9fdGV4dFwiPnt7ICdAcHJ5LndpZGdldC5ncmFwaC5lbXB0eScgfCBpMThuIH19PC9zcGFuPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cIm0tYnRuLWdyb3VwIC1zZWxlY3Rpb24tY2hvaWNlXCIgW3N0eWxlLnRyYW5zZm9ybV09XCJib3R0b21MZWZ0JCB8IGFzeW5jXCI+XG4gICAgPGJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzcz1cImEtYnRuIGEtYnRuLS1pY29uLW9ubHlcIlxuICAgICAgKGNsaWNrKT1cImNoYW5nZU1vZGUoJ21vdmUnKVwiXG4gICAgICBbY2xhc3MuLXNlbGVjdGVkXT1cIm1vZGUgPT09ICdtb3ZlJ1wiXG4gICAgICBbcHJ5VG9vbHRpcF09XCJpbmZvVG9vbHRpcE1vdmVcIlxuICAgICAgcHJ5VG9vbHRpcFBvc2l0aW9uPVwiYm90dG9tXCJcbiAgICAgIGFyaWEtZGVzY3JpYmVkYnk9XCJpbmZvVG9vbHRpcE1vdmVfd2lkZ2V0TWFwXCJcbiAgICA+XG4gICAgICA8cHJ5LWljb24gaWNvblN2Zz1cIm1vdmVcIj48L3ByeS1pY29uPlxuICAgICAgPHNwYW4gY2xhc3M9XCJ1LXZpc3VhbGx5LWhpZGRlblwiPnt7ICdAcHJ5LndpZGdldC5ncmFwaC5tb3ZlJyB8IGkxOG4gfX08L3NwYW4+XG4gICAgPC9idXR0b24+XG5cbiAgICA8YnV0dG9uXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGNsYXNzPVwiYS1idG4gYS1idG4tLWljb24tb25seVwiXG4gICAgICAoY2xpY2spPVwiY2hhbmdlTW9kZSgncmVjdGFuZ2xlJylcIlxuICAgICAgW2NsYXNzLi1zZWxlY3RlZF09XCJtb2RlID09PSAncmVjdGFuZ2xlJ1wiXG4gICAgICBbcHJ5VG9vbHRpcF09XCJpbmZvVG9vbHRpcFJlY3RcIlxuICAgICAgcHJ5VG9vbHRpcFBvc2l0aW9uPVwiYm90dG9tXCJcbiAgICAgIGFyaWEtZGVzY3JpYmVkYnk9XCJpbmZvVG9vbHRpcFJlY3Rfd2lkZ2V0TWFwXCJcbiAgICA+XG4gICAgICA8cHJ5LWljb24gaWNvblN2Zz1cInJlY3RhbmdsZVwiPjwvcHJ5LWljb24+XG4gICAgICA8c3BhbiBjbGFzcz1cInUtdmlzdWFsbHktaGlkZGVuXCI+e3sgJ0Bwcnkud2lkZ2V0LmdyYXBoLnJlY3RhbmdsZScgfCBpMThuIH19PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cblxuICA8Y2FudmFzXG4gICAgI2NhbnZhc1xuICAgIGNsYXNzPVwiby13aWRnZXQtLWdyYXBoX19jYW52YXNcIlxuICAgIChtb3VzZW1vdmUpPVwib25Nb3VzZU1vdmUoJGV2ZW50KVwiXG4gICAgKG1vdXNlZG93bik9XCJvbk1vdXNlRG93bigkZXZlbnQpXCJcbiAgICAobW91c2V1cCk9XCJvbk1vdXNlVXAoJGV2ZW50KVwiXG4gICAgKG1vdXNlbGVhdmUpPVwib25Nb3VzZVVwKCRldmVudCwgdHJ1ZSlcIlxuICAgIChjb250ZXh0bWVudSk9XCJjb250ZXh0TWVudSgkZXZlbnQpXCJcbiAgPjwvY2FudmFzPlxuXG4gIDxkaXYgY2xhc3M9XCJzZWxlY3Rpb24tcmVjdGFuZ2xlXCIgI3NlbGVjdGlvblJlY3RhbmdsZT48L2Rpdj5cblxuICA8ZGl2XG4gICAgY2xhc3M9XCJtLXRvb2x0aXAgbS10b29sdGlwLS1wb3B1cCBub2V2ZW50XCJcbiAgICBbc3R5bGUuZGlzcGxheV09XCIodG9vbHRpcCQgfCBhc3luYyk/LmRpc3BsYXkgPyAnYmxvY2snIDogJ25vbmUnXCJcbiAgICBbc3R5bGUubGVmdC5weF09XCIoKHRvb2x0aXAkIHwgYXN5bmMpPy54ID8/IDApICsgNTBcIlxuICAgIFtzdHlsZS50b3AucHhdPVwiKCh0b29sdGlwJCB8IGFzeW5jKT8ueSA/PyAwKSArIDUwXCJcbiAgPlxuICAgIDxkaXYgI3Rvb2x0aXA+PC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjaW5mb1Rvb2x0aXBNb3ZlPlxuICA8ZGl2IGNsYXNzPVwibS10b29sdGlwXCIgcm9sZT1cInRvb2x0aXBcIiBpZD1cImluZm9Ub29sdGlwTW92ZV93aWRnZXRNYXBcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICA8c3BhbiBjbGFzcz1cIm0tdG9vbHRpcF9fdGV4dFwiPnt7ICdAcHJ5LndpZGdldC5ncmFwaC5tb3ZlJyB8IGkxOG4gfX08L3NwYW4+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNpbmZvVG9vbHRpcFJlY3Q+XG4gIDxkaXYgY2xhc3M9XCJtLXRvb2x0aXBcIiByb2xlPVwidG9vbHRpcFwiIGlkPVwiaW5mb1Rvb2x0aXBSZWN0X3dpZGdldE1hcFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgIDxzcGFuIGNsYXNzPVwibS10b29sdGlwX190ZXh0XCI+e3sgJ0Bwcnkud2lkZ2V0LmdyYXBoLnJlY3RhbmdsZScgfCBpMThuIH19PC9zcGFuPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|