igniteui-angular 14.2.26 → 14.2.27
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/esm2020/lib/chips/chip.component.mjs +11 -2
- package/esm2020/lib/chips/chips-area.component.mjs +6 -6
- package/esm2020/lib/query-builder/query-builder.component.mjs +2 -2
- package/fesm2015/igniteui-angular.mjs +15 -6
- package/fesm2015/igniteui-angular.mjs.map +1 -1
- package/fesm2020/igniteui-angular.mjs +15 -6
- package/fesm2020/igniteui-angular.mjs.map +1 -1
- package/lib/chips/chip.component.d.ts +9 -2
- package/package.json +1 -1
|
@@ -2,7 +2,7 @@ import { Component, EventEmitter, ElementRef, HostBinding, HostListener, Input,
|
|
|
2
2
|
import { DisplayDensityToken, DisplayDensityBase } from '../core/displayDensity';
|
|
3
3
|
import { IgxDragDirective } from '../directives/drag-drop/drag-drop.directive';
|
|
4
4
|
import { CurrentResourceStrings } from '../core/i18n/resources';
|
|
5
|
-
import { fromEvent } from 'rxjs';
|
|
5
|
+
import { fromEvent, Subject } from 'rxjs';
|
|
6
6
|
import { take, filter } from 'rxjs/operators';
|
|
7
7
|
import * as i0 from "@angular/core";
|
|
8
8
|
import * as i1 from "@angular/common";
|
|
@@ -248,6 +248,11 @@ export class IgxChipComponent extends DisplayDensityBase {
|
|
|
248
248
|
* @internal
|
|
249
249
|
*/
|
|
250
250
|
this.hideBaseElement = false;
|
|
251
|
+
/**
|
|
252
|
+
* @hidden
|
|
253
|
+
* @internal
|
|
254
|
+
*/
|
|
255
|
+
this.destroy$ = new Subject();
|
|
251
256
|
this._tabIndex = null;
|
|
252
257
|
this._selected = false;
|
|
253
258
|
this._selectedItemClass = 'igx-chip__item--selected';
|
|
@@ -640,6 +645,10 @@ export class IgxChipComponent extends DisplayDensityBase {
|
|
|
640
645
|
}
|
|
641
646
|
}
|
|
642
647
|
}
|
|
648
|
+
ngOnDestroy() {
|
|
649
|
+
this.destroy$.next();
|
|
650
|
+
this.destroy$.complete();
|
|
651
|
+
}
|
|
643
652
|
}
|
|
644
653
|
IgxChipComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: IgxChipComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: DisplayDensityToken, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
645
654
|
IgxChipComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.1", type: IgxChipComponent, selector: "igx-chip", inputs: { id: "id", tabIndex: "tabIndex", data: "data", draggable: "draggable", animateOnRelease: "animateOnRelease", hideBaseOnDrag: "hideBaseOnDrag", removable: "removable", removeIcon: "removeIcon", selectable: "selectable", selectIcon: "selectIcon", class: "class", disabled: "disabled", selected: "selected", color: "color", resourceStrings: "resourceStrings" }, outputs: { selectedChange: "selectedChange", moveStart: "moveStart", moveEnd: "moveEnd", remove: "remove", chipClick: "chipClick", selectedChanging: "selectedChanging", selectedChanged: "selectedChanged", keyDown: "keyDown", dragEnter: "dragEnter", dragLeave: "dragLeave", dragOver: "dragOver", dragDrop: "dragDrop" }, host: { listeners: { "keydown": "keyEvent($event)" }, properties: { "attr.id": "this.id", "attr.role": "this.role", "attr.tabIndex": "this.tabIndex", "attr.aria-selected": "this.selected", "attr.class": "this.hostClass" } }, viewQueries: [{ propertyName: "dragDirective", first: true, predicate: ["chipArea"], descendants: true, read: IgxDragDirective, static: true }, { propertyName: "chipArea", first: true, predicate: ["chipArea"], descendants: true, read: ElementRef, static: true }, { propertyName: "selectContainer", first: true, predicate: ["selectContainer"], descendants: true, read: ElementRef, static: true }, { propertyName: "defaultRemoveIcon", first: true, predicate: ["defaultRemoveIcon"], descendants: true, read: TemplateRef, static: true }, { propertyName: "defaultSelectIcon", first: true, predicate: ["defaultSelectIcon"], descendants: true, read: TemplateRef, static: true }], usesInheritance: true, ngImport: i0, template: "<div #chipArea class=\"igx-chip__item\"\n [igxDrag]=\"{chip: this}\"\n [style.visibility]='hideBaseElement ? \"hidden\" : \"visible\"'\n [ghostClass]=\"ghostClass\"\n (dragStart)=\"onChipDragStart($event)\"\n (ghostCreate)=\"onChipGhostCreate()\"\n (ghostDestroy)=\"onChipGhostDestroy()\"\n (dragEnd)=\"onChipDragEnd()\"\n (transitioned)=\"onChipMoveEnd($event)\"\n (dragClick)=\"onChipDragClicked($event)\"\n igxDrop\n (enter)=\"onChipDragEnterHandler($event)\"\n (leave)= \"onChipDragLeaveHandler($event)\"\n (over)=\"onChipOverHandler($event)\"\n (dropped)=\"onChipDrop($event)\">\n\n <div #selectContainer [ngClass]=\"selectClass(selected)\">\n <ng-container *ngTemplateOutlet=\"selectIconTemplate\"></ng-container>\n </div>\n\n <ng-content select=\"igx-prefix,[igxPrefix]\"></ng-content>\n\n <div class=\"igx-chip__content\">\n <ng-content></ng-content>\n </div>\n\n <ng-content select=\"igx-suffix,[igxSuffix]\"></ng-content>\n\n <div class=\"igx-chip__remove\" *ngIf=\"removable\"\n [attr.tabIndex]=\"tabIndex\"\n (keydown)=\"onRemoveBtnKeyDown($event)\"\n (pointerdown)=\"onRemoveMouseDown($event)\"\n (mousedown)=\"onRemoveMouseDown($event)\"\n (click)=\"onRemoveClick($event)\"\n (touchmove)=\"onRemoveTouchMove()\"\n (touchend)=\"onRemoveTouchEnd($event)\">\n <ng-container *ngTemplateOutlet=\"removeButtonTemplate\"></ng-container>\n </div>\n</div>\n\n<ng-template #defaultSelectIcon>\n <igx-icon [attr.aria-label]=\"resourceStrings.igx_chip_select\">done</igx-icon>\n</ng-template>\n\n<ng-template #defaultRemoveIcon>\n <igx-icon [attr.aria-label]=\"resourceStrings.igx_chip_remove\">cancel</igx-icon>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.IgxIconComponent, selector: "igx-icon", inputs: ["family", "active", "name"] }, { kind: "directive", type: i3.IgxDragDirective, selector: "[igxDrag]", inputs: ["igxDrag", "dragTolerance", "dragDirection", "dragChannel", "ghost", "ghostClass", "ghostTemplate", "ghostHost", "scrollContainer", "ghostOffsetX", "ghostOffsetY"], outputs: ["dragStart", "dragMove", "dragEnd", "dragClick", "ghostCreate", "ghostDestroy", "transitioned"], exportAs: ["drag"] }, { kind: "directive", type: i3.IgxDropDirective, selector: "[igxDrop]", inputs: ["igxDrop", "dropChannel", "dropStrategy"], outputs: ["enter", "over", "leave", "dropped"], exportAs: ["drop"] }] });
|
|
@@ -739,4 +748,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImpor
|
|
|
739
748
|
type: HostListener,
|
|
740
749
|
args: ['keydown', ['$event']]
|
|
741
750
|
}] } });
|
|
742
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hpcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvY2hpcHMvY2hpcC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvY2hpcHMvY2hpcC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUVULFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxFQUNYLFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFFVCxXQUFXLEVBQ1gsTUFBTSxFQUNOLFFBQVEsRUFDWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQTBCLG1CQUFtQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekcsT0FBTyxFQUNILGdCQUFnQixFQUtuQixNQUFNLDZDQUE2QyxDQUFDO0FBR3JELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7QUF5QjlDLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQztBQUVoQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUtILE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxrQkFBa0I7SUEwZXBELFlBQW1CLEdBQXNCLEVBQVUsR0FBNEIsRUFBVSxRQUFtQixFQUNyRCxzQkFBOEM7UUFDakcsS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFGZixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUFVLFFBQUcsR0FBSCxHQUFHLENBQXlCO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNyRCwy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QixLQUFLO2dCQXNCQyxTQUFTO3NCQURmLE1BQU07Z0JBYUEsT0FBTztzQkFEYixNQUFNO2dCQWFBLE1BQU07c0JBRFosTUFBTTtnQkFhQSxTQUFTO3NCQURmLE1BQU07Z0JBY0EsZ0JBQWdCO3NCQUR0QixNQUFNO2dCQVlBLGVBQWU7c0JBRHJCLE1BQU07Z0JBY0EsT0FBTztzQkFEYixNQUFNO2dCQWNBLFNBQVM7c0JBRGYsTUFBTTtnQkFjQSxTQUFTO3NCQURmLE1BQU07Z0JBY0MsUUFBUTtzQkFEZCxNQUFNO2dCQWNELFFBQVE7c0JBRGQsTUFBTTtnQkFRSSxTQUFTO3NCQURuQixXQUFXO3VCQUFDLFlBQVk7Z0JBOEJsQixhQUFhO3NCQURuQixTQUFTO3VCQUFDLFVBQVUsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQVF4RCxRQUFRO3NCQURkLFNBQVM7dUJBQUMsVUFBVSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQVFsRCxlQUFlO3NCQURyQixTQUFTO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQVF6RCxpQkFBaUI7c0JBRHZCLFNBQVM7dUJBQUMsbUJBQW1CLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBUTVELGlCQUFpQjtzQkFEdkIsU0FBUzt1QkFBQyxtQkFBbUIsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFzRDVELFFBQVE7c0JBRGQsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgRWxlbWVudFJlZixcbiAgICBIb3N0QmluZGluZyxcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5wdXQsXG4gICAgT3V0cHV0LFxuICAgIFZpZXdDaGlsZCxcbiAgICBSZW5kZXJlcjIsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgSW5qZWN0LFxuICAgIE9wdGlvbmFsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSURpc3BsYXlEZW5zaXR5T3B0aW9ucywgRGlzcGxheURlbnNpdHlUb2tlbiwgRGlzcGxheURlbnNpdHlCYXNlIH0gZnJvbSAnLi4vY29yZS9kaXNwbGF5RGVuc2l0eSc7XG5pbXBvcnQge1xuICAgIElneERyYWdEaXJlY3RpdmUsXG4gICAgSURyYWdCYXNlRXZlbnRBcmdzLFxuICAgIElEcmFnU3RhcnRFdmVudEFyZ3MsXG4gICAgSURyb3BCYXNlRXZlbnRBcmdzLFxuICAgIElEcm9wRHJvcHBlZEV2ZW50QXJnc1xufSBmcm9tICcuLi9kaXJlY3RpdmVzL2RyYWctZHJvcC9kcmFnLWRyb3AuZGlyZWN0aXZlJztcbmltcG9ydCB7IElCYXNlRXZlbnRBcmdzIH0gZnJvbSAnLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyBJQ2hpcFJlc291cmNlU3RyaW5ncyB9IGZyb20gJy4uL2NvcmUvaTE4bi9jaGlwLXJlc291cmNlcyc7XG5pbXBvcnQgeyBDdXJyZW50UmVzb3VyY2VTdHJpbmdzIH0gZnJvbSAnLi4vY29yZS9pMThuL3Jlc291cmNlcyc7XG5pbXBvcnQgeyBmcm9tRXZlbnQgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2UsIGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuZXhwb3J0IGludGVyZmFjZSBJQmFzZUNoaXBFdmVudEFyZ3MgZXh0ZW5kcyBJQmFzZUV2ZW50QXJncyB7XG4gICAgb3JpZ2luYWxFdmVudDogSURyYWdCYXNlRXZlbnRBcmdzIHwgSURyb3BCYXNlRXZlbnRBcmdzIHwgS2V5Ym9hcmRFdmVudCB8IE1vdXNlRXZlbnQgfCBUb3VjaEV2ZW50O1xuICAgIG93bmVyOiBJZ3hDaGlwQ29tcG9uZW50O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElDaGlwQ2xpY2tFdmVudEFyZ3MgZXh0ZW5kcyBJQmFzZUNoaXBFdmVudEFyZ3Mge1xuICAgIGNhbmNlbDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQ2hpcEtleURvd25FdmVudEFyZ3MgZXh0ZW5kcyBJQmFzZUNoaXBFdmVudEFyZ3Mge1xuICAgIG9yaWdpbmFsRXZlbnQ6IEtleWJvYXJkRXZlbnQ7XG4gICAgY2FuY2VsOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElDaGlwRW50ZXJEcmFnQXJlYUV2ZW50QXJncyBleHRlbmRzIElCYXNlQ2hpcEV2ZW50QXJncyB7XG4gICAgZHJhZ0NoaXA6IElneENoaXBDb21wb25lbnQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNoaXBTZWxlY3RFdmVudEFyZ3MgZXh0ZW5kcyBJQmFzZUNoaXBFdmVudEFyZ3Mge1xuICAgIGNhbmNlbDogYm9vbGVhbjtcbiAgICBzZWxlY3RlZDogYm9vbGVhbjtcbn1cblxubGV0IENISVBfSUQgPSAwO1xuXG4vKipcbiAqIENoaXAgaXMgY29tcGFjdCB2aXN1YWwgY29tcG9uZW50IHRoYXQgZGlzcGxheXMgaW5mb3JtYXRpb24gaW4gYW4gb2Jyb3VuZC5cbiAqXG4gKiBAaWd4TW9kdWxlIElneENoaXBzTW9kdWxlXG4gKlxuICogQGlneFRoZW1lIGlneC1jaGlwLXRoZW1lXG4gKlxuICogQGlneEtleXdvcmRzIGNoaXBcbiAqXG4gKiBAaWd4R3JvdXAgZGlzcGxheVxuICpcbiAqIEByZW1hcmtzXG4gKiBUaGUgSWduaXRlIFVJIENoaXAgY2FuIGJlIHRlbXBsYXRlZCwgZGVsZXRlZCwgYW5kIHNlbGVjdGVkLlxuICogTXVsdGlwbGUgY2hpcHMgY2FuIGJlIHJlb3JkZXJlZCBhbmQgdmlzdWFsbHkgY29ubmVjdGVkIHRvIGVhY2ggb3RoZXIuXG4gKiBDaGlwcyByZXNpZGUgaW4gYSBjb250YWluZXIgY2FsbGVkIGNoaXBzIGFyZWEgd2hpY2ggaXMgcmVzcG9uc2libGUgZm9yIG1hbmFnaW5nIHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGUgY2hpcHMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGh0bWxcbiAqIDxpZ3gtY2hpcCBjbGFzcz1cImNoaXBTdHlsZVwiIFtpZF09XCI5MDFcIiBbZHJhZ2dhYmxlXT1cInRydWVcIiBbcmVtb3ZhYmxlXT1cInRydWVcIiAocmVtb3ZlKT1cImNoaXBSZW1vdmVkKCRldmVudClcIj5cbiAqICAgIDxpZ3gtYXZhdGFyIGNsYXNzPVwiY2hpcC1hdmF0YXItcmVzaXplZFwiIGlneFByZWZpeCBbcm91bmRTaGFwZV09XCJ0cnVlXCI+PC9pZ3gtYXZhdGFyPlxuICogPC9pZ3gtY2hpcD5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2lneC1jaGlwJyxcbiAgICB0ZW1wbGF0ZVVybDogJ2NoaXAuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIElneENoaXBDb21wb25lbnQgZXh0ZW5kcyBEaXNwbGF5RGVuc2l0eUJhc2Uge1xuICAgIC8qKlxuICAgICAqIEFuIEBJbnB1dCBwcm9wZXJ0eSB0aGF0IHNldHMgdGhlIHZhbHVlIG9mIGBpZGAgYXR0cmlidXRlLiBJZiBub3QgcHJvdmlkZWQgaXQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2hpcCBbaWRdPVwiJ2lneC1jaGlwLTEnXCI+PC9pZ3gtY2hpcD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKVxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGlkID0gYGlneC1jaGlwLSR7Q0hJUF9JRCsrfWA7XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBgcm9sZWAgYXR0cmlidXRlIG9mIHRoZSBjaGlwLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGNoaXBSb2xlID0gdGhpcy5jaGlwLnJvbGU7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLnJvbGUnKVxuICAgIHB1YmxpYyByb2xlID0gJ29wdGlvbic7XG5cbiAgICAvKipcbiAgICAgKiBBbiBASW5wdXQgcHJvcGVydHkgdGhhdCBzZXRzIHRoZSB2YWx1ZSBvZiBgdGFiaW5kZXhgIGF0dHJpYnV0ZS4gSWYgbm90IHByb3ZpZGVkIGl0IHdpbGwgdXNlIHRoZSBlbGVtZW50J3MgdGFiaW5kZXggaWYgc2V0LlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jaGlwIFtpZF09XCInaWd4LWNoaXAtMSdcIiBbdGFiSW5kZXhdPVwiMVwiPjwvaWd4LWNoaXA+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLnRhYkluZGV4JylcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgdGFiSW5kZXgodmFsdWU6IG51bWJlcikge1xuICAgICAgICB0aGlzLl90YWJJbmRleCA9IHZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdGFiSW5kZXgoKSB7XG4gICAgICAgIGlmICh0aGlzLl90YWJJbmRleCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RhYkluZGV4O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAhdGhpcy5kaXNhYmxlZCA/IDAgOiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFuIEBJbnB1dCBwcm9wZXJ0eSB0aGF0IHN0b3JlcyBkYXRhIHJlbGF0ZWQgdG8gdGhlIGNoaXAuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNoaXAgW2RhdGFdPVwieyB2YWx1ZTogJ0NvdW50cnknIH1cIj48L2lneC1jaGlwPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGRhdGE6IGFueTtcblxuICAgIC8qKlxuICAgICAqIEFuIEBJbnB1dCBwcm9wZXJ0eSB0aGF0IGRlZmluZXMgaWYgdGhlIGBJZ3hDaGlwQ29tcG9uZW50YCBjYW4gYmUgZHJhZ2dlZCBpbiBvcmRlciB0byBjaGFuZ2UgaXQncyBwb3NpdGlvbi5cbiAgICAgKiBCeSBkZWZhdWx0IGl0IGlzIHNldCB0byBmYWxzZS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2hpcCBbaWRdPVwiJ2lneC1jaGlwLTEnXCIgW2RyYWdnYWJsZV09XCJ0cnVlXCI+PC9pZ3gtY2hpcD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBkcmFnZ2FibGUgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEFuIEBJbnB1dCBwcm9wZXJ0eSB0aGF0IGVuYWJsZXMvZGlzYWJsZXMgdGhlIGRyYWdnYWJsZSBlbGVtZW50IGFuaW1hdGlvbiB3aGVuIHRoZSBlbGVtZW50IGlzIHJlbGVhc2VkLlxuICAgICAqIEJ5IGRlZmF1bHQgaXQncyBzZXQgdG8gdHJ1ZS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2hpcCBbaWRdPVwiJ2lneC1jaGlwLTEnXCIgW2RyYWdnYWJsZV09XCJ0cnVlXCIgW2FuaW1hdGVPblJlbGVhc2VdPVwiZmFsc2VcIj48L2lneC1jaGlwPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGFuaW1hdGVPblJlbGVhc2UgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5IHRoYXQgZW5hYmxlcy9kaXNhYmxlcyB0aGUgaGlkaW5nIG9mIHRoZSBiYXNlIGVsZW1lbnQgdGhhdCBoYXMgYmVlbiBkcmFnZ2VkLlxuICAgICAqIEJ5IGRlZmF1bHQgaXQncyBzZXQgdG8gdHJ1ZS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2hpcCBbaWRdPVwiJ2lneC1jaGlwLTEnXCIgW2RyYWdnYWJsZV09XCJ0cnVlXCIgW2hpZGVCYXNlT25EcmFnXT1cImZhbHNlXCI+PC9pZ3gtY2hpcD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBoaWRlQmFzZU9uRHJhZyA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBBbiBASW5wdXQgcHJvcGVydHkgdGhhdCBkZWZpbmVzIGlmIHRoZSBgSWd4Q2hpcENvbXBvbmVudGAgc2hvdWxkIHJlbmRlciByZW1vdmUgYnV0dG9uIGFuZCB0aHJvdyByZW1vdmUgZXZlbnRzLlxuICAgICAqIEJ5IGRlZmF1bHQgaXQgaXMgc2V0IHRvIGZhbHNlLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jaGlwIFtpZF09XCInaWd4LWNoaXAtMSdcIiBbZHJhZ2dhYmxlXT1cInRydWVcIiBbcmVtb3ZhYmxlXT1cInRydWVcIj48L2lneC1jaGlwPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHJlbW92YWJsZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5IHRoYXQgb3ZlcnJpZGVzIHRoZSBkZWZhdWx0IGljb24gdGhhdCB0aGUgY2hpcCBhcHBsaWVzIHRvIHRoZSByZW1vdmUgYnV0dG9uLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jaGlwIFtpZF09XCJjaGlwLmlkXCIgW3JlbW92YWJsZV09XCJ0cnVlXCIgW3JlbW92ZUljb25dPVwiaWNvblRlbXBsYXRlXCI+PC9pZ3gtY2hpcD5cbiAgICAgKiA8bmctdGVtcGxhdGUgI2ljb25UZW1wbGF0ZT48aWd4LWljb24+ZGVsZXRlPC9pZ3gtaWNvbj48L25nLXRlbXBsYXRlPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHJlbW92ZUljb246IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKipcbiAgICAgKiBBbiBASW5wdXQgcHJvcGVydHkgdGhhdCBkZWZpbmVzIGlmIHRoZSBgSWd4Q2hpcENvbXBvbmVudGAgY2FuIGJlIHNlbGVjdGVkIG9uIGNsaWNrIG9yIHRocm91Z2ggbmF2aWdhdGlvbixcbiAgICAgKiBCeSBkZWZhdWx0IGl0IGlzIHNldCB0byBmYWxzZS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2hpcCBbaWRdPVwiY2hpcC5pZFwiIFtkcmFnZ2FibGVdPVwidHJ1ZVwiIFtyZW1vdmFibGVdPVwidHJ1ZVwiIFtzZWxlY3RhYmxlXT1cInRydWVcIj48L2lneC1jaGlwPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNlbGVjdGFibGUgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEFuIEBJbnB1dCBwcm9wZXJ0eSB0aGF0IG92ZXJyaWRlcyB0aGUgZGVmYXVsdCBpY29uIHRoYXQgdGhlIGNoaXAgYXBwbGllcyB3aGVuIGl0IGlzIHNlbGVjdGVkLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jaGlwIFtpZF09XCJjaGlwLmlkXCIgW3NlbGVjdGFibGVdPVwidHJ1ZVwiIFtzZWxlY3RJY29uXT1cImljb25UZW1wbGF0ZVwiPjwvaWd4LWNoaXA+XG4gICAgICogPG5nLXRlbXBsYXRlICNpY29uVGVtcGxhdGU+PGlneC1pY29uPmRvbmVfb3V0bGluZTwvaWd4LWljb24+PC9uZy10ZW1wbGF0ZT5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZWxlY3RJY29uOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGNsYXNzID0gJyc7XG5cbiAgICAvKipcbiAgICAgKiBBbiBASW5wdXQgcHJvcGVydHkgdGhhdCBkZWZpbmVzIGlmIHRoZSBgSWd4Q2hpcENvbXBvbmVudGAgaXMgZGlzYWJsZWQuIFdoZW4gZGlzYWJsZWQgaXQgcmVzdHJpY3RzIHVzZXIgaW50ZXJhY3Rpb25zXG4gICAgICogbGlrZSBmb2N1c2luZyBvbiBjbGljayBvciB0YWIsIHNlbGVjdGlvbiBvbiBjbGljayBvciBTcGFjZSwgZHJhZ2dpbmcuXG4gICAgICogQnkgZGVmYXVsdCBpdCBpcyBzZXQgdG8gZmFsc2UuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNoaXAgW2lkXT1cImNoaXAuaWRcIiBbZGlzYWJsZWRdPVwidHJ1ZVwiPjwvaWd4LWNoaXA+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGBJZ3hDaGlwQ29tcG9uZW50YCBzZWxlY3RlZCBzdGF0ZS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2hpcCAjbXlDaGlwIFtpZF09XCInaWd4LWNoaXAtMSdcIiBbc2VsZWN0YWJsZV09XCJ0cnVlXCIgW3NlbGVjdGVkXT1cInRydWVcIj5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFR3by13YXkgZGF0YSBiaW5kaW5nOlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNoaXAgI215Q2hpcCBbaWRdPVwiJ2lneC1jaGlwLTEnXCIgW3NlbGVjdGFibGVdPVwidHJ1ZVwiIFsoc2VsZWN0ZWQpXT1cIm1vZGVsLmlzU2VsZWN0ZWRcIj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1zZWxlY3RlZCcpXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IHNlbGVjdGVkKG5ld1ZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlU2VsZWN0aW9uKG5ld1ZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGlmIHRoZSBgSWd4Q2hpcENvbXBvbmVudGAgaXMgc2VsZWN0ZWQuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBAVmlld0NoaWxkKCdteUNoaXAnKVxuICAgICAqIHB1YmxpYyBjaGlwOiBJZ3hDaGlwQ29tcG9uZW50O1xuICAgICAqIHNlbGVjdGVkQ2hpcCgpe1xuICAgICAqICAgICBsZXQgc2VsZWN0ZWRDaGlwID0gdGhpcy5jaGlwLnNlbGVjdGVkO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHNlbGVjdGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBzZWxlY3RlZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIC8qKlxuICAgICAqIEFuIEBJbnB1dCBwcm9wZXJ0eSB0aGF0IHNldHMgdGhlIGBJZ3hDaGlwQ29tcG9uZW50YCBiYWNrZ3JvdW5kIGNvbG9yLlxuICAgICAqIFRoZSBgY29sb3JgIHByb3BlcnR5IHN1cHBvcnRzIHN0cmluZywgcmdiLCBoZXguXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNoaXAgI215Q2hpcCBbaWRdPVwiJ2lneC1jaGlwLTEnXCIgW2NvbG9yXT1cIicjZmYwMDAwJ1wiPjwvaWd4LWNoaXA+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IGNvbG9yKG5ld0NvbG9yKSB7XG4gICAgICAgIHRoaXMuY2hpcEFyZWEubmF0aXZlRWxlbWVudC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBuZXdDb2xvcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSBgSWd4Q2hpcENvbXBvbmVudGAuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBAVmlld0NoaWxkKCdteUNoaXAnKVxuICAgICAqIHB1YmxpYyBjaGlwOiBJZ3hDaGlwQ29tcG9uZW50O1xuICAgICAqIG5nQWZ0ZXJWaWV3SW5pdCgpe1xuICAgICAqICAgICBsZXQgY2hpcENvbG9yID0gdGhpcy5jaGlwLmNvbG9yO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGNvbG9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGlwQXJlYS5uYXRpdmVFbGVtZW50LnN0eWxlLmJhY2tncm91bmRDb2xvcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbiBhY2Nlc3NvciB0aGF0IHNldHMgdGhlIHJlc291cmNlIHN0cmluZ3MuXG4gICAgICogQnkgZGVmYXVsdCBpdCB1c2VzIEVOIHJlc291cmNlcy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgcmVzb3VyY2VTdHJpbmdzKHZhbHVlOiBJQ2hpcFJlc291cmNlU3RyaW5ncykge1xuICAgICAgICB0aGlzLl9yZXNvdXJjZVN0cmluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9yZXNvdXJjZVN0cmluZ3MsIHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbiBhY2Nlc3NvciB0aGF0IHJldHVybnMgdGhlIHJlc291cmNlIHN0cmluZ3MuXG4gICAgICovXG4gICAgcHVibGljIGdldCByZXNvdXJjZVN0cmluZ3MoKTogSUNoaXBSZXNvdXJjZVN0cmluZ3Mge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2VTdHJpbmdzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVtaXRzIGFuIGV2ZW50IHdoZW4gdGhlIGBJZ3hDaGlwQ29tcG9uZW50YCBtb3Zpbmcgc3RhcnRzLlxuICAgICAqIFJldHVybnMgdGhlIG1vdmluZyBgSWd4Q2hpcENvbXBvbmVudGAuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNoaXAgI215Q2hpcCBbaWRdPVwiJ2lneC1jaGlwLTEnXCIgW2RyYWdnYWJsZV09XCJ0cnVlXCIgKG1vdmVTdGFydCk9XCJtb3ZlU3RhcnRlZCgkZXZlbnQpXCI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG1vdmVTdGFydCA9IG5ldyBFdmVudEVtaXR0ZXI8SUJhc2VDaGlwRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHMgYW4gZXZlbnQgd2hlbiB0aGUgYElneENoaXBDb21wb25lbnRgIG1vdmluZyBlbmRzLlxuICAgICAqIFJldHVybnMgdGhlIG1vdmVkIGBJZ3hDaGlwQ29tcG9uZW50YC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2hpcCAjbXlDaGlwIFtpZF09XCInaWd4LWNoaXAtMSdcIiBbZHJhZ2dhYmxlXT1cInRydWVcIiAobW92ZUVuZCk9XCJtb3ZlRW5kZWQoJGV2ZW50KVwiPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBtb3ZlRW5kID0gbmV3IEV2ZW50RW1pdHRlcjxJQmFzZUNoaXBFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0cyBhbiBldmVudCB3aGVuIHRoZSBgSWd4Q2hpcENvbXBvbmVudGAgaXMgcmVtb3ZlZC5cbiAgICAgKiBSZXR1cm5zIHRoZSByZW1vdmVkIGBJZ3hDaGlwQ29tcG9uZW50YC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2hpcCAjbXlDaGlwIFtpZF09XCInaWd4LWNoaXAtMSdcIiBbZHJhZ2dhYmxlXT1cInRydWVcIiAocmVtb3ZlKT1cInJlbW92ZSgkZXZlbnQpXCI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHJlbW92ZSA9IG5ldyBFdmVudEVtaXR0ZXI8SUJhc2VDaGlwRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHMgYW4gZXZlbnQgd2hlbiB0aGUgYElneENoaXBDb21wb25lbnRgIGlzIGNsaWNrZWQuXG4gICAgICogUmV0dXJucyB0aGUgY2xpY2tlZCBgSWd4Q2hpcENvbXBvbmVudGAsIHdoZXRoZXIgdGhlIGV2ZW50IHNob3VsZCBiZSBjYW5jZWxlZC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2hpcCAjbXlDaGlwIFtpZF09XCInaWd4LWNoaXAtMSdcIiBbZHJhZ2dhYmxlXT1cInRydWVcIiAoY2xpY2spPVwiY2hpcENsaWNrKCRldmVudClcIj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgY2hpcENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxJQ2hpcENsaWNrRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHMgZXZlbnQgd2hlbiB0aGUgYElneENoaXBDb21wb25lbnRgIGlzIHNlbGVjdGVkL2Rlc2VsZWN0ZWQuXG4gICAgICogUmV0dXJucyB0aGUgc2VsZWN0ZWQgY2hpcCByZWZlcmVuY2UsIHdoZXRoZXIgdGhlIGV2ZW50IHNob3VsZCBiZSBjYW5jZWxlZCwgd2hhdCBpcyB0aGUgbmV4dCBzZWxlY3Rpb24gc3RhdGUgYW5kXG4gICAgICogd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkIGJ5IGludGVyYWN0aW9uIGBvcmlnaW5hbEV2ZW50YCBpcyBwcm92aWRlZCwgb3RoZXJ3aXNlIGBvcmlnaW5hbEV2ZW50YCBpcyBgbnVsbGAuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNoaXAgI215Q2hpcCBbaWRdPVwiJ2lneC1jaGlwLTEnXCIgW3NlbGVjdGFibGVdPVwidHJ1ZVwiIChzZWxlY3RlZENoYW5naW5nKT1cImNoaXBTZWxlY3QoJGV2ZW50KVwiPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBzZWxlY3RlZENoYW5naW5nID0gbmV3IEV2ZW50RW1pdHRlcjxJQ2hpcFNlbGVjdEV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXRzIGV2ZW50IHdoZW4gdGhlIGBJZ3hDaGlwQ29tcG9uZW50YCBpcyBzZWxlY3RlZC9kZXNlbGVjdGVkIGFuZCBhbnkgcmVsYXRlZCBhbmltYXRpb25zIGFuZCB0cmFuc2l0aW9ucyBhbHNvIGVuZC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2hpcCAjbXlDaGlwIFtpZF09XCInaWd4LWNoaXAtMSdcIiBbc2VsZWN0YWJsZV09XCJ0cnVlXCIgKHNlbGVjdGVkQ2hhbmdlZCk9XCJjaGlwU2VsZWN0RW5kKCRldmVudClcIj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgc2VsZWN0ZWRDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxJQmFzZUNoaXBFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0cyBhbiBldmVudCB3aGVuIHRoZSBgSWd4Q2hpcENvbXBvbmVudGAga2V5Ym9hcmQgbmF2aWdhdGlvbiBpcyBiZWluZyB1c2VkLlxuICAgICAqIFJldHVybnMgdGhlIGZvY3VzZWQvc2VsZWN0ZWQgYElneENoaXBDb21wb25lbnRgLCB3aGV0aGVyIHRoZSBldmVudCBzaG91bGQgYmUgY2FuY2VsZWQsXG4gICAgICogaWYgdGhlIGBhbHRgLCBgc2hpZnRgIG9yIGBjb250cm9sYCBrZXkgaXMgcHJlc3NlZCBhbmQgdGhlIHByZXNzZWQga2V5IG5hbWUuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNoaXAgI215Q2hpcCBbaWRdPVwiJ2lneC1jaGlwLTEnXCIgW2RyYWdnYWJsZV09XCJ0cnVlXCIgKGtleURvd24pPVwiY2hpcEtleURvd24oJGV2ZW50KVwiPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBrZXlEb3duID0gbmV3IEV2ZW50RW1pdHRlcjxJQ2hpcEtleURvd25FdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0cyBhbiBldmVudCB3aGVuIHRoZSBgSWd4Q2hpcENvbXBvbmVudGAgaGFzIGVudGVyZWQgdGhlIGBJZ3hDaGlwc0FyZWFDb21wb25lbnRgLlxuICAgICAqIFJldHVybnMgdGhlIHRhcmdldCBgSWd4Q2hpcENvbXBvbmVudGAsIHRoZSBkcmFnIGBJZ3hDaGlwQ29tcG9uZW50YCwgYXMgIHdlbGwgYXNcbiAgICAgKiB0aGUgb3JpZ2luYWwgZHJvcCBldmVudCBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNoaXAgI215Q2hpcCBbaWRdPVwiJ2lneC1jaGlwLTEnXCIgW2RyYWdnYWJsZV09XCJ0cnVlXCIgKGRyYWdFbnRlcik9XCJjaGlwRW50ZXIoJGV2ZW50KVwiPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBkcmFnRW50ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPElDaGlwRW50ZXJEcmFnQXJlYUV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXRzIGFuIGV2ZW50IHdoZW4gdGhlIGBJZ3hDaGlwQ29tcG9uZW50YCBoYXMgbGVmdCB0aGUgYElneENoaXBzQXJlYUNvbXBvbmVudGAuXG4gICAgICogUmV0dXJucyB0aGUgdGFyZ2V0IGBJZ3hDaGlwQ29tcG9uZW50YCwgdGhlIGRyYWcgYElneENoaXBDb21wb25lbnRgLCBhcyAgd2VsbCBhc1xuICAgICAqIHRoZSBvcmlnaW5hbCBkcm9wIGV2ZW50IGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2hpcCAjbXlDaGlwIFtpZF09XCInaWd4LWNoaXAtMSdcIiBbZHJhZ2dhYmxlXT1cInRydWVcIiAoZHJhZ0xlYXZlKT1cImNoaXBMZWF2ZSgkZXZlbnQpXCI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGRyYWdMZWF2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8SUNoaXBFbnRlckRyYWdBcmVhRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHMgYW4gZXZlbnQgd2hlbiB0aGUgYElneENoaXBDb21wb25lbnRgIGlzIG92ZXIgdGhlIGBJZ3hDaGlwc0FyZWFDb21wb25lbnRgLlxuICAgICAqIFJldHVybnMgdGhlIHRhcmdldCBgSWd4Q2hpcENvbXBvbmVudGAsIHRoZSBkcmFnIGBJZ3hDaGlwQ29tcG9uZW50YCwgYXMgIHdlbGwgYXNcbiAgICAgKiB0aGUgb3JpZ2luYWwgZHJvcCBldmVudCBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNoaXAgI215Q2hpcCBbaWRdPVwiJ2lneC1jaGlwLTEnXCIgW2RyYWdnYWJsZV09XCJ0cnVlXCIgKGRyYWdPdmVyKT1cImNoaXBPdmVyKCRldmVudClcIj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICAgQE91dHB1dCgpXG4gICAgIHB1YmxpYyBkcmFnT3ZlciA9IG5ldyBFdmVudEVtaXR0ZXI8SUNoaXBFbnRlckRyYWdBcmVhRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHMgYW4gZXZlbnQgd2hlbiB0aGUgYElneENoaXBDb21wb25lbnRgIGhhcyBiZWVuIGRyb3BwZWQgaW4gdGhlIGBJZ3hDaGlwc0FyZWFDb21wb25lbnRgLlxuICAgICAqIFJldHVybnMgdGhlIHRhcmdldCBgSWd4Q2hpcENvbXBvbmVudGAsIHRoZSBkcmFnIGBJZ3hDaGlwQ29tcG9uZW50YCwgYXMgIHdlbGwgYXNcbiAgICAgKiB0aGUgb3JpZ2luYWwgZHJvcCBldmVudCBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNoaXAgI215Q2hpcCBbaWRdPVwiJ2lneC1jaGlwLTEnXCIgW2RyYWdnYWJsZV09XCJ0cnVlXCIgKGRyYWdEcm9wKT1cImNoaXBMZWF2ZSgkZXZlbnQpXCI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGRyYWdEcm9wID0gbmV3IEV2ZW50RW1pdHRlcjxJQ2hpcEVudGVyRHJhZ0FyZWFFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmNsYXNzJylcbiAgICBwdWJsaWMgZ2V0IGhvc3RDbGFzcygpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBjbGFzc2VzID0gW3RoaXMuZ2V0Q29tcG9uZW50RGVuc2l0eUNsYXNzKCdpZ3gtY2hpcCcpXTtcblxuICAgICAgICAvLyBBZGQgdGhlIGJhc2UgY2xhc3MgZmlyc3QgZm9yIGVhY2ggZGVuc2l0eVxuICAgICAgICBpZiAoIWNsYXNzZXMuaW5jbHVkZXMoJ2lneC1jaGlwJykpIHtcbiAgICAgICAgICAgIGNsYXNzZXMudW5zaGlmdCgnaWd4LWNoaXAnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNsYXNzZXMucHVzaCh0aGlzLmRpc2FibGVkID8gJ2lneC1jaGlwLS1kaXNhYmxlZCcgOiAnJyk7XG5cbiAgICAgICAgLy8gVGhlIGN1c3RvbSBjbGFzc2VzIHNob3VsZCBiZSBhdCB0aGUgZW5kLlxuICAgICAgICBjbGFzc2VzLnB1c2godGhpcy5jbGFzcyk7XG4gICAgICAgIHJldHVybiBjbGFzc2VzLmpvaW4oJyAnKS50b1N0cmluZygpLnRyaW0oKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSBgSWd4RHJhZ0RpcmVjdGl2ZWAgdGhlIGBJZ3hDaGlwQ29tcG9uZW50YCB1c2VzIGZvciBkcmFnZ2luZyBiZWhhdmlvci5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2hpcCBbaWRdPVwiY2hpcC5pZFwiIFtkcmFnZ2FibGVdPVwidHJ1ZVwiPjwvaWd4LWNoaXA+XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIG9uTW92ZVN0YXJ0KGV2ZW50OiBJQmFzZUNoaXBFdmVudEFyZ3Mpe1xuICAgICAqICAgICBsZXQgZHJhZ0RpcmVjdGl2ZSA9IGV2ZW50Lm93bmVyLmRyYWdEaXJlY3RpdmU7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ2NoaXBBcmVhJywgeyByZWFkOiBJZ3hEcmFnRGlyZWN0aXZlLCBzdGF0aWM6IHRydWUgfSlcbiAgICBwdWJsaWMgZHJhZ0RpcmVjdGl2ZTogSWd4RHJhZ0RpcmVjdGl2ZTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKCdjaGlwQXJlYScsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHVibGljIGNoaXBBcmVhOiBFbGVtZW50UmVmO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ3NlbGVjdENvbnRhaW5lcicsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHVibGljIHNlbGVjdENvbnRhaW5lcjogRWxlbWVudFJlZjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKCdkZWZhdWx0UmVtb3ZlSWNvbicsIHsgcmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogdHJ1ZSB9KVxuICAgIHB1YmxpYyBkZWZhdWx0UmVtb3ZlSWNvbjogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKCdkZWZhdWx0U2VsZWN0SWNvbicsIHsgcmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogdHJ1ZSB9KVxuICAgIHB1YmxpYyBkZWZhdWx0U2VsZWN0SWNvbjogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHJlbW92ZUJ1dHRvblRlbXBsYXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW1vdmVJY29uIHx8IHRoaXMuZGVmYXVsdFJlbW92ZUljb247XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgc2VsZWN0SWNvblRlbXBsYXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RJY29uIHx8IHRoaXMuZGVmYXVsdFNlbGVjdEljb247XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgZ2hvc3RDbGFzcygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21wb25lbnREZW5zaXR5Q2xhc3MoJ2lneC1jaGlwX19naG9zdCcpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgbmF0aXZlRWxlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBoaWRlQmFzZUVsZW1lbnQgPSBmYWxzZTtcblxuICAgIHByb3RlY3RlZCBfdGFiSW5kZXggPSBudWxsO1xuICAgIHByb3RlY3RlZCBfc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICBwcm90ZWN0ZWQgX3NlbGVjdGVkSXRlbUNsYXNzID0gJ2lneC1jaGlwX19pdGVtLS1zZWxlY3RlZCc7XG4gICAgcHJvdGVjdGVkIF9tb3ZlZFdoaWxlUmVtb3ZpbmcgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9yZXNvdXJjZVN0cmluZ3MgPSBDdXJyZW50UmVzb3VyY2VTdHJpbmdzLkNoaXBSZXNTdHJpbmdzO1xuXG4gICAgY29uc3RydWN0b3IocHVibGljIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsIHByaXZhdGUgcmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PiwgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KERpc3BsYXlEZW5zaXR5VG9rZW4pIHByb3RlY3RlZCBfZGlzcGxheURlbnNpdHlPcHRpb25zOiBJRGlzcGxheURlbnNpdHlPcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKF9kaXNwbGF5RGVuc2l0eU9wdGlvbnMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMga2V5RXZlbnQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgdGhpcy5vbkNoaXBLZXlEb3duKGV2ZW50KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIHNlbGVjdENsYXNzKGNvbmRpdGlvbjogYm9vbGVhbik6IGFueSB7XG4gICAgICAgIGNvbnN0IFNFTEVDVF9DTEFTUyA9ICdpZ3gtY2hpcF9fc2VsZWN0JztcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgW1NFTEVDVF9DTEFTU106IGNvbmRpdGlvbixcbiAgICAgICAgICAgIFtgJHtTRUxFQ1RfQ0xBU1N9LS1oaWRkZW5gXTogIWNvbmRpdGlvblxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHB1YmxpYyBvblNlbGVjdFRyYW5zaXRpb25Eb25lKGV2ZW50KSB7XG4gICAgICAgIGlmICghIWV2ZW50LnRhcmdldC50YWdOYW1lKSB7XG4gICAgICAgICAgICAvLyBUcmlnZ2VyIG9uU2VsZWN0aW9uRG9uZSBvbiB3aGVuIGB3aWR0aGAgcHJvcGVydHkgaXMgY2hhbmdlZCBhbmQgdGhlIHRhcmdldCBpcyB2YWxpZCBlbGVtZW50KG5vdCBjb21tZW50KS5cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDaGFuZ2VkLmVtaXQoe1xuICAgICAgICAgICAgICAgIG93bmVyOiB0aGlzLFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGV2ZW50XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25DaGlwS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBjb25zdCBrZXlEb3duQXJnczogSUNoaXBLZXlEb3duRXZlbnRBcmdzID0ge1xuICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogZXZlbnQsXG4gICAgICAgICAgICBvd25lcjogdGhpcyxcbiAgICAgICAgICAgIGNhbmNlbDogZmFsc2VcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmtleURvd24uZW1pdChrZXlEb3duQXJncyk7XG4gICAgICAgIGlmIChrZXlEb3duQXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgoZXZlbnQua2V5ID09PSAnRGVsZXRlJyB8fCBldmVudC5rZXkgPT09ICdEZWwnKSAmJiB0aGlzLnJlbW92YWJsZSkge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmUuZW1pdCh7XG4gICAgICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogZXZlbnQsXG4gICAgICAgICAgICAgICAgb3duZXI6IHRoaXNcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKChldmVudC5rZXkgPT09ICcgJyB8fCBldmVudC5rZXkgPT09ICdTcGFjZWJhcicpICYmIHRoaXMuc2VsZWN0YWJsZSAmJiAhdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VTZWxlY3Rpb24oIXRoaXMuc2VsZWN0ZWQsIGV2ZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChldmVudC5rZXkgIT09ICdUYWInKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvblJlbW92ZUJ0bktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJyAnIHx8IGV2ZW50LmtleSA9PT0gJ1NwYWNlYmFyJyB8fCBldmVudC5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlLmVtaXQoe1xuICAgICAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGV2ZW50LFxuICAgICAgICAgICAgICAgIG93bmVyOiB0aGlzXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uUmVtb3ZlTW91c2VEb3duKGV2ZW50OiBQb2ludGVyRXZlbnQgfCBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25SZW1vdmVDbGljayhldmVudDogTW91c2VFdmVudCB8IFRvdWNoRXZlbnQpIHtcbiAgICAgICAgdGhpcy5yZW1vdmUuZW1pdCh7XG4gICAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBldmVudCxcbiAgICAgICAgICAgIG93bmVyOiB0aGlzXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25SZW1vdmVUb3VjaE1vdmUoKSB7XG4gICAgICAgIC8vIFdlIGRvbid0IHJlbW92ZSBjaGlwIGlmIHVzZXIgc3RhcnRpbmcgdG91Y2ggaW50ZXJhY3Rpbmcgb24gdGhlIHJlbW92ZSBidXR0b24gbW92ZXMgdGhlIGNoaXBcbiAgICAgICAgdGhpcy5fbW92ZWRXaGlsZVJlbW92aW5nID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG9uUmVtb3ZlVG91Y2hFbmQoZXZlbnQ6IFRvdWNoRXZlbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9tb3ZlZFdoaWxlUmVtb3ZpbmcpIHtcbiAgICAgICAgICAgIHRoaXMub25SZW1vdmVDbGljayhldmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbW92ZWRXaGlsZVJlbW92aW5nID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gU3RhcnQgY2hpcCBpZ3hEcmFnIGJlaGF2aW9yXG4gICAgcHVibGljIG9uQ2hpcERyYWdTdGFydChldmVudDogSURyYWdTdGFydEV2ZW50QXJncykge1xuICAgICAgICB0aGlzLm1vdmVTdGFydC5lbWl0KHtcbiAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGV2ZW50LFxuICAgICAgICAgICAgb3duZXI6IHRoaXNcbiAgICAgICAgfSk7XG4gICAgICAgIGV2ZW50LmNhbmNlbCA9ICF0aGlzLmRyYWdnYWJsZSB8fCB0aGlzLmRpc2FibGVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25DaGlwRHJhZ0VuZCgpIHtcbiAgICAgICAgaWYgKHRoaXMuYW5pbWF0ZU9uUmVsZWFzZSkge1xuICAgICAgICAgICAgdGhpcy5kcmFnRGlyZWN0aXZlLnRyYW5zaXRpb25Ub09yaWdpbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvbkNoaXBNb3ZlRW5kKGV2ZW50OiBJRHJhZ0Jhc2VFdmVudEFyZ3MpIHtcbiAgICAgICAgLy8gbW92ZUVuZCBpcyB0cmlnZ2VyZWQgYWZ0ZXIgcmV0dXJuIGFuaW1hdGlvbiBoYXMgZmluaXNoZWQuIFRoaXMgaGFwcGVuIHdoZW4gd2UgZHJhZyBhbmQgcmVsZWFzZSB0aGUgY2hpcC5cbiAgICAgICAgdGhpcy5tb3ZlRW5kLmVtaXQoe1xuICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogZXZlbnQsXG4gICAgICAgICAgICBvd25lcjogdGhpc1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZCkge1xuICAgICAgICAgICAgdGhpcy5jaGlwQXJlYS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG9uQ2hpcEdob3N0Q3JlYXRlKCkge1xuICAgICAgICB0aGlzLmhpZGVCYXNlRWxlbWVudCA9IHRoaXMuaGlkZUJhc2VPbkRyYWc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvbkNoaXBHaG9zdERlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuaGlkZUJhc2VFbGVtZW50ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvbkNoaXBEcmFnQ2xpY2tlZChldmVudDogSURyYWdCYXNlRXZlbnRBcmdzKSB7XG4gICAgICAgIGNvbnN0IGNsaWNrRXZlbnRBcmdzOiBJQ2hpcENsaWNrRXZlbnRBcmdzID0ge1xuICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogZXZlbnQsXG4gICAgICAgICAgICBvd25lcjogdGhpcyxcbiAgICAgICAgICAgIGNhbmNlbDogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5jaGlwQ2xpY2suZW1pdChjbGlja0V2ZW50QXJncyk7XG5cbiAgICAgICAgaWYgKCFjbGlja0V2ZW50QXJncy5jYW5jZWwgJiYgdGhpcy5zZWxlY3RhYmxlICYmICF0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZVNlbGVjdGlvbighdGhpcy5zZWxlY3RlZCwgZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIEVuZCBjaGlwIGlneERyYWcgYmVoYXZpb3JcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIFN0YXJ0IGNoaXAgaWd4RHJvcCBiZWhhdmlvclxuICAgIHB1YmxpYyBvbkNoaXBEcmFnRW50ZXJIYW5kbGVyKGV2ZW50OiBJRHJvcEJhc2VFdmVudEFyZ3MpIHtcbiAgICAgICAgaWYgKHRoaXMuZHJhZ0RpcmVjdGl2ZSA9PT0gZXZlbnQuZHJhZykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXZlbnRBcmdzOiBJQ2hpcEVudGVyRHJhZ0FyZWFFdmVudEFyZ3MgPSB7XG4gICAgICAgICAgICBvd25lcjogdGhpcyxcbiAgICAgICAgICAgIGRyYWdDaGlwOiBldmVudC5kcmFnLmRhdGE/LmNoaXAsXG4gICAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBldmVudFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmRyYWdFbnRlci5lbWl0KGV2ZW50QXJncyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvbkNoaXBEcmFnTGVhdmVIYW5kbGVyKGV2ZW50OiBJRHJvcEJhc2VFdmVudEFyZ3MpIHtcbiAgICAgICAgaWYgKHRoaXMuZHJhZ0RpcmVjdGl2ZSA9PT0gZXZlbnQuZHJhZykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXZlbnRBcmdzOiBJQ2hpcEVudGVyRHJhZ0FyZWFFdmVudEFyZ3MgPSB7XG4gICAgICAgICAgICBvd25lcjogdGhpcyxcbiAgICAgICAgICAgIGRyYWdDaGlwOiBldmVudC5kcmFnLmRhdGE/LmNoaXAsXG4gICAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBldmVudFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmRyYWdMZWF2ZS5lbWl0KGV2ZW50QXJncyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvbkNoaXBEcm9wKGV2ZW50OiBJRHJvcERyb3BwZWRFdmVudEFyZ3MpIHtcbiAgICAgICAgLy8gQ2FuY2VsIHRoZSBkZWZhdWx0IGRyb3AgbG9naWNcbiAgICAgICAgZXZlbnQuY2FuY2VsID0gdHJ1ZTtcbiAgICAgICAgaWYgKHRoaXMuZHJhZ0RpcmVjdGl2ZSA9PT0gZXZlbnQuZHJhZykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXZlbnRBcmdzOiBJQ2hpcEVudGVyRHJhZ0FyZWFFdmVudEFyZ3MgPSB7XG4gICAgICAgICAgICBvd25lcjogdGhpcyxcbiAgICAgICAgICAgIGRyYWdDaGlwOiBldmVudC5kcmFnLmRhdGE/LmNoaXAsXG4gICAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBldmVudFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmRyYWdEcm9wLmVtaXQoZXZlbnRBcmdzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG9uQ2hpcE92ZXJIYW5kbGVyKGV2ZW50OiBJRHJvcEJhc2VFdmVudEFyZ3MpIHtcbiAgICAgICAgaWYgKHRoaXMuZHJhZ0RpcmVjdGl2ZSA9PT0gZXZlbnQuZHJhZykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXZlbnRBcmdzOiBJQ2hpcEVudGVyRHJhZ0FyZWFFdmVudEFyZ3MgPSB7XG4gICAgICAgICAgICBvd25lcjogdGhpcyxcbiAgICAgICAgICAgIGRyYWdDaGlwOiBldmVudC5kcmFnLmRhdGE/LmNoaXAsXG4gICAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBldmVudFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmRyYWdPdmVyLmVtaXQoZXZlbnRBcmdzKTtcbiAgICB9XG4gICAgLy8gRW5kIGNoaXAgaWd4RHJvcCBiZWhhdmlvclxuXG4gICAgcHJvdGVjdGVkIGNoYW5nZVNlbGVjdGlvbihuZXdWYWx1ZTogYm9vbGVhbiwgc3JjRXZlbnQgPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IG9uU2VsZWN0QXJnczogSUNoaXBTZWxlY3RFdmVudEFyZ3MgPSB7XG4gICAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBzcmNFdmVudCxcbiAgICAgICAgICAgIG93bmVyOiB0aGlzLFxuICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgY2FuY2VsOiBmYWxzZVxuICAgICAgICB9O1xuXG4gICAgICAgIGZyb21FdmVudCh0aGlzLnNlbGVjdENvbnRhaW5lci5uYXRpdmVFbGVtZW50LCAndHJhbnNpdGlvbmVuZCcpXG4gICAgICAgICAgICAucGlwZShmaWx0ZXI8VHJhbnNpdGlvbkV2ZW50PihldmVudCA9PiBldmVudC5wcm9wZXJ0eU5hbWUgPT09ICd3aWR0aCcpLCB0YWtlKDEpKVxuICAgICAgICAgICAgLnN1YnNjcmliZShldmVudCA9PiB0aGlzLm9uU2VsZWN0VHJhbnNpdGlvbkRvbmUoZXZlbnQpKTtcblxuICAgICAgICBpZiAobmV3VmFsdWUgJiYgIXRoaXMuX3NlbGVjdGVkKSB7XG4gICAgICAgICAgICBvblNlbGVjdEFyZ3Muc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENoYW5naW5nLmVtaXQob25TZWxlY3RBcmdzKTtcblxuICAgICAgICAgICAgaWYgKCFvblNlbGVjdEFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmNoaXBBcmVhLm5hdGl2ZUVsZW1lbnQsIHRoaXMuX3NlbGVjdGVkSXRlbUNsYXNzKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RlZCA9IG5ld1ZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDaGFuZ2UuZW1pdCh0aGlzLl9zZWxlY3RlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoIW5ld1ZhbHVlICYmIHRoaXMuX3NlbGVjdGVkKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2hhbmdpbmcuZW1pdChvblNlbGVjdEFyZ3MpO1xuXG4gICAgICAgICAgICBpZiAoIW9uU2VsZWN0QXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuY2hpcEFyZWEubmF0aXZlRWxlbWVudCwgdGhpcy5fc2VsZWN0ZWRJdGVtQ2xhc3MpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkID0gbmV3VmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENoYW5nZS5lbWl0KHRoaXMuX3NlbGVjdGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIjxkaXYgI2NoaXBBcmVhIGNsYXNzPVwiaWd4LWNoaXBfX2l0ZW1cIlxuICAgIFtpZ3hEcmFnXT1cIntjaGlwOiB0aGlzfVwiXG4gICAgW3N0eWxlLnZpc2liaWxpdHldPSdoaWRlQmFzZUVsZW1lbnQgPyBcImhpZGRlblwiIDogXCJ2aXNpYmxlXCInXG4gICAgW2dob3N0Q2xhc3NdPVwiZ2hvc3RDbGFzc1wiXG4gICAgKGRyYWdTdGFydCk9XCJvbkNoaXBEcmFnU3RhcnQoJGV2ZW50KVwiXG4gICAgKGdob3N0Q3JlYXRlKT1cIm9uQ2hpcEdob3N0Q3JlYXRlKClcIlxuICAgIChnaG9zdERlc3Ryb3kpPVwib25DaGlwR2hvc3REZXN0cm95KClcIlxuICAgIChkcmFnRW5kKT1cIm9uQ2hpcERyYWdFbmQoKVwiXG4gICAgKHRyYW5zaXRpb25lZCk9XCJvbkNoaXBNb3ZlRW5kKCRldmVudClcIlxuICAgIChkcmFnQ2xpY2spPVwib25DaGlwRHJhZ0NsaWNrZWQoJGV2ZW50KVwiXG4gICAgaWd4RHJvcFxuICAgIChlbnRlcik9XCJvbkNoaXBEcmFnRW50ZXJIYW5kbGVyKCRldmVudClcIlxuICAgIChsZWF2ZSk9IFwib25DaGlwRHJhZ0xlYXZlSGFuZGxlcigkZXZlbnQpXCJcbiAgICAob3Zlcik9XCJvbkNoaXBPdmVySGFuZGxlcigkZXZlbnQpXCJcbiAgICAoZHJvcHBlZCk9XCJvbkNoaXBEcm9wKCRldmVudClcIj5cblxuICAgIDxkaXYgI3NlbGVjdENvbnRhaW5lciBbbmdDbGFzc109XCJzZWxlY3RDbGFzcyhzZWxlY3RlZClcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNlbGVjdEljb25UZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuXG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiaWd4LXByZWZpeCxbaWd4UHJlZml4XVwiPjwvbmctY29udGVudD5cblxuICAgIDxkaXYgY2xhc3M9XCJpZ3gtY2hpcF9fY29udGVudFwiPlxuICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJpZ3gtc3VmZml4LFtpZ3hTdWZmaXhdXCI+PC9uZy1jb250ZW50PlxuXG4gICAgPGRpdiBjbGFzcz1cImlneC1jaGlwX19yZW1vdmVcIiAqbmdJZj1cInJlbW92YWJsZVwiXG4gICAgICAgIFthdHRyLnRhYkluZGV4XT1cInRhYkluZGV4XCJcbiAgICAgICAgKGtleWRvd24pPVwib25SZW1vdmVCdG5LZXlEb3duKCRldmVudClcIlxuICAgICAgICAocG9pbnRlcmRvd24pPVwib25SZW1vdmVNb3VzZURvd24oJGV2ZW50KVwiXG4gICAgICAgIChtb3VzZWRvd24pPVwib25SZW1vdmVNb3VzZURvd24oJGV2ZW50KVwiXG4gICAgICAgIChjbGljayk9XCJvblJlbW92ZUNsaWNrKCRldmVudClcIlxuICAgICAgICAodG91Y2htb3ZlKT1cIm9uUmVtb3ZlVG91Y2hNb3ZlKClcIlxuICAgICAgICAodG91Y2hlbmQpPVwib25SZW1vdmVUb3VjaEVuZCgkZXZlbnQpXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJyZW1vdmVCdXR0b25UZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdFNlbGVjdEljb24+XG4gICAgPGlneC1pY29uIFthdHRyLmFyaWEtbGFiZWxdPVwicmVzb3VyY2VTdHJpbmdzLmlneF9jaGlwX3NlbGVjdFwiPmRvbmU8L2lneC1pY29uPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkZWZhdWx0UmVtb3ZlSWNvbj5cbiAgICA8aWd4LWljb24gW2F0dHIuYXJpYS1sYWJlbF09XCJyZXNvdXJjZVN0cmluZ3MuaWd4X2NoaXBfcmVtb3ZlXCI+Y2FuY2VsPC9pZ3gtaWNvbj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
751
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hpcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvY2hpcHMvY2hpcC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvY2hpcHMvY2hpcC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUVULFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxFQUNYLFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFFVCxXQUFXLEVBQ1gsTUFBTSxFQUNOLFFBQVEsRUFFWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQTBCLG1CQUFtQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekcsT0FBTyxFQUNILGdCQUFnQixFQUtuQixNQUFNLDZDQUE2QyxDQUFDO0FBR3JELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7O0FBeUI5QyxJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFFaEI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFLSCxNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsa0JBQWtCO0lBZ2ZwRCxZQUFtQixHQUFzQixFQUFVLEdBQTRCLEVBQVUsUUFBbUIsRUFDckQsc0JBQThDO1FBQ2pHLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBRmYsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFBVSxRQUFHLEdBQUgsR0FBRyxDQUF5QjtRQUFVLGFBQVEsR0FBUixRQUFRLENB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QURkLFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIElucHV0LFxuICAgIE91dHB1dCxcbiAgICBWaWV3Q2hpbGQsXG4gICAgUmVuZGVyZXIyLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIEluamVjdCxcbiAgICBPcHRpb25hbCxcbiAgICBPbkRlc3Ryb3lcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJRGlzcGxheURlbnNpdHlPcHRpb25zLCBEaXNwbGF5RGVuc2l0eVRva2VuLCBEaXNwbGF5RGVuc2l0eUJhc2UgfSBmcm9tICcuLi9jb3JlL2Rpc3BsYXlEZW5zaXR5JztcbmltcG9ydCB7XG4gICAgSWd4RHJhZ0RpcmVjdGl2ZSxcbiAgICBJRHJhZ0Jhc2VFdmVudEFyZ3MsXG4gICAgSURyYWdTdGFydEV2ZW50QXJncyxcbiAgICBJRHJvcEJhc2VFdmVudEFyZ3MsXG4gICAgSURyb3BEcm9wcGVkRXZlbnRBcmdzXG59IGZyb20gJy4uL2RpcmVjdGl2ZXMvZHJhZy1kcm9wL2RyYWctZHJvcC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSUJhc2VFdmVudEFyZ3MgfSBmcm9tICcuLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IElDaGlwUmVzb3VyY2VTdHJpbmdzIH0gZnJvbSAnLi4vY29yZS9pMThuL2NoaXAtcmVzb3VyY2VzJztcbmltcG9ydCB7IEN1cnJlbnRSZXNvdXJjZVN0cmluZ3MgfSBmcm9tICcuLi9jb3JlL2kxOG4vcmVzb3VyY2VzJztcbmltcG9ydCB7IGZyb21FdmVudCwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZSwgZmlsdGVyIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElCYXNlQ2hpcEV2ZW50QXJncyBleHRlbmRzIElCYXNlRXZlbnRBcmdzIHtcbiAgICBvcmlnaW5hbEV2ZW50OiBJRHJhZ0Jhc2VFdmVudEFyZ3MgfCBJRHJvcEJhc2VFdmVudEFyZ3MgfCBLZXlib2FyZEV2ZW50IHwgTW91c2VFdmVudCB8IFRvdWNoRXZlbnQ7XG4gICAgb3duZXI6IElneENoaXBDb21wb25lbnQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNoaXBDbGlja0V2ZW50QXJncyBleHRlbmRzIElCYXNlQ2hpcEV2ZW50QXJncyB7XG4gICAgY2FuY2VsOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElDaGlwS2V5RG93bkV2ZW50QXJncyBleHRlbmRzIElCYXNlQ2hpcEV2ZW50QXJncyB7XG4gICAgb3JpZ2luYWxFdmVudDogS2V5Ym9hcmRFdmVudDtcbiAgICBjYW5jZWw6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNoaXBFbnRlckRyYWdBcmVhRXZlbnRBcmdzIGV4dGVuZHMgSUJhc2VDaGlwRXZlbnRBcmdzIHtcbiAgICBkcmFnQ2hpcDogSWd4Q2hpcENvbXBvbmVudDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQ2hpcFNlbGVjdEV2ZW50QXJncyBleHRlbmRzIElCYXNlQ2hpcEV2ZW50QXJncyB7XG4gICAgY2FuY2VsOiBib29sZWFuO1xuICAgIHNlbGVjdGVkOiBib29sZWFuO1xufVxuXG5sZXQgQ0hJUF9JRCA9IDA7XG5cbi8qKlxuICogQ2hpcCBpcyBjb21wYWN0IHZpc3VhbCBjb21wb25lbnQgdGhhdCBkaXNwbGF5cyBpbmZvcm1hdGlvbiBpbiBhbiBvYnJvdW5kLlxuICpcbiAqIEBpZ3hNb2R1bGUgSWd4Q2hpcHNNb2R1bGVcbiAqXG4gKiBAaWd4VGhlbWUgaWd4LWNoaXAtdGhlbWVcbiAqXG4gKiBAaWd4S2V5d29yZHMgY2hpcFxuICpcbiAqIEBpZ3hHcm91cCBkaXNwbGF5XG4gKlxuICogQHJlbWFya3NcbiAqIFRoZSBJZ25pdGUgVUkgQ2hpcCBjYW4gYmUgdGVtcGxhdGVkLCBkZWxldGVkLCBhbmQgc2VsZWN0ZWQuXG4gKiBNdWx0aXBsZSBjaGlwcyBjYW4gYmUgcmVvcmRlcmVkIGFuZCB2aXN1YWxseSBjb25uZWN0ZWQgdG8gZWFjaCBvdGhlci5cbiAqIENoaXBzIHJlc2lkZSBpbiBhIGNvbnRhaW5lciBjYWxsZWQgY2hpcHMgYXJlYSB3aGljaCBpcyByZXNwb25zaWJsZSBmb3IgbWFuYWdpbmcgdGhlIGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZSBjaGlwcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgaHRtbFxuICogPGlneC1jaGlwIGNsYXNzPVwiY2hpcFN0eWxlXCIgW2lkXT1cIjkwMVwiIFtkcmFnZ2FibGVdPVwidHJ1ZVwiIFtyZW1vdmFibGVdPVwidHJ1ZVwiIChyZW1vdmUpPVwiY2hpcFJlbW92ZWQoJGV2ZW50KVwiPlxuICogICAgPGlneC1hdmF0YXIgY2xhc3M9XCJjaGlwLWF2YXRhci1yZXNpemVkXCIgaWd4UHJlZml4IFtyb3VuZFNoYXBlXT1cInRydWVcIj48L2lneC1hdmF0YXI+XG4gKiA8L2lneC1jaGlwPlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnaWd4LWNoaXAnLFxuICAgIHRlbXBsYXRlVXJsOiAnY2hpcC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgSWd4Q2hpcENvbXBvbmVudCBleHRlbmRzIERpc3BsYXlEZW5zaXR5QmFzZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5IHRoYXQgc2V0cyB0aGUgdmFsdWUgb2YgYGlkYCBhdHRyaWJ1dGUuIElmIG5vdCBwcm92aWRlZCBpdCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jaGlwIFtpZF09XCInaWd4LWNoaXAtMSdcIj48L2lneC1jaGlwPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5pZCcpXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaWQgPSBgaWd4LWNoaXAtJHtDSElQX0lEKyt9YDtcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGByb2xlYCBhdHRyaWJ1dGUgb2YgdGhlIGNoaXAuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgY2hpcFJvbGUgPSB0aGlzLmNoaXAucm9sZTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIucm9sZScpXG4gICAgcHVibGljIHJvbGUgPSAnb3B0aW9uJztcblxuICAgIC8qKlxuICAgICAqIEFuIEBJbnB1dCBwcm9wZXJ0eSB0aGF0IHNldHMgdGhlIHZhbHVlIG9mIGB0YWJpbmRleGAgYXR0cmlidXRlLiBJZiBub3QgcHJvdmlkZWQgaXQgd2lsbCB1c2UgdGhlIGVsZW1lbnQncyB0YWJpbmRleCBpZiBzZXQuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNoaXAgW2lkXT1cIidpZ3gtY2hpcC0xJ1wiIFt0YWJJbmRleF09XCIxXCI+PC9pZ3gtY2hpcD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIudGFiSW5kZXgnKVxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCB0YWJJbmRleCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX3RhYkluZGV4ID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB0YWJJbmRleCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX3RhYkluZGV4ICE9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGFiSW5kZXg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICF0aGlzLmRpc2FibGVkID8gMCA6IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5IHRoYXQgc3RvcmVzIGRhdGEgcmVsYXRlZCB0byB0aGUgY2hpcC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2hpcCBbZGF0YV09XCJ7IHZhbHVlOiAnQ291bnRyeScgfVwiPjwvaWd4LWNoaXA+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZGF0YTogYW55O1xuXG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5IHRoYXQgZGVmaW5lcyBpZiB0aGUgYElneENoaXBDb21wb25lbnRgIGNhbiBiZSBkcmFnZ2VkIGluIG9yZGVyIHRvIGNoYW5nZSBpdCdzIHBvc2l0aW9uLlxuICAgICAqIEJ5IGRlZmF1bHQgaXQgaXMgc2V0IHRvIGZhbHNlLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jaGlwIFtpZF09XCInaWd4LWNoaXAtMSdcIiBbZHJhZ2dhYmxlXT1cInRydWVcIj48L2lneC1jaGlwPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGRyYWdnYWJsZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5IHRoYXQgZW5hYmxlcy9kaXNhYmxlcyB0aGUgZHJhZ2dhYmxlIGVsZW1lbnQgYW5pbWF0aW9uIHdoZW4gdGhlIGVsZW1lbnQgaXMgcmVsZWFzZWQuXG4gICAgICogQnkgZGVmYXVsdCBpdCdzIHNldCB0byB0cnVlLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jaGlwIFtpZF09XCInaWd4LWNoaXAtMSdcIiBbZHJhZ2dhYmxlXT1cInRydWVcIiBbYW5pbWF0ZU9uUmVsZWFzZV09XCJmYWxzZVwiPjwvaWd4LWNoaXA+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgYW5pbWF0ZU9uUmVsZWFzZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBBbiBASW5wdXQgcHJvcGVydHkgdGhhdCBlbmFibGVzL2Rpc2FibGVzIHRoZSBoaWRpbmcgb2YgdGhlIGJhc2UgZWxlbWVudCB0aGF0IGhhcyBiZWVuIGRyYWdnZWQuXG4gICAgICogQnkgZGVmYXVsdCBpdCdzIHNldCB0byB0cnVlLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jaGlwIFtpZF09XCInaWd4LWNoaXAtMSdcIiBbZHJhZ2dhYmxlXT1cInRydWVcIiBbaGlkZUJhc2VPbkRyYWddPVwiZmFsc2VcIj48L2lneC1jaGlwPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGhpZGVCYXNlT25EcmFnID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEFuIEBJbnB1dCBwcm9wZXJ0eSB0aGF0IGRlZmluZXMgaWYgdGhlIGBJZ3hDaGlwQ29tcG9uZW50YCBzaG91bGQgcmVuZGVyIHJlbW92ZSBidXR0b24gYW5kIHRocm93IHJlbW92ZSBldmVudHMuXG4gICAgICogQnkgZGVmYXVsdCBpdCBpcyBzZXQgdG8gZmFsc2UuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNoaXAgW2lkXT1cIidpZ3gtY2hpcC0xJ1wiIFtkcmFnZ2FibGVdPVwidHJ1ZVwiIFtyZW1vdmFibGVdPVwidHJ1ZVwiPjwvaWd4LWNoaXA+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcmVtb3ZhYmxlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBBbiBASW5wdXQgcHJvcGVydHkgdGhhdCBvdmVycmlkZXMgdGhlIGRlZmF1bHQgaWNvbiB0aGF0IHRoZSBjaGlwIGFwcGxpZXMgdG8gdGhlIHJlbW92ZSBidXR0b24uXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNoaXAgW2lkXT1cImNoaXAuaWRcIiBbcmVtb3ZhYmxlXT1cInRydWVcIiBbcmVtb3ZlSWNvbl09XCJpY29uVGVtcGxhdGVcIj48L2lneC1jaGlwPlxuICAgICAqIDxuZy10ZW1wbGF0ZSAjaWNvblRlbXBsYXRlPjxpZ3gtaWNvbj5kZWxldGU8L2lneC1pY29uPjwvbmctdGVtcGxhdGU+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcmVtb3ZlSWNvbjogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKlxuICAgICAqIEFuIEBJbnB1dCBwcm9wZXJ0eSB0aGF0IGRlZmluZXMgaWYgdGhlIGBJZ3hDaGlwQ29tcG9uZW50YCBjYW4gYmUgc2VsZWN0ZWQgb24gY2xpY2sgb3IgdGhyb3VnaCBuYXZpZ2F0aW9uLFxuICAgICAqIEJ5IGRlZmF1bHQgaXQgaXMgc2V0IHRvIGZhbHNlLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jaGlwIFtpZF09XCJjaGlwLmlkXCIgW2RyYWdnYWJsZV09XCJ0cnVlXCIgW3JlbW92YWJsZV09XCJ0cnVlXCIgW3NlbGVjdGFibGVdPVwidHJ1ZVwiPjwvaWd4LWNoaXA+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2VsZWN0YWJsZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5IHRoYXQgb3ZlcnJpZGVzIHRoZSBkZWZhdWx0IGljb24gdGhhdCB0aGUgY2hpcCBhcHBsaWVzIHdoZW4gaXQgaXMgc2VsZWN0ZWQuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNoaXAgW2lkXT1cImNoaXAuaWRcIiBbc2VsZWN0YWJsZV09XCJ0cnVlXCIgW3NlbGVjdEljb25dPVwiaWNvblRlbXBsYXRlXCI+PC9pZ3gtY2hpcD5cbiAgICAgKiA8bmctdGVtcGxhdGUgI2ljb25UZW1wbGF0ZT48aWd4LWljb24+ZG9uZV9vdXRsaW5lPC9pZ3gtaWNvbj48L25nLXRlbXBsYXRlPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNlbGVjdEljb246IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgY2xhc3MgPSAnJztcblxuICAgIC8qKlxuICAgICAqIEFuIEBJbnB1dCBwcm9wZXJ0eSB0aGF0IGRlZmluZXMgaWYgdGhlIGBJZ3hDaGlwQ29tcG9uZW50YCBpcyBkaXNhYmxlZC4gV2hlbiBkaXNhYmxlZCBpdCByZXN0cmljdHMgdXNlciBpbnRlcmFjdGlvbnNcbiAgICAgKiBsaWtlIGZvY3VzaW5nIG9uIGNsaWNrIG9yIHRhYiwgc2VsZWN0aW9uIG9uIGNsaWNrIG9yIFNwYWNlLCBkcmFnZ2luZy5cbiAgICAgKiBCeSBkZWZhdWx0IGl0IGlzIHNldCB0byBmYWxzZS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2hpcCBbaWRdPVwiY2hpcC5pZFwiIFtkaXNhYmxlZF09XCJ0cnVlXCI+PC9pZ3gtY2hpcD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgYElneENoaXBDb21wb25lbnRgIHNlbGVjdGVkIHN0YXRlLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jaGlwICNteUNoaXAgW2lkXT1cIidpZ3gtY2hpcC0xJ1wiIFtzZWxlY3RhYmxlXT1cInRydWVcIiBbc2VsZWN0ZWRdPVwidHJ1ZVwiPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVHdvLXdheSBkYXRhIGJpbmRpbmc6XG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2hpcCAjbXlDaGlwIFtpZF09XCInaWd4LWNoaXAtMSdcIiBbc2VsZWN0YWJsZV09XCJ0cnVlXCIgWyhzZWxlY3RlZCldPVwibW9kZWwuaXNTZWxlY3RlZFwiPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLXNlbGVjdGVkJylcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgc2VsZWN0ZWQobmV3VmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VTZWxlY3Rpb24obmV3VmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgaWYgdGhlIGBJZ3hDaGlwQ29tcG9uZW50YCBpcyBzZWxlY3RlZC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIEBWaWV3Q2hpbGQoJ215Q2hpcCcpXG4gICAgICogcHVibGljIGNoaXA6IElneENoaXBDb21wb25lbnQ7XG4gICAgICogc2VsZWN0ZWRDaGlwKCl7XG4gICAgICogICAgIGxldCBzZWxlY3RlZENoaXAgPSB0aGlzLmNoaXAuc2VsZWN0ZWQ7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgc2VsZWN0ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHNlbGVjdGVkQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5IHRoYXQgc2V0cyB0aGUgYElneENoaXBDb21wb25lbnRgIGJhY2tncm91bmQgY29sb3IuXG4gICAgICogVGhlIGBjb2xvcmAgcHJvcGVydHkgc3VwcG9ydHMgc3RyaW5nLCByZ2IsIGhleC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2hpcCAjbXlDaGlwIFtpZF09XCInaWd4LWNoaXAtMSdcIiBbY29sb3JdPVwiJyNmZjAwMDAnXCI+PC9pZ3gtY2hpcD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgY29sb3IobmV3Q29sb3IpIHtcbiAgICAgICAgdGhpcy5jaGlwQXJlYS5uYXRpdmVFbGVtZW50LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IG5ld0NvbG9yO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGJhY2tncm91bmQgY29sb3Igb2YgdGhlIGBJZ3hDaGlwQ29tcG9uZW50YC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIEBWaWV3Q2hpbGQoJ215Q2hpcCcpXG4gICAgICogcHVibGljIGNoaXA6IElneENoaXBDb21wb25lbnQ7XG4gICAgICogbmdBZnRlclZpZXdJbml0KCl7XG4gICAgICogICAgIGxldCBjaGlwQ29sb3IgPSB0aGlzLmNoaXAuY29sb3I7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgY29sb3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoaXBBcmVhLm5hdGl2ZUVsZW1lbnQuc3R5bGUuYmFja2dyb3VuZENvbG9yO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFuIGFjY2Vzc29yIHRoYXQgc2V0cyB0aGUgcmVzb3VyY2Ugc3RyaW5ncy5cbiAgICAgKiBCeSBkZWZhdWx0IGl0IHVzZXMgRU4gcmVzb3VyY2VzLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCByZXNvdXJjZVN0cmluZ3ModmFsdWU6IElDaGlwUmVzb3VyY2VTdHJpbmdzKSB7XG4gICAgICAgIHRoaXMuX3Jlc291cmNlU3RyaW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX3Jlc291cmNlU3RyaW5ncywgdmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFuIGFjY2Vzc29yIHRoYXQgcmV0dXJucyB0aGUgcmVzb3VyY2Ugc3RyaW5ncy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHJlc291cmNlU3RyaW5ncygpOiBJQ2hpcFJlc291cmNlU3RyaW5ncyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNvdXJjZVN0cmluZ3M7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRW1pdHMgYW4gZXZlbnQgd2hlbiB0aGUgYElneENoaXBDb21wb25lbnRgIG1vdmluZyBzdGFydHMuXG4gICAgICogUmV0dXJucyB0aGUgbW92aW5nIGBJZ3hDaGlwQ29tcG9uZW50YC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2hpcCAjbXlDaGlwIFtpZF09XCInaWd4LWNoaXAtMSdcIiBbZHJhZ2dhYmxlXT1cInRydWVcIiAobW92ZVN0YXJ0KT1cIm1vdmVTdGFydGVkKCRldmVudClcIj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgbW92ZVN0YXJ0ID0gbmV3IEV2ZW50RW1pdHRlcjxJQmFzZUNoaXBFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0cyBhbiBldmVudCB3aGVuIHRoZSBgSWd4Q2hpcENvbXBvbmVudGAgbW92aW5nIGVuZHMuXG4gICAgICogUmV0dXJucyB0aGUgbW92ZWQgYElneENoaXBDb21wb25lbnRgLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jaGlwICNteUNoaXAgW2lkXT1cIidpZ3gtY2hpcC0xJ1wiIFtkcmFnZ2FibGVdPVwidHJ1ZVwiIChtb3ZlRW5kKT1cIm1vdmVFbmRlZCgkZXZlbnQpXCI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG1vdmVFbmQgPSBuZXcgRXZlbnRFbWl0dGVyPElCYXNlQ2hpcEV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXRzIGFuIGV2ZW50IHdoZW4gdGhlIGBJZ3hDaGlwQ29tcG9uZW50YCBpcyByZW1vdmVkLlxuICAgICAqIFJldHVybnMgdGhlIHJlbW92ZWQgYElneENoaXBDb21wb25lbnRgLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jaGlwICNteUNoaXAgW2lkXT1cIidpZ3gtY2hpcC0xJ1wiIFtkcmFnZ2FibGVdPVwidHJ1ZVwiIChyZW1vdmUpPVwicmVtb3ZlKCRldmVudClcIj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgcmVtb3ZlID0gbmV3IEV2ZW50RW1pdHRlcjxJQmFzZUNoaXBFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0cyBhbiBldmVudCB3aGVuIHRoZSBgSWd4Q2hpcENvbXBvbmVudGAgaXMgY2xpY2tlZC5cbiAgICAgKiBSZXR1cm5zIHRoZSBjbGlja2VkIGBJZ3hDaGlwQ29tcG9uZW50YCwgd2hldGhlciB0aGUgZXZlbnQgc2hvdWxkIGJlIGNhbmNlbGVkLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jaGlwICNteUNoaXAgW2lkXT1cIidpZ3gtY2hpcC0xJ1wiIFtkcmFnZ2FibGVdPVwidHJ1ZVwiIChjbGljayk9XCJjaGlwQ2xpY2soJGV2ZW50KVwiPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBjaGlwQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPElDaGlwQ2xpY2tFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0cyBldmVudCB3aGVuIHRoZSBgSWd4Q2hpcENvbXBvbmVudGAgaXMgc2VsZWN0ZWQvZGVzZWxlY3RlZC5cbiAgICAgKiBSZXR1cm5zIHRoZSBzZWxlY3RlZCBjaGlwIHJlZmVyZW5jZSwgd2hldGhlciB0aGUgZXZlbnQgc2hvdWxkIGJlIGNhbmNlbGVkLCB3aGF0IGlzIHRoZSBuZXh0IHNlbGVjdGlvbiBzdGF0ZSBhbmRcbiAgICAgKiB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQgYnkgaW50ZXJhY3Rpb24gYG9yaWdpbmFsRXZlbnRgIGlzIHByb3ZpZGVkLCBvdGhlcndpc2UgYG9yaWdpbmFsRXZlbnRgIGlzIGBudWxsYC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2hpcCAjbXlDaGlwIFtpZF09XCInaWd4LWNoaXAtMSdcIiBbc2VsZWN0YWJsZV09XCJ0cnVlXCIgKHNlbGVjdGVkQ2hhbmdpbmcpPVwiY2hpcFNlbGVjdCgkZXZlbnQpXCI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHNlbGVjdGVkQ2hhbmdpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPElDaGlwU2VsZWN0RXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHMgZXZlbnQgd2hlbiB0aGUgYElneENoaXBDb21wb25lbnRgIGlzIHNlbGVjdGVkL2Rlc2VsZWN0ZWQgYW5kIGFueSByZWxhdGVkIGFuaW1hdGlvbnMgYW5kIHRyYW5zaXRpb25zIGFsc28gZW5kLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jaGlwICNteUNoaXAgW2lkXT1cIidpZ3gtY2hpcC0xJ1wiIFtzZWxlY3RhYmxlXT1cInRydWVcIiAoc2VsZWN0ZWRDaGFuZ2VkKT1cImNoaXBTZWxlY3RFbmQoJGV2ZW50KVwiPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBzZWxlY3RlZENoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPElCYXNlQ2hpcEV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXRzIGFuIGV2ZW50IHdoZW4gdGhlIGBJZ3hDaGlwQ29tcG9uZW50YCBrZXlib2FyZCBuYXZpZ2F0aW9uIGlzIGJlaW5nIHVzZWQuXG4gICAgICogUmV0dXJucyB0aGUgZm9jdXNlZC9zZWxlY3RlZCBgSWd4Q2hpcENvbXBvbmVudGAsIHdoZXRoZXIgdGhlIGV2ZW50IHNob3VsZCBiZSBjYW5jZWxlZCxcbiAgICAgKiBpZiB0aGUgYGFsdGAsIGBzaGlmdGAgb3IgYGNvbnRyb2xgIGtleSBpcyBwcmVzc2VkIGFuZCB0aGUgcHJlc3NlZCBrZXkgbmFtZS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2hpcCAjbXlDaGlwIFtpZF09XCInaWd4LWNoaXAtMSdcIiBbZHJhZ2dhYmxlXT1cInRydWVcIiAoa2V5RG93bik9XCJjaGlwS2V5RG93bigkZXZlbnQpXCI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGtleURvd24gPSBuZXcgRXZlbnRFbWl0dGVyPElDaGlwS2V5RG93bkV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXRzIGFuIGV2ZW50IHdoZW4gdGhlIGBJZ3hDaGlwQ29tcG9uZW50YCBoYXMgZW50ZXJlZCB0aGUgYElneENoaXBzQXJlYUNvbXBvbmVudGAuXG4gICAgICogUmV0dXJucyB0aGUgdGFyZ2V0IGBJZ3hDaGlwQ29tcG9uZW50YCwgdGhlIGRyYWcgYElneENoaXBDb21wb25lbnRgLCBhcyAgd2VsbCBhc1xuICAgICAqIHRoZSBvcmlnaW5hbCBkcm9wIGV2ZW50IGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2hpcCAjbXlDaGlwIFtpZF09XCInaWd4LWNoaXAtMSdcIiBbZHJhZ2dhYmxlXT1cInRydWVcIiAoZHJhZ0VudGVyKT1cImNoaXBFbnRlcigkZXZlbnQpXCI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGRyYWdFbnRlciA9IG5ldyBFdmVudEVtaXR0ZXI8SUNoaXBFbnRlckRyYWdBcmVhRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHMgYW4gZXZlbnQgd2hlbiB0aGUgYElneENoaXBDb21wb25lbnRgIGhhcyBsZWZ0IHRoZSBgSWd4Q2hpcHNBcmVhQ29tcG9uZW50YC5cbiAgICAgKiBSZXR1cm5zIHRoZSB0YXJnZXQgYElneENoaXBDb21wb25lbnRgLCB0aGUgZHJhZyBgSWd4Q2hpcENvbXBvbmVudGAsIGFzICB3ZWxsIGFzXG4gICAgICogdGhlIG9yaWdpbmFsIGRyb3AgZXZlbnQgYXJndW1lbnRzLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jaGlwICNteUNoaXAgW2lkXT1cIidpZ3gtY2hpcC0xJ1wiIFtkcmFnZ2FibGVdPVwidHJ1ZVwiIChkcmFnTGVhdmUpPVwiY2hpcExlYXZlKCRldmVudClcIj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgZHJhZ0xlYXZlID0gbmV3IEV2ZW50RW1pdHRlcjxJQ2hpcEVudGVyRHJhZ0FyZWFFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0cyBhbiBldmVudCB3aGVuIHRoZSBgSWd4Q2hpcENvbXBvbmVudGAgaXMgb3ZlciB0aGUgYElneENoaXBzQXJlYUNvbXBvbmVudGAuXG4gICAgICogUmV0dXJucyB0aGUgdGFyZ2V0IGBJZ3hDaGlwQ29tcG9uZW50YCwgdGhlIGRyYWcgYElneENoaXBDb21wb25lbnRgLCBhcyAgd2VsbCBhc1xuICAgICAqIHRoZSBvcmlnaW5hbCBkcm9wIGV2ZW50IGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2hpcCAjbXlDaGlwIFtpZF09XCInaWd4LWNoaXAtMSdcIiBbZHJhZ2dhYmxlXT1cInRydWVcIiAoZHJhZ092ZXIpPVwiY2hpcE92ZXIoJGV2ZW50KVwiPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgICBAT3V0cHV0KClcbiAgICAgcHVibGljIGRyYWdPdmVyID0gbmV3IEV2ZW50RW1pdHRlcjxJQ2hpcEVudGVyRHJhZ0FyZWFFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0cyBhbiBldmVudCB3aGVuIHRoZSBgSWd4Q2hpcENvbXBvbmVudGAgaGFzIGJlZW4gZHJvcHBlZCBpbiB0aGUgYElneENoaXBzQXJlYUNvbXBvbmVudGAuXG4gICAgICogUmV0dXJucyB0aGUgdGFyZ2V0IGBJZ3hDaGlwQ29tcG9uZW50YCwgdGhlIGRyYWcgYElneENoaXBDb21wb25lbnRgLCBhcyAgd2VsbCBhc1xuICAgICAqIHRoZSBvcmlnaW5hbCBkcm9wIGV2ZW50IGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2hpcCAjbXlDaGlwIFtpZF09XCInaWd4LWNoaXAtMSdcIiBbZHJhZ2dhYmxlXT1cInRydWVcIiAoZHJhZ0Ryb3ApPVwiY2hpcExlYXZlKCRldmVudClcIj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgZHJhZ0Ryb3AgPSBuZXcgRXZlbnRFbWl0dGVyPElDaGlwRW50ZXJEcmFnQXJlYUV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuY2xhc3MnKVxuICAgIHB1YmxpYyBnZXQgaG9zdENsYXNzKCk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGNsYXNzZXMgPSBbdGhpcy5nZXRDb21wb25lbnREZW5zaXR5Q2xhc3MoJ2lneC1jaGlwJyldO1xuXG4gICAgICAgIC8vIEFkZCB0aGUgYmFzZSBjbGFzcyBmaXJzdCBmb3IgZWFjaCBkZW5zaXR5XG4gICAgICAgIGlmICghY2xhc3Nlcy5pbmNsdWRlcygnaWd4LWNoaXAnKSkge1xuICAgICAgICAgICAgY2xhc3Nlcy51bnNoaWZ0KCdpZ3gtY2hpcCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2xhc3Nlcy5wdXNoKHRoaXMuZGlzYWJsZWQgPyAnaWd4LWNoaXAtLWRpc2FibGVkJyA6ICcnKTtcblxuICAgICAgICAvLyBUaGUgY3VzdG9tIGNsYXNzZXMgc2hvdWxkIGJlIGF0IHRoZSBlbmQuXG4gICAgICAgIGNsYXNzZXMucHVzaCh0aGlzLmNsYXNzKTtcbiAgICAgICAgcmV0dXJuIGNsYXNzZXMuam9pbignICcpLnRvU3RyaW5nKCkudHJpbSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFByb3BlcnR5IHRoYXQgY29udGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlIGBJZ3hEcmFnRGlyZWN0aXZlYCB0aGUgYElneENoaXBDb21wb25lbnRgIHVzZXMgZm9yIGRyYWdnaW5nIGJlaGF2aW9yLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jaGlwIFtpZF09XCJjaGlwLmlkXCIgW2RyYWdnYWJsZV09XCJ0cnVlXCI+PC9pZ3gtY2hpcD5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogb25Nb3ZlU3RhcnQoZXZlbnQ6IElCYXNlQ2hpcEV2ZW50QXJncyl7XG4gICAgICogICAgIGxldCBkcmFnRGlyZWN0aXZlID0gZXZlbnQub3duZXIuZHJhZ0RpcmVjdGl2ZTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQFZpZXdDaGlsZCgnY2hpcEFyZWEnLCB7IHJlYWQ6IElneERyYWdEaXJlY3RpdmUsIHN0YXRpYzogdHJ1ZSB9KVxuICAgIHB1YmxpYyBkcmFnRGlyZWN0aXZlOiBJZ3hEcmFnRGlyZWN0aXZlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ2NoaXBBcmVhJywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgICBwdWJsaWMgY2hpcEFyZWE6IEVsZW1lbnRSZWY7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQFZpZXdDaGlsZCgnc2VsZWN0Q29udGFpbmVyJywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgICBwdWJsaWMgc2VsZWN0Q29udGFpbmVyOiBFbGVtZW50UmVmO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ2RlZmF1bHRSZW1vdmVJY29uJywgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHVibGljIGRlZmF1bHRSZW1vdmVJY29uOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ2RlZmF1bHRTZWxlY3RJY29uJywgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHVibGljIGRlZmF1bHRTZWxlY3RJY29uOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgcmVtb3ZlQnV0dG9uVGVtcGxhdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbW92ZUljb24gfHwgdGhpcy5kZWZhdWx0UmVtb3ZlSWNvbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCBzZWxlY3RJY29uVGVtcGxhdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdEljb24gfHwgdGhpcy5kZWZhdWx0U2VsZWN0SWNvbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCBnaG9zdENsYXNzKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldENvbXBvbmVudERlbnNpdHlDbGFzcygnaWd4LWNoaXBfX2dob3N0Jyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldCBuYXRpdmVFbGVtZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWYubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGhpZGVCYXNlRWxlbWVudCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBkZXN0cm95JCA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICBwcm90ZWN0ZWQgX3RhYkluZGV4ID0gbnVsbDtcbiAgICBwcm90ZWN0ZWQgX3NlbGVjdGVkID0gZmFsc2U7XG4gICAgcHJvdGVjdGVkIF9zZWxlY3RlZEl0ZW1DbGFzcyA9ICdpZ3gtY2hpcF9faXRlbS0tc2VsZWN0ZWQnO1xuICAgIHByb3RlY3RlZCBfbW92ZWRXaGlsZVJlbW92aW5nID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfcmVzb3VyY2VTdHJpbmdzID0gQ3VycmVudFJlc291cmNlU3RyaW5ncy5DaGlwUmVzU3RyaW5ncztcblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBjZHI6IENoYW5nZURldGVjdG9yUmVmLCBwcml2YXRlIHJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChEaXNwbGF5RGVuc2l0eVRva2VuKSBwcm90ZWN0ZWQgX2Rpc3BsYXlEZW5zaXR5T3B0aW9uczogSURpc3BsYXlEZW5zaXR5T3B0aW9ucykge1xuICAgICAgICBzdXBlcihfZGlzcGxheURlbnNpdHlPcHRpb25zKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIGtleUV2ZW50KGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIHRoaXMub25DaGlwS2V5RG93bihldmVudCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBzZWxlY3RDbGFzcyhjb25kaXRpb246IGJvb2xlYW4pOiBhbnkge1xuICAgICAgICBjb25zdCBTRUxFQ1RfQ0xBU1MgPSAnaWd4LWNoaXBfX3NlbGVjdCc7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIFtTRUxFQ1RfQ0xBU1NdOiBjb25kaXRpb24sXG4gICAgICAgICAgICBbYCR7U0VMRUNUX0NMQVNTfS0taGlkZGVuYF06ICFjb25kaXRpb25cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25TZWxlY3RUcmFuc2l0aW9uRG9uZShldmVudCkge1xuICAgICAgICBpZiAoISFldmVudC50YXJnZXQudGFnTmFtZSkge1xuICAgICAgICAgICAgLy8gVHJpZ2dlciBvblNlbGVjdGlvbkRvbmUgb24gd2hlbiBgd2lkdGhgIHByb3BlcnR5IGlzIGNoYW5nZWQgYW5kIHRoZSB0YXJnZXQgaXMgdmFsaWQgZWxlbWVudChub3QgY29tbWVudCkuXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2hhbmdlZC5lbWl0KHtcbiAgICAgICAgICAgICAgICBvd25lcjogdGhpcyxcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBldmVudFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG9uQ2hpcEtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgY29uc3Qga2V5RG93bkFyZ3M6IElDaGlwS2V5RG93bkV2ZW50QXJncyA9IHtcbiAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGV2ZW50LFxuICAgICAgICAgICAgb3duZXI6IHRoaXMsXG4gICAgICAgICAgICBjYW5jZWw6IGZhbHNlXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5rZXlEb3duLmVtaXQoa2V5RG93bkFyZ3MpO1xuICAgICAgICBpZiAoa2V5RG93bkFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoKGV2ZW50LmtleSA9PT0gJ0RlbGV0ZScgfHwgZXZlbnQua2V5ID09PSAnRGVsJykgJiYgdGhpcy5yZW1vdmFibGUpIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlLmVtaXQoe1xuICAgICAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGV2ZW50LFxuICAgICAgICAgICAgICAgIG93bmVyOiB0aGlzXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgoZXZlbnQua2V5ID09PSAnICcgfHwgZXZlbnQua2V5ID09PSAnU3BhY2ViYXInKSAmJiB0aGlzLnNlbGVjdGFibGUgJiYgIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlU2VsZWN0aW9uKCF0aGlzLnNlbGVjdGVkLCBldmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZlbnQua2V5ICE9PSAnVGFiJykge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25SZW1vdmVCdG5LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09ICcgJyB8fCBldmVudC5rZXkgPT09ICdTcGFjZWJhcicgfHwgZXZlbnQua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZS5lbWl0KHtcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBldmVudCxcbiAgICAgICAgICAgICAgICBvd25lcjogdGhpc1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvblJlbW92ZU1vdXNlRG93bihldmVudDogUG9pbnRlckV2ZW50IHwgTW91c2VFdmVudCkge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG9uUmVtb3ZlQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQgfCBUb3VjaEV2ZW50KSB7XG4gICAgICAgIHRoaXMucmVtb3ZlLmVtaXQoe1xuICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogZXZlbnQsXG4gICAgICAgICAgICBvd25lcjogdGhpc1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG9uUmVtb3ZlVG91Y2hNb3ZlKCkge1xuICAgICAgICAvLyBXZSBkb24ndCByZW1vdmUgY2hpcCBpZiB1c2VyIHN0YXJ0aW5nIHRvdWNoIGludGVyYWN0aW5nIG9uIHRoZSByZW1vdmUgYnV0dG9uIG1vdmVzIHRoZSBjaGlwXG4gICAgICAgIHRoaXMuX21vdmVkV2hpbGVSZW1vdmluZyA9IHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvblJlbW92ZVRvdWNoRW5kKGV2ZW50OiBUb3VjaEV2ZW50KSB7XG4gICAgICAgIGlmICghdGhpcy5fbW92ZWRXaGlsZVJlbW92aW5nKSB7XG4gICAgICAgICAgICB0aGlzLm9uUmVtb3ZlQ2xpY2soZXZlbnQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX21vdmVkV2hpbGVSZW1vdmluZyA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIFN0YXJ0IGNoaXAgaWd4RHJhZyBiZWhhdmlvclxuICAgIHB1YmxpYyBvbkNoaXBEcmFnU3RhcnQoZXZlbnQ6IElEcmFnU3RhcnRFdmVudEFyZ3MpIHtcbiAgICAgICAgdGhpcy5tb3ZlU3RhcnQuZW1pdCh7XG4gICAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBldmVudCxcbiAgICAgICAgICAgIG93bmVyOiB0aGlzXG4gICAgICAgIH0pO1xuICAgICAgICBldmVudC5jYW5jZWwgPSAhdGhpcy5kcmFnZ2FibGUgfHwgdGhpcy5kaXNhYmxlZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG9uQ2hpcERyYWdFbmQoKSB7XG4gICAgICAgIGlmICh0aGlzLmFuaW1hdGVPblJlbGVhc2UpIHtcbiAgICAgICAgICAgIHRoaXMuZHJhZ0RpcmVjdGl2ZS50cmFuc2l0aW9uVG9PcmlnaW4oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25DaGlwTW92ZUVuZChldmVudDogSURyYWdCYXNlRXZlbnRBcmdzKSB7XG4gICAgICAgIC8vIG1vdmVFbmQgaXMgdHJpZ2dlcmVkIGFmdGVyIHJldHVybiBhbmltYXRpb24gaGFzIGZpbmlzaGVkLiBUaGlzIGhhcHBlbiB3aGVuIHdlIGRyYWcgYW5kIHJlbGVhc2UgdGhlIGNoaXAuXG4gICAgICAgIHRoaXMubW92ZUVuZC5lbWl0KHtcbiAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGV2ZW50LFxuICAgICAgICAgICAgb3duZXI6IHRoaXNcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2hpcEFyZWEubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvbkNoaXBHaG9zdENyZWF0ZSgpIHtcbiAgICAgICAgdGhpcy5oaWRlQmFzZUVsZW1lbnQgPSB0aGlzLmhpZGVCYXNlT25EcmFnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25DaGlwR2hvc3REZXN0cm95KCkge1xuICAgICAgICB0aGlzLmhpZGVCYXNlRWxlbWVudCA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25DaGlwRHJhZ0NsaWNrZWQoZXZlbnQ6IElEcmFnQmFzZUV2ZW50QXJncykge1xuICAgICAgICBjb25zdCBjbGlja0V2ZW50QXJnczogSUNoaXBDbGlja0V2ZW50QXJncyA9IHtcbiAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGV2ZW50LFxuICAgICAgICAgICAgb3duZXI6IHRoaXMsXG4gICAgICAgICAgICBjYW5jZWw6IGZhbHNlXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuY2hpcENsaWNrLmVtaXQoY2xpY2tFdmVudEFyZ3MpO1xuXG4gICAgICAgIGlmICghY2xpY2tFdmVudEFyZ3MuY2FuY2VsICYmIHRoaXMuc2VsZWN0YWJsZSAmJiAhdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VTZWxlY3Rpb24oIXRoaXMuc2VsZWN0ZWQsIGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBFbmQgY2hpcCBpZ3hEcmFnIGJlaGF2aW9yXG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBTdGFydCBjaGlwIGlneERyb3AgYmVoYXZpb3JcbiAgICBwdWJsaWMgb25DaGlwRHJhZ0VudGVySGFuZGxlcihldmVudDogSURyb3BCYXNlRXZlbnRBcmdzKSB7XG4gICAgICAgIGlmICh0aGlzLmRyYWdEaXJlY3RpdmUgPT09IGV2ZW50LmRyYWcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGV2ZW50QXJnczogSUNoaXBFbnRlckRyYWdBcmVhRXZlbnRBcmdzID0ge1xuICAgICAgICAgICAgb3duZXI6IHRoaXMsXG4gICAgICAgICAgICBkcmFnQ2hpcDogZXZlbnQuZHJhZy5kYXRhPy5jaGlwLFxuICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogZXZlbnRcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5kcmFnRW50ZXIuZW1pdChldmVudEFyZ3MpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25DaGlwRHJhZ0xlYXZlSGFuZGxlcihldmVudDogSURyb3BCYXNlRXZlbnRBcmdzKSB7XG4gICAgICAgIGlmICh0aGlzLmRyYWdEaXJlY3RpdmUgPT09IGV2ZW50LmRyYWcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGV2ZW50QXJnczogSUNoaXBFbnRlckRyYWdBcmVhRXZlbnRBcmdzID0ge1xuICAgICAgICAgICAgb3duZXI6IHRoaXMsXG4gICAgICAgICAgICBkcmFnQ2hpcDogZXZlbnQuZHJhZy5kYXRhPy5jaGlwLFxuICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogZXZlbnRcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5kcmFnTGVhdmUuZW1pdChldmVudEFyZ3MpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25DaGlwRHJvcChldmVudDogSURyb3BEcm9wcGVkRXZlbnRBcmdzKSB7XG4gICAgICAgIC8vIENhbmNlbCB0aGUgZGVmYXVsdCBkcm9wIGxvZ2ljXG4gICAgICAgIGV2ZW50LmNhbmNlbCA9IHRydWU7XG4gICAgICAgIGlmICh0aGlzLmRyYWdEaXJlY3RpdmUgPT09IGV2ZW50LmRyYWcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGV2ZW50QXJnczogSUNoaXBFbnRlckRyYWdBcmVhRXZlbnRBcmdzID0ge1xuICAgICAgICAgICAgb3duZXI6IHRoaXMsXG4gICAgICAgICAgICBkcmFnQ2hpcDogZXZlbnQuZHJhZy5kYXRhPy5jaGlwLFxuICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogZXZlbnRcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5kcmFnRHJvcC5lbWl0KGV2ZW50QXJncyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvbkNoaXBPdmVySGFuZGxlcihldmVudDogSURyb3BCYXNlRXZlbnRBcmdzKSB7XG4gICAgICAgIGlmICh0aGlzLmRyYWdEaXJlY3RpdmUgPT09IGV2ZW50LmRyYWcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGV2ZW50QXJnczogSUNoaXBFbnRlckRyYWdBcmVhRXZlbnRBcmdzID0ge1xuICAgICAgICAgICAgb3duZXI6IHRoaXMsXG4gICAgICAgICAgICBkcmFnQ2hpcDogZXZlbnQuZHJhZy5kYXRhPy5jaGlwLFxuICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogZXZlbnRcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5kcmFnT3Zlci5lbWl0KGV2ZW50QXJncyk7XG4gICAgfVxuICAgIC8vIEVuZCBjaGlwIGlneERyb3AgYmVoYXZpb3JcblxuICAgIHByb3RlY3RlZCBjaGFuZ2VTZWxlY3Rpb24obmV3VmFsdWU6IGJvb2xlYW4sIHNyY0V2ZW50ID0gbnVsbCkge1xuICAgICAgICBjb25zdCBvblNlbGVjdEFyZ3M6IElDaGlwU2VsZWN0RXZlbnRBcmdzID0ge1xuICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogc3JjRXZlbnQsXG4gICAgICAgICAgICBvd25lcjogdGhpcyxcbiAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgIGNhbmNlbDogZmFsc2VcbiAgICAgICAgfTtcblxuICAgICAgICBmcm9tRXZlbnQodGhpcy5zZWxlY3RDb250YWluZXIubmF0aXZlRWxlbWVudCwgJ3RyYW5zaXRpb25lbmQnKVxuICAgICAgICAgICAgLnBpcGUoZmlsdGVyPFRyYW5zaXRpb25FdmVudD4oZXZlbnQgPT4gZXZlbnQucHJvcGVydHlOYW1lID09PSAnd2lkdGgnKSwgdGFrZSgxKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoZXZlbnQgPT4gdGhpcy5vblNlbGVjdFRyYW5zaXRpb25Eb25lKGV2ZW50KSk7XG5cbiAgICAgICAgaWYgKG5ld1ZhbHVlICYmICF0aGlzLl9zZWxlY3RlZCkge1xuICAgICAgICAgICAgb25TZWxlY3RBcmdzLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDaGFuZ2luZy5lbWl0KG9uU2VsZWN0QXJncyk7XG5cbiAgICAgICAgICAgIGlmICghb25TZWxlY3RBcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5jaGlwQXJlYS5uYXRpdmVFbGVtZW50LCB0aGlzLl9zZWxlY3RlZEl0ZW1DbGFzcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWQgPSBuZXdWYWx1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2hhbmdlLmVtaXQodGhpcy5fc2VsZWN0ZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKCFuZXdWYWx1ZSAmJiB0aGlzLl9zZWxlY3RlZCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENoYW5naW5nLmVtaXQob25TZWxlY3RBcmdzKTtcblxuICAgICAgICAgICAgaWYgKCFvblNlbGVjdEFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmNoaXBBcmVhLm5hdGl2ZUVsZW1lbnQsIHRoaXMuX3NlbGVjdGVkSXRlbUNsYXNzKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RlZCA9IG5ld1ZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDaGFuZ2UuZW1pdCh0aGlzLl9zZWxlY3RlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgfVxufVxuIiwiPGRpdiAjY2hpcEFyZWEgY2xhc3M9XCJpZ3gtY2hpcF9faXRlbVwiXG4gICAgW2lneERyYWddPVwie2NoaXA6IHRoaXN9XCJcbiAgICBbc3R5bGUudmlzaWJpbGl0eV09J2hpZGVCYXNlRWxlbWVudCA/IFwiaGlkZGVuXCIgOiBcInZpc2libGVcIidcbiAgICBbZ2hvc3RDbGFzc109XCJnaG9zdENsYXNzXCJcbiAgICAoZHJhZ1N0YXJ0KT1cIm9uQ2hpcERyYWdTdGFydCgkZXZlbnQpXCJcbiAgICAoZ2hvc3RDcmVhdGUpPVwib25DaGlwR2hvc3RDcmVhdGUoKVwiXG4gICAgKGdob3N0RGVzdHJveSk9XCJvbkNoaXBHaG9zdERlc3Ryb3koKVwiXG4gICAgKGRyYWdFbmQpPVwib25DaGlwRHJhZ0VuZCgpXCJcbiAgICAodHJhbnNpdGlvbmVkKT1cIm9uQ2hpcE1vdmVFbmQoJGV2ZW50KVwiXG4gICAgKGRyYWdDbGljayk9XCJvbkNoaXBEcmFnQ2xpY2tlZCgkZXZlbnQpXCJcbiAgICBpZ3hEcm9wXG4gICAgKGVudGVyKT1cIm9uQ2hpcERyYWdFbnRlckhhbmRsZXIoJGV2ZW50KVwiXG4gICAgKGxlYXZlKT0gXCJvbkNoaXBEcmFnTGVhdmVIYW5kbGVyKCRldmVudClcIlxuICAgIChvdmVyKT1cIm9uQ2hpcE92ZXJIYW5kbGVyKCRldmVudClcIlxuICAgIChkcm9wcGVkKT1cIm9uQ2hpcERyb3AoJGV2ZW50KVwiPlxuXG4gICAgPGRpdiAjc2VsZWN0Q29udGFpbmVyIFtuZ0NsYXNzXT1cInNlbGVjdENsYXNzKHNlbGVjdGVkKVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2VsZWN0SWNvblRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJpZ3gtcHJlZml4LFtpZ3hQcmVmaXhdXCI+PC9uZy1jb250ZW50PlxuXG4gICAgPGRpdiBjbGFzcz1cImlneC1jaGlwX19jb250ZW50XCI+XG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cblxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImlneC1zdWZmaXgsW2lneFN1ZmZpeF1cIj48L25nLWNvbnRlbnQ+XG5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LWNoaXBfX3JlbW92ZVwiICpuZ0lmPVwicmVtb3ZhYmxlXCJcbiAgICAgICAgW2F0dHIudGFiSW5kZXhdPVwidGFiSW5kZXhcIlxuICAgICAgICAoa2V5ZG93bik9XCJvblJlbW92ZUJ0bktleURvd24oJGV2ZW50KVwiXG4gICAgICAgIChwb2ludGVyZG93bik9XCJvblJlbW92ZU1vdXNlRG93bigkZXZlbnQpXCJcbiAgICAgICAgKG1vdXNlZG93bik9XCJvblJlbW92ZU1vdXNlRG93bigkZXZlbnQpXCJcbiAgICAgICAgKGNsaWNrKT1cIm9uUmVtb3ZlQ2xpY2soJGV2ZW50KVwiXG4gICAgICAgICh0b3VjaG1vdmUpPVwib25SZW1vdmVUb3VjaE1vdmUoKVwiXG4gICAgICAgICh0b3VjaGVuZCk9XCJvblJlbW92ZVRvdWNoRW5kKCRldmVudClcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInJlbW92ZUJ1dHRvblRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNkZWZhdWx0U2VsZWN0SWNvbj5cbiAgICA8aWd4LWljb24gW2F0dHIuYXJpYS1sYWJlbF09XCJyZXNvdXJjZVN0cmluZ3MuaWd4X2NoaXBfc2VsZWN0XCI+ZG9uZTwvaWd4LWljb24+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRSZW1vdmVJY29uPlxuICAgIDxpZ3gtaWNvbiBbYXR0ci5hcmlhLWxhYmVsXT1cInJlc291cmNlU3RyaW5ncy5pZ3hfY2hpcF9yZW1vdmVcIj5jYW5jZWw8L2lneC1pY29uPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
@@ -131,20 +131,20 @@ export class IgxChipsAreaComponent {
|
|
|
131
131
|
const changes = this._differ.diff(this.chipsList.toArray());
|
|
132
132
|
if (changes) {
|
|
133
133
|
changes.forEachAddedItem((addedChip) => {
|
|
134
|
-
addedChip.item.moveStart.pipe(takeUntil(
|
|
134
|
+
addedChip.item.moveStart.pipe(takeUntil(addedChip.item.destroy$)).subscribe((args) => {
|
|
135
135
|
this.onChipMoveStart(args);
|
|
136
136
|
});
|
|
137
|
-
addedChip.item.moveEnd.pipe(takeUntil(
|
|
137
|
+
addedChip.item.moveEnd.pipe(takeUntil(addedChip.item.destroy$)).subscribe((args) => {
|
|
138
138
|
this.onChipMoveEnd(args);
|
|
139
139
|
});
|
|
140
|
-
addedChip.item.dragEnter.pipe(takeUntil(
|
|
140
|
+
addedChip.item.dragEnter.pipe(takeUntil(addedChip.item.destroy$)).subscribe((args) => {
|
|
141
141
|
this.onChipDragEnter(args);
|
|
142
142
|
});
|
|
143
|
-
addedChip.item.keyDown.pipe(takeUntil(
|
|
143
|
+
addedChip.item.keyDown.pipe(takeUntil(addedChip.item.destroy$)).subscribe((args) => {
|
|
144
144
|
this.onChipKeyDown(args);
|
|
145
145
|
});
|
|
146
146
|
if (addedChip.item.selectable) {
|
|
147
|
-
addedChip.item.selectedChanging.pipe(takeUntil(
|
|
147
|
+
addedChip.item.selectedChanging.pipe(takeUntil(addedChip.item.destroy$)).subscribe((args) => {
|
|
148
148
|
this.onChipSelectionChange(args);
|
|
149
149
|
});
|
|
150
150
|
}
|
|
@@ -329,4 +329,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImpor
|
|
|
329
329
|
type: ContentChildren,
|
|
330
330
|
args: [IgxChipComponent, { descendants: true }]
|
|
331
331
|
}] } });
|
|
332
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hpcHMtYXJlYS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvY2hpcHMvY2hpcHMtYXJlYS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvY2hpcHMvY2hpcHMtYXJlYS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULGVBQWUsRUFFZixZQUFZLEVBQ1osV0FBVyxFQUNYLEtBQUssRUFHTCxNQUFNLEVBTVQsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNILGdCQUFnQixFQUtuQixNQUFNLGtCQUFrQixDQUFDO0FBRTFCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQWUvQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFLSCxNQUFNLE9BQU8scUJBQXFCO0lBcUk5QixZQUFtQixHQUFzQixFQUFTLE9BQW1CLEVBQ3pELGdCQUFpQztRQUQxQixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUFTLFlBQU8sR0FBUCxPQUFPLENBQVk7UUFDekQscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFpQjtRQXBJN0M7OztXQUdHO1FBRUksVUFBSyxHQUFHLEVBQUUsQ0FBQztRQWNsQjs7Ozs7OztXQU9HO1FBRUssU0FBSSxHQUFHLFNBQVMsQ0FBQztRQUV6Qjs7Ozs7Ozs7V0FRRztRQUVLLGNBQVMsR0FBRyxXQUFXLENBQUM7UUEwQmhDOzs7Ozs7OztXQVFHO1FBRUksWUFBTyxHQUFHLElBQUksWUFBWSxFQUE4QixDQUFDO1FBRWhFOzs7Ozs7Ozs7V0FTRztRQUVJLG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQTZCLENBQUM7UUFFdkU7Ozs7Ozs7V0FPRztRQUVJLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBMkIsQ0FBQztRQUUvRDs7Ozs7OztXQU9HO1FBRUksWUFBTyxHQUFHLElBQUksWUFBWSxFQUEyQixDQUFDO1FBZW5ELGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBVyxDQUFDO1FBR3BDLFlBQU8sR0FBNEMsSUFBSSxDQUFDO1FBSTVELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQS9IRDs7O09BR0c7SUFDSCxJQUNXLFNBQVM7UUFDaEIsTUFBTSxPQUFPLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNsQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV6QixPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQXVIRDs7O09BR0c7SUFDSSxlQUFlO1FBQ2xCLCtIQUErSDtRQUMvSCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFO1lBQ3ZCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBc0IsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3ZGLElBQUksYUFBYSxDQUFDLE1BQU0sRUFBRTtnQkFDdEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUM7b0JBQ3RCLGFBQWEsRUFBRSxJQUFJO29CQUNuQixZQUFZLEVBQUUsYUFBYTtvQkFDM0IsS0FBSyxFQUFFLElBQUk7aUJBQ2QsQ0FBQyxDQUFDO2FBQ047U0FDSjtJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDSSxTQUFTO1FBQ1osSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2hCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUM1RCxJQUFJLE9BQU8sRUFBRTtnQkFDVCxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtvQkFDbkMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTt3QkFDdkUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDL0IsQ0FBQyxDQUFDLENBQUM7b0JBQ0gsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTt3QkFDckUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDN0IsQ0FBQyxDQUFDLENBQUM7b0JBQ0gsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTt3QkFDdkUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDL0IsQ0FBQyxDQUFDLENBQUM7b0JBQ0gsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTt3QkFDckUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDN0IsQ0FBQyxDQUFDLENBQUM7b0JBQ0gsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTt3QkFDM0IsU0FBUyxDQUFDLElBQUksQ0FB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O3VCQUFDLFdBQVc7Z0JBYWpCLFNBQVM7c0JBRGYsV0FBVzt1QkFBQyxpQkFBaUI7Z0JBYXhCLEtBQUs7c0JBRlgsV0FBVzt1QkFBQyxnQkFBZ0I7O3NCQUM1QixLQUFLO2dCQWFDLE1BQU07c0JBRlosV0FBVzt1QkFBQyxpQkFBaUI7O3NCQUM3QixLQUFLO2dCQWFDLE9BQU87c0JBRGIsTUFBTTtnQkFjQSxlQUFlO3NCQURyQixNQUFNO2dCQVlBLFNBQVM7c0JBRGYsTUFBTTtnQkFZQSxPQUFPO3NCQURiLE1BQU07Z0JBY0EsU0FBUztzQkFEZixlQUFlO3VCQUFDLGdCQUFnQixFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5wdXQsXG4gICAgSXRlcmFibGVEaWZmZXIsXG4gICAgSXRlcmFibGVEaWZmZXJzLFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgRG9DaGVjayxcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIE9uRGVzdHJveSxcbiAgICBFbGVtZW50UmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBJZ3hDaGlwQ29tcG9uZW50LFxuICAgIElDaGlwU2VsZWN0RXZlbnRBcmdzLFxuICAgIElDaGlwS2V5RG93bkV2ZW50QXJncyxcbiAgICBJQ2hpcEVudGVyRHJhZ0FyZWFFdmVudEFyZ3MsXG4gICAgSUJhc2VDaGlwRXZlbnRBcmdzXG59IGZyb20gJy4vY2hpcC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSURyb3BCYXNlRXZlbnRBcmdzLCBJRHJhZ0Jhc2VFdmVudEFyZ3MgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2RyYWctZHJvcC9kcmFnLWRyb3AuZGlyZWN0aXZlJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuZXhwb3J0IGludGVyZmFjZSBJQmFzZUNoaXBzQXJlYUV2ZW50QXJncyB7XG4gICAgb3JpZ2luYWxFdmVudDogSURyYWdCYXNlRXZlbnRBcmdzIHwgSURyb3BCYXNlRXZlbnRBcmdzIHwgS2V5Ym9hcmRFdmVudCB8IE1vdXNlRXZlbnQgfCBUb3VjaEV2ZW50O1xuICAgIG93bmVyOiBJZ3hDaGlwc0FyZWFDb21wb25lbnQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNoaXBzQXJlYVJlb3JkZXJFdmVudEFyZ3MgZXh0ZW5kcyBJQmFzZUNoaXBzQXJlYUV2ZW50QXJncyB7XG4gICAgY2hpcHNBcnJheTogSWd4Q2hpcENvbXBvbmVudFtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElDaGlwc0FyZWFTZWxlY3RFdmVudEFyZ3MgZXh0ZW5kcyBJQmFzZUNoaXBzQXJlYUV2ZW50QXJncyB7XG4gICAgbmV3U2VsZWN0aW9uOiBJZ3hDaGlwQ29tcG9uZW50W107XG59XG5cbi8qKlxuICogVGhlIGNoaXAgYXJlYSBhbGxvd3MgeW91IHRvIHBlcmZvcm0gbW9yZSBjb21wbGV4IHNjZW5hcmlvcyB3aXRoIGNoaXBzIHRoYXQgcmVxdWlyZSBpbnRlcmFjdGlvbixcbiAqIGxpa2UgZHJhZ2dpbmcsIHNlbGVjdGlvbiwgbmF2aWdhdGlvbiwgZXRjLlxuICpcbiAqIEBpZ3hNb2R1bGUgSWd4Q2hpcHNNb2R1bGVcbiAqXG4gKiBAaWd4VGhlbWUgaWd4LWNoaXAtdGhlbWVcbiAqXG4gKiBAaWd4S2V5d29yZHMgY2hpcCBhcmVhLCBjaGlwXG4gKlxuICogQGlneEdyb3VwIGRpc3BsYXlcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgaHRtbFxuICogPGlneC1jaGlwcy1hcmVhPlxuICogICAgPGlneC1jaGlwICpuZ0Zvcj1cImxldCBjaGlwIG9mIGNoaXBMaXN0XCIgW2lkXT1cImNoaXAuaWRcIj5cbiAqICAgICAgICA8c3Bhbj57e2NoaXAudGV4dH19PC9zcGFuPlxuICogICAgPC9pZ3gtY2hpcD5cbiAqIDwvaWd4LWNoaXBzLWFyZWE+XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdpZ3gtY2hpcHMtYXJlYScsXG4gICAgdGVtcGxhdGVVcmw6ICdjaGlwcy1hcmVhLmNvbXBvbmVudC5odG1sJyxcbn0pXG5leHBvcnQgY2xhc3MgSWd4Q2hpcHNBcmVhQ29tcG9uZW50IGltcGxlbWVudHMgRG9DaGVjaywgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBjbGFzcyA9ICcnO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5jbGFzcycpXG4gICAgcHVibGljIGdldCBob3N0Q2xhc3MoKSB7XG4gICAgICAgIGNvbnN0IGNsYXNzZXMgPSBbJ2lneC1jaGlwLWFyZWEnXTtcbiAgICAgICAgY2xhc3Nlcy5wdXNoKHRoaXMuY2xhc3MpO1xuXG4gICAgICAgIHJldHVybiBjbGFzc2VzLmpvaW4oJyAnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBgcm9sZWAgYXR0cmlidXRlIG9mIHRoZSBjaGlwcyBhcmVhLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGNoaXBzQXJlYVJvbGUgPSB0aGlzLmNoaXBzQXJlYS5yb2xlO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgICBASG9zdEJpbmRpbmcoJ2F0dHIucm9sZScpXG4gICAgIHB1YmxpYyByb2xlID0gJ2xpc3Rib3gnO1xuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgYGFyaWEtbGFiZWxgIGF0dHJpYnV0ZSBvZiB0aGUgY2hpcHMgYXJlYS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBhcmlhTGFiZWwgPSB0aGlzLmNoaXBzQXJlYS5hcmlhTGFiZWw7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKi9cbiAgICAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtbGFiZWwnKVxuICAgICBwdWJsaWMgYXJpYUxhYmVsID0gJ2NoaXAgYXJlYSc7XG5cbiAgICAvKipcbiAgICAgKiBBbiBASW5wdXQgcHJvcGVydHkgdGhhdCBzZXRzIHRoZSB3aWR0aCBvZiB0aGUgYElneENoaXBzQXJlYUNvbXBvbmVudGAuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNoaXBzLWFyZWEgI2NoaXBzQXJlYSBbd2lkdGhdPVwiJzMwMCdcIiBbaGVpZ2h0XT1cIicxMCdcIiAob25SZW9yZGVyKT1cImNoaXBzT3JkZXJDaGFuZ2VkKCRldmVudClcIj48L2lneC1jaGlwcy1hcmVhPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnc3R5bGUud2lkdGgucHgnKVxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHdpZHRoOiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBBbiBASW5wdXQgcHJvcGVydHkgdGhhdCBzZXRzIHRoZSBoZWlnaHQgb2YgdGhlIGBJZ3hDaGlwc0FyZWFDb21wb25lbnRgLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jaGlwcy1hcmVhICNjaGlwc0FyZWEgW3dpZHRoXT1cIiczMDAnXCIgW2hlaWdodF09XCInMTAnXCIgKG9uUmVvcmRlcik9XCJjaGlwc09yZGVyQ2hhbmdlZCgkZXZlbnQpXCI+PC9pZ3gtY2hpcHMtYXJlYT5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLmhlaWdodC5weCcpXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaGVpZ2h0OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0cyBhbiBldmVudCB3aGVuIGBJZ3hDaGlwQ29tcG9uZW50YHMgaW4gdGhlIGBJZ3hDaGlwc0FyZWFDb21wb25lbnRgIHNob3VsZCBiZSByZW9yZGVyZWQuXG4gICAgICogUmV0dXJucyBhbiBhcnJheSBvZiBgSWd4Q2hpcENvbXBvbmVudGBzLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jaGlwcy1hcmVhICNjaGlwc0FyZWEgW3dpZHRoXT1cIiczMDAnXCIgW2hlaWdodF09XCInMTAnXCIgKG9uUmVvcmRlcik9XCJjaGFuZ2VkT3JkZXIoJGV2ZW50KVwiPjwvaWd4LWNoaXBzLWFyZWE+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHJlb3JkZXIgPSBuZXcgRXZlbnRFbWl0dGVyPElDaGlwc0FyZWFSZW9yZGVyRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHMgYW4gZXZlbnQgd2hlbiBhbiBgSWd4Q2hpcENvbXBvbmVudGAgaW4gdGhlIGBJZ3hDaGlwc0FyZWFDb21wb25lbnRgIGlzIHNlbGVjdGVkL2Rlc2VsZWN0ZWQuXG4gICAgICogRmlyZWQgYWZ0ZXIgdGhlIGNoaXBzIGFyZWEgaXMgaW5pdGlhbGl6ZWQgaWYgdGhlcmUgYXJlIGluaXRpYWxseSBzZWxlY3RlZCBjaGlwcyBhcyB3ZWxsLlxuICAgICAqIFJldHVybnMgYW4gYXJyYXkgb2Ygc2VsZWN0ZWQgYElneENoaXBDb21wb25lbnRgcyBhbmQgdGhlIGBJZ3hDaGlwQXJlYUNvbXBvbmVudGAuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNoaXBzLWFyZWEgI2NoaXBzQXJlYSBbd2lkdGhdPVwiJzMwMCdcIiBbaGVpZ2h0XT1cIicxMCdcIiAoc2VsZWN0aW9uQ2hhbmdlKT1cInNlbGVjdGlvbigkZXZlbnQpXCI+PC9pZ3gtY2hpcHMtYXJlYT5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxJQ2hpcHNBcmVhU2VsZWN0RXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHMgYW4gZXZlbnQgd2hlbiBhbiBgSWd4Q2hpcENvbXBvbmVudGAgaW4gdGhlIGBJZ3hDaGlwc0FyZWFDb21wb25lbnRgIGlzIG1vdmVkLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jaGlwcy1hcmVhICNjaGlwc0FyZWEgW3dpZHRoXT1cIiczMDAnXCIgW2hlaWdodF09XCInMTAnXCIgKG1vdmVTdGFydCk9XCJtb3ZlU3RhcnQoJGV2ZW50KVwiPjwvaWd4LWNoaXBzLWFyZWE+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG1vdmVTdGFydCA9IG5ldyBFdmVudEVtaXR0ZXI8SUJhc2VDaGlwc0FyZWFFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0cyBhbiBldmVudCBhZnRlciBhbiBgSWd4Q2hpcENvbXBvbmVudGAgaW4gdGhlIGBJZ3hDaGlwc0FyZWFDb21wb25lbnRgIGlzIG1vdmVkLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jaGlwcy1hcmVhICNjaGlwc0FyZWEgW3dpZHRoXT1cIiczMDAnXCIgW2hlaWdodF09XCInMTAnXCIgKG1vdmVFbmQpPVwibW92ZUVuZCgkZXZlbnQpXCI+PC9pZ3gtY2hpcHMtYXJlYT5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgbW92ZUVuZCA9IG5ldyBFdmVudEVtaXR0ZXI8SUJhc2VDaGlwc0FyZWFFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgYElneENoaXBDb21wb25lbnRgIGluIHRoZSBgSWd4Q2hpcHNBcmVhQ29tcG9uZW50YC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIG5nQWZ0ZXJWaWV3SW5pdCgpe1xuICAgICAqICAgIGxldCBjaGlwcyA9IHRoaXMuY2hpcHNBcmVhLmNoaXBzTGlzdDtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihJZ3hDaGlwQ29tcG9uZW50LCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pXG4gICAgcHVibGljIGNoaXBzTGlzdDogUXVlcnlMaXN0PElneENoaXBDb21wb25lbnQ+O1xuXG4gICAgcHJvdGVjdGVkIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcblxuICAgIHByaXZhdGUgbW9kaWZpZWRDaGlwc0FycmF5OiBJZ3hDaGlwQ29tcG9uZW50W107XG4gICAgcHJpdmF0ZSBfZGlmZmVyOiBJdGVyYWJsZURpZmZlcjxJZ3hDaGlwQ29tcG9uZW50PiB8IG51bGwgPSBudWxsO1xuXG4gICAgY29uc3RydWN0b3IocHVibGljIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsIHB1YmxpYyBlbGVtZW50OiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIF9pdGVyYWJsZURpZmZlcnM6IEl0ZXJhYmxlRGlmZmVycykge1xuICAgICAgICB0aGlzLl9kaWZmZXIgPSB0aGlzLl9pdGVyYWJsZURpZmZlcnMuZmluZChbXSkuY3JlYXRlKG51bGwpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICAvLyBJZiB3ZSBoYXZlIGluaXRpYWxseSBzZWxlY3RlZCBjaGlwcyB0aHJvdWdoIHRoZWlyIGlucHV0cywgd2UgbmVlZCB0byBnZXQgdGhlbSwgYmVjYXVzZSB3ZSBjYW5ub3QgbGlzdGVuIHRvIHRoZWlyIGV2ZW50cyB5ZXQuXG4gICAgICAgIGlmICh0aGlzLmNoaXBzTGlzdC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkQ2hpcHMgPSB0aGlzLmNoaXBzTGlzdC5maWx0ZXIoKGl0ZW06IElneENoaXBDb21wb25lbnQpID0+IGl0ZW0uc2VsZWN0ZWQpO1xuICAgICAgICAgICAgaWYgKHNlbGVjdGVkQ2hpcHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIG5ld1NlbGVjdGlvbjogc2VsZWN0ZWRDaGlwcyxcbiAgICAgICAgICAgICAgICAgICAgb3duZXI6IHRoaXNcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgbmdEb0NoZWNrKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5jaGlwc0xpc3QpIHtcbiAgICAgICAgICAgIGNvbnN0IGNoYW5nZXMgPSB0aGlzLl9kaWZmZXIuZGlmZih0aGlzLmNoaXBzTGlzdC50b0FycmF5KCkpO1xuICAgICAgICAgICAgaWYgKGNoYW5nZXMpIHtcbiAgICAgICAgICAgICAgICBjaGFuZ2VzLmZvckVhY2hBZGRlZEl0ZW0oKGFkZGVkQ2hpcCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBhZGRlZENoaXAuaXRlbS5tb3ZlU3RhcnQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoYXJncykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkNoaXBNb3ZlU3RhcnQoYXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBhZGRlZENoaXAuaXRlbS5tb3ZlRW5kLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25DaGlwTW92ZUVuZChhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGFkZGVkQ2hpcC5pdGVtLmRyYWdFbnRlci5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChhcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uQ2hpcERyYWdFbnRlcihhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGFkZGVkQ2hpcC5pdGVtLmtleURvd24ucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoYXJncykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkNoaXBLZXlEb3duKGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFkZGVkQ2hpcC5pdGVtLnNlbGVjdGFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZGVkQ2hpcC5pdGVtLnNlbGVjdGVkQ2hhbmdpbmcucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoYXJncykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25DaGlwU2VsZWN0aW9uQ2hhbmdlKGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGlmaWVkQ2hpcHNBcnJheSA9IHRoaXMuY2hpcHNMaXN0LnRvQXJyYXkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgb25DaGlwS2V5RG93bihldmVudDogSUNoaXBLZXlEb3duRXZlbnRBcmdzKSB7XG4gICAgICAgIGxldCBvcmRlckNoYW5nZWQgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgY2hpcHNBcnJheSA9IHRoaXMuY2hpcHNMaXN0LnRvQXJyYXkoKTtcbiAgICAgICAgY29uc3QgZHJhZ0NoaXBJbmRleCA9IGNoaXBzQXJyYXkuZmluZEluZGV4KChlbCkgPT4gZWwgPT09IGV2ZW50Lm93bmVyKTtcbiAgICAgICAgaWYgKGV2ZW50Lm9yaWdpbmFsRXZlbnQuc2hpZnRLZXkgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGlmIChldmVudC5vcmlnaW5hbEV2ZW50LmtleSA9PT0gJ0Fycm93TGVmdCcgfHwgZXZlbnQub3JpZ2luYWxFdmVudC5rZXkgPT09ICdMZWZ0Jykge1xuICAgICAgICAgICAgICAgIG9yZGVyQ2hhbmdlZCA9IHRoaXMucG9zaXRpb25DaGlwQXRJbmRleChkcmFnQ2hpcEluZGV4LCBkcmFnQ2hpcEluZGV4IC0gMSwgZmFsc2UsIGV2ZW50Lm9yaWdpbmFsRXZlbnQpO1xuICAgICAgICAgICAgICAgIGlmIChvcmRlckNoYW5nZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoaXBzTGlzdC5nZXQoZHJhZ0NoaXBJbmRleCAtIDEpLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5vcmlnaW5hbEV2ZW50LmtleSA9PT0gJ0Fycm93UmlnaHQnIHx8IGV2ZW50Lm9yaWdpbmFsRXZlbnQua2V5ID09PSAnUmlnaHQnKSB7XG4gICAgICAgICAgICAgICAgb3JkZXJDaGFuZ2VkID0gdGhpcy5wb3NpdGlvbkNoaXBBdEluZGV4KGRyYWdDaGlwSW5kZXgsIGRyYWdDaGlwSW5kZXggKyAxLCB0cnVlLCBldmVudC5vcmlnaW5hbEV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICgoZXZlbnQub3JpZ2luYWxFdmVudC5rZXkgPT09ICdBcnJvd0xlZnQnIHx8IGV2ZW50Lm9yaWdpbmFsRXZlbnQua2V5ID09PSAnTGVmdCcpICYmIGRyYWdDaGlwSW5kZXggPiAwKSB7XG4gICAgICAgICAgICAgICAgY2hpcHNBcnJheVtkcmFnQ2hpcEluZGV4IC0gMV0ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICgoZXZlbnQub3JpZ2luYWxFdmVudC5rZXkgPT09ICdBcnJvd1JpZ2h0JyB8fCBldmVudC5vcmlnaW5hbEV2ZW50LmtleSA9PT0gJ1JpZ2h0JykgJiZcbiAgICAgICAgICAgICAgICBkcmFnQ2hpcEluZGV4IDwgY2hpcHNBcnJheS5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgY2hpcHNBcnJheVtkcmFnQ2hpcEluZGV4ICsgMV0ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBvbkNoaXBNb3ZlU3RhcnQoZXZlbnQ6IElCYXNlQ2hpcEV2ZW50QXJncykge1xuICAgICAgICB0aGlzLm1vdmVTdGFydC5lbWl0KHtcbiAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGV2ZW50Lm9yaWdpbmFsRXZlbnQsXG4gICAgICAgICAgICBvd25lcjogdGhpc1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJvdGVjdGVkIG9uQ2hpcE1vdmVFbmQoZXZlbnQ6IElCYXNlQ2hpcEV2ZW50QXJncykge1xuICAgICAgICB0aGlzLm1vdmVFbmQuZW1pdCh7XG4gICAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBldmVudC5vcmlnaW5hbEV2ZW50LFxuICAgICAgICAgICAgb3duZXI6IHRoaXNcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBvbkNoaXBEcmFnRW50ZXIoZXZlbnQ6IElDaGlwRW50ZXJEcmFnQXJlYUV2ZW50QXJncykge1xuICAgICAgICBjb25zdCBkcm9wQ2hpcEluZGV4ID0gdGhpcy5jaGlwc0xpc3QudG9BcnJheSgpLmZpbmRJbmRleCgoZWwpID0+IGVsID09PSBldmVudC5vd25lcik7XG4gICAgICAgIGNvbnN0IGRyYWdDaGlwSW5kZXggPSB0aGlzLmNoaXBzTGlzdC50b0FycmF5KCkuZmluZEluZGV4KChlbCkgPT4gZWwgPT09IGV2ZW50LmRyYWdDaGlwKTtcbiAgICAgICAgaWYgKGRyYWdDaGlwSW5kZXggPCBkcm9wQ2hpcEluZGV4KSB7XG4gICAgICAgICAgICAvLyBmcm9tIHRoZSBsZWZ0IHRvIHJpZ2h0XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uQ2hpcEF0SW5kZXgoZHJhZ0NoaXBJbmRleCwgZHJvcENoaXBJbmRleCwgdHJ1ZSwgZXZlbnQub3JpZ2luYWxFdmVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBmcm9tIHRoZSByaWdodCB0byBsZWZ0XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uQ2hpcEF0SW5kZXgoZHJhZ0NoaXBJbmRleCwgZHJvcENoaXBJbmRleCwgZmFsc2UsIGV2ZW50Lm9yaWdpbmFsRXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBwb3NpdGlvbkNoaXBBdEluZGV4KGNoaXBJbmRleCwgdGFyZ2V0SW5kZXgsIHNoaWZ0UmVzdExlZnQsIG9yaWdpbmFsRXZlbnQpIHtcbiAgICAgICAgaWYgKGNoaXBJbmRleCA8IDAgfHwgdGhpcy5jaGlwc0xpc3QubGVuZ3RoIDw9IGNoaXBJbmRleCB8fFxuICAgICAgICAgICAgdGFyZ2V0SW5kZXggPCAwIHx8IHRoaXMuY2hpcHNMaXN0Lmxlbmd0aCA8PSB0YXJnZXRJbmRleCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2hpcHNBcnJheSA9IHRoaXMuY2hpcHNMaXN0LnRvQXJyYXkoKTtcbiAgICAgICAgY29uc3QgcmVzdWx0OiBJZ3hDaGlwQ29tcG9uZW50W10gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlwc0FycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoc2hpZnRSZXN0TGVmdCkge1xuICAgICAgICAgICAgICAgIGlmIChjaGlwSW5kZXggPD0gaSAmJiBpIDwgdGFyZ2V0SW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goY2hpcHNBcnJheVtpICsgMV0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaSA9PT0gdGFyZ2V0SW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goY2hpcHNBcnJheVtjaGlwSW5kZXhdKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChjaGlwc0FycmF5W2ldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0YXJnZXRJbmRleCA8IGkgJiYgaSA8PSBjaGlwSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goY2hpcHNBcnJheVtpIC0gMV0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaSA9PT0gdGFyZ2V0SW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goY2hpcHNBcnJheVtjaGlwSW5kZXhdKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChjaGlwc0FycmF5W2ldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tb2RpZmllZENoaXBzQXJyYXkgPSByZXN1bHQ7XG5cbiAgICAgICAgY29uc3QgZXZlbnREYXRhOiBJQ2hpcHNBcmVhUmVvcmRlckV2ZW50QXJncyA9IHtcbiAgICAgICAgICAgIGNoaXBzQXJyYXk6IHRoaXMubW9kaWZpZWRDaGlwc0FycmF5LFxuICAgICAgICAgICAgb3JpZ2luYWxFdmVudCxcbiAgICAgICAgICAgIG93bmVyOiB0aGlzXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMucmVvcmRlci5lbWl0KGV2ZW50RGF0YSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgb25DaGlwU2VsZWN0aW9uQ2hhbmdlKGV2ZW50OiBJQ2hpcFNlbGVjdEV2ZW50QXJncykge1xuICAgICAgICBsZXQgc2VsZWN0ZWRDaGlwcyA9IHRoaXMuY2hpcHNMaXN0LmZpbHRlcigoY2hpcCkgPT4gY2hpcC5zZWxlY3RlZCk7XG4gICAgICAgIGlmIChldmVudC5zZWxlY3RlZCAmJiAhc2VsZWN0ZWRDaGlwcy5pbmNsdWRlcyhldmVudC5vd25lcikpIHtcbiAgICAgICAgICAgIHNlbGVjdGVkQ2hpcHMucHVzaChldmVudC5vd25lcik7XG4gICAgICAgIH0gZWxzZSBpZiAoIWV2ZW50LnNlbGVjdGVkICYmIHNlbGVjdGVkQ2hpcHMuaW5jbHVkZXMoZXZlbnQub3duZXIpKSB7XG4gICAgICAgICAgICBzZWxlY3RlZENoaXBzID0gc2VsZWN0ZWRDaGlwcy5maWx0ZXIoKGNoaXApID0+IGNoaXAuaWQgIT09IGV2ZW50Lm93bmVyLmlkKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KHtcbiAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGV2ZW50Lm9yaWdpbmFsRXZlbnQsXG4gICAgICAgICAgICBuZXdTZWxlY3Rpb246IHNlbGVjdGVkQ2hpcHMsXG4gICAgICAgICAgICBvd25lcjogdGhpc1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iLCI8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4iXX0=
|
|
332
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hpcHMtYXJlYS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvY2hpcHMvY2hpcHMtYXJlYS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvY2hpcHMvY2hpcHMtYXJlYS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULGVBQWUsRUFFZixZQUFZLEVBQ1osV0FBVyxFQUNYLEtBQUssRUFHTCxNQUFNLEVBTVQsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNILGdCQUFnQixFQUtuQixNQUFNLGtCQUFrQixDQUFDO0FBRTFCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQWUvQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFLSCxNQUFNLE9BQU8scUJBQXFCO0lBcUk5QixZQUFtQixHQUFzQixFQUFTLE9BQW1CLEVBQ3pELGdCQUFpQztRQUQxQixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUFTLFlBQU8sR0FBUCxPQUFPLENBQVk7UUFDekQscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFpQjtRQXBJN0M7OztXQUdHO1FBRUksVUFBSyxHQUFHLEVBQUUsQ0FBQztRQWNsQjs7Ozs7OztXQU9HO1FBRUssU0FBSSxHQUFHLFNBQVMsQ0FBQztRQUV6Qjs7Ozs7Ozs7V0FRRztRQUVLLGNBQVMsR0FBRyxXQUFXLENBQUM7UUEwQmhDOzs7Ozs7OztXQVFHO1FBRUksWUFBTyxHQUFHLElBQUksWUFBWSxFQUE4QixDQUFDO1FBRWhFOzs7Ozs7Ozs7V0FTRztRQUVJLG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQTZCLENBQUM7UUFF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QUFTO3NCQURuQixXQUFXO3VCQUFDLFlBQVk7Z0JBaUJqQixJQUFJO3NCQURWLFdBQVc7dUJBQUMsV0FBVztnQkFhakIsU0FBUztzQkFEZixXQUFXO3VCQUFDLGlCQUFpQjtnQkFheEIsS0FBSztzQkFGWCxXQUFXO3VCQUFDLGdCQUFnQjs7c0JBQzVCLEtBQUs7Z0JBYUMsTUFBTTtzQkFGWixXQUFXO3VCQUFDLGlCQUFpQjs7c0JBQzdCLEtBQUs7Z0JBYUMsT0FBTztzQkFEYixNQUFNO2dCQWNBLGVBQWU7c0JBRHJCLE1BQU07Z0JBWUEsU0FBUztzQkFEZixNQUFNO2dCQVlBLE9BQU87c0JBRGIsTUFBTTtnQkFjQSxTQUFTO3NCQURmLGVBQWU7dUJBQUMsZ0JBQWdCLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0QmluZGluZyxcbiAgICBJbnB1dCxcbiAgICBJdGVyYWJsZURpZmZlcixcbiAgICBJdGVyYWJsZURpZmZlcnMsXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBEb0NoZWNrLFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgT25EZXN0cm95LFxuICAgIEVsZW1lbnRSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICAgIElneENoaXBDb21wb25lbnQsXG4gICAgSUNoaXBTZWxlY3RFdmVudEFyZ3MsXG4gICAgSUNoaXBLZXlEb3duRXZlbnRBcmdzLFxuICAgIElDaGlwRW50ZXJEcmFnQXJlYUV2ZW50QXJncyxcbiAgICBJQmFzZUNoaXBFdmVudEFyZ3Ncbn0gZnJvbSAnLi9jaGlwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJRHJvcEJhc2VFdmVudEFyZ3MsIElEcmFnQmFzZUV2ZW50QXJncyB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvZHJhZy1kcm9wL2RyYWctZHJvcC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElCYXNlQ2hpcHNBcmVhRXZlbnRBcmdzIHtcbiAgICBvcmlnaW5hbEV2ZW50OiBJRHJhZ0Jhc2VFdmVudEFyZ3MgfCBJRHJvcEJhc2VFdmVudEFyZ3MgfCBLZXlib2FyZEV2ZW50IHwgTW91c2VFdmVudCB8IFRvdWNoRXZlbnQ7XG4gICAgb3duZXI6IElneENoaXBzQXJlYUNvbXBvbmVudDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQ2hpcHNBcmVhUmVvcmRlckV2ZW50QXJncyBleHRlbmRzIElCYXNlQ2hpcHNBcmVhRXZlbnRBcmdzIHtcbiAgICBjaGlwc0FycmF5OiBJZ3hDaGlwQ29tcG9uZW50W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNoaXBzQXJlYVNlbGVjdEV2ZW50QXJncyBleHRlbmRzIElCYXNlQ2hpcHNBcmVhRXZlbnRBcmdzIHtcbiAgICBuZXdTZWxlY3Rpb246IElneENoaXBDb21wb25lbnRbXTtcbn1cblxuLyoqXG4gKiBUaGUgY2hpcCBhcmVhIGFsbG93cyB5b3UgdG8gcGVyZm9ybSBtb3JlIGNvbXBsZXggc2NlbmFyaW9zIHdpdGggY2hpcHMgdGhhdCByZXF1aXJlIGludGVyYWN0aW9uLFxuICogbGlrZSBkcmFnZ2luZywgc2VsZWN0aW9uLCBuYXZpZ2F0aW9uLCBldGMuXG4gKlxuICogQGlneE1vZHVsZSBJZ3hDaGlwc01vZHVsZVxuICpcbiAqIEBpZ3hUaGVtZSBpZ3gtY2hpcC10aGVtZVxuICpcbiAqIEBpZ3hLZXl3b3JkcyBjaGlwIGFyZWEsIGNoaXBcbiAqXG4gKiBAaWd4R3JvdXAgZGlzcGxheVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sXG4gKiA8aWd4LWNoaXBzLWFyZWE+XG4gKiAgICA8aWd4LWNoaXAgKm5nRm9yPVwibGV0IGNoaXAgb2YgY2hpcExpc3RcIiBbaWRdPVwiY2hpcC5pZFwiPlxuICogICAgICAgIDxzcGFuPnt7Y2hpcC50ZXh0fX08L3NwYW4+XG4gKiAgICA8L2lneC1jaGlwPlxuICogPC9pZ3gtY2hpcHMtYXJlYT5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2lneC1jaGlwcy1hcmVhJyxcbiAgICB0ZW1wbGF0ZVVybDogJ2NoaXBzLWFyZWEuY29tcG9uZW50Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBJZ3hDaGlwc0FyZWFDb21wb25lbnQgaW1wbGVtZW50cyBEb0NoZWNrLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGNsYXNzID0gJyc7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmNsYXNzJylcbiAgICBwdWJsaWMgZ2V0IGhvc3RDbGFzcygpIHtcbiAgICAgICAgY29uc3QgY2xhc3NlcyA9IFsnaWd4LWNoaXAtYXJlYSddO1xuICAgICAgICBjbGFzc2VzLnB1c2godGhpcy5jbGFzcyk7XG5cbiAgICAgICAgcmV0dXJuIGNsYXNzZXMuam9pbignICcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGByb2xlYCBhdHRyaWJ1dGUgb2YgdGhlIGNoaXBzIGFyZWEuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgY2hpcHNBcmVhUm9sZSA9IHRoaXMuY2hpcHNBcmVhLnJvbGU7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgIEBIb3N0QmluZGluZygnYXR0ci5yb2xlJylcbiAgICAgcHVibGljIHJvbGUgPSAnbGlzdGJveCc7XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBgYXJpYS1sYWJlbGAgYXR0cmlidXRlIG9mIHRoZSBjaGlwcyBhcmVhLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGFyaWFMYWJlbCA9IHRoaXMuY2hpcHNBcmVhLmFyaWFMYWJlbDtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqL1xuICAgICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1sYWJlbCcpXG4gICAgIHB1YmxpYyBhcmlhTGFiZWwgPSAnY2hpcCBhcmVhJztcblxuICAgIC8qKlxuICAgICAqIEFuIEBJbnB1dCBwcm9wZXJ0eSB0aGF0IHNldHMgdGhlIHdpZHRoIG9mIHRoZSBgSWd4Q2hpcHNBcmVhQ29tcG9uZW50YC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2hpcHMtYXJlYSAjY2hpcHNBcmVhIFt3aWR0aF09XCInMzAwJ1wiIFtoZWlnaHRdPVwiJzEwJ1wiIChvblJlb3JkZXIpPVwiY2hpcHNPcmRlckNoYW5nZWQoJGV2ZW50KVwiPjwvaWd4LWNoaXBzLWFyZWE+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS53aWR0aC5weCcpXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgd2lkdGg6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIEFuIEBJbnB1dCBwcm9wZXJ0eSB0aGF0IHNldHMgdGhlIGhlaWdodCBvZiB0aGUgYElneENoaXBzQXJlYUNvbXBvbmVudGAuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNoaXBzLWFyZWEgI2NoaXBzQXJlYSBbd2lkdGhdPVwiJzMwMCdcIiBbaGVpZ2h0XT1cIicxMCdcIiAob25SZW9yZGVyKT1cImNoaXBzT3JkZXJDaGFuZ2VkKCRldmVudClcIj48L2lneC1jaGlwcy1hcmVhPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnc3R5bGUuaGVpZ2h0LnB4JylcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBoZWlnaHQ6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIEVtaXRzIGFuIGV2ZW50IHdoZW4gYElneENoaXBDb21wb25lbnRgcyBpbiB0aGUgYElneENoaXBzQXJlYUNvbXBvbmVudGAgc2hvdWxkIGJlIHJlb3JkZXJlZC5cbiAgICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIGBJZ3hDaGlwQ29tcG9uZW50YHMuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNoaXBzLWFyZWEgI2NoaXBzQXJlYSBbd2lkdGhdPVwiJzMwMCdcIiBbaGVpZ2h0XT1cIicxMCdcIiAob25SZW9yZGVyKT1cImNoYW5nZWRPcmRlcigkZXZlbnQpXCI+PC9pZ3gtY2hpcHMtYXJlYT5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgcmVvcmRlciA9IG5ldyBFdmVudEVtaXR0ZXI8SUNoaXBzQXJlYVJlb3JkZXJFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0cyBhbiBldmVudCB3aGVuIGFuIGBJZ3hDaGlwQ29tcG9uZW50YCBpbiB0aGUgYElneENoaXBzQXJlYUNvbXBvbmVudGAgaXMgc2VsZWN0ZWQvZGVzZWxlY3RlZC5cbiAgICAgKiBGaXJlZCBhZnRlciB0aGUgY2hpcHMgYXJlYSBpcyBpbml0aWFsaXplZCBpZiB0aGVyZSBhcmUgaW5pdGlhbGx5IHNlbGVjdGVkIGNoaXBzIGFzIHdlbGwuXG4gICAgICogUmV0dXJucyBhbiBhcnJheSBvZiBzZWxlY3RlZCBgSWd4Q2hpcENvbXBvbmVudGBzIGFuZCB0aGUgYElneENoaXBBcmVhQ29tcG9uZW50YC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2hpcHMtYXJlYSAjY2hpcHNBcmVhIFt3aWR0aF09XCInMzAwJ1wiIFtoZWlnaHRdPVwiJzEwJ1wiIChzZWxlY3Rpb25DaGFuZ2UpPVwic2VsZWN0aW9uKCRldmVudClcIj48L2lneC1jaGlwcy1hcmVhPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBzZWxlY3Rpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPElDaGlwc0FyZWFTZWxlY3RFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0cyBhbiBldmVudCB3aGVuIGFuIGBJZ3hDaGlwQ29tcG9uZW50YCBpbiB0aGUgYElneENoaXBzQXJlYUNvbXBvbmVudGAgaXMgbW92ZWQuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNoaXBzLWFyZWEgI2NoaXBzQXJlYSBbd2lkdGhdPVwiJzMwMCdcIiBbaGVpZ2h0XT1cIicxMCdcIiAobW92ZVN0YXJ0KT1cIm1vdmVTdGFydCgkZXZlbnQpXCI+PC9pZ3gtY2hpcHMtYXJlYT5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgbW92ZVN0YXJ0ID0gbmV3IEV2ZW50RW1pdHRlcjxJQmFzZUNoaXBzQXJlYUV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXRzIGFuIGV2ZW50IGFmdGVyIGFuIGBJZ3hDaGlwQ29tcG9uZW50YCBpbiB0aGUgYElneENoaXBzQXJlYUNvbXBvbmVudGAgaXMgbW92ZWQuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNoaXBzLWFyZWEgI2NoaXBzQXJlYSBbd2lkdGhdPVwiJzMwMCdcIiBbaGVpZ2h0XT1cIicxMCdcIiAobW92ZUVuZCk9XCJtb3ZlRW5kKCRldmVudClcIj48L2lneC1jaGlwcy1hcmVhPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBtb3ZlRW5kID0gbmV3IEV2ZW50RW1pdHRlcjxJQmFzZUNoaXBzQXJlYUV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEhvbGRzIHRoZSBgSWd4Q2hpcENvbXBvbmVudGAgaW4gdGhlIGBJZ3hDaGlwc0FyZWFDb21wb25lbnRgLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbmdBZnRlclZpZXdJbml0KCl7XG4gICAgICogICAgbGV0IGNoaXBzID0gdGhpcy5jaGlwc0FyZWEuY2hpcHNMaXN0O1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkcmVuKElneENoaXBDb21wb25lbnQsIHsgZGVzY2VuZGFudHM6IHRydWUgfSlcbiAgICBwdWJsaWMgY2hpcHNMaXN0OiBRdWVyeUxpc3Q8SWd4Q2hpcENvbXBvbmVudD47XG5cbiAgICBwcm90ZWN0ZWQgZGVzdHJveSQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuXG4gICAgcHJpdmF0ZSBtb2RpZmllZENoaXBzQXJyYXk6IElneENoaXBDb21wb25lbnRbXTtcbiAgICBwcml2YXRlIF9kaWZmZXI6IEl0ZXJhYmxlRGlmZmVyPElneENoaXBDb21wb25lbnQ+IHwgbnVsbCA9IG51bGw7XG5cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHVibGljIGVsZW1lbnQ6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgX2l0ZXJhYmxlRGlmZmVyczogSXRlcmFibGVEaWZmZXJzKSB7XG4gICAgICAgIHRoaXMuX2RpZmZlciA9IHRoaXMuX2l0ZXJhYmxlRGlmZmVycy5maW5kKFtdKS5jcmVhdGUobnVsbCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIC8vIElmIHdlIGhhdmUgaW5pdGlhbGx5IHNlbGVjdGVkIGNoaXBzIHRocm91Z2ggdGhlaXIgaW5wdXRzLCB3ZSBuZWVkIHRvIGdldCB0aGVtLCBiZWNhdXNlIHdlIGNhbm5vdCBsaXN0ZW4gdG8gdGhlaXIgZXZlbnRzIHlldC5cbiAgICAgICAgaWYgKHRoaXMuY2hpcHNMaXN0Lmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRDaGlwcyA9IHRoaXMuY2hpcHNMaXN0LmZpbHRlcigoaXRlbTogSWd4Q2hpcENvbXBvbmVudCkgPT4gaXRlbS5zZWxlY3RlZCk7XG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWRDaGlwcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbmV3U2VsZWN0aW9uOiBzZWxlY3RlZENoaXBzLFxuICAgICAgICAgICAgICAgICAgICBvd25lcjogdGhpc1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBuZ0RvQ2hlY2soKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmNoaXBzTGlzdCkge1xuICAgICAgICAgICAgY29uc3QgY2hhbmdlcyA9IHRoaXMuX2RpZmZlci5kaWZmKHRoaXMuY2hpcHNMaXN0LnRvQXJyYXkoKSk7XG4gICAgICAgICAgICBpZiAoY2hhbmdlcykge1xuICAgICAgICAgICAgICAgIGNoYW5nZXMuZm9yRWFjaEFkZGVkSXRlbSgoYWRkZWRDaGlwKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGFkZGVkQ2hpcC5pdGVtLm1vdmVTdGFydC5waXBlKHRha2VVbnRpbChhZGRlZENoaXAuaXRlbS5kZXN0cm95JCkpLnN1YnNjcmliZSgoYXJncykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkNoaXBNb3ZlU3RhcnQoYXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBhZGRlZENoaXAuaXRlbS5tb3ZlRW5kLnBpcGUodGFrZVVudGlsKGFkZGVkQ2hpcC5pdGVtLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChhcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uQ2hpcE1vdmVFbmQoYXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBhZGRlZENoaXAuaXRlbS5kcmFnRW50ZXIucGlwZSh0YWtlVW50aWwoYWRkZWRDaGlwLml0ZW0uZGVzdHJveSQpKS5zdWJzY3JpYmUoKGFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25DaGlwRHJhZ0VudGVyKGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkZWRDaGlwLml0ZW0ua2V5RG93bi5waXBlKHRha2VVbnRpbChhZGRlZENoaXAuaXRlbS5kZXN0cm95JCkpLnN1YnNjcmliZSgoYXJncykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkNoaXBLZXlEb3duKGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFkZGVkQ2hpcC5pdGVtLnNlbGVjdGFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZGVkQ2hpcC5pdGVtLnNlbGVjdGVkQ2hhbmdpbmcucGlwZSh0YWtlVW50aWwoYWRkZWRDaGlwLml0ZW0uZGVzdHJveSQpKS5zdWJzY3JpYmUoKGFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uQ2hpcFNlbGVjdGlvbkNoYW5nZShhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5tb2RpZmllZENoaXBzQXJyYXkgPSB0aGlzLmNoaXBzTGlzdC50b0FycmF5KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XG4gICAgICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJvdGVjdGVkIG9uQ2hpcEtleURvd24oZXZlbnQ6IElDaGlwS2V5RG93bkV2ZW50QXJncykge1xuICAgICAgICBsZXQgb3JkZXJDaGFuZ2VkID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGNoaXBzQXJyYXkgPSB0aGlzLmNoaXBzTGlzdC50b0FycmF5KCk7XG4gICAgICAgIGNvbnN0IGRyYWdDaGlwSW5kZXggPSBjaGlwc0FycmF5LmZpbmRJbmRleCgoZWwpID0+IGVsID09PSBldmVudC5vd25lcik7XG4gICAgICAgIGlmIChldmVudC5vcmlnaW5hbEV2ZW50LnNoaWZ0S2V5ID09PSB0cnVlKSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQub3JpZ2luYWxFdmVudC5rZXkgPT09ICdBcnJvd0xlZnQnIHx8IGV2ZW50Lm9yaWdpbmFsRXZlbnQua2V5ID09PSAnTGVmdCcpIHtcbiAgICAgICAgICAgICAgICBvcmRlckNoYW5nZWQgPSB0aGlzLnBvc2l0aW9uQ2hpcEF0SW5kZXgoZHJhZ0NoaXBJbmRleCwgZHJhZ0NoaXBJbmRleCAtIDEsIGZhbHNlLCBldmVudC5vcmlnaW5hbEV2ZW50KTtcbiAgICAgICAgICAgICAgICBpZiAob3JkZXJDaGFuZ2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGlwc0xpc3QuZ2V0KGRyYWdDaGlwSW5kZXggLSAxKS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQub3JpZ2luYWxFdmVudC5rZXkgPT09ICdBcnJvd1JpZ2h0JyB8fCBldmVudC5vcmlnaW5hbEV2ZW50LmtleSA9PT0gJ1JpZ2h0Jykge1xuICAgICAgICAgICAgICAgIG9yZGVyQ2hhbmdlZCA9IHRoaXMucG9zaXRpb25DaGlwQXRJbmRleChkcmFnQ2hpcEluZGV4LCBkcmFnQ2hpcEluZGV4ICsgMSwgdHJ1ZSwgZXZlbnQub3JpZ2luYWxFdmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoKGV2ZW50Lm9yaWdpbmFsRXZlbnQua2V5ID09PSAnQXJyb3dMZWZ0JyB8fCBldmVudC5vcmlnaW5hbEV2ZW50LmtleSA9PT0gJ0xlZnQnKSAmJiBkcmFnQ2hpcEluZGV4ID4gMCkge1xuICAgICAgICAgICAgICAgIGNoaXBzQXJyYXlbZHJhZ0NoaXBJbmRleCAtIDFdLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoKGV2ZW50Lm9yaWdpbmFsRXZlbnQua2V5ID09PSAnQXJyb3dSaWdodCcgfHwgZXZlbnQub3JpZ2luYWxFdmVudC5rZXkgPT09ICdSaWdodCcpICYmXG4gICAgICAgICAgICAgICAgZHJhZ0NoaXBJbmRleCA8IGNoaXBzQXJyYXkubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgIGNoaXBzQXJyYXlbZHJhZ0NoaXBJbmRleCArIDFdLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgb25DaGlwTW92ZVN0YXJ0KGV2ZW50OiBJQmFzZUNoaXBFdmVudEFyZ3MpIHtcbiAgICAgICAgdGhpcy5tb3ZlU3RhcnQuZW1pdCh7XG4gICAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBldmVudC5vcmlnaW5hbEV2ZW50LFxuICAgICAgICAgICAgb3duZXI6IHRoaXNcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBvbkNoaXBNb3ZlRW5kKGV2ZW50OiBJQmFzZUNoaXBFdmVudEFyZ3MpIHtcbiAgICAgICAgdGhpcy5tb3ZlRW5kLmVtaXQoe1xuICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogZXZlbnQub3JpZ2luYWxFdmVudCxcbiAgICAgICAgICAgIG93bmVyOiB0aGlzXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgb25DaGlwRHJhZ0VudGVyKGV2ZW50OiBJQ2hpcEVudGVyRHJhZ0FyZWFFdmVudEFyZ3MpIHtcbiAgICAgICAgY29uc3QgZHJvcENoaXBJbmRleCA9IHRoaXMuY2hpcHNMaXN0LnRvQXJyYXkoKS5maW5kSW5kZXgoKGVsKSA9PiBlbCA9PT0gZXZlbnQub3duZXIpO1xuICAgICAgICBjb25zdCBkcmFnQ2hpcEluZGV4ID0gdGhpcy5jaGlwc0xpc3QudG9BcnJheSgpLmZpbmRJbmRleCgoZWwpID0+IGVsID09PSBldmVudC5kcmFnQ2hpcCk7XG4gICAgICAgIGlmIChkcmFnQ2hpcEluZGV4IDwgZHJvcENoaXBJbmRleCkge1xuICAgICAgICAgICAgLy8gZnJvbSB0aGUgbGVmdCB0byByaWdodFxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbkNoaXBBdEluZGV4KGRyYWdDaGlwSW5kZXgsIGRyb3BDaGlwSW5kZXgsIHRydWUsIGV2ZW50Lm9yaWdpbmFsRXZlbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gZnJvbSB0aGUgcmlnaHQgdG8gbGVmdFxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbkNoaXBBdEluZGV4KGRyYWdDaGlwSW5kZXgsIGRyb3BDaGlwSW5kZXgsIGZhbHNlLCBldmVudC5vcmlnaW5hbEV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcG9zaXRpb25DaGlwQXRJbmRleChjaGlwSW5kZXgsIHRhcmdldEluZGV4LCBzaGlmdFJlc3RMZWZ0LCBvcmlnaW5hbEV2ZW50KSB7XG4gICAgICAgIGlmIChjaGlwSW5kZXggPCAwIHx8IHRoaXMuY2hpcHNMaXN0Lmxlbmd0aCA8PSBjaGlwSW5kZXggfHxcbiAgICAgICAgICAgIHRhcmdldEluZGV4IDwgMCB8fCB0aGlzLmNoaXBzTGlzdC5sZW5ndGggPD0gdGFyZ2V0SW5kZXgpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNoaXBzQXJyYXkgPSB0aGlzLmNoaXBzTGlzdC50b0FycmF5KCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdDogSWd4Q2hpcENvbXBvbmVudFtdID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpcHNBcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHNoaWZ0UmVzdExlZnQpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2hpcEluZGV4IDw9IGkgJiYgaSA8IHRhcmdldEluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGNoaXBzQXJyYXlbaSArIDFdKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGkgPT09IHRhcmdldEluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGNoaXBzQXJyYXlbY2hpcEluZGV4XSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goY2hpcHNBcnJheVtpXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodGFyZ2V0SW5kZXggPCBpICYmIGkgPD0gY2hpcEluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGNoaXBzQXJyYXlbaSAtIDFdKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGkgPT09IHRhcmdldEluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGNoaXBzQXJyYXlbY2hpcEluZGV4XSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goY2hpcHNBcnJheVtpXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMubW9kaWZpZWRDaGlwc0FycmF5ID0gcmVzdWx0O1xuXG4gICAgICAgIGNvbnN0IGV2ZW50RGF0YTogSUNoaXBzQXJlYVJlb3JkZXJFdmVudEFyZ3MgPSB7XG4gICAgICAgICAgICBjaGlwc0FycmF5OiB0aGlzLm1vZGlmaWVkQ2hpcHNBcnJheSxcbiAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQsXG4gICAgICAgICAgICBvd25lcjogdGhpc1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLnJlb3JkZXIuZW1pdChldmVudERhdGEpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJvdGVjdGVkIG9uQ2hpcFNlbGVjdGlvbkNoYW5nZShldmVudDogSUNoaXBTZWxlY3RFdmVudEFyZ3MpIHtcbiAgICAgICAgbGV0IHNlbGVjdGVkQ2hpcHMgPSB0aGlzLmNoaXBzTGlzdC5maWx0ZXIoKGNoaXApID0+IGNoaXAuc2VsZWN0ZWQpO1xuICAgICAgICBpZiAoZXZlbnQuc2VsZWN0ZWQgJiYgIXNlbGVjdGVkQ2hpcHMuaW5jbHVkZXMoZXZlbnQub3duZXIpKSB7XG4gICAgICAgICAgICBzZWxlY3RlZENoaXBzLnB1c2goZXZlbnQub3duZXIpO1xuICAgICAgICB9IGVsc2UgaWYgKCFldmVudC5zZWxlY3RlZCAmJiBzZWxlY3RlZENoaXBzLmluY2x1ZGVzKGV2ZW50Lm93bmVyKSkge1xuICAgICAgICAgICAgc2VsZWN0ZWRDaGlwcyA9IHNlbGVjdGVkQ2hpcHMuZmlsdGVyKChjaGlwKSA9PiBjaGlwLmlkICE9PSBldmVudC5vd25lci5pZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdCh7XG4gICAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBldmVudC5vcmlnaW5hbEV2ZW50LFxuICAgICAgICAgICAgbmV3U2VsZWN0aW9uOiBzZWxlY3RlZENoaXBzLFxuICAgICAgICAgICAgb3duZXI6IHRoaXNcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIiwiPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuIl19
|