@sunbird-cb/tree-hierarchy 0.0.2-cbrelease-4.8.26 → 0.0.3-cbrelease-4.8.26
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/lib/components/term-card/term-card.component.mjs +9 -3
- package/esm2022/lib/components/tree-column-view/tree-column-view.component.mjs +9 -3
- package/esm2022/lib/components/tree-view/tree-view.component.mjs +90 -13
- package/esm2022/lib/tree-hierarchy.service.mjs +6 -2
- package/fesm2022/sunbird-cb-tree-hierarchy.mjs +109 -17
- package/fesm2022/sunbird-cb-tree-hierarchy.mjs.map +1 -1
- package/lib/components/term-card/term-card.component.d.ts +6 -1
- package/lib/components/term-card/term-card.component.d.ts.map +1 -1
- package/lib/components/tree-column-view/tree-column-view.component.d.ts +3 -1
- package/lib/components/tree-column-view/tree-column-view.component.d.ts.map +1 -1
- package/lib/components/tree-view/tree-view.component.d.ts +3 -0
- package/lib/components/tree-view/tree-view.component.d.ts.map +1 -1
- package/lib/tree-hierarchy.service.d.ts +1 -0
- package/lib/tree-hierarchy.service.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -32,6 +32,7 @@ export class TermCardComponent {
|
|
|
32
32
|
this.loaded = {};
|
|
33
33
|
this.isSelected = new EventEmitter();
|
|
34
34
|
this.selectedCard = new EventEmitter();
|
|
35
|
+
this.cardAction = new EventEmitter();
|
|
35
36
|
}
|
|
36
37
|
ngOnInit() {
|
|
37
38
|
this.isApprovalRequired = this.localConnectionService.getConfigInfo().isApprovalRequired;
|
|
@@ -295,17 +296,22 @@ export class TermCardComponent {
|
|
|
295
296
|
}, 100);
|
|
296
297
|
});
|
|
297
298
|
}
|
|
299
|
+
removeConnection(item) {
|
|
300
|
+
this.cardAction.emit({ action: 'remove-term', data: item });
|
|
301
|
+
}
|
|
298
302
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TermCardComponent, deps: [{ token: i1.FrameworkService }, { token: i2.LocalConnectionService }, { token: i3.ApprovalService }, { token: i4.MatLegacyDialog }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
299
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TermCardComponent, selector: "lib-term-card", inputs: { data: "data" }, outputs: { isSelected: "isSelected", selectedCard: "selectedCard" }, ngImport: i0, template: "<ng-container [ngSwitch]=\"( (data && data?.cardSubType) || 'cardMinimal')\">\n <ng-container *ngSwitchCase=\"'standard'\" [ngTemplateOutlet]=\"cardStandard\"></ng-container>\n <ng-container *ngSwitchCase=\"'space-saving'\" [ngTemplateOutlet]=\"cardSpaceSaving\"></ng-container>\n <ng-container *ngSwitchDefault [ngTemplateOutlet]=\"cardMinimal\"></ng-container>\n</ng-container>\n\n<ng-template #cardMinimal>\n <div #cardRef class=\"term-card clickable {{data.index}}\" (click)=\"cardClicked(data, cardRef)\"\n [ngClass]=\"[data.children.selected?'selected':'', data.children.approvalStatus === 'Draft'? 'inDraft':'',\n data.children.associationProperties?.approvalStatus === 'Draft' && isApprovalRequired && !approvalList.length || data.children.highlight && isApprovalRequired ? 'inAssociationDraft':'']\"\n id=\"{{data.children.name}}\"\n [ngStyle]=\"{'background-color':getColor(data.index,cardRef,'bgColor',data)}\">\n <!-- (click)=\"data.selected=!data.selected\" --> \n <div class=\"term-card-parent\">\n <!-- <Below element is to show id on top left of the card> -->\n <!-- <div class=\"id\" [hidden]=\"true\">{{data.children.code}}</div> -->\n \n <div class=\"term-card-content\">\n <!-- <ng-container *ngIf=\"data?.children?.refId\">\n <div class=\"ribbon\">{{data?.children?.refId}}</div>\n </ng-container> -->\n\n <ng-container *ngIf=\"data?.children?.additionalProperties?.competencyArea?.name\">\n <div class=\"mb-2\">\n <span class=\"comp-area {{data?.children?.additionalProperties?.competencyArea?.name?.toLowerCase()}}\">{{data?.children?.additionalProperties?.competencyArea?.name}}</span>\n </div>\n </ng-container>\n <div class=\"card-title\">{{data.children.name}}\n <ng-container *ngIf=\"data?.children?.refId\">\n <div class=\"refIdCard mt-2\">\n <span>{{data?.children?.refId}} </span>\n </div>\n </ng-container> \n </div>\n <!-- <ng-container *ngIf=\"data?.children?.refId\">\n <div class=\"refIdCard px-4\">\n <span>{{data?.children?.refId}} </span>\n </div>\n </ng-container> -->\n <!-- <span>++{{data.children.selected}}+++</span>\n <span>=={{data.children.status}}==</span> -->\n <div class=\"card-description flex flex-middle gap-1\">\n <mat-icon svgIcon=\"frac\"></mat-icon> \n <span>{{(data.children.children) ? data.children.children?.length : 0}} Child Org</span>\n </div>\n </div>\n </div>\n\n <!-- <p>{{data.children.approvalStatus}}, {{data.children.associationProperties?.approvalStatus}}</p> -->\n <!-- *ngIf=\"!data.isViewOnly && data.children.approvalStatus === 'Draft' && isApprovalRequired\" -->\n\n <!-- (click)=\"$event.stopPropagation();\" -->\n <ng-container *ngIf=\"data?.columnInfo?.config?.enableThreeDot\" >\n <button type=\"button\" mat-icon-button i18n-aria-label aria-label=\"action items\"\n [matMenuTriggerFor]=\"orgMenu\" [matMenuTriggerData]=\"{'data':data, 'cardRef': cardRef}\" class=\"action-btn\">\n <mat-icon>more_vert</mat-icon>\n </button>\n </ng-container>\n <!-- <div class=\"term-card-checkbox\">\n <mat-checkbox color=\"primary\" *ngIf=\"data.children.approvalStatus === 'Draft' && isApprovalRequired && !approvalList.length || \n data.children.associationProperties?.approvalStatus === 'Draft' && isApprovalRequired && !approvalList.length ||\n data.children.highlight && isApprovalRequired\" [checked]=\"data.children.highlight\" class=\"termSelection\"\n (change)=\"handleProductClick(data.children, $event)\" (click)=\"$event.stopPropagation()\"></mat-checkbox>\n <mat-icon color=\"primary\" class=\"approve-flag\"\n *ngIf=\"data.children.highlight && isApprovalRequired\">{{app_strings.flag}}</mat-icon>\n </div> -->\n </div>\n</ng-template>\n\n<ng-template #cardStandard>\n <div>\n {{data.children.name}} \n </div>\n <div>\n {{data.children.description}} s\n </div>\n</ng-template>\n\n<ng-template #cardSpaceSaving>\n <div>\n {{data.children.name}}\n </div>\n</ng-template>\n\n<mat-menu #cardMenu=\"matMenu\" class=\"menu-sec\">\n <ng-template matMenuContent let-rowData=\"data\" let-cardRef=\"cardRef\">\n <!-- <div > -->\n <button *ngIf=\"data.columnInfo.config.enableView\" (click)=\"view(data, data.children, data.index)\" mat-menu-item name=\"channel-analytics-button\"\n class=\"ws-mat-primary-text\" i18n-aria-label aria-label=\"Analytics\">\n <mat-icon>visibility</mat-icon> <span>View</span>\n </button>\n <button *ngIf=\"data.columnInfo.config.enabaleEdit\" (click)=\"edit(data, data.children,data.index, cardRef)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"ws-mat-primary-text\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>edit</mat-icon>\n <span>Edit</span>\n </button>\n <button *ngIf=\"data.columnInfo.config.enableAdd\" (click)=\"create(data)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"ws-mat-primary-text\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>add</mat-icon>\n <span>Add</span>\n </button>\n <button *ngIf=\"data.columnInfo.config.enableDelete\" (click)=\"delete(data)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"ws-mat-primary-text\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>delete</mat-icon>\n <span>Delete</span>\n </button>\n </ng-template>\n</mat-menu>\n\n<mat-menu #orgMenu=\"matMenu\" class=\"menu-sec\">\n <ng-template matMenuContent let-rowData=\"data\" let-cardRef=\"cardRef\">\n <!-- <button *ngIf=\"data.columnInfo.config.enableUpdateHierarchy\" (click)=\"updateHierarchy(data, data.children, data.index)\" mat-menu-item name=\"channel-analytics-button\"\n class=\"ws-mat-primary-text\" i18n-aria-label aria-label=\"Analytics\">\n <mat-icon>visibility</mat-icon> <span>Update Hierarchy</span>\n </button>\n <button *ngIf=\"data.columnInfo.config.enabaleRemoveConnection\" (click)=\"removeConnection(data, data.children,data.index, cardRef)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"ws-mat-primary-text\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>edit</mat-icon>\n <span>Remove Connection</span>\n </button>\n <button *ngIf=\"data.columnInfo.config.enableManageOrganization\" (click)=\"manageOrganization(data)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"ws-mat-primary-text\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>add</mat-icon>\n <span>Manage Organisation</span>\n </button> -->\n </ng-template>\n</mat-menu>", styles: [".term-card{border:1px solid rgba(0,0,0,.08);padding:.9rem;margin:0 0 1em;background-color:#fff;border-radius:8px;overflow:hidden;position:relative;z-index:45;display:flex;align-items:center;box-shadow:#0000001a 0 1px 3px,#0000000f 0 1px 2px;word-break:break-word}.term-card .termSelection{position:absolute;right:10px;top:10px}.term-card .term-card-parent{display:flex;flex:1 1 0%}.term-card .term-card-parent .term-card-content{white-space:initial}.term-card .term-card-parent .term-card-content .card-title{margin-bottom:.5em;font-family:Lato;font-size:14px;font-weight:400}.term-card .term-card-parent .term-card-content .card-description{color:#000;font-size:12px!important;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.term-card .term-card-parent .term-card-content .card-description mat-icon{width:16px;height:16px;color:#1b4ca1}.term-card .term-card-checkbox{width:10%}.term-card.selected{color:#000;border-style:none}.term-card.selected .card-description{color:#000!important}.term-card.selected .card-description mat-icon{color:#000!important}.term-card.clickable{cursor:pointer}.approve-flag{position:absolute;right:5px;top:35px;font-size:24px}::ng-deep .menu-sec{min-height:0px!important;background:#fff!important}::ng-deep .mat-mdc-menu-panel{background-color:#fff!important}::ng-deep .mat-mdc-menu-content,::ng-deep .mat-mdc-menu-item{background-color:#fff!important}.menu-sec{background:#fff!important}.refIdCard{border-radius:12px;width:fit-content;border:1px solid #bbb;padding:0 8px;font-size:8px!important;display:flex;align-items:center}.comp-area{font-family:Inter;font-size:12px;font-weight:600;line-height:16px;text-align:left;padding:8px;border-radius:12px}.comp-area.functional{background:#e24577;color:#fff}.comp-area.domain{background:#7b47a4;color:#fff}.comp-area.behavioural{background:#f9bf71}.ribbon{font-size:8px;font-weight:700;color:#fff}.ribbon{--f: .5em;--r: .8em;position:absolute;top:8px;right:calc(-1 * var(--f));padding-inline:.25em;padding-right:8px;line-height:1.8;background:#fa6900;border-bottom:var(--f) solid rgba(0,0,0,.3333333333);border-left:var(--r) solid rgba(0,0,0,0);clip-path:polygon(var(--r) 0,100% 0,100% calc(100% - var(--f)),calc(100% - var(--f)) 100%,calc(100% - var(--f)) calc(100% - var(--f)),var(--r) calc(100% - var(--f)),0 calc(50% - var(--f) / 2))}.refId-card{font-size:10px}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i5.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i5.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i5.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: i6.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i8.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i8.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i8.MatMenuContent, selector: "ng-template[matMenuContent]" }, { kind: "directive", type: i8.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }] }); }
|
|
303
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TermCardComponent, selector: "lib-term-card", inputs: { data: "data" }, outputs: { isSelected: "isSelected", selectedCard: "selectedCard", cardAction: "cardAction" }, ngImport: i0, template: "<ng-container [ngSwitch]=\"( (data && data?.cardSubType) || 'cardMinimal')\">\n <ng-container *ngSwitchCase=\"'standard'\" [ngTemplateOutlet]=\"cardStandard\"></ng-container>\n <ng-container *ngSwitchCase=\"'space-saving'\" [ngTemplateOutlet]=\"cardSpaceSaving\"></ng-container>\n <ng-container *ngSwitchDefault [ngTemplateOutlet]=\"cardMinimal\"></ng-container>\n</ng-container>\n\n<ng-template #cardMinimal>\n <div #cardRef class=\"term-card clickable {{data.index}}\" (click)=\"cardClicked(data, cardRef)\"\n [ngClass]=\"[data.children.selected?'selected':'', data.children.approvalStatus === 'Draft'? 'inDraft':'',\n data.children.associationProperties?.approvalStatus === 'Draft' && isApprovalRequired && !approvalList.length || data.children.highlight && isApprovalRequired ? 'inAssociationDraft':'']\"\n id=\"{{data.children.name}}\"\n [ngStyle]=\"{'background-color':getColor(data.index,cardRef,'bgColor',data)}\">\n <!-- (click)=\"data.selected=!data.selected\" --> \n <div class=\"term-card-parent\">\n <!-- <Below element is to show id on top left of the card> -->\n <!-- <div class=\"id\" [hidden]=\"true\">{{data.children.code}}</div> -->\n \n <div class=\"term-card-content\">\n <!-- <ng-container *ngIf=\"data?.children?.refId\">\n <div class=\"ribbon\">{{data?.children?.refId}}</div>\n </ng-container> -->\n\n <ng-container *ngIf=\"data?.children?.additionalProperties?.competencyArea?.name\">\n <div class=\"mb-2\">\n <span class=\"comp-area {{data?.children?.additionalProperties?.competencyArea?.name?.toLowerCase()}}\">{{data?.children?.additionalProperties?.competencyArea?.name}}</span>\n </div>\n </ng-container>\n <div class=\"card-title\">{{data.children.name}}\n <ng-container *ngIf=\"data?.children?.refId\">\n <div class=\"refIdCard mt-2\">\n <span>{{data?.children?.refId}} </span>\n </div>\n </ng-container> \n </div>\n <!-- <ng-container *ngIf=\"data?.children?.refId\">\n <div class=\"refIdCard px-4\">\n <span>{{data?.children?.refId}} </span>\n </div>\n </ng-container> -->\n <!-- <span>++{{data.children.selected}}+++</span>\n <span>=={{data.children.status}}==</span> -->\n <div class=\"card-description flex flex-middle gap-1\">\n <mat-icon svgIcon=\"frac\"></mat-icon> \n <span>{{(data.children.children) ? data.children.children?.length : 0}} Child Org</span>\n </div>\n </div>\n </div>\n\n <!-- <p>{{data.children.approvalStatus}}, {{data.children.associationProperties?.approvalStatus}}</p> -->\n <!-- *ngIf=\"!data.isViewOnly && data.children.approvalStatus === 'Draft' && isApprovalRequired\" -->\n\n <!-- (click)=\"$event.stopPropagation();\" -->\n <ng-container *ngIf=\"data?.columnInfo?.config?.enableThreeDot\" >\n <button type=\"button\" mat-icon-button i18n-aria-label aria-label=\"action items\"\n [matMenuTriggerFor]=\"orgMenu\" [matMenuTriggerData]=\"{'data':data, 'cardRef': cardRef}\" class=\"action-btn\">\n <mat-icon>more_vert</mat-icon>\n </button>\n </ng-container>\n <!-- <div class=\"term-card-checkbox\">\n <mat-checkbox color=\"primary\" *ngIf=\"data.children.approvalStatus === 'Draft' && isApprovalRequired && !approvalList.length || \n data.children.associationProperties?.approvalStatus === 'Draft' && isApprovalRequired && !approvalList.length ||\n data.children.highlight && isApprovalRequired\" [checked]=\"data.children.highlight\" class=\"termSelection\"\n (change)=\"handleProductClick(data.children, $event)\" (click)=\"$event.stopPropagation()\"></mat-checkbox>\n <mat-icon color=\"primary\" class=\"approve-flag\"\n *ngIf=\"data.children.highlight && isApprovalRequired\">{{app_strings.flag}}</mat-icon>\n </div> -->\n </div>\n</ng-template>\n\n<ng-template #cardStandard>\n <div>\n {{data.children.name}} \n </div>\n <div>\n {{data.children.description}} s\n </div>\n</ng-template>\n\n<ng-template #cardSpaceSaving>\n <div>\n {{data.children.name}}\n </div>\n</ng-template>\n\n<mat-menu #cardMenu=\"matMenu\" class=\"menu-sec\">\n <ng-template matMenuContent let-rowData=\"data\" let-cardRef=\"cardRef\">\n <!-- <div > -->\n <button *ngIf=\"data.columnInfo.config.enableView\" (click)=\"view(data, data.children, data.index)\" mat-menu-item name=\"channel-analytics-button\"\n class=\"ws-mat-primary-text\" i18n-aria-label aria-label=\"Analytics\">\n <mat-icon>visibility</mat-icon> <span>View</span>\n </button>\n <button *ngIf=\"data.columnInfo.config.enabaleEdit\" (click)=\"edit(data, data.children,data.index, cardRef)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"ws-mat-primary-text\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>edit</mat-icon>\n <span>Edit</span>\n </button>\n <button *ngIf=\"data.columnInfo.config.enableAdd\" (click)=\"create(data)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"ws-mat-primary-text\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>add</mat-icon>\n <span>Add</span>\n </button>\n <button *ngIf=\"data.columnInfo.config.enableDelete\" (click)=\"delete(data)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"ws-mat-primary-text\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>delete</mat-icon>\n <span>Delete</span>\n </button>\n </ng-template>\n</mat-menu>\n\n<mat-menu #orgMenu=\"matMenu\" class=\"menu-sec\">\n <ng-template matMenuContent let-rowData=\"data\" let-cardRef=\"cardRef\">\n <button *ngIf=\"data.columnInfo.config.enabaleRemoveConnection\" (click)=\"removeConnection(data)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"ws-mat-primary-text\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>close</mat-icon>\n <span>Remove Connection</span>\n </button>\n <!-- <button *ngIf=\"data.columnInfo.config.enableUpdateHierarchy\" (click)=\"updateHierarchy(data, data.children, data.index)\" mat-menu-item name=\"channel-analytics-button\"\n class=\"ws-mat-primary-text\" i18n-aria-label aria-label=\"Analytics\">\n <mat-icon>visibility</mat-icon> <span>Update Hierarchy</span>\n </button>\n \n <button *ngIf=\"data.columnInfo.config.enableManageOrganization\" (click)=\"manageOrganization(data)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"ws-mat-primary-text\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>add</mat-icon>\n <span>Manage Organisation</span>\n </button> -->\n </ng-template>\n</mat-menu>", styles: [".term-card{border:1px solid rgba(0,0,0,.08);padding:.9rem;margin:0 0 1em;background-color:#fff;border-radius:8px;overflow:hidden;position:relative;z-index:45;display:flex;align-items:center;box-shadow:#0000001a 0 1px 3px,#0000000f 0 1px 2px;word-break:break-word}.term-card .termSelection{position:absolute;right:10px;top:10px}.term-card .term-card-parent{display:flex;flex:1 1 0%}.term-card .term-card-parent .term-card-content{white-space:initial}.term-card .term-card-parent .term-card-content .card-title{margin-bottom:.5em;font-family:Lato;font-size:14px;font-weight:400}.term-card .term-card-parent .term-card-content .card-description{color:#000;font-size:12px!important;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.term-card .term-card-parent .term-card-content .card-description mat-icon{width:16px;height:16px;color:#1b4ca1}.term-card .term-card-checkbox{width:10%}.term-card.selected{color:#000;border-style:none}.term-card.selected .card-description{color:#000!important}.term-card.selected .card-description mat-icon{color:#000!important}.term-card.clickable{cursor:pointer}.approve-flag{position:absolute;right:5px;top:35px;font-size:24px}::ng-deep .menu-sec{min-height:0px!important;background:#fff!important}::ng-deep .mat-mdc-menu-panel{background-color:#fff!important}::ng-deep .mat-mdc-menu-content,::ng-deep .mat-mdc-menu-item{background-color:#fff!important}.menu-sec{background:#fff!important}.refIdCard{border-radius:12px;width:fit-content;border:1px solid #bbb;padding:0 8px;font-size:8px!important;display:flex;align-items:center}.comp-area{font-family:Inter;font-size:12px;font-weight:600;line-height:16px;text-align:left;padding:8px;border-radius:12px}.comp-area.functional{background:#e24577;color:#fff}.comp-area.domain{background:#7b47a4;color:#fff}.comp-area.behavioural{background:#f9bf71}.ribbon{font-size:8px;font-weight:700;color:#fff}.ribbon{--f: .5em;--r: .8em;position:absolute;top:8px;right:calc(-1 * var(--f));padding-inline:.25em;padding-right:8px;line-height:1.8;background:#fa6900;border-bottom:var(--f) solid rgba(0,0,0,.3333333333);border-left:var(--r) solid rgba(0,0,0,0);clip-path:polygon(var(--r) 0,100% 0,100% calc(100% - var(--f)),calc(100% - var(--f)) 100%,calc(100% - var(--f)) calc(100% - var(--f)),var(--r) calc(100% - var(--f)),0 calc(50% - var(--f) / 2))}.refId-card{font-size:10px}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i5.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i5.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i5.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: i6.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i8.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i8.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i8.MatMenuContent, selector: "ng-template[matMenuContent]" }, { kind: "directive", type: i8.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }] }); }
|
|
300
304
|
}
|
|
301
305
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TermCardComponent, decorators: [{
|
|
302
306
|
type: Component,
|
|
303
|
-
args: [{ selector: 'lib-term-card', template: "<ng-container [ngSwitch]=\"( (data && data?.cardSubType) || 'cardMinimal')\">\n <ng-container *ngSwitchCase=\"'standard'\" [ngTemplateOutlet]=\"cardStandard\"></ng-container>\n <ng-container *ngSwitchCase=\"'space-saving'\" [ngTemplateOutlet]=\"cardSpaceSaving\"></ng-container>\n <ng-container *ngSwitchDefault [ngTemplateOutlet]=\"cardMinimal\"></ng-container>\n</ng-container>\n\n<ng-template #cardMinimal>\n <div #cardRef class=\"term-card clickable {{data.index}}\" (click)=\"cardClicked(data, cardRef)\"\n [ngClass]=\"[data.children.selected?'selected':'', data.children.approvalStatus === 'Draft'? 'inDraft':'',\n data.children.associationProperties?.approvalStatus === 'Draft' && isApprovalRequired && !approvalList.length || data.children.highlight && isApprovalRequired ? 'inAssociationDraft':'']\"\n id=\"{{data.children.name}}\"\n [ngStyle]=\"{'background-color':getColor(data.index,cardRef,'bgColor',data)}\">\n <!-- (click)=\"data.selected=!data.selected\" --> \n <div class=\"term-card-parent\">\n <!-- <Below element is to show id on top left of the card> -->\n <!-- <div class=\"id\" [hidden]=\"true\">{{data.children.code}}</div> -->\n \n <div class=\"term-card-content\">\n <!-- <ng-container *ngIf=\"data?.children?.refId\">\n <div class=\"ribbon\">{{data?.children?.refId}}</div>\n </ng-container> -->\n\n <ng-container *ngIf=\"data?.children?.additionalProperties?.competencyArea?.name\">\n <div class=\"mb-2\">\n <span class=\"comp-area {{data?.children?.additionalProperties?.competencyArea?.name?.toLowerCase()}}\">{{data?.children?.additionalProperties?.competencyArea?.name}}</span>\n </div>\n </ng-container>\n <div class=\"card-title\">{{data.children.name}}\n <ng-container *ngIf=\"data?.children?.refId\">\n <div class=\"refIdCard mt-2\">\n <span>{{data?.children?.refId}} </span>\n </div>\n </ng-container> \n </div>\n <!-- <ng-container *ngIf=\"data?.children?.refId\">\n <div class=\"refIdCard px-4\">\n <span>{{data?.children?.refId}} </span>\n </div>\n </ng-container> -->\n <!-- <span>++{{data.children.selected}}+++</span>\n <span>=={{data.children.status}}==</span> -->\n <div class=\"card-description flex flex-middle gap-1\">\n <mat-icon svgIcon=\"frac\"></mat-icon> \n <span>{{(data.children.children) ? data.children.children?.length : 0}} Child Org</span>\n </div>\n </div>\n </div>\n\n <!-- <p>{{data.children.approvalStatus}}, {{data.children.associationProperties?.approvalStatus}}</p> -->\n <!-- *ngIf=\"!data.isViewOnly && data.children.approvalStatus === 'Draft' && isApprovalRequired\" -->\n\n <!-- (click)=\"$event.stopPropagation();\" -->\n <ng-container *ngIf=\"data?.columnInfo?.config?.enableThreeDot\" >\n <button type=\"button\" mat-icon-button i18n-aria-label aria-label=\"action items\"\n [matMenuTriggerFor]=\"orgMenu\" [matMenuTriggerData]=\"{'data':data, 'cardRef': cardRef}\" class=\"action-btn\">\n <mat-icon>more_vert</mat-icon>\n </button>\n </ng-container>\n <!-- <div class=\"term-card-checkbox\">\n <mat-checkbox color=\"primary\" *ngIf=\"data.children.approvalStatus === 'Draft' && isApprovalRequired && !approvalList.length || \n data.children.associationProperties?.approvalStatus === 'Draft' && isApprovalRequired && !approvalList.length ||\n data.children.highlight && isApprovalRequired\" [checked]=\"data.children.highlight\" class=\"termSelection\"\n (change)=\"handleProductClick(data.children, $event)\" (click)=\"$event.stopPropagation()\"></mat-checkbox>\n <mat-icon color=\"primary\" class=\"approve-flag\"\n *ngIf=\"data.children.highlight && isApprovalRequired\">{{app_strings.flag}}</mat-icon>\n </div> -->\n </div>\n</ng-template>\n\n<ng-template #cardStandard>\n <div>\n {{data.children.name}} \n </div>\n <div>\n {{data.children.description}} s\n </div>\n</ng-template>\n\n<ng-template #cardSpaceSaving>\n <div>\n {{data.children.name}}\n </div>\n</ng-template>\n\n<mat-menu #cardMenu=\"matMenu\" class=\"menu-sec\">\n <ng-template matMenuContent let-rowData=\"data\" let-cardRef=\"cardRef\">\n <!-- <div > -->\n <button *ngIf=\"data.columnInfo.config.enableView\" (click)=\"view(data, data.children, data.index)\" mat-menu-item name=\"channel-analytics-button\"\n class=\"ws-mat-primary-text\" i18n-aria-label aria-label=\"Analytics\">\n <mat-icon>visibility</mat-icon> <span>View</span>\n </button>\n <button *ngIf=\"data.columnInfo.config.enabaleEdit\" (click)=\"edit(data, data.children,data.index, cardRef)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"ws-mat-primary-text\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>edit</mat-icon>\n <span>Edit</span>\n </button>\n <button *ngIf=\"data.columnInfo.config.enableAdd\" (click)=\"create(data)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"ws-mat-primary-text\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>add</mat-icon>\n <span>Add</span>\n </button>\n <button *ngIf=\"data.columnInfo.config.enableDelete\" (click)=\"delete(data)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"ws-mat-primary-text\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>delete</mat-icon>\n <span>Delete</span>\n </button>\n </ng-template>\n</mat-menu>\n\n<mat-menu #orgMenu=\"matMenu\" class=\"menu-sec\">\n <ng-template matMenuContent let-rowData=\"data\" let-cardRef=\"cardRef\">\n
|
|
307
|
+
args: [{ selector: 'lib-term-card', template: "<ng-container [ngSwitch]=\"( (data && data?.cardSubType) || 'cardMinimal')\">\n <ng-container *ngSwitchCase=\"'standard'\" [ngTemplateOutlet]=\"cardStandard\"></ng-container>\n <ng-container *ngSwitchCase=\"'space-saving'\" [ngTemplateOutlet]=\"cardSpaceSaving\"></ng-container>\n <ng-container *ngSwitchDefault [ngTemplateOutlet]=\"cardMinimal\"></ng-container>\n</ng-container>\n\n<ng-template #cardMinimal>\n <div #cardRef class=\"term-card clickable {{data.index}}\" (click)=\"cardClicked(data, cardRef)\"\n [ngClass]=\"[data.children.selected?'selected':'', data.children.approvalStatus === 'Draft'? 'inDraft':'',\n data.children.associationProperties?.approvalStatus === 'Draft' && isApprovalRequired && !approvalList.length || data.children.highlight && isApprovalRequired ? 'inAssociationDraft':'']\"\n id=\"{{data.children.name}}\"\n [ngStyle]=\"{'background-color':getColor(data.index,cardRef,'bgColor',data)}\">\n <!-- (click)=\"data.selected=!data.selected\" --> \n <div class=\"term-card-parent\">\n <!-- <Below element is to show id on top left of the card> -->\n <!-- <div class=\"id\" [hidden]=\"true\">{{data.children.code}}</div> -->\n \n <div class=\"term-card-content\">\n <!-- <ng-container *ngIf=\"data?.children?.refId\">\n <div class=\"ribbon\">{{data?.children?.refId}}</div>\n </ng-container> -->\n\n <ng-container *ngIf=\"data?.children?.additionalProperties?.competencyArea?.name\">\n <div class=\"mb-2\">\n <span class=\"comp-area {{data?.children?.additionalProperties?.competencyArea?.name?.toLowerCase()}}\">{{data?.children?.additionalProperties?.competencyArea?.name}}</span>\n </div>\n </ng-container>\n <div class=\"card-title\">{{data.children.name}}\n <ng-container *ngIf=\"data?.children?.refId\">\n <div class=\"refIdCard mt-2\">\n <span>{{data?.children?.refId}} </span>\n </div>\n </ng-container> \n </div>\n <!-- <ng-container *ngIf=\"data?.children?.refId\">\n <div class=\"refIdCard px-4\">\n <span>{{data?.children?.refId}} </span>\n </div>\n </ng-container> -->\n <!-- <span>++{{data.children.selected}}+++</span>\n <span>=={{data.children.status}}==</span> -->\n <div class=\"card-description flex flex-middle gap-1\">\n <mat-icon svgIcon=\"frac\"></mat-icon> \n <span>{{(data.children.children) ? data.children.children?.length : 0}} Child Org</span>\n </div>\n </div>\n </div>\n\n <!-- <p>{{data.children.approvalStatus}}, {{data.children.associationProperties?.approvalStatus}}</p> -->\n <!-- *ngIf=\"!data.isViewOnly && data.children.approvalStatus === 'Draft' && isApprovalRequired\" -->\n\n <!-- (click)=\"$event.stopPropagation();\" -->\n <ng-container *ngIf=\"data?.columnInfo?.config?.enableThreeDot\" >\n <button type=\"button\" mat-icon-button i18n-aria-label aria-label=\"action items\"\n [matMenuTriggerFor]=\"orgMenu\" [matMenuTriggerData]=\"{'data':data, 'cardRef': cardRef}\" class=\"action-btn\">\n <mat-icon>more_vert</mat-icon>\n </button>\n </ng-container>\n <!-- <div class=\"term-card-checkbox\">\n <mat-checkbox color=\"primary\" *ngIf=\"data.children.approvalStatus === 'Draft' && isApprovalRequired && !approvalList.length || \n data.children.associationProperties?.approvalStatus === 'Draft' && isApprovalRequired && !approvalList.length ||\n data.children.highlight && isApprovalRequired\" [checked]=\"data.children.highlight\" class=\"termSelection\"\n (change)=\"handleProductClick(data.children, $event)\" (click)=\"$event.stopPropagation()\"></mat-checkbox>\n <mat-icon color=\"primary\" class=\"approve-flag\"\n *ngIf=\"data.children.highlight && isApprovalRequired\">{{app_strings.flag}}</mat-icon>\n </div> -->\n </div>\n</ng-template>\n\n<ng-template #cardStandard>\n <div>\n {{data.children.name}} \n </div>\n <div>\n {{data.children.description}} s\n </div>\n</ng-template>\n\n<ng-template #cardSpaceSaving>\n <div>\n {{data.children.name}}\n </div>\n</ng-template>\n\n<mat-menu #cardMenu=\"matMenu\" class=\"menu-sec\">\n <ng-template matMenuContent let-rowData=\"data\" let-cardRef=\"cardRef\">\n <!-- <div > -->\n <button *ngIf=\"data.columnInfo.config.enableView\" (click)=\"view(data, data.children, data.index)\" mat-menu-item name=\"channel-analytics-button\"\n class=\"ws-mat-primary-text\" i18n-aria-label aria-label=\"Analytics\">\n <mat-icon>visibility</mat-icon> <span>View</span>\n </button>\n <button *ngIf=\"data.columnInfo.config.enabaleEdit\" (click)=\"edit(data, data.children,data.index, cardRef)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"ws-mat-primary-text\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>edit</mat-icon>\n <span>Edit</span>\n </button>\n <button *ngIf=\"data.columnInfo.config.enableAdd\" (click)=\"create(data)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"ws-mat-primary-text\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>add</mat-icon>\n <span>Add</span>\n </button>\n <button *ngIf=\"data.columnInfo.config.enableDelete\" (click)=\"delete(data)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"ws-mat-primary-text\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>delete</mat-icon>\n <span>Delete</span>\n </button>\n </ng-template>\n</mat-menu>\n\n<mat-menu #orgMenu=\"matMenu\" class=\"menu-sec\">\n <ng-template matMenuContent let-rowData=\"data\" let-cardRef=\"cardRef\">\n <button *ngIf=\"data.columnInfo.config.enabaleRemoveConnection\" (click)=\"removeConnection(data)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"ws-mat-primary-text\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>close</mat-icon>\n <span>Remove Connection</span>\n </button>\n <!-- <button *ngIf=\"data.columnInfo.config.enableUpdateHierarchy\" (click)=\"updateHierarchy(data, data.children, data.index)\" mat-menu-item name=\"channel-analytics-button\"\n class=\"ws-mat-primary-text\" i18n-aria-label aria-label=\"Analytics\">\n <mat-icon>visibility</mat-icon> <span>Update Hierarchy</span>\n </button>\n \n <button *ngIf=\"data.columnInfo.config.enableManageOrganization\" (click)=\"manageOrganization(data)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"ws-mat-primary-text\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>add</mat-icon>\n <span>Manage Organisation</span>\n </button> -->\n </ng-template>\n</mat-menu>", styles: [".term-card{border:1px solid rgba(0,0,0,.08);padding:.9rem;margin:0 0 1em;background-color:#fff;border-radius:8px;overflow:hidden;position:relative;z-index:45;display:flex;align-items:center;box-shadow:#0000001a 0 1px 3px,#0000000f 0 1px 2px;word-break:break-word}.term-card .termSelection{position:absolute;right:10px;top:10px}.term-card .term-card-parent{display:flex;flex:1 1 0%}.term-card .term-card-parent .term-card-content{white-space:initial}.term-card .term-card-parent .term-card-content .card-title{margin-bottom:.5em;font-family:Lato;font-size:14px;font-weight:400}.term-card .term-card-parent .term-card-content .card-description{color:#000;font-size:12px!important;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.term-card .term-card-parent .term-card-content .card-description mat-icon{width:16px;height:16px;color:#1b4ca1}.term-card .term-card-checkbox{width:10%}.term-card.selected{color:#000;border-style:none}.term-card.selected .card-description{color:#000!important}.term-card.selected .card-description mat-icon{color:#000!important}.term-card.clickable{cursor:pointer}.approve-flag{position:absolute;right:5px;top:35px;font-size:24px}::ng-deep .menu-sec{min-height:0px!important;background:#fff!important}::ng-deep .mat-mdc-menu-panel{background-color:#fff!important}::ng-deep .mat-mdc-menu-content,::ng-deep .mat-mdc-menu-item{background-color:#fff!important}.menu-sec{background:#fff!important}.refIdCard{border-radius:12px;width:fit-content;border:1px solid #bbb;padding:0 8px;font-size:8px!important;display:flex;align-items:center}.comp-area{font-family:Inter;font-size:12px;font-weight:600;line-height:16px;text-align:left;padding:8px;border-radius:12px}.comp-area.functional{background:#e24577;color:#fff}.comp-area.domain{background:#7b47a4;color:#fff}.comp-area.behavioural{background:#f9bf71}.ribbon{font-size:8px;font-weight:700;color:#fff}.ribbon{--f: .5em;--r: .8em;position:absolute;top:8px;right:calc(-1 * var(--f));padding-inline:.25em;padding-right:8px;line-height:1.8;background:#fa6900;border-bottom:var(--f) solid rgba(0,0,0,.3333333333);border-left:var(--r) solid rgba(0,0,0,0);clip-path:polygon(var(--r) 0,100% 0,100% calc(100% - var(--f)),calc(100% - var(--f)) 100%,calc(100% - var(--f)) calc(100% - var(--f)),var(--r) calc(100% - var(--f)),0 calc(50% - var(--f) / 2))}.refId-card{font-size:10px}\n"] }]
|
|
304
308
|
}], ctorParameters: function () { return [{ type: i1.FrameworkService }, { type: i2.LocalConnectionService }, { type: i3.ApprovalService }, { type: i4.MatLegacyDialog }]; }, propDecorators: { data: [{
|
|
305
309
|
type: Input
|
|
306
310
|
}], isSelected: [{
|
|
307
311
|
type: Output
|
|
308
312
|
}], selectedCard: [{
|
|
309
313
|
type: Output
|
|
314
|
+
}], cardAction: [{
|
|
315
|
+
type: Output
|
|
310
316
|
}] } });
|
|
311
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVybS1jYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcnkvc3VuYmlyZC1jYi90cmVlLWhpZXJhcmNoeS9zcmMvbGliL2NvbXBvbmVudHMvdGVybS1jYXJkL3Rlcm0tY2FyZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJ5L3N1bmJpcmQtY2IvdHJlZS1oaWVyYXJjaHkvc3JjL2xpYi9jb21wb25lbnRzL3Rlcm0tY2FyZC90ZXJtLWNhcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFLekYsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRzlDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLHNFQUFzRSxDQUFDO0FBQ3hILE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDOzs7Ozs7Ozs7O0FBT2hHLE1BQU0sT0FBTyxpQkFBaUI7SUFZNUIsSUFDSSxJQUFJLENBQUMsS0FBVTtRQUNqQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUduQixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEdBQUMsS0FBSyxDQUFBO0lBQ3JDLENBQUM7SUFDRCxJQUFJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUtELFlBQ1UsZ0JBQWtDLEVBQ2xDLHNCQUE4QyxFQUM5QyxlQUFnQyxFQUNqQyxNQUFpQjtRQUhoQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBd0I7UUFDOUMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2pDLFdBQU0sR0FBTixNQUFNLENBQVc7UUExQjFCLHVCQUFrQixHQUFZLEtBQUssQ0FBQTtRQUNuQyxpQkFBWSxHQUFnQixFQUFFLENBQUE7UUFDOUIsa0JBQWEsR0FBRyxFQUFFLENBQUE7UUFDbEIsZ0JBQVcsR0FBUSxNQUFNLENBQUM7UUFDMUIsV0FBTSxHQUFRLEVBQUUsQ0FBQTtRQWVOLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBaUIsQ0FBQTtRQUM5QyxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFlLENBQUE7SUFRcEQsQ0FBQztJQUVMLFFBQVE7UUFDTixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGFBQWEsRUFBRSxDQUFDLGtCQUFrQixDQUFBO1FBRXhGLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFBO1FBQzNCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLDBCQUEwQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBQyxFQUFFO1lBQ2xGLElBQUcsQ0FBQyxFQUFDO2dCQUNKLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFBO2FBQ2hDO1FBQ0gsQ0FBQyxDQUFDLENBQUE7UUFHRixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsQ0FBQTtJQUUxRCxDQUFDO0lBRUQsV0FBVyxDQUFDLElBQVMsRUFBRSxPQUFZO1FBQ2pDLElBQUcsSUFBSSxDQUFDLFFBQVEsSUFBRSxVQUFVLEVBQUM7WUFDM0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7WUFDekMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1NBRXpEO1FBRUQsSUFBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUM7WUFDeEQsT0FBTTtTQUNQO1FBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUE7UUFDakYsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFBO0lBQ3pHLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxJQUFTLEVBQUUsS0FBVTtRQUN0QyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFDLElBQUksRUFBQyxJQUFJLEVBQUUsT0FBTyxFQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUMsQ0FBQyxDQUFBO0lBQzVELENBQUM7SUFFRCxvQkFBb0I7UUFDakIsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO1FBQzNDLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBUSxFQUFFLEVBQUU7WUFDMUQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDN0QsSUFBRyxJQUFJLENBQUMsWUFBWSxFQUFDO2dCQUNoQixJQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFDO29CQUMvQixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFBO2lCQUNyQzthQUNOO1FBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsUUFBUSxDQUFDLFVBQWlCLEVBQUUsT0FBWSxFQUFDLFFBQWdCLEVBQUUsSUFBUTtRQUNqRSxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM1RCxJQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLFFBQVEsS0FBSyxTQUFTLEVBQUM7WUFDakUsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDO1NBQ3RCO1FBQ0QsSUFBRyxRQUFRLEtBQUssUUFBUSxFQUFDO1lBQ3ZCLElBQUksV0FBVyxDQUFDO1lBQ2hCLElBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFDO2dCQUNyRCxXQUFXLEdBQUcsV0FBVyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7YUFDMUM7WUFDRCxPQUFPLFdBQVcsQ0FBQztTQUNwQjtJQUNILENBQUM7SUFHRCxJQUFJLENBQUMsSUFBUyxFQUFFLFlBQWlCLEVBQUUsS0FBVTtRQUMzQyxJQUFJLE1BQVcsQ0FBQTtRQUNmLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQzFGLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDeEMsTUFBTSxPQUFPLEdBQUcsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUE7UUFDN0MsSUFBRyxPQUFPLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsS0FBSyxpQkFBaUIsRUFBRTtZQUN0RixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUN2RSxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsd0JBQXdCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBO1lBQ2xGLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDLElBQUksQ0FBRSxDQUFBO1lBQ3JHLElBQUksV0FBVyxHQUFTLEVBQUUsQ0FBQTtZQUMxQixJQUFHLFdBQVcsSUFBSSxXQUFXLENBQUMsSUFBSSxFQUFFO2dCQUNsQyxXQUFXLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLENBQUMsSUFBSSxDQUFFLENBQUE7YUFDeEc7WUFDQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0NBQWdDLEVBQUU7Z0JBQzFELElBQUksRUFBRTtvQkFDSixJQUFJLEVBQUMsY0FBYztvQkFDbkIsUUFBUSxFQUFFLE1BQU07b0JBQ2hCLFdBQVcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVU7b0JBQ2pDLFVBQVUsRUFBRSxPQUFPLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUN2RCxXQUFXLEVBQUUsV0FBVyxJQUFJLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDcEUsV0FBVyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLEVBQUU7b0JBQ25ELGVBQWUsRUFBRSxJQUFJLENBQUMsYUFBYTtvQkFDbkMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxLQUFLO29CQUN2QixZQUFZLEVBQUUsSUFBSSxDQUFDLFFBQVE7b0JBQzNCLG1CQUFtQixFQUFFLGFBQWE7aUJBQ25DO2dCQUNELEtBQUssRUFBRSxPQUFPO2dCQUNkLFVBQVUsRUFBRSx5QkFBeUI7YUFDdEMsQ0FBQyxDQUFBO1NBR0w7YUFDSTtZQUNILE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtnQkFDN0MsSUFBSSxFQUFFO29CQUNKLElBQUksRUFBQyxNQUFNO29CQUNYLFVBQVUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVU7b0JBQ2hDLFdBQVcsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxFQUFFO29CQUNuRCxlQUFlLEVBQUUsSUFBSSxDQUFDLGFBQWE7b0JBQ25DLFFBQVEsRUFBRSxLQUFLO29CQUNmLFlBQVksRUFBRSxZQUFZO29CQUMxQixtQkFBbUIsRUFBRSxhQUFhO2lCQUNuQztnQkFDRCxLQUFLLEVBQUUsT0FBTztnQkFDZCxVQUFVLEVBQUUseUJBQXlCO2FBQ3RDLENBQUMsQ0FBQTtTQUNIO1FBQ0QsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQzFDLElBQUcsQ0FBQyxHQUFHLEVBQUU7Z0JBQ1AsT0FBTzthQUNSO1FBYUgsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBQ0QsSUFBSSxDQUFDLElBQVMsRUFBRSxZQUFpQixFQUFFLEtBQVUsRUFBRSxPQUFZO1FBQ3pELElBQUksTUFBVyxDQUFBO1FBQ2YsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDMUYsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUN4QyxNQUFNLE9BQU8sR0FBRyxVQUFVLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQTtRQUU3QyxJQUFHLE9BQU8sSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxLQUFLLGlCQUFpQixFQUFFO1lBeUJ0RixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQTtTQUMxQjthQUNJO1lBQ0gsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFO2dCQUM3QyxJQUFJLEVBQUU7b0JBQ0osSUFBSSxFQUFDLE1BQU07b0JBQ1gsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO29CQUMzQixXQUFXLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsRUFBRTtvQkFDbkQsZUFBZSxFQUFFLElBQUksQ0FBQyxhQUFhO29CQUNuQyxRQUFRLEVBQUUsS0FBSztvQkFDZixZQUFZLEVBQUUsWUFBWTtvQkFDMUIsbUJBQW1CLEVBQUUsYUFBYTtvQkFDbEMsT0FBTyxFQUFFLE9BQU87aUJBQ2pCO2dCQUNELEtBQUssRUFBRSxPQUFPO2dCQUNkLFVBQVUsRUFBRSx5QkFBeUI7YUFDdEMsQ0FBQyxDQUFBO1NBQ0g7UUFDRCxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDMUMsSUFBRyxDQUFDLEdBQUcsRUFBRTtnQkFDUCxPQUFPO2FBQ1I7WUFTRCxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNkLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQTtZQUMzQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUE7UUFDVCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFDRCxNQUFNLENBQUMsSUFBUyxFQUFFLElBQVk7UUFDNUIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUN4QyxNQUFNLE9BQU8sR0FBRyxVQUFVLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQTtRQUM3QyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUN2RSxJQUFHLE9BQU8sRUFBRTtZQUNWLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDbEYsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxPQUFPLENBQUMsSUFBSSxDQUFFLENBQUE7WUFDckcsSUFBSSxXQUFXLEdBQVEsRUFBRSxDQUFBO1lBQ3pCLElBQUcsV0FBVyxJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUU7Z0JBQ2xDLFdBQVcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLFdBQVcsQ0FBQyxJQUFJLENBQUUsQ0FBQTthQUN4RztZQUNELElBQUksTUFBVyxDQUFBO1lBQ2YsSUFBRyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxLQUFLLGlCQUFpQixFQUFDO2dCQUMxRSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0NBQWdDLEVBQUU7b0JBQzFELElBQUksRUFBRTt3QkFDSixJQUFJLEVBQUMsY0FBYzt3QkFDbkIsUUFBUSxFQUFFLElBQUksSUFBSSxLQUFLO3dCQUN2QixXQUFXLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVO3dCQUNqQyxVQUFVLEVBQUUsT0FBTyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTt3QkFDdkQsV0FBVyxFQUFFLFdBQVcsSUFBSSxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7d0JBQ3BFLFdBQVcsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxFQUFFO3dCQUNuRCxlQUFlLEVBQUUsSUFBSSxDQUFDLGFBQWE7d0JBQ25DLFFBQVEsRUFBRSxPQUFPLENBQUMsS0FBSzt3QkFDdkIsWUFBWSxFQUFFLElBQUksQ0FBQyxRQUFRO3dCQUMzQixtQkFBbUIsRUFBRSxhQUFhO3FCQUNuQztvQkFDRCxLQUFLLEVBQUUsT0FBTztvQkFDZCxVQUFVLEVBQUUseUJBQXlCO2lCQUN0QyxDQUFDLENBQUE7YUFDSDtpQkFBTTtnQkFDTCxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUU7b0JBQzdDLElBQUksRUFBRTt3QkFDSixJQUFJLEVBQUMsY0FBYzt3QkFDbkIsVUFBVSxFQUFFLE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7d0JBQ3ZELFdBQVcsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxFQUFFO3dCQUNuRCxlQUFlLEVBQUUsSUFBSSxDQUFDLGFBQWE7d0JBQ25DLFFBQVEsRUFBRSxPQUFPLENBQUMsS0FBSzt3QkFDdkIsWUFBWSxFQUFFLElBQUksQ0FBQyxRQUFRO3dCQUMzQixtQkFBbUIsRUFBRSxhQUFhO3FCQUNuQztvQkFDRCxLQUFLLEVBQUUsT0FBTztvQkFDZCxVQUFVLEVBQUUseUJBQXlCO2lCQUN0QyxDQUFDLENBQUE7YUFDSDtZQUNELE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDMUMsSUFBRyxDQUFDLEdBQUcsRUFBRTtvQkFDUCxPQUFPO2lCQUNSO2dCQUVELE1BQU0sWUFBWSxHQUFHO29CQUNuQixHQUFHO29CQUNILEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSztvQkFDcEIsSUFBSTtvQkFDSixJQUFJLEVBQUUsY0FBYztpQkFDckIsQ0FBQTtnQkFDRCxJQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFDO29CQUMxQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsMkJBQTJCLENBQUMsWUFBWSxDQUFDLENBQUE7aUJBQ2hFO2dCQUNELFVBQVUsQ0FBQyxHQUFHLEVBQUU7b0JBQ2QsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFBO2dCQUMzQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUE7WUFDVCxDQUFDLENBQUMsQ0FBQTtTQUNIO0lBQ0gsQ0FBQztJQUVELGNBQWMsQ0FBQyxJQUFTO1FBQ3RCLElBQUcsSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUM7WUFDakQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFBO1lBQzNFLElBQUcsT0FBTyxJQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUM7Z0JBRXpCLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQTthQUNwQjtTQUNGO1FBQ0QsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBRUQsVUFBVSxDQUFDLElBQVM7UUFDbEIsSUFBRyxJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBQztZQUNqRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDM0UsT0FBTyxPQUFPLENBQUE7U0FDZjtRQUNELE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFHLElBQUksQ0FBQyxZQUFZLEVBQUM7WUFDbkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQTtTQUNoQztJQUNILENBQUM7SUFDRCxNQUFNLENBQUMsSUFBUztRQUNkLE1BQU0sVUFBVSxHQUFHO1lBQ2pCLFVBQVUsRUFBRSxTQUFTO1lBQ3JCLFlBQVksRUFBRSxRQUFRO1lBQ3RCLFlBQVksRUFBRTtnQkFDWjtvQkFDRSxNQUFNLEVBQUUsY0FBYyxJQUFJLENBQUMsUUFBUSxLQUFJLFVBQVUsQ0FBQSxDQUFDLENBQUMsV0FBVyxDQUFBLENBQUMsQ0FBQyxPQUFPLGtCQUFrQjtvQkFDekYsV0FBVyxFQUFFLHFEQUFxRDtvQkFDbEUsUUFBUSxFQUFFO3dCQUNSOzRCQUNFLFFBQVEsRUFBRSxXQUFXOzRCQUNyQixHQUFHLEVBQUUseUJBQXlCO3lCQUMvQjtxQkFDRjtpQkFDRjthQUNGO1lBQ0QsV0FBVyxFQUFFLDZCQUE2QjtZQUMxQyxPQUFPLEVBQUU7Z0JBQ1A7b0JBQ0UsT0FBTyxFQUFFLElBQUk7b0JBQ2IsUUFBUSxFQUFFLGFBQWE7b0JBQ3ZCLFFBQVEsRUFBRSxLQUFLO2lCQUNoQjtnQkFDRDtvQkFDRSxPQUFPLEVBQUUsS0FBSztvQkFDZCxRQUFRLEVBQUUsa0JBQWtCO29CQUM1QixRQUFRLEVBQUUsSUFBSTtpQkFDZjthQUNGO1lBQ0QsUUFBUSxFQUFFLElBQUk7U0FDZixDQUFBO1FBQ0QsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsMEJBQTBCLEVBQUU7WUFDcEQsSUFBSSxFQUFFLFVBQVU7WUFDaEIsU0FBUyxFQUFFLEtBQUs7WUFDaEIsS0FBSyxFQUFFLE9BQU87WUFDZCxRQUFRLEVBQUUsTUFBTTtZQUNoQixTQUFTLEVBQUUsTUFBTTtZQUNqQixZQUFZLEVBQUUsSUFBSTtTQUNuQixDQUFDLENBQUE7UUFDRixNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBRXRDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFBO1lBQzNDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQTtRQUNQLENBQUMsQ0FBQyxDQUFBO0lBR04sQ0FBQzsrR0F6V1EsaUJBQWlCO21HQUFqQixpQkFBaUIsb0pDakI5Qix1eU9BbUlXOzs0RkRsSEUsaUJBQWlCO2tCQUw3QixTQUFTOytCQUNFLGVBQWU7d01BaUJyQixJQUFJO3NCQURQLEtBQUs7Z0JBV0ksVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IE5TRnJhbWV3b3JrIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2ZyYW1ld29yay5tb2RlbCdcbmltcG9ydCB7IEFwcHJvdmFsU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FwcHJvdmFsLnNlcnZpY2UnO1xuaW1wb3J0IHsgRnJhbWV3b3JrU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ZyYW1ld29yay5zZXJ2aWNlJ1xuaW1wb3J0IHsgTG9jYWxDb25uZWN0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2xvY2FsLWNvbm5lY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBsYWJlbHMgfSBmcm9tICcuLi8uLi9sYWJlbHMvc3RyaW5ncyc7XG5pbXBvcnQgeyBDYXJkU2VsZWN0aW9uLCBDYXJkQ2hlY2tlZCwgQ2FyZCB9IGZyb20gJy4uLy4uL21vZGVscy92YXJpYWJsZS10eXBlLm1vZGVsJztcbmltcG9ydCB7IE1hdExlZ2FjeURpYWxvZyBhcyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9sZWdhY3ktZGlhbG9nJztcbmltcG9ydCB7IENyZWF0ZVRlcm1Db21wb25lbnQgfSBmcm9tICcuLi9jcmVhdGUtdGVybS9jcmVhdGUtdGVybS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3JlYXRlVGVybUZyb21GcmFtZXdvcmtDb21wb25lbnQgfSBmcm9tICcuLy4uL2NyZWF0ZS10ZXJtLWZyb20tZnJhbWV3b3JrL2NyZWF0ZS10ZXJtLWZyb20tZnJhbWV3b3JrLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb25mb3JhbXRpb25Qb3B1cENvbXBvbmVudCB9IGZyb20gJy4uL2NvbmZvcmFtdGlvbi1wb3B1cC9jb25mb3JhbXRpb24tcG9wdXAuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLXRlcm0tY2FyZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi90ZXJtLWNhcmQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90ZXJtLWNhcmQuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBUZXJtQ2FyZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgLy8gQElucHV0KCkgZGF0YSE6IE5TRnJhbWV3b3JrLklUZXJtQ2FyZFxuXG4gIHByaXZhdGUgX2RhdGEhOiBOU0ZyYW1ld29yay5JVGVybUNhcmQ7XG4gIGlzQXBwcm92YWxSZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlXG4gIGFwcHJvdmFsTGlzdDogQXJyYXk8Q2FyZD4gPSBbXVxuICBoZWlnaHRMaWdodGVkID0gW11cbiAgYXBwX3N0cmluZ3M6IGFueSA9IGxhYmVscztcbiAgbG9hZGVkOiBhbnkgPSB7fVxuICBpc0NvbXBldGVuY3lBcmVhOmFueTtcbiAgZW52aXJvbm1lbnQ6IGFueVxuICBzdWJzY3JpcHRpb24gOmFueVxuICBASW5wdXQoKVxuICBzZXQgZGF0YSh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5fZGF0YSA9IHZhbHVlO1xuICAgIC8vICBpZih0aGlzLl9kYXRhKVxuICAgIC8vICAgIHRoaXMuY3JlYXRlVGltZWxpbmUodGhpcy5fZGF0YVswXS5pZClcbiAgICB0aGlzLl9kYXRhLmNoaWxkcmVuLmhpZ2hsaWdodD1mYWxzZVxuICB9XG4gIGdldCBkYXRhKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGE7XG4gIH1cblxuICBAT3V0cHV0KCkgaXNTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Q2FyZFNlbGVjdGlvbj4oKVxuICBAT3V0cHV0KCkgc2VsZWN0ZWRDYXJkID0gbmV3IEV2ZW50RW1pdHRlcjxDYXJkQ2hlY2tlZD4oKVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZnJhbWV3b3JrU2VydmljZTogRnJhbWV3b3JrU2VydmljZSxcbiAgICBwcml2YXRlIGxvY2FsQ29ubmVjdGlvblNlcnZpY2U6IExvY2FsQ29ubmVjdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhcHByb3ZhbFNlcnZpY2U6IEFwcHJvdmFsU2VydmljZSxcbiAgICBwdWJsaWMgZGlhbG9nOiBNYXREaWFsb2csIFxuICAgIFxuICApIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuaXNBcHByb3ZhbFJlcXVpcmVkID0gdGhpcy5sb2NhbENvbm5lY3Rpb25TZXJ2aWNlLmdldENvbmZpZ0luZm8oKS5pc0FwcHJvdmFsUmVxdWlyZWRcbiAgICBcbiAgICB0aGlzLnVwZGF0ZUFwcHJvdmFsU3RhdHVzKClcbiAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5pbnNlcnRVcGRhdGVEZWxldGVOb3RpZmllci5zdWJzY3JpYmUoKGUpPT57XG4gICAgICBpZihlKXtcbiAgICAgICB0aGlzLmlzQ29tcGV0ZW5jeUFyZWEgPSBlLmFjdGlvblxuICAgICAgfVxuICAgIH0pXG5cblxuICAgIHRoaXMuZW52aXJvbm1lbnQgPSB0aGlzLmZyYW1ld29ya1NlcnZpY2UuZ2V0RW52aXJvbWVudCgpXG4gICAgXG4gIH1cblxuICBjYXJkQ2xpY2tlZChkYXRhOiBhbnksIGNhcmRSZWY6IGFueSkge1xuICAgIGlmKGRhdGEuY2F0ZWdvcnkhPSdzdWJ0aGVtZScpe1xuICAgICAgdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmNhcmRDbGtEYXRhID0gZGF0YTtcbiAgICAgIHRoaXMuZnJhbWV3b3JrU2VydmljZS5DdXJyZW50Q2FyZENsay5uZXh0KGRhdGEuY2F0ZWdvcnkpXG4gICAgICBcbiAgICB9XG4gICAgLy8gdGhpcy5kYXRhLnNlbGVjdGVkID0gdHJ1ZVxuICAgIGlmKHRoaXMuZnJhbWV3b3JrU2VydmljZS5pc0xhc3RDb2x1bW4odGhpcy5kYXRhLmNhdGVnb3J5KSl7XG4gICAgICByZXR1cm4gXG4gICAgfVxuICAgIHRoaXMuaXNTZWxlY3RlZC5lbWl0KHsgZWxlbWVudDogdGhpcy5kYXRhLmNoaWxkcmVuLCBpc1NlbGVjdGVkOiAhZGF0YS5zZWxlY3RlZCB9KVxuICAgIHRoaXMuZnJhbWV3b3JrU2VydmljZS5jdXJyZW50U2VsZWN0aW9uLm5leHQoeyB0eXBlOiB0aGlzLmRhdGEuY2F0ZWdvcnksIGRhdGE6IGRhdGEuY2hpbGRyZW4sIGNhcmRSZWYgfSlcbiAgfVxuXG4gIGhhbmRsZVByb2R1Y3RDbGljayh0ZXJtOiBhbnksIGV2ZW50OiBhbnkpe1xuICAgIHRoaXMuc2VsZWN0ZWRDYXJkLmVtaXQoe3Rlcm06dGVybSwgY2hlY2tlZDpldmVudC5jaGVja2VkfSlcbiAgfVxuXG4gIHVwZGF0ZUFwcHJvdmFsU3RhdHVzKCl7XG4gICAgIGNvbnN0IGlkID0gdGhpcy5fZGF0YS5jaGlsZHJlbi5pZGVudGlmaWVyO1xuICAgIHRoaXMuYXBwcm92YWxTZXJ2aWNlLmdldFVwZGF0ZUxpc3QoKS5zdWJzY3JpYmUoKGxpc3Q6YW55KSA9PiB7XG4gICAgICB0aGlzLmFwcHJvdmFsTGlzdCA9IGxpc3QubWFwKChpdGVtOiBhbnkpID0+IGl0ZW0uaWRlbnRpZmllcik7XG4gICAgICBpZih0aGlzLmFwcHJvdmFsTGlzdCl7XG4gICAgICAgICAgIGlmKHRoaXMuYXBwcm92YWxMaXN0LmluY2x1ZGVzKGlkKSl7XG4gICAgICAgICAgICAgIHRoaXMuX2RhdGEuY2hpbGRyZW4uaGlnaGxpZ2h0ID0gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgfSAgICAgXG4gICAgfSlcbiAgfVxuXG4gIGdldENvbG9yKGluZGV4Q2xhc3M6bnVtYmVyLCBjYXJkUmVmOiBhbnkscHJvcGVydHk6IHN0cmluZywgZGF0YTphbnkpIHtcbiAgICBsZXQgY29uZmlnID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldENvbmZpZyhkYXRhLmNhdGVnb3J5KTtcbiAgICBpZihjYXJkUmVmLmNsYXNzTGlzdC5jb250YWlucygnc2VsZWN0ZWQnKSAmJiBwcm9wZXJ0eSA9PT0gJ2JnQ29sb3InKXtcbiAgICAgICByZXR1cm4gY29uZmlnLmNvbG9yO1xuICAgIH1cbiAgICBpZihwcm9wZXJ0eSA9PT0gJ2JvcmRlcicpe1xuICAgICAgbGV0IGJvcmRlckNvbG9yO1xuICAgICAgaWYoY2FyZFJlZi5jbGFzc0xpc3QuY29udGFpbnMoKGluZGV4Q2xhc3MpLnRvU3RyaW5nKCkpKXtcbiAgICAgICAgYm9yZGVyQ29sb3IgPSBcIjhweCBzb2xpZFwiICsgY29uZmlnLmNvbG9yO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJvcmRlckNvbG9yO1xuICAgIH1cbiAgfVxuXG5cbiAgdmlldyhkYXRhOiBhbnksIGNoaWxkcmVuRGF0YTogYW55LCBpbmRleDogYW55KXtcbiAgICBsZXQgZGlhbG9nOiBhbnlcbiAgICBjb25zdCBzZWxlY3RlZFRlcm1zID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldFByZXZpb3VzU2VsZWN0ZWRUZXJtcyhkYXRhLmNvbHVtbkluZm8uY29kZSlcbiAgICBjb25zdCBuZXhDb2xJbmZvID0gdGhpcy5nZXROZXh0Q2F0KGRhdGEpXG4gICAgY29uc3QgbmV4dENhdCA9IG5leENvbEluZm8gfHwgZGF0YS5jb2x1bW5JbmZvXG4gICAgaWYobmV4dENhdCAmJiB0aGlzLmVudmlyb25tZW50ICYmIHRoaXMuZW52aXJvbm1lbnQuZnJhbWV3b3JrVHlwZSA9PT0gJ01ET19ERVNJR05BVElPTicpIHtcbiAgICAgIGNvbnN0IG5leHROZXh0Q2F0ID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldE5leHRDYXRlZ29yeShuZXh0Q2F0LmNvZGUpXG4gICAgICBjb25zdCBzZWxlY3RlZFRlcm1zID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldFByZXZpb3VzU2VsZWN0ZWRUZXJtcyhuZXh0Q2F0LmNvZGUpXG4gICAgICBjb25zdCBjb2xJbmZvID0gQXJyYXkuZnJvbSh0aGlzLmZyYW1ld29ya1NlcnZpY2UubGlzdC52YWx1ZXMoKSkuZmlsdGVyKGwgPT4gbC5jb2RlID09PSBuZXh0Q2F0LmNvZGUgKVxuICAgICAgbGV0IG5leHRDb2xJbmZvIDogYW55ID0gW11cbiAgICAgIGlmKG5leHROZXh0Q2F0ICYmIG5leHROZXh0Q2F0LmNvZGUpIHtcbiAgICAgICAgbmV4dENvbEluZm8gPSBBcnJheS5mcm9tKHRoaXMuZnJhbWV3b3JrU2VydmljZS5saXN0LnZhbHVlcygpKS5maWx0ZXIobCA9PiBsLmNvZGUgPT09IG5leHROZXh0Q2F0LmNvZGUgKVxuICAgICAgfVxuICAgICAgICBkaWFsb2cgPSB0aGlzLmRpYWxvZy5vcGVuKENyZWF0ZVRlcm1Gcm9tRnJhbWV3b3JrQ29tcG9uZW50LCB7XG4gICAgICAgICAgZGF0YTogeyBcbiAgICAgICAgICAgIG1vZGU6J211bHRpLWNyZWF0ZScsXG4gICAgICAgICAgICBvcGVuTW9kZTogJ3ZpZXcnLFxuICAgICAgICAgICAgY2FyZENvbEluZm86IHRoaXMuZGF0YS5jb2x1bW5JbmZvLFxuICAgICAgICAgICAgY29sdW1uSW5mbzogY29sSW5mbyAmJiBjb2xJbmZvLmxlbmd0aCA/IGNvbEluZm9bMF0gOiBbXSxcbiAgICAgICAgICAgIG5leHRDb2xJbmZvOiBuZXh0Q29sSW5mbyAmJiBuZXh0Q29sSW5mby5sZW5ndGggPyBuZXh0Q29sSW5mb1swXSA6IFtdLFxuICAgICAgICAgICAgZnJhbWV3b3JrSWQ6IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXRGcmFtZXdvcmtJZCgpLFxuICAgICAgICAgICAgc2VsZWN0ZWRwYXJlbnRzOiB0aGlzLmhlaWdodExpZ2h0ZWQsXG4gICAgICAgICAgICBjb2xJbmRleDogbmV4dENhdC5pbmRleCxcbiAgICAgICAgICAgIGNoaWxkcmVuRGF0YTogZGF0YS5jaGlsZHJlbixcbiAgICAgICAgICAgIHNlbGVjdGVkUGFyZW50VGVybXM6IHNlbGVjdGVkVGVybXNcbiAgICAgICAgICB9LFxuICAgICAgICAgIHdpZHRoOiAnODAwcHgnLFxuICAgICAgICAgIHBhbmVsQ2xhc3M6ICdjdXN0b20tZGlhbG9nLWNvbnRhaW5lcidcbiAgICAgICAgfSlcbiAgICAgIFxuICAgICBcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBkaWFsb2cgPSB0aGlzLmRpYWxvZy5vcGVuKENyZWF0ZVRlcm1Db21wb25lbnQsIHtcbiAgICAgICAgZGF0YTogeyBcbiAgICAgICAgICBtb2RlOid2aWV3JyxcbiAgICAgICAgICBjb2x1bW5JbmZvOiB0aGlzLmRhdGEuY29sdW1uSW5mbyxcbiAgICAgICAgICBmcmFtZXdvcmtJZDogdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldEZyYW1ld29ya0lkKCksXG4gICAgICAgICAgc2VsZWN0ZWRwYXJlbnRzOiB0aGlzLmhlaWdodExpZ2h0ZWQsXG4gICAgICAgICAgY29sSW5kZXg6IGluZGV4LFxuICAgICAgICAgIGNoaWxkcmVuRGF0YTogY2hpbGRyZW5EYXRhLFxuICAgICAgICAgIHNlbGVjdGVkUGFyZW50VGVybXM6IHNlbGVjdGVkVGVybXNcbiAgICAgICAgfSxcbiAgICAgICAgd2lkdGg6ICc4MDBweCcsXG4gICAgICAgIHBhbmVsQ2xhc3M6ICdjdXN0b20tZGlhbG9nLWNvbnRhaW5lcidcbiAgICAgIH0pXG4gICAgfVxuICAgIGRpYWxvZy5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcbiAgICAgIGlmKCFyZXMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gaWYgKHJlcyAmJiByZXMuY3JlYXRlZCkge1xuICAgICAgLy8gICB0aGlzLnNob3dQdWJsaXNoID0gdHJ1ZVxuICAgICAgLy8gfVxuICAgICAgLy8gdGhpcy5sb2FkZWRbcmVzLnRlcm0uY2F0ZWdvcnldID0gZmFsc2VcbiAgICAgIC8vIC8vIHdhaXRcbiAgICAgIC8vIGNvbnN0IHBhcmVudENvbHVtbiA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXRQcmV2aW91c0NhdGVnb3J5KHJlcy50ZXJtLmNhdGVnb3J5KVxuICAgICAgLy8gcmVzLnBhcmVudCA9IG51bGxcbiAgICAgIC8vIGlmIChwYXJlbnRDb2x1bW4pIHtcbiAgICAgIC8vICAgcmVzLnBhcmVudCA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5zZWxlY3Rpb25MaXN0LmdldChwYXJlbnRDb2x1bW4uY29kZSlcbiAgICAgIC8vICAgcmVzLnBhcmVudC5jaGlsZHJlbj8gcmVzLnBhcmVudC5jaGlsZHJlbi5wdXNoKHJlcy50ZXJtKSA6cmVzLnBhcmVudFsnY2hpbGRyZW4nXSA9IFtyZXMudGVybV1cbiAgICAgIC8vIH1cbiAgICAgIC8vIHRoaXMudXBkYXRlRmluYWxMaXN0KHsgc2VsZWN0ZWRUZXJtOiByZXMudGVybSwgaXNTZWxlY3RlZDogZmFsc2UsIHBhcmVudERhdGE6IHJlcy5wYXJlbnQsIGNvbEluZGV4OmNvbEluZGV4IH0pXG4gICAgfSlcbiAgfVxuICBlZGl0KGRhdGE6IGFueSwgY2hpbGRyZW5EYXRhOiBhbnksIGluZGV4OiBhbnksIGNhcmRSZWY6IGFueSl7XG4gICAgbGV0IGRpYWxvZzogYW55XG4gICAgY29uc3Qgc2VsZWN0ZWRUZXJtcyA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXRQcmV2aW91c1NlbGVjdGVkVGVybXMoZGF0YS5jb2x1bW5JbmZvLmNvZGUpXG4gICAgY29uc3QgbmV4Q29sSW5mbyA9IHRoaXMuZ2V0TmV4dENhdChkYXRhKVxuICAgIGNvbnN0IG5leHRDYXQgPSBuZXhDb2xJbmZvIHx8IGRhdGEuY29sdW1uSW5mb1xuICAgXG4gICAgaWYobmV4dENhdCAmJiB0aGlzLmVudmlyb25tZW50ICYmIHRoaXMuZW52aXJvbm1lbnQuZnJhbWV3b3JrVHlwZSA9PT0gJ01ET19ERVNJR05BVElPTicpIHtcbiAgICAgIC8vIGNvbnN0IG5leHROZXh0Q2F0ID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldE5leHRDYXRlZ29yeShuZXh0Q2F0LmNvZGUpXG4gICAgICAvLyBjb25zdCBzZWxlY3RlZFRlcm1zID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldFByZXZpb3VzU2VsZWN0ZWRUZXJtcyhuZXh0Q2F0LmNvZGUpXG4gICAgICAvLyBjb25zdCBjb2xJbmZvID0gQXJyYXkuZnJvbSh0aGlzLmZyYW1ld29ya1NlcnZpY2UubGlzdC52YWx1ZXMoKSkuZmlsdGVyKGwgPT4gbC5jb2RlID09PSBuZXh0Q2F0LmNvZGUgKVxuICAgICAgLy8gbGV0IG5leHRDb2xJbmZvID0gW11cbiAgICAgIC8vIGlmKG5leHROZXh0Q2F0ICYmIG5leHROZXh0Q2F0LmNvZGUpIHtcbiAgICAgIC8vICAgbmV4dENvbEluZm8gPSBBcnJheS5mcm9tKHRoaXMuZnJhbWV3b3JrU2VydmljZS5saXN0LnZhbHVlcygpKS5maWx0ZXIobCA9PiBsLmNvZGUgPT09IG5leHROZXh0Q2F0LmNvZGUgKVxuICAgICAgLy8gfVxuICAgICAgLy8gICBkaWFsb2cgPSB0aGlzLmRpYWxvZy5vcGVuKENyZWF0ZVRlcm1Gcm9tRnJhbWV3b3JrQ29tcG9uZW50LCB7XG4gICAgICAvLyAgICAgZGF0YTogeyBcbiAgICAgIC8vICAgICAgIG1vZGU6J211bHRpLWNyZWF0ZScsXG4gICAgICAvLyAgICAgICBvcGVuTW9kZTogJ2VkaXQnLFxuICAgICAgLy8gICAgICAgY2FyZENvbEluZm86IHRoaXMuZGF0YS5jb2x1bW5JbmZvLFxuICAgICAgLy8gICAgICAgY29sdW1uSW5mbzogY29sSW5mbyAmJiBjb2xJbmZvLmxlbmd0aCA/IGNvbEluZm9bMF0gOiBbXSxcbiAgICAgIC8vICAgICAgIG5leHRDb2xJbmZvOiBuZXh0Q29sSW5mbyAmJiBuZXh0Q29sSW5mby5sZW5ndGggPyBuZXh0Q29sSW5mb1swXSA6IFtdLFxuICAgICAgLy8gICAgICAgZnJhbWV3b3JrSWQ6IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXRGcmFtZXdvcmtJZCgpLFxuICAgICAgLy8gICAgICAgc2VsZWN0ZWRwYXJlbnRzOiB0aGlzLmhlaWdodExpZ2h0ZWQsXG4gICAgICAvLyAgICAgICBjb2xJbmRleDogbmV4dENhdC5pbmRleCxcbiAgICAgIC8vICAgICAgIGNoaWxkcmVuRGF0YTogZGF0YS5jaGlsZHJlbixcbiAgICAgIC8vICAgICAgIHNlbGVjdGVkUGFyZW50VGVybXM6IHNlbGVjdGVkVGVybXNcbiAgICAgIC8vICAgICB9LFxuICAgICAgLy8gICAgIHdpZHRoOiAnODAwcHgnLFxuICAgICAgLy8gICAgIHBhbmVsQ2xhc3M6ICdjdXN0b20tZGlhbG9nLWNvbnRhaW5lcidcbiAgICAgIC8vICAgfSlcbiAgICAgIFxuICAgICAgdGhpcy5jcmVhdGUoZGF0YSwgJ2VkaXQnKVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGRpYWxvZyA9IHRoaXMuZGlhbG9nLm9wZW4oQ3JlYXRlVGVybUNvbXBvbmVudCwge1xuICAgICAgICBkYXRhOiB7IFxuICAgICAgICAgIG1vZGU6J2VkaXQnLFxuICAgICAgICAgIGNvbHVtbkluZm86IGRhdGEuY29sdW1uSW5mbyxcbiAgICAgICAgICBmcmFtZXdvcmtJZDogdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldEZyYW1ld29ya0lkKCksXG4gICAgICAgICAgc2VsZWN0ZWRwYXJlbnRzOiB0aGlzLmhlaWdodExpZ2h0ZWQsXG4gICAgICAgICAgY29sSW5kZXg6IGluZGV4LFxuICAgICAgICAgIGNoaWxkcmVuRGF0YTogY2hpbGRyZW5EYXRhLFxuICAgICAgICAgIHNlbGVjdGVkUGFyZW50VGVybXM6IHNlbGVjdGVkVGVybXMsXG4gICAgICAgICAgY2FyZFJlZjogY2FyZFJlZlxuICAgICAgICB9LFxuICAgICAgICB3aWR0aDogJzgwMHB4JyxcbiAgICAgICAgcGFuZWxDbGFzczogJ2N1c3RvbS1kaWFsb2ctY29udGFpbmVyJ1xuICAgICAgfSlcbiAgICB9XG4gICAgZGlhbG9nLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgaWYoIXJlcykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBjb25zdCByZXNwb25zZURhdGEgPSB7XG4gICAgICAvLyAgIHJlcyxcbiAgICAgIC8vICAgaW5kZXg6IGluZGV4LmluZGV4LFxuICAgICAgLy8gICBkYXRhLFxuICAgICAgLy8gICB0eXBlOiAndXBkYXRlJyxcbiAgICAgIC8vICAgY2FyZFJlZjogY2FyZFJlZlxuICAgICAgLy8gfVxuICAgICAgLy8gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLnVwZGF0ZUFmdGVyQWRkT3JFZGl0U3ViamVjdChyZXNwb25zZURhdGEpXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdyZXNpemUnKSlcbiAgICAgIH0sIDEwMClcbiAgICB9KVxuICB9XG4gIGNyZWF0ZShkYXRhOiBhbnksIG1vZGU/OnN0cmluZyl7XG4gICAgY29uc3QgbmV4Q29sSW5mbyA9IHRoaXMuZ2V0TmV4dENhdChkYXRhKVxuICAgIGNvbnN0IG5leHRDYXQgPSBuZXhDb2xJbmZvIHx8IGRhdGEuY29sdW1uSW5mb1xuICAgIGNvbnN0IG5leHROZXh0Q2F0ID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldE5leHRDYXRlZ29yeShuZXh0Q2F0LmNvZGUpXG4gICAgaWYobmV4dENhdCkge1xuICAgICAgY29uc3Qgc2VsZWN0ZWRUZXJtcyA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXRQcmV2aW91c1NlbGVjdGVkVGVybXMobmV4dENhdC5jb2RlKVxuICAgICAgY29uc3QgY29sSW5mbyA9IEFycmF5LmZyb20odGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmxpc3QudmFsdWVzKCkpLmZpbHRlcihsID0+IGwuY29kZSA9PT0gbmV4dENhdC5jb2RlIClcbiAgICAgIGxldCBuZXh0Q29sSW5mbzogYW55ID0gW11cbiAgICAgIGlmKG5leHROZXh0Q2F0ICYmIG5leHROZXh0Q2F0LmNvZGUpIHtcbiAgICAgICAgbmV4dENvbEluZm8gPSBBcnJheS5mcm9tKHRoaXMuZnJhbWV3b3JrU2VydmljZS5saXN0LnZhbHVlcygpKS5maWx0ZXIobCA9PiBsLmNvZGUgPT09IG5leHROZXh0Q2F0LmNvZGUgKVxuICAgICAgfVxuICAgICAgbGV0IGRpYWxvZzogYW55XG4gICAgICBpZih0aGlzLmVudmlyb25tZW50ICYmIHRoaXMuZW52aXJvbm1lbnQuZnJhbWV3b3JrVHlwZSA9PT0gJ01ET19ERVNJR05BVElPTicpe1xuICAgICAgICBkaWFsb2cgPSB0aGlzLmRpYWxvZy5vcGVuKENyZWF0ZVRlcm1Gcm9tRnJhbWV3b3JrQ29tcG9uZW50LCB7XG4gICAgICAgICAgZGF0YTogeyBcbiAgICAgICAgICAgIG1vZGU6J211bHRpLWNyZWF0ZScsXG4gICAgICAgICAgICBvcGVuTW9kZTogbW9kZSB8fCAnYWRkJyxcbiAgICAgICAgICAgIGNhcmRDb2xJbmZvOiB0aGlzLmRhdGEuY29sdW1uSW5mbyxcbiAgICAgICAgICAgIGNvbHVtbkluZm86IGNvbEluZm8gJiYgY29sSW5mby5sZW5ndGggPyBjb2xJbmZvWzBdIDogW10sXG4gICAgICAgICAgICBuZXh0Q29sSW5mbzogbmV4dENvbEluZm8gJiYgbmV4dENvbEluZm8ubGVuZ3RoID8gbmV4dENvbEluZm9bMF0gOiBbXSxcbiAgICAgICAgICAgIGZyYW1ld29ya0lkOiB0aGlzLmZyYW1ld29ya1NlcnZpY2UuZ2V0RnJhbWV3b3JrSWQoKSxcbiAgICAgICAgICAgIHNlbGVjdGVkcGFyZW50czogdGhpcy5oZWlnaHRMaWdodGVkLFxuICAgICAgICAgICAgY29sSW5kZXg6IG5leHRDYXQuaW5kZXgsXG4gICAgICAgICAgICBjaGlsZHJlbkRhdGE6IGRhdGEuY2hpbGRyZW4sXG4gICAgICAgICAgICBzZWxlY3RlZFBhcmVudFRlcm1zOiBzZWxlY3RlZFRlcm1zXG4gICAgICAgICAgfSxcbiAgICAgICAgICB3aWR0aDogJzgwMHB4JyxcbiAgICAgICAgICBwYW5lbENsYXNzOiAnY3VzdG9tLWRpYWxvZy1jb250YWluZXInXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkaWFsb2cgPSB0aGlzLmRpYWxvZy5vcGVuKENyZWF0ZVRlcm1Db21wb25lbnQsIHtcbiAgICAgICAgICBkYXRhOiB7IFxuICAgICAgICAgICAgbW9kZTonbXVsdGktY3JlYXRlJyxcbiAgICAgICAgICAgIGNvbHVtbkluZm86IGNvbEluZm8gJiYgY29sSW5mby5sZW5ndGggPyBjb2xJbmZvWzBdIDogW10sXG4gICAgICAgICAgICBmcmFtZXdvcmtJZDogdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldEZyYW1ld29ya0lkKCksXG4gICAgICAgICAgICBzZWxlY3RlZHBhcmVudHM6IHRoaXMuaGVpZ2h0TGlnaHRlZCxcbiAgICAgICAgICAgIGNvbEluZGV4OiBuZXh0Q2F0LmluZGV4LFxuICAgICAgICAgICAgY2hpbGRyZW5EYXRhOiBkYXRhLmNoaWxkcmVuLFxuICAgICAgICAgICAgc2VsZWN0ZWRQYXJlbnRUZXJtczogc2VsZWN0ZWRUZXJtc1xuICAgICAgICAgIH0sXG4gICAgICAgICAgd2lkdGg6ICc4MDBweCcsXG4gICAgICAgICAgcGFuZWxDbGFzczogJ2N1c3RvbS1kaWFsb2ctY29udGFpbmVyJ1xuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgZGlhbG9nLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgICBpZighcmVzKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBjb25zdCByZXNwb25zZURhdGEgPSB7XG4gICAgICAgICAgcmVzLFxuICAgICAgICAgIGluZGV4OiBuZXh0Q2F0LmluZGV4LFxuICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgdHlwZTogJ211bHRpLWNyZWF0ZSdcbiAgICAgICAgfVxuICAgICAgICBpZighKHJlcyAmJiByZXMuc3RvcFVwZGF0ZSkpe1xuICAgICAgICAgIHRoaXMuZnJhbWV3b3JrU2VydmljZS51cGRhdGVBZnRlckFkZE9yRWRpdFN1YmplY3QocmVzcG9uc2VEYXRhKVxuICAgICAgICB9XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgncmVzaXplJykpXG4gICAgICAgIH0sIDEwMClcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgZ2V0TmV4dENhdE5hbWUoZGF0YTogYW55KSB7XG4gICAgaWYoZGF0YSAmJiBkYXRhLmNvbHVtbkluZm8gJiYgZGF0YS5jb2x1bW5JbmZvLmNvZGUpe1xuICAgICAgY29uc3QgbmV4dENhdCA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXROZXh0Q2F0ZWdvcnkoZGF0YS5jb2x1bW5JbmZvLmNvZGUpXG4gICAgICBpZihuZXh0Q2F0ICYmIG5leHRDYXQuY29kZSl7XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gbmV4dENhdC5jb2RlXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBnZXROZXh0Q2F0KGRhdGE6IGFueSkge1xuICAgIGlmKGRhdGEgJiYgZGF0YS5jb2x1bW5JbmZvICYmIGRhdGEuY29sdW1uSW5mby5jb2RlKXtcbiAgICAgIGNvbnN0IG5leHRDYXQgPSB0aGlzLmZyYW1ld29ya1NlcnZpY2UuZ2V0TmV4dENhdGVnb3J5KGRhdGEuY29sdW1uSW5mby5jb2RlKVxuICAgICAgcmV0dXJuIG5leHRDYXRcbiAgICB9XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmKHRoaXMuc3Vic2NyaXB0aW9uKXtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKClcbiAgICB9XG4gIH1cbiAgZGVsZXRlKGRhdGE6IGFueSkge1xuICAgIGNvbnN0IGRpYWxvZ0RhdGEgPSB7XG4gICAgICBkaWFsb2dUeXBlOiAnd2FybmluZycsXG4gICAgICBkaWFsb2dBY3Rpb246ICdyZXRpcmUnLFxuICAgICAgZGVzY3JpcHRpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBoZWFkZXI6IGBDb21wZXRlbmN5ICR7ZGF0YS5jYXRlZ29yeSA9PT1cInN1YnRoZW1lXCI/ICdzdWItdGhlbWUnOiAndGhlbWUnfSB3aWxsIGJlIGRlbGV0ZWRgLFxuICAgICAgICAgIGhlYWRlckNsYXNzOiAnZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC1ibHVlIHRleHRCb2xkJyxcbiAgICAgICAgICBtZXNzYWdlczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBtc2dDbGFzczogJ21iLTIgbXQtMicsXG4gICAgICAgICAgICAgIG1zZzogYERvIHlvdSB3YW50IHRvIHByb2NlZWQ/YCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBmb290ZXJDbGFzczogJ2l0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlcicsXG4gICAgICBidXR0b25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBidG5UZXh0OiAnTm8nLFxuICAgICAgICAgIGJ0bkNsYXNzOiAnYnRuLW91dGxpbmUnLFxuICAgICAgICAgIHJlc3BvbnNlOiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGJ0blRleHQ6ICdZZXMnLFxuICAgICAgICAgIGJ0bkNsYXNzOiAnYnRuLWZ1bGwtc3VjY2VzcycsXG4gICAgICAgICAgcmVzcG9uc2U6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgY2FyZEluZm86IGRhdGFcbiAgICB9XG4gICAgbGV0IGRpYWxvZyA9IHRoaXMuZGlhbG9nLm9wZW4oQ29uZm9yYW10aW9uUG9wdXBDb21wb25lbnQsIHtcbiAgICAgICAgICBkYXRhOiBkaWFsb2dEYXRhLFxuICAgICAgICAgIGF1dG9Gb2N1czogZmFsc2UsXG4gICAgICAgICAgd2lkdGg6ICc1MDBweCcsXG4gICAgICAgICAgbWF4V2lkdGg6ICc4MHZ3JyxcbiAgICAgICAgICBtYXhIZWlnaHQ6ICc5MHZoJyxcbiAgICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWVcbiAgICAgICAgfSlcbiAgICAgICAgZGlhbG9nLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKF9yZXMgPT4ge1xuICAgICAgICAgXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgncmVzaXplJykpXG4gICAgICAgIH0sIDEwMClcbiAgICAgICAgfSlcbiAgICAgIFxuICAgIFxuICAgIH1cbiAgXG59XG4iLCI8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCIoIChkYXRhICYmIGRhdGE/LmNhcmRTdWJUeXBlKSB8fCAnY2FyZE1pbmltYWwnKVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidzdGFuZGFyZCdcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJjYXJkU3RhbmRhcmRcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInc3BhY2Utc2F2aW5nJ1wiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNhcmRTcGFjZVNhdmluZ1wiPjwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdCBbbmdUZW1wbGF0ZU91dGxldF09XCJjYXJkTWluaW1hbFwiPjwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjY2FyZE1pbmltYWw+XG4gICAgPGRpdiAjY2FyZFJlZiBjbGFzcz1cInRlcm0tY2FyZCBjbGlja2FibGUge3tkYXRhLmluZGV4fX1cIiAoY2xpY2spPVwiY2FyZENsaWNrZWQoZGF0YSwgY2FyZFJlZilcIlxuICAgICAgICBbbmdDbGFzc109XCJbZGF0YS5jaGlsZHJlbi5zZWxlY3RlZD8nc2VsZWN0ZWQnOicnLCBkYXRhLmNoaWxkcmVuLmFwcHJvdmFsU3RhdHVzID09PSAnRHJhZnQnPyAnaW5EcmFmdCc6JycsXG4gICAgZGF0YS5jaGlsZHJlbi5hc3NvY2lhdGlvblByb3BlcnRpZXM/LmFwcHJvdmFsU3RhdHVzID09PSAnRHJhZnQnICYmIGlzQXBwcm92YWxSZXF1aXJlZCAmJiAhYXBwcm92YWxMaXN0Lmxlbmd0aCB8fCBkYXRhLmNoaWxkcmVuLmhpZ2hsaWdodCAmJiBpc0FwcHJvdmFsUmVxdWlyZWQgPyAnaW5Bc3NvY2lhdGlvbkRyYWZ0JzonJ11cIlxuICAgICAgICBpZD1cInt7ZGF0YS5jaGlsZHJlbi5uYW1lfX1cIlxuICAgICAgICBbbmdTdHlsZV09XCJ7J2JhY2tncm91bmQtY29sb3InOmdldENvbG9yKGRhdGEuaW5kZXgsY2FyZFJlZiwnYmdDb2xvcicsZGF0YSl9XCI+XG4gICAgICAgIDwhLS0gKGNsaWNrKT1cImRhdGEuc2VsZWN0ZWQ9IWRhdGEuc2VsZWN0ZWRcIiAtLT4gICBcbiAgICAgICAgPGRpdiBjbGFzcz1cInRlcm0tY2FyZC1wYXJlbnRcIj5cbiAgICAgICAgICAgIDwhLS0gPEJlbG93IGVsZW1lbnQgaXMgdG8gc2hvdyBpZCBvbiB0b3AgbGVmdCBvZiB0aGUgY2FyZD4gLS0+XG4gICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJpZFwiIFtoaWRkZW5dPVwidHJ1ZVwiPnt7ZGF0YS5jaGlsZHJlbi5jb2RlfX08L2Rpdj4gLS0+XG4gICAgICAgICAgICAgXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGVybS1jYXJkLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICA8IS0tIDxuZy1jb250YWluZXIgICpuZ0lmPVwiZGF0YT8uY2hpbGRyZW4/LnJlZklkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyaWJib25cIj57e2RhdGE/LmNoaWxkcmVuPy5yZWZJZH19PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+IC0tPlxuXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRhdGE/LmNoaWxkcmVuPy5hZGRpdGlvbmFsUHJvcGVydGllcz8uY29tcGV0ZW5jeUFyZWE/Lm5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiAgY2xhc3M9XCJtYi0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbXAtYXJlYSB7e2RhdGE/LmNoaWxkcmVuPy5hZGRpdGlvbmFsUHJvcGVydGllcz8uY29tcGV0ZW5jeUFyZWE/Lm5hbWU/LnRvTG93ZXJDYXNlKCl9fVwiPnt7ZGF0YT8uY2hpbGRyZW4/LmFkZGl0aW9uYWxQcm9wZXJ0aWVzPy5jb21wZXRlbmN5QXJlYT8ubmFtZX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRpdGxlXCI+e3tkYXRhLmNoaWxkcmVuLm5hbWV9fVxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0YT8uY2hpbGRyZW4/LnJlZklkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVmSWRDYXJkIG10LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57e2RhdGE/LmNoaWxkcmVuPy5yZWZJZH19IDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj4gXG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPCEtLSA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0YT8uY2hpbGRyZW4/LnJlZklkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWZJZENhcmQgcHgtNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3tkYXRhPy5jaGlsZHJlbj8ucmVmSWR9fSA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPiAtLT5cbiAgICAgICAgICAgICAgICA8IS0tIDxzcGFuPisre3tkYXRhLmNoaWxkcmVuLnNlbGVjdGVkfX0rKys8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4+PT17e2RhdGEuY2hpbGRyZW4uc3RhdHVzfX09PTwvc3Bhbj4gIC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWRlc2NyaXB0aW9uIGZsZXggZmxleC1taWRkbGUgZ2FwLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJmcmFjXCI+PC9tYXQtaWNvbj4gXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7KGRhdGEuY2hpbGRyZW4uY2hpbGRyZW4pID8gZGF0YS5jaGlsZHJlbi5jaGlsZHJlbj8ubGVuZ3RoIDogMH19IENoaWxkIE9yZzwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIDxwPnt7ZGF0YS5jaGlsZHJlbi5hcHByb3ZhbFN0YXR1c319LCB7e2RhdGEuY2hpbGRyZW4uYXNzb2NpYXRpb25Qcm9wZXJ0aWVzPy5hcHByb3ZhbFN0YXR1c319PC9wPiAtLT5cbiAgICAgICAgPCEtLSAqbmdJZj1cIiFkYXRhLmlzVmlld09ubHkgJiYgZGF0YS5jaGlsZHJlbi5hcHByb3ZhbFN0YXR1cyA9PT0gJ0RyYWZ0JyAmJiBpc0FwcHJvdmFsUmVxdWlyZWRcIiAtLT5cblxuICAgICAgICA8IS0tIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XCIgLS0+XG4gICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0YT8uY29sdW1uSW5mbz8uY29uZmlnPy5lbmFibGVUaHJlZURvdFwiID5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiBpMThuLWFyaWEtbGFiZWwgYXJpYS1sYWJlbD1cImFjdGlvbiBpdGVtc1wiXG4gICAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPVwib3JnTWVudVwiIFttYXRNZW51VHJpZ2dlckRhdGFdPVwieydkYXRhJzpkYXRhLCAnY2FyZFJlZic6IGNhcmRSZWZ9XCIgY2xhc3M9XCJhY3Rpb24tYnRuXCI+XG4gICAgICAgICAgICA8bWF0LWljb24+bW9yZV92ZXJ0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cInRlcm0tY2FyZC1jaGVja2JveFwiPlxuICAgICAgICAgICAgPG1hdC1jaGVja2JveCBjb2xvcj1cInByaW1hcnlcIiAqbmdJZj1cImRhdGEuY2hpbGRyZW4uYXBwcm92YWxTdGF0dXMgPT09ICdEcmFmdCcgJiYgaXNBcHByb3ZhbFJlcXVpcmVkICYmICFhcHByb3ZhbExpc3QubGVuZ3RoIHx8IFxuICAgICAgICAgICAgZGF0YS5jaGlsZHJlbi5hc3NvY2lhdGlvblByb3BlcnRpZXM/LmFwcHJvdmFsU3RhdHVzID09PSAnRHJhZnQnICYmIGlzQXBwcm92YWxSZXF1aXJlZCAmJiAhYXBwcm92YWxMaXN0Lmxlbmd0aCB8fFxuICAgICAgICAgICAgZGF0YS5jaGlsZHJlbi5oaWdobGlnaHQgJiYgaXNBcHByb3ZhbFJlcXVpcmVkXCIgW2NoZWNrZWRdPVwiZGF0YS5jaGlsZHJlbi5oaWdobGlnaHRcIiBjbGFzcz1cInRlcm1TZWxlY3Rpb25cIlxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiaGFuZGxlUHJvZHVjdENsaWNrKGRhdGEuY2hpbGRyZW4sICRldmVudClcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+PC9tYXQtY2hlY2tib3g+XG4gICAgICAgICAgICA8bWF0LWljb24gY29sb3I9XCJwcmltYXJ5XCIgY2xhc3M9XCJhcHByb3ZlLWZsYWdcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiZGF0YS5jaGlsZHJlbi5oaWdobGlnaHQgJiYgaXNBcHByb3ZhbFJlcXVpcmVkXCI+e3thcHBfc3RyaW5ncy5mbGFnfX08L21hdC1pY29uPlxuICAgICAgICA8L2Rpdj4gLS0+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2NhcmRTdGFuZGFyZD5cbiAgICA8ZGl2PlxuICAgICAgICB7e2RhdGEuY2hpbGRyZW4ubmFtZX19IFxuICAgIDwvZGl2PlxuICAgIDxkaXY+XG4gICAgICAgIHt7ZGF0YS5jaGlsZHJlbi5kZXNjcmlwdGlvbn19IHNcbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjY2FyZFNwYWNlU2F2aW5nPlxuICAgIDxkaXY+XG4gICAgICAgIHt7ZGF0YS5jaGlsZHJlbi5uYW1lfX1cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxtYXQtbWVudSAjY2FyZE1lbnU9XCJtYXRNZW51XCIgY2xhc3M9XCJtZW51LXNlY1wiPlxuICAgIDxuZy10ZW1wbGF0ZSBtYXRNZW51Q29udGVudCBsZXQtcm93RGF0YT1cImRhdGFcIiBsZXQtY2FyZFJlZj1cImNhcmRSZWZcIj5cbiAgICAgICAgPCEtLSA8ZGl2ID4gLS0+XG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJkYXRhLmNvbHVtbkluZm8uY29uZmlnLmVuYWJsZVZpZXdcIiAgKGNsaWNrKT1cInZpZXcoZGF0YSwgZGF0YS5jaGlsZHJlbiwgZGF0YS5pbmRleClcIiBtYXQtbWVudS1pdGVtIG5hbWU9XCJjaGFubmVsLWFuYWx5dGljcy1idXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJ3cy1tYXQtcHJpbWFyeS10ZXh0XCIgaTE4bi1hcmlhLWxhYmVsIGFyaWEtbGFiZWw9XCJBbmFseXRpY3NcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbj52aXNpYmlsaXR5PC9tYXQtaWNvbj4gPHNwYW4+Vmlldzwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJkYXRhLmNvbHVtbkluZm8uY29uZmlnLmVuYWJhbGVFZGl0XCIgKGNsaWNrKT1cImVkaXQoZGF0YSwgIGRhdGEuY2hpbGRyZW4sZGF0YS5pbmRleCwgY2FyZFJlZilcIlxuICAgICAgICAgICAgbWF0LW1lbnUtaXRlbSBuYW1lPVwiY2hhbm5lbC1hbmFseXRpY3MtYnV0dG9uXCIgY2xhc3M9XCJ3cy1tYXQtcHJpbWFyeS10ZXh0XCIgaTE4bi1hcmlhLWxhYmVsXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiQW5hbHl0aWNzXCI+XG4gICAgICAgICAgICA8bWF0LWljb24+ZWRpdDwvbWF0LWljb24+XG4gICAgICAgICAgICA8c3Bhbj5FZGl0PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImRhdGEuY29sdW1uSW5mby5jb25maWcuZW5hYmxlQWRkXCIgKGNsaWNrKT1cImNyZWF0ZShkYXRhKVwiXG4gICAgICAgICAgICBtYXQtbWVudS1pdGVtIG5hbWU9XCJjaGFubmVsLWFuYWx5dGljcy1idXR0b25cIiBjbGFzcz1cIndzLW1hdC1wcmltYXJ5LXRleHRcIiBpMThuLWFyaWEtbGFiZWxcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJBbmFseXRpY3NcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPlxuICAgICAgICAgICAgPHNwYW4+QWRkPC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImRhdGEuY29sdW1uSW5mby5jb25maWcuZW5hYmxlRGVsZXRlXCIgKGNsaWNrKT1cImRlbGV0ZShkYXRhKVwiXG4gICAgICAgICAgICBtYXQtbWVudS1pdGVtIG5hbWU9XCJjaGFubmVsLWFuYWx5dGljcy1idXR0b25cIiBjbGFzcz1cIndzLW1hdC1wcmltYXJ5LXRleHRcIiBpMThuLWFyaWEtbGFiZWxcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJBbmFseXRpY3NcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICAgICAgPHNwYW4+RGVsZXRlPC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L25nLXRlbXBsYXRlPlxuPC9tYXQtbWVudT5cblxuPG1hdC1tZW51ICNvcmdNZW51PVwibWF0TWVudVwiIGNsYXNzPVwibWVudS1zZWNcIj5cbiAgICA8bmctdGVtcGxhdGUgbWF0TWVudUNvbnRlbnQgbGV0LXJvd0RhdGE9XCJkYXRhXCIgbGV0LWNhcmRSZWY9XCJjYXJkUmVmXCI+XG4gICAgICAgIDwhLS0gPGJ1dHRvbiAqbmdJZj1cImRhdGEuY29sdW1uSW5mby5jb25maWcuZW5hYmxlVXBkYXRlSGllcmFyY2h5XCIgIChjbGljayk9XCJ1cGRhdGVIaWVyYXJjaHkoZGF0YSwgZGF0YS5jaGlsZHJlbiwgZGF0YS5pbmRleClcIiBtYXQtbWVudS1pdGVtIG5hbWU9XCJjaGFubmVsLWFuYWx5dGljcy1idXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJ3cy1tYXQtcHJpbWFyeS10ZXh0XCIgaTE4bi1hcmlhLWxhYmVsIGFyaWEtbGFiZWw9XCJBbmFseXRpY3NcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbj52aXNpYmlsaXR5PC9tYXQtaWNvbj4gPHNwYW4+VXBkYXRlIEhpZXJhcmNoeTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJkYXRhLmNvbHVtbkluZm8uY29uZmlnLmVuYWJhbGVSZW1vdmVDb25uZWN0aW9uXCIgKGNsaWNrKT1cInJlbW92ZUNvbm5lY3Rpb24oZGF0YSwgIGRhdGEuY2hpbGRyZW4sZGF0YS5pbmRleCwgY2FyZFJlZilcIlxuICAgICAgICAgICAgbWF0LW1lbnUtaXRlbSBuYW1lPVwiY2hhbm5lbC1hbmFseXRpY3MtYnV0dG9uXCIgY2xhc3M9XCJ3cy1tYXQtcHJpbWFyeS10ZXh0XCIgaTE4bi1hcmlhLWxhYmVsXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiQW5hbHl0aWNzXCI+XG4gICAgICAgICAgICA8bWF0LWljb24+ZWRpdDwvbWF0LWljb24+XG4gICAgICAgICAgICA8c3Bhbj5SZW1vdmUgQ29ubmVjdGlvbjwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJkYXRhLmNvbHVtbkluZm8uY29uZmlnLmVuYWJsZU1hbmFnZU9yZ2FuaXphdGlvblwiIChjbGljayk9XCJtYW5hZ2VPcmdhbml6YXRpb24oZGF0YSlcIlxuICAgICAgICAgICAgbWF0LW1lbnUtaXRlbSBuYW1lPVwiY2hhbm5lbC1hbmFseXRpY3MtYnV0dG9uXCIgY2xhc3M9XCJ3cy1tYXQtcHJpbWFyeS10ZXh0XCIgaTE4bi1hcmlhLWxhYmVsXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiQW5hbHl0aWNzXCI+XG4gICAgICAgICAgICA8bWF0LWljb24+YWRkPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDxzcGFuPk1hbmFnZSBPcmdhbmlzYXRpb248L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPiAtLT5cbiAgICA8L25nLXRlbXBsYXRlPlxuPC9tYXQtbWVudT4iXX0=
|
|
317
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVybS1jYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcnkvc3VuYmlyZC1jYi90cmVlLWhpZXJhcmNoeS9zcmMvbGliL2NvbXBvbmVudHMvdGVybS1jYXJkL3Rlcm0tY2FyZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJ5L3N1bmJpcmQtY2IvdHJlZS1oaWVyYXJjaHkvc3JjL2xpYi9jb21wb25lbnRzL3Rlcm0tY2FyZC90ZXJtLWNhcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFLekYsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRzlDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLHNFQUFzRSxDQUFDO0FBQ3hILE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDOzs7Ozs7Ozs7O0FBT2hHLE1BQU0sT0FBTyxpQkFBaUI7SUFZNUIsSUFDSSxJQUFJLENBQUMsS0FBVTtRQUNqQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUduQixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEdBQUMsS0FBSyxDQUFBO0lBQ3JDLENBQUM7SUFDRCxJQUFJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQU1ELFlBQ1UsZ0JBQWtDLEVBQ2xDLHNCQUE4QyxFQUM5QyxlQUFnQyxFQUNqQyxNQUFpQjtRQUhoQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBd0I7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LE1BQU07WUFDakIsWUFBWSxFQUFFLElBQUk7U0FDbkIsQ0FBQyxDQUFBO1FBQ0YsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUV0QyxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNkLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQTtZQUMzQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUE7UUFDUCxDQUFDLENBQUMsQ0FBQTtJQUdOLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxJQUFRO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUM5RCxDQUFDOytHQTdXUSxpQkFBaUI7bUdBQWpCLGlCQUFpQiw4S0NqQjlCLDh3T0FvSVc7OzRGRG5IRSxpQkFBaUI7a0JBTDdCLFNBQVM7K0JBQ0UsZUFBZTt3TUFpQnJCLElBQUk7c0JBRFAsS0FBSztnQkFXSSxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBOU0ZyYW1ld29yayB9IGZyb20gJy4uLy4uL21vZGVscy9mcmFtZXdvcmsubW9kZWwnXG5pbXBvcnQgeyBBcHByb3ZhbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hcHByb3ZhbC5zZXJ2aWNlJztcbmltcG9ydCB7IEZyYW1ld29ya1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mcmFtZXdvcmsuc2VydmljZSdcbmltcG9ydCB7IExvY2FsQ29ubmVjdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9sb2NhbC1jb25uZWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgbGFiZWxzIH0gZnJvbSAnLi4vLi4vbGFiZWxzL3N0cmluZ3MnO1xuaW1wb3J0IHsgQ2FyZFNlbGVjdGlvbiwgQ2FyZENoZWNrZWQsIENhcmQgfSBmcm9tICcuLi8uLi9tb2RlbHMvdmFyaWFibGUtdHlwZS5tb2RlbCc7XG5pbXBvcnQgeyBNYXRMZWdhY3lEaWFsb2cgYXMgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbGVnYWN5LWRpYWxvZyc7XG5pbXBvcnQgeyBDcmVhdGVUZXJtQ29tcG9uZW50IH0gZnJvbSAnLi4vY3JlYXRlLXRlcm0vY3JlYXRlLXRlcm0uY29tcG9uZW50JztcbmltcG9ydCB7IENyZWF0ZVRlcm1Gcm9tRnJhbWV3b3JrQ29tcG9uZW50IH0gZnJvbSAnLi8uLi9jcmVhdGUtdGVybS1mcm9tLWZyYW1ld29yay9jcmVhdGUtdGVybS1mcm9tLWZyYW1ld29yay5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29uZm9yYW10aW9uUG9wdXBDb21wb25lbnQgfSBmcm9tICcuLi9jb25mb3JhbXRpb24tcG9wdXAvY29uZm9yYW10aW9uLXBvcHVwLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi10ZXJtLWNhcmQnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGVybS1jYXJkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGVybS1jYXJkLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgVGVybUNhcmRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIC8vIEBJbnB1dCgpIGRhdGEhOiBOU0ZyYW1ld29yay5JVGVybUNhcmRcblxuICBwcml2YXRlIF9kYXRhITogTlNGcmFtZXdvcmsuSVRlcm1DYXJkO1xuICBpc0FwcHJvdmFsUmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZVxuICBhcHByb3ZhbExpc3Q6IEFycmF5PENhcmQ+ID0gW11cbiAgaGVpZ2h0TGlnaHRlZCA9IFtdXG4gIGFwcF9zdHJpbmdzOiBhbnkgPSBsYWJlbHM7XG4gIGxvYWRlZDogYW55ID0ge31cbiAgaXNDb21wZXRlbmN5QXJlYTphbnk7XG4gIGVudmlyb25tZW50OiBhbnlcbiAgc3Vic2NyaXB0aW9uIDphbnlcbiAgQElucHV0KClcbiAgc2V0IGRhdGEodmFsdWU6IGFueSkge1xuICAgIHRoaXMuX2RhdGEgPSB2YWx1ZTtcbiAgICAvLyAgaWYodGhpcy5fZGF0YSlcbiAgICAvLyAgICB0aGlzLmNyZWF0ZVRpbWVsaW5lKHRoaXMuX2RhdGFbMF0uaWQpXG4gICAgdGhpcy5fZGF0YS5jaGlsZHJlbi5oaWdobGlnaHQ9ZmFsc2VcbiAgfVxuICBnZXQgZGF0YSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl9kYXRhO1xuICB9XG5cbiAgQE91dHB1dCgpIGlzU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPENhcmRTZWxlY3Rpb24+KClcbiAgQE91dHB1dCgpIHNlbGVjdGVkQ2FyZCA9IG5ldyBFdmVudEVtaXR0ZXI8Q2FyZENoZWNrZWQ+KClcbiAgQE91dHB1dCgpIGNhcmRBY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPHsgYWN0aW9uOiBzdHJpbmcsIGRhdGE6IGFueSB9PigpXG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBmcmFtZXdvcmtTZXJ2aWNlOiBGcmFtZXdvcmtTZXJ2aWNlLFxuICAgIHByaXZhdGUgbG9jYWxDb25uZWN0aW9uU2VydmljZTogTG9jYWxDb25uZWN0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGFwcHJvdmFsU2VydmljZTogQXBwcm92YWxTZXJ2aWNlLFxuICAgIHB1YmxpYyBkaWFsb2c6IE1hdERpYWxvZywgXG4gICkgeyB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5pc0FwcHJvdmFsUmVxdWlyZWQgPSB0aGlzLmxvY2FsQ29ubmVjdGlvblNlcnZpY2UuZ2V0Q29uZmlnSW5mbygpLmlzQXBwcm92YWxSZXF1aXJlZFxuICAgIFxuICAgIHRoaXMudXBkYXRlQXBwcm92YWxTdGF0dXMoKVxuICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmluc2VydFVwZGF0ZURlbGV0ZU5vdGlmaWVyLnN1YnNjcmliZSgoZSk9PntcbiAgICAgIGlmKGUpe1xuICAgICAgIHRoaXMuaXNDb21wZXRlbmN5QXJlYSA9IGUuYWN0aW9uXG4gICAgICB9XG4gICAgfSlcblxuXG4gICAgdGhpcy5lbnZpcm9ubWVudCA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXRFbnZpcm9tZW50KClcbiAgICBcbiAgfVxuXG4gIGNhcmRDbGlja2VkKGRhdGE6IGFueSwgY2FyZFJlZjogYW55KSB7XG4gICAgaWYoZGF0YS5jYXRlZ29yeSE9J3N1YnRoZW1lJyl7XG4gICAgICB0aGlzLmZyYW1ld29ya1NlcnZpY2UuY2FyZENsa0RhdGEgPSBkYXRhO1xuICAgICAgdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLkN1cnJlbnRDYXJkQ2xrLm5leHQoZGF0YS5jYXRlZ29yeSlcbiAgICAgIFxuICAgIH1cbiAgICAvLyB0aGlzLmRhdGEuc2VsZWN0ZWQgPSB0cnVlXG4gICAgaWYodGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmlzTGFzdENvbHVtbih0aGlzLmRhdGEuY2F0ZWdvcnkpKXtcbiAgICAgIHJldHVybiBcbiAgICB9XG4gICAgdGhpcy5pc1NlbGVjdGVkLmVtaXQoeyBlbGVtZW50OiB0aGlzLmRhdGEuY2hpbGRyZW4sIGlzU2VsZWN0ZWQ6ICFkYXRhLnNlbGVjdGVkIH0pXG4gICAgdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmN1cnJlbnRTZWxlY3Rpb24ubmV4dCh7IHR5cGU6IHRoaXMuZGF0YS5jYXRlZ29yeSwgZGF0YTogZGF0YS5jaGlsZHJlbiwgY2FyZFJlZiB9KVxuICB9XG5cbiAgaGFuZGxlUHJvZHVjdENsaWNrKHRlcm06IGFueSwgZXZlbnQ6IGFueSl7XG4gICAgdGhpcy5zZWxlY3RlZENhcmQuZW1pdCh7dGVybTp0ZXJtLCBjaGVja2VkOmV2ZW50LmNoZWNrZWR9KVxuICB9XG5cbiAgdXBkYXRlQXBwcm92YWxTdGF0dXMoKXtcbiAgICAgY29uc3QgaWQgPSB0aGlzLl9kYXRhLmNoaWxkcmVuLmlkZW50aWZpZXI7XG4gICAgdGhpcy5hcHByb3ZhbFNlcnZpY2UuZ2V0VXBkYXRlTGlzdCgpLnN1YnNjcmliZSgobGlzdDphbnkpID0+IHtcbiAgICAgIHRoaXMuYXBwcm92YWxMaXN0ID0gbGlzdC5tYXAoKGl0ZW06IGFueSkgPT4gaXRlbS5pZGVudGlmaWVyKTtcbiAgICAgIGlmKHRoaXMuYXBwcm92YWxMaXN0KXtcbiAgICAgICAgICAgaWYodGhpcy5hcHByb3ZhbExpc3QuaW5jbHVkZXMoaWQpKXtcbiAgICAgICAgICAgICAgdGhpcy5fZGF0YS5jaGlsZHJlbi5oaWdobGlnaHQgPSB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICB9ICAgICBcbiAgICB9KVxuICB9XG5cbiAgZ2V0Q29sb3IoaW5kZXhDbGFzczpudW1iZXIsIGNhcmRSZWY6IGFueSxwcm9wZXJ0eTogc3RyaW5nLCBkYXRhOmFueSkge1xuICAgIGxldCBjb25maWcgPSB0aGlzLmZyYW1ld29ya1NlcnZpY2UuZ2V0Q29uZmlnKGRhdGEuY2F0ZWdvcnkpO1xuICAgIGlmKGNhcmRSZWYuY2xhc3NMaXN0LmNvbnRhaW5zKCdzZWxlY3RlZCcpICYmIHByb3BlcnR5ID09PSAnYmdDb2xvcicpe1xuICAgICAgIHJldHVybiBjb25maWcuY29sb3I7XG4gICAgfVxuICAgIGlmKHByb3BlcnR5ID09PSAnYm9yZGVyJyl7XG4gICAgICBsZXQgYm9yZGVyQ29sb3I7XG4gICAgICBpZihjYXJkUmVmLmNsYXNzTGlzdC5jb250YWlucygoaW5kZXhDbGFzcykudG9TdHJpbmcoKSkpe1xuICAgICAgICBib3JkZXJDb2xvciA9IFwiOHB4IHNvbGlkXCIgKyBjb25maWcuY29sb3I7XG4gICAgICB9XG4gICAgICByZXR1cm4gYm9yZGVyQ29sb3I7XG4gICAgfVxuICB9XG5cblxuICB2aWV3KGRhdGE6IGFueSwgY2hpbGRyZW5EYXRhOiBhbnksIGluZGV4OiBhbnkpe1xuICAgIGxldCBkaWFsb2c6IGFueVxuICAgIGNvbnN0IHNlbGVjdGVkVGVybXMgPSB0aGlzLmZyYW1ld29ya1NlcnZpY2UuZ2V0UHJldmlvdXNTZWxlY3RlZFRlcm1zKGRhdGEuY29sdW1uSW5mby5jb2RlKVxuICAgIGNvbnN0IG5leENvbEluZm8gPSB0aGlzLmdldE5leHRDYXQoZGF0YSlcbiAgICBjb25zdCBuZXh0Q2F0ID0gbmV4Q29sSW5mbyB8fCBkYXRhLmNvbHVtbkluZm9cbiAgICBpZihuZXh0Q2F0ICYmIHRoaXMuZW52aXJvbm1lbnQgJiYgdGhpcy5lbnZpcm9ubWVudC5mcmFtZXdvcmtUeXBlID09PSAnTURPX0RFU0lHTkFUSU9OJykge1xuICAgICAgY29uc3QgbmV4dE5leHRDYXQgPSB0aGlzLmZyYW1ld29ya1NlcnZpY2UuZ2V0TmV4dENhdGVnb3J5KG5leHRDYXQuY29kZSlcbiAgICAgIGNvbnN0IHNlbGVjdGVkVGVybXMgPSB0aGlzLmZyYW1ld29ya1NlcnZpY2UuZ2V0UHJldmlvdXNTZWxlY3RlZFRlcm1zKG5leHRDYXQuY29kZSlcbiAgICAgIGNvbnN0IGNvbEluZm8gPSBBcnJheS5mcm9tKHRoaXMuZnJhbWV3b3JrU2VydmljZS5saXN0LnZhbHVlcygpKS5maWx0ZXIobCA9PiBsLmNvZGUgPT09IG5leHRDYXQuY29kZSApXG4gICAgICBsZXQgbmV4dENvbEluZm8gOiBhbnkgPSBbXVxuICAgICAgaWYobmV4dE5leHRDYXQgJiYgbmV4dE5leHRDYXQuY29kZSkge1xuICAgICAgICBuZXh0Q29sSW5mbyA9IEFycmF5LmZyb20odGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmxpc3QudmFsdWVzKCkpLmZpbHRlcihsID0+IGwuY29kZSA9PT0gbmV4dE5leHRDYXQuY29kZSApXG4gICAgICB9XG4gICAgICAgIGRpYWxvZyA9IHRoaXMuZGlhbG9nLm9wZW4oQ3JlYXRlVGVybUZyb21GcmFtZXdvcmtDb21wb25lbnQsIHtcbiAgICAgICAgICBkYXRhOiB7IFxuICAgICAgICAgICAgbW9kZTonbXVsdGktY3JlYXRlJyxcbiAgICAgICAgICAgIG9wZW5Nb2RlOiAndmlldycsXG4gICAgICAgICAgICBjYXJkQ29sSW5mbzogdGhpcy5kYXRhLmNvbHVtbkluZm8sXG4gICAgICAgICAgICBjb2x1bW5JbmZvOiBjb2xJbmZvICYmIGNvbEluZm8ubGVuZ3RoID8gY29sSW5mb1swXSA6IFtdLFxuICAgICAgICAgICAgbmV4dENvbEluZm86IG5leHRDb2xJbmZvICYmIG5leHRDb2xJbmZvLmxlbmd0aCA/IG5leHRDb2xJbmZvWzBdIDogW10sXG4gICAgICAgICAgICBmcmFtZXdvcmtJZDogdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldEZyYW1ld29ya0lkKCksXG4gICAgICAgICAgICBzZWxlY3RlZHBhcmVudHM6IHRoaXMuaGVpZ2h0TGlnaHRlZCxcbiAgICAgICAgICAgIGNvbEluZGV4OiBuZXh0Q2F0LmluZGV4LFxuICAgICAgICAgICAgY2hpbGRyZW5EYXRhOiBkYXRhLmNoaWxkcmVuLFxuICAgICAgICAgICAgc2VsZWN0ZWRQYXJlbnRUZXJtczogc2VsZWN0ZWRUZXJtc1xuICAgICAgICAgIH0sXG4gICAgICAgICAgd2lkdGg6ICc4MDBweCcsXG4gICAgICAgICAgcGFuZWxDbGFzczogJ2N1c3RvbS1kaWFsb2ctY29udGFpbmVyJ1xuICAgICAgICB9KVxuICAgICAgXG4gICAgIFxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGRpYWxvZyA9IHRoaXMuZGlhbG9nLm9wZW4oQ3JlYXRlVGVybUNvbXBvbmVudCwge1xuICAgICAgICBkYXRhOiB7IFxuICAgICAgICAgIG1vZGU6J3ZpZXcnLFxuICAgICAgICAgIGNvbHVtbkluZm86IHRoaXMuZGF0YS5jb2x1bW5JbmZvLFxuICAgICAgICAgIGZyYW1ld29ya0lkOiB0aGlzLmZyYW1ld29ya1NlcnZpY2UuZ2V0RnJhbWV3b3JrSWQoKSxcbiAgICAgICAgICBzZWxlY3RlZHBhcmVudHM6IHRoaXMuaGVpZ2h0TGlnaHRlZCxcbiAgICAgICAgICBjb2xJbmRleDogaW5kZXgsXG4gICAgICAgICAgY2hpbGRyZW5EYXRhOiBjaGlsZHJlbkRhdGEsXG4gICAgICAgICAgc2VsZWN0ZWRQYXJlbnRUZXJtczogc2VsZWN0ZWRUZXJtc1xuICAgICAgICB9LFxuICAgICAgICB3aWR0aDogJzgwMHB4JyxcbiAgICAgICAgcGFuZWxDbGFzczogJ2N1c3RvbS1kaWFsb2ctY29udGFpbmVyJ1xuICAgICAgfSlcbiAgICB9XG4gICAgZGlhbG9nLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgaWYoIXJlcykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBpZiAocmVzICYmIHJlcy5jcmVhdGVkKSB7XG4gICAgICAvLyAgIHRoaXMuc2hvd1B1Ymxpc2ggPSB0cnVlXG4gICAgICAvLyB9XG4gICAgICAvLyB0aGlzLmxvYWRlZFtyZXMudGVybS5jYXRlZ29yeV0gPSBmYWxzZVxuICAgICAgLy8gLy8gd2FpdFxuICAgICAgLy8gY29uc3QgcGFyZW50Q29sdW1uID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldFByZXZpb3VzQ2F0ZWdvcnkocmVzLnRlcm0uY2F0ZWdvcnkpXG4gICAgICAvLyByZXMucGFyZW50ID0gbnVsbFxuICAgICAgLy8gaWYgKHBhcmVudENvbHVtbikge1xuICAgICAgLy8gICByZXMucGFyZW50ID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLnNlbGVjdGlvbkxpc3QuZ2V0KHBhcmVudENvbHVtbi5jb2RlKVxuICAgICAgLy8gICByZXMucGFyZW50LmNoaWxkcmVuPyByZXMucGFyZW50LmNoaWxkcmVuLnB1c2gocmVzLnRlcm0pIDpyZXMucGFyZW50WydjaGlsZHJlbiddID0gW3Jlcy50ZXJtXVxuICAgICAgLy8gfVxuICAgICAgLy8gdGhpcy51cGRhdGVGaW5hbExpc3QoeyBzZWxlY3RlZFRlcm06IHJlcy50ZXJtLCBpc1NlbGVjdGVkOiBmYWxzZSwgcGFyZW50RGF0YTogcmVzLnBhcmVudCwgY29sSW5kZXg6Y29sSW5kZXggfSlcbiAgICB9KVxuICB9XG4gIGVkaXQoZGF0YTogYW55LCBjaGlsZHJlbkRhdGE6IGFueSwgaW5kZXg6IGFueSwgY2FyZFJlZjogYW55KXtcbiAgICBsZXQgZGlhbG9nOiBhbnlcbiAgICBjb25zdCBzZWxlY3RlZFRlcm1zID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldFByZXZpb3VzU2VsZWN0ZWRUZXJtcyhkYXRhLmNvbHVtbkluZm8uY29kZSlcbiAgICBjb25zdCBuZXhDb2xJbmZvID0gdGhpcy5nZXROZXh0Q2F0KGRhdGEpXG4gICAgY29uc3QgbmV4dENhdCA9IG5leENvbEluZm8gfHwgZGF0YS5jb2x1bW5JbmZvXG4gICBcbiAgICBpZihuZXh0Q2F0ICYmIHRoaXMuZW52aXJvbm1lbnQgJiYgdGhpcy5lbnZpcm9ubWVudC5mcmFtZXdvcmtUeXBlID09PSAnTURPX0RFU0lHTkFUSU9OJykge1xuICAgICAgLy8gY29uc3QgbmV4dE5leHRDYXQgPSB0aGlzLmZyYW1ld29ya1NlcnZpY2UuZ2V0TmV4dENhdGVnb3J5KG5leHRDYXQuY29kZSlcbiAgICAgIC8vIGNvbnN0IHNlbGVjdGVkVGVybXMgPSB0aGlzLmZyYW1ld29ya1NlcnZpY2UuZ2V0UHJldmlvdXNTZWxlY3RlZFRlcm1zKG5leHRDYXQuY29kZSlcbiAgICAgIC8vIGNvbnN0IGNvbEluZm8gPSBBcnJheS5mcm9tKHRoaXMuZnJhbWV3b3JrU2VydmljZS5saXN0LnZhbHVlcygpKS5maWx0ZXIobCA9PiBsLmNvZGUgPT09IG5leHRDYXQuY29kZSApXG4gICAgICAvLyBsZXQgbmV4dENvbEluZm8gPSBbXVxuICAgICAgLy8gaWYobmV4dE5leHRDYXQgJiYgbmV4dE5leHRDYXQuY29kZSkge1xuICAgICAgLy8gICBuZXh0Q29sSW5mbyA9IEFycmF5LmZyb20odGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmxpc3QudmFsdWVzKCkpLmZpbHRlcihsID0+IGwuY29kZSA9PT0gbmV4dE5leHRDYXQuY29kZSApXG4gICAgICAvLyB9XG4gICAgICAvLyAgIGRpYWxvZyA9IHRoaXMuZGlhbG9nLm9wZW4oQ3JlYXRlVGVybUZyb21GcmFtZXdvcmtDb21wb25lbnQsIHtcbiAgICAgIC8vICAgICBkYXRhOiB7IFxuICAgICAgLy8gICAgICAgbW9kZTonbXVsdGktY3JlYXRlJyxcbiAgICAgIC8vICAgICAgIG9wZW5Nb2RlOiAnZWRpdCcsXG4gICAgICAvLyAgICAgICBjYXJkQ29sSW5mbzogdGhpcy5kYXRhLmNvbHVtbkluZm8sXG4gICAgICAvLyAgICAgICBjb2x1bW5JbmZvOiBjb2xJbmZvICYmIGNvbEluZm8ubGVuZ3RoID8gY29sSW5mb1swXSA6IFtdLFxuICAgICAgLy8gICAgICAgbmV4dENvbEluZm86IG5leHRDb2xJbmZvICYmIG5leHRDb2xJbmZvLmxlbmd0aCA/IG5leHRDb2xJbmZvWzBdIDogW10sXG4gICAgICAvLyAgICAgICBmcmFtZXdvcmtJZDogdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldEZyYW1ld29ya0lkKCksXG4gICAgICAvLyAgICAgICBzZWxlY3RlZHBhcmVudHM6IHRoaXMuaGVpZ2h0TGlnaHRlZCxcbiAgICAgIC8vICAgICAgIGNvbEluZGV4OiBuZXh0Q2F0LmluZGV4LFxuICAgICAgLy8gICAgICAgY2hpbGRyZW5EYXRhOiBkYXRhLmNoaWxkcmVuLFxuICAgICAgLy8gICAgICAgc2VsZWN0ZWRQYXJlbnRUZXJtczogc2VsZWN0ZWRUZXJtc1xuICAgICAgLy8gICAgIH0sXG4gICAgICAvLyAgICAgd2lkdGg6ICc4MDBweCcsXG4gICAgICAvLyAgICAgcGFuZWxDbGFzczogJ2N1c3RvbS1kaWFsb2ctY29udGFpbmVyJ1xuICAgICAgLy8gICB9KVxuICAgICAgXG4gICAgICB0aGlzLmNyZWF0ZShkYXRhLCAnZWRpdCcpXG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgZGlhbG9nID0gdGhpcy5kaWFsb2cub3BlbihDcmVhdGVUZXJtQ29tcG9uZW50LCB7XG4gICAgICAgIGRhdGE6IHsgXG4gICAgICAgICAgbW9kZTonZWRpdCcsXG4gICAgICAgICAgY29sdW1uSW5mbzogZGF0YS5jb2x1bW5JbmZvLFxuICAgICAgICAgIGZyYW1ld29ya0lkOiB0aGlzLmZyYW1ld29ya1NlcnZpY2UuZ2V0RnJhbWV3b3JrSWQoKSxcbiAgICAgICAgICBzZWxlY3RlZHBhcmVudHM6IHRoaXMuaGVpZ2h0TGlnaHRlZCxcbiAgICAgICAgICBjb2xJbmRleDogaW5kZXgsXG4gICAgICAgICAgY2hpbGRyZW5EYXRhOiBjaGlsZHJlbkRhdGEsXG4gICAgICAgICAgc2VsZWN0ZWRQYXJlbnRUZXJtczogc2VsZWN0ZWRUZXJtcyxcbiAgICAgICAgICBjYXJkUmVmOiBjYXJkUmVmXG4gICAgICAgIH0sXG4gICAgICAgIHdpZHRoOiAnODAwcHgnLFxuICAgICAgICBwYW5lbENsYXNzOiAnY3VzdG9tLWRpYWxvZy1jb250YWluZXInXG4gICAgICB9KVxuICAgIH1cbiAgICBkaWFsb2cuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XG4gICAgICBpZighcmVzKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIGNvbnN0IHJlc3BvbnNlRGF0YSA9IHtcbiAgICAgIC8vICAgcmVzLFxuICAgICAgLy8gICBpbmRleDogaW5kZXguaW5kZXgsXG4gICAgICAvLyAgIGRhdGEsXG4gICAgICAvLyAgIHR5cGU6ICd1cGRhdGUnLFxuICAgICAgLy8gICBjYXJkUmVmOiBjYXJkUmVmXG4gICAgICAvLyB9XG4gICAgICAvLyB0aGlzLmZyYW1ld29ya1NlcnZpY2UudXBkYXRlQWZ0ZXJBZGRPckVkaXRTdWJqZWN0KHJlc3BvbnNlRGF0YSlcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ3Jlc2l6ZScpKVxuICAgICAgfSwgMTAwKVxuICAgIH0pXG4gIH1cbiAgY3JlYXRlKGRhdGE6IGFueSwgbW9kZT86c3RyaW5nKXtcbiAgICBjb25zdCBuZXhDb2xJbmZvID0gdGhpcy5nZXROZXh0Q2F0KGRhdGEpXG4gICAgY29uc3QgbmV4dENhdCA9IG5leENvbEluZm8gfHwgZGF0YS5jb2x1bW5JbmZvXG4gICAgY29uc3QgbmV4dE5leHRDYXQgPSB0aGlzLmZyYW1ld29ya1NlcnZpY2UuZ2V0TmV4dENhdGVnb3J5KG5leHRDYXQuY29kZSlcbiAgICBpZihuZXh0Q2F0KSB7XG4gICAgICBjb25zdCBzZWxlY3RlZFRlcm1zID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldFByZXZpb3VzU2VsZWN0ZWRUZXJtcyhuZXh0Q2F0LmNvZGUpXG4gICAgICBjb25zdCBjb2xJbmZvID0gQXJyYXkuZnJvbSh0aGlzLmZyYW1ld29ya1NlcnZpY2UubGlzdC52YWx1ZXMoKSkuZmlsdGVyKGwgPT4gbC5jb2RlID09PSBuZXh0Q2F0LmNvZGUgKVxuICAgICAgbGV0IG5leHRDb2xJbmZvOiBhbnkgPSBbXVxuICAgICAgaWYobmV4dE5leHRDYXQgJiYgbmV4dE5leHRDYXQuY29kZSkge1xuICAgICAgICBuZXh0Q29sSW5mbyA9IEFycmF5LmZyb20odGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmxpc3QudmFsdWVzKCkpLmZpbHRlcihsID0+IGwuY29kZSA9PT0gbmV4dE5leHRDYXQuY29kZSApXG4gICAgICB9XG4gICAgICBsZXQgZGlhbG9nOiBhbnlcbiAgICAgIGlmKHRoaXMuZW52aXJvbm1lbnQgJiYgdGhpcy5lbnZpcm9ubWVudC5mcmFtZXdvcmtUeXBlID09PSAnTURPX0RFU0lHTkFUSU9OJyl7XG4gICAgICAgIGRpYWxvZyA9IHRoaXMuZGlhbG9nLm9wZW4oQ3JlYXRlVGVybUZyb21GcmFtZXdvcmtDb21wb25lbnQsIHtcbiAgICAgICAgICBkYXRhOiB7IFxuICAgICAgICAgICAgbW9kZTonbXVsdGktY3JlYXRlJyxcbiAgICAgICAgICAgIG9wZW5Nb2RlOiBtb2RlIHx8ICdhZGQnLFxuICAgICAgICAgICAgY2FyZENvbEluZm86IHRoaXMuZGF0YS5jb2x1bW5JbmZvLFxuICAgICAgICAgICAgY29sdW1uSW5mbzogY29sSW5mbyAmJiBjb2xJbmZvLmxlbmd0aCA/IGNvbEluZm9bMF0gOiBbXSxcbiAgICAgICAgICAgIG5leHRDb2xJbmZvOiBuZXh0Q29sSW5mbyAmJiBuZXh0Q29sSW5mby5sZW5ndGggPyBuZXh0Q29sSW5mb1swXSA6IFtdLFxuICAgICAgICAgICAgZnJhbWV3b3JrSWQ6IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXRGcmFtZXdvcmtJZCgpLFxuICAgICAgICAgICAgc2VsZWN0ZWRwYXJlbnRzOiB0aGlzLmhlaWdodExpZ2h0ZWQsXG4gICAgICAgICAgICBjb2xJbmRleDogbmV4dENhdC5pbmRleCxcbiAgICAgICAgICAgIGNoaWxkcmVuRGF0YTogZGF0YS5jaGlsZHJlbixcbiAgICAgICAgICAgIHNlbGVjdGVkUGFyZW50VGVybXM6IHNlbGVjdGVkVGVybXNcbiAgICAgICAgICB9LFxuICAgICAgICAgIHdpZHRoOiAnODAwcHgnLFxuICAgICAgICAgIHBhbmVsQ2xhc3M6ICdjdXN0b20tZGlhbG9nLWNvbnRhaW5lcidcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRpYWxvZyA9IHRoaXMuZGlhbG9nLm9wZW4oQ3JlYXRlVGVybUNvbXBvbmVudCwge1xuICAgICAgICAgIGRhdGE6IHsgXG4gICAgICAgICAgICBtb2RlOidtdWx0aS1jcmVhdGUnLFxuICAgICAgICAgICAgY29sdW1uSW5mbzogY29sSW5mbyAmJiBjb2xJbmZvLmxlbmd0aCA/IGNvbEluZm9bMF0gOiBbXSxcbiAgICAgICAgICAgIGZyYW1ld29ya0lkOiB0aGlzLmZyYW1ld29ya1NlcnZpY2UuZ2V0RnJhbWV3b3JrSWQoKSxcbiAgICAgICAgICAgIHNlbGVjdGVkcGFyZW50czogdGhpcy5oZWlnaHRMaWdodGVkLFxuICAgICAgICAgICAgY29sSW5kZXg6IG5leHRDYXQuaW5kZXgsXG4gICAgICAgICAgICBjaGlsZHJlbkRhdGE6IGRhdGEuY2hpbGRyZW4sXG4gICAgICAgICAgICBzZWxlY3RlZFBhcmVudFRlcm1zOiBzZWxlY3RlZFRlcm1zXG4gICAgICAgICAgfSxcbiAgICAgICAgICB3aWR0aDogJzgwMHB4JyxcbiAgICAgICAgICBwYW5lbENsYXNzOiAnY3VzdG9tLWRpYWxvZy1jb250YWluZXInXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBkaWFsb2cuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XG4gICAgICAgIGlmKCFyZXMpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9IHtcbiAgICAgICAgICByZXMsXG4gICAgICAgICAgaW5kZXg6IG5leHRDYXQuaW5kZXgsXG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgICB0eXBlOiAnbXVsdGktY3JlYXRlJ1xuICAgICAgICB9XG4gICAgICAgIGlmKCEocmVzICYmIHJlcy5zdG9wVXBkYXRlKSl7XG4gICAgICAgICAgdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLnVwZGF0ZUFmdGVyQWRkT3JFZGl0U3ViamVjdChyZXNwb25zZURhdGEpXG4gICAgICAgIH1cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdyZXNpemUnKSlcbiAgICAgICAgfSwgMTAwKVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBnZXROZXh0Q2F0TmFtZShkYXRhOiBhbnkpIHtcbiAgICBpZihkYXRhICYmIGRhdGEuY29sdW1uSW5mbyAmJiBkYXRhLmNvbHVtbkluZm8uY29kZSl7XG4gICAgICBjb25zdCBuZXh0Q2F0ID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldE5leHRDYXRlZ29yeShkYXRhLmNvbHVtbkluZm8uY29kZSlcbiAgICAgIGlmKG5leHRDYXQgJiYgbmV4dENhdC5jb2RlKXtcbiAgICAgICAgXG4gICAgICAgIHJldHVybiBuZXh0Q2F0LmNvZGVcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGdldE5leHRDYXQoZGF0YTogYW55KSB7XG4gICAgaWYoZGF0YSAmJiBkYXRhLmNvbHVtbkluZm8gJiYgZGF0YS5jb2x1bW5JbmZvLmNvZGUpe1xuICAgICAgY29uc3QgbmV4dENhdCA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXROZXh0Q2F0ZWdvcnkoZGF0YS5jb2x1bW5JbmZvLmNvZGUpXG4gICAgICByZXR1cm4gbmV4dENhdFxuICAgIH1cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYodGhpcy5zdWJzY3JpcHRpb24pe1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKVxuICAgIH1cbiAgfVxuICBkZWxldGUoZGF0YTogYW55KSB7XG4gICAgY29uc3QgZGlhbG9nRGF0YSA9IHtcbiAgICAgIGRpYWxvZ1R5cGU6ICd3YXJuaW5nJyxcbiAgICAgIGRpYWxvZ0FjdGlvbjogJ3JldGlyZScsXG4gICAgICBkZXNjcmlwdGlvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGhlYWRlcjogYENvbXBldGVuY3kgJHtkYXRhLmNhdGVnb3J5ID09PVwic3VidGhlbWVcIj8gJ3N1Yi10aGVtZSc6ICd0aGVtZSd9IHdpbGwgYmUgZGVsZXRlZGAsXG4gICAgICAgICAgaGVhZGVyQ2xhc3M6ICdmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LWJsdWUgdGV4dEJvbGQnLFxuICAgICAgICAgIG1lc3NhZ2VzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG1zZ0NsYXNzOiAnbWItMiBtdC0yJyxcbiAgICAgICAgICAgICAgbXNnOiBgRG8geW91IHdhbnQgdG8gcHJvY2VlZD9gLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGZvb3RlckNsYXNzOiAnaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyJyxcbiAgICAgIGJ1dHRvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGJ0blRleHQ6ICdObycsXG4gICAgICAgICAgYnRuQ2xhc3M6ICdidG4tb3V0bGluZScsXG4gICAgICAgICAgcmVzcG9uc2U6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYnRuVGV4dDogJ1llcycsXG4gICAgICAgICAgYnRuQ2xhc3M6ICdidG4tZnVsbC1zdWNjZXNzJyxcbiAgICAgICAgICByZXNwb25zZTogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBjYXJkSW5mbzogZGF0YVxuICAgIH1cbiAgICBsZXQgZGlhbG9nID0gdGhpcy5kaWFsb2cub3BlbihDb25mb3JhbXRpb25Qb3B1cENvbXBvbmVudCwge1xuICAgICAgICAgIGRhdGE6IGRpYWxvZ0RhdGEsXG4gICAgICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgICAgICAgICB3aWR0aDogJzUwMHB4JyxcbiAgICAgICAgICBtYXhXaWR0aDogJzgwdncnLFxuICAgICAgICAgIG1heEhlaWdodDogJzkwdmgnLFxuICAgICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgICBkaWFsb2cuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoX3JlcyA9PiB7XG4gICAgICAgICBcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdyZXNpemUnKSlcbiAgICAgICAgfSwgMTAwKVxuICAgICAgICB9KVxuICAgICAgXG4gICAgXG4gICAgfVxuXG4gICAgcmVtb3ZlQ29ubmVjdGlvbihpdGVtOmFueSkge1xuICAgICAgdGhpcy5jYXJkQWN0aW9uLmVtaXQoeyBhY3Rpb246ICdyZW1vdmUtdGVybScsIGRhdGE6IGl0ZW0gfSk7XG4gICAgfVxuICBcbn1cbiIsIjxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cIiggKGRhdGEgJiYgZGF0YT8uY2FyZFN1YlR5cGUpIHx8ICdjYXJkTWluaW1hbCcpXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3N0YW5kYXJkJ1wiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNhcmRTdGFuZGFyZFwiPjwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidzcGFjZS1zYXZpbmcnXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwiY2FyZFNwYWNlU2F2aW5nXCI+PC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0IFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNhcmRNaW5pbWFsXCI+PC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlICNjYXJkTWluaW1hbD5cbiAgICA8ZGl2ICNjYXJkUmVmIGNsYXNzPVwidGVybS1jYXJkIGNsaWNrYWJsZSB7e2RhdGEuaW5kZXh9fVwiIChjbGljayk9XCJjYXJkQ2xpY2tlZChkYXRhLCBjYXJkUmVmKVwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIltkYXRhLmNoaWxkcmVuLnNlbGVjdGVkPydzZWxlY3RlZCc6JycsIGRhdGEuY2hpbGRyZW4uYXBwcm92YWxTdGF0dXMgPT09ICdEcmFmdCc/ICdpbkRyYWZ0JzonJyxcbiAgICBkYXRhLmNoaWxkcmVuLmFzc29jaWF0aW9uUHJvcGVydGllcz8uYXBwcm92YWxTdGF0dXMgPT09ICdEcmFmdCcgJiYgaXNBcHByb3ZhbFJlcXVpcmVkICYmICFhcHByb3ZhbExpc3QubGVuZ3RoIHx8IGRhdGEuY2hpbGRyZW4uaGlnaGxpZ2h0ICYmIGlzQXBwcm92YWxSZXF1aXJlZCA/ICdpbkFzc29jaWF0aW9uRHJhZnQnOicnXVwiXG4gICAgICAgIGlkPVwie3tkYXRhLmNoaWxkcmVuLm5hbWV9fVwiXG4gICAgICAgIFtuZ1N0eWxlXT1cInsnYmFja2dyb3VuZC1jb2xvcic6Z2V0Q29sb3IoZGF0YS5pbmRleCxjYXJkUmVmLCdiZ0NvbG9yJyxkYXRhKX1cIj5cbiAgICAgICAgPCEtLSAoY2xpY2spPVwiZGF0YS5zZWxlY3RlZD0hZGF0YS5zZWxlY3RlZFwiIC0tPiAgIFxuICAgICAgICA8ZGl2IGNsYXNzPVwidGVybS1jYXJkLXBhcmVudFwiPlxuICAgICAgICAgICAgPCEtLSA8QmVsb3cgZWxlbWVudCBpcyB0byBzaG93IGlkIG9uIHRvcCBsZWZ0IG9mIHRoZSBjYXJkPiAtLT5cbiAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImlkXCIgW2hpZGRlbl09XCJ0cnVlXCI+e3tkYXRhLmNoaWxkcmVuLmNvZGV9fTwvZGl2PiAtLT5cbiAgICAgICAgICAgICBcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXJtLWNhcmQtY29udGVudFwiPlxuICAgICAgICAgICAgICAgIDwhLS0gPG5nLWNvbnRhaW5lciAgKm5nSWY9XCJkYXRhPy5jaGlsZHJlbj8ucmVmSWRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJpYmJvblwiPnt7ZGF0YT8uY2hpbGRyZW4/LnJlZklkfX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj4gLS0+XG5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0YT8uY2hpbGRyZW4/LmFkZGl0aW9uYWxQcm9wZXJ0aWVzPy5jb21wZXRlbmN5QXJlYT8ubmFtZVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICBjbGFzcz1cIm1iLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29tcC1hcmVhIHt7ZGF0YT8uY2hpbGRyZW4/LmFkZGl0aW9uYWxQcm9wZXJ0aWVzPy5jb21wZXRlbmN5QXJlYT8ubmFtZT8udG9Mb3dlckNhc2UoKX19XCI+e3tkYXRhPy5jaGlsZHJlbj8uYWRkaXRpb25hbFByb3BlcnRpZXM/LmNvbXBldGVuY3lBcmVhPy5uYW1lfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdGl0bGVcIj57e2RhdGEuY2hpbGRyZW4ubmFtZX19XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkYXRhPy5jaGlsZHJlbj8ucmVmSWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWZJZENhcmQgbXQtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7ZGF0YT8uY2hpbGRyZW4/LnJlZklkfX0gPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPiBcbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8IS0tIDxuZy1jb250YWluZXIgKm5nSWY9XCJkYXRhPy5jaGlsZHJlbj8ucmVmSWRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlZklkQ2FyZCBweC00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57e2RhdGE/LmNoaWxkcmVuPy5yZWZJZH19IDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+IC0tPlxuICAgICAgICAgICAgICAgIDwhLS0gPHNwYW4+Kyt7e2RhdGEuY2hpbGRyZW4uc2VsZWN0ZWR9fSsrKzwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3Bhbj49PXt7ZGF0YS5jaGlsZHJlbi5zdGF0dXN9fT09PC9zcGFuPiAgLS0+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtZGVzY3JpcHRpb24gZmxleCBmbGV4LW1pZGRsZSBnYXAtMVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gc3ZnSWNvbj1cImZyYWNcIj48L21hdC1pY29uPiBcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3soZGF0YS5jaGlsZHJlbi5jaGlsZHJlbikgPyBkYXRhLmNoaWxkcmVuLmNoaWxkcmVuPy5sZW5ndGggOiAwfX0gQ2hpbGQgT3JnPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gPHA+e3tkYXRhLmNoaWxkcmVuLmFwcHJvdmFsU3RhdHVzfX0sIHt7ZGF0YS5jaGlsZHJlbi5hc3NvY2lhdGlvblByb3BlcnRpZXM/LmFwcHJvdmFsU3RhdHVzfX08L3A+IC0tPlxuICAgICAgICA8IS0tICpuZ0lmPVwiIWRhdGEuaXNWaWV3T25seSAmJiBkYXRhLmNoaWxkcmVuLmFwcHJvdmFsU3RhdHVzID09PSAnRHJhZnQnICYmIGlzQXBwcm92YWxSZXF1aXJlZFwiIC0tPlxuXG4gICAgICAgIDwhLS0gKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcIiAtLT5cbiAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkYXRhPy5jb2x1bW5JbmZvPy5jb25maWc/LmVuYWJsZVRocmVlRG90XCIgPlxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uIGkxOG4tYXJpYS1sYWJlbCBhcmlhLWxhYmVsPVwiYWN0aW9uIGl0ZW1zXCJcbiAgICAgICAgICAgIFttYXRNZW51VHJpZ2dlckZvcl09XCJvcmdNZW51XCIgW21hdE1lbnVUcmlnZ2VyRGF0YV09XCJ7J2RhdGEnOmRhdGEsICdjYXJkUmVmJzogY2FyZFJlZn1cIiBjbGFzcz1cImFjdGlvbi1idG5cIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbj5tb3JlX3ZlcnQ8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwidGVybS1jYXJkLWNoZWNrYm94XCI+XG4gICAgICAgICAgICA8bWF0LWNoZWNrYm94IGNvbG9yPVwicHJpbWFyeVwiICpuZ0lmPVwiZGF0YS5jaGlsZHJlbi5hcHByb3ZhbFN0YXR1cyA9PT0gJ0RyYWZ0JyAmJiBpc0FwcHJvdmFsUmVxdWlyZWQgJiYgIWFwcHJvdmFsTGlzdC5sZW5ndGggfHwgXG4gICAgICAgICAgICBkYXRhLmNoaWxkcmVuLmFzc29jaWF0aW9uUHJvcGVydGllcz8uYXBwcm92YWxTdGF0dXMgPT09ICdEcmFmdCcgJiYgaXNBcHByb3ZhbFJlcXVpcmVkICYmICFhcHByb3ZhbExpc3QubGVuZ3RoIHx8XG4gICAgICAgICAgICBkYXRhLmNoaWxkcmVuLmhpZ2hsaWdodCAmJiBpc0FwcHJvdmFsUmVxdWlyZWRcIiBbY2hlY2tlZF09XCJkYXRhLmNoaWxkcmVuLmhpZ2hsaWdodFwiIGNsYXNzPVwidGVybVNlbGVjdGlvblwiXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJoYW5kbGVQcm9kdWN0Q2xpY2soZGF0YS5jaGlsZHJlbiwgJGV2ZW50KVwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj48L21hdC1jaGVja2JveD5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBjb2xvcj1cInByaW1hcnlcIiBjbGFzcz1cImFwcHJvdmUtZmxhZ1wiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJkYXRhLmNoaWxkcmVuLmhpZ2hsaWdodCAmJiBpc0FwcHJvdmFsUmVxdWlyZWRcIj57e2FwcF9zdHJpbmdzLmZsYWd9fTwvbWF0LWljb24+XG4gICAgICAgIDwvZGl2PiAtLT5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjY2FyZFN0YW5kYXJkPlxuICAgIDxkaXY+XG4gICAgICAgIHt7ZGF0YS5jaGlsZHJlbi5uYW1lfX0gXG4gICAgPC9kaXY+XG4gICAgPGRpdj5cbiAgICAgICAge3tkYXRhLmNoaWxkcmVuLmRlc2NyaXB0aW9ufX0gc1xuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNjYXJkU3BhY2VTYXZpbmc+XG4gICAgPGRpdj5cbiAgICAgICAge3tkYXRhLmNoaWxkcmVuLm5hbWV9fVxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG1hdC1tZW51ICNjYXJkTWVudT1cIm1hdE1lbnVcIiBjbGFzcz1cIm1lbnUtc2VjXCI+XG4gICAgPG5nLXRlbXBsYXRlIG1hdE1lbnVDb250ZW50IGxldC1yb3dEYXRhPVwiZGF0YVwiIGxldC1jYXJkUmVmPVwiY2FyZFJlZlwiPlxuICAgICAgICA8IS0tIDxkaXYgPiAtLT5cbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImRhdGEuY29sdW1uSW5mby5jb25maWcuZW5hYmxlVmlld1wiICAoY2xpY2spPVwidmlldyhkYXRhLCBkYXRhLmNoaWxkcmVuLCBkYXRhLmluZGV4KVwiIG1hdC1tZW51LWl0ZW0gbmFtZT1cImNoYW5uZWwtYW5hbHl0aWNzLWJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cIndzLW1hdC1wcmltYXJ5LXRleHRcIiBpMThuLWFyaWEtbGFiZWwgYXJpYS1sYWJlbD1cIkFuYWx5dGljc1wiPlxuICAgICAgICAgICAgPG1hdC1pY29uPnZpc2liaWxpdHk8L21hdC1pY29uPiA8c3Bhbj5WaWV3PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImRhdGEuY29sdW1uSW5mby5jb25maWcuZW5hYmFsZUVkaXRcIiAoY2xpY2spPVwiZWRpdChkYXRhLCAgZGF0YS5jaGlsZHJlbixkYXRhLmluZGV4LCBjYXJkUmVmKVwiXG4gICAgICAgICAgICBtYXQtbWVudS1pdGVtIG5hbWU9XCJjaGFubmVsLWFuYWx5dGljcy1idXR0b25cIiBjbGFzcz1cIndzLW1hdC1wcmltYXJ5LXRleHRcIiBpMThuLWFyaWEtbGFiZWxcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJBbmFseXRpY3NcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbj5lZGl0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDxzcGFuPkVkaXQ8L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwiZGF0YS5jb2x1bW5JbmZvLmNvbmZpZy5lbmFibGVBZGRcIiAoY2xpY2spPVwiY3JlYXRlKGRhdGEpXCJcbiAgICAgICAgICAgIG1hdC1tZW51LWl0ZW0gbmFtZT1cImNoYW5uZWwtYW5hbHl0aWNzLWJ1dHRvblwiIGNsYXNzPVwid3MtbWF0LXByaW1hcnktdGV4dFwiIGkxOG4tYXJpYS1sYWJlbFxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkFuYWx5dGljc1wiPlxuICAgICAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XG4gICAgICAgICAgICA8c3Bhbj5BZGQ8L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwiZGF0YS5jb2x1bW5JbmZvLmNvbmZpZy5lbmFibGVEZWxldGVcIiAoY2xpY2spPVwiZGVsZXRlKGRhdGEpXCJcbiAgICAgICAgICAgIG1hdC1tZW51LWl0ZW0gbmFtZT1cImNoYW5uZWwtYW5hbHl0aWNzLWJ1dHRvblwiIGNsYXNzPVwid3MtbWF0LXByaW1hcnktdGV4dFwiIGkxOG4tYXJpYS1sYWJlbFxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkFuYWx5dGljc1wiPlxuICAgICAgICAgICAgPG1hdC1pY29uPmRlbGV0ZTwvbWF0LWljb24+XG4gICAgICAgICAgICA8c3Bhbj5EZWxldGU8L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgIDwvbmctdGVtcGxhdGU+XG48L21hdC1tZW51PlxuXG48bWF0LW1lbnUgI29yZ01lbnU9XCJtYXRNZW51XCIgY2xhc3M9XCJtZW51LXNlY1wiPlxuICAgIDxuZy10ZW1wbGF0ZSBtYXRNZW51Q29udGVudCBsZXQtcm93RGF0YT1cImRhdGFcIiBsZXQtY2FyZFJlZj1cImNhcmRSZWZcIj5cbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImRhdGEuY29sdW1uSW5mby5jb25maWcuZW5hYmFsZVJlbW92ZUNvbm5lY3Rpb25cIiAoY2xpY2spPVwicmVtb3ZlQ29ubmVjdGlvbihkYXRhKVwiXG4gICAgICAgICAgICBtYXQtbWVudS1pdGVtIG5hbWU9XCJjaGFubmVsLWFuYWx5dGljcy1idXR0b25cIiBjbGFzcz1cIndzLW1hdC1wcmltYXJ5LXRleHRcIiBpMThuLWFyaWEtbGFiZWxcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJBbmFseXRpY3NcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICA8c3Bhbj5SZW1vdmUgQ29ubmVjdGlvbjwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwhLS0gPGJ1dHRvbiAqbmdJZj1cImRhdGEuY29sdW1uSW5mby5jb25maWcuZW5hYmxlVXBkYXRlSGllcmFyY2h5XCIgIChjbGljayk9XCJ1cGRhdGVIaWVyYXJjaHkoZGF0YSwgZGF0YS5jaGlsZHJlbiwgZGF0YS5pbmRleClcIiBtYXQtbWVudS1pdGVtIG5hbWU9XCJjaGFubmVsLWFuYWx5dGljcy1idXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJ3cy1tYXQtcHJpbWFyeS10ZXh0XCIgaTE4bi1hcmlhLWxhYmVsIGFyaWEtbGFiZWw9XCJBbmFseXRpY3NcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbj52aXNpYmlsaXR5PC9tYXQtaWNvbj4gPHNwYW4+VXBkYXRlIEhpZXJhcmNoeTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIFxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwiZGF0YS5jb2x1bW5JbmZvLmNvbmZpZy5lbmFibGVNYW5hZ2VPcmdhbml6YXRpb25cIiAoY2xpY2spPVwibWFuYWdlT3JnYW5pemF0aW9uKGRhdGEpXCJcbiAgICAgICAgICAgIG1hdC1tZW51LWl0ZW0gbmFtZT1cImNoYW5uZWwtYW5hbHl0aWNzLWJ1dHRvblwiIGNsYXNzPVwid3MtbWF0LXByaW1hcnktdGV4dFwiIGkxOG4tYXJpYS1sYWJlbFxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkFuYWx5dGljc1wiPlxuICAgICAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XG4gICAgICAgICAgICA8c3Bhbj5NYW5hZ2UgT3JnYW5pc2F0aW9uPC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj4gLS0+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbjwvbWF0LW1lbnU+Il19
|